diff --git a/docs/lib/math.js b/docs/lib/math.js
index 8528d001d..99dab14c1 100644
--- a/docs/lib/math.js
+++ b/docs/lib/math.js
@@ -214,7 +214,7 @@ function math_exp( x ) {}
* computes subtracting 1 from the
* exponential function of x
(e raised to the power of x
, where e is the base of
* the natural logarithms). The result is computed in a way that is accurate even
- * when the value of x
is close 0.
+ * when the value of x
is close to 0.
* @param {number} x
- given number
* @returns {number} -1 plus e to the power of x
*/
diff --git a/docs/md/README_4_GPU.md b/docs/md/README_4_GPU.md
new file mode 100644
index 000000000..4df7fcdd4
--- /dev/null
+++ b/docs/md/README_4_GPU.md
@@ -0,0 +1,104 @@
+Source §4 GPU is a small programming language, designed to allow users to accelerate their programs
+by making use of their GPUs!
+
+## What names are predeclared in Source §4 GPU?
+
+On the right, you see all predeclared names of Source §4, in alphabetical
+order. Click on a name to see how it is used. They come in these two groups:
+
+ -
+ MISC: Miscellaneous constants and functions
+
+ -
+ MATH: Mathematical constants and functions
+
+ -
+ LISTS: Support for lists
+
+ -
+ PAIRMUTATORS: Mutating pairs
+
+ -
+ ARRAYS: Support for arrays
+
+ -
+ STREAMS: Support for streams
+
+ -
+ MCE: Support for the meta-circular evaluator
+
+
+
+The Source Academy,
+a learning environment that uses SICP JS and Source, comes with the following
+external libraries:
+
+ -
+ RUNES: Library for runes graphics
+
+ -
+ CURVES: Library for curve graphics
+
+ -
+ SOUNDS: Library for sound processing
+
+ -
+ BINARYTREES: Library for binary trees
+
+ -
+ PIX&FLIX: image and video processing
+
+
+
+## What can you do in Source §4 GPU?
+
+You can write for loops as per normal source and if certain conditions are met, the GPU will
+be invoked to run the program!
+
+### Example:
+
+```=javascript
+const size = 100;
+
+const L = [];
+const R = [];
+for (let r = 0; r < size; r = r + 1) {
+ L[r] = [];
+ R[r] = [];
+ for (let c = 0; c < size; c = c + 1) {
+ L[r][c] = r*c;
+ R[r][c] = r + c;
+ }
+}
+
+const res = [];
+for (let r = 0; r < size; r = r + 1) {
+ res[r] = [];
+}
+
+const startTime = runtime();
+for (let r = 0; r < size; r = r + 1) {
+ for (let c = 0; c < size; c = c + 1) {
+ let sum = 0;
+ for (let i = 0; i < size; i = i + 1) {
+ sum = sum + L[r][i] * R[i][c];
+ }
+ res[r][c] = sum;
+ }
+}
+
+const endTime = runtime();
+const elapsed = endTime - startTime;
+
+display(res);
+display(elapsed, "Time taken: ");
+```
+
+## You want the definitive specs?
+
+For our development team, we are maintaining a definitive description
+of the language, called the
+Specification of Source §4 GPU. Feel free to
+take a peek!
+
+
diff --git a/docs/md/README_top.md b/docs/md/README_top.md
index c42fc6162..114c27bd2 100644
--- a/docs/md/README_top.md
+++ b/docs/md/README_top.md
@@ -27,6 +27,8 @@
## Source §4
+## Source §4 GPU
+
## External Libraries
The Source Academy,
diff --git a/docs/specs/source_1_infinite_loop_detection.tex b/docs/specs/source_1_infinite_loop_detection.tex
new file mode 100644
index 000000000..f2438b225
--- /dev/null
+++ b/docs/specs/source_1_infinite_loop_detection.tex
@@ -0,0 +1,921 @@
+\input source_header.tex
+
+\newtheorem{example}{Example}[section]
+
+\newtheorem{exercise}{Exercise}[section]
+
+\newtheorem{excursion}{Excursion}[section]
+
+\newtheorem{definition}{Definition}[section]
+
+\newtheorem{theorem}{Theorem}[section]
+
+\newtheorem{lemma}{Lemma}[section]
+
+\newtheorem{corollary}{Corollary}[section]
+
+\newtheorem{proposition}{Proposition}[section]
+
+\newenvironment{proof}{%
+\noindent
+\textbf{Proof:}
+}%
+{
+\hfill \qed\\
+\medskip
+}
+
+\newcommand{\qed}{$\Box$}
+
+\newcommand{\Rule}[2]{\genfrac{}{}{0.7pt}{}{{\setlength{\fboxrule}{0pt}\setlength{\fboxsep}{3mm}\fbox{$#1$}}}{{\setlength{\fboxrule}{0pt}\setlength{\fboxsep}{3mm}\fbox{$#2$}}}}
+
+\newcommand{\Rulee}[3]{\genfrac{}{}{0.7pt}{}{{\setlength{\fboxrule}{0pt}\setlength{\fboxsep}{3mm}\fbox{$#1$}}}{{\setlength{\fboxrule}{0pt}\setlength{\fboxsep}{3mm}\fbox{$#2$}}}[#3]}
+
+\newcommand{\under}{|}
+\newcommand{\eval}{\to}
+\newcommand{\transition}{\rightrightarrows_s}
+\newcommand{\translate}{\twoheadrightarrow}
+\newcommand{\translateaux}{\hookrightarrow}
+\newcommand{\TruE}{\textbf{\texttt{true}}}
+\newcommand{\FalsE}{\textbf{\texttt{false}}}
+
+\begin{document}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \docheader{2021}{Source}{\S 1 Infinite Loop Detection}{Joey Chen}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Introduction}
+In this report we detail the full specification and method behind the Infinite Loop Detector.
+
+We will first begin by introducing the notion of a {\it State Transition System} and use it to define and derive results on infinite loops.
+
+Next, we will derive a denotational semantics for {\it Source} programs where we will be able to extract Symbolic information about the programs, which can then be used to build the state transition system.
+
+The sets will then be used by the {\it analyzer} to prove the existence of an infinite loop, using theorems in the first section.
+
+\section{Objectives}
+Our main goal for this project is to create a tool to detect infinite loops for students in the NUS module CS1101S, where students learn basic programming skills and CS fundamentals.
+
+Due to Turing's theorem, it is impossible to create a program that detects every instance of non-termination. To circumvent this issue, we can make use of the fact that programs students write for this module are fairly simplistic.
+
+Typical programs students write that encounter infinite loops tend to have a fairly simple control-flow structure that lends itself smoothly to analysis.
+We conducted a small survey and curated a list of common infinite loops. You can find them here: https://tinyurl.com/source-infloops
+
+Since this tool is meant to aid in students' learning, we will prioritize having no false positives. To ensure this, every detected infinite loop will implicitly contain a proof that the program will not terminate. More details in section 3 below.
+
+Another desirable would be to provide helpful error messages to the students, so that they are able to quickly debug and learn from their mistakes.
+\section{Preliminaries (Math)}
+
+\subsection{Definitions}
+We will adapt the notation in \textbf{[CS02]}, but modify it slightly to suit our purposes.
+
+A {\it state transition system} $\Sigma=$ consists of the following components:
+
+\begin{itemize}
+ \item $Names$, a finite set of function names, e.g. 'fac', or 'fib', etc. We define a special name $*$ called the {\it termination symbol}, to denote termination.
+
+ \item $Var$, a function which takes as input a function name, and returns a set of global variables used in the function, and variables used as arguments to the function. A {\it state} $\sigma_{name}$ is an assignment to all variables in $V_{name}$. An {\it assertion} is a first-order formula over a set of variables.
+
+ \item $T$, a finite set of {\it transitions}
+\end {itemize}
+
+\noindent
+A transition is a tuple $$, where:
+
+\begin{itemize}
+ \item $f \in Names$ is the function name of the caller function.
+ \item $g \in Names \cup \{*\}$ is either the function name of the callee function, or a special {\it terminate symbol}.
+ \item $q$ is an assertion over $Var(f)$ representing a sufficient condition for the transition to be executed.
+ \item $p$ is an assertion over $Var(f) \cup primed(Var(g))$, denoting the relation between the variables in the caller and the callee. We define a special set function, $primed$ that adds primes to all variable names to avoid any name clashes, i.e. $primed: x \mapsto x'$
+\end{itemize}
+
+A {\it program path} is a nonempty sequence $(,,...)$ of pairs containing a function name $name_i$ and a corresponding state in $Var(name_i)$, such that:
+
+\noindent
+For each adjacent pair $$ and $$, there exists $\tau= \in T$ and $name_i = f,\ name_{i+1} = g, \sigma_i \models q, (\sigma_i,\sigma_{i+1}) \models p$.
+
+\noindent
+The only exception is when $g$ is the termination symbol, then the sequence ends.
+
+A {\it computation} is a triple $<\Sigma, start, \Omega>$ where
+
+\begin{itemize}
+ \item $\Sigma$ is a state transition system
+ \item $start$ is one of the names in $\Sigma$
+ \item $\Omega$ is a state of $Var(start)$. $start$ and $\Omega$ represent the first function call in the computation.
+\end{itemize}
+
+\begin{example}
+ Consider the function fib:
+\begin{lstlisting}
+function fib(x) {
+ if(x===0 || x===1) {
+ return 1;
+ } else {
+ return fib(x-1) + fib(x-2);
+ }
+}
+\end{lstlisting}
+
+The corresponding state transition system for fib will be:
+$\Sigma := < Names, Var : Names \to V_{name}, T>$
+
+where
+\[
+Names = \{fib\}
+\]
+\[
+Var(fib) = \{x\}
+\]
+\[
+\begin{aligned}
+T = \{ &< fib, fib, (x>1), (x’=x-1) >, \\
+ & < fib, fib, (x>1), (x’=x-2) >, \\
+ & < fib, fib, (x<0), (x’=x-1) >, \\
+ & < fib, fib, (x<0), (x’=x-2) >, \\
+ & < fib, *, x=0, \top >, \\
+ & < fib, *, x=1, \top > \\
+ & \} \\
+\end{aligned}
+\]
+
+A program path will be:
+
+\[(< fib, x=4 >, < fib, x=2 >, < *, \top >)\]
+\[(< fib, x=4 >, < fib, x=3 >, < fib, x=1 >, < *, \top >)\]
+
+Note that different paths may start with the same pair. An infinite loop happens if any one of
+the paths are infinite.
+
+\end{example}
+
+
+We will use the following theorem to motivate our definition of termination and infinite loops.
+
+\begin{theorem}
+ The length of a program path is finite iff it contains the terminal symbol *.
+\end{theorem}
+
+\begin{proof}
+
+ finite $\Leftarrow$ contains $*$: by definition, once $*$ is encountered, the sequence ends.
+
+ finite $\Rightarrow$ contains $*$: consider otherwise, i.e. $*$ is not encountered, then let $n$ be the length of the sequence since it is finite.
+ Now, let $$ be the $n^{th}$, i.e. last element of the sequence. Then by hypothesis, $f_n$ is not $*$ and by definition, there will be another element $$ in the program path, so the length of the program path is greater than n, which is a contradiction.
+\end{proof}
+
+We say a program path {\it terminates} if it contains the termination symbol $*$.
+A computation {\it terminates} if all the possible program paths starting with $$ terminate.
+A computation is said to go into an {\it infinite loop} if it does not terminate.
+
+We will prove that a computation goes into an infinite loop by constructing a program path that does not have the termination symbol.
+
+\subsection{Immediate Results}
+From these definitions, we can already describe two very common classes of infinite loops: forgetting the base case and forgetting to update the state.
+
+
+\begin{theorem}
+ If for some $f$, $\forall \in T,\ f = g$ then any program path containing $f$ does not terminate.
+\end{theorem}
+
+This corresponds to the case where there is a missing base case.
+
+\begin{proof}
+ For some program path $, ,..., $, clearly $*$ is not present, and the path has not terminated yet.
+ By the hypothesis, the next call in the path will be $$. By induction, we can construct an infinitely long program path.
+\end{proof}
+
+\begin{example}
+ Consider the function fac:
+\begin{lstlisting}
+function fac(x) {
+ return x*fac(x-1);
+}
+\end{lstlisting}
+
+The corresponding transition set is
+\[
+ T = \{ < fac, fac, \top, (x’=x-1) > \}
+\]
+
+Using the previous theorem, any program path will be infinite, i.e.
+
+\[(, , , ...)\]
+
+\end{example}
+
+
+
+\begin{theorem}
+ If for some $f$, $\exists \in T,\exists \sigma s.t.\ f=g, \sigma\models q, (\sigma,primed(\sigma))\models p$, then any comptation containing $$ in one of its paths does not terminate.
+\end{theorem}
+
+This corresponds to the case where the state is not updated between function calls.
+
+\begin{proof}
+ For some program path $, ,..., $, clearly $*$ is not present, and the path has not terminated yet.
+ By the hypothesis, we can construct a program path which will contain $$ as the next call. By induction, we can construct an infinitely long program path.
+\end{proof}
+
+\begin{example}
+ Consider the function fac:
+\begin{lstlisting}
+function fac(x) {
+ if(x===0) {
+ return 1;
+ } else {
+ return x*fac(x);
+ }
+}
+\end{lstlisting}
+
+The corresponding transition set is
+\[
+ \begin{aligned}
+T = \{ &< fac, fac, (x>1), (x’=x) >, \\
+ & < fac, fac, (x<1), (x’=x) >, \\
+ & < fac, *, x=0, \top >, \\
+ & \} \\
+\end{aligned}
+\]
+
+Using the previous theorem, we can construct the infinite program path:
+
+\[(, , , ...)\]
+
+\end{example}
+
+
+\subsection{Countdown Functions}
+From an observation of simple programs in introductory program courses, most of the control flow statements are limited to inequalities involving an integer variable and constant.
+
+Integer inequalities involving only one variable are also very easy to manipulate algebraically, and every inequality can be written in the form $x < c$ where $x$ is an integer variable and $c$ is an integer constant. For example $x\geq 1$ is equivalent to $-x < -2$
+
+A common pattern in introductory programming exercises is managing control flow with something we call a 'countdown variable'. The example below will better illustrate this point.
+
+%\lstset{language=Javascript}
+\begin{lstlisting}
+function fac(x) {
+ if(x===0) {
+ return 1;
+ } else {
+ return fac(x-1);
+ }
+}
+\end{lstlisting}
+
+In this code snippet, we notice 3 things:
+\begin{enumerate}
+ \item A single integer value $x$ is used for control flow, depending on whether $x=0$ or $x\neq 0$.
+ \item One branch of the $if$ statement terminates the program, while the other calls $fac$ recursively, but with its argument $x-1$.
+ \item If $x<0$, the program will go into an infinite loop.
+\end{enumerate}
+
+We can generalize this to include functions where control flow is dependent only on an inequality involving a single integer variable and an integer constant, and this variable is only incremented/decremented by another integer constant in each recursive function call.
+
+For convenience we define $T_{name}=\{\in T~|~f=name\}$
+
+\begin{theorem}
+ If for some $f$, $x \in Var(f)$, $T_f = \{,\}$, where $c, d \in \mathbb{Z}, d > 0$, then any program path containing $$ will not terminate.
+\end{theorem}
+
+\begin{proof}
+ For some program path $, ,..., $, clearly $*$ is not present, and the path has not terminated yet.
+ let $c_1$ be the value of x, and $c_{i+1} = c_i - d$. Then, since $c_1 < c$, and $c_{i+1} < c$, $\forall i c_i < c$.
+ Then using the first transition in the transition set, we can construct an infinitely long program path $, ..., , ...$.
+
+\end{proof}
+
+\begin{corollary}
+ If for some $f$, $x \in Var(f)$, $T_f = \{,\}$, where $c, d \in \mathbb{Z}, d > 0$, then any program path containing $ c >$ will not terminate.
+\end{corollary}
+
+\begin{proof}
+ simply repeat the previous proof, replacing $-$ with $+$, and $<$ with $>$.
+\end{proof}
+
+\section{Implementation}
+
+Now that we have a mathematical foundation for our analysis of infinite loops, we only need to link it to the syntax of Source programs.
+Our goal will be to first obtain the function transition set of the program, then test it for non-termination.
+
+The implementation will consist of 3 stages: the symbolic executor, the serializer and the analyzer.
+
+The symbolic executor will convert the Source AST into another tree-like structure as an intermediate value, which will then be used by the serializer to build the function transition set.
+
+The analyzer will then use the function transition sets to produce domains where the functions will enter an infinite loop, using the theorems above.
+
+The process goes something like this:
+
+$S_4 \to_{Symbolic Executor} Symbol \to_{Serializer} T(f) \to_{Analyzer} D $
+
+
+\subsection{Symbolic Execution}
+
+The symbolic executor will in essence, summarize the AST into a tree of symbols which contain algebraic data about the program.
+
+\subsubsection{Symbols}
+We will introduce a few symbols that we use below.
+
+\begin{itemize}
+\item A {\it Literal Value symbol} will be used to represent literal integer or boolean values. These symbols will be used mainly for intermediate computation and evaluation.
+
+We will denote this symbol by $LV(x)$ where $x$ is a literal value, for example $LV(4)$ represents the number 4.
+
+\item The {\it Number symbol} will be used to represent algebraic expressions involving the sum of an integer variable and a constant, for example $x+1$.
+
+ We will denote number symbols by $N(x,c,sign)$ where $x$ is the name of the variable, $c$ is the constant value, and $sign$ is the sign of $x$ ($1$ for positive or $-1$ for negative).
+ e.g. we will denote $x+1$ by $N(x,1,1)$.
+
+\item The {\it Inequality symbol} will be used to represent equalities or inequalities between an integer variable and a constant, for example $x<20$.
+ We will denote inequality symbols by $Ineq(x,a,direction)$, where $x$ is the name of the variable, $a$ is the constant on the right hand side, and $direction$ is $-1$ for $<$, $0$ for $=$, and $1$ for $>$.
+
+\item A {\it Logical symbol} will be used to represent conjunctions or disjunctions between boolean symbols.
+ We will denote logical symbols by $L(B_1,B_2,type)$ where $B_1$ and $B_2$ are the boolean symbols, and $type$ is either $conjunction$ or $disjunction$.
+ An example is $L(Ineq(x,-1,-1),Ineq(x,1,1),conjunction)$ for $x<-1 \land x>1$.
+
+\item A {\it Boolean symbol} is an inequality symbol or a logical symbol.
+
+\item The {\it Branch symbol} will be used when processing if statements, and will contain a logical symbol for the condition, and 2 symbols for the consequent and alternate statements respectively.
+ We will denote branch symbols by $Br(B,Sym_1,Sym_2)$ where $B$ is a boolean or skip symbol, and $Sym_1$ and $Sym_2$ are arbitrary symbols.
+
+\item The {\it Sequence symbol} will be used to denote a list of symbols executed consecutively.
+ We will denote it with $Seq(Sym_1,...,Sym_n)$ where $Sym_1,...,Sym_n$ are arbitrary symbols.
+
+\item A {\it Function symbol} will be used to denote a function call and its arguments.
+ We will denote it by $F(f,x_1,...,x_n)$ where $f$ is the name of the function, and $x_1,...,x_n$ are its parameters.
+
+\item The {\it Termination symbol} will be used to denote that the program will terminate.
+ Similarly to section 2, we will use $*$ for the termination symbol.
+\end{itemize}
+
+Since we are only interested in the control-flow structure of the program, we will introduce a {\it skip} symbol to denote that we do not care about the result of evaluating the statement. For expressions we are unable to analyze, we will also use the skip symbol to denote that we are ignoring this expression.
+
+If the skip symbol is used in the construction of another symbol, we will return another skip symbol to denote that the construction does not make sense. Two exceptions are the branch and sequence symbols. To those familiar with functional programming, the skip symbol is similar to the {\it Optional} or {\it Maybe} monads used in languages such as Scala and Haskell.
+
+We summarize the symbols below.
+
+\begin{center}
+\begin{tabular}{|l|l|} \hline
+Symbol & Explanation\\ \hline
+\textbf{Num} & The algebraic expression $x+sign\cdot c$\\
+\textbf{Inequality} & The set $\{x|sign\cdot x E_2 \eval Ineq(x,a,sign)} \hfill
+\Rule{E_1 < E_2 \eval Ineq(x,a+1,sign)}
+ {E_1 <= E_2 \eval Ineq(x,a,-sign)}
+\]
+
+\[
+\Rule{E_1 < E_2 \eval Ineq(x,a-1,sign)}
+ {E_1 >= E_2 \eval Ineq(x,a,-sign)} \hfill
+\Rule{E_1 < E_2 \eval Ineq(x,a,sign)}
+ {E_1 === E_2 \eval Ineq(x,a,0)} \hfill
+\]
+
+\[
+\Rule{E_1 < E_2 \eval Ineq(x,a,sign)}
+ {E_1 !== E_2 \eval Neg(Ineq(x,a,0))}
+\]
+
+\noindent
+For logical symbols, our job is much simpler since both arguments can only be boolean symbols, we only need to wrap both of them up in a logical symbol.
+
+\[
+\Rule{E_1 \eval B_1 \qquad E_2 \eval B_2}
+ {E_1\ \&\&\ E_2 \eval L(B_1,B_2,conjunction)} \hfill
+\Rule{E_1 \eval B_1 \qquad E_2 \eval B_2}
+ {E_1\ ||\ E_2 \eval L(B_1,B_2,disjunction)}
+\]
+
+\noindent
+Lastly, we catch all other statements which do not fall under any of the previously defined rules under the following rule which simply produces a skip symbol.
+
+\[
+\Rule{E}
+ {E \eval Skip}
+\text{E does not have a rule}
+\]
+
+\begin{example}
+ Consider the function fac:
+\begin{lstlisting}
+function fac(x) {
+ if(x===0) {
+ return 1;
+ } else {
+ return x*fac(x-1);
+ }
+}
+\end{lstlisting}
+
+\noindent
+The symbolic executor will produce the following symbol tree:
+\begin{lstlisting}
+Seq(
+ Branch(
+ Ineq(x,0),
+ Seq(*),
+ Seq(
+ F(fac,N(x,-1))
+ )
+ )
+)
+\end{lstlisting}
+
+\end{example}
+
+
+
+\subsection{Serializer}
+After the symbolic executor is run, we will obtain a tree of symbols.
+We need one more step to turn this tree into a transition set before we can analyze it.
+
+\noindent
+We define a new function
+\[
+\cdot \mid \cdot \mapsto \cdot: Id\boldsymbol{*} Sym\to T
+\]
+inductively as follows:
+
+\[
+\Rule{}
+{Sym \mapsto_f \{\}}
+terminal(Sym)
+\]
+\[
+\Rule{}
+ {F(g,N(x_1,c,sign),N(x_2,c,sign),...) \mapsto_f \{\}}
+p = "sign\cdot x_1=c\land sign\cdot x_2=c \land ..."
+\]
+
+\[
+\Rule{E_1 \mapsto_f \{,...\} \quad E_2 \mapsto_f \{,...\}}
+ {Br(C,E_1,E_2) \mapsto_f \{,...\} \cup \{,...\}}
+\]
+\[
+\Rule{E_1 \mapsto_f S_1 \quad ... \quad E_n \mapsto_f S_n}
+ {Seq(E_1,...,E_n) \mapsto_f S_1 \cup ... \cup S_n}
+\]
+
+In practice, it will be convenient to re-use our symbols in our representation of transition sets,
+and we will do just that. Let $t = < F_1, F_2, B >$ be a representation of a transition, where
+
+
+\begin{itemize}
+\item $F_1$ is the function symbol of the caller function.
+\item $F_2$ is the function symbol of the callee function, or the termination symbol.
+\item $B$ is either a boolean symbol, or a null value.
+\end{itemize}
+
+One can see that this representation is isomorphic to our previous definition of a transition,
+$$ as $f$ and $g$ can be inferred from $F_1$ and $F_2$ respectively,
+$q$ can be inferred from $B$, with the null value meaning $q = \top$
+$p$ can be inferred by comparing the arguments in $F_1$ and $F_2$.
+
+\begin{example}
+ Consider the output from the previous example:
+\begin{lstlisting}
+Seq(
+ Branch(
+ Ineq(x,0),
+ Seq(*),
+ Seq(
+ F(fac,N(x,-1))
+ )
+ )
+)
+\end{lstlisting}
+
+ \noindent
+ The Serializer will produce the following:
+\begin{lstlisting}
+[
+ { caller: F(fac, N(x, 0)),
+ callee: F(fac, N(x, -1)),
+ condition: Ineq(x, 0, -1)
+ },
+ { caller: F(fac, N(x, 0)),
+ callee: F(fac, N(x, -1)),
+ condition: Ineq(x, 0, 1)
+ },
+ { caller: F(fac, N(x, 0)),
+ callee: *,
+ condition: Ineq(x, 0, 0)
+ },
+]
+\end{lstlisting}
+
+ \noindent
+ Which corresponds to the transition set:
+\[
+\begin{aligned}
+ T = \{ & < fac, fac, x > 0, (x’=x-1) > \\
+ & < fac, fac, x < 0, (x’=x-1) > \\
+ & < fac, *, x = 0, \top > \\
+\}
+\end{aligned}
+\]
+
+\end{example}
+
+
+\subsection{Analyzer}
+Now we are ready to use the transition sets to detect infinite loops.
+The idea is to:
+\begin{enumerate}
+\item Get a list of computations that result in an infinite loop.
+\item Extract the start symbol from that computation.
+\item Add an additional branch at the start of the original function which throws an error if the conditions in the start symbol are satisfied.
+\end{enumerate}
+
+To do this, we will apply our theorems in section 3 to the transition set, and modify the AST of the program accordingly. We illustrate with an example:
+
+\begin{example}
+ For the factorial function,
+\begin{lstlisting}
+function fac(x) {
+ if(x===0) {
+ return 1;
+ } else {
+ return x*fac(x);
+ }
+}
+\end{lstlisting}
+
+ \noindent
+ We will insert a line to throw an error.
+\begin{lstlisting}
+function fac(x) {
+ if(x<0){error ("infinite loop...")}else{}
+ if(x===0) {
+ return 1;
+ } else {
+ return x*fac(x);
+ }
+}
+\end{lstlisting}
+\noindent
+Since we know exactly which theorem we used in proving the infinite loop, we can write
+descriptive error messages for the student.
+
+\end{example}
+
+
+
+Note that since we are editing the program at the AST level, we can freely change the SourceLocation of the nodes we add, so that the error message produced points to the line of the desired function call.
+
+\subsection{Proof of finiteness}
+We have one more problem we need to address before we can use our infinite loop detector, that is,
+whether the infinite loop detector itself will run into an infinite loop!
+
+\begin{theorem}
+
+\end{theorem}
+The symbolic executor will terminate in finite time for finite inputs of code.
+
+
+\begin{proof}
+\noindent
+Firstly, note that for every rule in the symbolic executor being evaluated on statement $E$, the program will either
+\begin{enumerate}
+\item returns a symbol immediately, or
+\item recursively call the symbolic executor again, but on code that has length strictly less than statement $E$.
+\end{enumerate}
+
+If we assume that the symbolic executor goes into an infinite loop, by observation 2 above, this would imply
+that we started with an infinitely long input of code, which is a contradiction.
+
+\end{proof}
+
+Proof that the serializer is finite can be obtained using a similar argument as the above theorem.
+
+The Analyzer also only takes time linear to the length of the transition sets,
+since the theorems we currently have only require a linear scan through the transition sets.
+
+\section{Further work}
+Currently, our work is limited by
+\begin{enumerate}
+\item \textbf{Theory}: Since the focus for this project was on Source 1, we did not develop any theory
+ which would work for Source 2 and beyond. One idea for Source 2 would be to model lists by using
+ their lengths as size functions using the {\it size change principle} in \textbf{[LJBA01]}.
+\item \textbf{Lack of theorems}: The theorems in section 3 only cover a very small subset of infinite loops,
+ and does not cover several commonly used patterns such as mutal recursion.
+\item \textbf{Symbolic Executor is not expressive enough}: The symbolic executor is not able to turn many
+ expressions into symbols. For instance, multiplication is not supported at all. Being able to
+ represent more programs symbolically will allow us to prove more theorems about infinite loops on them.
+ There is still a need to keep the symbolic executor simple though, so a delicate balance needs to be kept.
+\item \textbf{Theorems in analyzer are hard to implement}: Manipulating transitions sets as they are
+ represented in Typescript records gets quite cumbersome as the complexity of the theorems increase, and
+ this will lead to many bugs.
+\end{enumerate}
+
+Although there is much room for improvement, we would like to emphasize that this tool is meant to
+be an aid to students, and should not become a hinderence to them. Therefore maintaining
+performance and a 0 false positive rate should still be prioritized over new features.
+
+\subsection{More theorems}
+Another commonly encountered pattern is mutual recursion.
+
+\begin{example}
+
+\end{example}
+
+We will briefly state an approach on how to detect infinite loops in the above example.
+Note that a typical computation for the above goes as follows:
+\[(, , , *)\]
+We will only encounter an infinite loop for negative values of x, similarly to the factorial function:
+\[(, , , ...)\]
+The idea on how to handle this is to split the computation up into 2 sequences, one for each function, i.e.
+\begin{enumerate}
+\item \[(, , ...)\]
+\item \[(, , ...)\]
+\end{enumerate}
+Notice that if we can prove that neither of the sequences terminate, the original sequence will also not
+terminate (since it will not contain the * symbol).
+We can also prove the non-termination of each sequence using the theorem on countdown functions.
+
+However, implementing this involves a lot of work and book keeping, and unfortunately, we did not have
+time to complete this before the project deadline. The next section elaborates on how this can be improved.
+
+\subsection{Alternative implementation of analyzer}
+As mentioned previously, manually manipulating the transition sets is very cumbersome and will lead to bugs.
+It may be fruitful to use another programming language to implement the theorem checking, or even
+a domain specific language.
+
+As a proof of concept, here's a quick (simplified) implementation of some of the above theorems (including
+mutual recursion) in Prolog.
+
+\begin{lstlisting}
+% online demo: https://swish.swi-prolog.org/p/source-infloops.pl
+:- use_module(library(clpfd)).
+
+transition(even, term, X, _) :- X #= 0.
+transition(even, odd, X, Y) :- X #\= 0, Y #= X - 1.
+
+transition(odd, term, X, _) :- X #= 0.
+transition(odd, even, X, Y) :- X #\= 0, Y #= X - 1.
+
+transition(fac, term, X, _) :- X #= 0.
+transition(fac, fac, X, Y) :- X #\= 0, Y #= X - 1.
+
+transition(f, f, X, Y) :- Y #= X-1.
+
+hasBaseCase(X) :- transition(X,Y,_,_), X\=Y.
+noBaseCase(X) :- \+ (hasBaseCase(X)).
+
+infCountdown(X, Y) :- transition(X, term, C1,
+ transition(X, X, Z, 0), Z #> C1, Y #< C1
+ \+ (transition(X, term, Y, _)).
+
+infCountdown(X, Y) :- transition(X, term, C1, _),
+ transition(X, X, Z, 0), Z #< C1, Y #> C1,
+ \+ (transition(X, term, Y, _)).
+
+nStepTransition(1, X, Y, Z, W) :- transition(X, Y, Z, W).
+nStepTransition(N, X, Y, Z, W) :- N \= 1, M is N-1,
+ nStepTransition(M, X, A, Z, B),
+ transition(A, Y, B, W).
+
+infCountdown2(X, Y) :- transition(X, term, C1, _),
+ nStepTransition(2, X, X, Z, 0), Z #> C1, Y #< C1,
+ \+ (transition(X, term, Y, _)),
+ \+ nStepTransition(2, X, term, Y, 0).
+
+% ?- noBaseCase(f). % true
+% ?- infCountdown(fac, X). % X in inf .. -1
+% ?- infCountdown2(even, X). % X in inf .. -1
+\end{lstlisting}
+
+As shown above, constraint logic programming finds a good fit in this project.
+
+\subsection{Imperative programming}
+Another improvement will be to provide support for Source 3. This is very difficult
+as having impure functions will complicate the theory.
+
+\section{References}
+\textbf{[CS02]} Michael C\'olon and Henny Sipma. Practical methods for proving pro-gram termination. In {\it Proceedings of the 14th International Confer-ence on Computer Aided Verification}, CAV 02, page 442454, Berlin,Heidelberg, 2002. Springer-Verlag.
+
+
+
+\textbf{[LJBA01]} Chin Soon Lee, Neil D. Jones, and Amir M. Ben-Amram. The size-change principle for program termination. {\it SIGPLAN Not.},36(3):8192, January 2001.
+
+
+\end{document}
\ No newline at end of file
diff --git a/docs/specs/source_4_gpu.tex b/docs/specs/source_4_gpu.tex
new file mode 100644
index 000000000..92efd076f
--- /dev/null
+++ b/docs/specs/source_4_gpu.tex
@@ -0,0 +1,179 @@
+\input source_header.tex
+
+\begin{document}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \docheader{2021}{Source}{\S 4 GPU}{Martin Henz, Rahul Rajesh, Zhang Yuntong}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input source_intro.tex
+
+\section*{Changes}
+
+Source \S 4 GPU allows for Source programs to be accelerated on the GPU if certain conditions are met.
+The exact specifications for this is outlined on page \pageref{gpu_supp}. Source \S 4 GPU defines a formal specification
+to identify areas in the program that are embarrssingly parallel (e.g. for loops etc.) . These will then
+be run in parallel across GPU threads. Experimentation has shown that Source \S 4 GPU is orders of magnitude faster
+than Source \S 4 for heavy CPU bound tasks (matrix multiplication of large matrices)
+
+\input source_bnf.tex
+
+\input source_3_bnf.tex
+
+\newpage
+
+\input source_boolean_operators
+
+\input source_loops
+
+\input source_return_3
+
+\input source_names
+
+\input source_lists
+
+\input source_pair_mutators
+
+\input source_array_support
+
+\input source_streams
+
+\input source_numbers
+
+\input source_strings
+
+\input source_arrays
+
+\input source_typing_3
+
+\input source_interpreter
+
+\input source_comments
+
+\input source_js_differences
+
+\newpage
+
+\section*{GPU Acceleration}
+\label{gpu_supp}
+This section outlines the specifications for programs to be accelerated using the GPU.\
+\input source_gpu_bnf.tex
+
+\newpage
+
+\section*{Restrictions}
+
+Even if the BNF syntax is met, GPU acceleration can only take place if all the restrictions below are satisfied. If all criteria are met, the \textit{gpu\_statement} loops are embarrassingly parallel.
+
+\subsection*{Special For Loops}
+
+In the BNF, we have special loops that take on this form:
+\begin{alignat*}{9}
+&& \textbf{\texttt{for}}\ \textbf{\texttt{(}}
+ \ \textit{gpu\_for\_let} \textbf{\texttt{;}} \\
+&& \ \ \textit{gpu\_condition} \textbf{\texttt{;}} \\
+&& \textit{gpu\_for\_assignment} \ \textbf{\texttt{)}}
+\end{alignat*}
+
+These are the loops that will be taken into consideration for parallelization. However, on top of the BNF syntax, the below requirement must also be statisfied:
+
+\begin{itemize}
+ \item{the names declared in each \textit{gpu\_for\_let} have to be different across the loops}
+ \item{in each loop, the \textit{gpu\_condition} and the \textit{gpu\_for\_assignment} must use the name declared
+ in the respective \textit{gpu\_for\_let} statement}
+\end{itemize}
+
+\subsection*{GPU Function}
+
+A \textit{gpu\_function} has to be a \textit{math\_\texttt{*}} function
+
+\subsection*{Core Statement}
+
+Within \textit{core\_statement}, there are some constraints:
+
+\begin{itemize}
+ \item{no assignment to any global variables (all assignments can only be done to variables defined in the \textit{gpu\_block}})
+ \item{no use of the variable in \textit{gpu\_result\_assignment} at an offset from the current index e.g. cannot be i - 1}
+\end{itemize}
+
+\subsection*{GPU Result Statement}
+
+The \textit{gpu\_result\_assignment} is the statement that stores a value calculated in core statements into a result array.
+It access an array at a certain coordinate e.g. ${array[{i_1}][{i_2}][{i_3}]}$. For this:
+
+\begin{itemize}
+ \item{This result array has to be defined outside the \textit{gpu\_block}.}
+ \item{The sequence of coordinates which we access in the result array ${{i_1}, {i_2}, {i_3} ... i_{k}}$ must be a
+ prefix of the special for loop counters ${[c_1,c_2 ... c_n]}$.}
+ \item{ If you have ${n}$ special for loops, the array expression can take on ${k}$ coordinates where ${0 < k \leq n}$.
+ The order matters as well, it has to follow the same order as the special for loops: you cannot have ${name[c_2][c_1]}$.}
+\end{itemize}
+
+\section*{Examples}
+
+Below are some examples of valid and invalid source gpu programs:\\
+
+\textbf{Valid} - Using first loop counter. (meaning the loop will be run across N threads; the first loop is parallelized away):
+\begin{verbatim}
+for (let i = 0; i < N; i = i + 1) {
+ for (let k = 0; k < M; k = k + 1) {
+ res[i] = arr[k % 2] + 1;
+ }
+}
+\end{verbatim}
+
+\textbf{Invalid} - Counter used is not a prefix of for loop counters:
+\begin{verbatim}
+for (let i = 0; i < N; i = i + 1) {
+ for (let k = 0; k < M; k = k + 1) {
+ res[k] = arr[i % 2] + 1;
+ }
+}
+\end{verbatim}
+
+\textbf{Valid} - Using first three loop counters (meaning the loop will be run across N*M*C threads, if available):
+\begin{verbatim}
+for (let i = 0; i < N; i = i + 1) {
+ for (let j = 0; j < M; j = j + 1) {
+ for (let k = 0; k < C; k = k + 1) {
+ let x = math_pow(2, 10);
+ let y = x * (1000);
+ arr[i][j][k] = (x + y * 2);
+ }
+ }
+}
+\end{verbatim}
+
+\textbf{Invalid} - Indices are in wrong order (must respect for loop counter orders):
+\begin{verbatim}
+for (let i = 0; i < N; i = i + 1) {
+ for (let j = 0; j < M; j = j + 1) {
+ for (let k = 0; k < C; k = k + 1) {
+ let x = math_pow(2, 10);
+ let y = x * (1000);
+ res[k][j][i] = (x + y * 2);
+ }
+ }
+}
+\end{verbatim}
+
+\textbf{Invalid} - Using an index that is not part of a special for loop (see above):
+\begin{verbatim}
+for (let i = 0; i < N; i = i + 1) {
+ for (let j = 0; j < M; j = j + 1) {
+ for (let k = 1; k < C; k = k + 2) {
+ res[k] = arr1[i] + arr2[j];
+ }
+ }
+}
+\end{verbatim}
+
+\newpage
+
+\input source_list_library
+
+\newpage
+
+\input source_stream_library
+
+
+\end{document}
diff --git a/docs/specs/source_gpu_bnf.tex b/docs/specs/source_gpu_bnf.tex
new file mode 100644
index 000000000..6b81ef782
--- /dev/null
+++ b/docs/specs/source_gpu_bnf.tex
@@ -0,0 +1,71 @@
+\begin{alignat*}{9}
+ && \textit{gpu\_statement}
+ &&\quad ::= &\quad
+ && \textbf{\texttt{for}}\ \textbf{\texttt{(}}
+ \ \textit{gpu\_for\_let} \textbf{\texttt{;}} \\
+ && && &\quad && \ \ \ \ \ \ \ \ \textit{gpu\_condition} \textbf{\texttt{;}} \\
+ && && &\quad && \ \ \ \ \ \ \ \ \textit{gpu\_for\_assignment} \ \textbf{\texttt{)}} \ gpu\_block \textbf{\texttt{;}} \\
+ && \textit{gpu\_for\_let}
+ &&\quad ::= &\quad
+ && \textbf{\texttt{let}}\ \textit{name} \
+ \textbf{\texttt{=}}\ \textbf{\texttt{0}} \ \textbf{\texttt{;}} \\
+ && \textit{gpu\_for\_condition}
+ &&\quad ::= &\quad
+ && \textit{name} \
+ \textbf{\texttt{<}}\ (\textit{number} \ | \ \textit{name})\ \textbf{\texttt{;}} \\
+ && && | &\quad && \textit{name} \ \textbf{\texttt{<=}}\ (\textit{number} \ | \ \textit{name})\ \textbf{\texttt{;}} \\
+ && \textit{gpu\_for\_assignment}
+ &&\quad ::= &\quad
+ && \textit{name} \ \textbf{\texttt{=}}\ \textit{name} \ \textbf{\texttt{+}} \ \textbf{\texttt{1}} \ \textbf{\texttt{;}} \\
+ && \textit{gpu\_block}
+ &&\quad ::= &\quad
+ && \{ \ \textit{gpu\_statement} \ \} \ | \ \{ \ \textit{core\_statements} \ \} \\
+ && \textit{core\_statements}
+ &&\quad ::= &\quad
+ && \textit{core\_statement} {\ldots} \ \textit{gpu\_result\_assignment} \\
+ && \textit{gpu\_result\_assignment}
+ &&\quad ::= &\quad
+ && \textit{gpu\_access} \textbf{\texttt{[}} \textit{gpu\_name} \textbf{\texttt{]}}\ \textbf{\texttt{=}}\ \textit{gpu\_result} \ \textbf{\texttt{;}} \\
+ && \textit{gpu\_access}
+ &&\quad ::= &\quad && \textit{name} \ | \
+ \textit{gpu\_access} \textbf{\texttt{[}} \textit{gpu\_name} \textbf{\texttt{]}}\ \\
+ && \textit{gpu\_result}
+ &&\quad ::= &\quad && \textit{number} \ | \
+ \textbf{\texttt{[}}\ \textit{gpu\_result} {\ldots}\ \textbf{\texttt{]}}\ \\
+ && \textit{core\_statement}
+ &&\quad ::= &\quad
+ && \textbf{\texttt{const}}\ \textit{name} \
+ \textbf{\texttt{=}}\ \textit{gpu\_expression} \ \textbf{\texttt{;}} \\
+ && && | &\quad && \textit{gpu\_let} \ \textbf{\texttt{;}} \\
+ && && | &\quad && \textit{gpu\_assignment} \ \textbf{\texttt{;}} \\
+ && && | &\quad && \textit{gpu\_expression} \textbf{\texttt{[}} \textit{gpu\_expression} \textbf{\texttt{]}}\ \textbf{\texttt{=}}\ \textit{gpu\_expression} \ \textbf{\texttt{;}} \\
+ && && | &\quad && \textbf{\texttt{while}} \textbf{\texttt{(}}\ \textit{gpu\_expression} \ \textbf{\texttt{)}} \ \textit{gpu\_block} \\
+ && && | &\quad && \textbf{\texttt{for}}\ \textbf{\texttt{(}}
+ \ ( \ \textit{gpu\_assignment} \ | \ \textit{gpu\_let} \ )\textbf{\texttt{;}} \\
+ && && &\quad && \ \ \ \ \ \ \ \ \textit{gpu\_expression} \textbf{\texttt{;}} \\
+ && && &\quad && \ \ \ \ \ \ \ \ \textit{gpu\_assignment} \ ) \ gpu\_block \\
+ && \textit{gpu\_assignment}
+ &&\quad ::= &\quad
+ && \textit{name} \ \textbf{\texttt{=}}\ \textit{gpu\_expression} \\
+ && \textit{gpu\_let}
+ &&\quad ::= &\quad
+ && \textbf{\texttt{let}} \ \textit{name} \ \textbf{\texttt{=}}\ \textit{gpu\_expression} \\
+ && \textit{gpu\_expression}
+ &&\quad ::= &\quad
+ && \textit{number} \\
+ && && | &\quad && \textbf{\texttt{true}} \ | \ \textbf{\texttt{false}} \\
+ && && | &\quad && \textbf{\texttt{null}} \\
+ && && | &\quad && \textit{name}\\
+ && && | &\quad && \textit{string}\\
+ && && | &\quad && \textit{gpu\_expression} \ \textit{binary\_operator} \ \textit{gpu\_expression} \\
+ && && | &\quad && \textit{unary\_operator} \ \textit{gpu\_expression} \\
+ && && | &\quad && \textit{gpu\_function} ( \ \textit{gpu\_expressions} \ ) \\
+ && && | &\quad && \textit{gpu\_expression} \ \textbf{\texttt{?}} \ \textit{gpu\_expression} \ \textbf{\texttt{:}} \ \textit{gpu\_expression} \\
+ && && | &\quad && \textit{gpu\_expression} \ [ \ \ \textit{gpu\_expression} \ ] \ \\
+ && && | &\quad && [ \ \ \textit{gpu\_expressions} \ ] \ \\
+ && && | &\quad && ( \ \ \textit{gpu\_expression} \ ) \ \\
+ && \textit{gpu\_expressions}
+ &&\quad ::= &\quad
+ && \epsilon \ | \ \textit{gpu\_expression} \ ( \ \ , \ \textit{gpu\_expression} \ )
+ \ {\ldots}
+ \end{alignat*}
\ No newline at end of file
diff --git a/package.json b/package.json
index c45eed01e..dcb764185 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "js-slang",
- "version": "0.4.40",
+ "version": "0.4.42",
"description": "Javascript-based implementations of Source, written in Typescript",
"keywords": [
"JavaScript",
@@ -26,7 +26,8 @@
"lodash": "^4.17.13",
"node-getopt": "^0.3.2",
"source-map": "^0.7.3",
- "xmlhttprequest-ts": "^1.0.1"
+ "xmlhttprequest-ts": "^1.0.1",
+ "gpu.js": "^2.9.3"
},
"main": "dist/index",
"types": "dist/index",
diff --git a/scripts/jsdoc.sh b/scripts/jsdoc.sh
index e7d51b4bc..c2ac284f5 100755
--- a/scripts/jsdoc.sh
+++ b/scripts/jsdoc.sh
@@ -136,6 +136,19 @@ run() {
${LIB}/array.js \
${LIB}/pairmutator.js \
${LIB}/mce.js
+
+ # Source §4 GPU
+
+ ${JSDOC} -r -t ${TMPL} \
+ -c docs/jsdoc/conf.json \
+ -R ${MD}/README_4_GPU.md \
+ -d ${DST}/"source_4_gpu"/ \
+ ${LIB}/misc.js \
+ ${LIB}/math.js \
+ ${LIB}/list.js \
+ ${LIB}/stream.js \
+ ${LIB}/array.js \
+ ${LIB}/pairmutator.js
# MISC
diff --git a/src/__tests__/index.ts b/src/__tests__/index.ts
index 044c66cf4..6e37b66f5 100644
--- a/src/__tests__/index.ts
+++ b/src/__tests__/index.ts
@@ -41,19 +41,19 @@ test('Arrow function definition returns itself', () => {
test('Builtins hide their implementation when stringify', () => {
return expectResult('stringify(pair);', { chapter: 2, native: true }).toMatchInlineSnapshot(`
-"function pair(left, right) {
- [implementation hidden]
-}"
-`)
+ "function pair(left, right) {
+ [implementation hidden]
+ }"
+ `)
})
test('Builtins hide their implementation when toString', () => {
return expectResult('toString(pair);', { chapter: 2, native: true, testBuiltins: { toString } })
.toMatchInlineSnapshot(`
-"function pair(left, right) {
- [implementation hidden]
-}"
-`)
+ "function pair(left, right) {
+ [implementation hidden]
+ }"
+ `)
})
test('Objects toString matches up with JS', () => {
@@ -117,23 +117,23 @@ test('parseError for missing semicolon', () => {
test('Simple arrow function infinite recursion represents CallExpression well', () => {
return expectParsedErrorNoErrorSnapshot('(x => x(x)(x))(x => x(x)(x));').toMatchInlineSnapshot(`
-"Line 1: Maximum call stack size exceeded
- x(x => x(x)(x)).. x(x => x(x)(x)).. x(x => x(x)(x)).."
-`)
+ "Line 1: Maximum call stack size exceeded
+ x(x => x(x)(x)).. x(x => x(x)(x)).. x(x => x(x)(x)).."
+ `)
}, 30000)
test('Simple function infinite recursion represents CallExpression well', () => {
return expectParsedErrorNoErrorSnapshot('function f(x) {return x(x)(x);} f(f);')
.toMatchInlineSnapshot(`
-"Line 1: Maximum call stack size exceeded
- x(function f(x) {
- return x(x)(x);
-}).. x(function f(x) {
- return x(x)(x);
-}).. x(function f(x) {
- return x(x)(x);
-}).."
-`)
+ "Line 1: Maximum call stack size exceeded
+ x(function f(x) {
+ return x(x)(x);
+ }).. x(function f(x) {
+ return x(x)(x);
+ }).. x(function f(x) {
+ return x(x)(x);
+ }).."
+ `)
}, 30000)
test('Cannot overwrite consts even when assignment is allowed', () => {
@@ -172,9 +172,9 @@ test('Arrow function infinite recursion with list args represents CallExpression
`,
{ chapter: 2 }
).toMatchInlineSnapshot(`
-"Line 1: Maximum call stack size exceeded
- f([1, [2, null]]).. f([1, [2, null]]).. f([1, [2, null]]).."
-`)
+ "Line 1: Maximum call stack size exceeded
+ f([1, [2, null]]).. f([1, [2, null]]).. f([1, [2, null]]).."
+ `)
}, 30000)
test('Function infinite recursion with list args represents CallExpression well', () => {
@@ -185,9 +185,9 @@ test('Function infinite recursion with list args represents CallExpression well'
`,
{ chapter: 2 }
).toMatchInlineSnapshot(`
-"Line 1: Maximum call stack size exceeded
- f([1, [2, null]]).. f([1, [2, null]]).. f([1, [2, null]]).."
-`)
+ "Line 1: Maximum call stack size exceeded
+ f([1, [2, null]]).. f([1, [2, null]]).. f([1, [2, null]]).."
+ `)
}, 30000)
test('Arrow function infinite recursion with different args represents CallExpression well', () => {
@@ -204,7 +204,9 @@ test('Function infinite recursion with different args represents CallExpression
function f(i) { return f(i+1) - 1; }
f(0);
`).toEqual(
- expect.stringMatching(/^Line 1: Maximum call stack size exceeded\n\ *(f\(\d*\)[^f]{2,4}){3}/)
+ expect.stringMatching(
+ /^Line 1: Error: \"Infinite recursion \(or runtime error\) detected. Did you forget your base case\?\"/
+ )
)
}, 30000)
diff --git a/src/__tests__/mode.ts b/src/__tests__/mode.ts
index 0a3f23889..02920ea61 100644
--- a/src/__tests__/mode.ts
+++ b/src/__tests__/mode.ts
@@ -21,7 +21,7 @@ const CATEGORY = {
types: /\bstorage.type\b/,
forbidden: /\bvariable.language\b/,
keywords: /\bkeyword\b/,
- consts: /\bconstant.language\b/,
+ consts: /\bbuiltinconsts\b/,
number: /\bconstant.numeric\b/,
bool: /\bconstant.language.boolean\b/
}
diff --git a/src/__tests__/stringify.ts b/src/__tests__/stringify.ts
index 07c24a089..0ac31c827 100644
--- a/src/__tests__/stringify.ts
+++ b/src/__tests__/stringify.ts
@@ -38,10 +38,10 @@ test('String representation of functions are nice', () => {
`,
{ native: true }
).toMatchInlineSnapshot(`
-"function f(x, y) {
- return x;
-}"
-`)
+ "function f(x, y) {
+ return x;
+ }"
+ `)
})
test('String representation of arrow functions are nice', () => {
@@ -102,96 +102,96 @@ test('String representation of huge lists are nice', () => {
`,
{ chapter: 2, native: true }
).toMatchInlineSnapshot(`
-"[ 1,
-[ 2,
-[ 3,
-[ 4,
-[ 5,
-[ 6,
-[ 7,
-[ 8,
-[ 9,
-[ 10,
-[ 11,
-[ 12,
-[ 13,
-[ 14,
-[ 15,
-[ 16,
-[ 17,
-[ 18,
-[ 19,
-[ 20,
-[ 21,
-[ 22,
-[ 23,
-[ 24,
-[ 25,
-[ 26,
-[ 27,
-[ 28,
-[ 29,
-[ 30,
-[ 31,
-[ 32,
-[ 33,
-[ 34,
-[ 35,
-[ 36,
-[ 37,
-[ 38,
-[ 39,
-[ 40,
-[ 41,
-[ 42,
-[ 43,
-[ 44,
-[ 45,
-[ 46,
-[ 47,
-[ 48,
-[ 49,
-[ 50,
-[ 51,
-[ 52,
-[ 53,
-[ 54,
-[ 55,
-[ 56,
-[ 57,
-[ 58,
-[ 59,
-[ 60,
-[ 61,
-[ 62,
-[ 63,
-[ 64,
-[ 65,
-[ 66,
-[ 67,
-[ 68,
-[ 69,
-[ 70,
-[ 71,
-[ 72,
-[ 73,
-[ 74,
-[ 75,
-[ 76,
-[ 77,
-[ 78,
-[ 79,
-[ 80,
-[ 81,
-[ 82,
-[ 83,
-[ 84,
-[ 85,
-[ 86,
-[ 87,
-[ 88,
-[89, [90, [91, [92, [93, [94, [95, [96, [97, [98, [99, [100, null]]]]]]]]]]]] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]"
-`)
+ "[ 1,
+ [ 2,
+ [ 3,
+ [ 4,
+ [ 5,
+ [ 6,
+ [ 7,
+ [ 8,
+ [ 9,
+ [ 10,
+ [ 11,
+ [ 12,
+ [ 13,
+ [ 14,
+ [ 15,
+ [ 16,
+ [ 17,
+ [ 18,
+ [ 19,
+ [ 20,
+ [ 21,
+ [ 22,
+ [ 23,
+ [ 24,
+ [ 25,
+ [ 26,
+ [ 27,
+ [ 28,
+ [ 29,
+ [ 30,
+ [ 31,
+ [ 32,
+ [ 33,
+ [ 34,
+ [ 35,
+ [ 36,
+ [ 37,
+ [ 38,
+ [ 39,
+ [ 40,
+ [ 41,
+ [ 42,
+ [ 43,
+ [ 44,
+ [ 45,
+ [ 46,
+ [ 47,
+ [ 48,
+ [ 49,
+ [ 50,
+ [ 51,
+ [ 52,
+ [ 53,
+ [ 54,
+ [ 55,
+ [ 56,
+ [ 57,
+ [ 58,
+ [ 59,
+ [ 60,
+ [ 61,
+ [ 62,
+ [ 63,
+ [ 64,
+ [ 65,
+ [ 66,
+ [ 67,
+ [ 68,
+ [ 69,
+ [ 70,
+ [ 71,
+ [ 72,
+ [ 73,
+ [ 74,
+ [ 75,
+ [ 76,
+ [ 77,
+ [ 78,
+ [ 79,
+ [ 80,
+ [ 81,
+ [ 82,
+ [ 83,
+ [ 84,
+ [ 85,
+ [ 86,
+ [ 87,
+ [ 88,
+ [89, [90, [91, [92, [93, [94, [95, [96, [97, [98, [99, [100, null]]]]]]]]]]]] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]"
+ `)
})
// tslint:enable:max-line-length
@@ -206,107 +206,107 @@ test('String representation of huge arrays are nice', () => {
`,
{ chapter: 3, native: true }
).toMatchInlineSnapshot(`
-"[ 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99 ]"
-`)
+ "[ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99 ]"
+ `)
})
test('String representation of objects are nice', () => {
@@ -339,19 +339,19 @@ test('String representation of big objects are nice', () => {
`,
{ chapter: 100, native: true }
).toMatchInlineSnapshot(`
-"{ \\"a\\": 1,
- \\"b\\": true,
- \\"c\\": () => 1,
- \\"d\\": {\\"e\\": 5, \\"f\\": 6},
- \\"g\\": 0,
- \\"h\\": 0,
- \\"i\\": 0,
- \\"j\\": 0,
- \\"k\\": 0,
- \\"l\\": 0,
- \\"m\\": 0,
- \\"n\\": 0 }"
-`)
+ "{ \\"a\\": 1,
+ \\"b\\": true,
+ \\"c\\": () => 1,
+ \\"d\\": {\\"e\\": 5, \\"f\\": 6},
+ \\"g\\": 0,
+ \\"h\\": 0,
+ \\"i\\": 0,
+ \\"j\\": 0,
+ \\"k\\": 0,
+ \\"l\\": 0,
+ \\"m\\": 0,
+ \\"n\\": 0 }"
+ `)
})
test('String representation of nested objects are nice', () => {
@@ -372,10 +372,10 @@ test('String representation of builtins are nice', () => {
`,
{ chapter: 2, native: true }
).toMatchInlineSnapshot(`
-"function pair(left, right) {
- [implementation hidden]
-}"
-`)
+ "function pair(left, right) {
+ [implementation hidden]
+ }"
+ `)
})
test('String representation of null is nice', () => {
@@ -415,10 +415,10 @@ test('String representation with 1 space indent', () => {
`,
{ chapter: 4, native: true }
).toMatchInlineSnapshot(`
-"[\\"function_definition\\",
-[[[\\"name\\", [\\"x\\", null]], null],
-[[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null]]]"
-`)
+ "[\\"function_definition\\",
+ [[[\\"name\\", [\\"x\\", null]], null],
+ [[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null]]]"
+ `)
})
test('String representation with default (2 space) indent', () => {
@@ -428,10 +428,10 @@ test('String representation with default (2 space) indent', () => {
`,
{ chapter: 4, native: true }
).toMatchInlineSnapshot(`
-"[ \\"function_definition\\",
-[ [[\\"name\\", [\\"x\\", null]], null],
-[[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null] ] ]"
-`)
+ "[ \\"function_definition\\",
+ [ [[\\"name\\", [\\"x\\", null]], null],
+ [[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null] ] ]"
+ `)
})
test('String representation with more than 10 space indent should trim to 10 space indent', () => {
@@ -441,10 +441,10 @@ test('String representation with more than 10 space indent should trim to 10 spa
`,
{ chapter: 4, native: true }
).toMatchInlineSnapshot(`
-"[ \\"function_definition\\",
-[ [[\\"name\\", [\\"x\\", null]], null],
-[[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null] ] ]"
-`)
+ "[ \\"function_definition\\",
+ [ [[\\"name\\", [\\"x\\", null]], null],
+ [[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null] ] ]"
+ `)
})
test('String representation with custom indent', () => {
@@ -454,10 +454,10 @@ test('String representation with custom indent', () => {
`,
{ chapter: 4, native: true }
).toMatchInlineSnapshot(`
-"[... \\"function_definition\\",
-[... [[\\"name\\", [\\"x\\", null]], null],
-[[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null] ...] ...]"
-`)
+ "[... \\"function_definition\\",
+ [... [[\\"name\\", [\\"x\\", null]], null],
+ [[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null] ...] ...]"
+ `)
})
test('String representation with long custom indent gets trimmed to 10 characters', () => {
@@ -467,9 +467,9 @@ test('String representation with long custom indent gets trimmed to 10 character
`,
{ chapter: 4, native: true }
).toMatchInlineSnapshot(`
-"[.........\\"function_definition\\",
-[.........[[\\"name\\", [\\"x\\", null]], null],
-[[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null].........].........]"
-`)
+ "[.........\\"function_definition\\",
+ [.........[[\\"name\\", [\\"x\\", null]], null],
+ [[\\"return_statement\\", [[\\"name\\", [\\"x\\", null]], null]], null].........].........]"
+ `)
})
// tslint:enable:max-line-length
diff --git a/src/createContext.ts b/src/createContext.ts
index ca3b90eeb..ed615c7f8 100644
--- a/src/createContext.ts
+++ b/src/createContext.ts
@@ -12,6 +12,7 @@ import * as stream from './stdlib/stream'
import { streamPrelude } from './stdlib/stream.prelude'
import { Context, CustomBuiltIns, Value, Variant } from './types'
import * as operators from './utils/operators'
+import * as gpu_lib from './gpu/lib'
import { stringify } from './utils/stringify'
import { lazyListPrelude } from './stdlib/lazyList.prelude'
export class LazyBuiltIn {
@@ -59,7 +60,8 @@ export const createEmptyContext = (
}
const length = GLOBAL[GLOBAL_KEY_TO_ACCESS_NATIVE_STORAGE].push({
globals: { variables: new Map(), previousScope: null },
- operators: new Map(Object.entries(operators))
+ operators: new Map(Object.entries(operators)),
+ gpu: new Map(Object.entries(gpu_lib))
})
return {
chapter,
diff --git a/src/editors/ace/modes/source.ts b/src/editors/ace/modes/source.ts
index 8146c8f6c..4c5396854 100644
--- a/src/editors/ace/modes/source.ts
+++ b/src/editors/ace/modes/source.ts
@@ -105,7 +105,7 @@ export function HighlightRulesSelector(
// @ts-ignore
let keywordMapper = this.createKeywordMapper(
{
- 'constant.language': getAllNames('const'),
+ builtinconsts: getAllNames('const'),
'constant.language.boolean': 'true|false',
diff --git a/src/editors/ace/theme/source.ts b/src/editors/ace/theme/source.ts
index 90f08ef36..794722aac 100644
--- a/src/editors/ace/theme/source.ts
+++ b/src/editors/ace/theme/source.ts
@@ -84,7 +84,10 @@ function theme(acequire, exports, module) {
border-color: #FFFFFF\
}\
.ace-source .ace_support.ace_function {\
- color: #FFB054\
+ color: #FFFFFF\
+ }\
+ .ace-source .ace_builtinconsts {\
+ color: #FFFFFF\
}\
.ace-source .ace_storage {\
color: #FFEE80\
diff --git a/src/gpu/__tests__/noTranspile.ts b/src/gpu/__tests__/noTranspile.ts
new file mode 100644
index 000000000..b656f90f6
--- /dev/null
+++ b/src/gpu/__tests__/noTranspile.ts
@@ -0,0 +1,257 @@
+import { mockContext } from '../../mocks/context'
+import { parse } from '../../parser/parser'
+import { stripIndent } from '../../utils/formatters'
+import { transpile } from '../../transpiler/transpiler'
+
+test('empty for loop does not get transpiled', () => {
+ const code = stripIndent`
+ for (let i = 0; i < 10; i = i + 1) {}
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('simple for loop with different update does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 2) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('simple for loop with different loop variables does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ let j = 0;
+ for (let i = 0; j < 5; j = j + 1) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('simple for loop with const initialization does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ let j = 0;
+ for (const i = 0; i < 5; i = i + 1) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('simple for loop with non-zero initialization does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 1; i < 5; i = i + 1) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('simple for loop with a function end counter does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ let f = () => 5;
+ for (let i = 1; i < f(); i = i + 1) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('simple for loop with different initialization does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ let i = 0;
+ for (i = 0; i < 5; i = i + 2) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('simple for loop with global variable update does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ let y = 5;
+ for (let i = 0; i < 5; i = i + 1) {
+ y = y + 1;
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('simple for loop with function call does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ let y = () => 1;
+ for (let i = 0; i < 5; i = i + 1) {
+ y();
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('simple for loop with double update does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ res[i] = i;
+ res[i] = i + 1;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('2 for loops with wrong indice order does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ res[j][i] = i + 1;
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('2 for loops with wrong indices order does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ res[j] = i + 1;
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('2 for loop case with 2 indices being written + use of result variable[i-1][j] does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ res[i] = [];
+ for (let j = 0; j < 5; j = j + 1) {
+ res[i][j] = j;
+ }
+ }
+
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ let x = res[i-1][j];
+ let y = math_abs(x * -5);
+ res[i][j] = x + y;
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('3 for loops with wrong indice order does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ for (let k = 0; k < 5; k = k + 1) {
+ res[k][j][i] = i + 1;
+ }
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
+
+test('3 for loops with wrong indice order does not get transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ for (let k = 0; k < 5; k = k + 1) {
+ res[j][k] = i + 1;
+ }
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(2)
+})
diff --git a/src/gpu/__tests__/runtimeError.ts b/src/gpu/__tests__/runtimeError.ts
new file mode 100644
index 000000000..d7368cb10
--- /dev/null
+++ b/src/gpu/__tests__/runtimeError.ts
@@ -0,0 +1,38 @@
+/* tslint:disable:only-arrow-functions */
+import { __createKernel } from '../lib'
+import { TypeError } from '../../utils/rttc'
+
+test('__createKernel with uninitialized array throws error', () => {
+ const bounds = [5, 4]
+ const extern = {}
+ const f1 = function(this: any) {
+ return this.thread.y * this.thread.x
+ }
+
+ const arr: number[][] = []
+
+ const f2 = function(i: any, j: any) {
+ return i * j
+ }
+ const f = () => __createKernel(bounds, extern, f1, arr, f2)
+ expect(f).toThrow(TypeError)
+})
+
+test('__createKernel with 2 loops + uninitialized array throws error', () => {
+ const bounds = [5, 4, 3]
+ const extern = {}
+ const f1 = function(this: any) {
+ return this.thread.z * this.thread.y * this.thread.x
+ }
+
+ const arr: number[][][] = []
+ for (let i = 0; i < 5; i = i + 1) {
+ arr[i] = []
+ }
+
+ const f2 = function(i: any, j: any, k: any) {
+ return i * j * k
+ }
+ const f = () => __createKernel(bounds, extern, f1, arr, f2)
+ expect(f).toThrow(TypeError)
+})
diff --git a/src/gpu/__tests__/runtimeOk.ts b/src/gpu/__tests__/runtimeOk.ts
new file mode 100644
index 000000000..d46949c71
--- /dev/null
+++ b/src/gpu/__tests__/runtimeOk.ts
@@ -0,0 +1,184 @@
+/* tslint:disable:only-arrow-functions */
+import { __createKernel } from '../lib'
+
+test('__createKernel with 1 loop returns correct result', () => {
+ const bounds = [5]
+ const extern = {}
+ const f1 = function() {
+ return 1
+ }
+ const arr: number[] = []
+ const f2 = function(i: any) {
+ return 1
+ }
+ __createKernel(bounds, extern, f1, arr, f2)
+ expect(arr).toEqual([1, 1, 1, 1, 1])
+})
+
+test('__createKernel with 2 loops returns correct result', () => {
+ const bounds = [5, 4]
+ const extern = {}
+ const f1 = function(this: any) {
+ return this.thread.y * this.thread.x
+ }
+
+ const arr: number[][] = []
+ for (let i = 0; i < 5; i = i + 1) {
+ arr[i] = []
+ }
+
+ const f2 = function(i: any, j: any) {
+ return i * j
+ }
+ __createKernel(bounds, extern, f1, arr, f2)
+ expect(arr).toEqual([
+ [0, 0, 0, 0],
+ [0, 1, 2, 3],
+ [0, 2, 4, 6],
+ [0, 3, 6, 9],
+ [0, 4, 8, 12]
+ ])
+})
+
+test('__createKernel with 3 loop returns correct result', () => {
+ const bounds = [5, 4, 3]
+ const extern = {}
+ const f1 = function(this: any) {
+ return this.thread.z * this.thread.y * this.thread.x
+ }
+
+ const arr: number[][][] = []
+ for (let i = 0; i < 5; i = i + 1) {
+ arr[i] = []
+ for (let j = 0; j < 4; j = j + 1) {
+ arr[i][j] = []
+ }
+ }
+
+ const f2 = function(i: any, j: any, k: any) {
+ return i * j * k
+ }
+ __createKernel(bounds, extern, f1, arr, f2)
+ expect(arr).toEqual([
+ [
+ [0, 0, 0],
+ [0, 0, 0],
+ [0, 0, 0],
+ [0, 0, 0]
+ ],
+ [
+ [0, 0, 0],
+ [0, 1, 2],
+ [0, 2, 4],
+ [0, 3, 6]
+ ],
+ [
+ [0, 0, 0],
+ [0, 2, 4],
+ [0, 4, 8],
+ [0, 6, 12]
+ ],
+ [
+ [0, 0, 0],
+ [0, 3, 6],
+ [0, 6, 12],
+ [0, 9, 18]
+ ],
+ [
+ [0, 0, 0],
+ [0, 4, 8],
+ [0, 8, 16],
+ [0, 12, 24]
+ ]
+ ])
+})
+
+test('__createKernel with 1 loop + return string returns correct result', () => {
+ const bounds = [5]
+ const extern = {}
+ const f1 = function() {
+ return 'a'
+ }
+ const arr: number[] = []
+ const f2 = function() {
+ return 'a'
+ }
+ __createKernel(bounds, extern, f1, arr, f2)
+ expect(arr).toEqual(['a', 'a', 'a', 'a', 'a'])
+})
+
+test('__createKernel with 1 loop + return number array returns correct result', () => {
+ const bounds = [5]
+ const extern = {}
+ const f1 = function() {
+ return [1, 2, 3]
+ }
+ const arr: number[] = []
+ const f2 = function() {
+ return [1, 2, 3]
+ }
+ __createKernel(bounds, extern, f1, arr, f2)
+ expect(arr).toEqual([
+ [1, 2, 3],
+ [1, 2, 3],
+ [1, 2, 3],
+ [1, 2, 3],
+ [1, 2, 3]
+ ])
+})
+
+test('__createKernel with 1 loop + return string array returns correct result', () => {
+ const bounds = [5]
+ const extern = {}
+ const f1 = function() {
+ return ['a', 'a']
+ }
+ const arr: number[] = []
+ const f2 = function() {
+ return ['a', 'a']
+ }
+ __createKernel(bounds, extern, f1, arr, f2)
+ expect(arr).toEqual([
+ ['a', 'a'],
+ ['a', 'a'],
+ ['a', 'a'],
+ ['a', 'a'],
+ ['a', 'a']
+ ])
+})
+
+test('__createKernel with 1 loop + external variable returns correct result', () => {
+ const bounds = [3]
+ const extern = { y: 100 }
+ const f1 = function(this: any) {
+ return this.constants.y + this.thread.x
+ }
+ const arr: number[] = []
+ const f2 = function() {
+ return 1 + y
+ }
+
+ const y = 100
+ __createKernel(bounds, extern, f1, arr, f2)
+ expect(arr).toEqual([101, 101, 101])
+})
+
+test('__createKernel with 1 loop + external variable + math function returns correct result', () => {
+ const bounds = [3]
+ const extern = { y: 100 }
+ const f1 = function(this: any) {
+ return Math.abs(-this.constants.y + this.thread.x)
+ }
+ const arr: number[] = []
+
+ const y = 100
+
+ // tslint:disable-next-line
+ const math_abs = Math.abs
+ const f2 = function(i: any) {
+ return math_abs(-y + i)
+ }
+
+ __createKernel(bounds, extern, f1, arr, f2)
+ expect(arr).toEqual([100, 99, 98])
+})
diff --git a/src/gpu/__tests__/transpile.ts b/src/gpu/__tests__/transpile.ts
new file mode 100644
index 000000000..858fdf1a6
--- /dev/null
+++ b/src/gpu/__tests__/transpile.ts
@@ -0,0 +1,320 @@
+import { mockContext } from '../../mocks/context'
+import { parse } from '../../parser/parser'
+import { stripIndent } from '../../utils/formatters'
+import { transpile } from '../../transpiler/transpiler'
+
+test('simple for loop gets transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('many simple for loop gets transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ res[i] = i;
+ }
+
+ let res1 = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ res1[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(4)
+})
+
+test('simple for loop with constant condition transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ const c = 10;
+ for (let i = 0; i < c; i = i + 1) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('simple for loop with let condition transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ let c = 10;
+ for (let i = 0; i < c; i = i + 1) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('simple for loop with math function call transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ let c = 10;
+ for (let i = 0; i < c; i = i + 1) {
+ res[i] = math_abs(i);
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('simple for loop with different end condition transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ const f = () => 5;
+ let c = f();
+ for (let i = 0; i < c; i = i + 1) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('2 for loop case gets transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ res[i] = i;
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('2 for loop case with body gets transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ let sum = 0;
+ for (let j = 0; j < 5; j = j + 1) {
+ sum = sum + j;
+ }
+ res[i] = sum;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('2 for loop case with 2 indices being written to gets transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ res[i][j] = i*j;
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('2 for loop case with 2 indices being written + local updates to gets transpiled correctly', () => {
+ const code = stripIndent`
+ let res1 = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ res1[i] = [];
+ for (let j = 0; j < 5; j = j + 1) {
+ res1[i][j] = j;
+ }
+ }
+
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ let x = res1[i][j];
+ let y = math_abs(x * -5);
+ res[i][j] = x + y;
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('2 for loop case with 2 indices being written + use of result variable[i][j] gets transpiled', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ res[i] = [];
+ for (let j = 0; j < 5; j = j + 1) {
+ res[i][j] = j;
+ }
+ }
+
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ let x = res[i][j];
+ let y = math_abs(x * -5);
+ res[i][j] = x + y;
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('3 for loop case with 1 index being written to gets transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ for (let k = 0; k < 5; k = k + 1) {
+ res[i] = i*j;
+ }
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('3 for loop case with 2 indices being written to gets transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ for (let k = 0; k < 5; k = k + 1) {
+ res[i][j] = i*j;
+ }
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('3 for loop case with 3 indices being written to gets transpiled correctly', () => {
+ const code = stripIndent`
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ for (let j = 0; j < 5; j = j + 1) {
+ for (let k = 0; k < 5; k = k + 1) {
+ res[i][j][k] = i*j;
+ }
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(3)
+})
+
+test('many for loop case - matrix multiplication (2 transpilations)', () => {
+ const code = stripIndent`
+ const size = 10;
+ const L = [];
+ const R = [];
+ for (let r = 0; r < size; r = r + 1) {
+ L[r] = [];
+ R[r] = [];
+ for (let c = 0; c < size; c = c + 1) {
+ L[r][c] = r*c;
+ R[r][c] = r + c;
+ }
+ }
+
+ const res = [];
+ for (let r = 0; r < size; r = r + 1) {
+ res[r] = [];
+ }
+
+ for (let r = 0; r < size; r = r + 1) {
+ for (let c = 0; c < size; c = c + 1) {
+ let sum = 0;
+ for (let i = 0; i < size; i = i + 1) {
+ sum = sum + L[r][i] * R[i][c];
+ }
+ res[r][c] = sum;
+ }
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ const cnt = transpiled.match(/__createKernel/g)?.length
+ expect(cnt).toEqual(4)
+})
+
+test('resolve naming conflicts if __createKernel is used', () => {
+ const code = stripIndent`
+ const __createKernel = 10;
+
+ let res = [];
+ for (let i = 0; i < 5; i = i + 1) {
+ res[i] = i;
+ }
+ `
+ const context = mockContext(4, 'gpu')
+ const transpiled = transpile(parse(code, context)!, context.contextId, false, context.variant)
+ .transpiled
+
+ // a new kernel function with name __createKernel0 should be created here
+ const cntNewName = transpiled.match(/__createKernel0/g)?.length
+ expect(cntNewName).toEqual(2)
+})
diff --git a/src/gpu/gpu.ts b/src/gpu/gpu.ts
new file mode 100644
index 000000000..a33247ed3
--- /dev/null
+++ b/src/gpu/gpu.ts
@@ -0,0 +1,58 @@
+import GPUTransformer from './transfomer'
+import { AllowedDeclarations } from '../types'
+import * as create from '../utils/astCreator'
+import * as es from 'estree'
+
+// top-level gpu functions that call our code
+
+// transpiles if possible and returns display statements to end user
+export function transpileToGPU(program: es.Program, kernelFunction: string): es.Statement[] {
+ // create unique kernel name
+ GPUTransformer.globalIds.__createKernel = create.identifier(kernelFunction)
+
+ const transformer = new GPUTransformer(program)
+ const res = transformer.transform()
+
+ const gpuDisplayStatements = []
+ // add some display statements to program
+ if (res.length > 0) {
+ for (const arr of res) {
+ let debug = `Attempting to optimize ${arr[1]} levels of nested loops starting on line ${arr[0]}`
+ if (arr[1] === 1) {
+ debug = `Attempting to optimize the loop on line ${arr[0]}`
+ }
+ gpuDisplayStatements.push(
+ create.expressionStatement(
+ create.callExpression(create.identifier('display'), [create.literal(debug)])
+ )
+ )
+ }
+ }
+ return gpuDisplayStatements
+}
+
+export function getInternalNamesForGPU(): Set {
+ return new Set(Object.entries(GPUTransformer.globalIds).map(([key, { name }]) => key))
+}
+
+export function getInternalFunctionsForGPU(info: any, cid: any) {
+ return Object.entries(GPUTransformer.globalIds).map(([key, { name }]) => {
+ const kind: AllowedDeclarations = 'const'
+ const value: es.Expression = create.callExpression(
+ create.memberExpression(
+ create.memberExpression(
+ {
+ type: 'MemberExpression',
+ object: info.native,
+ property: create.literal(cid),
+ computed: true
+ },
+ 'gpu'
+ ),
+ 'get'
+ ),
+ [create.literal(key)]
+ )
+ return create.declaration(name, kind, value)
+ })
+}
diff --git a/src/gpu/lib.ts b/src/gpu/lib.ts
new file mode 100644
index 000000000..771b26ade
--- /dev/null
+++ b/src/gpu/lib.ts
@@ -0,0 +1,193 @@
+import { GPU } from 'gpu.js'
+import { TypeError } from '../utils/rttc'
+import { isArray } from 'util'
+
+// Heuristic : Only use GPU if array is bigger than this
+const MAX_SIZE = 200
+
+// helper function to build 2D array output
+function buildArray(arr: Float32Array[][], end: any, res: any) {
+ for (let i = 0; i < end[0]; i++) {
+ res[i] = prettyOutput(arr[i])
+ }
+}
+
+function build2DArray(arr: Float32Array[][], end: any, res: any) {
+ for (let i = 0; i < end[0]; i++) {
+ for (let j = 0; j < end[1]; j++) {
+ res[i][j] = prettyOutput(arr[i][j])
+ }
+ }
+}
+
+// helper function to build 3D array output
+function build3DArray(arr: Float32Array[][][], end: any, res: any) {
+ for (let i = 0; i < end[0]; i++) {
+ for (let j = 0; j < end[1]; j++) {
+ for (let k = 0; k < end[2]; k++) {
+ res[i][j][k] = prettyOutput(arr[i][j][k])
+ }
+ }
+ }
+}
+
+function prettyOutput(arr: any): any {
+ if (!(arr instanceof Float32Array)) {
+ return arr
+ }
+
+ const res = arr.map(x => prettyOutput(x))
+ return Array.from(res)
+}
+
+// helper function to check array is initialized
+function checkArray(arr: any): boolean {
+ return Array.isArray(arr)
+}
+
+// helper function to check 2D array is initialized
+function checkArray2D(arr: any, end: any): boolean {
+ for (let i = 0; i < end[0]; i = i + 1) {
+ if (!Array.isArray(arr[i])) return false
+ }
+ return true
+}
+
+// helper function to check 3D array is initialized
+function checkArray3D(arr: any, end: any): boolean {
+ for (let i = 0; i < end[0]; i = i + 1) {
+ if (!Array.isArray(arr[i])) return false
+ for (let j = 0; j < end[1]; j = j + 1) {
+ if (!Array.isArray(arr[i][j])) return false
+ }
+ }
+ return true
+}
+
+function checkForNumber(arr: any): boolean {
+ if (isArray(arr)) {
+ return arr.length > 0 && arr.filter(x => !checkForNumber(x)).length === 0
+ }
+
+ return typeof arr === 'number'
+}
+
+/*
+ * we only use the gpu if:
+ * 1. we are working with numbers
+ * 2. we have a large array (> 100 elements)
+ */
+function checkValidGPU(f: any, end: any): boolean {
+ let res: any
+ if (end.length === 1) res = f(0)
+ if (end.length === 2) res = f(0, 0)
+ if (end.length === 3) res = f(0, 0, 0)
+
+ if (typeof res !== 'number') {
+ if (!Array.isArray(res)) {
+ return false
+ }
+
+ if (!checkForNumber(res)) {
+ return false
+ }
+ }
+
+ let cnt = 1
+ for (const i of end) {
+ cnt = cnt * i
+ }
+
+ return cnt > MAX_SIZE
+}
+
+// just run on js!
+function manualRun(f: any, end: any, res: any) {
+ function build() {
+ for (let i = 0; i < end[0]; i++) {
+ res[i] = f(i)
+ }
+ return
+ }
+
+ function build2D() {
+ for (let i = 0; i < end[0]; i = i + 1) {
+ for (let j = 0; j < end[1]; j = j + 1) {
+ res[i][j] = f(i, j)
+ }
+ }
+ return
+ }
+
+ function build3D() {
+ for (let i = 0; i < end[0]; i = i + 1) {
+ for (let j = 0; j < end[1]; j = j + 1) {
+ for (let k = 0; k < end[2]; k = k + 1) {
+ res[i][j][k] = f(i, j, k)
+ }
+ }
+ }
+ return
+ }
+
+ if (end.length === 1) return build()
+ if (end.length === 2) return build2D()
+ return build3D()
+}
+
+/* main function that runs code on the GPU (using gpu.js library)
+ * @end : end bounds for array
+ * @extern : external variable definitions {}
+ * @f : function run as on GPU threads
+ * @arr : array to be written to
+ */
+export function __createKernel(end: any, extern: any, f: any, arr: any, f2: any) {
+ const gpu = new GPU()
+ const nend = []
+ for (let i = end.length - 1; i >= 0; i--) {
+ nend.push(end[i])
+ }
+
+ // check array is initialized properly
+ let ok = checkArray(arr)
+ let err = ''
+ if (!ok) {
+ err = typeof arr
+ }
+
+ // TODO: find a cleaner way to do this
+ if (end.length > 1) {
+ ok = ok && checkArray2D(arr, end)
+ if (!ok) {
+ err = 'undefined'
+ }
+ }
+
+ if (end.length > 2) {
+ ok = ok && checkArray3D(arr, end)
+ if (!ok) {
+ err = 'undefined'
+ }
+ }
+
+ if (!ok) {
+ throw new TypeError(arr, '', 'object or array', err)
+ }
+
+ // check if program is valid to run on GPU
+ ok = checkValidGPU(f2, end)
+ if (!ok) {
+ manualRun(f2, end, arr)
+ return
+ }
+
+ // external variables to be in the GPU
+ const out = { constants: {} }
+ out.constants = extern
+
+ const gpuFunction = gpu.createKernel(f, out).setOutput(nend)
+ const res = gpuFunction() as any
+ if (end.length === 1) buildArray(res, end, arr)
+ if (end.length === 2) build2DArray(res, end, arr)
+ if (end.length === 3) build3DArray(res, end, arr)
+}
diff --git a/src/gpu/transfomer.ts b/src/gpu/transfomer.ts
new file mode 100644
index 000000000..2bb1cc06f
--- /dev/null
+++ b/src/gpu/transfomer.ts
@@ -0,0 +1,320 @@
+import * as es from 'estree'
+import { ancestor, simple, make } from 'acorn-walk/dist/walk'
+import * as create from '../utils/astCreator'
+import GPULoopVerifier from './verification/loopVerifier'
+import GPUBodyVerifier from './verification/bodyVerifier'
+
+/*
+ * GPU Transformer runs through the program and transpiles for loops to GPU code
+ * Upon termination, the AST would be mutated accordingly
+ * e.g.
+ * let res = 0;
+ * for (let i = 0; i < 5; i = i + 1) {
+ * res[i] = 5;
+ * }
+ * would become:
+ * let res = 0;
+ * __createKernel(....)
+ */
+class GPUTransformer {
+ // program to mutate
+ program: es.Program
+
+ // helps reference the main function
+ static globalIds = {
+ __createKernel: create.identifier('__createKernel')
+ }
+
+ outputArray: es.Identifier
+ innerBody: any
+ counters: string[]
+ end: es.Expression[]
+ state: number
+ localVar: Set
+ outerVariables: any
+ targetBody: any
+
+ constructor(program: es.Program) {
+ this.program = program
+ }
+
+ // transforms away top-level for loops if possible
+ transform = (): number[][] => {
+ const gpuTranspile = this.gpuTranspile
+ const res: number[][] = []
+
+ // tslint:disable
+ simple(
+ this.program,
+ {
+ ForStatement(node: es.ForStatement) {
+ let state = gpuTranspile(node)
+ if (state > 0 && node.loc) {
+ res.push([node.loc.start.line, state])
+ }
+ }
+ },
+ make({ ForStatement: () => {} })
+ )
+ // tslint:enable
+
+ return res
+ }
+
+ /*
+ * Here we transpile away a for loop:
+ * 1. Check if it meets our specifications
+ * 2. Get external variables + target body (body to be run across gpu threads)
+ * 3. Build a AST Node for (2) - this will be given to (8)
+ * 4. Change assignment in body to a return statement
+ * 5. In body, update all math_* calls to become Math.* calls
+ * 6. In body, update all external variable references
+ * 7. In body, update reference to counters
+ * 8. Call __createKernel and assign it to our external variable
+ */
+ gpuTranspile = (node: es.ForStatement): number => {
+ // initialize our class variables
+ this.state = 0
+ this.counters = []
+ this.end = []
+
+ // 1. verification of outer loops + body
+ this.checkOuterLoops(node)
+ // no gpu loops found
+ if (this.counters.length === 0 || new Set(this.counters).size !== this.counters.length) {
+ return 0
+ }
+
+ const verifier = new GPUBodyVerifier(this.program, this.innerBody, this.counters)
+ if (verifier.state === 0) {
+ return 0
+ }
+
+ this.state = verifier.state
+ this.outputArray = verifier.outputArray
+ this.localVar = verifier.localVar
+
+ // 2. get external variables + the main body
+ this.getOuterVariables()
+ this.getTargetBody(node)
+
+ // 3. Build a AST Node of all outer variables
+ const externObject: es.Property[] = []
+ for (const key in this.outerVariables) {
+ if (this.outerVariables.hasOwnProperty(key)) {
+ const val = this.outerVariables[key]
+
+ // push in a deep copy of the identifier
+ // this is needed cos we modify it later
+ externObject.push(create.property(key, JSON.parse(JSON.stringify(val))))
+ }
+ }
+
+ // 4. Change assignment in body to a return statement
+ const checker = verifier.getArrayName
+ const locals = this.localVar
+ ancestor(this.targetBody, {
+ AssignmentExpression(nx: es.AssignmentExpression, ancstor: es.Node[]) {
+ // assigning to local val, it's okay
+ if (nx.left.type === 'Identifier') {
+ return
+ }
+
+ if (nx.left.type !== 'MemberExpression') {
+ return
+ }
+
+ const id = checker(nx.left)
+ if (locals.has(id.name)) {
+ return
+ }
+
+ const sz = ancstor.length
+ create.mutateToReturnStatement(ancstor[sz - 2], nx.right)
+ }
+ })
+
+ // deep copy here (for runtime checks)
+ const params: es.Identifier[] = []
+ for (let i = 0; i < this.state; i++) {
+ params.push(create.identifier(this.counters[i]))
+ }
+ const tempNode = create.functionExpression(params, JSON.parse(JSON.stringify(this.targetBody)))
+
+ // 5. Update all math_* calls to become Math.*
+ simple(this.targetBody, {
+ CallExpression(nx: es.CallExpression) {
+ if (nx.callee.type !== 'Identifier') {
+ return
+ }
+
+ const functionName = nx.callee.name
+ const term = functionName.split('_')[1]
+ const args: es.Expression[] = nx.arguments as any
+
+ create.mutateToCallExpression(
+ nx,
+ create.memberExpression(create.identifier('Math'), term),
+ args
+ )
+ }
+ })
+
+ // 6. Update all external variable references in body
+ // e.g. let res = 1 + y; where y is an external variable
+ // becomes let res = 1 + this.constants.y;
+
+ const names = [this.outputArray.name, ...this.counters, 'Math']
+ simple(this.targetBody, {
+ Identifier(nx: es.Identifier) {
+ // ignore these names
+ if (names.includes(nx.name) || locals.has(nx.name)) {
+ return
+ }
+
+ create.mutateToMemberExpression(
+ nx,
+ create.memberExpression(create.identifier('this'), 'constants'),
+ create.identifier(nx.name)
+ )
+ }
+ })
+
+ // 7. Update reference to counters
+ // e.g. let res = 1 + i; where i is a counter
+ // becomes let res = 1 + this.thread.x;
+
+ // depending on state the mappings will change
+ let threads = ['x']
+ if (this.state === 2) threads = ['y', 'x']
+ if (this.state === 3) threads = ['z', 'y', 'x']
+
+ const counters: string[] = []
+ for (let i = 0; i < this.state; i = i + 1) {
+ counters.push(this.counters[i])
+ }
+
+ simple(this.targetBody, {
+ Identifier(nx: es.Identifier) {
+ let x = -1
+ for (let i = 0; i < counters.length; i = i + 1) {
+ if (nx.name === counters[i]) {
+ x = i
+ break
+ }
+ }
+
+ if (x === -1) {
+ return
+ }
+
+ const id = threads[x]
+ create.mutateToMemberExpression(
+ nx,
+ create.memberExpression(create.identifier('this'), 'thread'),
+ create.identifier(id)
+ )
+ }
+ })
+
+ // 8. we transpile the loop to a function call, __createKernel
+ const kernelFunction = create.functionExpression([], this.targetBody)
+ create.mutateToExpressionStatement(
+ node,
+ create.callExpression(
+ GPUTransformer.globalIds.__createKernel,
+ [
+ create.arrayExpression(this.end),
+ create.objectExpression(externObject),
+ kernelFunction,
+ this.outputArray,
+ tempNode
+ ],
+ node.loc!
+ )
+ )
+
+ return this.state
+ }
+
+ // verification of outer loops using our verifier
+ checkOuterLoops = (node: es.ForStatement) => {
+ let currForLoop = node
+ while (currForLoop.type === 'ForStatement') {
+ const detector = new GPULoopVerifier(currForLoop)
+ if (!detector.ok) {
+ break
+ }
+
+ this.innerBody = currForLoop.body
+ this.counters.push(detector.counter)
+ this.end.push(detector.end)
+
+ if (this.innerBody.type !== 'BlockStatement') {
+ break
+ }
+
+ if (this.innerBody.body.length > 1 || this.innerBody.body.length === 0) {
+ break
+ }
+
+ currForLoop = this.innerBody.body[0]
+ }
+ }
+
+ /*
+ * Based on state, gets the correct body to be run across threads
+ * e.g. state = 2 (2 top level loops skipped)
+ * for (...) {
+ * for (...) {
+ * let x = 1;
+ * res[i] = x + 1
+ * }
+ * }
+ *
+ * returns:
+ *
+ * {
+ * let x = 1;
+ * res[i] = x + 1
+ * }
+ */
+ getTargetBody(node: es.ForStatement) {
+ let mv = this.state
+ this.targetBody = node
+ while (mv > 1) {
+ this.targetBody = this.targetBody.body.body[0]
+ mv--
+ }
+ this.targetBody = this.targetBody.body
+ }
+
+ // get all variables defined outside the block (on right hand side)
+ // TODO: method can be more optimized
+ getOuterVariables() {
+ // set some local variables for walking
+ const curr = this.innerBody
+ const localVar = this.localVar
+ const counters = this.counters
+ const output = this.outputArray.name
+
+ const varDefinitions = {}
+ simple(curr, {
+ Identifier(node: es.Identifier) {
+ if (
+ localVar.has(node.name) ||
+ counters.includes(node.name) ||
+ node.name === output ||
+ node.name.startsWith('math_')
+ ) {
+ return
+ }
+
+ varDefinitions[node.name] = node
+ }
+ })
+ this.outerVariables = varDefinitions
+ }
+}
+
+export default GPUTransformer
diff --git a/src/gpu/verification/bodyVerifier.ts b/src/gpu/verification/bodyVerifier.ts
new file mode 100644
index 000000000..e60e9f5e6
--- /dev/null
+++ b/src/gpu/verification/bodyVerifier.ts
@@ -0,0 +1,211 @@
+import * as es from 'estree'
+import { simple, make } from 'acorn-walk/dist/walk'
+
+/*
+ * GPU Body verifier helps to ensure the body is parallelizable
+ * It does a series of checks to make sure the loop can be parallelized easily
+ * Upon termination will update:
+ * @state: number that indicates the dimensions you can parallize till (max 3)
+ * @localVar: local variables in the body
+ * @outputArray: array that is being written to
+ */
+class GPUBodyVerifier {
+ program: es.Program
+ node: es.Statement
+
+ state: number
+ localVar: Set
+ counters: string[]
+ outputArray: es.Identifier
+
+ /**
+ *
+ * @param node body to be verified
+ * @param counters list of for loop counters (to check array assignment)
+ */
+ constructor(program: es.Program, node: es.Statement, counters: string[]) {
+ this.program = program
+ this.node = node
+ this.counters = counters
+ this.state = 0
+ this.checkBody(node)
+ }
+
+ /*
+ * Checks if the GPU body is valid
+ * 1. No return/function declarations/break/continue
+ * 2. No functions except math_*
+ * 3. Only ONE assignment to a global result variable
+ * 4. Assigning to an array at specific indices (i, j, k from for loop counters)
+ */
+ checkBody = (node: es.Statement) => {
+ let ok: boolean = true
+
+ // 1. check illegal statements
+ simple(node, {
+ FunctionDeclaration() {
+ ok = false
+ },
+ ArrowFunctionExpression() {
+ ok = false
+ },
+ ReturnStatement() {
+ ok = false
+ },
+ BreakStatement() {
+ ok = false
+ },
+ ContinueStatement() {
+ ok = false
+ }
+ })
+
+ if (!ok) {
+ return
+ }
+
+ // 2. check function calls are only to math_*
+ const mathFuncCheck = new RegExp(/^math_[a-z]+$/)
+ simple(node, {
+ CallExpression(nx: es.CallExpression) {
+ if (nx.callee.type !== 'Identifier') {
+ ok = false
+ return
+ }
+
+ const functionName = nx.callee.name
+ if (!mathFuncCheck.test(functionName)) {
+ ok = false
+ return
+ }
+ }
+ })
+
+ if (!ok) {
+ return
+ }
+
+ // 3. check there is only ONE assignment to a global result variable
+
+ // get all local variables
+ const localVar = new Set()
+ simple(node, {
+ VariableDeclaration(nx: es.VariableDeclaration) {
+ if (nx.declarations[0].id.type === 'Identifier') {
+ localVar.add(nx.declarations[0].id.name)
+ }
+ }
+ })
+ this.localVar = localVar
+
+ // make sure only one assignment
+ const resultExpr: es.AssignmentExpression[] = []
+ const checker = this.getArrayName
+ simple(node, {
+ AssignmentExpression(nx: es.AssignmentExpression) {
+ // assigning to local val, it's okay
+ if (nx.left.type === 'Identifier' && localVar.has(nx.left.name)) {
+ return
+ }
+
+ if (nx.left.type === 'MemberExpression') {
+ const chk = checker(nx.left)
+ if (localVar.has(chk.name)) {
+ return
+ }
+ }
+
+ resultExpr.push(nx)
+ }
+ })
+
+ // too many assignments!
+ if (resultExpr.length !== 1) {
+ return
+ }
+
+ // 4. check assigning to array at specific indices
+
+ // not assigning to array
+ if (resultExpr[0].left.type !== 'MemberExpression') {
+ return
+ }
+
+ // check res assignment and its counters
+ const res = this.getPropertyAccess(resultExpr[0].left)
+ if (res.length === 0 || res.length > this.counters.length) {
+ return
+ }
+
+ // check result variable is not used anywhere with wrong indices
+ const getProp = this.getPropertyAccess
+ const resArr = this.outputArray
+ simple(
+ node,
+ {
+ MemberExpression(nx: es.MemberExpression) {
+ const chk = checker(nx)
+ if (chk.name !== resArr.name) {
+ return
+ }
+
+ // get indices
+ const indices = getProp(nx)
+ if (JSON.stringify(indices) === JSON.stringify(res)) {
+ return
+ }
+
+ ok = false
+ }
+ },
+ // tslint:disable-next-line
+ make({ MemberExpression: () => {} })
+ )
+
+ if (!ok) {
+ return
+ }
+
+ for (let i = 0; i < this.counters.length; i++) {
+ if (res[i] !== this.counters[i]) break
+ this.state++
+ }
+
+ // we only can have upto 3 states
+ if (this.state > 3) this.state = 3
+ }
+
+ getArrayName = (node: es.MemberExpression): es.Identifier => {
+ let curr: any = node
+ while (curr.type === 'MemberExpression') {
+ curr = curr.object
+ }
+ return curr
+ }
+
+ // helper function that helps to get indices accessed from array
+ // e.g. returns i, j for res[i][j]
+ getPropertyAccess = (node: es.MemberExpression): string[] => {
+ const res: string[] = []
+ let ok: boolean = true
+ let curr: any = node
+ while (curr.type === 'MemberExpression') {
+ if (curr.property.type !== 'Identifier') {
+ ok = false
+ break
+ }
+
+ res.push(curr.property.name)
+ curr = curr.object
+ }
+
+ if (!ok) {
+ return []
+ }
+
+ this.outputArray = curr
+ return res.reverse()
+ }
+}
+
+export default GPUBodyVerifier
diff --git a/src/gpu/verification/loopVerifier.ts b/src/gpu/verification/loopVerifier.ts
new file mode 100644
index 000000000..9f1557072
--- /dev/null
+++ b/src/gpu/verification/loopVerifier.ts
@@ -0,0 +1,131 @@
+import * as es from 'estree'
+
+/*
+ * Loop Detector helps to verify if a for loop can be parallelized with a GPU
+ * Updates ok, counter and end upon termination
+ * @ok: false if not valid, true of valid
+ * @end: if valid, stores the end of the loop
+ * @counter: stores the string representation of the counter
+ */
+class GPULoopVerifier {
+ // for loop that we are looking at
+ node: es.ForStatement
+
+ counter: string
+ end: es.Expression
+ ok: boolean
+
+ constructor(node: es.ForStatement) {
+ this.node = node
+ this.forLoopTransform(this.node)
+ }
+
+ forLoopTransform = (node: es.ForStatement) => {
+ if (!node.init || !node.update || !node.test) {
+ return
+ }
+
+ this.ok =
+ this.hasCounter(node.init) && this.hasCondition(node.test) && this.hasUpdate(node.update)
+ }
+
+ /*
+ * Checks if the loop counter is valid
+ * it has to be "let = 0;"
+ */
+ hasCounter = (node: es.VariableDeclaration | es.Expression | null): boolean => {
+ if (!node || node.type !== 'VariableDeclaration') {
+ return false
+ }
+
+ if (node.kind !== 'let') {
+ return false
+ }
+
+ const declaration: es.VariableDeclarator[] = node.declarations
+ if (declaration.length > 1) {
+ return false
+ }
+
+ const initializer: es.VariableDeclarator = declaration[0]
+ if (initializer.id.type !== 'Identifier' || !initializer.init) {
+ return false
+ }
+
+ this.counter = initializer.id.name
+
+ const set: es.Expression = initializer.init
+ if (!set || set.type !== 'Literal' || set.value !== 0) {
+ return false
+ }
+
+ return true
+ }
+
+ /*
+ * Checks if the loop condition is valid
+ * it has to be " < ;"
+ * identifier is the same as the one initialized above
+ */
+ hasCondition = (node: es.Expression): boolean => {
+ if (node.type !== 'BinaryExpression') {
+ return false
+ }
+
+ if (!(node.operator === '<' || node.operator === '<=')) {
+ return false
+ }
+
+ const lv: es.Expression = node.left
+ if (lv.type !== 'Identifier' || lv.name !== this.counter) {
+ return false
+ }
+
+ const rv = node.right
+ if (!(rv.type === 'Identifier' || rv.type === 'Literal')) {
+ return false
+ }
+
+ this.end = rv
+ return true
+ }
+
+ /*
+ * Checks if the loop update is valid
+ * it has to be " = + 1;"
+ * identifier is the same as the one initialized above
+ */
+ hasUpdate = (node: es.Expression): boolean => {
+ if (node.type !== 'AssignmentExpression') {
+ return false
+ }
+
+ if (node.operator !== '=') {
+ return false
+ }
+
+ if (node.left.type !== 'Identifier' || node.left.name !== this.counter) {
+ return false
+ }
+
+ if (node.right.type !== 'BinaryExpression') {
+ return false
+ }
+
+ const rv = node.right
+ if (rv.operator !== '+') {
+ return false
+ }
+
+ const identifierLeft = rv.left.type === 'Identifier' && rv.left.name === this.counter
+ const identifierRight = rv.right.type === 'Identifier' && rv.right.name === this.counter
+
+ const literalLeft = rv.left.type === 'Literal' && rv.left.value === 1
+ const literalRight = rv.right.type === 'Literal' && rv.right.value === 1
+
+ // we allow both i = i + 1 and i = 1 + i
+ return (identifierLeft && literalRight) || (identifierRight && literalLeft)
+ }
+}
+
+export default GPULoopVerifier
diff --git a/src/index.ts b/src/index.ts
index e3ee959e3..fe494dff5 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -29,7 +29,8 @@ import {
SourceError,
Variant,
TypeAnnotatedNode,
- SVMProgram
+ SVMProgram,
+ TypeAnnotatedFuncDecl
} from './types'
import { nonDetEvaluate } from './interpreter/interpreter-non-det'
import { locationDummyNode } from './utils/astCreator'
@@ -42,6 +43,7 @@ import { getProgramNames, getKeywords } from './name-extractor'
import * as es from 'estree'
import { typeCheck } from './typeChecker/typeChecker'
import { typeToString } from './utils/stringify'
+import { addInfiniteLoopProtection } from './infiniteLoops/InfiniteLoops'
export interface IOptions {
scheduler: 'preemptive' | 'async'
@@ -225,6 +227,27 @@ export function getAllOccurrencesInScope(
return getAllOccurrencesInScopeHelper(declarationNode.loc, program, identifierNode.name)
}
+export function hasDeclaration(
+ code: string,
+ context: Context,
+ loc: { line: number; column: number }
+): boolean {
+ const program = parse(code, context, true)
+ if (!program) {
+ return false
+ }
+ const identifierNode = findIdentifierNode(program, context, loc)
+ if (!identifierNode) {
+ return false
+ }
+ const declarationNode = findDeclarationNode(program, identifierNode)
+ if (declarationNode == null || declarationNode.loc == null) {
+ return false
+ }
+
+ return true
+}
+
export async function getNames(
code: string,
line: number,
@@ -244,7 +267,7 @@ export async function getNames(
}
function typedParse(code: any, context: Context) {
- const program: Program | undefined = parse(code, context)
+ const program: Program | undefined = parse(code, context, true)
if (program === undefined) {
return null
}
@@ -257,76 +280,85 @@ export function getTypeInformation(
loc: { line: number; column: number },
name: string
): string {
- const lineNumber = loc.line
+ try {
+ // parse the program into typed nodes and parse error
+ const program = typedParse(code, context)
+ if (program === null) {
+ return ''
+ }
- // parse the program into typed nodes and parse error
- const program = typedParse(code, context)
- if (program === null) {
- return ''
- }
- const [typedProgram, error] = typeCheck(program)
- const parsedError = parseError(error)
+ const [typedProgram, error] = typeCheck(program)
+ const parsedError = parseError(error)
- // initialize the ans string
- let ans = ''
- if (parsedError) {
- ans += parsedError + '\n'
- }
- if (!typedProgram) {
- return ans
- }
+ // initialize the ans string
+ let ans = ''
+ if (parsedError) {
+ ans += parsedError + '\n'
+ }
+ if (!typedProgram) {
+ return ans
+ }
- // callback function for findNodeAt function
- function findByLocationPredicate(type: string, node: TypeAnnotatedNode) {
- if (!node.inferredType) {
- return false
+ // get name of the node
+ const getName = (typedNode: TypeAnnotatedNode) => {
+ let nodeId = ''
+ if (typedNode.type) {
+ if (typedNode.type === 'FunctionDeclaration') {
+ nodeId = typedNode.id?.name!
+ } else if (typedNode.type === 'VariableDeclaration') {
+ nodeId = (typedNode.declarations[0].id as es.Identifier).name
+ } else if (typedNode.type === 'Identifier') {
+ nodeId = typedNode.name
+ }
+ }
+ return nodeId
}
- const location = node.loc
- const nodeType = node.type
- if (nodeType && location) {
- let id = ''
- if (node.type === 'Identifier') {
- id = node.name
- } else if (node.type === 'FunctionDeclaration') {
- id = node.id?.name!
- } else if (node.type === 'VariableDeclaration') {
- id = (node.declarations[0].id as es.Identifier).name
+
+ // callback function for findNodeAt function
+ function findByLocationPredicate(t: string, nd: TypeAnnotatedNode) {
+ if (!nd.inferredType) {
+ return false
}
- return id === name && location.start.line <= loc.line && location.end.line >= loc.line
+ const location = nd.loc
+ if (nd.type && location) {
+ return (
+ getName(nd) === name &&
+ location.start.line <= loc.line &&
+ location.end.line >= loc.line &&
+ location.start.column <= loc.column &&
+ location.end.column >= loc.column
+ )
+ }
+ return false
}
- return false
- }
- // report both as the type inference
- return (
- ans +
- typedProgram.body
- .map((node: TypeAnnotatedNode) => {
- const res = findNodeAt(typedProgram, undefined, undefined, findByLocationPredicate)
- if (res === undefined) {
- return undefined
- } else {
- return res.node
- }
- })
- .filter((node: TypeAnnotatedNode) => {
- return node !== undefined
- })
- .map((node: TypeAnnotatedNode) => {
- let id = ''
- if (node.type === 'Identifier') {
- id = node.name
- } else if (node.type === 'FunctionDeclaration') {
- id = node.id?.name!
- } else if (node.type === 'VariableDeclaration') {
- id = (node.declarations[0].id as es.Identifier).name
- }
- const type = typeToString(node.inferredType!)
- return `At Line ${lineNumber} => ${id}: ${type}`
- })
- .slice(0, 1)
- .join('\n')
- )
+ // report both as the type inference
+
+ const res = findNodeAt(typedProgram, undefined, undefined, findByLocationPredicate)
+
+ if (res === undefined) {
+ return ans
+ }
+
+ const node: TypeAnnotatedNode = res.node
+
+ if (node === undefined) {
+ return ans
+ }
+
+ const actualNode =
+ node.type === 'VariableDeclaration'
+ ? (node.declarations[0].init! as TypeAnnotatedNode)
+ : node
+ const type = typeToString(
+ actualNode.type === 'FunctionDeclaration'
+ ? (actualNode as TypeAnnotatedFuncDecl).functionInferredType!
+ : actualNode.inferredType!
+ )
+ return ans + `At Line ${loc.line} => ${getName(node)}: ${type}`
+ } catch (error) {
+ return ''
+ }
}
export async function runInContext(
@@ -389,6 +421,9 @@ export async function runInContext(
value: redexedSteps
} as Result)
}
+ if (context.chapter <= 2) {
+ addInfiniteLoopProtection(program, context.chapter === 2)
+ }
const isNativeRunnable = determineExecutionMethod(theOptions, context, program)
if (context.prelude !== null) {
const prelude = context.prelude
diff --git a/src/infiniteLoops/InfiniteLoops.ts b/src/infiniteLoops/InfiniteLoops.ts
new file mode 100644
index 000000000..377dd6ed9
--- /dev/null
+++ b/src/infiniteLoops/InfiniteLoops.ts
@@ -0,0 +1,279 @@
+import * as es from 'estree'
+import { Value } from '../types'
+import { evaluateBinaryExpression, evaluateUnaryExpression } from '../utils/operators'
+import * as stype from './symTypes'
+import { checkBinaryExpression, checkUnaryExpression } from '../utils/rttc'
+import { serialize } from './serializer'
+import { getFirstCall, symbolicExecute } from './symbolicExecutor'
+import { getCheckers } from './analyzer'
+import * as create from '../utils/astCreator'
+
+interface SimpleEnv {
+ constants: [string, any][]
+ tset: stype.TransitionSet
+ chapter2: boolean
+}
+function newEnv(chap?: boolean) {
+ return { constants: [], tset: new Map(), chapter2: chap } as SimpleEnv
+}
+
+function getVariable(envs: SimpleEnv[], name: string) {
+ for (const env of envs) {
+ for (const [key, val] of env.constants) {
+ if (key === name) {
+ return val
+ }
+ }
+ }
+ return undefined
+}
+
+function setVariable(envs: SimpleEnv[], name: string, value: any) {
+ envs[0].constants.unshift([name, value])
+ return undefined
+}
+
+function getConsts(envs: SimpleEnv[]) {
+ const encountered: string[] = []
+ const result: [string, number][] = []
+ for (const env of envs) {
+ for (const [key, val] of env.constants) {
+ if (encountered.indexOf(key) >= 0) {
+ continue
+ }
+ if (typeof val === 'number') {
+ encountered.push(key)
+ result.unshift([key, val])
+ }
+ }
+ }
+ return result
+}
+
+function buildTset(node: es.FunctionDeclaration, envs: SimpleEnv[]) {
+ const id = node.id as es.Identifier
+ const firstCall = getFirstCall(node)
+ const symTree = symbolicExecute(node, getConsts(envs))
+ const transition = serialize(firstCall, symTree)
+ envs[0].tset.set(id.name, transition)
+}
+
+function removePreludeFunctions(envs: SimpleEnv[]) {
+ const preludeListFunctions = [
+ 'is_list',
+ 'equal',
+ 'length',
+ 'map',
+ 'build_list',
+ 'for_each',
+ 'list_to_string',
+ 'reverse',
+ 'append',
+ 'member',
+ 'remove',
+ 'remove_all',
+ 'filter',
+ 'enum_list',
+ 'list_ref',
+ 'accumulate'
+ ]
+ for (let i = envs.length - 1; i >= 0; i--) {
+ const tset = envs[i].tset
+ if (tset.size === 16 && tset.has('is_list')) {
+ for (const fn of preludeListFunctions) {
+ envs[i].tset.delete(fn)
+ }
+ break
+ }
+ }
+}
+
+function mergeTset(envs: SimpleEnv[]) {
+ const t0 = new Map()
+ removePreludeFunctions(envs)
+ for (const e of envs) {
+ for (const [k, v] of e.tset.entries()) {
+ if (!t0.has(k)) {
+ t0.set(k, v)
+ }
+ }
+ }
+ return t0
+}
+
+function boolSymToEstree(sym: stype.BooleanSymbol | null, loc: es.SourceLocation): es.Expression {
+ if (sym === null) {
+ return create.literal(true)
+ }
+ if (sym.type === 'InequalitySymbol') {
+ const op: es.BinaryOperator = sym.direction > 0 ? '>' : sym.direction < 0 ? '<' : '==='
+ return create.binaryExpression(
+ op,
+ create.identifier(sym.name),
+ create.literal(sym.constant),
+ loc
+ )
+ } else {
+ const op: es.LogicalOperator = sym.conjunction ? '&&' : '||'
+ return create.logicalExpression(
+ op,
+ boolSymToEstree(sym.left, loc),
+ boolSymToEstree(sym.right, loc),
+ loc
+ )
+ }
+}
+
+function putError(msg: string, loc: es.SourceLocation) {
+ return create.expressionStatement(
+ create.callExpression(create.identifier('error'), [create.literal(msg)], loc)
+ )
+}
+
+function addProtection(checker: stype.InfiniteLoopChecker) {
+ const loc = checker.loc
+ const test = boolSymToEstree(checker.condition, loc)
+ return create.ifStatement(
+ test,
+ create.blockStatement([putError(checker.message, loc)]),
+ create.blockStatement([]),
+ loc
+ )
+}
+
+/* We run the detection here, need to use T-set
+ * with functions from the correct scope
+ */
+function evaluateBlockSatement(envs: SimpleEnv[], node: es.BlockStatement) {
+ for (const statement of node.body) {
+ if (statement.type === 'FunctionDeclaration') {
+ buildTset(statement, envs)
+ } else {
+ simpleEval(statement, envs)
+ }
+ }
+
+ const checkers = getCheckers(mergeTset(envs))
+ for (const statement of node.body) {
+ if (statement.type === 'FunctionDeclaration') {
+ const id = statement.id as es.Identifier
+ for (const checker of checkers) {
+ if (checker.functionName === id.name) {
+ const toAdd = addProtection(checker)
+ statement.body.body.unshift(toAdd)
+ }
+ }
+ }
+ }
+ return undefined
+}
+
+/* Simple evaluator to "simplify" some expressions, handle scoping,
+ * and global variables.
+ */
+const evaluators: { [nodeType: string]: (node: es.Node, envs: SimpleEnv[]) => any } = {
+ Literal(node: es.Literal, envs: SimpleEnv[]) {
+ return node.value
+ },
+
+ ArrowFunctionExpression(node: es.ArrowFunctionExpression, envs: SimpleEnv[]) {
+ return undefined
+ },
+
+ Identifier(node: es.Identifier, envs: SimpleEnv[]) {
+ return getVariable(envs, node.name)
+ },
+
+ CallExpression(node: es.CallExpression, envs: SimpleEnv[]) {
+ return undefined
+ },
+
+ UnaryExpression(node: es.UnaryExpression, envs: SimpleEnv[]) {
+ const value = simpleEval(node.argument, envs)
+ if (checkUnaryExpression(node, node.operator, value)) {
+ return undefined
+ } else {
+ return evaluateUnaryExpression(node.operator, value)
+ }
+ },
+
+ BinaryExpression(node: es.BinaryExpression, envs: SimpleEnv[]) {
+ const left = simpleEval(node.left, envs)
+ const right = simpleEval(node.right, envs)
+ if (checkBinaryExpression(node, node.operator, left, right)) {
+ return undefined
+ } else {
+ return evaluateBinaryExpression(node.operator, left, right)
+ }
+ },
+
+ ConditionalExpression(node: es.ConditionalExpression, envs: SimpleEnv[]) {
+ return evaluators.IfStatement(node, envs)
+ },
+
+ LogicalExpression(node: es.LogicalExpression, envs: SimpleEnv[]) {
+ const op = node.operator
+ const left = simpleEval(node.left, envs)
+ const right = simpleEval(node.right, envs)
+ return left === undefined && right === undefined
+ ? undefined
+ : op === '&&'
+ ? left && right
+ : left || right
+ },
+
+ VariableDeclaration(node: es.VariableDeclaration, envs: SimpleEnv[]) {
+ const declaration = node.declarations[0]
+ const id = declaration.id as es.Identifier
+ const value = simpleEval(declaration.init!, envs)
+ setVariable(envs, id.name, value)
+ return undefined
+ },
+
+ FunctionDeclaration(node: es.FunctionDeclaration, envs: SimpleEnv[]) {
+ return undefined
+ },
+
+ IfStatement(node: es.IfStatement | es.ConditionalExpression, envs: SimpleEnv[]) {
+ const test = simpleEval(node.test, envs)
+ return test === undefined
+ ? undefined
+ : test
+ ? simpleEval(node.consequent, envs)
+ : node.alternate
+ ? simpleEval(node.alternate, envs)
+ : undefined
+ },
+
+ ExpressionStatement(node: es.ExpressionStatement, envs: SimpleEnv[]) {
+ return simpleEval(node.expression, envs)
+ },
+
+ BlockStatement(node: es.BlockStatement, envs: SimpleEnv[]) {
+ let result: Value
+
+ // Create a new environment (block scoping)
+ envs.unshift(newEnv())
+ result = evaluateBlockSatement(envs, node)
+ envs.shift()
+ return result
+ },
+
+ Program(node: es.BlockStatement, envs: SimpleEnv[]) {
+ envs.unshift(newEnv())
+ return evaluateBlockSatement(envs, node)
+ }
+}
+
+function simpleEval(node: es.Node, envs: SimpleEnv[]) {
+ const fn = evaluators[node.type]
+ if (fn !== undefined) {
+ return fn(node, envs)
+ } else {
+ return undefined
+ }
+}
+
+export function addInfiniteLoopProtection(prog: es.Program, chap: boolean) {
+ simpleEval(prog, [newEnv(chap)])
+}
diff --git a/src/infiniteLoops/__tests__/__snapshots__/runtimeTests.ts.snap b/src/infiniteLoops/__tests__/__snapshots__/runtimeTests.ts.snap
new file mode 100644
index 000000000..3353fc455
--- /dev/null
+++ b/src/infiniteLoops/__tests__/__snapshots__/runtimeTests.ts.snap
@@ -0,0 +1,900 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`CallingNonFunctionValue does not break implementation 1`] = `"Line 3: Calling non-function value 1."`;
+
+exports[`CallingNonFunctionValue does not break implementation 2`] = `"Line 3: Calling non-function value 1."`;
+
+exports[`CallingNonFunctionValue does not break implementation: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function f(x) {
+ return 1(2);
+ }
+ f(1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ CallingNonFunctionValue {
+ "callee": 1,
+ "location": SourceLocation {
+ "end": Position {
+ "column": 15,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 11,
+ "line": 3,
+ },
+ },
+ "node": Node {
+ "arguments": Array [
+ Node {
+ "end": 33,
+ "loc": SourceLocation {
+ "end": Position {
+ "column": 14,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 13,
+ "line": 3,
+ },
+ },
+ "raw": "2",
+ "start": 32,
+ "type": "Literal",
+ "value": 2,
+ },
+ ],
+ "callee": Node {
+ "end": 31,
+ "loc": SourceLocation {
+ "end": Position {
+ "column": 12,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 11,
+ "line": 3,
+ },
+ },
+ "raw": "1",
+ "start": 30,
+ "type": "Literal",
+ "value": 1,
+ },
+ "end": 34,
+ "loc": SourceLocation {
+ "end": Position {
+ "column": 15,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 11,
+ "line": 3,
+ },
+ },
+ "start": 30,
+ "type": "CallExpression",
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 3: Calling non-function value 1.",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`CallingNonFunctionValue does not break implementation: expectParsedError 2`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function f(x) {
+ return 1(2);
+ }
+ f(1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ CallingNonFunctionValue {
+ "callee": 1,
+ "location": SourceLocation {
+ "end": Position {
+ "column": 15,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 11,
+ "line": 3,
+ },
+ },
+ "node": Node {
+ "arguments": Array [
+ Node {
+ "end": 33,
+ "loc": SourceLocation {
+ "end": Position {
+ "column": 14,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 13,
+ "line": 3,
+ },
+ },
+ "raw": "2",
+ "start": 32,
+ "type": "Literal",
+ "value": 2,
+ },
+ ],
+ "callee": Node {
+ "end": 31,
+ "loc": SourceLocation {
+ "end": Position {
+ "column": 12,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 11,
+ "line": 3,
+ },
+ },
+ "raw": "1",
+ "start": 30,
+ "type": "Literal",
+ "value": 1,
+ },
+ "end": 34,
+ "loc": SourceLocation {
+ "end": Position {
+ "column": 15,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 11,
+ "line": 3,
+ },
+ },
+ "start": 30,
+ "type": "CallExpression",
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 3: Calling non-function value 1.",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`InvalidNumberOfArguments does not break implementation 1`] = `"Line 2: Error: \\"Infinite recursion (or runtime error) detected. Did you forget your base case?\\""`;
+
+exports[`InvalidNumberOfArguments does not break implementation: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function f(x) {
+ return f() + f(1,2);
+ }
+ f(1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you forget your base case?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 3,
+ "line": 4,
+ },
+ "start": Position {
+ "column": 2,
+ "line": 2,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 2: Error: \\"Infinite recursion (or runtime error) detected. Did you forget your base case?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: countdown fac 1`] = `"Line 6: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\""`;
+
+exports[`infinite loop detected: countdown fac 2 1`] = `"Line 6: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\""`;
+
+exports[`infinite loop detected: countdown fac 2: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function CD_fac_2(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return x*CD_fac_2(x-2);
+ }
+ }
+ CD_fac_2(5);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 30,
+ "line": 6,
+ },
+ "start": Position {
+ "column": 17,
+ "line": 6,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 6: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: countdown fac cond 1`] = `"Line 3: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\""`;
+
+exports[`infinite loop detected: countdown fac cond: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function CD_fac_cond(x) {
+ return x===0?1:x*CD_fac_cond(x-1);
+ }
+ CD_fac_cond(-1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 37,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 21,
+ "line": 3,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 3: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: countdown fac log 1`] = `"Line 7: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\""`;
+
+exports[`infinite loop detected: countdown fac log: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function CD_fac_log(x,s) {
+ if (x===0) {
+ //display(s);
+ return 1;
+ } else {
+ x*CD_fac_log(x-1,\\"multiply by \\"+stringify(x)+\\"; \\"+s);
+ }
+ }
+ CD_fac_log(-1,\\"\\");
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 61,
+ "line": 7,
+ },
+ "start": Position {
+ "column": 11,
+ "line": 7,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 7: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: countdown fac: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function CD_fac(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return x*CD_fac(x-1);
+ }
+ }
+ CD_fac(-1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 28,
+ "line": 6,
+ },
+ "start": Position {
+ "column": 17,
+ "line": 6,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 6: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: countdown fib 1`] = `"Line 6: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\""`;
+
+exports[`infinite loop detected: countdown fib: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function CD_fib(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return CD_fib(x-1) + CD_fib(x-2);
+ }
+ }
+ CD_fib(-1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 40,
+ "line": 6,
+ },
+ "start": Position {
+ "column": 29,
+ "line": 6,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 6: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: no base case fac 1`] = `"Line 2: Error: \\"Infinite recursion (or runtime error) detected. Did you forget your base case?\\""`;
+
+exports[`infinite loop detected: no base case fac log 1`] = `"Line 2: Error: \\"Infinite recursion (or runtime error) detected. Did you forget your base case?\\""`;
+
+exports[`infinite loop detected: no base case fac log: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NBC_fac_log(x,s) {
+ return x*NBC_fac_log(x-1,\\"multiply by \\"+stringify(x)+\\"; \\"+s);
+ }
+ NBC_fac_log(1,\\"\\");
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you forget your base case?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 3,
+ "line": 4,
+ },
+ "start": Position {
+ "column": 2,
+ "line": 2,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 2: Error: \\"Infinite recursion (or runtime error) detected. Did you forget your base case?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: no base case fac: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NBC_fac(x) {
+ return x*NBC_fac(x-1);
+ }
+ NBC_fac(1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you forget your base case?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 3,
+ "line": 4,
+ },
+ "start": Position {
+ "column": 2,
+ "line": 2,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 2: Error: \\"Infinite recursion (or runtime error) detected. Did you forget your base case?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: no base case fib 1`] = `"Line 2: Error: \\"Infinite recursion (or runtime error) detected. Did you forget your base case?\\""`;
+
+exports[`infinite loop detected: no base case fib: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NBC_fib(x) {
+ return NBC_fib(x-1) + NBC_fib(x-2);
+ }
+ NBC_fib(1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you forget your base case?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 3,
+ "line": 4,
+ },
+ "start": Position {
+ "column": 2,
+ "line": 2,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 2: Error: \\"Infinite recursion (or runtime error) detected. Did you forget your base case?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: no state change fac 1`] = `"Line 6: Error: \\"Infinite recursion (or runtime error) detected. Check your recursive function calls.\\""`;
+
+exports[`infinite loop detected: no state change fac cond 1`] = `"Line 3: Error: \\"Infinite recursion (or runtime error) detected. Check your recursive function calls.\\""`;
+
+exports[`infinite loop detected: no state change fac cond: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NSC_fac_cond(x) {
+ return x===0?1:x*NSC_fac_cond(x);
+ }
+ NSC_fac_cond(1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Check your recursive function calls."],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 36,
+ "line": 3,
+ },
+ "start": Position {
+ "column": 21,
+ "line": 3,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 3: Error: \\"Infinite recursion (or runtime error) detected. Check your recursive function calls.\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: no state change fac log 1`] = `"Line 7: Error: \\"Infinite recursion (or runtime error) detected. Check your recursive function calls.\\""`;
+
+exports[`infinite loop detected: no state change fac log: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NSC_fac_log(x,s) {
+ if (x===0) {
+ //display(s);
+ return 1;
+ } else {
+ x*NSC_fac_log(x,\\"multiply by \\"+stringify(x)+\\"; \\"+s);
+ }
+ }
+ NSC_fac_log(1, \\"\\");
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Check your recursive function calls."],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 60,
+ "line": 7,
+ },
+ "start": Position {
+ "column": 11,
+ "line": 7,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 7: Error: \\"Infinite recursion (or runtime error) detected. Check your recursive function calls.\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: no state change fac: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NSC_fac(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return x*NSC_fac(x);
+ }
+ }
+ NSC_fac(1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Check your recursive function calls."],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 27,
+ "line": 6,
+ },
+ "start": Position {
+ "column": 17,
+ "line": 6,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 6: Error: \\"Infinite recursion (or runtime error) detected. Check your recursive function calls.\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: no state change fib 1`] = `"Line 6: Error: \\"Infinite recursion (or runtime error) detected. Check your recursive function calls.\\""`;
+
+exports[`infinite loop detected: no state change fib: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NSC_fib(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return NSC_fib(x) + NSC_fib(x);
+ }
+ }
+ NSC_fib(1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Check your recursive function calls."],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 38,
+ "line": 6,
+ },
+ "start": Position {
+ "column": 28,
+ "line": 6,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 6: Error: \\"Infinite recursion (or runtime error) detected. Check your recursive function calls.\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: no state change sum 1`] = `"Line 9: Name list not declared."`;
+
+exports[`infinite loop detected: no state change sum 2`] = `"Line 5: Name list not declared."`;
+
+exports[`infinite loop detected: no state change sum: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NSC_sum(x){
+ if(is_null(x)){
+ return 0;
+ } else {
+ return head(x)+NSC_sum(x);
+ }
+ }
+ NSC_sum(list(1,2));
+
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ UndefinedVariable {
+ "location": SourceLocation {
+ "end": Position {
+ "column": 14,
+ "line": 9,
+ },
+ "start": Position {
+ "column": 10,
+ "line": 9,
+ },
+ },
+ "name": "list",
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 9: Name list not declared.",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: no state change sum: expectParsedError 2`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NBC_sum(x){
+ return head(x)+NBC_sum(tail(x));
+ }
+ NBC_sum(list(1,2)); //terminates (error)
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ UndefinedVariable {
+ "location": SourceLocation {
+ "end": Position {
+ "column": 14,
+ "line": 5,
+ },
+ "start": Position {
+ "column": 10,
+ "line": 5,
+ },
+ },
+ "name": "list",
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 5: Name list not declared.",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loop detected: unreachable condition fib 1`] = `"Line 6: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\""`;
+
+exports[`infinite loop detected: unreachable condition fib: expectParsedError 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function UC_fac(x) {
+ if (!(x!==0||x!==1)) {
+ return 1;
+ } else {
+ return x*UC_fac(x-1);
+ }
+ }
+ UC_fac(1);
+ ",
+ "displayResult": Array [],
+ "errors": Array [
+ ExceptionError {
+ "error": [Error: "Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?"],
+ "location": SourceLocation {
+ "end": Position {
+ "column": 28,
+ "line": 6,
+ },
+ "start": Position {
+ "column": 17,
+ "line": 6,
+ },
+ },
+ "severity": "Error",
+ "type": "Runtime",
+ },
+ ],
+ "parsedErrors": "Line 6: Error: \\"Infinite recursion (or runtime error) detected. Did you call a value that is outside the range of your function?\\"",
+ "result": undefined,
+ "resultStatus": "error",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`infinite loops not detected 1`] = `6`;
+
+exports[`infinite loops not detected: expectResult 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function NSC_fac(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return x*NSC_fac(x);
+ }
+ }
+ NSC_fac(0); //terminates
+
+ function NSC_fac_cond(x) {
+ return x===0?1:x*NSC_fac_cond(x);
+ }
+ NSC_fac_cond(0); //terminates
+
+ function NSC_fac_log(x,s) {
+ if (x===0) {
+ display(s);
+ return 1;
+ } else {
+ x*NSC_fac_log(x,\\"multiply by \\"+stringify(x)+\\"; \\"+s);
+ }
+ }
+ NSC_fac_log(0, \\"\\"); //terminates
+
+ function NSC_fib(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return NSC_fib(x) + NSC_fib(x);
+ }
+ }
+ NSC_fib(0); //terminates
+
+ function NSC_sum(x){
+ if(is_null(x)){
+ return 0;
+ } else {
+ return head(x)+NSC_sum(x);
+ }
+ }
+ NSC_sum(null); //terminates
+
+ function sum(x){
+ if(is_null(x)){
+ return 0;
+ } else {
+ return head(x)+sum(tail(x));
+ }
+ }
+ sum(list(1,2,3)); // sum always terminates
+ ",
+ "displayResult": Array [
+ "\\"\\"",
+ ],
+ "errors": Array [],
+ "parsedErrors": "",
+ "result": 6,
+ "resultStatus": "finished",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`returning early does not cause false positives 1`] = `1`;
+
+exports[`returning early does not cause false positives: expectResult 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function f() {
+ return 1;
+ f();
+ }
+ f();
+ ",
+ "displayResult": Array [],
+ "errors": Array [],
+ "parsedErrors": "",
+ "result": 1,
+ "resultStatus": "finished",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`scoping/shadowing does not cause false positives 1`] = `1`;
+
+exports[`scoping/shadowing does not cause false positives: expectResult 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function f() {
+ const f = () => 1;
+ return f();
+ }
+ f();
+ ",
+ "displayResult": Array [],
+ "errors": Array [],
+ "parsedErrors": "",
+ "result": 1,
+ "resultStatus": "finished",
+ "visualiseListResult": Array [],
+}
+`;
diff --git a/src/infiniteLoops/__tests__/__snapshots__/textbookExamples.ts.snap b/src/infiniteLoops/__tests__/__snapshots__/textbookExamples.ts.snap
new file mode 100644
index 000000000..b1023e92d
--- /dev/null
+++ b/src/infiniteLoops/__tests__/__snapshots__/textbookExamples.ts.snap
@@ -0,0 +1,538 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`examples from chapter1 no false positives 1 1`] = `1024`;
+
+exports[`examples from chapter1 no false positives 1: expectResult 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function square(x) {
+ return x * x;
+ }
+
+ function sum_of_squares(x,y) {
+ return square(x) + square(y);
+ }
+
+ function f(a) {
+ return sum_of_squares(a + 1, a * 2);
+ }
+
+ f(5);
+
+ function not_equal(x, y) {
+ return !(x >= y && x <= y);
+ }
+
+ not_equal(7, 4);
+
+ function fib(n) {
+ return n === 0
+ ? 0
+ : n === 1
+ ? 1
+ : fib(n - 1) + fib(n - 2);
+ }
+
+ fib(6);
+
+
+ function plus(a, b) { return a + b; }
+ function minus(a, b) { return a - b; }
+ function a_plus_abs_b(a, b) {
+ return (b >= 0 ? plus : minus)(a, b);
+ }
+
+ a_plus_abs_b(5, -4);
+
+
+ function abs(x) {
+ return x >= 0 ? x : -x;
+ }
+
+ function good_enough(guess, x) {
+ return abs(square(guess) - x) < 0.001;
+ }
+
+ function average(x,y) {
+ return (x + y) / 2;
+ }
+
+ function improve(guess, x) {
+ return average(guess, x / guess);
+ }
+
+ function sqrt_iter(guess, x) {
+ return good_enough(guess, x)
+ ? guess
+ : sqrt_iter(improve(guess, x), x);
+ }
+
+ function sqrt(x) {
+ return sqrt_iter(1, x);
+ }
+
+ sqrt(9);
+
+
+ function fib2(n) {
+ return fib_iter(1, 0, n);
+ }
+ function fib_iter(a, b, count) {
+ return count === 0
+ ? b
+ : fib_iter(a + b, a, count - 1);
+ }
+
+ fib2(6);
+
+ function A(x,y) {
+ return y === 0
+ ? 0
+ : x === 0
+ ? 2 * y
+ : y === 1
+ ? 2
+ : A(x - 1, A(x, y - 1));
+ }
+
+ A(1, 10);
+
+ ",
+ "displayResult": Array [],
+ "errors": Array [],
+ "parsedErrors": "",
+ "result": 1024,
+ "resultStatus": "finished",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`examples from chapter1 no false positives 2 1`] = `false`;
+
+exports[`examples from chapter1 no false positives 2: expectResult 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function average(n,m){
+ return (n+m)/2;
+ }
+ function abs(n){
+ return n>0?n:-n;
+ }
+ function square(n) {
+ return n*n;
+ }
+
+
+
+ function cube(x) {
+ return x * x * x;
+ }
+ function p(x) {
+ return 3 * x - 4 * cube(x);
+ }
+ function sine(angle) {
+ return !(abs(angle) > 0.1)
+ ? angle
+ : p(sine(angle / 3.0));
+ }
+
+ sine(math_PI / 2);
+
+ function expt(b,n) {
+ return expt_iter(b,n,1);
+ }
+ function expt_iter(b,counter,product) {
+ return counter === 0
+ ? product
+ : expt_iter(b,
+ counter - 1,
+ b * product);
+ }
+
+ expt(3, 4);
+
+ function expt2(b,n) {
+ return n === 0
+ ? 1
+ : b * expt2(b, n - 1);
+ }
+
+ expt2(3, 4);
+
+ function is_even(n) {
+ return n % 2 === 0;
+ }
+
+ function fast_expt(b, n) {
+ return n === 0
+ ? 1
+ : is_even(n)
+ ? square(fast_expt(b, n / 2))
+ : b * fast_expt(b, n - 1);
+ }
+
+ fast_expt(3, 4);
+
+ function gcd(a, b) {
+ return b === 0 ? a : gcd(b, a % b);
+ }
+
+ gcd(20, 12);
+
+ function smallest_divisor(n) {
+ return find_divisor(n, 2);
+ }
+ function find_divisor(n, test_divisor) {
+ return square(test_divisor) > n
+ ? n
+ : divides(test_divisor, n)
+ ? test_divisor
+ : find_divisor(n, test_divisor + 1);
+ }
+ function divides(a, b) {
+ return b % a === 0;
+ }
+
+ function is_prime(n) {
+ return n === smallest_divisor(n);
+ }
+
+ is_prime(42);
+ ",
+ "displayResult": Array [],
+ "errors": Array [],
+ "parsedErrors": "",
+ "result": false,
+ "resultStatus": "finished",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`examples from chapter1 no false positives 3 1`] = `0`;
+
+exports[`examples from chapter1 no false positives 3: expectResult 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function average(n,m){
+ return (n+m)/2;
+ }
+ function abs(n){
+ return n>0?n:-n;
+ }
+ function is_even(n){
+ return n%2===0;
+ }
+ function square(n) {
+ return n*n;
+ }
+ function cube(n) {
+ return n*n*n;
+ }
+ function is_prime(n) {
+ return n === smallest_divisor(n);
+ }
+ function smallest_divisor(n) {
+ return find_divisor(n, 2);
+ }
+ function find_divisor(n, test_divisor) {
+ return square(test_divisor) > n
+ ? n
+ : divides(test_divisor, n)
+ ? test_divisor
+ : find_divisor(n, test_divisor + 1);
+ }
+ function divides(a, b) {
+ return b % a === 0;
+ }
+
+ function expmod(base, exp, m) {
+ return exp === 0
+ ? 1
+ : is_even(exp)
+ ? square(expmod(base, exp / 2, m)) % m
+ : (base * expmod(base, exp - 1, m)) % m;
+ }
+ expmod(4, 3, 5);
+
+ function expmod3(base, exp, m) {
+ if (exp === 0) {
+ return 1;
+ } else {
+ if (is_even(exp)) {
+ const to_half = expmod3(base, exp / 2, m);
+ return to_half * to_half % m;
+ } else {
+ return base * expmod3(base, exp - 1, m) % m;
+ }
+ }
+ }
+
+ expmod3(4, 3, 5);
+
+ function random(n) {
+ return math_floor(math_random() * n);
+ }
+
+ function fermat_test(n) {
+ function try_it(a) {
+ return expmod(a, n, n) === a;
+ }
+ return try_it(1 + random(n - 1));
+ }
+
+ function fast_is_prime(n, times) {
+ return times === 0
+ ? true
+ : fermat_test(n)
+ ? fast_is_prime(n, times - 1)
+ : false;
+ }
+
+ fast_is_prime(91, 3);
+
+ function timed_prime_test(n) {
+ return start_prime_test(n, runtime());
+ }
+ function start_prime_test(n, start_time) {
+ return is_prime(n)
+ ? report_prime(runtime() - start_time)
+ : true;
+ }
+ function report_prime(elapsed_time) {
+ display(\\" *** \\");
+ }
+
+ timed_prime_test(43);
+
+
+
+ function pi_sum(a, b) {
+ return a > b
+ ? 0
+ : 1.0 / (a * (a + 2)) +
+ pi_sum(a + 4, b);
+ }
+
+ 8 * pi_sum(1, 100);
+
+ function sum(term, a, next, b) {
+ return a > b
+ ? 0
+ : term(a) + sum(term, next(a), next, b);
+ }
+
+ function inc(n) {
+ return n + 1;
+ }
+ function sum_cubes(a, b) {
+ return sum(cube, a, inc, b);
+ }
+
+ sum_cubes(1, 10);
+
+ function pi_sum2(a, b) {
+ function pi_term(x) {
+ return 1.0 / (x * (x + 2));
+ }
+ function pi_next(x) {
+ return x + 4;
+ }
+ return sum(pi_term, a, pi_next, b);
+ }
+
+ 8 * pi_sum2(1, 100);
+
+ function integral(f, a, b, dx) {
+ function add_dx(x) {
+ return x + dx;
+ }
+ return sum(f, a + dx / 2, add_dx, b) * dx;
+ }
+
+ integral(cube, 0, 1, 0.1);
+
+ function pi_sum3(a,b) {
+ return sum(x => 1.0 / (x * (x + 2)),
+ a,
+ x => x + 4,
+ b);
+ }
+
+ 8 * pi_sum3(1, 100);
+
+ function integral2(f, a, b, dx) {
+ return sum(f,
+ a + dx / 2.0,
+ x => x + dx,
+ b)
+ *
+ dx;
+ }
+
+ integral2(cube, 0, 1, 0.1);
+
+ function f2(x, y) {
+ function f_helper(a, b) {
+ return x * square(a) +
+ y * b +
+ a * b;
+ }
+ return f_helper(1 + x * y,
+ 1 - y);
+ }
+
+ f2(3, 4);
+
+
+ function positive(x) { return x > 0; }
+ function negative(x) { return x < 0; }
+
+ function close_enough(x,y) {
+ return abs(x - y) < 0.01;
+ }
+
+ function search(f, neg_point, pos_point) {
+ const midpoint = average(neg_point,pos_point);
+ if (close_enough(neg_point, pos_point)) {
+ return midpoint;
+ } else {
+ const test_value = f(midpoint);
+ if (positive(test_value)) {
+ return search(f, neg_point, midpoint);
+ } else if (negative(test_value)) {
+ return search(f, midpoint, pos_point);
+ } else {
+ return midpoint;
+ }
+ }
+ }
+
+ search(x => x * x - 1, 0, 2);
+
+ function half_interval_method(f, a, b) {
+ const a_value = f(a);
+ const b_value = f(b);
+ return negative(a_value) && positive(b_value)
+ ? search(f, a, b)
+ : negative(b_value) && positive(a_value)
+ ? search(f, b, a)
+ : error(\\"values are not of opposite sign\\");
+ }
+
+ half_interval_method(math_sin, 2.0, 4.0);
+
+
+ const tolerance = 0.00001;
+ function fixed_point(f, first_guess) {
+ function close_enough(x, y) {
+ return abs(x - y) < tolerance;
+ }
+ function try_with(guess) {
+ const next = f(guess);
+ return close_enough(guess, next)
+ ? next
+ : try_with(next);
+ }
+ return try_with(first_guess);
+ }
+
+ fixed_point(math_cos, 1.0);
+
+ function average_damp(f) {
+ return x => average(x, f(x));
+ }
+
+ function sqrt2(x) {
+ return fixed_point(average_damp(y => x / y),
+ 1.0);
+ }
+
+ sqrt2(6);
+
+ const dx = 0.0001;
+
+ function deriv(g) {
+ return x => (g(x + dx) - g(x)) / dx;
+ }
+
+ function newton_transform(g) {
+ return x => x - g(x) / deriv(g)(x);
+ }
+ function newtons_method(g, guess) {
+ return fixed_point(newton_transform(g), guess);
+ }
+
+ function sqrt3(x) {
+ return newtons_method(y => square(y) - x,
+ 1.0);
+ }
+
+ sqrt3(6);
+
+ function fixed_point_of_transform(g, transform, guess) {
+ return fixed_point(transform(g), guess);
+ }
+
+ function sqrt4(x) {
+ return fixed_point_of_transform(
+ y => square(y) - x,
+ newton_transform,
+ 1.0);
+ }
+
+ sqrt4(6);
+ 0;
+ ",
+ "displayResult": Array [
+ "\\" *** \\"",
+ ],
+ "errors": Array [],
+ "parsedErrors": "",
+ "result": 0,
+ "resultStatus": "finished",
+ "visualiseListResult": Array [],
+}
+`;
+
+exports[`examples from chapter1 no false positives coin change 1`] = `4`;
+
+exports[`examples from chapter1 no false positives coin change: expectResult 1`] = `
+Object {
+ "alertResult": Array [],
+ "code": "
+ function count_change(amount) {
+ return cc(amount, 5);
+ }
+ function cc(amount, kinds_of_coins) {
+ return amount === 0
+ ? 1
+ : amount < 0 ||
+ kinds_of_coins === 0
+ ? 0
+ : cc(amount, kinds_of_coins - 1)
+ +
+ cc(amount - first_denomination(
+ kinds_of_coins),
+ kinds_of_coins);
+ }
+ function first_denomination(kinds_of_coins) {
+ return kinds_of_coins === 1 ? 1 :
+ kinds_of_coins === 2 ? 5 :
+ kinds_of_coins === 3 ? 10 :
+ kinds_of_coins === 4 ? 25 :
+ kinds_of_coins === 5 ? 50 : 0;
+ }
+
+ count_change(10);
+ ",
+ "displayResult": Array [],
+ "errors": Array [],
+ "parsedErrors": "",
+ "result": 4,
+ "resultStatus": "finished",
+ "visualiseListResult": Array [],
+}
+`;
diff --git a/src/infiniteLoops/__tests__/runtimeTests.ts b/src/infiniteLoops/__tests__/runtimeTests.ts
new file mode 100644
index 000000000..f80820b96
--- /dev/null
+++ b/src/infiniteLoops/__tests__/runtimeTests.ts
@@ -0,0 +1,303 @@
+/* tslint:disable:max-line-length */
+import { expectParsedError, expectResult } from '../../utils/testing'
+
+// More test cases https://tinyurl.com/source-infloops
+// Look under UNSUPPORTED for infinite loops that cannot
+// be detected yet
+
+test('scoping/shadowing does not cause false positives', () => {
+ const code = `
+ function f() {
+ const f = () => 1;
+ return f();
+ }
+ f();
+ `
+ return expectResult(code).toMatchSnapshot()
+})
+
+test('returning early does not cause false positives', () => {
+ const code = `
+ function f() {
+ return 1;
+ f();
+ }
+ f();
+ `
+ return expectResult(code).toMatchSnapshot()
+})
+
+test('CallingNonFunctionValue does not break implementation', () => {
+ const code = `
+ function f(x) {
+ return 1(2);
+ }
+ f(1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('CallingNonFunctionValue does not break implementation', () => {
+ const code = `
+ function f(x) {
+ return 1(2);
+ }
+ f(1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('InvalidNumberOfArguments does not break implementation', () => {
+ const code = `
+ function f(x) {
+ return f() + f(1,2);
+ }
+ f(1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: countdown fac', () => {
+ const code = `
+ function CD_fac(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return x*CD_fac(x-1);
+ }
+ }
+ CD_fac(-1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: countdown fac 2', () => {
+ const code = `
+ function CD_fac_2(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return x*CD_fac_2(x-2);
+ }
+ }
+ CD_fac_2(5);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: countdown fac cond', () => {
+ const code = `
+ function CD_fac_cond(x) {
+ return x===0?1:x*CD_fac_cond(x-1);
+ }
+ CD_fac_cond(-1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: countdown fac log', () => {
+ const code = `
+ function CD_fac_log(x,s) {
+ if (x===0) {
+ //display(s);
+ return 1;
+ } else {
+ x*CD_fac_log(x-1,"multiply by "+stringify(x)+"; "+s);
+ }
+ }
+ CD_fac_log(-1,"");
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: countdown fib', () => {
+ const code = `
+ function CD_fib(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return CD_fib(x-1) + CD_fib(x-2);
+ }
+ }
+ CD_fib(-1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: unreachable condition fib', () => {
+ const code = `
+ function UC_fac(x) {
+ if (!(x!==0||x!==1)) {
+ return 1;
+ } else {
+ return x*UC_fac(x-1);
+ }
+ }
+ UC_fac(1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: no base case fac', () => {
+ const code = `
+ function NBC_fac(x) {
+ return x*NBC_fac(x-1);
+ }
+ NBC_fac(1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: no base case fac log', () => {
+ const code = `
+ function NBC_fac_log(x,s) {
+ return x*NBC_fac_log(x-1,"multiply by "+stringify(x)+"; "+s);
+ }
+ NBC_fac_log(1,"");
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: no base case fib', () => {
+ const code = `
+ function NBC_fib(x) {
+ return NBC_fib(x-1) + NBC_fib(x-2);
+ }
+ NBC_fib(1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: no state change fac', () => {
+ const code = `
+ function NSC_fac(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return x*NSC_fac(x);
+ }
+ }
+ NSC_fac(1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: no state change fac cond', () => {
+ const code = `
+ function NSC_fac_cond(x) {
+ return x===0?1:x*NSC_fac_cond(x);
+ }
+ NSC_fac_cond(1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: no state change fac log', () => {
+ const code = `
+ function NSC_fac_log(x,s) {
+ if (x===0) {
+ //display(s);
+ return 1;
+ } else {
+ x*NSC_fac_log(x,"multiply by "+stringify(x)+"; "+s);
+ }
+ }
+ NSC_fac_log(1, "");
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: no state change fib', () => {
+ const code = `
+ function NSC_fib(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return NSC_fib(x) + NSC_fib(x);
+ }
+ }
+ NSC_fib(1);
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: no state change sum', () => {
+ const code = `
+ function NSC_sum(x){
+ if(is_null(x)){
+ return 0;
+ } else {
+ return head(x)+NSC_sum(x);
+ }
+ }
+ NSC_sum(list(1,2));
+
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loop detected: no state change sum', () => {
+ const code = `
+ function NBC_sum(x){
+ return head(x)+NBC_sum(tail(x));
+ }
+ NBC_sum(list(1,2)); //terminates (error)
+ `
+ return expectParsedError(code).toMatchSnapshot()
+})
+
+test('infinite loops not detected', () => {
+ const code = `
+ function NSC_fac(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return x*NSC_fac(x);
+ }
+ }
+ NSC_fac(0); //terminates
+
+ function NSC_fac_cond(x) {
+ return x===0?1:x*NSC_fac_cond(x);
+ }
+ NSC_fac_cond(0); //terminates
+
+ function NSC_fac_log(x,s) {
+ if (x===0) {
+ display(s);
+ return 1;
+ } else {
+ x*NSC_fac_log(x,"multiply by "+stringify(x)+"; "+s);
+ }
+ }
+ NSC_fac_log(0, ""); //terminates
+
+ function NSC_fib(x) {
+ if (x===0) {
+ return 1;
+ } else {
+ return NSC_fib(x) + NSC_fib(x);
+ }
+ }
+ NSC_fib(0); //terminates
+
+ function NSC_sum(x){
+ if(is_null(x)){
+ return 0;
+ } else {
+ return head(x)+NSC_sum(x);
+ }
+ }
+ NSC_sum(null); //terminates
+
+ function sum(x){
+ if(is_null(x)){
+ return 0;
+ } else {
+ return head(x)+sum(tail(x));
+ }
+ }
+ sum(list(1,2,3)); // sum always terminates
+ `
+ return expectResult(code, { chapter: 2 }).toMatchSnapshot()
+})
diff --git a/src/infiniteLoops/__tests__/textbookExamples.ts b/src/infiniteLoops/__tests__/textbookExamples.ts
new file mode 100644
index 000000000..caf15c216
--- /dev/null
+++ b/src/infiniteLoops/__tests__/textbookExamples.ts
@@ -0,0 +1,500 @@
+/* tslint:disable:max-line-length */
+import { expectResult } from '../../utils/testing'
+
+// Examples taken from SICP to ensure normal programs
+// don't get detected as infinite loops
+
+test('examples from chapter1 no false positives 1', () => {
+ const works = `
+ function square(x) {
+ return x * x;
+ }
+
+ function sum_of_squares(x,y) {
+ return square(x) + square(y);
+ }
+
+ function f(a) {
+ return sum_of_squares(a + 1, a * 2);
+ }
+
+ f(5);
+
+ function not_equal(x, y) {
+ return !(x >= y && x <= y);
+ }
+
+ not_equal(7, 4);
+
+ function fib(n) {
+ return n === 0
+ ? 0
+ : n === 1
+ ? 1
+ : fib(n - 1) + fib(n - 2);
+ }
+
+ fib(6);
+
+
+ function plus(a, b) { return a + b; }
+ function minus(a, b) { return a - b; }
+ function a_plus_abs_b(a, b) {
+ return (b >= 0 ? plus : minus)(a, b);
+ }
+
+ a_plus_abs_b(5, -4);
+
+
+ function abs(x) {
+ return x >= 0 ? x : -x;
+ }
+
+ function good_enough(guess, x) {
+ return abs(square(guess) - x) < 0.001;
+ }
+
+ function average(x,y) {
+ return (x + y) / 2;
+ }
+
+ function improve(guess, x) {
+ return average(guess, x / guess);
+ }
+
+ function sqrt_iter(guess, x) {
+ return good_enough(guess, x)
+ ? guess
+ : sqrt_iter(improve(guess, x), x);
+ }
+
+ function sqrt(x) {
+ return sqrt_iter(1, x);
+ }
+
+ sqrt(9);
+
+
+ function fib2(n) {
+ return fib_iter(1, 0, n);
+ }
+ function fib_iter(a, b, count) {
+ return count === 0
+ ? b
+ : fib_iter(a + b, a, count - 1);
+ }
+
+ fib2(6);
+
+ function A(x,y) {
+ return y === 0
+ ? 0
+ : x === 0
+ ? 2 * y
+ : y === 1
+ ? 2
+ : A(x - 1, A(x, y - 1));
+ }
+
+ A(1, 10);
+
+ `
+ return expectResult(works).toMatchSnapshot()
+})
+
+test('examples from chapter1 no false positives 2', () => {
+ const works = `
+ function average(n,m){
+ return (n+m)/2;
+ }
+ function abs(n){
+ return n>0?n:-n;
+ }
+ function square(n) {
+ return n*n;
+ }
+
+
+
+ function cube(x) {
+ return x * x * x;
+ }
+ function p(x) {
+ return 3 * x - 4 * cube(x);
+ }
+ function sine(angle) {
+ return !(abs(angle) > 0.1)
+ ? angle
+ : p(sine(angle / 3.0));
+ }
+
+ sine(math_PI / 2);
+
+ function expt(b,n) {
+ return expt_iter(b,n,1);
+ }
+ function expt_iter(b,counter,product) {
+ return counter === 0
+ ? product
+ : expt_iter(b,
+ counter - 1,
+ b * product);
+ }
+
+ expt(3, 4);
+
+ function expt2(b,n) {
+ return n === 0
+ ? 1
+ : b * expt2(b, n - 1);
+ }
+
+ expt2(3, 4);
+
+ function is_even(n) {
+ return n % 2 === 0;
+ }
+
+ function fast_expt(b, n) {
+ return n === 0
+ ? 1
+ : is_even(n)
+ ? square(fast_expt(b, n / 2))
+ : b * fast_expt(b, n - 1);
+ }
+
+ fast_expt(3, 4);
+
+ function gcd(a, b) {
+ return b === 0 ? a : gcd(b, a % b);
+ }
+
+ gcd(20, 12);
+
+ function smallest_divisor(n) {
+ return find_divisor(n, 2);
+ }
+ function find_divisor(n, test_divisor) {
+ return square(test_divisor) > n
+ ? n
+ : divides(test_divisor, n)
+ ? test_divisor
+ : find_divisor(n, test_divisor + 1);
+ }
+ function divides(a, b) {
+ return b % a === 0;
+ }
+
+ function is_prime(n) {
+ return n === smallest_divisor(n);
+ }
+
+ is_prime(42);
+ `
+ return expectResult(works).toMatchSnapshot()
+})
+
+test('examples from chapter1 no false positives 3', () => {
+ const works = `
+ function average(n,m){
+ return (n+m)/2;
+ }
+ function abs(n){
+ return n>0?n:-n;
+ }
+ function is_even(n){
+ return n%2===0;
+ }
+ function square(n) {
+ return n*n;
+ }
+ function cube(n) {
+ return n*n*n;
+ }
+ function is_prime(n) {
+ return n === smallest_divisor(n);
+ }
+ function smallest_divisor(n) {
+ return find_divisor(n, 2);
+ }
+ function find_divisor(n, test_divisor) {
+ return square(test_divisor) > n
+ ? n
+ : divides(test_divisor, n)
+ ? test_divisor
+ : find_divisor(n, test_divisor + 1);
+ }
+ function divides(a, b) {
+ return b % a === 0;
+ }
+
+ function expmod(base, exp, m) {
+ return exp === 0
+ ? 1
+ : is_even(exp)
+ ? square(expmod(base, exp / 2, m)) % m
+ : (base * expmod(base, exp - 1, m)) % m;
+ }
+ expmod(4, 3, 5);
+
+ function expmod3(base, exp, m) {
+ if (exp === 0) {
+ return 1;
+ } else {
+ if (is_even(exp)) {
+ const to_half = expmod3(base, exp / 2, m);
+ return to_half * to_half % m;
+ } else {
+ return base * expmod3(base, exp - 1, m) % m;
+ }
+ }
+ }
+
+ expmod3(4, 3, 5);
+
+ function random(n) {
+ return math_floor(math_random() * n);
+ }
+
+ function fermat_test(n) {
+ function try_it(a) {
+ return expmod(a, n, n) === a;
+ }
+ return try_it(1 + random(n - 1));
+ }
+
+ function fast_is_prime(n, times) {
+ return times === 0
+ ? true
+ : fermat_test(n)
+ ? fast_is_prime(n, times - 1)
+ : false;
+ }
+
+ fast_is_prime(91, 3);
+
+ function timed_prime_test(n) {
+ return start_prime_test(n, runtime());
+ }
+ function start_prime_test(n, start_time) {
+ return is_prime(n)
+ ? report_prime(runtime() - start_time)
+ : true;
+ }
+ function report_prime(elapsed_time) {
+ display(" *** ");
+ }
+
+ timed_prime_test(43);
+
+
+
+ function pi_sum(a, b) {
+ return a > b
+ ? 0
+ : 1.0 / (a * (a + 2)) +
+ pi_sum(a + 4, b);
+ }
+
+ 8 * pi_sum(1, 100);
+
+ function sum(term, a, next, b) {
+ return a > b
+ ? 0
+ : term(a) + sum(term, next(a), next, b);
+ }
+
+ function inc(n) {
+ return n + 1;
+ }
+ function sum_cubes(a, b) {
+ return sum(cube, a, inc, b);
+ }
+
+ sum_cubes(1, 10);
+
+ function pi_sum2(a, b) {
+ function pi_term(x) {
+ return 1.0 / (x * (x + 2));
+ }
+ function pi_next(x) {
+ return x + 4;
+ }
+ return sum(pi_term, a, pi_next, b);
+ }
+
+ 8 * pi_sum2(1, 100);
+
+ function integral(f, a, b, dx) {
+ function add_dx(x) {
+ return x + dx;
+ }
+ return sum(f, a + dx / 2, add_dx, b) * dx;
+ }
+
+ integral(cube, 0, 1, 0.1);
+
+ function pi_sum3(a,b) {
+ return sum(x => 1.0 / (x * (x + 2)),
+ a,
+ x => x + 4,
+ b);
+ }
+
+ 8 * pi_sum3(1, 100);
+
+ function integral2(f, a, b, dx) {
+ return sum(f,
+ a + dx / 2.0,
+ x => x + dx,
+ b)
+ *
+ dx;
+ }
+
+ integral2(cube, 0, 1, 0.1);
+
+ function f2(x, y) {
+ function f_helper(a, b) {
+ return x * square(a) +
+ y * b +
+ a * b;
+ }
+ return f_helper(1 + x * y,
+ 1 - y);
+ }
+
+ f2(3, 4);
+
+
+ function positive(x) { return x > 0; }
+ function negative(x) { return x < 0; }
+
+ function close_enough(x,y) {
+ return abs(x - y) < 0.01;
+ }
+
+ function search(f, neg_point, pos_point) {
+ const midpoint = average(neg_point,pos_point);
+ if (close_enough(neg_point, pos_point)) {
+ return midpoint;
+ } else {
+ const test_value = f(midpoint);
+ if (positive(test_value)) {
+ return search(f, neg_point, midpoint);
+ } else if (negative(test_value)) {
+ return search(f, midpoint, pos_point);
+ } else {
+ return midpoint;
+ }
+ }
+ }
+
+ search(x => x * x - 1, 0, 2);
+
+ function half_interval_method(f, a, b) {
+ const a_value = f(a);
+ const b_value = f(b);
+ return negative(a_value) && positive(b_value)
+ ? search(f, a, b)
+ : negative(b_value) && positive(a_value)
+ ? search(f, b, a)
+ : error("values are not of opposite sign");
+ }
+
+ half_interval_method(math_sin, 2.0, 4.0);
+
+
+ const tolerance = 0.00001;
+ function fixed_point(f, first_guess) {
+ function close_enough(x, y) {
+ return abs(x - y) < tolerance;
+ }
+ function try_with(guess) {
+ const next = f(guess);
+ return close_enough(guess, next)
+ ? next
+ : try_with(next);
+ }
+ return try_with(first_guess);
+ }
+
+ fixed_point(math_cos, 1.0);
+
+ function average_damp(f) {
+ return x => average(x, f(x));
+ }
+
+ function sqrt2(x) {
+ return fixed_point(average_damp(y => x / y),
+ 1.0);
+ }
+
+ sqrt2(6);
+
+ const dx = 0.0001;
+
+ function deriv(g) {
+ return x => (g(x + dx) - g(x)) / dx;
+ }
+
+ function newton_transform(g) {
+ return x => x - g(x) / deriv(g)(x);
+ }
+ function newtons_method(g, guess) {
+ return fixed_point(newton_transform(g), guess);
+ }
+
+ function sqrt3(x) {
+ return newtons_method(y => square(y) - x,
+ 1.0);
+ }
+
+ sqrt3(6);
+
+ function fixed_point_of_transform(g, transform, guess) {
+ return fixed_point(transform(g), guess);
+ }
+
+ function sqrt4(x) {
+ return fixed_point_of_transform(
+ y => square(y) - x,
+ newton_transform,
+ 1.0);
+ }
+
+ sqrt4(6);
+ 0;
+ `
+ return expectResult(works).toMatchSnapshot()
+})
+
+test('examples from chapter1 no false positives coin change', () => {
+ const works = `
+ function count_change(amount) {
+ return cc(amount, 5);
+ }
+ function cc(amount, kinds_of_coins) {
+ return amount === 0
+ ? 1
+ : amount < 0 ||
+ kinds_of_coins === 0
+ ? 0
+ : cc(amount, kinds_of_coins - 1)
+ +
+ cc(amount - first_denomination(
+ kinds_of_coins),
+ kinds_of_coins);
+ }
+ function first_denomination(kinds_of_coins) {
+ return kinds_of_coins === 1 ? 1 :
+ kinds_of_coins === 2 ? 5 :
+ kinds_of_coins === 3 ? 10 :
+ kinds_of_coins === 4 ? 25 :
+ kinds_of_coins === 5 ? 50 : 0;
+ }
+
+ count_change(10);
+ `
+ return expectResult(works).toMatchSnapshot()
+})
diff --git a/src/infiniteLoops/analyzer.ts b/src/infiniteLoops/analyzer.ts
new file mode 100644
index 000000000..84f3a04f8
--- /dev/null
+++ b/src/infiniteLoops/analyzer.ts
@@ -0,0 +1,167 @@
+import * as stype from './symTypes'
+import * as es from 'estree'
+
+/* if all callees = caller, no terminate symbol -> no base case
+ * if caller function always calls itself no matter what -> no base case
+ */
+function checkBaseCase(tset: stype.TransitionSet): stype.InfiniteLoopChecker[] {
+ function makeChecker(name: string, loc: es.SourceLocation): stype.InfiniteLoopChecker {
+ return stype.makeLoopChecker(name, 'Did you forget your base case?', null, loc)
+ }
+ function getName(sym: stype.FunctionSymbol | stype.TerminateSymbol) {
+ return sym.type === 'TerminateSymbol' ? '*' : sym.name
+ }
+
+ const checkers: stype.InfiniteLoopChecker[] = []
+ for (const [name, transitions] of tset.entries()) {
+ const calleeNames = transitions.map(x => getName(x.callee))
+ if (calleeNames.every(x => x === name)) {
+ const loc = transitions[0].caller.loc
+ checkers.push(makeChecker(name, loc))
+ }
+ }
+
+ return checkers
+}
+
+/* check if the function calls itself without swapping variables, i.e.
+ * f(x,y) calls f(x+1,y+1) returns true, but
+ * f(x,y) calls f(y,x) returns false
+ */
+function alignedArgs(f1: stype.FunctionSymbol, f2: stype.FunctionSymbol) {
+ if (f1.args.length !== f2.args.length) return false
+ for (let i = 0; i < f1.args.length; i++) {
+ const a1 = f1.args[i]
+ const a2 = f2.args[i]
+ const sameNumber =
+ a1.type === 'NumberSymbol' && a2.type === 'NumberSymbol' && a1.name === a2.name
+ const hasSkip = a1.type === 'SkipSymbol' || a2.type === 'SkipSymbol'
+ if (sameNumber || hasSkip) {
+ continue
+ }
+ return false
+ }
+ return true
+}
+
+function getArg(sym: stype.FunctionSymbol, name: string) {
+ for (let i = 0; i < sym.args.length; i++) {
+ const x = sym.args[i]
+ if (x.type === 'NumberSymbol' && x.name === name) {
+ return i
+ }
+ }
+ return -1
+}
+
+/* checks for countdown functions, see documentation
+ * for more details
+ */
+
+function checkCountdown(tset: stype.TransitionSet): stype.InfiniteLoopChecker[] {
+ function check1(transition: stype.Transition) {
+ const caller = transition.caller
+ const callee = transition.callee
+ if (
+ callee.type === 'FunctionSymbol' &&
+ caller.name === callee.name &&
+ alignedArgs(caller, callee)
+ ) {
+ const cond = transition.condition
+ if (cond?.type === 'InequalitySymbol') {
+ const idx = getArg(callee, cond.name)
+ if (idx !== -1 && callee.args.length > idx) {
+ const arg = callee.args[idx] as stype.NumberSymbol
+ if (arg?.isPositive && arg.constant * cond.direction > 0) {
+ return stype.makeLoopChecker(
+ caller.name,
+ 'Did you call a value that is outside the range of your function?',
+ cond,
+ callee.loc
+ )
+ }
+ }
+ }
+ }
+ return undefined
+ }
+ const checkers: stype.InfiniteLoopChecker[] = []
+ for (const transitions of tset.values()) {
+ for (const transition of transitions) {
+ const checker = check1(transition)
+ if (checker) {
+ checkers.push(checker)
+ }
+ }
+ }
+ return checkers
+}
+
+/* call all the variables that appear in the condition of the transition
+ * 'relevant variables'. If the function calls itself but does not change
+ * any of the relevant variables, there will be an infinite loop.
+ */
+
+function checkStateChange(tset: stype.TransitionSet): stype.InfiniteLoopChecker[] {
+ function sameArgs(f1: stype.FunctionSymbol, f2: stype.SSymbol, names: string[]) {
+ if (f2.type !== 'FunctionSymbol' || f1.name !== f2.name || !alignedArgs(f1, f2)) return false
+ for (let i = 0; i < f1.args.length; i++) {
+ const a1 = f1.args[i]
+ const a2 = f2.args[i]
+ if (
+ a1.type === 'NumberSymbol' &&
+ a2.type === 'NumberSymbol' &&
+ a1.name === a2.name &&
+ a1.constant === a2.constant &&
+ a1.isPositive === a2.isPositive
+ ) {
+ // a1 & a2 are exactly the same
+ continue
+ }
+ for (const name of names) {
+ if (a1.type === 'NumberSymbol' && a1.name === name) return false
+ }
+ }
+ return true
+ }
+ function getNames(sym: stype.BooleanSymbol | null): string[] {
+ if (sym === null) return []
+ if (sym.type === 'InequalitySymbol') {
+ return [sym.name]
+ } else {
+ return getNames(sym.left).concat(getNames(sym.right))
+ }
+ }
+
+ const checkers: stype.InfiniteLoopChecker[] = []
+ for (const transitions of tset.values()) {
+ for (const transition of transitions) {
+ const cond = transition.condition
+ const caller = transition.caller
+ const callee = transition.callee
+ if (
+ cond &&
+ cond.type !== 'SkipSymbol' &&
+ callee.type === 'FunctionSymbol' &&
+ sameArgs(caller, callee, getNames(cond))
+ ) {
+ const name = transition.caller.name
+ const checker = stype.makeLoopChecker(
+ name,
+ 'Check your recursive function calls.',
+ cond,
+ callee.loc
+ )
+ checkers.push(checker)
+ }
+ }
+ }
+ return checkers
+}
+
+export function getCheckers(tset: stype.TransitionSet) {
+ const checkers1 = checkCountdown(tset)
+ const checkers2 = checkBaseCase(tset)
+ const checkers3 = checkStateChange(tset)
+ return checkers1.concat(checkers2).concat(checkers3)
+}
diff --git a/src/infiniteLoops/serializer.ts b/src/infiniteLoops/serializer.ts
new file mode 100644
index 000000000..365e8b530
--- /dev/null
+++ b/src/infiniteLoops/serializer.ts
@@ -0,0 +1,141 @@
+import * as stype from './symTypes'
+
+/* simplify conjunctions for easy analysis, e.g.
+ * (x<5 && x<10) --> (x<10)
+ */
+function collapseConjunction(node: stype.BooleanSymbol): stype.BooleanSymbol {
+ if (node.type === 'LogicalSymbol' && node.conjunction) {
+ const left = node.left
+ const right = node.right
+ if (
+ left.type === 'InequalitySymbol' &&
+ right.type === 'InequalitySymbol' &&
+ left.direction === right.direction &&
+ left.name === right.name
+ ) {
+ const direction = left.direction
+ const name = left.name
+ if (left.direction < 0) {
+ return stype.makeInequalitySymbol(name, Math.min(left.constant, right.constant), direction)
+ } else if (left.direction > 0) {
+ return stype.makeInequalitySymbol(name, Math.max(left.constant, right.constant), direction)
+ }
+ } else {
+ return { ...node, left: collapseConjunction(left), right: collapseConjunction(right) }
+ }
+ }
+ return node
+}
+
+/* simplify expression to DNF, i.e. sum of products.
+ * store each product as an element in a list
+ */
+
+function seperateDisjunctions(node: stype.BooleanSymbol): stype.BooleanSymbol[] {
+ if (node.type === 'LogicalSymbol') {
+ const splitLeft = seperateDisjunctions(node.left)
+ const splitRight = seperateDisjunctions(node.right)
+ if (node.conjunction) {
+ const res = []
+ for (const left of splitLeft) {
+ for (const right of splitRight) {
+ res.push(stype.makeLogicalSymbol(left, right, true))
+ }
+ }
+ return res
+ } else {
+ return splitLeft.concat(splitRight)
+ }
+ }
+ return [node]
+}
+export function processLogical(node: stype.BooleanSymbol) {
+ return seperateDisjunctions(node).map(collapseConjunction)
+}
+
+/* for nested functions, we want to make another transition, i.e.
+ * f(x) {g(h(x));} -> f calls g, f calls h.
+ * TODO: need to reconsider nested calls. Uncommenting the lines
+ * below will include nested calls, but will cause trouble
+ * with NoBaseCase detection. Possibly add a flag in the
+ * T-set for nested calls? Can be put on hold for now
+ * since we don't handle nested calls at all.
+ */
+function flattenFun(node: stype.FunctionSymbol): stype.FunctionSymbol[] {
+ const newArgs = []
+ // let nestedCalls: stype.FunctionSymbol[] = []
+ for (const arg of node.args) {
+ if (arg.type === 'FunctionSymbol') {
+ newArgs.push(stype.skipSymbol)
+ // nestedCalls = nestedCalls.concat(flattenFun(arg))
+ } else {
+ newArgs.push(arg)
+ }
+ }
+ // nestedCalls.unshift({ ...node, args: newArgs })
+ return [{ ...node, args: newArgs }]
+}
+
+/* creates a transition for each functionSymbol in the symbol tree
+ * refer to the documentation for more info
+ */
+function unTree(node: stype.SSymbol): stype.SSymbol[][] {
+ if (stype.isTerminal(node)) {
+ return [[stype.terminateSymbol]]
+ } else if (node.type === 'SequenceSymbol') {
+ let result: stype.SSymbol[][] = []
+ const temp = node.symbols.map(unTree)
+ for (const subList of temp) {
+ result = result.concat(subList)
+ }
+ if (result.length === 0) {
+ return [[stype.terminateSymbol]]
+ }
+ return result
+ } else if (node.type === 'BranchSymbol') {
+ const consTail = unTree(node.consequent)
+ const altTail = unTree(node.alternate)
+ let result: stype.SSymbol[][] = []
+ if (stype.isBooleanSymbol(node.test)) {
+ for (const sym of processLogical(node.test)) {
+ result = result.concat(consTail.map(x => [sym as stype.SSymbol].concat(x)))
+ }
+ for (const sym of processLogical(stype.negateBooleanSymbol(node.test))) {
+ result = result.concat(altTail.map(x => [sym as stype.SSymbol].concat(x)))
+ }
+ } else {
+ result = result.concat(consTail.map(x => [stype.skipSymbol as stype.SSymbol].concat(x)))
+ result = result.concat(altTail.map(x => [stype.skipSymbol as stype.SSymbol].concat(x)))
+ }
+ return result
+ } else if (node.type === 'FunctionSymbol') {
+ return [flattenFun(node)]
+ }
+ return []
+}
+
+export function serialize(
+ firstCall: stype.FunctionSymbol,
+ node: stype.SSymbol
+): stype.Transition[] {
+ const result: stype.Transition[] = []
+ const symLists = unTree(node)
+
+ for (const sList of symLists) {
+ let cond = null
+ for (const sym of sList) {
+ if (stype.isBooleanSymbol(sym)) {
+ if (cond === null) {
+ cond = sym
+ } else if (stype.isBooleanSymbol(cond)) {
+ cond = stype.makeLogicalSymbol(cond, sym, true)
+ } // if cond = skip, don't change cond
+ } else if (sym.type === 'FunctionSymbol' || sym.type === 'TerminateSymbol') {
+ result.push(stype.makeTransition(firstCall, sym, cond))
+ } else if (sym.type === 'SkipSymbol') {
+ cond = stype.skipSymbol
+ }
+ }
+ }
+ return result
+}
diff --git a/src/infiniteLoops/symTypes.ts b/src/infiniteLoops/symTypes.ts
new file mode 100644
index 000000000..aee95fb8f
--- /dev/null
+++ b/src/infiniteLoops/symTypes.ts
@@ -0,0 +1,176 @@
+import * as es from 'estree'
+
+// TODO find a better name
+export type SSymbol =
+ | NumberSymbol
+ | InequalitySymbol
+ | FunctionSymbol
+ | BranchSymbol
+ | SequenceSymbol
+ | UnusedSymbol
+ | SkipSymbol
+ | TerminateSymbol
+ | BooleanSymbol
+ | LiteralValueSymbol
+export type BooleanSymbol = InequalitySymbol | LogicalSymbol
+export interface NumberSymbol {
+ type: 'NumberSymbol'
+ name: string
+ constant: number
+ isPositive: boolean
+}
+export function makeNumberSymbol(name: string, constant: number, isPositive?: boolean) {
+ return {
+ type: 'NumberSymbol',
+ name,
+ constant,
+ isPositive: isPositive === undefined ? true : isPositive
+ } as NumberSymbol
+}
+export interface LiteralValueSymbol {
+ type: 'LiteralValueSymbol'
+ value: number | boolean
+}
+export function makeLiteralValueSymbol(value: number | boolean) {
+ return { type: 'LiteralValueSymbol', value } as LiteralValueSymbol
+}
+// here for convenience
+export interface LogicalSymbol {
+ type: 'LogicalSymbol'
+ left: BooleanSymbol
+ right: BooleanSymbol
+ conjunction: boolean
+}
+export function makeLogicalSymbol(
+ left: BooleanSymbol,
+ right: BooleanSymbol,
+ conjunction?: boolean
+) {
+ return {
+ type: 'LogicalSymbol',
+ left,
+ right,
+ conjunction: conjunction === undefined ? true : conjunction
+ } as LogicalSymbol
+}
+export interface InequalitySymbol {
+ type: 'InequalitySymbol'
+ name: string
+ constant: number
+ direction: number
+}
+export function makeInequalitySymbol(name: string, constant: number, direction: number) {
+ return { type: 'InequalitySymbol', name, constant, direction } as InequalitySymbol
+}
+export interface FunctionSymbol {
+ type: 'FunctionSymbol'
+ name: string
+ args: SSymbol[]
+ loc: es.SourceLocation
+}
+export function makeFunctionSymbol(name: string, args: SSymbol[], loc: es.SourceLocation) {
+ return { type: 'FunctionSymbol', name, args, loc } as FunctionSymbol
+}
+export interface BranchSymbol {
+ type: 'BranchSymbol'
+ test: SSymbol
+ consequent: SSymbol
+ alternate: SSymbol
+}
+export function makeBranchSymbol(test: SSymbol, consequent: SSymbol, alternate: SSymbol) {
+ return { type: 'BranchSymbol', test, consequent, alternate } as BranchSymbol
+}
+export interface SequenceSymbol {
+ type: 'SequenceSymbol'
+ symbols: SSymbol[]
+}
+export function makeSequenceSymbol(symbols: SSymbol[]) {
+ return { type: 'SequenceSymbol', symbols } as SequenceSymbol
+}
+export interface SkipSymbol {
+ type: 'SkipSymbol'
+}
+export interface TerminateSymbol {
+ type: 'TerminateSymbol'
+}
+export interface UnusedSymbol {
+ type: 'UnusedSymbol'
+}
+export const skipSymbol = { type: 'SkipSymbol' } as SkipSymbol
+export const terminateSymbol = { type: 'TerminateSymbol' } as TerminateSymbol
+export const unusedSymbol = { type: 'UnusedSymbol' } as UnusedSymbol
+export type SymbolicExecutable = es.Node | SSymbol
+export function isSymbol(node: SymbolicExecutable): node is SSymbol {
+ return node.type.slice(-6) === 'Symbol'
+}
+export function negateBooleanSymbol(sym: BooleanSymbol): BooleanSymbol {
+ if (sym.type === 'LogicalSymbol') {
+ const newLhs = negateBooleanSymbol(sym.left)
+ const newRhs = negateBooleanSymbol(sym.right)
+ return makeLogicalSymbol(newLhs, newRhs, !sym.conjunction) // de morgans
+ } else if (sym.type === 'InequalitySymbol') {
+ if (sym.direction === 0) {
+ return makeLogicalSymbol({ ...sym, direction: 1 }, { ...sym, direction: -1 }, false)
+ } else {
+ const newConst = sym.constant + sym.direction
+ return makeInequalitySymbol(sym.name, newConst, -sym.direction)
+ }
+ }
+ return sym
+}
+export function isBooleanSymbol(node: SymbolicExecutable): node is BooleanSymbol {
+ return node.type === 'LogicalSymbol' || node.type === 'InequalitySymbol'
+}
+export function negateNumberSymbol(sym: NumberSymbol): NumberSymbol {
+ return { ...sym, constant: -sym.constant, isPositive: !sym.isPositive }
+}
+
+export function isTerminal(node: SymbolicExecutable): boolean {
+ if (node.type === 'BranchSymbol') {
+ return isTerminal(node.consequent) && isTerminal(node.alternate)
+ } else if (node.type === 'SequenceSymbol') {
+ return node.symbols.every(isTerminal)
+ }
+ return node.type !== 'FunctionSymbol' && node.type !== 'SkipSymbol'
+}
+
+export function terminalOrSkip(node: SymbolicExecutable): boolean {
+ return isTerminal(node) || node.type === 'SkipSymbol'
+}
+
+export interface Transition {
+ caller: FunctionSymbol
+ callee: FunctionSymbol | TerminateSymbol
+ condition: BooleanSymbol | SkipSymbol | null
+}
+
+export function makeTransition(
+ caller: FunctionSymbol,
+ callee: FunctionSymbol | TerminateSymbol,
+ condition: BooleanSymbol | SkipSymbol | null
+) {
+ return { caller, callee, condition } as Transition
+}
+
+export type TransitionSet = Map
+
+export interface InfiniteLoopChecker {
+ functionName: string
+ message: string
+ condition: BooleanSymbol
+ loc: es.SourceLocation
+}
+
+export function makeLoopChecker(
+ functionName: string,
+ message: string,
+ condition: BooleanSymbol | null,
+ loc: es.SourceLocation
+) {
+ return {
+ functionName,
+ message: 'Infinite recursion (or runtime error) detected. ' + message,
+ condition,
+ loc
+ } as InfiniteLoopChecker
+}
diff --git a/src/infiniteLoops/symbolicExecutor.ts b/src/infiniteLoops/symbolicExecutor.ts
new file mode 100644
index 000000000..00ce28aee
--- /dev/null
+++ b/src/infiniteLoops/symbolicExecutor.ts
@@ -0,0 +1,339 @@
+import * as es from 'estree'
+import * as stype from './symTypes'
+
+/* Input is asymmetric, i.e. sym + literal
+ * or literal + sym, so the idea is to only handle
+ * 1 of these cases and reuse it to handle the other.
+ * using the 'flipped' flag
+ */
+function execBinarySymbol(
+ node1: stype.SymbolicExecutable,
+ node2: stype.SymbolicExecutable,
+ op: string,
+ flipped: boolean
+): stype.SSymbol {
+ type opFunction = (value: number, sym: stype.NumberSymbol, flipped: boolean) => stype.SSymbol
+ const operators: { [nodeType: string]: opFunction } = {
+ '+'(value: number, sym: stype.NumberSymbol, flip: boolean) {
+ return { ...sym, constant: sym.constant + value }
+ },
+ '-'(value: number, sym: stype.NumberSymbol, flip: boolean) {
+ if (flip) {
+ return { ...sym, constant: value - sym.constant, isPositive: !sym.isPositive }
+ } else {
+ return { ...sym, constant: sym.constant - value }
+ }
+ },
+ '==='(value: number, sym: stype.NumberSymbol, flip: boolean) {
+ return stype.makeInequalitySymbol(sym.name, value - sym.constant, 0)
+ },
+ '<'(value: number, sym: stype.NumberSymbol, flip: boolean) {
+ if (sym.isPositive) {
+ if (flip) {
+ return stype.makeInequalitySymbol(sym.name, value - sym.constant, 1)
+ } else {
+ return stype.makeInequalitySymbol(sym.name, value - sym.constant, -1)
+ }
+ } else {
+ const negated = stype.negateNumberSymbol(sym)
+ return operators['>'](value, negated, flip)
+ }
+ },
+ '>'(value: number, sym: stype.NumberSymbol, flip: boolean) {
+ return operators['<'](value, sym, !flip)
+ },
+ '<='(value: number, sym: stype.NumberSymbol, flip: boolean) {
+ if (flip) {
+ return operators['<'](value - 1, sym, flip)
+ } else {
+ return operators['<'](value + 1, sym, flip)
+ }
+ },
+ '>='(value: number, sym: stype.NumberSymbol, flip: boolean) {
+ return operators['<='](value, sym, !flip)
+ },
+ '!=='(value: number, sym: stype.NumberSymbol, flip: boolean) {
+ return stype.negateBooleanSymbol(
+ operators['==='](value, sym, false) as stype.InequalitySymbol
+ )
+ }
+ }
+ if (node1.type === 'LiteralValueSymbol' && node2.type === 'NumberSymbol') {
+ return execBinarySymbol(node2, node1, op, true)
+ } else if (node2.type === 'LiteralValueSymbol' && node1.type === 'NumberSymbol') {
+ const val = node2.value
+ if (typeof val === 'number' && Number.isInteger(val)) {
+ const toRun = operators[op]
+ if (toRun !== undefined) {
+ return toRun(val, node1 as stype.NumberSymbol, flipped)
+ }
+ }
+ } else if (node1.type === 'FunctionSymbol') {
+ if (node2.type === 'FunctionSymbol') {
+ return stype.makeSequenceSymbol([node1, node2])
+ } else {
+ return node1
+ }
+ } else if (node2.type === 'FunctionSymbol') {
+ return node2
+ }
+ return stype.skipSymbol
+}
+
+function execLogicalSymbol(
+ node1: stype.SymbolicExecutable,
+ node2: stype.SymbolicExecutable,
+ op: string
+): stype.SSymbol {
+ if (node1.type === 'LiteralValueSymbol') {
+ if (node2.type === 'LiteralValueSymbol') {
+ return stype.skipSymbol
+ } else {
+ return execLogicalSymbol(node2, node1, op)
+ }
+ } else if (stype.isBooleanSymbol(node1)) {
+ if (node2.type === 'LiteralValueSymbol' && typeof node2.value === 'boolean') {
+ const val = node2.value
+ if ((val && op === '&&') || op === '||') {
+ return node1
+ }
+ } else if (stype.isBooleanSymbol(node2)) {
+ return stype.makeLogicalSymbol(node1, node2, op === '&&')
+ }
+ } else if (node1.type === 'FunctionSymbol') {
+ if (node2.type === 'FunctionSymbol') {
+ return stype.makeSequenceSymbol([node1, node2])
+ } else {
+ return node1
+ }
+ } else if (node2.type === 'FunctionSymbol') {
+ return node2
+ }
+ return stype.skipSymbol
+}
+
+function getFromStore(name: string, store: Map[]) {
+ for (const st of store) {
+ if (st.has(name)) {
+ return st.get(name)
+ }
+ }
+ return undefined
+}
+
+function ifNullWrapDummyLoc(loc: es.SourceLocation | undefined | null) {
+ const pos = { line: 10, column: 1 } as es.Position
+ const dummy = { source: null, start: pos, end: pos } as es.SourceLocation
+ return loc ? loc : dummy
+}
+
+export function getFirstCall(node: es.FunctionDeclaration): stype.FunctionSymbol {
+ function doParam(param: es.Node) {
+ if (param.type === 'Identifier') {
+ return stype.makeNumberSymbol(param.name, 0)
+ }
+ return stype.unusedSymbol
+ }
+ const id = node.id as es.Identifier
+ const args = node.params.map(doParam)
+ return stype.makeFunctionSymbol(id.name, args, ifNullWrapDummyLoc(node.loc))
+}
+
+function deleteAllAfterReturn(input: es.Node[]): es.Node[] {
+ function helper(nodes: es.Node[]): [boolean, es.Node[]] {
+ const output: es.Node[] = []
+ for (const nd of nodes) {
+ if (nd.type === 'ReturnStatement') {
+ output.push(nd)
+ return [true, output]
+ } else if (nd.type === 'BlockStatement') {
+ let newBody
+ let changedNodes
+ ;[changedNodes, newBody] = helper(nd.body)
+ const newBlock = { ...nd, body: newBody } as es.BlockStatement
+ output.push(newBlock)
+ if (changedNodes) {
+ return [true, output]
+ }
+ } else {
+ output.push(nd)
+ }
+ }
+ return [false, output]
+ }
+ return helper(input)[1]
+}
+
+type Executor = (node: es.Node, store: Map[]) => stype.SSymbol
+
+// similar to evaluators in the interpreter
+export const nodeToSym: { [nodeType: string]: Executor } = {
+ Literal(node: es.Literal, store: Map[]) {
+ if (typeof node.value === 'number' || typeof node.value === 'boolean') {
+ return stype.makeLiteralValueSymbol(node.value)
+ }
+ return stype.skipSymbol
+ },
+ Identifier(node: es.Identifier, store: Map[]) {
+ const checkStore = getFromStore(node.name, store)
+ if (checkStore) {
+ return checkStore
+ }
+ return stype.skipSymbol
+ },
+ VariableDeclaration(node: es.VariableDeclaration, store: Map[]) {
+ const declaration = node.declarations[0]
+ const rhs = declaration.init
+ const id = declaration.id as es.Identifier
+ if (rhs) {
+ const result = symEx(rhs, store)
+ if (stype.isTerminal(result)) {
+ store[0].set(id.name, result)
+ return stype.unusedSymbol
+ } else {
+ store[0].set(id.name, stype.skipSymbol)
+ return result
+ }
+ }
+ return stype.skipSymbol
+ },
+ FunctionDeclaration(node: es.FunctionDeclaration, store: Map[]) {
+ const id = node.id
+ if (id?.type === 'Identifier') {
+ store[0].set(id.name, stype.skipSymbol)
+ }
+ return stype.skipSymbol
+ },
+ ArrowFunctionExpression(node: es.FunctionDeclaration, store: Map[]) {
+ return stype.skipSymbol
+ },
+ ExpressionStatement(node: es.ExpressionStatement, store: Map[]) {
+ return symEx(node.expression, store)
+ },
+ IfStatement(
+ node: es.IfStatement | es.ConditionalExpression,
+ store: Map[]
+ ) {
+ const test = symEx(node.test, store)
+ const consequent = symEx(node.consequent, store)
+ const alternate = node.alternate ? symEx(node.alternate, store) : stype.unusedSymbol
+ return stype.makeBranchSymbol(test, consequent, alternate)
+ },
+ ConditionalExpression(node: es.ConditionalExpression, store: Map[]) {
+ return nodeToSym.IfStatement(node, store)
+ },
+ BlockStatement(node: es.BlockStatement, store: Map[]) {
+ const newContext = [new Map()].concat(store)
+ const newBody = deleteAllAfterReturn(node.body)
+ return stype.makeSequenceSymbol(newBody.map(x => symEx(x, newContext)))
+ },
+ BinaryExpression(node: es.BinaryExpression, store: Map[]) {
+ const lhs = symEx(node.left, store)
+ const rhs = symEx(node.right, store)
+ return execBinarySymbol(lhs, rhs, node.operator, false)
+ },
+ UnaryExpression(node: es.UnaryExpression, store: Map[]) {
+ const arg = symEx(node.argument, store)
+ if (node.operator === '!') {
+ if (stype.isBooleanSymbol(arg)) {
+ return stype.negateBooleanSymbol(arg)
+ } else if (arg.type === 'LiteralValueSymbol') {
+ return { ...arg, value: !arg.value }
+ }
+ } else if (node.operator === '-') {
+ if (arg.type === 'NumberSymbol') {
+ return stype.negateNumberSymbol(arg)
+ } else if (arg.type === 'LiteralValueSymbol') {
+ return { ...arg, value: -arg.value }
+ }
+ }
+ return stype.skipSymbol
+ },
+ LogicalExpression(node: es.LogicalExpression, store: Map[]) {
+ const lhs = symEx(node.left, store)
+ const rhs = symEx(node.right, store)
+ return execLogicalSymbol(lhs, rhs, node.operator)
+ },
+ CallExpression(node: es.CallExpression, store: Map[]) {
+ if (node.callee.type === 'Identifier') {
+ const checkShadowed = getFromStore(node.callee.name, store)
+ if (checkShadowed?.type === 'SkipSymbol') {
+ return stype.skipSymbol
+ }
+ return stype.makeFunctionSymbol(
+ node.callee.name,
+ node.arguments.map(x => symEx(x, store)),
+ ifNullWrapDummyLoc(node.loc)
+ )
+ }
+ return stype.skipSymbol
+ },
+ ReturnStatement(node: es.ReturnStatement, store: Map[]) {
+ const arg = node.argument
+ if (arg === undefined || arg === null || arg.type === 'Identifier' || arg.type === 'Literal') {
+ return stype.terminateSymbol
+ } else {
+ const value = symEx(arg, store)
+ if (value.type === 'BranchSymbol') {
+ return returnConditional(value)
+ }
+ return stype.terminalOrSkip(value) ? stype.terminateSymbol : value
+ }
+ }
+}
+
+/* handle the case where we return a conditional,
+ * e.g. return true?1:2;
+ * we want to turn it into a terminate symbol if
+ * we can.
+ */
+function returnConditional(sym: stype.BranchSymbol): stype.SSymbol {
+ let consequent = stype.terminalOrSkip(sym.consequent) ? stype.terminateSymbol : sym.consequent
+ let alternate = stype.terminalOrSkip(sym.alternate) ? stype.terminateSymbol : sym.alternate
+ if (sym.consequent.type === 'BranchSymbol') {
+ consequent = returnConditional(sym.consequent)
+ }
+ if (sym.alternate.type === 'BranchSymbol') {
+ alternate = returnConditional(sym.alternate)
+ }
+
+ return stype.makeBranchSymbol(sym.test, consequent, alternate)
+}
+
+function symEx(node: stype.SymbolicExecutable, store: Map[]): stype.SSymbol {
+ if (stype.isSymbol(node)) {
+ return node as stype.SSymbol
+ }
+ const handler = nodeToSym[node.type]
+ if (handler) {
+ return handler(node, store)
+ }
+ return stype.skipSymbol
+}
+
+/* initialize the store with function parameters (from firstCall)
+ * and globals. e.g. for function fac(x){...}, we create and store an 'x' symbol
+ */
+function makeStore(
+ firstCall: stype.FunctionSymbol,
+ constants: [string, number][]
+): Map[] {
+ const store = [new Map()]
+
+ for (const [name, val] of constants) {
+ store[0].set(name, stype.makeLiteralValueSymbol(val))
+ }
+
+ for (const v of firstCall.args) {
+ if (v.type === 'NumberSymbol') {
+ store[0].set(v.name, v)
+ }
+ }
+ return store
+}
+
+export function symbolicExecute(node: es.FunctionDeclaration, constants: [string, number][]) {
+ const firstCall = getFirstCall(node)
+ const store = makeStore(firstCall, constants)
+ return symEx(node.body, store)
+}
diff --git a/src/stdlib/__tests__/list.ts b/src/stdlib/__tests__/list.ts
index f39430227..dfea772a2 100644
--- a/src/stdlib/__tests__/list.ts
+++ b/src/stdlib/__tests__/list.ts
@@ -9,26 +9,26 @@ test('list creates list', () => {
`,
{ chapter: 2, native: true }
).toMatchInlineSnapshot(`
-Array [
- 1,
- Array [
- "a string \\"\\"",
- Array [
- [Function],
- Array [
- [Function],
- Array [
- true,
- Array [
- 3.14,
- null,
- ],
- ],
- ],
- ],
- ],
-]
-`)
+ Array [
+ 1,
+ Array [
+ "a string \\"\\"",
+ Array [
+ [Function],
+ Array [
+ [Function],
+ Array [
+ true,
+ Array [
+ 3.14,
+ null,
+ ],
+ ],
+ ],
+ ],
+ ],
+ ]
+ `)
})
test('pair creates pair', () => {
@@ -38,11 +38,11 @@ test('pair creates pair', () => {
`,
{ chapter: 2, native: true }
).toMatchInlineSnapshot(`
-Array [
- 1,
- "a string \\"\\"",
-]
-`)
+ Array [
+ 1,
+ "a string \\"\\"",
+ ]
+ `)
})
test('head works', () => {
@@ -166,11 +166,11 @@ test('remove not found', () => {
`,
{ chapter: 2, native: true }
).toMatchInlineSnapshot(`
-Array [
- 1,
- null,
-]
-`)
+ Array [
+ 1,
+ null,
+ ]
+ `)
})
test('remove_all', () => {
diff --git a/src/transpiler/transpiler.ts b/src/transpiler/transpiler.ts
index 605395f9d..a7f4dd905 100644
--- a/src/transpiler/transpiler.ts
+++ b/src/transpiler/transpiler.ts
@@ -1,4 +1,4 @@
-import { ancestor, simple } from 'acorn-walk/dist/walk'
+import { ancestor, simple, make } from 'acorn-walk/dist/walk'
import { generate } from 'astring'
import * as es from 'estree'
import { RawSourceMap, SourceMapGenerator } from 'source-map'
@@ -7,6 +7,7 @@ import { AllowedDeclarations, Variant, Value } from '../types'
import { ConstAssignment, UndefinedVariable } from '../errors/errors'
import { loadModuleText } from '../modules/moduleLoader'
import * as create from '../utils/astCreator'
+import { transpileToGPU, getInternalFunctionsForGPU, getInternalNamesForGPU } from '../gpu/gpu'
/**
* This whole transpiler includes many many many many hacks to get stuff working.
@@ -31,6 +32,21 @@ let NATIVE_STORAGE: {
let usedIdentifiers: Set
+/* BLACKLIST - any functions here will be ignored by transpiler */
+const blacklist: string[] = []
+const ignoreWalker = make({
+ CallExpression: (node: es.CallExpression, st: any, c: any) => {
+ if (node.callee.type === 'Identifier') {
+ if (blacklist.includes(node.callee.name)) {
+ return
+ }
+ }
+
+ c(node.callee, st, 'Expression')
+ if (node.arguments) for (const arg of node.arguments) c(arg, st, 'Expression')
+ }
+})
+
function getUniqueId(uniqueId = 'unique') {
while (usedIdentifiers.has(uniqueId)) {
const start = uniqueId.slice(0, -1)
@@ -281,6 +297,7 @@ function transformReturnStatementsToAllowProperTailCalls(program: es.Program, va
const { line, column } = expression.loc!.start
const functionName =
expression.callee.type === 'Identifier' ? expression.callee.name : ''
+
const args = variant !== 'lazy' ? expression.arguments : ([] as es.Expression[])
if (variant === 'lazy') {
@@ -305,16 +322,20 @@ function transformReturnStatementsToAllowProperTailCalls(program: es.Program, va
}
}
- simple(program, {
- ReturnStatement(node: es.ReturnStatement) {
- node.argument = transformLogicalExpression(node.argument!)
- },
- ArrowFunctionExpression(node: es.ArrowFunctionExpression) {
- if (node.expression) {
- node.body = transformLogicalExpression(node.body as es.Expression)
+ simple(
+ program,
+ {
+ ReturnStatement(node: es.ReturnStatement) {
+ node.argument = transformLogicalExpression(node.argument!)
+ },
+ ArrowFunctionExpression(node: es.ArrowFunctionExpression) {
+ if (node.expression) {
+ node.body = transformLogicalExpression(node.body as es.Expression)
+ }
}
- }
- })
+ },
+ ignoreWalker
+ )
}
function delayIt(expr: es.Expression) {
@@ -334,27 +355,38 @@ function delayIt(expr: es.Expression) {
}
function transformCallExpressionsToCheckIfFunction(program: es.Program, variant: Variant) {
- simple(program, {
- CallExpression(node: es.CallExpression) {
- const { line, column } = node.loc!.start
- const args = variant !== 'lazy' ? node.arguments : ([] as es.Expression[])
+ simple(
+ program,
+ {
+ CallExpression(node: es.CallExpression) {
+ // ignore this function
+ if (node.callee.type === 'Identifier') {
+ if (blacklist.includes(node.callee.name)) {
+ return
+ }
+ }
- if (variant === 'lazy') {
- for (const arg of node.arguments) {
- args.push(delayIt(arg as es.Expression))
+ const { line, column } = node.loc!.start
+ const args = variant !== 'lazy' ? node.arguments : ([] as es.Expression[])
+
+ if (variant === 'lazy') {
+ for (const arg of node.arguments) {
+ args.push(delayIt(arg as es.Expression))
+ }
}
- }
- node.arguments = [
- node.callee as es.Expression,
- create.literal(line),
- create.literal(column),
- ...args
- ]
+ node.arguments = [
+ node.callee as es.Expression,
+ create.literal(line),
+ create.literal(column),
+ ...args
+ ]
- node.callee = globalIds.callIfFuncAndRightArgs
- }
- })
+ node.callee = globalIds.callIfFuncAndRightArgs
+ }
+ },
+ ignoreWalker
+ )
}
export function checkForUndefinedVariablesAndTransformAssignmentsToPropagateBackNewValue(
@@ -417,34 +449,39 @@ export function checkForUndefinedVariablesAndTransformAssignmentsToPropagateBack
)
}
const identifiersToAncestors = new Map()
- ancestor(program, {
- Program: processBlock,
- BlockStatement: processBlock,
- FunctionDeclaration: processFunction,
- ArrowFunctionExpression: processFunction,
- ForStatement(forStatement: es.ForStatement, ancestors: es.Node[]) {
- const init = forStatement.init!
- if (init.type === 'VariableDeclaration') {
- identifiersIntroducedByNode.set(
- forStatement,
- new Set([(init.declarations[0].id as es.Identifier).name])
- )
- }
- },
- Identifier(identifier: es.Identifier, ancestors: es.Node[]) {
- identifiersToAncestors.set(identifier, [...ancestors])
- },
- Pattern(node: es.Pattern, ancestors: es.Node[]) {
- if (node.type === 'Identifier') {
- identifiersToAncestors.set(node, [...ancestors])
- } else if (node.type === 'MemberExpression') {
- if (node.object.type === 'Identifier') {
- identifiersToAncestors.set(node.object, [...ancestors])
+ ancestor(
+ program,
+ {
+ Program: processBlock,
+ BlockStatement: processBlock,
+ FunctionDeclaration: processFunction,
+ ArrowFunctionExpression: processFunction,
+ ForStatement(forStatement: es.ForStatement, ancestors: es.Node[]) {
+ const init = forStatement.init!
+ if (init.type === 'VariableDeclaration') {
+ identifiersIntroducedByNode.set(
+ forStatement,
+ new Set([(init.declarations[0].id as es.Identifier).name])
+ )
+ }
+ },
+ Identifier(identifier: es.Identifier, ancestors: es.Node[]) {
+ identifiersToAncestors.set(identifier, [...ancestors])
+ },
+ Pattern(node: es.Pattern, ancestors: es.Node[]) {
+ if (node.type === 'Identifier') {
+ identifiersToAncestors.set(node, [...ancestors])
+ } else if (node.type === 'MemberExpression') {
+ if (node.object.type === 'Identifier') {
+ identifiersToAncestors.set(node.object, [...ancestors])
+ }
}
}
- }
- })
+ },
+ ignoreWalker
+ )
const nativeInternalNames = new Set(Object.values(globalIds).map(({ name }) => name))
+
for (const [identifier, ancestors] of identifiersToAncestors) {
const name = identifier.name
const isCurrentlyDeclared = ancestors.some(a => identifiersIntroducedByNode.get(a)?.has(name))
@@ -510,7 +547,7 @@ export function checkForUndefinedVariablesAndTransformAssignmentsToPropagateBack
)
}
}
- } else if (!nativeInternalNames.has(name)) {
+ } else if (!nativeInternalNames.has(name) && !getInternalNamesForGPU().has(name)) {
if (!skipErrors) {
throw new UndefinedVariable(name, identifier)
}
@@ -537,13 +574,17 @@ function transformSomeExpressionsToCheckIfBoolean(program: es.Program) {
])
}
- simple(program, {
- IfStatement: transform,
- ConditionalExpression: transform,
- LogicalExpression: transform,
- ForStatement: transform,
- WhileStatement: transform
- })
+ simple(
+ program,
+ {
+ IfStatement: transform,
+ ConditionalExpression: transform,
+ LogicalExpression: transform,
+ ForStatement: transform,
+ WhileStatement: transform
+ },
+ ignoreWalker
+ )
}
function refreshLatestIdentifiers(program: es.Program) {
@@ -629,29 +670,33 @@ function splitLastStatementIntoStorageOfResultAndAccessorPair(
}
function transformUnaryAndBinaryOperationsToFunctionCalls(program: es.Program) {
- simple(program, {
- BinaryExpression(node: es.BinaryExpression) {
- const { line, column } = node.loc!.start
- const { operator, left, right } = node
- create.mutateToCallExpression(node, globalIds.binaryOp, [
- create.literal(operator),
- left,
- right,
- create.literal(line),
- create.literal(column)
- ])
+ simple(
+ program,
+ {
+ BinaryExpression(node: es.BinaryExpression) {
+ const { line, column } = node.loc!.start
+ const { operator, left, right } = node
+ create.mutateToCallExpression(node, globalIds.binaryOp, [
+ create.literal(operator),
+ left,
+ right,
+ create.literal(line),
+ create.literal(column)
+ ])
+ },
+ UnaryExpression(node: es.UnaryExpression) {
+ const { line, column } = node.loc!.start
+ const { operator, argument } = node as es.UnaryExpression
+ create.mutateToCallExpression(node, globalIds.unaryOp, [
+ create.literal(operator),
+ argument,
+ create.literal(line),
+ create.literal(column)
+ ])
+ }
},
- UnaryExpression(node: es.UnaryExpression) {
- const { line, column } = node.loc!.start
- const { operator, argument } = node as es.UnaryExpression
- create.mutateToCallExpression(node, globalIds.unaryOp, [
- create.literal(operator),
- argument,
- create.literal(line),
- create.literal(column)
- ])
- }
- })
+ ignoreWalker
+ )
}
function getComputedProperty(computed: boolean, property: es.Expression): es.Expression {
@@ -659,36 +704,44 @@ function getComputedProperty(computed: boolean, property: es.Expression): es.Exp
}
function transformPropertyAssignment(program: es.Program) {
- simple(program, {
- AssignmentExpression(node: es.AssignmentExpression) {
- if (node.left.type === 'MemberExpression') {
- const { object, property, computed, loc } = node.left
+ simple(
+ program,
+ {
+ AssignmentExpression(node: es.AssignmentExpression) {
+ if (node.left.type === 'MemberExpression') {
+ const { object, property, computed, loc } = node.left
+ const { line, column } = loc!.start
+ create.mutateToCallExpression(node, globalIds.setProp, [
+ object as es.Expression,
+ getComputedProperty(computed, property),
+ node.right,
+ create.literal(line),
+ create.literal(column)
+ ])
+ }
+ }
+ },
+ ignoreWalker
+ )
+}
+
+function transformPropertyAccess(program: es.Program) {
+ simple(
+ program,
+ {
+ MemberExpression(node: es.MemberExpression) {
+ const { object, property, computed, loc } = node
const { line, column } = loc!.start
- create.mutateToCallExpression(node, globalIds.setProp, [
+ create.mutateToCallExpression(node, globalIds.getProp, [
object as es.Expression,
getComputedProperty(computed, property),
- node.right,
create.literal(line),
create.literal(column)
])
}
- }
- })
-}
-
-function transformPropertyAccess(program: es.Program) {
- simple(program, {
- MemberExpression(node: es.MemberExpression) {
- const { object, property, computed, loc } = node
- const { line, column } = loc!.start
- create.mutateToCallExpression(node, globalIds.getProp, [
- object as es.Expression,
- getComputedProperty(computed, property),
- create.literal(line),
- create.literal(column)
- ])
- }
- })
+ },
+ ignoreWalker
+ )
}
function addInfiniteLoopProtection(program: es.Program) {
@@ -719,10 +772,14 @@ function addInfiniteLoopProtection(program: es.Program) {
node.body = newStatements
}
- simple(program, {
- Program: instrumentLoops,
- BlockStatement: instrumentLoops
- })
+ simple(
+ program,
+ {
+ Program: instrumentLoops,
+ BlockStatement: instrumentLoops
+ },
+ ignoreWalker
+ )
}
export function transpile(
@@ -741,6 +798,14 @@ export function transpile(
return { transpiled: '' }
}
const functionsToStringMap = generateFunctionsToStringMap(program)
+
+ let gpuDisplayStatements: es.Statement[] = []
+ if (variant === 'gpu') {
+ const kernelFunction = getUniqueId('__createKernel')
+ blacklist.push(kernelFunction)
+ gpuDisplayStatements = transpileToGPU(program, kernelFunction)
+ }
+
transformReturnStatementsToAllowProperTailCalls(program, variant)
transformCallExpressionsToCheckIfFunction(program, variant)
transformUnaryAndBinaryOperationsToFunctionCalls(program)
@@ -763,8 +828,10 @@ export function transpile(
lastStatementStoredInResult,
evalMap
} = splitLastStatementIntoStorageOfResultAndAccessorPair(lastStatement)
+
const wrapped = wrapInAnonymousFunctionToBlockExternalGlobals([
wrapWithPreviouslyDeclaredGlobals([
+ ...gpuDisplayStatements,
...statements,
lastStatementStoredInResult,
...statementsToSaveDeclaredGlobals
@@ -773,8 +840,17 @@ export function transpile(
create.callExpression(globalIds.forceIt, [globalIds.lastStatementResult])
)
])
+
program.body = [...getDeclarationsToAccessTranspilerInternals(), wrapped]
+ if (variant === 'gpu') {
+ program.body = [
+ ...getDeclarationsToAccessTranspilerInternals(),
+ ...getInternalFunctionsForGPU(globalIds, contextId),
+ wrapped
+ ]
+ }
+
const map = new SourceMapGenerator({ file: 'source' })
const transpiled = modulePrefix + generate(program, { sourceMap: map })
const codeMap = map.toJSON()
diff --git a/src/types.ts b/src/types.ts
index 70b9eda6d..9dbdd6fd3 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -57,7 +57,7 @@ export interface Comment {
}
export type ExecutionMethod = 'native' | 'interpreter' | 'auto'
-export type Variant = 'wasm' | 'lazy' | 'non-det' | 'concurrent' | 'default' // this might replace EvaluationMethod
+export type Variant = 'wasm' | 'lazy' | 'non-det' | 'concurrent' | 'gpu' | 'default' // this might replace EvaluationMethod
export interface Context {
/** The source version used */
diff --git a/src/utils/astCreator.ts b/src/utils/astCreator.ts
index d57cac805..813de623c 100644
--- a/src/utils/astCreator.ts
+++ b/src/utils/astCreator.ts
@@ -138,6 +138,42 @@ export const mutateToCallExpression = (
node.arguments = args
}
+export const mutateToAssignmentExpression = (
+ node: es.Node,
+ left: es.Pattern,
+ right: es.Expression
+) => {
+ node.type = 'AssignmentExpression'
+ node = node as es.AssignmentExpression
+ node.operator = '='
+ node.left = left
+ node.right = right
+}
+
+export const mutateToExpressionStatement = (node: es.Node, expr: es.Expression) => {
+ node.type = 'ExpressionStatement'
+ node = node as es.ExpressionStatement
+ node.expression = expr
+}
+
+export const mutateToReturnStatement = (node: es.Node, expr: es.Expression) => {
+ node.type = 'ReturnStatement'
+ node = node as es.ReturnStatement
+ node.argument = expr
+}
+
+export const mutateToMemberExpression = (
+ node: es.Node,
+ obj: es.Expression,
+ prop: es.Expression
+) => {
+ node.type = 'MemberExpression'
+ node = node as es.MemberExpression
+ node.object = obj
+ node.property = prop
+ node.computed = false
+}
+
export const logicalExpression = (
operator: es.LogicalOperator,
left: es.Expression,
diff --git a/yarn.lock b/yarn.lock
index acf708c4b..2064061d0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4,15 +4,15 @@
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
- integrity sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
+ integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
dependencies:
"@babel/highlight" "^7.8.3"
"@babel/core@^7.1.0", "@babel/core@^7.7.5":
version "7.9.0"
- resolved "http://r.cnpmjs.org/@babel/core/download/@babel/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e"
- integrity sha1-rJd7U4t34TL/cG87ik260JwDxW4=
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e"
+ integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==
dependencies:
"@babel/code-frame" "^7.8.3"
"@babel/generator" "^7.9.0"
@@ -33,8 +33,8 @@
"@babel/generator@^7.9.0", "@babel/generator@^7.9.5":
version "7.9.5"
- resolved "http://r.cnpmjs.org/@babel/generator/download/@babel/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9"
- integrity sha1-J/CRd0GsxB5uqs7W1o+Ww/qa+vk=
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9"
+ integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==
dependencies:
"@babel/types" "^7.9.5"
jsesc "^2.5.1"
@@ -43,8 +43,8 @@
"@babel/helper-function-name@^7.9.5":
version "7.9.5"
- resolved "http://r.cnpmjs.org/@babel/helper-function-name/download/@babel/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c"
- integrity sha1-K1OCDTUnUSDhh0qC5aq+E3aSClw=
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c"
+ integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==
dependencies:
"@babel/helper-get-function-arity" "^7.8.3"
"@babel/template" "^7.8.3"
@@ -52,29 +52,29 @@
"@babel/helper-get-function-arity@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
- integrity sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
+ integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
dependencies:
"@babel/types" "^7.8.3"
"@babel/helper-member-expression-to-functions@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
- integrity sha1-ZZtxBJjqbB2ZB+DHPyBu7n2twkw=
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
+ integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==
dependencies:
"@babel/types" "^7.8.3"
"@babel/helper-module-imports@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498"
- integrity sha1-f+OVibOcAWMxtrjD9EHo8LFBlJg=
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498"
+ integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==
dependencies:
"@babel/types" "^7.8.3"
"@babel/helper-module-transforms@^7.9.0":
version "7.9.0"
- resolved "http://r.cnpmjs.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5"
- integrity sha1-Q7NN/hWWGRhwfSRzJ0MTiOn+luU=
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5"
+ integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==
dependencies:
"@babel/helper-module-imports" "^7.8.3"
"@babel/helper-replace-supers" "^7.8.6"
@@ -86,20 +86,20 @@
"@babel/helper-optimise-call-expression@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9"
- integrity sha1-ftBxgT0Jx1KY708giVYAa2ER7Lk=
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9"
+ integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==
dependencies:
"@babel/types" "^7.8.3"
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
- integrity sha1-nqKTvhm6vA9S/4yoizTDYRsghnA=
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
+ integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==
"@babel/helper-replace-supers@^7.8.6":
version "7.8.6"
- resolved "http://r.cnpmjs.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8"
- integrity sha1-Wtp0T9WtcyA78dZ0WaJ9y6Z+/8g=
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8"
+ integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==
dependencies:
"@babel/helper-member-expression-to-functions" "^7.8.3"
"@babel/helper-optimise-call-expression" "^7.8.3"
@@ -108,28 +108,28 @@
"@babel/helper-simple-access@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae"
- integrity sha1-f4EJkotNq0ZUB2mGr1dSMd62Oa4=
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae"
+ integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==
dependencies:
"@babel/template" "^7.8.3"
"@babel/types" "^7.8.3"
"@babel/helper-split-export-declaration@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
- integrity sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
+ integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
dependencies:
"@babel/types" "^7.8.3"
"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5":
version "7.9.5"
- resolved "http://r.cnpmjs.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
- integrity sha1-kJd6jm+/a0MafcMXUu7iM78FLYA=
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
+ integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==
"@babel/helpers@^7.9.0":
version "7.9.2"
- resolved "http://r.cnpmjs.org/@babel/helpers/download/@babel/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f"
- integrity sha1-tCqBqBHx5zE7iMuorcZrPZrmwJ8=
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f"
+ integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==
dependencies:
"@babel/template" "^7.8.3"
"@babel/traverse" "^7.9.0"
@@ -137,8 +137,8 @@
"@babel/highlight@^7.8.3":
version "7.9.0"
- resolved "http://r.cnpmjs.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079"
- integrity sha1-TptFzLgreWBycbKXmtgse2gWMHk=
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079"
+ integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==
dependencies:
"@babel/helper-validator-identifier" "^7.9.0"
chalk "^2.0.0"
@@ -146,90 +146,90 @@
"@babel/parser@^7.1.0", "@babel/parser@^7.4.4", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0":
version "7.9.4"
- resolved "http://r.cnpmjs.org/@babel/parser/download/@babel/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8"
- integrity sha1-aKNeawMZu8AURlvkOCgwARPy8ug=
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8"
+ integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
- integrity sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-bigint@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-bigint/download/@babel/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
- integrity sha1-TJpvZp9dDN8bkKFnHpoUa+UwDOo=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-class-properties@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7"
- integrity sha1-bLkzqIcsjTWb/eabvqrlFi/R6Pc=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7"
+ integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg==
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-json-strings@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
- integrity sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897"
- integrity sha1-OZXX1///Qy9t3HQrR+cwwFRZmJc=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897"
+ integrity sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg==
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
- integrity sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-numeric-separator@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f"
- integrity sha1-Dj+2Pgm+obEelkZyccgwgAfnxB8=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f"
+ integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-object-rest-spread@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
- integrity sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
- integrity sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-optional-chaining@^7.8.3":
version "7.8.3"
- resolved "http://r.cnpmjs.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
- integrity sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/runtime@^7.8.7":
+"@babel/runtime@^7.9.2":
version "7.9.2"
- resolved "http://r.cnpmjs.org/@babel/runtime/download/@babel/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06"
- integrity sha1-2Q3wWDo6JS8JqqYZZlNnuuUY2wY=
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06"
+ integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6":
version "7.8.6"
- resolved "http://r.cnpmjs.org/@babel/template/download/@babel/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b"
- integrity sha1-hrIq8V+CjfsIZHT5ZNzD45xDzis=
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b"
+ integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==
dependencies:
"@babel/code-frame" "^7.8.3"
"@babel/parser" "^7.8.6"
@@ -237,8 +237,8 @@
"@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0":
version "7.9.5"
- resolved "http://r.cnpmjs.org/@babel/traverse/download/@babel/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2"
- integrity sha1-bnxWtE4qxwEalIwh4oPd2dnbl6I=
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2"
+ integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==
dependencies:
"@babel/code-frame" "^7.8.3"
"@babel/generator" "^7.9.5"
@@ -252,8 +252,8 @@
"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5":
version "7.9.5"
- resolved "http://r.cnpmjs.org/@babel/types/download/@babel/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444"
- integrity sha1-iSMfgpFailZqcDs7IBM/c9prlEQ=
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444"
+ integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==
dependencies:
"@babel/helper-validator-identifier" "^7.9.5"
lodash "^4.17.13"
@@ -261,21 +261,21 @@
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
- resolved "http://r.cnpmjs.org/@bcoe/v8-coverage/download/@bcoe/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
- integrity sha1-daLotRy3WKdVPWgEpZMteqznXDk=
+ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@cnakazawa/watch@^1.0.3":
version "1.0.4"
- resolved "http://r.cnpmjs.org/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
- integrity sha1-+GSuhQBND8q29QvpFBxNo2jRZWo=
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
+ integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
dependencies:
exec-sh "^0.3.2"
minimist "^1.2.0"
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.0.0"
- resolved "http://r.cnpmjs.org/@istanbuljs/load-nyc-config/download/@istanbuljs/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b"
- integrity sha1-EGAt5VcLrqgvivv6JjCyTnqM/ls=
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b"
+ integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==
dependencies:
camelcase "^5.3.1"
find-up "^4.1.0"
@@ -284,46 +284,47 @@
"@istanbuljs/schema@^0.1.2":
version "0.1.2"
- resolved "http://r.cnpmjs.org/@istanbuljs/schema/download/@istanbuljs/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
- integrity sha1-JlIL8Jq+SlZEzVQU43ElqJVCQd0=
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
+ integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
-"@jest/console@^25.3.0":
- version "25.3.0"
- resolved "http://r.cnpmjs.org/@jest/console/download/@jest/console-25.3.0.tgz#33b56b81238427bf3ebe3f7b3378d2f79cdbd409"
- integrity sha1-M7VrgSOEJ78+vj97M3jS95zb1Ak=
+"@jest/console@^25.4.0":
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.4.0.tgz#e2760b532701137801ba824dcff6bc822c961bac"
+ integrity sha512-CfE0erx4hdJ6t7RzAcE1wLG6ZzsHSmybvIBQDoCkDM1QaSeWL9wJMzID/2BbHHa7ll9SsbbK43HjbERbBaFX2A==
dependencies:
- "@jest/source-map" "^25.2.6"
+ "@jest/types" "^25.4.0"
chalk "^3.0.0"
- jest-util "^25.3.0"
+ jest-message-util "^25.4.0"
+ jest-util "^25.4.0"
slash "^3.0.0"
-"@jest/core@^25.3.0":
- version "25.3.0"
- resolved "http://r.cnpmjs.org/@jest/core/download/@jest/core-25.3.0.tgz#80f97a7a8b59dde741a24f30871cc26d0197d426"
- integrity sha1-gPl6eotZ3edBok8whxzCbQGX1CY=
- dependencies:
- "@jest/console" "^25.3.0"
- "@jest/reporters" "^25.3.0"
- "@jest/test-result" "^25.3.0"
- "@jest/transform" "^25.3.0"
- "@jest/types" "^25.3.0"
+"@jest/core@^25.4.0":
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.4.0.tgz#cc1fe078df69b8f0fbb023bb0bcee23ef3b89411"
+ integrity sha512-h1x9WSVV0+TKVtATGjyQIMJENs8aF6eUjnCoi4jyRemYZmekLr8EJOGQqTWEX8W6SbZ6Skesy9pGXrKeAolUJw==
+ dependencies:
+ "@jest/console" "^25.4.0"
+ "@jest/reporters" "^25.4.0"
+ "@jest/test-result" "^25.4.0"
+ "@jest/transform" "^25.4.0"
+ "@jest/types" "^25.4.0"
ansi-escapes "^4.2.1"
chalk "^3.0.0"
exit "^0.1.2"
graceful-fs "^4.2.3"
- jest-changed-files "^25.3.0"
- jest-config "^25.3.0"
- jest-haste-map "^25.3.0"
- jest-message-util "^25.3.0"
+ jest-changed-files "^25.4.0"
+ jest-config "^25.4.0"
+ jest-haste-map "^25.4.0"
+ jest-message-util "^25.4.0"
jest-regex-util "^25.2.6"
- jest-resolve "^25.3.0"
- jest-resolve-dependencies "^25.3.0"
- jest-runner "^25.3.0"
- jest-runtime "^25.3.0"
- jest-snapshot "^25.3.0"
- jest-util "^25.3.0"
- jest-validate "^25.3.0"
- jest-watcher "^25.3.0"
+ jest-resolve "^25.4.0"
+ jest-resolve-dependencies "^25.4.0"
+ jest-runner "^25.4.0"
+ jest-runtime "^25.4.0"
+ jest-snapshot "^25.4.0"
+ jest-util "^25.4.0"
+ jest-validate "^25.4.0"
+ jest-watcher "^25.4.0"
micromatch "^4.0.2"
p-each-series "^2.1.0"
realpath-native "^2.0.0"
@@ -331,36 +332,36 @@
slash "^3.0.0"
strip-ansi "^6.0.0"
-"@jest/environment@^25.3.0":
- version "25.3.0"
- resolved "http://r.cnpmjs.org/@jest/environment/download/@jest/environment-25.3.0.tgz#587f28ddb4b0dfe97404d3d4a4c9dbfa0245fb2e"
- integrity sha1-WH8o3bSw3+l0BNPUpMnb+gJF+y4=
+"@jest/environment@^25.4.0":
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.4.0.tgz#45071f525f0d8c5a51ed2b04fd42b55a8f0c7cb3"
+ integrity sha512-KDctiak4mu7b4J6BIoN/+LUL3pscBzoUCP+EtSPd2tK9fqyDY5OF+CmkBywkFWezS9tyH5ACOQNtpjtueEDH6Q==
dependencies:
- "@jest/fake-timers" "^25.3.0"
- "@jest/types" "^25.3.0"
- jest-mock "^25.3.0"
+ "@jest/fake-timers" "^25.4.0"
+ "@jest/types" "^25.4.0"
+ jest-mock "^25.4.0"
-"@jest/fake-timers@^25.3.0":
- version "25.3.0"
- resolved "http://r.cnpmjs.org/@jest/fake-timers/download/@jest/fake-timers-25.3.0.tgz#995aad36d5c8984165ca5db12e740ab8dbf7042a"
- integrity sha1-mVqtNtXImEFlyl2xLnQKuNv3BCo=
+"@jest/fake-timers@^25.4.0":
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.4.0.tgz#3a9a4289ba836abd084953dca406389a57e00fbd"
+ integrity sha512-lI9z+VOmVX4dPPFzyj0vm+UtaB8dCJJ852lcDnY0uCPRvZAaVGnMwBBc1wxtf+h7Vz6KszoOvKAt4QijDnHDkg==
dependencies:
- "@jest/types" "^25.3.0"
- jest-message-util "^25.3.0"
- jest-mock "^25.3.0"
- jest-util "^25.3.0"
+ "@jest/types" "^25.4.0"
+ jest-message-util "^25.4.0"
+ jest-mock "^25.4.0"
+ jest-util "^25.4.0"
lolex "^5.0.0"
-"@jest/reporters@^25.3.0":
- version "25.3.0"
- resolved "http://r.cnpmjs.org/@jest/reporters/download/@jest/reporters-25.3.0.tgz#7f39f0e6911561cc5112a1b54656de18faee269b"
- integrity sha1-fznw5pEVYcxREqG1RlbeGPruJps=
+"@jest/reporters@^25.4.0":
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.4.0.tgz#836093433b32ce4e866298af2d6fcf6ed351b0b0"
+ integrity sha512-bhx/buYbZgLZm4JWLcRJ/q9Gvmd3oUh7k2V7gA4ZYBx6J28pIuykIouclRdiAC6eGVX1uRZT+GK4CQJLd/PwPg==
dependencies:
"@bcoe/v8-coverage" "^0.2.3"
- "@jest/console" "^25.3.0"
- "@jest/test-result" "^25.3.0"
- "@jest/transform" "^25.3.0"
- "@jest/types" "^25.3.0"
+ "@jest/console" "^25.4.0"
+ "@jest/test-result" "^25.4.0"
+ "@jest/transform" "^25.4.0"
+ "@jest/types" "^25.4.0"
chalk "^3.0.0"
collect-v8-coverage "^1.0.0"
exit "^0.1.2"
@@ -370,62 +371,62 @@
istanbul-lib-report "^3.0.0"
istanbul-lib-source-maps "^4.0.0"
istanbul-reports "^3.0.2"
- jest-haste-map "^25.3.0"
- jest-resolve "^25.3.0"
- jest-util "^25.3.0"
- jest-worker "^25.2.6"
+ jest-haste-map "^25.4.0"
+ jest-resolve "^25.4.0"
+ jest-util "^25.4.0"
+ jest-worker "^25.4.0"
slash "^3.0.0"
source-map "^0.6.0"
string-length "^3.1.0"
terminal-link "^2.0.0"
- v8-to-istanbul "^4.0.1"
+ v8-to-istanbul "^4.1.3"
optionalDependencies:
node-notifier "^6.0.0"
"@jest/source-map@^25.2.6":
version "25.2.6"
- resolved "http://r.cnpmjs.org/@jest/source-map/download/@jest/source-map-25.2.6.tgz#0ef2209514c6d445ebccea1438c55647f22abb4c"
- integrity sha1-DvIglRTG1EXrzOoUOMVWR/Iqu0w=
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.2.6.tgz#0ef2209514c6d445ebccea1438c55647f22abb4c"
+ integrity sha512-VuIRZF8M2zxYFGTEhkNSvQkUKafQro4y+mwUxy5ewRqs5N/ynSFUODYp3fy1zCnbCMy1pz3k+u57uCqx8QRSQQ==
dependencies:
callsites "^3.0.0"
graceful-fs "^4.2.3"
source-map "^0.6.0"
-"@jest/test-result@^25.3.0":
- version "25.3.0"
- resolved "http://r.cnpmjs.org/@jest/test-result/download/@jest/test-result-25.3.0.tgz#137fab5e5c6fed36e5d40735d1eb029325e3bf06"
- integrity sha1-E3+rXlxv7Tbl1Ac10esCkyXjvwY=
+"@jest/test-result@^25.4.0":
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.4.0.tgz#6f2ec2c8da9981ef013ad8651c1c6f0cb20c6324"
+ integrity sha512-8BAKPaMCHlL941eyfqhWbmp3MebtzywlxzV+qtngQ3FH+RBqnoSAhNEPj4MG7d2NVUrMOVfrwuzGpVIK+QnMAA==
dependencies:
- "@jest/console" "^25.3.0"
- "@jest/types" "^25.3.0"
+ "@jest/console" "^25.4.0"
+ "@jest/types" "^25.4.0"
"@types/istanbul-lib-coverage" "^2.0.0"
collect-v8-coverage "^1.0.0"
-"@jest/test-sequencer@^25.3.0":
- version "25.3.0"
- resolved "http://r.cnpmjs.org/@jest/test-sequencer/download/@jest/test-sequencer-25.3.0.tgz#271ad5f2b8f8137d092ccedc87e16a50f8676209"
- integrity sha1-JxrV8rj4E30JLM7ch+FqUPhnYgk=
+"@jest/test-sequencer@^25.4.0":
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.4.0.tgz#2b96f9d37f18dc3336b28e3c8070f97f9f55f43b"
+ integrity sha512-240cI+nsM3attx2bMp9uGjjHrwrpvxxrZi8Tyqp/cfOzl98oZXVakXBgxODGyBYAy/UGXPKXLvNc2GaqItrsJg==
dependencies:
- "@jest/test-result" "^25.3.0"
- jest-haste-map "^25.3.0"
- jest-runner "^25.3.0"
- jest-runtime "^25.3.0"
+ "@jest/test-result" "^25.4.0"
+ jest-haste-map "^25.4.0"
+ jest-runner "^25.4.0"
+ jest-runtime "^25.4.0"
-"@jest/transform@^25.3.0":
- version "25.3.0"
- resolved "http://r.cnpmjs.org/@jest/transform/download/@jest/transform-25.3.0.tgz#083c5447d5307d9b9494d6968115b647460e71f1"
- integrity sha1-CDxUR9UwfZuUlNaWgRW2R0YOcfE=
+"@jest/transform@^25.4.0":
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.4.0.tgz#eef36f0367d639e2fd93dccd758550377fbb9962"
+ integrity sha512-t1w2S6V1sk++1HHsxboWxPEuSpN8pxEvNrZN+Ud/knkROWtf8LeUmz73A4ezE8476a5AM00IZr9a8FO9x1+j3g==
dependencies:
"@babel/core" "^7.1.0"
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
babel-plugin-istanbul "^6.0.0"
chalk "^3.0.0"
convert-source-map "^1.4.0"
fast-json-stable-stringify "^2.0.0"
graceful-fs "^4.2.3"
- jest-haste-map "^25.3.0"
+ jest-haste-map "^25.4.0"
jest-regex-util "^25.2.6"
- jest-util "^25.3.0"
+ jest-util "^25.4.0"
micromatch "^4.0.2"
pirates "^4.0.1"
realpath-native "^2.0.0"
@@ -433,10 +434,10 @@
source-map "^0.6.1"
write-file-atomic "^3.0.0"
-"@jest/types@^25.3.0":
- version "25.3.0"
- resolved "http://r.cnpmjs.org/@jest/types/download/@jest/types-25.3.0.tgz#88f94b277a1d028fd7117bc1f74451e0fc2131e7"
- integrity sha1-iPlLJ3odAo/XEXvB90RR4PwhMec=
+"@jest/types@^25.4.0":
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.4.0.tgz#5afeb8f7e1cba153a28e5ac3c9fe3eede7206d59"
+ integrity sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==
dependencies:
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/istanbul-reports" "^1.1.1"
@@ -445,15 +446,15 @@
"@sinonjs/commons@^1.7.0":
version "1.7.2"
- resolved "http://r.cnpmjs.org/@sinonjs/commons/download/@sinonjs/commons-1.7.2.tgz#505f55c74e0272b43f6c52d81946bed7058fc0e2"
- integrity sha1-UF9Vx04CcrQ/bFLYGUa+1wWPwOI=
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.2.tgz#505f55c74e0272b43f6c52d81946bed7058fc0e2"
+ integrity sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw==
dependencies:
type-detect "4.0.8"
"@types/babel__core@^7.1.7":
version "7.1.7"
- resolved "http://r.cnpmjs.org/@types/babel__core/download/@types/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89"
- integrity sha1-HaytiEA2SlfJjQ3UhVxt03Usa4k=
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89"
+ integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
@@ -463,82 +464,82 @@
"@types/babel__generator@*":
version "7.6.1"
- resolved "http://r.cnpmjs.org/@types/babel__generator/download/@types/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04"
- integrity sha1-SQF2ezl+hxGuuZ3405bXunt/DgQ=
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04"
+ integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==
dependencies:
"@babel/types" "^7.0.0"
"@types/babel__template@*":
version "7.0.2"
- resolved "http://r.cnpmjs.org/@types/babel__template/download/@types/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
- integrity sha1-T/Y9a1Lt2sHee5daUiPtMuzqkwc=
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
+ integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
version "7.0.10"
- resolved "http://r.cnpmjs.org/@types/babel__traverse/download/@types/babel__traverse-7.0.10.tgz#d9a99f017317d9b3d1abc2ced45d3bca68df0daf"
- integrity sha1-2amfAXMX2bPRq8LO1F07ymjfDa8=
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.10.tgz#d9a99f017317d9b3d1abc2ced45d3bca68df0daf"
+ integrity sha512-74fNdUGrWsgIB/V9kTO5FGHPWYY6Eqn+3Z7L6Hc4e/BxjYV7puvBqp5HwsVYYfLm6iURYBNCx4Ut37OF9yitCw==
dependencies:
"@babel/types" "^7.3.0"
"@types/color-name@^1.1.1":
version "1.1.1"
- resolved "http://r.cnpmjs.org/@types/color-name/download/@types/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
- integrity sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=
+ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
+ integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
"@types/estree@0.0.39":
version "0.0.39"
- resolved "http://r.cnpmjs.org/@types/estree/download/@types/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
- integrity sha1-4Xfmme4bjCLSMXTKqnQiZEOJUJ8=
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.1"
- resolved "http://r.cnpmjs.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
- integrity sha1-QplbRG25pIoRoH7Ag0mahg6ROP8=
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
+ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
"@types/istanbul-lib-report@*":
version "3.0.0"
- resolved "http://r.cnpmjs.org/@types/istanbul-lib-report/download/@types/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
- integrity sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY=
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
dependencies:
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-reports@^1.1.1":
version "1.1.1"
- resolved "http://r.cnpmjs.org/@types/istanbul-reports/download/@types/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
- integrity sha1-eoy/akBvNsit2HFiWyeOrwsNJVo=
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
+ integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==
dependencies:
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
"@types/jest@^25.1.1":
version "25.2.1"
- resolved "http://r.cnpmjs.org/@types/jest/download/@types/jest-25.2.1.tgz#9544cd438607955381c1bdbdb97767a249297db5"
- integrity sha1-lUTNQ4YHlVOBwb29uXdnokkpfbU=
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.1.tgz#9544cd438607955381c1bdbdb97767a249297db5"
+ integrity sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==
dependencies:
jest-diff "^25.2.1"
pretty-format "^25.2.1"
"@types/lodash.assignin@^4.2.6":
version "4.2.6"
- resolved "http://r.cnpmjs.org/@types/lodash.assignin/download/@types/lodash.assignin-4.2.6.tgz#fe94b7bbad78f97897a028e8f4e8945c03d84a6f"
- integrity sha1-/pS3u614+XiXoCjo9OiUXAPYSm8=
+ resolved "https://registry.yarnpkg.com/@types/lodash.assignin/-/lodash.assignin-4.2.6.tgz#fe94b7bbad78f97897a028e8f4e8945c03d84a6f"
+ integrity sha512-kO9C2Oq0X8yehLu0o689SwR+wy+m4IQZg2TxRBXNkmpd0WY/GYEV+tTqrWRu2jt69eDOaVMJxna6QnDQ/g1TSg==
dependencies:
"@types/lodash" "*"
"@types/lodash.clonedeep@^4.5.6":
version "4.5.6"
- resolved "http://r.cnpmjs.org/@types/lodash.clonedeep/download/@types/lodash.clonedeep-4.5.6.tgz#3b6c40a0affe0799a2ce823b440a6cf33571d32b"
- integrity sha1-O2xAoK/+B5mizoI7RAps8zVx0ys=
+ resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz#3b6c40a0affe0799a2ce823b440a6cf33571d32b"
+ integrity sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==
dependencies:
"@types/lodash" "*"
"@types/lodash@*":
- version "4.14.149"
- resolved "http://r.cnpmjs.org/@types/lodash/download/@types/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440"
- integrity sha1-E0LWPZSMYGKDj7+WEBL3TU5jhEA=
+ version "4.14.150"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.150.tgz#649fe44684c3f1fcb6164d943c5a61977e8cf0bd"
+ integrity sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w==
"@types/lodash.assignin@^4.2.6":
version "4.2.6"
@@ -560,94 +561,104 @@
integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==
"@types/node@^13.7.0":
- version "13.11.1"
- resolved "http://r.cnpmjs.org/@types/node/download/@types/node-13.11.1.tgz#49a2a83df9d26daacead30d0ccc8762b128d53c7"
- integrity sha1-SaKoPfnSbarOrTDQzMh2KxKNU8c=
+ version "13.13.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.2.tgz#160d82623610db590a64e8ca81784e11117e5a54"
+ integrity sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A==
+
+"@types/normalize-package-data@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
+ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
"@types/parse-json@^4.0.0":
version "4.0.0"
- resolved "http://r.cnpmjs.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
- integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
"@types/prettier@^1.19.0":
version "1.19.1"
- resolved "http://r.cnpmjs.org/@types/prettier/download/@types/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f"
- integrity sha1-M1CYSfjmeeSt0ViVn9sIZEDpVT8=
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f"
+ integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==
"@types/stack-utils@^1.0.1":
version "1.0.1"
- resolved "http://r.cnpmjs.org/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
- integrity sha1-CoUdO9lkmPolwzq3J47TvWXwbD4=
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
+ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
"@types/yargs-parser@*":
version "15.0.0"
- resolved "http://r.cnpmjs.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
- integrity sha1-yz+fdBhp4gzOMw/765JxWQSDiC0=
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
+ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
"@types/yargs@^15.0.0":
version "15.0.4"
- resolved "http://r.cnpmjs.org/@types/yargs/download/@types/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299"
- integrity sha1-fl0PjKJenVhJ8upEPPfEAt7Ngpk=
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299"
+ integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==
dependencies:
"@types/yargs-parser" "*"
abab@^2.0.0, abab@^2.0.3:
version "2.0.3"
- resolved "http://r.cnpmjs.org/abab/download/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
- integrity sha1-Yj4gdeAustPyR15J+ZyRhGRnkHo=
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
+ integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
ace-builds@^1.4.9:
- version "1.4.9"
- resolved "http://r.cnpmjs.org/ace-builds/download/ace-builds-1.4.9.tgz#2b9b020706871f30e97f5510af891149f144d3d8"
- integrity sha1-K5sCBwaHHzDpf1UQr4kRSfFE09g=
+ version "1.4.11"
+ resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.4.11.tgz#b1f19a891afcef1d26522473082baf80067e855f"
+ integrity sha512-keACH1d7MvAh72fE/us36WQzOFQPJbHphNpj33pXwVZOM84pTWcdFzIAvngxOGIGLTm7gtUP2eJ4Ku6VaPo8bw==
acorn-globals@^4.3.2:
version "4.3.4"
- resolved "http://r.cnpmjs.org/acorn-globals/download/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
- integrity sha1-n6GSat3BHJcwjE5m163Q1Awycuc=
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
+ integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==
dependencies:
acorn "^6.0.1"
acorn-walk "^6.0.1"
acorn-globals@^6.0.0:
version "6.0.0"
- resolved "http://r.cnpmjs.org/acorn-globals/download/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
- integrity sha1-Rs3Tnw+P8IqHZhm1X1rIptx3C0U=
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+ integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
dependencies:
acorn "^7.1.1"
acorn-walk "^7.1.1"
acorn-loose@^7.0.0:
version "7.0.0"
- resolved "http://r.cnpmjs.org/acorn-loose/download/acorn-loose-7.0.0.tgz#a4a6e8d2ae51dd5a8bdbc274b7ce3dd84964d13a"
- integrity sha1-pKbo0q5R3VqL28J0t8492Elk0To=
+ resolved "https://registry.yarnpkg.com/acorn-loose/-/acorn-loose-7.0.0.tgz#a4a6e8d2ae51dd5a8bdbc274b7ce3dd84964d13a"
+ integrity sha512-TIqpAWkqpdBXfj1XDVBQ/jNbAb6ByGfoqkcz2Pwd8mEHUndxOCw9FR6TqkMCMAr5XV8zYx0+m9GcGjxZzQuA2w==
dependencies:
acorn "^7.0.0"
acorn-walk@^6.0.1:
version "6.2.0"
- resolved "http://r.cnpmjs.org/acorn-walk/download/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
- integrity sha1-Ejy487hMIXHx9/slJhWxx4prGow=
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
acorn-walk@^7.0.0, acorn-walk@^7.1.1:
version "7.1.1"
- resolved "http://r.cnpmjs.org/acorn-walk/download/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e"
- integrity sha1-NF8N/61cc15zc9L+yaECPmpEuD4=
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e"
+ integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==
acorn@^6.0.1, acorn@^6.4.1:
version "6.4.1"
- resolved "http://r.cnpmjs.org/acorn/download/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
- integrity sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
+ integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
acorn@^7.0.0, acorn@^7.1.0, acorn@^7.1.1:
version "7.1.1"
- resolved "http://r.cnpmjs.org/acorn/download/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf"
- integrity sha1-41Zo3gtALzWd5RXFSCoaufiaab8=
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf"
+ integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==
ajv@^6.5.5:
- version "6.12.0"
- resolved "http://r.cnpmjs.org/ajv/download/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7"
- integrity sha1-BtYLlth7hFSlrauobnhU2mKdtLc=
+ version "6.12.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
+ integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
dependencies:
fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
@@ -656,153 +667,171 @@ ajv@^6.5.5:
ansi-escapes@^4.2.1:
version "4.3.1"
- resolved "http://r.cnpmjs.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
- integrity sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
+ integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
dependencies:
type-fest "^0.11.0"
ansi-regex@^2.0.0:
version "2.1.1"
- resolved "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
ansi-regex@^4.1.0:
version "4.1.0"
- resolved "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
- integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
ansi-regex@^5.0.0:
version "5.0.0"
- resolved "http://r.cnpmjs.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
- integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
ansi-styles@^3.2.1:
version "3.2.1"
- resolved "http://r.cnpmjs.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
dependencies:
color-convert "^1.9.0"
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.2.1"
- resolved "http://r.cnpmjs.org/ansi-styles/download/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
- integrity sha1-kK51xCTQCNJiTFvynq0xd+v881k=
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
+ integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
dependencies:
"@types/color-name" "^1.1.1"
color-convert "^2.0.1"
anymatch@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
- integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us=
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
dependencies:
micromatch "^3.1.4"
normalize-path "^2.1.1"
anymatch@^3.0.3:
version "3.1.1"
- resolved "http://r.cnpmjs.org/anymatch/download/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
- integrity sha1-xV7PAhheJGklk5kxDBc84xIzsUI=
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
+ integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
dependencies:
normalize-path "^3.0.0"
picomatch "^2.0.4"
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
argparse@^1.0.7:
version "1.0.10"
- resolved "http://r.cnpmjs.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
- integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
dependencies:
sprintf-js "~1.0.2"
arr-diff@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
arr-flatten@^1.1.0:
version "1.1.0"
- resolved "http://r.cnpmjs.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
- integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
arr-union@^3.1.0:
version "3.1.0"
- resolved "http://r.cnpmjs.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
array-equal@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/array-equal/download/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
array-unique@^0.3.2:
version "0.3.2"
- resolved "http://r.cnpmjs.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
asn1@~0.2.3:
version "0.2.4"
- resolved "http://r.cnpmjs.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
- integrity sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
dependencies:
safer-buffer "~2.1.0"
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
assign-symbols@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
astral-regex@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
- integrity sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
astring@^1.3.1:
version "1.4.3"
- resolved "http://r.cnpmjs.org/astring/download/astring-1.4.3.tgz#b99d4b0349bc7b28934bb9f03f86ec34d69c3a09"
- integrity sha1-uZ1LA0m8eyiTS7nwP4bsNNacOgk=
+ resolved "https://registry.yarnpkg.com/astring/-/astring-1.4.3.tgz#b99d4b0349bc7b28934bb9f03f86ec34d69c3a09"
+ integrity sha512-yJlJU/bmN820vL+cbWShu2YQU87dBP5V7BH2N4wODapRv27A2dZtUD0LgjP9lZENvPe9XRoSyWx+pZR6qKqNBw==
asynckit@^0.4.0:
version "0.4.0"
- resolved "http://r.cnpmjs.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
atob@^2.1.2:
version "2.1.2"
- resolved "http://r.cnpmjs.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
- integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
aws-sign2@~0.7.0:
version "0.7.0"
- resolved "http://r.cnpmjs.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
aws4@^1.8.0:
version "1.9.1"
- resolved "http://r.cnpmjs.org/aws4/download/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
- integrity sha1-fjPY99RJs/ZzzXLeuavcVS2+Uo4=
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
+ integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
-babel-jest@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/babel-jest/download/babel-jest-25.3.0.tgz#999d0c19e8427f66b796bf9ea233eedf087b957c"
- integrity sha1-mZ0MGehCf2a3lr+eojPu3wh7lXw=
+babel-jest@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.4.0.tgz#409eb3e2ddc2ad9a92afdbb00991f1633f8018d0"
+ integrity sha512-p+epx4K0ypmHuCnd8BapfyOwWwosNCYhedetQey1awddtfmEX0MmdxctGl956uwUmjwXR5VSS5xJcGX9DvdIog==
dependencies:
- "@jest/transform" "^25.3.0"
- "@jest/types" "^25.3.0"
+ "@jest/transform" "^25.4.0"
+ "@jest/types" "^25.4.0"
"@types/babel__core" "^7.1.7"
babel-plugin-istanbul "^6.0.0"
- babel-preset-jest "^25.3.0"
+ babel-preset-jest "^25.4.0"
chalk "^3.0.0"
slash "^3.0.0"
babel-plugin-istanbul@^6.0.0:
version "6.0.0"
- resolved "http://r.cnpmjs.org/babel-plugin-istanbul/download/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765"
- integrity sha1-4VnM3Jr5XgtXDHW0Vzt8NNZx12U=
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765"
+ integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@istanbuljs/load-nyc-config" "^1.0.0"
@@ -810,17 +839,17 @@ babel-plugin-istanbul@^6.0.0:
istanbul-lib-instrument "^4.0.0"
test-exclude "^6.0.0"
-babel-plugin-jest-hoist@^25.2.6:
- version "25.2.6"
- resolved "http://r.cnpmjs.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-25.2.6.tgz#2af07632b8ac7aad7d414c1e58425d5fc8e84909"
- integrity sha1-KvB2Mriseq19QUweWEJdX8joSQk=
+babel-plugin-jest-hoist@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.4.0.tgz#0c122c1b93fb76f52d2465be2e8069e798e9d442"
+ integrity sha512-M3a10JCtTyKevb0MjuH6tU+cP/NVQZ82QPADqI1RQYY1OphztsCeIeQmTsHmF/NS6m0E51Zl4QNsI3odXSQF5w==
dependencies:
"@types/babel__traverse" "^7.0.6"
babel-preset-current-node-syntax@^0.1.2:
version "0.1.2"
- resolved "http://r.cnpmjs.org/babel-preset-current-node-syntax/download/babel-preset-current-node-syntax-0.1.2.tgz#fb4a4c51fe38ca60fede1dc74ab35eb843cb41d6"
- integrity sha1-+0pMUf44ymD+3h3HSrNeuEPLQdY=
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz#fb4a4c51fe38ca60fede1dc74ab35eb843cb41d6"
+ integrity sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw==
dependencies:
"@babel/plugin-syntax-async-generators" "^7.8.4"
"@babel/plugin-syntax-bigint" "^7.8.3"
@@ -833,23 +862,28 @@ babel-preset-current-node-syntax@^0.1.2:
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
-babel-preset-jest@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/babel-preset-jest/download/babel-preset-jest-25.3.0.tgz#9ab40aee52a19bdc52b8b1ec2403d5914ac3d86b"
- integrity sha1-mrQK7lKhm9xSuLHsJAPVkUrD2Gs=
+babel-preset-jest@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.4.0.tgz#10037cc32b751b994b260964629e49dc479abf4c"
+ integrity sha512-PwFiEWflHdu3JCeTr0Pb9NcHHE34qWFnPQRVPvqQITx4CsDCzs6o05923I10XvLvn9nNsRHuiVgB72wG/90ZHQ==
dependencies:
- babel-plugin-jest-hoist "^25.2.6"
+ babel-plugin-jest-hoist "^25.4.0"
babel-preset-current-node-syntax "^0.1.2"
balanced-match@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+base64-js@^1.0.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
base@^0.11.1:
version "0.11.2"
- resolved "http://r.cnpmjs.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
- integrity sha1-e95c7RRbbVUakNuH+DxVi060io8=
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
dependencies:
cache-base "^1.0.1"
class-utils "^0.3.5"
@@ -861,28 +895,49 @@ base@^0.11.1:
bcrypt-pbkdf@^1.0.0:
version "1.0.2"
- resolved "http://r.cnpmjs.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
dependencies:
tweetnacl "^0.14.3"
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bit-twiddle@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e"
+ integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4=
+
+bl@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a"
+ integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
bluebird@^3.5.4:
version "3.7.2"
- resolved "http://r.cnpmjs.org/bluebird/download/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
- integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28=
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
brace-expansion@^1.1.7:
version "1.1.11"
- resolved "http://r.cnpmjs.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
braces@^2.3.1:
version "2.3.2"
- resolved "http://r.cnpmjs.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
- integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
dependencies:
arr-flatten "^1.1.0"
array-unique "^0.3.2"
@@ -897,51 +952,59 @@ braces@^2.3.1:
braces@^3.0.1:
version "3.0.2"
- resolved "http://r.cnpmjs.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc=
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
browser-process-hrtime@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
- integrity sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY=
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
browser-resolve@^1.11.3:
version "1.11.3"
- resolved "http://r.cnpmjs.org/browser-resolve/download/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
- integrity sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY=
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
dependencies:
resolve "1.1.7"
bs-logger@0.x:
version "0.2.6"
- resolved "http://r.cnpmjs.org/bs-logger/download/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
- integrity sha1-6302UwenLPl0zGzadraDVK0za9g=
+ resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
+ integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
dependencies:
fast-json-stable-stringify "2.x"
bser@2.1.1:
version "2.1.1"
- resolved "http://r.cnpmjs.org/bser/download/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
- integrity sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU=
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
dependencies:
node-int64 "^0.4.0"
buffer-from@1.x, buffer-from@^1.0.0:
version "1.1.1"
- resolved "http://r.cnpmjs.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
- integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer@^5.5.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
+ integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
builtin-modules@^1.1.1:
version "1.1.1"
- resolved "http://r.cnpmjs.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
cache-base@^1.0.1:
version "1.0.1"
- resolved "http://r.cnpmjs.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
- integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
dependencies:
collection-visit "^1.0.0"
component-emitter "^1.2.1"
@@ -955,37 +1018,37 @@ cache-base@^1.0.1:
callsites@^3.0.0:
version "3.1.0"
- resolved "http://r.cnpmjs.org/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
- integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
- resolved "http://r.cnpmjs.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
- integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
capture-exit@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/capture-exit/download/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
- integrity sha1-+5U7+uvreB9iiYI52rtCbQilCaQ=
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
dependencies:
rsvp "^4.8.4"
caseless@~0.12.0:
version "0.12.0"
- resolved "http://r.cnpmjs.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
catharsis@^0.8.11:
version "0.8.11"
- resolved "http://r.cnpmjs.org/catharsis/download/catharsis-0.8.11.tgz#d0eb3d2b82b7da7a3ce2efb1a7b00becc6643468"
- integrity sha1-0Os9K4K32no84u+xp7AL7MZkNGg=
+ resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.11.tgz#d0eb3d2b82b7da7a3ce2efb1a7b00becc6643468"
+ integrity sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==
dependencies:
lodash "^4.17.14"
chalk@^2.0.0, chalk@^2.3.0:
version "2.4.2"
- resolved "http://r.cnpmjs.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
@@ -993,29 +1056,34 @@ chalk@^2.0.0, chalk@^2.3.0:
chalk@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/chalk/download/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
- integrity sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chalk@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/chalk/download/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72"
- integrity sha1-bpgIHtLRf6q2FetSrGbsH+YgnnI=
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72"
+ integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
ci-info@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/ci-info/download/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
- integrity sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
class-utils@^0.3.5:
version "0.3.6"
- resolved "http://r.cnpmjs.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
- integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM=
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
dependencies:
arr-union "^3.1.0"
define-property "^0.2.5"
@@ -1024,8 +1092,8 @@ class-utils@^0.3.5:
cliui@^6.0.0:
version "6.0.0"
- resolved "http://r.cnpmjs.org/cliui/download/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
- integrity sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
dependencies:
string-width "^4.2.0"
strip-ansi "^6.0.0"
@@ -1033,17 +1101,22 @@ cliui@^6.0.0:
co@^4.6.0:
version "4.6.0"
- resolved "http://r.cnpmjs.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
collect-v8-coverage@^1.0.0:
version "1.0.1"
- resolved "http://r.cnpmjs.org/collect-v8-coverage/download/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
- integrity sha1-zCyOlPwYu9/+ZNZTRXDIpnOyf1k=
+ resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
+ integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
collection-visit@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
dependencies:
map-visit "^1.0.0"
@@ -1051,76 +1124,81 @@ collection-visit@^1.0.0:
color-convert@^1.9.0:
version "1.9.3"
- resolved "http://r.cnpmjs.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
dependencies:
color-name "1.1.3"
color-convert@^2.0.1:
version "2.0.1"
- resolved "http://r.cnpmjs.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
- integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
dependencies:
color-name "~1.1.4"
color-name@1.1.3:
version "1.1.3"
- resolved "http://r.cnpmjs.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
color-name@~1.1.4:
version "1.1.4"
- resolved "http://r.cnpmjs.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
- integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.8"
- resolved "http://r.cnpmjs.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
commander@^2.12.1:
version "2.20.3"
- resolved "http://r.cnpmjs.org/commander/download/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
- integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
compare-versions@^3.6.0:
version "3.6.0"
- resolved "http://r.cnpmjs.org/compare-versions/download/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
- integrity sha1-GlaJkTaF5ah2N7jT/8p1UU7EHWI=
+ resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
+ integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
component-emitter@^1.2.1:
version "1.3.0"
- resolved "http://r.cnpmjs.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
- integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
concat-map@0.0.1:
version "0.0.1"
- resolved "http://r.cnpmjs.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
version "1.7.0"
- resolved "http://r.cnpmjs.org/convert-source-map/download/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
- integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
dependencies:
safe-buffer "~5.1.1"
copy-descriptor@^0.1.0:
version "0.1.1"
- resolved "http://r.cnpmjs.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-core-util-is@1.0.2:
+core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
- resolved "http://r.cnpmjs.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
cosmiconfig@^6.0.0:
version "6.0.0"
- resolved "http://r.cnpmjs.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
- integrity sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI=
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
dependencies:
"@types/parse-json" "^4.0.0"
import-fresh "^3.1.0"
@@ -1129,20 +1207,20 @@ cosmiconfig@^6.0.0:
yaml "^1.7.2"
coveralls@^3.0.2:
- version "3.0.11"
- resolved "http://r.cnpmjs.org/coveralls/download/coveralls-3.0.11.tgz#e141da0922b632fcc66620f334460c3f0026a4ce"
- integrity sha1-4UHaCSK2MvzGZiDzNEYMPwAmpM4=
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b"
+ integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==
dependencies:
js-yaml "^3.13.1"
lcov-parse "^1.0.0"
log-driver "^1.2.7"
minimist "^1.2.5"
- request "^2.88.0"
+ request "^2.88.2"
cross-spawn@^6.0.0:
version "6.0.5"
- resolved "http://r.cnpmjs.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
dependencies:
nice-try "^1.0.4"
path-key "^2.0.1"
@@ -1152,8 +1230,8 @@ cross-spawn@^6.0.0:
cross-spawn@^7.0.0:
version "7.0.2"
- resolved "http://r.cnpmjs.org/cross-spawn/download/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6"
- integrity sha1-0Nfc+nTokRXHYZ9PchqU4f23FtY=
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6"
+ integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
@@ -1161,32 +1239,32 @@ cross-spawn@^7.0.0:
cssom@^0.4.1, cssom@^0.4.4:
version "0.4.4"
- resolved "http://r.cnpmjs.org/cssom/download/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
- integrity sha1-WmbPk9LQtmHYC/akT7ZfXC5OChA=
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
+ integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
cssom@~0.3.6:
version "0.3.8"
- resolved "http://r.cnpmjs.org/cssom/download/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
- integrity sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
cssstyle@^2.0.0, cssstyle@^2.2.0:
version "2.2.0"
- resolved "http://r.cnpmjs.org/cssstyle/download/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992"
- integrity sha1-5MRN68zWt5Ee1hekOV5XVLulmZI=
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992"
+ integrity sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA==
dependencies:
cssom "~0.3.6"
dashdash@^1.12.0:
version "1.14.1"
- resolved "http://r.cnpmjs.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
dependencies:
assert-plus "^1.0.0"
data-urls@^1.1.0:
version "1.1.0"
- resolved "http://r.cnpmjs.org/data-urls/download/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
- integrity sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4=
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
+ integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
dependencies:
abab "^2.0.0"
whatwg-mimetype "^2.2.0"
@@ -1194,8 +1272,8 @@ data-urls@^1.1.0:
data-urls@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/data-urls/download/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
- integrity sha1-FWSFpyljqXD11YIar2Qr7yvy25s=
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
+ integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
dependencies:
abab "^2.0.3"
whatwg-mimetype "^2.3.0"
@@ -1203,107 +1281,129 @@ data-urls@^2.0.0:
dateformat@3.0.2:
version "3.0.2"
- resolved "http://r.cnpmjs.org/dateformat/download/dateformat-3.0.2.tgz#9a4df4bff158ac2f34bc637abdb15471607e1659"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.2.tgz#9a4df4bff158ac2f34bc637abdb15471607e1659"
integrity sha1-mk30v/FYrC80vGN6vbFUcWB+Flk=
debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
- resolved "http://r.cnpmjs.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
debug@^4.1.0, debug@^4.1.1:
version "4.1.1"
- resolved "http://r.cnpmjs.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
- integrity sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
dependencies:
ms "^2.1.1"
decamelize@^1.2.0:
version "1.2.0"
- resolved "http://r.cnpmjs.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
decimal.js@^10.2.0:
version "10.2.0"
- resolved "http://r.cnpmjs.org/decimal.js/download/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231"
- integrity sha1-OUZhE6ngNhEdAvgkibX9awte0jE=
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231"
+ integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==
decode-uri-component@^0.2.0:
version "0.2.0"
- resolved "http://r.cnpmjs.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+decompress-response@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
+ integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
+ dependencies:
+ mimic-response "^2.0.0"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
deep-is@~0.1.3:
version "0.1.3"
- resolved "http://r.cnpmjs.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
deepmerge@^4.2.2:
version "4.2.2"
- resolved "http://r.cnpmjs.org/deepmerge/download/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
- integrity sha1-RNLqNnm49NT/ujPwPYZfwee/SVU=
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+ integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
define-property@^0.2.5:
version "0.2.5"
- resolved "http://r.cnpmjs.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
dependencies:
is-descriptor "^0.1.0"
define-property@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
dependencies:
is-descriptor "^1.0.0"
define-property@^2.0.2:
version "2.0.2"
- resolved "http://r.cnpmjs.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
- integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0=
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
dependencies:
is-descriptor "^1.0.2"
isobject "^3.0.1"
delayed-stream@~1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+detect-libc@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
detect-newline@^3.0.0:
version "3.1.0"
- resolved "http://r.cnpmjs.org/detect-newline/download/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
- integrity sha1-V29d/GOuGhkv8ZLYrTr2MImRtlE=
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+ integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
diff-sequences@^25.2.6:
version "25.2.6"
- resolved "http://r.cnpmjs.org/diff-sequences/download/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
- integrity sha1-X0Z8AO3TU1K3vKRteSfWDmh6dt0=
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
+ integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
diff@^4.0.1:
version "4.0.2"
- resolved "http://r.cnpmjs.org/diff/download/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
- integrity sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
domexception@^1.0.1:
version "1.0.1"
- resolved "http://r.cnpmjs.org/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
- integrity sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+ integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
dependencies:
webidl-conversions "^4.0.2"
domexception@^2.0.1:
version "2.0.1"
- resolved "http://r.cnpmjs.org/domexception/download/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
- integrity sha1-+0Su+6eT4VdLCvau0oAdBXUp8wQ=
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
+ integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
dependencies:
webidl-conversions "^5.0.0"
ecc-jsbn@~0.1.1:
version "0.1.2"
- resolved "http://r.cnpmjs.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
dependencies:
jsbn "~0.1.0"
@@ -1311,42 +1411,47 @@ ecc-jsbn@~0.1.1:
emoji-regex@^8.0.0:
version "8.0.0"
- resolved "http://r.cnpmjs.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-end-of-stream@^1.1.0:
+end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
- resolved "http://r.cnpmjs.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
once "^1.4.0"
entities@~1.1.1:
version "1.1.2"
- resolved "http://r.cnpmjs.org/entities/download/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
- integrity sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+env-paths@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43"
+ integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==
error-ex@^1.3.1:
version "1.3.2"
- resolved "http://r.cnpmjs.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
- integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8=
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
dependencies:
is-arrayish "^0.2.1"
escape-string-regexp@^1.0.5:
version "1.0.5"
- resolved "http://r.cnpmjs.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escape-string-regexp@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/escape-string-regexp/download/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
- integrity sha1-owME6Z2qMuI7L9IPUbq9B8/8o0Q=
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
escodegen@^1.11.1, escodegen@^1.14.1:
version "1.14.1"
- resolved "http://r.cnpmjs.org/escodegen/download/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457"
- integrity sha1-ugHQyCeLXpWppFNQFCAmZZAnpFc=
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457"
+ integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==
dependencies:
esprima "^4.0.1"
estraverse "^4.2.0"
@@ -1357,28 +1462,28 @@ escodegen@^1.11.1, escodegen@^1.14.1:
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
- resolved "http://r.cnpmjs.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
- integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
estraverse@^4.2.0:
version "4.3.0"
- resolved "http://r.cnpmjs.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
- integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
esutils@^2.0.2:
version "2.0.3"
- resolved "http://r.cnpmjs.org/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
- integrity sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
exec-sh@^0.3.2:
version "0.3.4"
- resolved "http://r.cnpmjs.org/exec-sh/download/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
- integrity sha1-OgGM61JsxvbfK7UEsr/o46STTsU=
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
+ integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==
execa@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/execa/download/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
- integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
dependencies:
cross-spawn "^6.0.0"
get-stream "^4.0.0"
@@ -1390,8 +1495,8 @@ execa@^1.0.0:
execa@^3.2.0:
version "3.4.0"
- resolved "http://r.cnpmjs.org/execa/download/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
- integrity sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=
+ resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
+ integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==
dependencies:
cross-spawn "^7.0.0"
get-stream "^5.0.0"
@@ -1406,12 +1511,12 @@ execa@^3.2.0:
exit@^0.1.2:
version "0.1.2"
- resolved "http://r.cnpmjs.org/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
expand-brackets@^2.1.4:
version "2.1.4"
- resolved "http://r.cnpmjs.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
dependencies:
debug "^2.3.3"
@@ -1422,28 +1527,33 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-expect@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/expect/download/expect-25.3.0.tgz#5fd36e51befd05afb7184bc954f8a4792d184c71"
- integrity sha1-X9NuUb79Ba+3GEvJVPikeS0YTHE=
+expand-template@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+ integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
+expect@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-25.4.0.tgz#0b16c17401906d1679d173e59f0d4580b22f8dc8"
+ integrity sha512-7BDIX99BTi12/sNGJXA9KMRcby4iAmu1xccBOhyKCyEhjcVKS3hPmHdA/4nSI9QGIOkUropKqr3vv7WMDM5lvQ==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
ansi-styles "^4.0.0"
jest-get-type "^25.2.6"
- jest-matcher-utils "^25.3.0"
- jest-message-util "^25.3.0"
+ jest-matcher-utils "^25.4.0"
+ jest-message-util "^25.4.0"
jest-regex-util "^25.2.6"
extend-shallow@^2.0.1:
version "2.0.1"
- resolved "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
dependencies:
is-extendable "^0.1.0"
extend-shallow@^3.0.0, extend-shallow@^3.0.2:
version "3.0.2"
- resolved "http://r.cnpmjs.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
dependencies:
assign-symbols "^1.0.0"
@@ -1451,13 +1561,13 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
extend@~3.0.2:
version "3.0.2"
- resolved "http://r.cnpmjs.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
- integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
extglob@^2.0.4:
version "2.0.4"
- resolved "http://r.cnpmjs.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
- integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
dependencies:
array-unique "^0.3.2"
define-property "^1.0.0"
@@ -1470,39 +1580,44 @@ extglob@^2.0.4:
extsprintf@1.3.0:
version "1.3.0"
- resolved "http://r.cnpmjs.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
extsprintf@^1.2.0:
version "1.4.0"
- resolved "http://r.cnpmjs.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^3.1.1:
version "3.1.1"
- resolved "http://r.cnpmjs.org/fast-deep-equal/download/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
- integrity sha1-VFFFB3xQFJHjOxXsQIwpQ3bpSuQ=
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
+ integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
version "2.1.0"
- resolved "http://r.cnpmjs.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
fast-levenshtein@~2.0.6:
version "2.0.6"
- resolved "http://r.cnpmjs.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
fb-watchman@^2.0.0:
version "2.0.1"
- resolved "http://r.cnpmjs.org/fb-watchman/download/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
- integrity sha1-/IT7OdJwnPP/bXQ3BhV7tXCKioU=
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
dependencies:
bser "2.1.1"
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
fill-range@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
dependencies:
extend-shallow "^2.0.1"
@@ -1512,40 +1627,40 @@ fill-range@^4.0.0:
fill-range@^7.0.1:
version "7.0.1"
- resolved "http://r.cnpmjs.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha1-GRmmp8df44ssfHflGYU12prN2kA=
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
to-regex-range "^5.0.1"
find-up@^4.0.0, find-up@^4.1.0:
version "4.1.0"
- resolved "http://r.cnpmjs.org/find-up/download/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
- integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
dependencies:
locate-path "^5.0.0"
path-exists "^4.0.0"
find-versions@^3.2.0:
version "3.2.0"
- resolved "http://r.cnpmjs.org/find-versions/download/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e"
- integrity sha1-ECl/mAMKeGgpaBaQVF72We0dJU4=
+ resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e"
+ integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==
dependencies:
semver-regex "^2.0.0"
for-in@^1.0.2:
version "1.0.2"
- resolved "http://r.cnpmjs.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
forever-agent@~0.6.1:
version "0.6.1"
- resolved "http://r.cnpmjs.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
form-data@~2.3.2:
version "2.3.3"
- resolved "http://r.cnpmjs.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
- integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y=
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.6"
@@ -1553,61 +1668,109 @@ form-data@~2.3.2:
fragment-cache@^0.2.1:
version "0.2.1"
- resolved "http://r.cnpmjs.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
dependencies:
map-cache "^0.2.2"
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-minipass@^1.2.5:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
+ integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
+ dependencies:
+ minipass "^2.6.0"
+
fs.realpath@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@^2.1.2:
- version "2.1.2"
- resolved "http://r.cnpmjs.org/fsevents/download/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805"
- integrity sha1-TAofs0vGjlQ7S4Kp7Dkr+9qECAU=
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
+ integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
gensync@^1.0.0-beta.1:
version "1.0.0-beta.1"
- resolved "http://r.cnpmjs.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
- integrity sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk=
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
+ integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
get-caller-file@^2.0.1:
version "2.0.5"
- resolved "http://r.cnpmjs.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
get-stream@^4.0.0:
version "4.1.0"
- resolved "http://r.cnpmjs.org/get-stream/download/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
- integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU=
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
dependencies:
pump "^3.0.0"
get-stream@^5.0.0:
version "5.1.0"
- resolved "http://r.cnpmjs.org/get-stream/download/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
- integrity sha1-ASA83JJZf5uQkGfD5lbMH008Tck=
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
+ integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
dependencies:
pump "^3.0.0"
get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
- resolved "http://r.cnpmjs.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
getpass@^0.1.1:
version "0.1.7"
- resolved "http://r.cnpmjs.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
dependencies:
assert-plus "^1.0.0"
+github-from-package@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+ integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
+
+gl-wiretap@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/gl-wiretap/-/gl-wiretap-0.6.2.tgz#e4aa19622831088fbaa7e5a18d01768f7a3fb07c"
+ integrity sha512-fxy1XGiPkfzK+T3XKDbY7yaqMBmozCGvAFyTwaZA3imeZH83w7Hr3r3bYlMRWIyzMI/lDUvUMM/92LE2OwqFyQ==
+
+gl@^4.4.1:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/gl/-/gl-4.5.0.tgz#cb7c880c0171c8efb4660344bd119929e7ee666e"
+ integrity sha512-wCIb56NeVF/KAxNI4TlKbLz2la70On3uNDv6t5a52OcyOyyCg4sa65SxIfk8MTdc0XBSkHbYWY+2pjTuunLmnw==
+ dependencies:
+ bindings "^1.5.0"
+ bit-twiddle "^1.0.2"
+ glsl-tokenizer "^2.0.2"
+ nan "^2.14.0"
+ node-gyp "^6.1.0"
+ prebuild-install "^5.1.0"
+
glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
version "7.1.6"
- resolved "http://r.cnpmjs.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -1618,45 +1781,72 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
globals@^11.1.0:
version "11.12.0"
- resolved "http://r.cnpmjs.org/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
- integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+glsl-tokenizer@^2.0.2:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a"
+ integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==
+ dependencies:
+ through2 "^0.6.3"
+
+gpu-mock.js@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/gpu-mock.js/-/gpu-mock.js-1.1.1.tgz#fe720db34b497c802b4e9381d8ddd883ecba999c"
+ integrity sha512-BmoRk9nbMaxkrwzTJp4M0iuwIbzNEXt6tlBZ5+ZYzaGH9VWu5Nhn1Q1CBusCam3d8u3FfVEFf3Ueo8DocUCbUw==
-graceful-fs@^4.1.9, graceful-fs@^4.2.3:
+gpu.js@^2.9.3:
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/gpu.js/-/gpu.js-2.9.3.tgz#7573712cc7503a10d590483fbfaa9b64cb78f93f"
+ integrity sha512-WsPtqJYwtlS1igVLfc6oR37ZG6VUmuZCL7LLjcJdNwiwHxTdcP7k3RvLGuKDr6uYgwdqPElywa0jBABugjMsPA==
+ dependencies:
+ acorn "^7.1.1"
+ gl "^4.4.1"
+ gl-wiretap "^0.6.2"
+ gpu-mock.js "^1.1.1"
+
+graceful-fs@^4.1.9, graceful-fs@^4.2.2, graceful-fs@^4.2.3:
version "4.2.3"
- resolved "http://r.cnpmjs.org/graceful-fs/download/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
- integrity sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM=
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
+ integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
growly@^1.3.0:
version "1.3.0"
- resolved "http://r.cnpmjs.org/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
har-schema@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
har-validator@~5.1.3:
version "5.1.3"
- resolved "http://r.cnpmjs.org/har-validator/download/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
- integrity sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
dependencies:
ajv "^6.5.5"
har-schema "^2.0.0"
has-flag@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
has-flag@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
- integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
has-value@^0.3.1:
version "0.3.1"
- resolved "http://r.cnpmjs.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
dependencies:
get-value "^2.0.3"
@@ -1665,7 +1855,7 @@ has-value@^0.3.1:
has-value@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
dependencies:
get-value "^2.0.6"
@@ -1674,39 +1864,44 @@ has-value@^1.0.0:
has-values@^0.1.4:
version "0.1.4"
- resolved "http://r.cnpmjs.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
has-values@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
dependencies:
is-number "^3.0.0"
kind-of "^4.0.0"
+hosted-git-info@^2.1.4:
+ version "2.8.8"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
+ integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+
html-encoding-sniffer@^1.0.2:
version "1.0.2"
- resolved "http://r.cnpmjs.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
- integrity sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
dependencies:
whatwg-encoding "^1.0.1"
html-encoding-sniffer@^2.0.1:
version "2.0.1"
- resolved "http://r.cnpmjs.org/html-encoding-sniffer/download/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
- integrity sha1-QqbcT9M/ACgRduiyN1nKTk+hhfM=
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
+ integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
dependencies:
whatwg-encoding "^1.0.5"
html-escaper@^2.0.0:
version "2.0.2"
- resolved "http://r.cnpmjs.org/html-escaper/download/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
- integrity sha1-39YAJ9o2o238viNiYsAKWCJoFFM=
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
http-signature@~1.2.0:
version "1.2.0"
- resolved "http://r.cnpmjs.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
dependencies:
assert-plus "^1.0.0"
@@ -1715,13 +1910,13 @@ http-signature@~1.2.0:
human-signals@^1.1.1:
version "1.1.1"
- resolved "http://r.cnpmjs.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
- integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M=
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
husky@^4.2.5:
version "4.2.5"
- resolved "http://r.cnpmjs.org/husky/download/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36"
- integrity sha1-K092Imc6cVefkB2Yhe1Eg5S1+jY=
+ resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36"
+ integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==
dependencies:
chalk "^4.0.0"
ci-info "^2.0.0"
@@ -1736,99 +1931,109 @@ husky@^4.2.5:
iconv-lite@0.4.24:
version "0.4.24"
- resolved "http://r.cnpmjs.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
- integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
safer-buffer ">= 2.1.2 < 3"
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
import-fresh@^3.1.0:
version "3.2.1"
- resolved "http://r.cnpmjs.org/import-fresh/download/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
- integrity sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+ integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
dependencies:
parent-module "^1.0.0"
resolve-from "^4.0.0"
import-local@^3.0.2:
version "3.0.2"
- resolved "http://r.cnpmjs.org/import-local/download/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6"
- integrity sha1-qM/QQx0d5KIZlwPQA+PmI2T6bbY=
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6"
+ integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==
dependencies:
pkg-dir "^4.2.0"
resolve-cwd "^3.0.0"
imurmurhash@^0.1.4:
version "0.1.4"
- resolved "http://r.cnpmjs.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
inflight@^1.0.4:
version "1.0.6"
- resolved "http://r.cnpmjs.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
once "^1.3.0"
wrappy "1"
-inherits@2:
+inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
- resolved "http://r.cnpmjs.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
ip-regex@^2.1.0:
version "2.1.0"
- resolved "http://r.cnpmjs.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
is-accessor-descriptor@^0.1.6:
version "0.1.6"
- resolved "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
dependencies:
kind-of "^3.0.2"
is-accessor-descriptor@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
- integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
dependencies:
kind-of "^6.0.0"
is-arrayish@^0.2.1:
version "0.2.1"
- resolved "http://r.cnpmjs.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
is-buffer@^1.1.5:
version "1.1.6"
- resolved "http://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
- integrity sha1-76ouqdqg16suoTqXsritUf776L4=
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
is-ci@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/is-ci/download/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
- integrity sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw=
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
dependencies:
ci-info "^2.0.0"
is-data-descriptor@^0.1.4:
version "0.1.4"
- resolved "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
dependencies:
kind-of "^3.0.2"
is-data-descriptor@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
- integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
dependencies:
kind-of "^6.0.0"
is-descriptor@^0.1.0:
version "0.1.6"
- resolved "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
- integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
dependencies:
is-accessor-descriptor "^0.1.6"
is-data-descriptor "^0.1.4"
@@ -1836,8 +2041,8 @@ is-descriptor@^0.1.0:
is-descriptor@^1.0.0, is-descriptor@^1.0.2:
version "1.0.2"
- resolved "http://r.cnpmjs.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
- integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
dependencies:
is-accessor-descriptor "^1.0.0"
is-data-descriptor "^1.0.0"
@@ -1845,111 +2050,128 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
- resolved "http://r.cnpmjs.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
is-extendable@^1.0.1:
version "1.0.1"
- resolved "http://r.cnpmjs.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
- integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
dependencies:
is-plain-object "^2.0.4"
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
is-generator-fn@^2.0.0:
version "2.1.0"
- resolved "http://r.cnpmjs.org/is-generator-fn/download/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
- integrity sha1-fRQK3DiarzARqPKipM+m+q3/sRg=
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
is-number@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
dependencies:
kind-of "^3.0.2"
is-number@^7.0.0:
version "7.0.0"
- resolved "http://r.cnpmjs.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
- resolved "http://r.cnpmjs.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
dependencies:
isobject "^3.0.1"
is-potential-custom-element-name@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/is-potential-custom-element-name/download/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397"
+ resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397"
integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c=
is-stream@^1.1.0:
version "1.1.0"
- resolved "http://r.cnpmjs.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
is-stream@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/is-stream/download/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
- integrity sha1-venDJoDW+uBBKdasnZIc54FfeOM=
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
is-windows@^1.0.2:
version "1.0.2"
- resolved "http://r.cnpmjs.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
- integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
is-wsl@^2.1.1:
version "2.1.1"
- resolved "http://r.cnpmjs.org/is-wsl/download/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d"
- integrity sha1-ShwVLUKd89RBZpSY4khtNZbrrx0=
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d"
+ integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
-isarray@1.0.0:
+isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
isexe@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
isobject@^2.0.0:
version "2.1.0"
- resolved "http://r.cnpmjs.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
dependencies:
isarray "1.0.0"
isobject@^3.0.0, isobject@^3.0.1:
version "3.0.1"
- resolved "http://r.cnpmjs.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
isstream@~0.1.2:
version "0.1.2"
- resolved "http://r.cnpmjs.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
istanbul-lib-coverage@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/istanbul-lib-coverage/download/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
- integrity sha1-9ZRKN8cLVQsCp4pcOyBVsoDOyOw=
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
+ integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==
istanbul-lib-instrument@^4.0.0:
version "4.0.1"
- resolved "http://r.cnpmjs.org/istanbul-lib-instrument/download/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6"
- integrity sha1-YfE6wsls/vsHb+cTEVbMBZB4dOY=
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6"
+ integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==
dependencies:
"@babel/core" "^7.7.5"
"@babel/parser" "^7.7.5"
@@ -1961,8 +2183,8 @@ istanbul-lib-instrument@^4.0.0:
istanbul-lib-report@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/istanbul-lib-report/download/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
- integrity sha1-dRj+UupE3jcvRgp2tezan/tz2KY=
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
+ integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
dependencies:
istanbul-lib-coverage "^3.0.0"
make-dir "^3.0.0"
@@ -1970,8 +2192,8 @@ istanbul-lib-report@^3.0.0:
istanbul-lib-source-maps@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9"
- integrity sha1-dXQ85tlruG3H7kNSz2Nmoj8LGtk=
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9"
+ integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==
dependencies:
debug "^4.1.1"
istanbul-lib-coverage "^3.0.0"
@@ -1979,133 +2201,133 @@ istanbul-lib-source-maps@^4.0.0:
istanbul-reports@^3.0.2:
version "3.0.2"
- resolved "http://r.cnpmjs.org/istanbul-reports/download/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b"
- integrity sha1-1ZMhDlAAaDdQywn8BkTktuJ/1Ts=
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b"
+ integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==
dependencies:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
-jest-changed-files@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-changed-files/download/jest-changed-files-25.3.0.tgz#85d8de6f4bd13dafda9d7f1e3f2565fc0e183c78"
- integrity sha1-hdjeb0vRPa/anX8ePyVl/A4YPHg=
+jest-changed-files@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.4.0.tgz#e573db32c2fd47d2b90357ea2eda0622c5c5cbd6"
+ integrity sha512-VR/rfJsEs4BVMkwOTuStRyS630fidFVekdw/lBaBQjx9KK3VZFOZ2c0fsom2fRp8pMCrCTP6LGna00o/DXGlqA==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
execa "^3.2.0"
throat "^5.0.0"
-jest-cli@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-cli/download/jest-cli-25.3.0.tgz#d9e11f5700cc5946583cf0d01a9bdebceed448d2"
- integrity sha1-2eEfVwDMWUZYPPDQGpvevO7USNI=
+jest-cli@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.4.0.tgz#5dac8be0fece6ce39f0d671395a61d1357322bab"
+ integrity sha512-usyrj1lzCJZMRN1r3QEdnn8e6E6yCx/QN7+B1sLoA68V7f3WlsxSSQfy0+BAwRiF4Hz2eHauf11GZG3PIfWTXQ==
dependencies:
- "@jest/core" "^25.3.0"
- "@jest/test-result" "^25.3.0"
- "@jest/types" "^25.3.0"
+ "@jest/core" "^25.4.0"
+ "@jest/test-result" "^25.4.0"
+ "@jest/types" "^25.4.0"
chalk "^3.0.0"
exit "^0.1.2"
import-local "^3.0.2"
is-ci "^2.0.0"
- jest-config "^25.3.0"
- jest-util "^25.3.0"
- jest-validate "^25.3.0"
+ jest-config "^25.4.0"
+ jest-util "^25.4.0"
+ jest-validate "^25.4.0"
prompts "^2.0.1"
realpath-native "^2.0.0"
yargs "^15.3.1"
-jest-config@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-config/download/jest-config-25.3.0.tgz#112b5e2f2e57dec4501dd2fe979044c06fb1317e"
- integrity sha1-ESteLy5X3sRQHdL+l5BEwG+xMX4=
+jest-config@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.4.0.tgz#56e5df3679a96ff132114b44fb147389c8c0a774"
+ integrity sha512-egT9aKYxMyMSQV1aqTgam0SkI5/I2P9qrKexN5r2uuM2+68ypnc+zPGmfUxK7p1UhE7dYH9SLBS7yb+TtmT1AA==
dependencies:
"@babel/core" "^7.1.0"
- "@jest/test-sequencer" "^25.3.0"
- "@jest/types" "^25.3.0"
- babel-jest "^25.3.0"
+ "@jest/test-sequencer" "^25.4.0"
+ "@jest/types" "^25.4.0"
+ babel-jest "^25.4.0"
chalk "^3.0.0"
deepmerge "^4.2.2"
glob "^7.1.1"
- jest-environment-jsdom "^25.3.0"
- jest-environment-node "^25.3.0"
+ jest-environment-jsdom "^25.4.0"
+ jest-environment-node "^25.4.0"
jest-get-type "^25.2.6"
- jest-jasmine2 "^25.3.0"
+ jest-jasmine2 "^25.4.0"
jest-regex-util "^25.2.6"
- jest-resolve "^25.3.0"
- jest-util "^25.3.0"
- jest-validate "^25.3.0"
+ jest-resolve "^25.4.0"
+ jest-util "^25.4.0"
+ jest-validate "^25.4.0"
micromatch "^4.0.2"
- pretty-format "^25.3.0"
+ pretty-format "^25.4.0"
realpath-native "^2.0.0"
-jest-diff@^25.2.1, jest-diff@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-diff/download/jest-diff-25.3.0.tgz#0d7d6f5d6171e5dacde9e05be47b3615e147c26f"
- integrity sha1-DX1vXWFx5drN6eBb5Hs2FeFHwm8=
+jest-diff@^25.2.1, jest-diff@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.4.0.tgz#260b70f19a46c283adcad7f081cae71eb784a634"
+ integrity sha512-kklLbJVXW0y8UKOWOdYhI6TH5MG6QAxrWiBMgQaPIuhj3dNFGirKCd+/xfplBXICQ7fI+3QcqHm9p9lWu1N6ug==
dependencies:
chalk "^3.0.0"
diff-sequences "^25.2.6"
jest-get-type "^25.2.6"
- pretty-format "^25.3.0"
+ pretty-format "^25.4.0"
jest-docblock@^25.3.0:
version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-docblock/download/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef"
- integrity sha1-i3d6J+NHfNd6FowFKQxHGldWI+8=
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef"
+ integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==
dependencies:
detect-newline "^3.0.0"
-jest-each@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-each/download/jest-each-25.3.0.tgz#a319eecf1f6076164ab86f99ca166a55b96c0bd4"
- integrity sha1-oxnuzx9gdhZKuG+ZyhZqVblsC9Q=
+jest-each@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.4.0.tgz#ad4e46164764e8e77058f169a0076a7f86f6b7d4"
+ integrity sha512-lwRIJ8/vQU/6vq3nnSSUw1Y3nz5tkYSFIywGCZpUBd6WcRgpn8NmJoQICojbpZmsJOJNHm0BKdyuJ6Xdx+eDQQ==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
chalk "^3.0.0"
jest-get-type "^25.2.6"
- jest-util "^25.3.0"
- pretty-format "^25.3.0"
-
-jest-environment-jsdom@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-environment-jsdom/download/jest-environment-jsdom-25.3.0.tgz#c493ab8c41f28001520c70ef67dd88b88be6af05"
- integrity sha1-xJOrjEHygAFSDHDvZ92IuIvmrwU=
- dependencies:
- "@jest/environment" "^25.3.0"
- "@jest/fake-timers" "^25.3.0"
- "@jest/types" "^25.3.0"
- jest-mock "^25.3.0"
- jest-util "^25.3.0"
+ jest-util "^25.4.0"
+ pretty-format "^25.4.0"
+
+jest-environment-jsdom@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.4.0.tgz#bbfc7f85bb6ade99089062a830c79cb454565cf0"
+ integrity sha512-KTitVGMDrn2+pt7aZ8/yUTuS333w3pWt1Mf88vMntw7ZSBNDkRS6/4XLbFpWXYfWfp1FjcjQTOKzbK20oIehWQ==
+ dependencies:
+ "@jest/environment" "^25.4.0"
+ "@jest/fake-timers" "^25.4.0"
+ "@jest/types" "^25.4.0"
+ jest-mock "^25.4.0"
+ jest-util "^25.4.0"
jsdom "^15.2.1"
-jest-environment-node@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-environment-node/download/jest-environment-node-25.3.0.tgz#9845f0e63991e8498448cb0ae804935689533db9"
- integrity sha1-mEXw5jmR6EmESMsK6ASTVolTPbk=
- dependencies:
- "@jest/environment" "^25.3.0"
- "@jest/fake-timers" "^25.3.0"
- "@jest/types" "^25.3.0"
- jest-mock "^25.3.0"
- jest-util "^25.3.0"
+jest-environment-node@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.4.0.tgz#188aef01ae6418e001c03fdd1c299961e1439082"
+ integrity sha512-wryZ18vsxEAKFH7Z74zi/y/SyI1j6UkVZ6QsllBuT/bWlahNfQjLNwFsgh/5u7O957dYFoXj4yfma4n4X6kU9A==
+ dependencies:
+ "@jest/environment" "^25.4.0"
+ "@jest/fake-timers" "^25.4.0"
+ "@jest/types" "^25.4.0"
+ jest-mock "^25.4.0"
+ jest-util "^25.4.0"
semver "^6.3.0"
jest-get-type@^25.2.6:
version "25.2.6"
- resolved "http://r.cnpmjs.org/jest-get-type/download/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
- integrity sha1-Cwoy+riQi0TVCL6BaBSH26u42Hc=
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
+ integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
-jest-haste-map@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-haste-map/download/jest-haste-map-25.3.0.tgz#b7683031c9c9ddc0521d311564108b244b11e4c6"
- integrity sha1-t2gwMcnJ3cBSHTEVZBCLJEsR5MY=
+jest-haste-map@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.4.0.tgz#da7c309dd7071e0a80c953ba10a0ec397efb1ae2"
+ integrity sha512-5EoCe1gXfGC7jmXbKzqxESrgRcaO3SzWXGCnvp9BcT0CFMyrB1Q6LIsjl9RmvmJGQgW297TCfrdgiy574Rl9HQ==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
anymatch "^3.0.3"
fb-watchman "^2.0.0"
graceful-fs "^4.2.3"
jest-serializer "^25.2.6"
- jest-util "^25.3.0"
- jest-worker "^25.2.6"
+ jest-util "^25.4.0"
+ jest-worker "^25.4.0"
micromatch "^4.0.2"
sane "^4.0.3"
walker "^1.0.7"
@@ -2115,157 +2337,159 @@ jest-haste-map@^25.3.0:
jest-html-reporter@^2.8.2:
version "2.8.2"
- resolved "http://r.cnpmjs.org/jest-html-reporter/download/jest-html-reporter-2.8.2.tgz#6b6b1f5f927211a0e5699cf9bcc76837a19952f5"
- integrity sha1-a2sfX5JyEaDlaZz5vMdoN6GZUvU=
+ resolved "https://registry.yarnpkg.com/jest-html-reporter/-/jest-html-reporter-2.8.2.tgz#6b6b1f5f927211a0e5699cf9bcc76837a19952f5"
+ integrity sha512-zepJsVjqplRFrNRtRZsD3yYVRJOrNiUPOoOJA1oSL7ypYxr4YHlvVz1CPmc762BkSd3fp+kRd6mGCZz29xXFEQ==
dependencies:
dateformat "3.0.2"
mkdirp "0.5.3"
strip-ansi "3.0.1"
xmlbuilder "13.0.2"
-jest-jasmine2@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-jasmine2/download/jest-jasmine2-25.3.0.tgz#16ae4f68adef65fb45001b26c864bcbcbf972830"
- integrity sha1-Fq5PaK3vZftFABsmyGS8vL+XKDA=
+jest-jasmine2@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.4.0.tgz#3d3d19514022e2326e836c2b66d68b4cb63c5861"
+ integrity sha512-QccxnozujVKYNEhMQ1vREiz859fPN/XklOzfQjm2j9IGytAkUbSwjFRBtQbHaNZ88cItMpw02JnHGsIdfdpwxQ==
dependencies:
"@babel/traverse" "^7.1.0"
- "@jest/environment" "^25.3.0"
+ "@jest/environment" "^25.4.0"
"@jest/source-map" "^25.2.6"
- "@jest/test-result" "^25.3.0"
- "@jest/types" "^25.3.0"
+ "@jest/test-result" "^25.4.0"
+ "@jest/types" "^25.4.0"
chalk "^3.0.0"
co "^4.6.0"
- expect "^25.3.0"
+ expect "^25.4.0"
is-generator-fn "^2.0.0"
- jest-each "^25.3.0"
- jest-matcher-utils "^25.3.0"
- jest-message-util "^25.3.0"
- jest-runtime "^25.3.0"
- jest-snapshot "^25.3.0"
- jest-util "^25.3.0"
- pretty-format "^25.3.0"
+ jest-each "^25.4.0"
+ jest-matcher-utils "^25.4.0"
+ jest-message-util "^25.4.0"
+ jest-runtime "^25.4.0"
+ jest-snapshot "^25.4.0"
+ jest-util "^25.4.0"
+ pretty-format "^25.4.0"
throat "^5.0.0"
-jest-leak-detector@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-leak-detector/download/jest-leak-detector-25.3.0.tgz#5b6bf04903b35be56038915a55f47291771f769f"
- integrity sha1-W2vwSQOzW+VgOJFaVfRykXcfdp8=
+jest-leak-detector@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.4.0.tgz#cf94a160c78e53d810e7b2f40b5fd7ee263375b3"
+ integrity sha512-7Y6Bqfv2xWsB+7w44dvZuLs5SQ//fzhETgOGG7Gq3TTGFdYvAgXGwV8z159RFZ6fXiCPm/szQ90CyfVos9JIFQ==
dependencies:
jest-get-type "^25.2.6"
- pretty-format "^25.3.0"
+ pretty-format "^25.4.0"
-jest-matcher-utils@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-matcher-utils/download/jest-matcher-utils-25.3.0.tgz#76765788a26edaa8bc5f0100aea52ae383559648"
- integrity sha1-dnZXiKJu2qi8XwEArqUq44NVlkg=
+jest-matcher-utils@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.4.0.tgz#dc3e7aec402a1e567ed80b572b9ad285878895e6"
+ integrity sha512-yPMdtj7YDgXhnGbc66bowk8AkQ0YwClbbwk3Kzhn5GVDrciiCr27U4NJRbrqXbTdtxjImONITg2LiRIw650k5A==
dependencies:
chalk "^3.0.0"
- jest-diff "^25.3.0"
+ jest-diff "^25.4.0"
jest-get-type "^25.2.6"
- pretty-format "^25.3.0"
+ pretty-format "^25.4.0"
-jest-message-util@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-message-util/download/jest-message-util-25.3.0.tgz#e3836826fe5ca538a337b87d9bd2648190867f85"
- integrity sha1-44NoJv5cpTijN7h9m9JkgZCGf4U=
+jest-message-util@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.4.0.tgz#2899e8bc43f5317acf8dfdfe89ea237d354fcdab"
+ integrity sha512-LYY9hRcVGgMeMwmdfh9tTjeux1OjZHMusq/E5f3tJN+dAoVVkJtq5ZUEPIcB7bpxDUt2zjUsrwg0EGgPQ+OhXQ==
dependencies:
"@babel/code-frame" "^7.0.0"
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
"@types/stack-utils" "^1.0.1"
chalk "^3.0.0"
micromatch "^4.0.2"
slash "^3.0.0"
stack-utils "^1.0.1"
-jest-mock@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-mock/download/jest-mock-25.3.0.tgz#d72644509e40987a732a9a2534a1054f4649402c"
- integrity sha1-1yZEUJ5AmHpzKpolNKEFT0ZJQCw=
+jest-mock@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.4.0.tgz#ded7d64b5328d81d78d2138c825d3a45e30ec8ca"
+ integrity sha512-MdazSfcYAUjJjuVTTnusLPzE0pE4VXpOUzWdj8sbM+q6abUjm3bATVPXFqTXrxSieR8ocpvQ9v/QaQCftioQFg==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
jest-pnp-resolver@^1.2.1:
version "1.2.1"
- resolved "http://r.cnpmjs.org/jest-pnp-resolver/download/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a"
- integrity sha1-7NrmBMB3p/vHDe+21RfDwciYkjo=
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a"
+ integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==
jest-regex-util@^25.2.6:
version "25.2.6"
- resolved "http://r.cnpmjs.org/jest-regex-util/download/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964"
- integrity sha1-2EfTi6FdIRjTsGOQBWAo0PL9OWQ=
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964"
+ integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==
-jest-resolve-dependencies@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-resolve-dependencies/download/jest-resolve-dependencies-25.3.0.tgz#b0e4ae053dd44ddacc18c6ee12b5b7c28e445a90"
- integrity sha1-sOSuBT3UTdrMGMbuErW3wo5EWpA=
+jest-resolve-dependencies@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.4.0.tgz#783937544cfc40afcc7c569aa54748c4b3f83f5a"
+ integrity sha512-A0eoZXx6kLiuG1Ui7wITQPl04HwjLErKIJTt8GR3c7UoDAtzW84JtCrgrJ6Tkw6c6MwHEyAaLk7dEPml5pf48A==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
jest-regex-util "^25.2.6"
- jest-snapshot "^25.3.0"
+ jest-snapshot "^25.4.0"
-jest-resolve@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-resolve/download/jest-resolve-25.3.0.tgz#cb90a5bbea54a02eccdbbf4126a819595dcf91d6"
- integrity sha1-y5Clu+pUoC7M279BJqgZWV3PkdY=
+jest-resolve@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.4.0.tgz#6f4540ce0d419c4c720e791e871da32ba4da7a60"
+ integrity sha512-wOsKqVDFWUiv8BtLMCC6uAJ/pHZkfFgoBTgPtmYlsprAjkxrr2U++ZnB3l5ykBMd2O24lXvf30SMAjJIW6k2aA==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
browser-resolve "^1.11.3"
chalk "^3.0.0"
jest-pnp-resolver "^1.2.1"
+ read-pkg-up "^7.0.1"
realpath-native "^2.0.0"
resolve "^1.15.1"
+ slash "^3.0.0"
-jest-runner@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-runner/download/jest-runner-25.3.0.tgz#673ef2ac79d2810eb6b2c1a3f82398375a3d1174"
- integrity sha1-Zz7yrHnSgQ62ssGj+COYN1o9EXQ=
+jest-runner@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.4.0.tgz#6ca4a3d52e692bbc081228fa68f750012f1f29e5"
+ integrity sha512-wWQSbVgj2e/1chFdMRKZdvlmA6p1IPujhpLT7TKNtCSl1B0PGBGvJjCaiBal/twaU2yfk8VKezHWexM8IliBfA==
dependencies:
- "@jest/console" "^25.3.0"
- "@jest/environment" "^25.3.0"
- "@jest/test-result" "^25.3.0"
- "@jest/types" "^25.3.0"
+ "@jest/console" "^25.4.0"
+ "@jest/environment" "^25.4.0"
+ "@jest/test-result" "^25.4.0"
+ "@jest/types" "^25.4.0"
chalk "^3.0.0"
exit "^0.1.2"
graceful-fs "^4.2.3"
- jest-config "^25.3.0"
+ jest-config "^25.4.0"
jest-docblock "^25.3.0"
- jest-haste-map "^25.3.0"
- jest-jasmine2 "^25.3.0"
- jest-leak-detector "^25.3.0"
- jest-message-util "^25.3.0"
- jest-resolve "^25.3.0"
- jest-runtime "^25.3.0"
- jest-util "^25.3.0"
- jest-worker "^25.2.6"
+ jest-haste-map "^25.4.0"
+ jest-jasmine2 "^25.4.0"
+ jest-leak-detector "^25.4.0"
+ jest-message-util "^25.4.0"
+ jest-resolve "^25.4.0"
+ jest-runtime "^25.4.0"
+ jest-util "^25.4.0"
+ jest-worker "^25.4.0"
source-map-support "^0.5.6"
throat "^5.0.0"
-jest-runtime@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-runtime/download/jest-runtime-25.3.0.tgz#af4d40dbcc590fa5de9910cb6a120a13d131050b"
- integrity sha1-r01A28xZD6XemRDLahIKE9ExBQs=
+jest-runtime@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.4.0.tgz#1e5227a9e2159d26ae27dcd426ca6bc041983439"
+ integrity sha512-lgNJlCDULtXu9FumnwCyWlOub8iytijwsPNa30BKrSNtgoT6NUMXOPrZvsH06U6v0wgD/Igwz13nKA2wEKU2VA==
dependencies:
- "@jest/console" "^25.3.0"
- "@jest/environment" "^25.3.0"
+ "@jest/console" "^25.4.0"
+ "@jest/environment" "^25.4.0"
"@jest/source-map" "^25.2.6"
- "@jest/test-result" "^25.3.0"
- "@jest/transform" "^25.3.0"
- "@jest/types" "^25.3.0"
+ "@jest/test-result" "^25.4.0"
+ "@jest/transform" "^25.4.0"
+ "@jest/types" "^25.4.0"
"@types/yargs" "^15.0.0"
chalk "^3.0.0"
collect-v8-coverage "^1.0.0"
exit "^0.1.2"
glob "^7.1.3"
graceful-fs "^4.2.3"
- jest-config "^25.3.0"
- jest-haste-map "^25.3.0"
- jest-message-util "^25.3.0"
- jest-mock "^25.3.0"
+ jest-config "^25.4.0"
+ jest-haste-map "^25.4.0"
+ jest-message-util "^25.4.0"
+ jest-mock "^25.4.0"
jest-regex-util "^25.2.6"
- jest-resolve "^25.3.0"
- jest-snapshot "^25.3.0"
- jest-util "^25.3.0"
- jest-validate "^25.3.0"
+ jest-resolve "^25.4.0"
+ jest-snapshot "^25.4.0"
+ jest-util "^25.4.0"
+ jest-validate "^25.4.0"
realpath-native "^2.0.0"
slash "^3.0.0"
strip-bom "^4.0.0"
@@ -2273,109 +2497,109 @@ jest-runtime@^25.3.0:
jest-serializer@^25.2.6:
version "25.2.6"
- resolved "http://r.cnpmjs.org/jest-serializer/download/jest-serializer-25.2.6.tgz#3bb4cc14fe0d8358489dbbefbb8a4e708ce039b7"
- integrity sha1-O7TMFP4Ng1hInbvvu4pOcIzgObc=
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.2.6.tgz#3bb4cc14fe0d8358489dbbefbb8a4e708ce039b7"
+ integrity sha512-RMVCfZsezQS2Ww4kB5HJTMaMJ0asmC0BHlnobQC6yEtxiFKIxohFA4QSXSabKwSggaNkqxn6Z2VwdFCjhUWuiQ==
-jest-snapshot@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-snapshot/download/jest-snapshot-25.3.0.tgz#d4feb457494f4aaedcc83fbbf1ca21808fc3df71"
- integrity sha1-1P60V0lPSq7cyD+78cohgI/D33E=
+jest-snapshot@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.4.0.tgz#e0b26375e2101413fd2ccb4278a5711b1922545c"
+ integrity sha512-J4CJ0X2SaGheYRZdLz9CRHn9jUknVmlks4UBeu270hPAvdsauFXOhx9SQP2JtRzhnR3cvro/9N9KP83/uvFfRg==
dependencies:
"@babel/types" "^7.0.0"
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
"@types/prettier" "^1.19.0"
chalk "^3.0.0"
- expect "^25.3.0"
- jest-diff "^25.3.0"
+ expect "^25.4.0"
+ jest-diff "^25.4.0"
jest-get-type "^25.2.6"
- jest-matcher-utils "^25.3.0"
- jest-message-util "^25.3.0"
- jest-resolve "^25.3.0"
+ jest-matcher-utils "^25.4.0"
+ jest-message-util "^25.4.0"
+ jest-resolve "^25.4.0"
make-dir "^3.0.0"
natural-compare "^1.4.0"
- pretty-format "^25.3.0"
+ pretty-format "^25.4.0"
semver "^6.3.0"
-jest-util@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-util/download/jest-util-25.3.0.tgz#e3b0064165818f10d78514696fd25efba82cf049"
- integrity sha1-47AGQWWBjxDXhRRpb9Je+6gs8Ek=
+jest-util@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.4.0.tgz#6a093d09d86d2b41ef583e5fe7dd3976346e1acd"
+ integrity sha512-WSZD59sBtAUjLv1hMeKbNZXmMcrLRWcYqpO8Dz8b4CeCTZpfNQw2q9uwrYAD+BbJoLJlu4ezVPwtAmM/9/SlZA==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
chalk "^3.0.0"
is-ci "^2.0.0"
make-dir "^3.0.0"
-jest-validate@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-validate/download/jest-validate-25.3.0.tgz#eb95fdee0039647bcd5d4be641b21e4a142a880c"
- integrity sha1-65X97gA5ZHvNXUvmQbIeShQqiAw=
+jest-validate@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.4.0.tgz#2e177a93b716a137110eaf2768f3d9095abd3f38"
+ integrity sha512-hvjmes/EFVJSoeP1yOl8qR8mAtMR3ToBkZeXrD/ZS9VxRyWDqQ/E1C5ucMTeSmEOGLipvdlyipiGbHJ+R1MQ0g==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
camelcase "^5.3.1"
chalk "^3.0.0"
jest-get-type "^25.2.6"
leven "^3.1.0"
- pretty-format "^25.3.0"
+ pretty-format "^25.4.0"
-jest-watcher@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest-watcher/download/jest-watcher-25.3.0.tgz#fd03fd5ca52f02bd3161ab177466bf1bfdd34e5c"
- integrity sha1-/QP9XKUvAr0xYasXdGa/G/3TTlw=
+jest-watcher@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.4.0.tgz#63ec0cd5c83bb9c9d1ac95be7558dd61c995ff05"
+ integrity sha512-36IUfOSRELsKLB7k25j/wutx0aVuHFN6wO94gPNjQtQqFPa2rkOymmx9rM5EzbF3XBZZ2oqD9xbRVoYa2w86gw==
dependencies:
- "@jest/test-result" "^25.3.0"
- "@jest/types" "^25.3.0"
+ "@jest/test-result" "^25.4.0"
+ "@jest/types" "^25.4.0"
ansi-escapes "^4.2.1"
chalk "^3.0.0"
- jest-util "^25.3.0"
+ jest-util "^25.4.0"
string-length "^3.1.0"
-jest-worker@^25.2.6:
- version "25.2.6"
- resolved "http://r.cnpmjs.org/jest-worker/download/jest-worker-25.2.6.tgz#d1292625326794ce187c38f51109faced3846c58"
- integrity sha1-0SkmJTJnlM4YfDj1EQn6ztOEbFg=
+jest-worker@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.4.0.tgz#ee0e2ceee5a36ecddf5172d6d7e0ab00df157384"
+ integrity sha512-ghAs/1FtfYpMmYQ0AHqxV62XPvKdUDIBBApMZfly+E9JEmYh2K45G0R5dWxx986RN12pRCxsViwQVtGl+N4whw==
dependencies:
merge-stream "^2.0.0"
supports-color "^7.0.0"
jest@^25.2.7:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/jest/download/jest-25.3.0.tgz#7a5e59741d94b8662664c77a9f346246d6bf228b"
- integrity sha1-el5ZdB2UuGYmZMd6nzRiRta/Ios=
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-25.4.0.tgz#fb96892c5c4e4a6b9bcb12068849cddf4c5f8cc7"
+ integrity sha512-XWipOheGB4wai5JfCYXd6vwsWNwM/dirjRoZgAa7H2wd8ODWbli2AiKjqG8AYhyx+8+5FBEdpO92VhGlBydzbw==
dependencies:
- "@jest/core" "^25.3.0"
+ "@jest/core" "^25.4.0"
import-local "^3.0.2"
- jest-cli "^25.3.0"
+ jest-cli "^25.4.0"
js-tokens@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk=
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
js-yaml@^3.13.1:
version "3.13.1"
- resolved "http://r.cnpmjs.org/js-yaml/download/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
- integrity sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
js2xmlparser@^4.0.0:
version "4.0.1"
- resolved "http://r.cnpmjs.org/js2xmlparser/download/js2xmlparser-4.0.1.tgz#670ef71bc5661f089cc90481b99a05a1227ae3bd"
- integrity sha1-Zw73G8VmHwicyQSBuZoFoSJ6470=
+ resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.1.tgz#670ef71bc5661f089cc90481b99a05a1227ae3bd"
+ integrity sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==
dependencies:
xmlcreate "^2.0.3"
jsbn@~0.1.0:
version "0.1.1"
- resolved "http://r.cnpmjs.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
jsdoc@3.6.3:
version "3.6.3"
- resolved "http://r.cnpmjs.org/jsdoc/download/jsdoc-3.6.3.tgz#dccea97d0e62d63d306b8b3ed1527173b5e2190d"
- integrity sha1-3M6pfQ5i1j0wa4s+0VJxc7XiGQ0=
+ resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.6.3.tgz#dccea97d0e62d63d306b8b3ed1527173b5e2190d"
+ integrity sha512-Yf1ZKA3r9nvtMWHO1kEuMZTlHOF8uoQ0vyo5eH7SQy5YeIiHM+B0DgKnn+X6y6KDYZcF7G2SPkKF+JORCXWE/A==
dependencies:
"@babel/parser" "^7.4.4"
bluebird "^3.5.4"
@@ -2394,8 +2618,8 @@ jsdoc@3.6.3:
jsdom@^15.2.1:
version "15.2.1"
- resolved "http://r.cnpmjs.org/jsdom/download/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5"
- integrity sha1-0v6xrvcYP4a+UhuMaDP/UpbQfsU=
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5"
+ integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==
dependencies:
abab "^2.0.0"
acorn "^7.1.0"
@@ -2426,8 +2650,8 @@ jsdom@^15.2.1:
jsdom@^16.2.2:
version "16.2.2"
- resolved "http://r.cnpmjs.org/jsdom/download/jsdom-16.2.2.tgz#76f2f7541646beb46a938f5dc476b88705bedf2b"
- integrity sha1-dvL3VBZGvrRqk49dxHa4hwW+3ys=
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.2.2.tgz#76f2f7541646beb46a938f5dc476b88705bedf2b"
+ integrity sha512-pDFQbcYtKBHxRaP55zGXCJWgFHkDAYbKcsXEK/3Icu9nKYZkutUXfLBwbD+09XDutkYSHcgfQLZ0qvpAAm9mvg==
dependencies:
abab "^2.0.3"
acorn "^7.1.1"
@@ -2458,39 +2682,39 @@ jsdom@^16.2.2:
jsesc@^2.5.1:
version "2.5.2"
- resolved "http://r.cnpmjs.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
- integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
json-parse-better-errors@^1.0.1:
version "1.0.2"
- resolved "http://r.cnpmjs.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
json-schema-traverse@^0.4.1:
version "0.4.1"
- resolved "http://r.cnpmjs.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA=
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
json-schema@0.2.3:
version "0.2.3"
- resolved "http://r.cnpmjs.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
json-stringify-safe@~5.0.1:
version "5.0.1"
- resolved "http://r.cnpmjs.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
json5@2.x, json5@^2.1.2:
version "2.1.3"
- resolved "http://r.cnpmjs.org/json5/download/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
- integrity sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM=
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
+ integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
dependencies:
minimist "^1.2.5"
jsprim@^1.2.2:
version "1.4.1"
- resolved "http://r.cnpmjs.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
dependencies:
assert-plus "1.0.0"
@@ -2500,53 +2724,53 @@ jsprim@^1.2.2:
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
- resolved "http://r.cnpmjs.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
dependencies:
is-buffer "^1.1.5"
kind-of@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
dependencies:
is-buffer "^1.1.5"
kind-of@^5.0.0:
version "5.1.0"
- resolved "http://r.cnpmjs.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
- integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
kind-of@^6.0.0, kind-of@^6.0.2:
version "6.0.3"
- resolved "http://r.cnpmjs.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
klaw@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/klaw/download/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146"
- integrity sha1-sRvsnPJJLwZ1bW6Amrc6KRAlkUY=
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146"
+ integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==
dependencies:
graceful-fs "^4.1.9"
kleur@^3.0.3:
version "3.0.3"
- resolved "http://r.cnpmjs.org/kleur/download/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
- integrity sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4=
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
lcov-parse@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/lcov-parse/download/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0"
+ resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0"
integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A=
leven@^3.1.0:
version "3.1.0"
- resolved "http://r.cnpmjs.org/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
- integrity sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
levn@~0.3.0:
version "0.3.0"
- resolved "http://r.cnpmjs.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
dependencies:
prelude-ls "~1.1.2"
@@ -2554,90 +2778,90 @@ levn@~0.3.0:
lines-and-columns@^1.1.6:
version "1.1.6"
- resolved "http://r.cnpmjs.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
linkify-it@^2.0.0:
version "2.2.0"
- resolved "http://r.cnpmjs.org/linkify-it/download/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf"
- integrity sha1-47VGl+eL+RXHCjis14/QngBYsc8=
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf"
+ integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==
dependencies:
uc.micro "^1.0.1"
locate-path@^5.0.0:
version "5.0.0"
- resolved "http://r.cnpmjs.org/locate-path/download/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
- integrity sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
dependencies:
p-locate "^4.1.0"
lodash.memoize@4.x:
version "4.1.2"
- resolved "http://r.cnpmjs.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
lodash.sortby@^4.7.0:
version "4.7.0"
- resolved "http://r.cnpmjs.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15:
version "4.17.15"
- resolved "http://r.cnpmjs.org/lodash/download/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
- integrity sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
log-driver@^1.2.7:
version "1.2.7"
- resolved "http://r.cnpmjs.org/log-driver/download/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"
- integrity sha1-Y7lQIfBwL+36LJuwok53l9cYcdg=
+ resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"
+ integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==
lolex@^5.0.0:
version "5.1.2"
- resolved "http://r.cnpmjs.org/lolex/download/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367"
- integrity sha1-lTaU0JjOfAe8XtbQ5CvGwMbVo2c=
+ resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367"
+ integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==
dependencies:
"@sinonjs/commons" "^1.7.0"
make-dir@^3.0.0:
- version "3.0.2"
- resolved "http://r.cnpmjs.org/make-dir/download/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392"
- integrity sha1-BKGsvyIiHh1u9DVZ9D4FqQ27Q5I=
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
dependencies:
semver "^6.0.0"
make-error@1.x:
version "1.3.6"
- resolved "http://r.cnpmjs.org/make-error/download/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
- integrity sha1-LrLjfqm2fEiR9oShOUeZr0hM96I=
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
makeerror@1.0.x:
version "1.0.11"
- resolved "http://r.cnpmjs.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
dependencies:
tmpl "1.0.x"
map-cache@^0.2.2:
version "0.2.2"
- resolved "http://r.cnpmjs.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
map-visit@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
dependencies:
object-visit "^1.0.0"
markdown-it-anchor@^5.0.2:
version "5.2.7"
- resolved "http://r.cnpmjs.org/markdown-it-anchor/download/markdown-it-anchor-5.2.7.tgz#ec740f6bd03258a582cd0c65b9644b9f9852e5a3"
- integrity sha1-7HQPa9AyWKWCzQxluWRLn5hS5aM=
+ resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.2.7.tgz#ec740f6bd03258a582cd0c65b9644b9f9852e5a3"
+ integrity sha512-REFmIaSS6szaD1bye80DMbp7ePwsPNvLTR5HunsUcZ0SG0rWJQ+Pz24R4UlTKtjKBPhxo0v0tOBDYjZQQknW8Q==
markdown-it@^8.4.2:
version "8.4.2"
- resolved "http://r.cnpmjs.org/markdown-it/download/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54"
- integrity sha1-OG+YmY3BWjdyKqdyIIT0Agvdm1Q=
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54"
+ integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==
dependencies:
argparse "^1.0.7"
entities "~1.1.1"
@@ -2647,31 +2871,31 @@ markdown-it@^8.4.2:
marked@^0.7.0:
version "0.7.0"
- resolved "http://r.cnpmjs.org/marked/download/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e"
- integrity sha1-tkIB8FHScbHtwQoE0a6bdLuOXA4=
+ resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e"
+ integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==
mdurl@^1.0.1:
version "1.0.1"
- resolved "http://r.cnpmjs.org/mdurl/download/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
merge-stream@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
- integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
micromatch@4.x, micromatch@^4.0.2:
version "4.0.2"
- resolved "http://r.cnpmjs.org/micromatch/download/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
- integrity sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk=
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
dependencies:
braces "^3.0.1"
picomatch "^2.0.5"
micromatch@^3.1.4:
version "3.1.10"
- resolved "http://r.cnpmjs.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
- integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM=
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
dependencies:
arr-diff "^4.0.0"
array-unique "^0.3.2"
@@ -2687,76 +2911,106 @@ micromatch@^3.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.2"
-mime-db@1.43.0:
- version "1.43.0"
- resolved "http://r.cnpmjs.org/mime-db/download/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
- integrity sha1-ChLgUCZQ5HPXNVNQUOfI9OtPrlg=
+mime-db@1.44.0:
+ version "1.44.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
+ integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
mime-types@^2.1.12, mime-types@~2.1.19:
- version "2.1.26"
- resolved "http://r.cnpmjs.org/mime-types/download/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
- integrity sha1-nJIfwJt+FJpl39wNpNIJlyALCgY=
+ version "2.1.27"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
+ integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
dependencies:
- mime-db "1.43.0"
+ mime-db "1.44.0"
mimic-fn@^2.1.0:
version "2.1.0"
- resolved "http://r.cnpmjs.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
+ integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
minimatch@^3.0.4:
version "3.0.4"
- resolved "http://r.cnpmjs.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
dependencies:
brace-expansion "^1.1.7"
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
- resolved "http://r.cnpmjs.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
- integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
+ integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.2.1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
+ integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
+ dependencies:
+ minipass "^2.9.0"
mixin-deep@^1.2.0:
version "1.3.2"
- resolved "http://r.cnpmjs.org/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
- integrity sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
dependencies:
for-in "^1.0.2"
is-extendable "^1.0.1"
+mkdirp-classic@^0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b"
+ integrity sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==
+
mkdirp@0.5.3:
version "0.5.3"
- resolved "http://r.cnpmjs.org/mkdirp/download/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c"
- integrity sha1-WlFLcXklkoeVKIHpRBDsVGVln4w=
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c"
+ integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==
dependencies:
minimist "^1.2.5"
mkdirp@1.x:
version "1.0.4"
- resolved "http://r.cnpmjs.org/mkdirp/download/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha1-PrXtYmInVteaXw4qIh3+utdcL34=
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-mkdirp@^0.5.1, mkdirp@^0.5.3:
+mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3:
version "0.5.5"
- resolved "http://r.cnpmjs.org/mkdirp/download/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
- integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"
ms@2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
ms@^2.1.1:
version "2.1.2"
- resolved "http://r.cnpmjs.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+nan@^2.14.0:
+ version "2.14.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
+ integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
nanomatch@^1.2.9:
version "1.2.13"
- resolved "http://r.cnpmjs.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
- integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
dependencies:
arr-diff "^4.0.0"
array-unique "^0.3.2"
@@ -2770,35 +3024,64 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+napi-build-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
+ integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
+
natural-compare@^1.4.0:
version "1.4.0"
- resolved "http://r.cnpmjs.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
nice-try@^1.0.4:
version "1.0.5"
- resolved "http://r.cnpmjs.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
- integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+node-abi@^2.7.0:
+ version "2.16.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.16.0.tgz#7df94e9c0a7a189f4197ab84bac8089ef5894992"
+ integrity sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA==
+ dependencies:
+ semver "^5.4.1"
node-getopt@^0.3.2:
version "0.3.2"
- resolved "http://r.cnpmjs.org/node-getopt/download/node-getopt-0.3.2.tgz#57507cd22f6f69650aa99252304a842f1224e44c"
- integrity sha1-V1B80i9vaWUKqZJSMEqELxIk5Ew=
+ resolved "https://registry.yarnpkg.com/node-getopt/-/node-getopt-0.3.2.tgz#57507cd22f6f69650aa99252304a842f1224e44c"
+ integrity sha512-yqkmYrMbK1wPrfz7mgeYvA4tBperLg9FQ4S3Sau3nSAkpOA0x0zC8nQ1siBwozy1f4SE8vq2n1WKv99r+PCa1Q==
+
+node-gyp@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-6.1.0.tgz#64e31c61a4695ad304c1d5b82cf6b7c79cc79f3f"
+ integrity sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==
+ dependencies:
+ env-paths "^2.2.0"
+ glob "^7.1.4"
+ graceful-fs "^4.2.2"
+ mkdirp "^0.5.1"
+ nopt "^4.0.1"
+ npmlog "^4.1.2"
+ request "^2.88.0"
+ rimraf "^2.6.3"
+ semver "^5.7.1"
+ tar "^4.4.12"
+ which "^1.3.1"
node-int64@^0.4.0:
version "0.4.0"
- resolved "http://r.cnpmjs.org/node-int64/download/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
node-modules-regexp@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/node-modules-regexp/download/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
node-notifier@^6.0.0:
version "6.0.0"
- resolved "http://r.cnpmjs.org/node-notifier/download/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12"
- integrity sha1-zqMZ4GuqFt7sjOXNfxM8Ska2jhI=
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12"
+ integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==
dependencies:
growly "^1.3.0"
is-wsl "^2.1.1"
@@ -2806,45 +3089,88 @@ node-notifier@^6.0.0:
shellwords "^0.1.1"
which "^1.3.1"
+noop-logger@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
+ integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
+
+nopt@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
+ integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
normalize-path@^2.1.1:
version "2.1.1"
- resolved "http://r.cnpmjs.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
dependencies:
remove-trailing-separator "^1.0.1"
normalize-path@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
npm-run-path@^2.0.0:
version "2.0.2"
- resolved "http://r.cnpmjs.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
dependencies:
path-key "^2.0.0"
npm-run-path@^4.0.0:
version "4.0.1"
- resolved "http://r.cnpmjs.org/npm-run-path/download/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
- integrity sha1-t+zR5e1T2o43pV4cImnguX7XSOo=
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
dependencies:
path-key "^3.0.0"
+npmlog@^4.0.1, npmlog@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
nwsapi@^2.2.0:
version "2.2.0"
- resolved "http://r.cnpmjs.org/nwsapi/download/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
- integrity sha1-IEh5qePQaP8qVROcLHcngGgaOLc=
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
oauth-sign@~0.9.0:
version "0.9.0"
- resolved "http://r.cnpmjs.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
- integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
object-copy@^0.1.0:
version "0.1.0"
- resolved "http://r.cnpmjs.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
dependencies:
copy-descriptor "^0.1.0"
@@ -2853,41 +3179,41 @@ object-copy@^0.1.0:
object-visit@^1.0.0:
version "1.0.1"
- resolved "http://r.cnpmjs.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
dependencies:
isobject "^3.0.0"
object.pick@^1.3.0:
version "1.3.0"
- resolved "http://r.cnpmjs.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
dependencies:
isobject "^3.0.1"
once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
- resolved "http://r.cnpmjs.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
onetime@^5.1.0:
version "5.1.0"
- resolved "http://r.cnpmjs.org/onetime/download/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
- integrity sha1-//DzyRYX/mK7UBiWNumayKbfe+U=
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+ integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
dependencies:
mimic-fn "^2.1.0"
opencollective-postinstall@^2.0.2:
version "2.0.2"
- resolved "http://r.cnpmjs.org/opencollective-postinstall/download/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
- integrity sha1-Vlfxvt5ptuM6RZObBh61PTxsOok=
+ resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
+ integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
optionator@^0.8.1:
version "0.8.3"
- resolved "http://r.cnpmjs.org/optionator/download/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
- integrity sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
dependencies:
deep-is "~0.1.3"
fast-levenshtein "~2.0.6"
@@ -2896,51 +3222,69 @@ optionator@^0.8.1:
type-check "~0.3.2"
word-wrap "~1.2.3"
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
p-each-series@^2.1.0:
version "2.1.0"
- resolved "http://r.cnpmjs.org/p-each-series/download/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48"
- integrity sha1-lhyN0/GV6pbHR+Y2smK4AKaxr0g=
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48"
+ integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==
p-finally@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
p-finally@^2.0.0:
version "2.0.1"
- resolved "http://r.cnpmjs.org/p-finally/download/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
- integrity sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
+ integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
p-limit@^2.2.0:
version "2.3.0"
- resolved "http://r.cnpmjs.org/p-limit/download/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
dependencies:
p-try "^2.0.0"
p-locate@^4.1.0:
version "4.1.0"
- resolved "http://r.cnpmjs.org/p-locate/download/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
- integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc=
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
dependencies:
p-limit "^2.2.0"
p-try@^2.0.0:
version "2.2.0"
- resolved "http://r.cnpmjs.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
parent-module@^1.0.0:
version "1.0.1"
- resolved "http://r.cnpmjs.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
- integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
dependencies:
callsites "^3.0.0"
parse-json@^5.0.0:
version "5.0.0"
- resolved "http://r.cnpmjs.org/parse-json/download/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
- integrity sha1-c+URTJhtFD76NxLU6iTbmkJm9g8=
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
+ integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
dependencies:
"@babel/code-frame" "^7.0.0"
error-ex "^1.3.1"
@@ -2949,190 +3293,277 @@ parse-json@^5.0.0:
parse5@5.1.0:
version "5.1.0"
- resolved "http://r.cnpmjs.org/parse5/download/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
- integrity sha1-xZNByXI/QUxFKXVWTHwApo1YrNI=
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
+ integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
parse5@5.1.1:
version "5.1.1"
- resolved "http://r.cnpmjs.org/parse5/download/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
- integrity sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
pascalcase@^0.1.1:
version "0.1.1"
- resolved "http://r.cnpmjs.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
path-exists@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
- integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
path-is-absolute@^1.0.0:
version "1.0.1"
- resolved "http://r.cnpmjs.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
path-key@^2.0.0, path-key@^2.0.1:
version "2.0.1"
- resolved "http://r.cnpmjs.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
- resolved "http://r.cnpmjs.org/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
- integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
path-parse@^1.0.6:
version "1.0.6"
- resolved "http://r.cnpmjs.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
- integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
path-type@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
- integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
performance-now@^2.1.0:
version "2.1.0"
- resolved "http://r.cnpmjs.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
picomatch@^2.0.4, picomatch@^2.0.5:
version "2.2.2"
- resolved "http://r.cnpmjs.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
- integrity sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
+ integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
pirates@^4.0.1:
version "4.0.1"
- resolved "http://r.cnpmjs.org/pirates/download/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
- integrity sha1-ZDqSyviUVm+RsrmG0sZpUKji+4c=
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
dependencies:
node-modules-regexp "^1.0.0"
pkg-dir@^4.2.0:
version "4.2.0"
- resolved "http://r.cnpmjs.org/pkg-dir/download/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
- integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
dependencies:
find-up "^4.0.0"
please-upgrade-node@^3.2.0:
version "3.2.0"
- resolved "http://r.cnpmjs.org/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
- integrity sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI=
+ resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
+ integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
dependencies:
semver-compare "^1.0.0"
pn@^1.1.0:
version "1.1.0"
- resolved "http://r.cnpmjs.org/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
- integrity sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
posix-character-classes@^0.1.0:
version "0.1.1"
- resolved "http://r.cnpmjs.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+prebuild-install@^5.1.0:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e"
+ integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==
+ dependencies:
+ detect-libc "^1.0.3"
+ expand-template "^2.0.3"
+ github-from-package "0.0.0"
+ minimist "^1.2.0"
+ mkdirp "^0.5.1"
+ napi-build-utils "^1.0.1"
+ node-abi "^2.7.0"
+ noop-logger "^0.1.1"
+ npmlog "^4.0.1"
+ pump "^3.0.0"
+ rc "^1.2.7"
+ simple-get "^3.0.3"
+ tar-fs "^2.0.0"
+ tunnel-agent "^0.6.0"
+ which-pm-runs "^1.0.0"
+
prelude-ls@~1.1.2:
version "1.1.2"
- resolved "http://r.cnpmjs.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
prettier@^1.19.1:
version "1.19.1"
- resolved "http://r.cnpmjs.org/prettier/download/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
- integrity sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
+ integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
-pretty-format@^25.2.1, pretty-format@^25.3.0:
- version "25.3.0"
- resolved "http://r.cnpmjs.org/pretty-format/download/pretty-format-25.3.0.tgz#d0a4f988ff4a6cd350342fdabbb809aeb4d49ad5"
- integrity sha1-0KT5iP9KbNNQNC/au7gJrrTUmtU=
+pretty-format@^25.2.1, pretty-format@^25.4.0:
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.4.0.tgz#c58801bb5c4926ff4a677fe43f9b8b99812c7830"
+ integrity sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==
dependencies:
- "@jest/types" "^25.3.0"
+ "@jest/types" "^25.4.0"
ansi-regex "^5.0.0"
ansi-styles "^4.0.0"
react-is "^16.12.0"
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
prompts@^2.0.1:
version "2.3.2"
- resolved "http://r.cnpmjs.org/prompts/download/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
- integrity sha1-SAVy2J7POVZtK9P+LJ/Mt8TAsGg=
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
+ integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==
dependencies:
kleur "^3.0.3"
sisteransi "^1.0.4"
psl@^1.1.28:
version "1.8.0"
- resolved "http://r.cnpmjs.org/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
- integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
pump@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
- resolved "http://r.cnpmjs.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
- integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew=
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
qs@~6.5.2:
version "6.5.2"
- resolved "http://r.cnpmjs.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
- integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
react-is@^16.12.0:
version "16.13.1"
- resolved "http://r.cnpmjs.org/react-is/download/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
- integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ=
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+read-pkg-up@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
+ dependencies:
+ find-up "^4.1.0"
+ read-pkg "^5.2.0"
+ type-fest "^0.8.1"
+
+read-pkg@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
+
+"readable-stream@>=1.0.33-1 <1.1.0-0":
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^2.0.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.1.1, readable-stream@^3.4.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
realpath-native@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/realpath-native/download/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866"
- integrity sha1-c3esQptuH9WZ3DjQjtlC0Ne+uGY=
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866"
+ integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==
regenerator-runtime@^0.13.4:
version "0.13.5"
- resolved "http://r.cnpmjs.org/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
- integrity sha1-2Hih0JS0MG0QuQlkhLM+vVXiZpc=
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
+ integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
regex-not@^1.0.0, regex-not@^1.0.2:
version "1.0.2"
- resolved "http://r.cnpmjs.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
- integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
dependencies:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
remove-trailing-separator@^1.0.1:
version "1.1.0"
- resolved "http://r.cnpmjs.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
repeat-element@^1.1.2:
version "1.1.3"
- resolved "http://r.cnpmjs.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
- integrity sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
repeat-string@^1.6.1:
version "1.6.1"
- resolved "http://r.cnpmjs.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
request-promise-core@1.1.3:
version "1.1.3"
- resolved "http://r.cnpmjs.org/request-promise-core/download/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9"
- integrity sha1-6aPAgbUTgN/qZ3M2Bh/qh5qCnuk=
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9"
+ integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==
dependencies:
lodash "^4.17.15"
request-promise-native@^1.0.7, request-promise-native@^1.0.8:
version "1.0.8"
- resolved "http://r.cnpmjs.org/request-promise-native/download/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36"
- integrity sha1-pFW5YLgm5E4r+Jma9k3/K/5YyzY=
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36"
+ integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==
dependencies:
request-promise-core "1.1.3"
stealthy-require "^1.1.1"
@@ -3140,8 +3571,8 @@ request-promise-native@^1.0.7, request-promise-native@^1.0.8:
request@^2.88.0, request@^2.88.2:
version "2.88.2"
- resolved "http://r.cnpmjs.org/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
- integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
dependencies:
aws-sign2 "~0.7.0"
aws4 "^1.8.0"
@@ -3166,98 +3597,105 @@ request@^2.88.0, request@^2.88.2:
require-directory@^2.1.1:
version "2.1.1"
- resolved "http://r.cnpmjs.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
require-main-filename@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
- integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
requizzle@^0.2.3:
version "0.2.3"
- resolved "http://r.cnpmjs.org/requizzle/download/requizzle-0.2.3.tgz#4675c90aacafb2c036bd39ba2daa4a1cb777fded"
- integrity sha1-RnXJCqyvssA2vTm6LapKHLd3/e0=
+ resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.3.tgz#4675c90aacafb2c036bd39ba2daa4a1cb777fded"
+ integrity sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==
dependencies:
lodash "^4.17.14"
resolve-cwd@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/resolve-cwd/download/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
- integrity sha1-DwB18bslRHZs9zumpuKt/ryxPy0=
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
dependencies:
resolve-from "^5.0.0"
resolve-from@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
- integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
resolve-from@^5.0.0:
version "5.0.0"
- resolved "http://r.cnpmjs.org/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
- integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
resolve-url@^0.2.1:
version "0.2.1"
- resolved "http://r.cnpmjs.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
resolve@1.1.7:
version "1.1.7"
- resolved "http://r.cnpmjs.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-resolve@1.x, resolve@^1.15.1, resolve@^1.3.2:
- version "1.15.1"
- resolved "http://r.cnpmjs.org/resolve/download/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
- integrity sha1-J73N7/6vLWJEuVuw+fS0ZTRR8+g=
+resolve@1.x, resolve@^1.10.0, resolve@^1.15.1, resolve@^1.3.2:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
+ integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
dependencies:
path-parse "^1.0.6"
ret@~0.1.10:
version "0.1.15"
- resolved "http://r.cnpmjs.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
- integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
rimraf@^3.0.0:
version "3.0.2"
- resolved "http://r.cnpmjs.org/rimraf/download/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
dependencies:
glob "^7.1.3"
rsvp@^4.8.4:
version "4.8.5"
- resolved "http://r.cnpmjs.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
- integrity sha1-yPFVMR0Wf2jyHhaN9x7FsIMRNzQ=
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
-safe-buffer@^5.0.1, safe-buffer@^5.1.2:
+safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
version "5.2.0"
- resolved "http://r.cnpmjs.org/safe-buffer/download/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
- integrity sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk=
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
-safe-buffer@~5.1.1:
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
- resolved "http://r.cnpmjs.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0=
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-regex@^1.1.0:
version "1.1.0"
- resolved "http://r.cnpmjs.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
dependencies:
ret "~0.1.10"
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
- resolved "http://r.cnpmjs.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sane@^4.0.3:
version "4.1.0"
- resolved "http://r.cnpmjs.org/sane/download/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
- integrity sha1-7Ygf2SJzOmxGG8GJ3CtsAG8//e0=
+ resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
+ integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
dependencies:
"@cnakazawa/watch" "^1.0.3"
anymatch "^2.0.0"
@@ -3271,47 +3709,47 @@ sane@^4.0.3:
saxes@^3.1.9:
version "3.1.11"
- resolved "http://r.cnpmjs.org/saxes/download/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b"
- integrity sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs=
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b"
+ integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==
dependencies:
xmlchars "^2.1.1"
saxes@^5.0.0:
version "5.0.1"
- resolved "http://r.cnpmjs.org/saxes/download/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
- integrity sha1-7rq5U/o7dgjb6U5drbFciI+maW0=
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+ integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
dependencies:
xmlchars "^2.2.0"
semver-compare@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/semver-compare/download/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
semver-regex@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/semver-regex/download/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
- integrity sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg=
+ resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
+ integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.7.1:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
semver@6.x, semver@^6.0.0, semver@^6.3.0:
version "6.3.0"
- resolved "http://r.cnpmjs.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=
-
-semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
- version "5.7.1"
- resolved "http://r.cnpmjs.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
- integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-set-blocking@^2.0.0:
+set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
set-value@^2.0.0, set-value@^2.0.1:
version "2.0.1"
- resolved "http://r.cnpmjs.org/set-value/download/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
- integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
dependencies:
extend-shallow "^2.0.1"
is-extendable "^0.1.1"
@@ -3320,52 +3758,66 @@ set-value@^2.0.0, set-value@^2.0.1:
shebang-command@^1.2.0:
version "1.2.0"
- resolved "http://r.cnpmjs.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
dependencies:
shebang-regex "^1.0.0"
shebang-command@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
- integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
dependencies:
shebang-regex "^3.0.0"
shebang-regex@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
shebang-regex@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
- integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
shellwords@^0.1.1:
version "0.1.1"
- resolved "http://r.cnpmjs.org/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
- integrity sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.3"
- resolved "http://r.cnpmjs.org/signal-exit/download/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
- integrity sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+simple-concat@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
+ integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
+
+simple-get@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
+ integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
+ dependencies:
+ decompress-response "^4.2.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
sisteransi@^1.0.4:
version "1.0.5"
- resolved "http://r.cnpmjs.org/sisteransi/download/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
- integrity sha1-E01oEpd1ZDfMBcoBNw06elcQde0=
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
slash@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
- integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
snapdragon-node@^2.0.1:
version "2.1.1"
- resolved "http://r.cnpmjs.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
- integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
dependencies:
define-property "^1.0.0"
isobject "^3.0.0"
@@ -3373,15 +3825,15 @@ snapdragon-node@^2.0.1:
snapdragon-util@^3.0.1:
version "3.0.1"
- resolved "http://r.cnpmjs.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
- integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
dependencies:
kind-of "^3.2.0"
snapdragon@^0.8.1:
version "0.8.2"
- resolved "http://r.cnpmjs.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
- integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
dependencies:
base "^0.11.1"
debug "^2.2.0"
@@ -3394,8 +3846,8 @@ snapdragon@^0.8.1:
source-map-resolve@^0.5.0:
version "0.5.3"
- resolved "http://r.cnpmjs.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
- integrity sha1-GQhmvs51U+H48mei7oLGBrVQmho=
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
dependencies:
atob "^2.1.2"
decode-uri-component "^0.2.0"
@@ -3404,49 +3856,75 @@ source-map-resolve@^0.5.0:
urix "^0.1.0"
source-map-support@^0.5.6:
- version "0.5.16"
- resolved "http://r.cnpmjs.org/source-map-support/download/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
- integrity sha1-CuBp5/47p1OMZMmFFeNTOerFoEI=
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
source-map-url@^0.4.0:
version "0.4.0"
- resolved "http://r.cnpmjs.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
source-map@^0.5.0, source-map@^0.5.6:
version "0.5.7"
- resolved "http://r.cnpmjs.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1"
- resolved "http://r.cnpmjs.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM=
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
source-map@^0.7.3:
version "0.7.3"
- resolved "http://r.cnpmjs.org/source-map/download/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
- integrity sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+spdx-correct@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+ integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
split-string@^3.0.1, split-string@^3.0.2:
version "3.1.0"
- resolved "http://r.cnpmjs.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
- integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
dependencies:
extend-shallow "^3.0.0"
sprintf-js@~1.0.2:
version "1.0.3"
- resolved "http://r.cnpmjs.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
sshpk@^1.7.0:
version "1.16.1"
- resolved "http://r.cnpmjs.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
- integrity sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
@@ -3460,12 +3938,12 @@ sshpk@^1.7.0:
stack-utils@^1.0.1:
version "1.0.2"
- resolved "http://r.cnpmjs.org/stack-utils/download/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
- integrity sha1-M+ujiXeIVYvr/C2wWdwVjsNs67g=
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
+ integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
static-extend@^0.1.1:
version "0.1.2"
- resolved "http://r.cnpmjs.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
dependencies:
define-property "^0.2.5"
@@ -3473,111 +3951,193 @@ static-extend@^0.1.1:
stealthy-require@^1.1.1:
version "1.1.1"
- resolved "http://r.cnpmjs.org/stealthy-require/download/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
string-length@^3.1.0:
version "3.1.0"
- resolved "http://r.cnpmjs.org/string-length/download/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"
- integrity sha1-EH74wjRW4Yeoq9SmEWL/SsbiWDc=
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"
+ integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==
dependencies:
astral-regex "^1.0.0"
strip-ansi "^5.2.0"
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
string-width@^4.1.0, string-width@^4.2.0:
version "4.2.0"
- resolved "http://r.cnpmjs.org/string-width/download/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
- integrity sha1-lSGCxGzHssMT0VluYjmSvRY7crU=
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
dependencies:
emoji-regex "^8.0.0"
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.0"
-strip-ansi@3.0.1:
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
- resolved "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
strip-ansi@^5.2.0:
version "5.2.0"
- resolved "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
- integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
dependencies:
ansi-regex "^4.1.0"
strip-ansi@^6.0.0:
version "6.0.0"
- resolved "http://r.cnpmjs.org/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
- integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
dependencies:
ansi-regex "^5.0.0"
strip-bom@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/strip-bom/download/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
- integrity sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg=
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
strip-eof@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
strip-final-newline@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
- integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
strip-json-comments@^3.0.1:
version "3.1.0"
- resolved "http://r.cnpmjs.org/strip-json-comments/download/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
- integrity sha1-djjTFCISns9EV0QACfugP5+awYA=
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
+ integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
supports-color@^5.3.0:
version "5.5.0"
- resolved "http://r.cnpmjs.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
has-flag "^3.0.0"
supports-color@^7.0.0, supports-color@^7.1.0:
version "7.1.0"
- resolved "http://r.cnpmjs.org/supports-color/download/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
- integrity sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
+ integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
dependencies:
has-flag "^4.0.0"
supports-hyperlinks@^2.0.0:
version "2.1.0"
- resolved "http://r.cnpmjs.org/supports-hyperlinks/download/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47"
- integrity sha1-9mPfJSr183xdSbvX7u+p4Lnlnkc=
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47"
+ integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==
dependencies:
has-flag "^4.0.0"
supports-color "^7.0.0"
symbol-tree@^3.2.2, symbol-tree@^3.2.4:
version "3.2.4"
- resolved "http://r.cnpmjs.org/symbol-tree/download/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
- integrity sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
taffydb@2.6.2:
version "2.6.2"
- resolved "http://r.cnpmjs.org/taffydb/download/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268"
+ resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268"
integrity sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=
+tar-fs@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2"
+ integrity sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp-classic "^0.5.2"
+ pump "^3.0.0"
+ tar-stream "^2.0.0"
+
+tar-stream@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325"
+ integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==
+ dependencies:
+ bl "^4.0.1"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+tar@^4.4.12:
+ version "4.4.13"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
+ integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.8.6"
+ minizlib "^1.2.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.3"
+
terminal-link@^2.0.0:
version "2.1.1"
- resolved "http://r.cnpmjs.org/terminal-link/download/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
- integrity sha1-FKZKJ6s8Dfkz6lRvulXy0HjtyZQ=
+ resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
dependencies:
ansi-escapes "^4.2.1"
supports-hyperlinks "^2.0.0"
test-exclude@^6.0.0:
version "6.0.0"
- resolved "http://r.cnpmjs.org/test-exclude/download/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
- integrity sha1-BKhphmHYBepvopO2y55jrARO8V4=
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
dependencies:
"@istanbuljs/schema" "^0.1.2"
glob "^7.1.4"
@@ -3585,29 +4145,37 @@ test-exclude@^6.0.0:
throat@^5.0.0:
version "5.0.0"
- resolved "http://r.cnpmjs.org/throat/download/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
- integrity sha1-xRmSNYA6rRh1SmZ9ZZtecs4Wdks=
+ resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
+ integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
+
+through2@^0.6.3:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
+ integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=
+ dependencies:
+ readable-stream ">=1.0.33-1 <1.1.0-0"
+ xtend ">=4.0.0 <4.1.0-0"
tmpl@1.0.x:
version "1.0.4"
- resolved "http://r.cnpmjs.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
to-fast-properties@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
to-object-path@^0.3.0:
version "0.3.0"
- resolved "http://r.cnpmjs.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
dependencies:
kind-of "^3.0.2"
to-regex-range@^2.1.0:
version "2.1.1"
- resolved "http://r.cnpmjs.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
dependencies:
is-number "^3.0.0"
@@ -3615,15 +4183,15 @@ to-regex-range@^2.1.0:
to-regex-range@^5.0.1:
version "5.0.1"
- resolved "http://r.cnpmjs.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
is-number "^7.0.0"
to-regex@^3.0.1, to-regex@^3.0.2:
version "3.0.2"
- resolved "http://r.cnpmjs.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
- integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
dependencies:
define-property "^2.0.2"
extend-shallow "^3.0.2"
@@ -3632,16 +4200,16 @@ to-regex@^3.0.1, to-regex@^3.0.2:
tough-cookie@^2.3.3, tough-cookie@~2.5.0:
version "2.5.0"
- resolved "http://r.cnpmjs.org/tough-cookie/download/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
- integrity sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
dependencies:
psl "^1.1.28"
punycode "^2.1.1"
tough-cookie@^3.0.1:
version "3.0.1"
- resolved "http://r.cnpmjs.org/tough-cookie/download/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
- integrity sha1-nfT1fnOcJpMKAYGEiH9K233Kc7I=
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
+ integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
dependencies:
ip-regex "^2.1.0"
psl "^1.1.28"
@@ -3649,22 +4217,22 @@ tough-cookie@^3.0.1:
tr46@^1.0.1:
version "1.0.1"
- resolved "http://r.cnpmjs.org/tr46/download/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
dependencies:
punycode "^2.1.0"
tr46@^2.0.0:
version "2.0.2"
- resolved "http://r.cnpmjs.org/tr46/download/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479"
- integrity sha1-Ayc1ht7xWVrgj+2zjXczzukdJHk=
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479"
+ integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==
dependencies:
punycode "^2.1.1"
ts-jest@^25.3.1:
- version "25.3.1"
- resolved "http://r.cnpmjs.org/ts-jest/download/ts-jest-25.3.1.tgz#58e2ed3506e4e4487c0b9b532846a5cade9656ba"
- integrity sha1-WOLtNQbk5Eh8C5tTKEalyt6WVro=
+ version "25.4.0"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.4.0.tgz#5ad504299f8541d463a52e93e5e9d76876be0ba4"
+ integrity sha512-+0ZrksdaquxGUBwSdTIcdX7VXdwLIlSRsyjivVA9gcO+Cvr6ByqDhu/mi5+HCcb6cMkiQp5xZ8qRO7/eCqLeyw==
dependencies:
bs-logger "0.x"
buffer-from "1.x"
@@ -3680,13 +4248,13 @@ ts-jest@^25.3.1:
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.2:
version "1.11.1"
- resolved "http://r.cnpmjs.org/tslib/download/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
- integrity sha1-6xXRKIJ/vuKEFUnhcfRe0zisfjU=
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
+ integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
tslint@^6.0.0:
version "6.1.1"
- resolved "http://r.cnpmjs.org/tslint/download/tslint-6.1.1.tgz#ac03fbd17f85bfefaae348b353b25a88efe10cde"
- integrity sha1-rAP70X+Fv++q40izU7JaiO/hDN4=
+ resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.1.tgz#ac03fbd17f85bfefaae348b353b25a88efe10cde"
+ integrity sha512-kd6AQ/IgPRpLn6g5TozqzPdGNZ0q0jtXW4//hRcj10qLYBaa3mTUU2y2MCG+RXZm8Zx+KZi0eA+YCrMyNlF4UA==
dependencies:
"@babel/code-frame" "^7.0.0"
builtin-modules "^1.1.1"
@@ -3704,66 +4272,76 @@ tslint@^6.0.0:
tsutils@^2.29.0:
version "2.29.0"
- resolved "http://r.cnpmjs.org/tsutils/download/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
- integrity sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k=
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
+ integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
dependencies:
tslib "^1.8.1"
tunnel-agent@^0.6.0:
version "0.6.0"
- resolved "http://r.cnpmjs.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
dependencies:
safe-buffer "^5.0.1"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
- resolved "http://r.cnpmjs.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
type-check@~0.3.2:
version "0.3.2"
- resolved "http://r.cnpmjs.org/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
dependencies:
prelude-ls "~1.1.2"
type-detect@4.0.8:
version "4.0.8"
- resolved "http://r.cnpmjs.org/type-detect/download/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
- integrity sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
type-fest@^0.11.0:
version "0.11.0"
- resolved "http://r.cnpmjs.org/type-fest/download/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
- integrity sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
+ integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+
+type-fest@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
typedarray-to-buffer@^3.1.5:
version "3.1.5"
- resolved "http://r.cnpmjs.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
- integrity sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
dependencies:
is-typedarray "^1.0.0"
typescript@^3.8.3:
version "3.8.3"
- resolved "http://r.cnpmjs.org/typescript/download/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
- integrity sha1-QJ64VE6gM1cRIFhp7EWKsQnuEGE=
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
+ integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
uc.micro@^1.0.1, uc.micro@^1.0.5:
version "1.0.6"
- resolved "http://r.cnpmjs.org/uc.micro/download/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
- integrity sha1-nEEagCpAmpH8bPdAgbq6NLJEmaw=
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
+ integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
underscore@~1.9.1:
version "1.9.2"
- resolved "http://r.cnpmjs.org/underscore/download/underscore-1.9.2.tgz#0c8d6f536d6f378a5af264a72f7bec50feb7cf2f"
- integrity sha1-DI1vU21vN4pa8mSnL3vsUP63zy8=
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.2.tgz#0c8d6f536d6f378a5af264a72f7bec50feb7cf2f"
+ integrity sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==
union-value@^1.0.0:
version "1.0.1"
- resolved "http://r.cnpmjs.org/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
- integrity sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
dependencies:
arr-union "^3.1.0"
get-value "^2.0.6"
@@ -3772,7 +4350,7 @@ union-value@^1.0.0:
unset-value@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
dependencies:
has-value "^0.3.1"
@@ -3780,38 +4358,51 @@ unset-value@^1.0.0:
uri-js@^4.2.2:
version "4.2.2"
- resolved "http://r.cnpmjs.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
- integrity sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
dependencies:
punycode "^2.1.0"
urix@^0.1.0:
version "0.1.0"
- resolved "http://r.cnpmjs.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
use@^3.1.0:
version "3.1.1"
- resolved "http://r.cnpmjs.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
- integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
uuid@^3.3.2:
version "3.4.0"
- resolved "http://r.cnpmjs.org/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
- integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-v8-to-istanbul@^4.0.1:
+v8-to-istanbul@^4.1.3:
version "4.1.3"
- resolved "http://r.cnpmjs.org/v8-to-istanbul/download/v8-to-istanbul-4.1.3.tgz#22fe35709a64955f49a08a7c7c959f6520ad6f20"
- integrity sha1-Iv41cJpklV9JoIp8fJWfZSCtbyA=
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz#22fe35709a64955f49a08a7c7c959f6520ad6f20"
+ integrity sha512-sAjOC+Kki6aJVbUOXJbcR0MnbfjvBzwKZazEJymA2IX49uoOdEdk+4fBq5cXgYgiyKtAyrrJNtBZdOeDIF+Fng==
dependencies:
"@types/istanbul-lib-coverage" "^2.0.1"
convert-source-map "^1.6.0"
source-map "^0.7.3"
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
verror@1.10.0:
version "1.10.0"
- resolved "http://r.cnpmjs.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
dependencies:
assert-plus "^1.0.0"
@@ -3820,15 +4411,15 @@ verror@1.10.0:
w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2:
version "1.0.2"
- resolved "http://r.cnpmjs.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
- integrity sha1-ConN9cwVgi35w2BUNnaWPgzDCM0=
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
dependencies:
browser-process-hrtime "^1.0.0"
w3c-xmlserializer@^1.1.2:
version "1.1.2"
- resolved "http://r.cnpmjs.org/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794"
- integrity sha1-MEhcp9cKb9BSQgo9Ev2Q5jOc55Q=
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794"
+ integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==
dependencies:
domexception "^1.0.1"
webidl-conversions "^4.0.2"
@@ -3836,49 +4427,49 @@ w3c-xmlserializer@^1.1.2:
w3c-xmlserializer@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/w3c-xmlserializer/download/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
- integrity sha1-PnEEoFt1FGzGD1ZDgLf2g6zxAgo=
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
+ integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
dependencies:
xml-name-validator "^3.0.0"
walker@^1.0.7, walker@~1.0.5:
version "1.0.7"
- resolved "http://r.cnpmjs.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
dependencies:
makeerror "1.0.x"
webidl-conversions@^4.0.2:
version "4.0.2"
- resolved "http://r.cnpmjs.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
- integrity sha1-qFWYCx8LazWbodXZ+zmulB+qY60=
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
webidl-conversions@^5.0.0:
version "5.0.0"
- resolved "http://r.cnpmjs.org/webidl-conversions/download/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
- integrity sha1-rlnIoAsSFUOirMZcBDT1ew/BGv8=
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
+ integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
webidl-conversions@^6.0.0:
- version "6.0.0"
- resolved "http://r.cnpmjs.org/webidl-conversions/download/webidl-conversions-6.0.0.tgz#ff41d921371f43e772dba311b146ab6c0ef0ead4"
- integrity sha1-/0HZITcfQ+dy26MRsUarbA7w6tQ=
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
+ integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5:
version "1.0.5"
- resolved "http://r.cnpmjs.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
- integrity sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA=
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
dependencies:
iconv-lite "0.4.24"
whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
version "2.3.0"
- resolved "http://r.cnpmjs.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
- integrity sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78=
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
whatwg-url@^7.0.0:
version "7.1.0"
- resolved "http://r.cnpmjs.org/whatwg-url/download/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
- integrity sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
dependencies:
lodash.sortby "^4.7.0"
tr46 "^1.0.1"
@@ -3886,8 +4477,8 @@ whatwg-url@^7.0.0:
whatwg-url@^8.0.0:
version "8.0.0"
- resolved "http://r.cnpmjs.org/whatwg-url/download/whatwg-url-8.0.0.tgz#37f256cb746398e19b107bd6ef820b4ae2d15871"
- integrity sha1-N/JWy3RjmOGbEHvW74ILSuLRWHE=
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.0.0.tgz#37f256cb746398e19b107bd6ef820b4ae2d15871"
+ integrity sha512-41ou2Dugpij8/LPO5Pq64K5q++MnRCBpEHvQr26/mArEKTkCV5aoXIqyhuYtE0pkqScXwhf2JP57rkRTYM29lQ==
dependencies:
lodash.sortby "^4.7.0"
tr46 "^2.0.0"
@@ -3895,37 +4486,44 @@ whatwg-url@^8.0.0:
which-module@^2.0.0:
version "2.0.0"
- resolved "http://r.cnpmjs.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
which-pm-runs@^1.0.0:
version "1.0.0"
- resolved "http://r.cnpmjs.org/which-pm-runs/download/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
+ resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
which@^1.2.9, which@^1.3.1:
version "1.3.1"
- resolved "http://r.cnpmjs.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
- integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
dependencies:
isexe "^2.0.0"
which@^2.0.1, which@^2.0.2:
version "2.0.2"
- resolved "http://r.cnpmjs.org/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
- integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies:
isexe "^2.0.0"
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
word-wrap@~1.2.3:
version "1.2.3"
- resolved "http://r.cnpmjs.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
- integrity sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
wrap-ansi@^6.2.0:
version "6.2.0"
- resolved "http://r.cnpmjs.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
- integrity sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
@@ -3933,13 +4531,13 @@ wrap-ansi@^6.2.0:
wrappy@1:
version "1.0.2"
- resolved "http://r.cnpmjs.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
write-file-atomic@^3.0.0:
version "3.0.3"
- resolved "http://r.cnpmjs.org/write-file-atomic/download/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
- integrity sha1-Vr1cWlxwSBzRnFcb05q5ZaXeVug=
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
dependencies:
imurmurhash "^0.1.4"
is-typedarray "^1.0.0"
@@ -3948,60 +4546,70 @@ write-file-atomic@^3.0.0:
ws@^7.0.0, ws@^7.2.3:
version "7.2.3"
- resolved "http://r.cnpmjs.org/ws/download/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46"
- integrity sha1-pUEeH7BNXtDv7nbSbVxG2DDDm0Y=
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46"
+ integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==
xml-name-validator@^3.0.0:
version "3.0.0"
- resolved "http://r.cnpmjs.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
- integrity sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
xmlbuilder@13.0.2:
version "13.0.2"
- resolved "http://r.cnpmjs.org/xmlbuilder/download/xmlbuilder-13.0.2.tgz#02ae33614b6a047d1c32b5389c1fdacb2bce47a7"
- integrity sha1-Aq4zYUtqBH0cMrU4nB/ayyvOR6c=
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-13.0.2.tgz#02ae33614b6a047d1c32b5389c1fdacb2bce47a7"
+ integrity sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==
xmlchars@^2.1.1, xmlchars@^2.2.0:
version "2.2.0"
- resolved "http://r.cnpmjs.org/xmlchars/download/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
- integrity sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs=
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xmlcreate@^2.0.3:
version "2.0.3"
- resolved "http://r.cnpmjs.org/xmlcreate/download/xmlcreate-2.0.3.tgz#df9ecd518fd3890ab3548e1b811d040614993497"
- integrity sha1-357NUY/TiQqzVI4bgR0EBhSZNJc=
+ resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.3.tgz#df9ecd518fd3890ab3548e1b811d040614993497"
+ integrity sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==
xmlhttprequest-ts@^1.0.1:
version "1.0.1"
- resolved "http://r.cnpmjs.org/xmlhttprequest-ts/download/xmlhttprequest-ts-1.0.1.tgz#7b3cb4a197aee38cf2d4f9dd6189d1d21f0835b2"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ts/-/xmlhttprequest-ts-1.0.1.tgz#7b3cb4a197aee38cf2d4f9dd6189d1d21f0835b2"
integrity sha1-ezy0oZeu44zy1PndYYnR0h8INbI=
dependencies:
tslib "^1.9.2"
+"xtend@>=4.0.0 <4.1.0-0":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
y18n@^4.0.0:
version "4.0.0"
- resolved "http://r.cnpmjs.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
- integrity sha1-le+U+F7MgdAHwmThkKEg8KPIVms=
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^3.0.0, yallist@^3.0.3:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
yaml@^1.7.2:
- version "1.8.3"
- resolved "http://r.cnpmjs.org/yaml/download/yaml-1.8.3.tgz#2f420fca58b68ce3a332d0ca64be1d191dd3f87a"
- integrity sha1-L0IPyli2jOOjMtDKZL4dGR3T+Ho=
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed"
+ integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==
dependencies:
- "@babel/runtime" "^7.8.7"
+ "@babel/runtime" "^7.9.2"
yargs-parser@18.x, yargs-parser@^18.1.1:
- version "18.1.2"
- resolved "http://r.cnpmjs.org/yargs-parser/download/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1"
- integrity sha1-L0gr6iE2294IYWg6vqd1bTC1BPE=
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs@^15.3.1:
version "15.3.1"
- resolved "http://r.cnpmjs.org/yargs/download/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
- integrity sha1-lQW0cnY5Y+VK/mAUitJ6MwgY6Ys=
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
+ integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==
dependencies:
cliui "^6.0.0"
decamelize "^1.2.0"