Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
purescript-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
142
Issues
142
List
Board
Labels
Milestones
Merge Requests
4
Merge Requests
4
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
purescript-gargantext
Commits
8e5fcc57
Commit
8e5fcc57
authored
Sep 30, 2019
by
James Laver
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make app render again by fixing bug in Reactix render as R2.render
parent
fca5b5e1
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
209 additions
and
36 deletions
+209
-36
package.json
package.json
+5
-5
Prelude.purs
src/Gargantext/Prelude.purs
+1
-1
Reactix.purs
src/Gargantext/Utils/Reactix.purs
+183
-0
Main.purs
src/Main.purs
+2
-2
yarn.lock
yarn.lock
+18
-28
No files found.
package.json
View file @
8e5fcc57
...
@@ -16,11 +16,9 @@
...
@@ -16,11 +16,9 @@
"
create-react-class
"
:
"
^15.6.3
"
,
"
create-react-class
"
:
"
^15.6.3
"
,
"
echarts
"
:
"
^4.1.0
"
,
"
echarts
"
:
"
^4.1.0
"
,
"
echarts-for-react
"
:
"
^2.0.14
"
,
"
echarts-for-react
"
:
"
^2.0.14
"
,
"
imports-loader
"
:
"
^0.8.0
"
,
"
prop-types
"
:
"
15.6.2
"
,
"
prop-types
"
:
"
15.6.2
"
,
"
react
"
:
"
^16.8.6
"
,
"
react
"
:
"
^16.10
"
,
"
react-dom
"
:
"
^16.8.6
"
,
"
react-dom
"
:
"
^16.10
"
,
"
sass
"
:
"
^1.22.9
"
,
"
sigma
"
:
"
git://github.com/jjl/sigma.js#garg
"
"
sigma
"
:
"
git://github.com/jjl/sigma.js#garg
"
},
},
"eslintConfig"
:
{
"eslintConfig"
:
{
...
@@ -42,6 +40,7 @@
...
@@ -42,6 +40,7 @@
"
html-loader
"
:
"
^0.5.5
"
,
"
html-loader
"
:
"
^0.5.5
"
,
"
html-webpack-plugin
"
:
"
^4.0.0-beta.5
"
,
"
html-webpack-plugin
"
:
"
^4.0.0-beta.5
"
,
"
http-server
"
:
"
^0.11.1
"
,
"
http-server
"
:
"
^0.11.1
"
,
"
imports-loader
"
:
"
^0.8.0
"
,
"
mini-css-extract-plugin
"
:
"
^0.5.0
"
,
"
mini-css-extract-plugin
"
:
"
^0.5.0
"
,
"
psc
"
:
"
^0.1.1
"
,
"
psc
"
:
"
^0.1.1
"
,
"
psc-package
"
:
"
^3.0.1
"
,
"
psc-package
"
:
"
^3.0.1
"
,
...
@@ -49,8 +48,9 @@
...
@@ -49,8 +48,9 @@
"
purescript
"
:
"
^0.13.3
"
,
"
purescript
"
:
"
^0.13.3
"
,
"
purs-loader
"
:
"
^3.3.0
"
,
"
purs-loader
"
:
"
^3.3.0
"
,
"
react-testing-library
"
:
"
^6.1.2
"
,
"
react-testing-library
"
:
"
^6.1.2
"
,
"
sass
"
:
"
^1.22.9
"
,
"
source-map-loader
"
:
"
^0.2.4
"
,
"
source-map-loader
"
:
"
^0.2.4
"
,
"
spago
"
:
"
^0.
7.5
"
,
"
spago
"
:
"
^0.
10.0
"
,
"
style-loader
"
:
"
^0.23.1
"
,
"
style-loader
"
:
"
^0.23.1
"
,
"
uglify-js
"
:
"
^3.4.9
"
,
"
uglify-js
"
:
"
^3.4.9
"
,
"
uglifyify
"
:
"
^5.0.1
"
,
"
uglifyify
"
:
"
^5.0.1
"
,
...
...
src/Gargantext/Prelude.purs
View file @
8e5fcc57
...
@@ -3,7 +3,7 @@ module Gargantext.Prelude (module Prelude, logs)
...
@@ -3,7 +3,7 @@ module Gargantext.Prelude (module Prelude, logs)
import Prelude (class Applicative, class Apply, class Bind, class BooleanAlgebra, class Bounded, class Category, class CommutativeRing, class Discard, class DivisionRing, class Eq, class EuclideanRing, class Field, class Functor, class HeytingAlgebra, class Monad, class Monoid, class Ord, class Ring, class Semigroup, class Semigroupoid, class Semiring, class Show, type (~>), Ordering(..), Unit, Void, absurd, add, ap, append, apply, between, bind, bottom, clamp, compare, comparing, compose, conj, const, degree, discard, disj, eq, flap, flip, gcd, identity, ifM, join, lcm, liftA1, liftM1, map, max, mempty, min, mod, mul, negate, not, notEq, one, otherwise, pure, recip, show, sub, top, unit, unless, unlessM, void, when, whenM, zero, (#), ($), ($>), (&&), (*), (*>), (+), (-), (/), (/=), (<), (<#>), (<$), (<$>), (<*), (<*>), (<<<), (<=), (<=<), (<>), (<@>), (=<<), (==), (>), (>=), (>=>), (>>=), (>>>), (||))
import Prelude (class Applicative, class Apply, class Bind, class BooleanAlgebra, class Bounded, class Category, class CommutativeRing, class Discard, class DivisionRing, class Eq, class EuclideanRing, class Field, class Functor, class HeytingAlgebra, class Monad, class Monoid, class Ord, class Ring, class Semigroup, class Semigroupoid, class Semiring, class Show, type (~>), Ordering(..), Unit, Void, absurd, add, ap, append, apply, between, bind, bottom, clamp, compare, comparing, compose, conj, const, degree, discard, disj, eq, flap, flip, gcd, identity, ifM, join, lcm, liftA1, liftM1, map, max, mempty, min, mod, mul, negate, not, notEq, one, otherwise, pure, recip, show, sub, top, unit, unless, unlessM, void, when, whenM, zero, (#), ($), ($>), (&&), (*), (*>), (+), (-), (/), (/=), (<), (<#>), (<$), (<$>), (<*), (<*>), (<<<), (<=), (<=<), (<>), (<@>), (=<<), (==), (>), (>=), (>=>), (>>=), (>>>), (||))
import Effect.Console (log)
import Effect.Console (log)
import Effect.Class (MonadEffect, liftEffect)
import Effect.Class (
class
MonadEffect, liftEffect)
logs:: forall message effect.
logs:: forall message effect.
...
...
src/Gargantext/Utils/Reactix.purs
0 → 100644
View file @
8e5fcc57
module Gargantext.Utils.Reactix where
import Prelude
import Data.Maybe (Maybe(..))
import Data.Nullable (Nullable, null, toMaybe)
import Data.Tuple (Tuple)
import Data.Tuple.Nested ((/\))
import DOM.Simple as DOM
import DOM.Simple.Document (document)
import DOM.Simple.Event as DE
import DOM.Simple.Element as Element
import Effect (Effect)
import Effect.Class (liftEffect)
import Effect.Aff (Aff, launchAff, launchAff_, killFiber)
import Effect.Exception (error)
import Effect.Uncurried (EffectFn1, mkEffectFn1, mkEffectFn2)
import FFI.Simple ((...), defineProperty, delay, args2, args3)
import React (class ReactPropFields, Children, ReactClass, ReactElement)
import React as React
import Reactix as R
import Reactix.DOM.HTML (ElemFactory, text)
import Reactix.React (react, createDOMElement)
import Reactix.SyntheticEvent as RE
import Reactix.Utils (currySecond, hook, tuple)
import Thermite (Spec, simpleSpec, Render, defaultPerformAction)
import Unsafe.Coerce (unsafeCoerce)
newtype Point = Point { x :: Number, y :: Number }
-- a setter function, for useState
type Setter t = (t -> t) -> Effect Unit
-- a reducer function living in effector, for useReductor
type Actor t a = (t -> a -> Effect t)
-- | Turns a ReactElement into aReactix Element
-- | buff (v.) to polish
buff :: ReactElement -> R.Element
buff = unsafeCoerce
-- | Turns a Reactix Element into a ReactElement.
-- | scuff (v.) to spoil the gloss or finish of.
scuff :: R.Element -> ReactElement
scuff = unsafeCoerce
class ToElement a where
toElement :: a -> R.Element
instance toElementElement :: ToElement R.Element where
toElement = identity
instance toElementReactElement :: ToElement ReactElement where
toElement = buff
instance toElementArray :: ToElement a => ToElement (Array a) where
toElement = R.fragment <<< map toElement
{-
instance isReactElementElement :: IsReactElement R.Element where
toElement = scuff
-}
elSpec :: forall component props
. R.IsComponent component props (Array R.Element)
=> component -> Spec {} (Record props) Void
elSpec cpt = simpleSpec defaultPerformAction render
where
render :: Render {} (Record props) Void
render _ props _ children = [scuff $ R.createElement cpt props (buff <$> children)]
createElement' :: forall required given
. ReactPropFields required given
=> ReactClass { children :: Children | required }
-> Record given -> Array R.Element -> R.Element
createElement' reactClass props children =
buff $ React.createElement reactClass props $ scuff <$> children
{-
instance isComponentReactClass
:: R.IsComponent (ReactClass { children :: Children
| props
}) props (Array R.Element) where
createElement reactClass props children =
React.createElement reactClass props children
-}
-- | Turns an aff into a useEffect-compatible Effect (Effect Unit)
affEffect :: forall a. String -> Aff a -> Effect (Effect Unit)
affEffect errmsg aff = do
fiber <- launchAff aff
pure $ launchAff_ $ killFiber (error errmsg) fiber
mousePosition :: RE.SyntheticEvent DE.MouseEvent -> Point
mousePosition e = Point { x: RE.clientX e, y: RE.clientY e }
domMousePosition :: DE.MouseEvent -> Point
domMousePosition = mousePosition <<< unsafeCoerce
-- | This is naughty, it quietly mutates the input and returns it
named :: forall o. String -> o -> o
named = flip $ defineProperty "name"
overState :: forall t. (t -> t) -> R.State t -> Effect Unit
overState f (_state /\ setState) = setState f
select :: ElemFactory
select = createDOMElement "select"
menu :: ElemFactory
menu = createDOMElement "menu"
effToggler :: forall e. R.State Boolean -> EffectFn1 e Unit
effToggler (value /\ setValue) = mkEffectFn1 $ \e -> setValue $ const $ not value
unsafeEventValue :: forall event. event -> String
unsafeEventValue e = (unsafeCoerce e).target.value
nullRef :: forall t. R.Hooks (R.Ref (Nullable t))
nullRef = R.useRef null
nothingRef :: forall t. R.Hooks (R.Ref (Maybe t))
nothingRef = R.useRef Nothing
useLayoutEffect1' :: forall a. a -> (Unit -> Effect Unit) -> R.Hooks Unit
useLayoutEffect1' a f = R.useLayoutEffect1 a $ do
liftEffect $ f unit
pure $ pure unit
useLayoutRef :: forall a b. (a -> b) -> b -> R.Ref a -> R.Hooks (R.Ref b)
useLayoutRef fn init ref = do
new <- R.useRef init
let old = R.readRef ref
useLayoutEffect1' old $ \_ -> R.setRef new (fn old)
pure new
usePositionRef :: R.Ref (Nullable DOM.Element) -> R.Hooks (R.Ref (Maybe DOM.DOMRect))
usePositionRef = useLayoutRef (map Element.boundingRect <<< toMaybe) Nothing
readPositionRef :: R.Ref (Nullable DOM.Element) -> Maybe DOM.DOMRect
readPositionRef el = do
let posRef = R.readRef el
Element.boundingRect <$> toMaybe posRef
unsafeEventTarget :: forall event. event -> DOM.Element
unsafeEventTarget e = (unsafeCoerce e).target
getElementById :: String -> Effect (Maybe DOM.Element)
getElementById = (flip delay) h
where
h id = pure $ toMaybe $ document ... "getElementById" $ [id]
-- We just assume it works, so make sure it's in the html
getPortalHost :: R.Hooks DOM.Element
getPortalHost = R.unsafeHooksEffect $ delay unit $ \_ -> pure $ document ... "getElementById" $ ["portal"]
useLayoutEffectOnce :: Effect (Effect Unit) -> R.Hooks Unit
useLayoutEffectOnce e = R.unsafeUseLayoutEffect e []
singleParent :: forall props. R.Component props -> Record props -> R.Element -> R.Element
singleParent cpt props child = R.createElement cpt props [ child ]
childless :: forall props. R.Component props -> Record props -> R.Element
childless cpt props = R.createElement cpt props []
showText :: forall s. Show s => s -> R.Element
showText = text <<< show
----- Reactix's new effectful reducer: sneak-peek because anoe wants to demo on tuesday
-- | Like a reducer, but lives in Effect
type Reductor state action = Tuple state (action -> Effect Unit)
-- | Like useReductor, but lives in Effect
useReductor :: forall s a i. Actor s a -> (i -> Effect s) -> i -> R.Hooks (Reductor s a)
useReductor f i j =
hook $ \_ ->
pure $ currySecond $ tuple $ react ... "useReducer" $ args3 (mkEffectFn2 f) j (mkEffectFn1 i)
-- | Like `useReductor`, but takes an initial state instead of an
-- | initialiser function and argument
useReductor' :: forall s a. Actor s a -> s -> R.Hooks (Reductor s a)
useReductor' r = useReductor r pure
render :: R.Element -> DOM.Element -> Effect Unit
render e d = delay unit $ \_ -> pure $ R.reactDOM ... "render" $ args2 e d
src/Main.purs
View file @
8e5fcc57
...
@@ -8,12 +8,12 @@ import DOM.Simple.Document (document)
...
@@ -8,12 +8,12 @@ import DOM.Simple.Document (document)
import DOM.Simple.Console (log)
import DOM.Simple.Console (log)
import Effect (Effect)
import Effect (Effect)
import FFI.Simple ((...))
import FFI.Simple ((...))
import Reactix as R
import Gargantext.Components.App (app)
import Gargantext.Components.App (app)
import Gargantext.Utils.Reactix as R2
main :: Effect Unit
main :: Effect Unit
main = paint $ toMaybe (document ... "getElementById" $ [ "app" ])
main = paint $ toMaybe (document ... "getElementById" $ [ "app" ])
paint :: Maybe Element -> Effect Unit
paint :: Maybe Element -> Effect Unit
paint Nothing = log "[main] Container not found"
paint Nothing = log "[main] Container not found"
paint (Just c) = R.render (app {}) c
paint (Just c) = R
2
.render (app {}) c
yarn.lock
View file @
8e5fcc57
...
@@ -1074,14 +1074,6 @@ anymatch@^3.0.1:
...
@@ -1074,14 +1074,6 @@ anymatch@^3.0.1:
normalize-path "^3.0.0"
normalize-path "^3.0.0"
picomatch "^2.0.4"
picomatch "^2.0.4"
anymatch@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.0.3.tgz#2fb624fe0e84bccab00afee3d0006ed310f22f09"
integrity sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g==
dependencies:
normalize-path "^3.0.0"
picomatch "^2.0.4"
aproba@^1.0.3, aproba@^1.1.1:
aproba@^1.0.3, aproba@^1.1.1:
version "1.2.0"
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
...
@@ -5278,15 +5270,15 @@ rc@^1.2.7:
...
@@ -5278,15 +5270,15 @@ rc@^1.2.7:
minimist "^1.2.0"
minimist "^1.2.0"
strip-json-comments "~2.0.1"
strip-json-comments "~2.0.1"
react-dom@^16.
8.6
:
react-dom@^16.
10
:
version "16.
8.6
"
version "16.
10.1
"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.
8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f
"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.
10.1.tgz#479a6511ba34a429273c213cbc2a9ac4d296dac1
"
integrity sha512-
1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA
==
integrity sha512-
SmM4ZW0uug0rn95U8uqr52I7UdNf6wdGLeXDmNLfg3y5q5H9eAbdjF5ubQc3bjDyRrvdAB2IKG7X0GzSpnn5Mg
==
dependencies:
dependencies:
loose-envify "^1.1.0"
loose-envify "^1.1.0"
object-assign "^4.1.1"
object-assign "^4.1.1"
prop-types "^15.6.2"
prop-types "^15.6.2"
scheduler "^0.1
3.6
"
scheduler "^0.1
6.1
"
react-is@^16.8.1, react-is@^16.8.4:
react-is@^16.8.1, react-is@^16.8.4:
version "16.8.6"
version "16.8.6"
...
@@ -5301,15 +5293,14 @@ react-testing-library@^6.1.2:
...
@@ -5301,15 +5293,14 @@ react-testing-library@^6.1.2:
"@babel/runtime" "^7.4.2"
"@babel/runtime" "^7.4.2"
dom-testing-library "^3.19.0"
dom-testing-library "^3.19.0"
react@^16.
8.6
:
react@^16.
10
:
version "16.
8.6
"
version "16.
10.1
"
resolved "https://registry.yarnpkg.com/react/-/react-16.
8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe
"
resolved "https://registry.yarnpkg.com/react/-/react-16.
10.1.tgz#967c1e71a2767dfa699e6ba702a00483e3b0573f
"
integrity sha512-
pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw
==
integrity sha512-
2bisHwMhxQ3XQz4LiJJwG3360pY965pTl/MRrZYxIBKVj4fOHoDs5aZAkYXGxDRO1Li+SyjTAilQEbOmtQJHzA
==
dependencies:
dependencies:
loose-envify "^1.1.0"
loose-envify "^1.1.0"
object-assign "^4.1.1"
object-assign "^4.1.1"
prop-types "^15.6.2"
prop-types "^15.6.2"
scheduler "^0.13.6"
read-only-stream@^2.0.0:
read-only-stream@^2.0.0:
version "2.0.0"
version "2.0.0"
...
@@ -5634,10 +5625,10 @@ sax@^1.2.4:
...
@@ -5634,10 +5625,10 @@ sax@^1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
scheduler@^0.1
3.6
:
scheduler@^0.1
6.1
:
version "0.1
3.6
"
version "0.1
6.1
"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.1
3.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889
"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.1
6.1.tgz#a6fb6ddec12dc2119176e6eb54ecfe69a9eba8df
"
integrity sha512-
IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ
==
integrity sha512-
MIuie7SgsqMYOdCXVFZa8SKoNorJZUWHW8dPgto7uEHn1lX3fg2Gu0TzgK8USj76uxV7vB5eRMnZs/cdEHg+cg
==
dependencies:
dependencies:
loose-envify "^1.1.0"
loose-envify "^1.1.0"
object-assign "^4.1.1"
object-assign "^4.1.1"
...
@@ -5798,7 +5789,7 @@ shell-quote@^1.6.1:
...
@@ -5798,7 +5789,7 @@ shell-quote@^1.6.1:
array-reduce "~0.0.0"
array-reduce "~0.0.0"
jsonify "~0.0.0"
jsonify "~0.0.0"
shelljs@^0.8.2
, shelljs@^0.8.3
:
shelljs@^0.8.2:
version "0.8.3"
version "0.8.3"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
...
@@ -5943,13 +5934,12 @@ sourcemap-codec@^1.3.0:
...
@@ -5943,13 +5934,12 @@ sourcemap-codec@^1.3.0:
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f"
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f"
integrity sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==
integrity sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==
spago@^0.
7.5
:
spago@^0.
10.0
:
version "0.
7.7
"
version "0.
10.0
"
resolved "https://registry.yarnpkg.com/spago/-/spago-0.
7.7.tgz#9518a7197e82978ca1201edcfe32004bb2245352
"
resolved "https://registry.yarnpkg.com/spago/-/spago-0.
10.0.tgz#8783febe6e701122cdc90e4a509ecf0dfa646bd7
"
integrity sha512-
/pnNkcimDO+xi/RzcDqTaDGvef87fZY6VH0amkDVMVSPJStjk4Cw3/xl/GIvBIvuM7Z6Nz1pT3NFRPPmOYS9KQ
==
integrity sha512-
hcyAVObO+ZgXZaqy0EMCZgw8+Yr+PAGpYfV77C1EuL5gcSaly4snCY6dFBIdcUq0/vYhkCuUpBUGi6Dx+rnxiw
==
dependencies:
dependencies:
follow-redirects "^1.7.0"
follow-redirects "^1.7.0"
shelljs "^0.8.3"
tar "^4.4.8"
tar "^4.4.8"
spdy-transport@^3.0.0:
spdy-transport@^3.0.0:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment