Fix all eslint issues

This commit is contained in:
LordMathis 2019-02-16 21:37:41 +01:00
parent 14b8d32927
commit e265d0d16e
18 changed files with 224 additions and 137 deletions

View File

@ -6,6 +6,7 @@
"plugins":[
"@babel/plugin-proposal-object-rest-spread",
"@babel/plugin-transform-runtime",
"@babel/plugin-transform-template-literals"
"@babel/plugin-transform-template-literals",
"@babel/plugin-proposal-class-properties"
]
}

View File

@ -4,19 +4,17 @@
"es6": true,
"node": true
},
"extends": "standard",
"extends": [
"standard",
"plugin:react/recommended"
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 2018,
"sourceType": "module"
},
},
"parser": "babel-eslint",
"plugins": [
"babel",
"react"
],
"rules": {

View File

@ -21,18 +21,22 @@
"markdown-it": "^8.4.0",
"moment": "^2.19.1",
"node-sass": "^4.9.0",
"prop-types": "^15.7.2",
"react": "^16.7.0",
"react-dom": "^16.7.0",
"react-router-dom": "^4.1.1"
"react-router-dom": "^4.1.1",
"serialize-javascript": "^1.6.1"
},
"devDependencies": {
"@babel/core": "^7.2.2",
"@babel/plugin-proposal-class-properties": "^7.3.3",
"@babel/plugin-proposal-object-rest-spread": "^7.2.0",
"@babel/plugin-transform-runtime": "^7.2.0",
"@babel/plugin-transform-template-literals": "^7.2.0",
"@babel/preset-env": "^7.2.3",
"@babel/preset-react": "^7.0.0",
"@babel/runtime": "^7.2.0",
"babel-eslint": "^10.0.1",
"babel-loader": "^8.0.5",
"clean-webpack-plugin": "^0.1.19",
"compression-webpack-plugin": "^1.1.11",
@ -40,6 +44,7 @@
"css-modules-require-hook": "^4.2.3",
"eslint": "^5.14.0",
"eslint-config-standard": "^12.0.0",
"eslint-plugin-babel": "^5.3.0",
"eslint-plugin-import": "^2.16.0",
"eslint-plugin-node": "^8.0.1",
"eslint-plugin-promise": "^4.0.1",

View File

@ -1,11 +1,11 @@
import React from 'react';
import {hydrate} from 'react-dom';
import {BrowserRouter as Router} from 'react-router-dom';
import {App} from './components';
import React from 'react'
import { hydrate } from 'react-dom'
import { BrowserRouter as Router } from 'react-router-dom'
import { App } from './components'
hydrate(
<Router>
<App data={window.__INITIAL_DATA__}/>
</Router>,
document.getElementById('root')
);
)

View File

@ -1,10 +1,14 @@
import React, {Component} from 'react';
import {Spinner, Header} from '.';
import '../static/stylesheets/globals.scss';
import styles from './About.scss';
import contentStyle from '../static/stylesheets/content.scss';
import PropTypes from 'prop-types'
import React, { Component } from 'react'
import { Spinner, Header } from '.'
import '../static/stylesheets/globals.scss'
import contentStyle from '../static/stylesheets/content.scss'
export default class About extends Component {
static propTypes = {
isLoading: PropTypes.bool.isRequired,
about: PropTypes.object.isRequired
}
render () {
if (this.props.isLoading) {
@ -12,13 +16,13 @@ export default class About extends Component {
<div className={contentStyle.contentWrapper} id="about">
<Spinner/>
</div>
);
)
}
return (
<div className={contentStyle.contentWrapper} id="about">
<Header header={"About Me"} />
<div className={contentStyle.content} dangerouslySetInnerHTML={{__html: this.props.about.body}}>
<Header header={'About Me'} />
<div className={contentStyle.content} dangerouslySetInnerHTML={{ __html: this.props.about.body }}>
</div>
</div>
)

View File

@ -1,14 +1,14 @@
import { NotFoundWrapper } from '.'
import React, { Component } from 'react'
import routes from '../utils/routes'
import { Route, Link, Redirect, Switch } from 'react-router-dom'
import { Route, Switch } from 'react-router-dom'
export default class App extends Component {
render() {
render () {
return (
<div>
<Switch>
{routes.map(({ path, exact, component: C, ...rest }) => (
{routes.map(({ path, exact, component: C, ...rest }) => (
<Route
key={path}
path={path}

View File

@ -1,18 +1,23 @@
import React, {Component} from 'react';
import {Spinner, Header} from '.';
import '../static/stylesheets/globals.scss';
import styles from './Blog.scss';
import contentStyle from '../static/stylesheets/content.scss';
import PropTypes from 'prop-types'
import React, { Component } from 'react'
import { Spinner, Header } from '.'
import '../static/stylesheets/globals.scss'
import styles from './Blog.scss'
import contentStyle from '../static/stylesheets/content.scss'
export default class Blog extends Component {
static propTypes = {
isLoading: PropTypes.bool.isRequired,
posts: PropTypes.arrayOf(PropTypes.object).isRequired
}
render() {
render () {
if (this.props.isLoading) {
return (
<div className={contentStyle.contentWrapper} id="blog">
<Spinner/>
</div>
);
)
}
let posts = this.props.posts.map((post) =>
@ -28,7 +33,7 @@ export default class Blog extends Component {
return (
<div className={contentStyle.contentWrapper} id="blog">
<Header header={"Blog"} />
<Header header={'Blog'} />
<div className={contentStyle.content}>
<table>
@ -39,6 +44,6 @@ export default class Blog extends Component {
</div>
</div>
);
)
}
};

View File

@ -1,14 +1,13 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import config from '../../config.json';
import '../static/stylesheets/globals.scss';
import styles from './Home.scss';
import React, { Component } from 'react'
import { Link } from 'react-router-dom'
import config from '../../config.json'
import '../static/stylesheets/globals.scss'
import styles from './Home.scss'
export default class Home extends Component {
render() {
let key = 0;
const objKeys = Object.keys(config.social);
render () {
let key = 0
const objKeys = Object.keys(config.social)
const socialLinks = objKeys.map((val) => {
const link = (
@ -16,17 +15,17 @@ export default class Home extends Component {
<i className={`fa fa-${val} fa-3x`} aria-hidden="true" />
<span className="sr-only">{val}</span>
</a>
);
key += 1;
return link;
});
)
key += 1
return link
})
socialLinks.push(
<a key={key} href={`mailto:${config.email}`}>
<i className="fa fa-envelope-o fa-3x" aria-hidden="true" />
<span className="sr-only">e-mail</span>
</a>,
);
</a>
)
return (
<div id={styles.coverPage} className={styles.coverPageFull}>
@ -53,6 +52,6 @@ export default class Home extends Component {
</div>
</div>
</div>
);
)
}
}

View File

@ -1,14 +1,12 @@
import React, {Component} from 'react';
import config from '../../config.json';
import '../static/stylesheets/globals.scss';
import styles from './Navbar.scss';
import React, { Component } from 'react'
import config from '../../config.json'
import '../static/stylesheets/globals.scss'
import styles from './Navbar.scss'
export default class Navbar extends Component {
render () {
let key = 0;
const objKeys = Object.keys(config.social);
let key = 0
const objKeys = Object.keys(config.social)
const socialLinks = objKeys.map((val) => {
const link = (
@ -16,17 +14,18 @@ export default class Navbar extends Component {
<i className={`fa fa-${val}`} aria-hidden="true" />
<span className="sr-only">{val}</span>
</a>
);
key += 1;
return link;
});
)
key += 1
return link
})
socialLinks.push(
<a key={key} href={`mailto:${config.email}`}>
<i className="fa fa-envelope-o" aria-hidden="true" />
<span className="sr-only">e-mail</span>
</a>,
);
</a>
)
return (
<div className={styles.navbar}>

View File

@ -1,21 +1,21 @@
import React from 'react';
import {Navbar, Header} from '.';
import '../static/stylesheets/globals.scss';
import contentStyle from '../static/stylesheets/content.scss';
import React from 'react'
import { Navbar, Header } from '.'
import '../static/stylesheets/globals.scss'
import contentStyle from '../static/stylesheets/content.scss'
export const NotFoundPage = (props) => {
return (
<div>
<Navbar />
<div className={contentStyle.contentWrapper}>
<Header header={"Uhm... WHAT?"} />
<Header header={'Uhm... WHAT?'} />
<div className={contentStyle.content}>
<p>Looks like you&apos;re lost</p>
<p>404 Page not found</p>
</div>
</div>
</div>
);
};
)
}
export default NotFoundPage;
export default NotFoundPage

View File

@ -1,10 +1,8 @@
import React, {Component} from 'react';
import {Wrapper, NotFoundPage} from '.';
import '../static/stylesheets/globals.scss';
import styles from './Wrapper.scss';
import React, { Component } from 'react'
import { Wrapper, NotFoundPage } from '.'
import '../static/stylesheets/globals.scss'
export default class NotFoundWrapper extends Component {
render () {
return (
<Wrapper>

View File

@ -1,9 +1,9 @@
import React, {Component} from 'react';
import '../static/stylesheets/globals.scss';
import styles from './Spinner.scss';
import React, { Component } from 'react'
import '../static/stylesheets/globals.scss'
import styles from './Spinner.scss'
export default class Spinner extends Component {
render() {
render () {
return (
<div className={styles.spinnerWrapper}>
<div className={styles.ldsEllipsis}>

View File

@ -1,9 +1,15 @@
import React, {Component} from 'react';
import {Spinner, Header} from '.';
import '../static/stylesheets/globals.scss';
import styles from './Wrapper.scss';
import PropTypes from 'prop-types'
import React, { Component } from 'react'
import '../static/stylesheets/globals.scss'
import styles from './Wrapper.scss'
export default class Wrapper extends Component {
static propTypes = {
children: PropTypes.oneOfType([
PropTypes.arrayOf(PropTypes.node),
PropTypes.node
]).isRequired
}
render () {
return (

View File

@ -1,11 +1,11 @@
export { default as Home } from './Home';
export { default as Blog } from './Blog';
export { default as About } from './About';
export { default as Post } from './Post';
export { default as NotFoundPage } from './NotFoundPage';
export { default as NotFoundWrapper } from './NotFoundWrapper';
export { default as Spinner } from './Spinner';
export { default as Header } from './Header';
export { default as Wrapper } from './Wrapper';
export { default as Navbar } from './Navbar';
export { default as App } from './App';
export { default as Home } from './Home'
export { default as Blog } from './Blog'
export { default as About } from './About'
export { default as Post } from './Post'
export { default as NotFoundPage } from './NotFoundPage'
export { default as NotFoundWrapper } from './NotFoundWrapper'
export { default as Spinner } from './Spinner'
export { default as Header } from './Header'
export { default as Wrapper } from './Wrapper'
export { default as Navbar } from './Navbar'
export { default as App } from './App'

View File

@ -1,20 +1,24 @@
import React, {Component} from 'react';
import {About, Blog, Home, Wrapper} from '../components';
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { About, Blog, Home, Wrapper } from '../components'
export default class MainContainer extends Component {
static propTypes = {
data: PropTypes.object.isRequired
}
constructor() {
super();
constructor () {
super()
this.state = {
isLoadingBlog: true,
isLoadingAbout: true,
isLoadingAbout: true
}
console.log(this.props.data);
console.log(this.props.data)
}
render() {
render () {
return (
<div>
<Home/>

View File

@ -1,20 +1,24 @@
import React, {Component} from 'react';
import {Post, Wrapper, NotFoundPage} from '../components';
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { Post, Wrapper, NotFoundPage } from '../components'
export default class PostContainer extends Component {
constructor() {
super();
static propTypes = {
data: PropTypes.object.isRequired
}
constructor () {
super()
this.state = {
isLoading: true,
error: false,
};
console.log(this.props.data);
error: false
}
console.log(this.props.data)
}
render() {
render () {
if (this.state.error) {
return (
<NotFoundPage />
@ -24,8 +28,8 @@ export default class PostContainer extends Component {
return (
<Wrapper>
<Post isLoading={this.state.isLoading}
post={this.state.post} />
post={this.state.post} />
</Wrapper>
);
)
}
}

View File

@ -1,37 +1,34 @@
//import 'babel-polyfill'
// import 'babel-polyfill'
import React from 'react'
import { renderToString } from 'react-dom/server'
import { StaticRouter as Router, matchPath } from 'react-router-dom'
import { App } from '../components'
import routes from './routes'
import serialize from 'serialize-javascript'
export function serverRender(req, res, next) {
export function serverRender (req, res, next) {
const activeRoute = routes.find((route) => matchPath(req.url, route)) || {}
const promise = activeRoute.getData
? activeRoute.getData(req.path)
: Promise.resolve()
? activeRoute.getData(req.path)
: Promise.resolve()
promise.then((data) => {
console.log(data);
console.log(data)
const markup = renderToString(
<Router location={req.url} context={{}}>
<App data={data}/>
</Router>,
);
res.status(200).send(renderFullPage(markup, data));
</Router>
)
res.status(200).send(renderFullPage(markup, data))
}).catch(next)
}
function renderFullPage(html, data) {
function renderFullPage (html, data) {
return `
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<head>
<title>Matúš Námešný</title>

View File

@ -72,6 +72,17 @@
"@babel/traverse" "^7.1.0"
"@babel/types" "^7.0.0"
"@babel/helper-create-class-features-plugin@^7.3.0":
version "7.3.2"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.2.tgz#ba1685603eb1c9f2f51c9106d5180135c163fe73"
integrity sha512-tdW8+V8ceh2US4GsYdNVNoohq5uVwOf9k6krjwW4E1lINcHgttnWcNqgdoessn12dAy8QkbezlbQh2nXISNY+A==
dependencies:
"@babel/helper-function-name" "^7.1.0"
"@babel/helper-member-expression-to-functions" "^7.0.0"
"@babel/helper-optimise-call-expression" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/helper-replace-supers" "^7.2.3"
"@babel/helper-define-map@^7.1.0":
version "7.1.0"
resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c"
@ -168,7 +179,7 @@
"@babel/traverse" "^7.1.0"
"@babel/types" "^7.0.0"
"@babel/helper-replace-supers@^7.1.0":
"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.2.3":
version "7.2.3"
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5"
integrity sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==
@ -221,6 +232,11 @@
esutils "^2.0.2"
js-tokens "^4.0.0"
"@babel/parser@^7.0.0":
version "7.3.3"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.3.tgz#092d450db02bdb6ccb1ca8ffd47d8774a91aef87"
integrity sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg==
"@babel/parser@^7.2.2", "@babel/parser@^7.2.3":
version "7.2.3"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489"
@ -235,6 +251,14 @@
"@babel/helper-remap-async-to-generator" "^7.1.0"
"@babel/plugin-syntax-async-generators" "^7.2.0"
"@babel/plugin-proposal-class-properties@^7.3.3":
version "7.3.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.3.tgz#e69ee114a834a671293ace001708cc1682ed63f9"
integrity sha512-XO9eeU1/UwGPM8L+TjnQCykuVcXqaO5J1bkRPIygqZ/A2L1xVMJ9aZXrY31c0U4H2/LHKL4lbFQLsxktSrc/Ng==
dependencies:
"@babel/helper-create-class-features-plugin" "^7.3.0"
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-proposal-json-strings@^7.2.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317"
@ -634,7 +658,7 @@
"@babel/parser" "^7.2.2"
"@babel/types" "^7.2.2"
"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3":
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3":
version "7.2.3"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8"
integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==
@ -1001,6 +1025,18 @@ babel-core@^6.26.0:
slash "^1.0.0"
source-map "^0.5.7"
babel-eslint@^10.0.1:
version "10.0.1"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed"
integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==
dependencies:
"@babel/code-frame" "^7.0.0"
"@babel/parser" "^7.0.0"
"@babel/traverse" "^7.0.0"
"@babel/types" "^7.0.0"
eslint-scope "3.7.1"
eslint-visitor-keys "^1.0.0"
babel-generator@^6.26.0:
version "6.26.1"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
@ -2834,6 +2870,13 @@ eslint-module-utils@^2.3.0:
debug "^2.6.8"
pkg-dir "^2.0.0"
eslint-plugin-babel@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz#2e7f251ccc249326da760c1a4c948a91c32d0023"
integrity sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==
dependencies:
eslint-rule-composer "^0.3.0"
eslint-plugin-es@^1.3.1:
version "1.4.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6"
@ -2893,7 +2936,12 @@ eslint-plugin-standard@^4.0.0:
resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz#f845b45109c99cd90e77796940a344546c8f6b5c"
integrity sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==
eslint-scope@^3.7.1:
eslint-rule-composer@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9"
integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==
eslint-scope@3.7.1, eslint-scope@^3.7.1:
version "3.7.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
dependencies:
@ -4838,7 +4886,7 @@ loglevelnext@^1.0.1:
es6-symbol "^3.1.1"
object.assign "^4.1.0"
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@ -6204,6 +6252,15 @@ prop-types@^15.6.2:
loose-envify "^1.3.1"
object-assign "^4.1.1"
prop-types@^15.7.2:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
dependencies:
loose-envify "^1.4.0"
object-assign "^4.1.1"
react-is "^16.8.1"
proxy-addr@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341"
@ -6347,6 +6404,11 @@ react-dom@^16.7.0:
prop-types "^15.6.2"
scheduler "^0.12.0"
react-is@^16.8.1:
version "16.8.2"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.2.tgz#09891d324cad1cb0c1f2d91f70a71a4bee34df0f"
integrity sha512-D+NxhSR2HUCjYky1q1DwpNUD44cDpUXzSmmFyC3ug1bClcU/iDNy0YNn1iwme28fn+NFhpA13IndOd42CrFb+Q==
react-router-dom@^4.1.1:
version "4.2.2"
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.2.2.tgz#c8a81df3adc58bba8a76782e946cbd4eae649b8d"
@ -6939,6 +7001,11 @@ serialize-javascript@^1.4.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe"
serialize-javascript@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879"
integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==
serve-static@1.13.2:
version "1.13.2"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"