format, add types

This commit is contained in:
Willyb321
2019-01-11 08:45:33 +11:00
parent c39fd2b3ce
commit 249eb92aee
11 changed files with 2169 additions and 17978 deletions

16593
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -118,6 +118,27 @@
]
},
"devDependencies": {
"@types/babel-core": "6.25.5",
"@types/babel__core": "^7.0.4",
"@types/case-sensitive-paths-webpack-plugin": "2.1.2",
"@types/classnames": "^2.2.7",
"@types/dotenv": "6.1.0",
"@types/eslint": "4.16.5",
"@types/fs-extra": "5.0.4",
"@types/html-webpack-plugin": "3.2.0",
"@types/jest": "23.3.12",
"@types/less": "^3.0.0",
"@types/mini-css-extract-plugin": "0.2.0",
"@types/node": "^10.12.18",
"@types/optimize-css-assets-webpack-plugin": "1.3.3",
"@types/react": "^16.7.18",
"@types/react-dom": "^16.0.11",
"@types/react-loadable": "^5.4.3",
"@types/react-router-dom": "^4.3.1",
"@types/resolve": "0.0.8",
"@types/webpack": "4.4.22",
"@types/webpack-dev-server": "3.1.1",
"@types/webpack-manifest-plugin": "2.0.0",
"less": "^3.9.0",
"less-loader": "^4.1.0"
}

View File

@@ -1,41 +1,56 @@
import React, { Component } from 'react';
import { Switch, Route, Link } from 'react-router-dom';
import React, { Component } from "react";
import { Switch, Route } from "react-router-dom";
import Loadable from "react-loadable";
import Header from './components/Header';
import Header from "./components/Header";
const LoadableHome = Loadable({
loader: () => import("./pages/Home"),
loading: () => <h2>Loading</h2>
loader: () => import("./pages/Home"),
loading: () => <h2>Loading</h2>
});
const LoadableOutfit = Loadable({
loader: () => import("./pages/Outfit"),
loading: () => <h2>Loading</h2>
loader: () => import("./pages/Outfit"),
loading: () => <h2>Loading</h2>
});
class App extends Component {
render() {
return (
<div style={{ minHeight: '100%' }}>
<Header/>
<Switch>
<Route exact path='/' component={LoadableHome}/>
<Route path='/outfit/:ship' component={LoadableOutfit}/>
</Switch>
<footer>
<div className="right cap">
<a href="https://github.com/EDCD/coriolis" target="_blank" rel="noopener noreferrer"
title="Coriolis Github Project">{window.CORIOLIS_VERSION} - {window.CORIOLIS_DATE}</a>
<br/>
<a
href={'https://github.com/EDCD/coriolis/compare/edcd:develop@{' + window.CORIOLIS_DATE + '}...edcd:develop'}
target="_blank" rel="noopener noreferrer" title={'Coriolis Commits since' + window.CORIOLIS_DATE}>Commits
since last release
({window.CORIOLIS_DATE})</a>
</div>
</footer>
</div>
);
}
render() {
return (
<div style={{ minHeight: "100%" }}>
<Header />
<Switch>
<Route exact path="/" component={LoadableHome} />
<Route path="/outfit/:ship" component={LoadableOutfit} />
</Switch>
<footer>
<div className="right cap">
<a
href="https://github.com/EDCD/coriolis"
target="_blank"
rel="noopener noreferrer"
title="Coriolis Github Project"
>
{window.CORIOLIS_VERSION} - {window.CORIOLIS_DATE}
</a>
<br />
<a
href={
"https://github.com/EDCD/coriolis/compare/edcd:develop@{" +
window.CORIOLIS_DATE +
"}...edcd:develop"
}
target="_blank"
rel="noopener noreferrer"
title={
"Coriolis Commits since" + window.CORIOLIS_DATE
}
>
Commits since last release ({window.CORIOLIS_DATE})
</a>
</div>
</footer>
</div>
);
}
}
export default App;

View File

@@ -1,54 +1,91 @@
import React, { Component } from 'react';
import {Link} from 'react-router-dom';
import { CoriolisLogo, Hammer, Rocket, Cogs, Help, StatsBars } from './SvgIcons';
import React, { Component } from "react";
import { Link } from "react-router-dom";
import {
CoriolisLogo,
Hammer,
Rocket,
Cogs,
Help,
StatsBars
} from "./SvgIcons";
const cn = (...args) => args.join(' ')
const translate = (args) => args;
const hasBuilds = () => false
const openedMenu = () => false
const cn = (...args) => args.join(" ");
const translate = args => args;
const hasBuilds = () => false;
const openedMenu = () => false;
class Header extends Component {
render() {
return (
<header className={"header"}>
<Link className='l menu' to={'/'}><CoriolisLogo className='icon xl' /></Link>
<div className='l menu'>
<div className={'menu-header'} onClick={this._openShips}>
<Rocket className='warning' /><span className='menu-item-label'>{translate('ships')}</span>
</div>
</div>
<div className='l menu'>
<div className={'menu-header'} onClick={hasBuilds && this._openBuilds}>
<Hammer className={'menu-header'} /><span className='menu-item-label'>{translate('builds')}</span>
</div>
</div>
render() {
return (
<header className={"header"}>
<Link className="l menu" to={"/"}>
<CoriolisLogo className="icon xl" />
</Link>
<div className="l menu">
<div className={"menu-header"} onClick={this._openShips}>
<Rocket className="warning" />
<span className="menu-item-label">
{translate("ships")}
</span>
</div>
</div>
<div className="l menu">
<div
className={"menu-header"}
onClick={hasBuilds && this._openBuilds}
>
<Hammer className={"menu-header"} />
<span className="menu-item-label">
{translate("builds")}
</span>
</div>
</div>
<div className='l menu'>
<div className={cn('menu-header', { selected: openedMenu == 'comp', disabled: !hasBuilds })} onClick={hasBuilds && this._openComp}>
<StatsBars className={'menu-header'} /><span className='menu-item-label'>{translate('compare')}</span>
</div>
</div>
<div className="l menu">
<div
className={cn("menu-header", {
selected: openedMenu == "comp",
disabled: !hasBuilds
})}
onClick={hasBuilds && this._openComp}
>
<StatsBars className={"menu-header"} />
<span className="menu-item-label">
{translate("compare")}
</span>
</div>
</div>
<div className='l menu'>
<div className={'menu-header'}>
<span className='menu-item-label'>{translate('announcements')}</span>
</div>
</div>
<div className='r menu'>
<div className={cn('menu-header', { selected: openedMenu == 'settings' })} onClick={this._openSettings}>
<Cogs className='xl warning'/><span className='menu-item-label'>{translate('settings')}</span>
</div>
{openedMenu == 'settings' ? this._getSettingsMenu() : null}
</div>
<div className="l menu">
<div className={"menu-header"}>
<span className="menu-item-label">
{translate("announcements")}
</span>
</div>
</div>
<div className="r menu">
<div
className={cn("menu-header", {
selected: openedMenu == "settings"
})}
onClick={this._openSettings}
>
<Cogs className="xl warning" />
<span className="menu-item-label">
{translate("settings")}
</span>
</div>
{openedMenu == "settings" ? this._getSettingsMenu() : null}
</div>
<div className='r menu'>
<div className={cn('menu-header')} onClick={this._showHelp}>
<Help className='xl warning'/>
</div>
</div>
</header>
);
}
<div className="r menu">
<div className={cn("menu-header")} onClick={this._showHelp}>
<Help className="xl warning" />
</div>
</div>
</header>
);
}
}
export default Header;

View File

@@ -1,98 +1,97 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import cn from 'classnames';
import {Ship, Module, Factory} from 'ed-forge'
import React, { Component } from "react";
import PropTypes from "prop-types";
import cn from "classnames";
import { Ship, Module, Factory } from "ed-forge";
class ShipSummaryTable extends Component {
/**
* The ShipSummaryTable constructor
* @param {Object} props The props
*/
constructor(props) {
super(props);
this.state = {
shieldColour: "blue"
};
}
/**
* The ShipSummaryTable constructor
* @param {Object} props The props
*/
constructor(props) {
super(props);
this.state = {
shieldColour: 'blue'
};
}
render() {
const ship = this.props.ship;
console.log(ship)
return <div></div>
// return <div id='summary'>
// <div style={{display: "table", width: "100%"}}>
// <div style={{display: "table-row"}}>
// <table className={'summaryTable'}>
// <thead>
// <tr className='main'>
// <th rowSpan={2} className={ cn({ 'bg-warning-disabled': !canThrust }) }>{translate('speed')}</th>
// <th rowSpan={2} className={ cn({ 'bg-warning-disabled': !canBoost }) }>{translate('boost')}</th>
// <th colSpan={5}>{translate('jump range')}</th>
// <th rowSpan={2}>{translate('shield')}</th>
// <th rowSpan={2}>{translate('integrity')}</th>
// <th rowSpan={2}>{translate('DPS')}</th>
// <th rowSpan={2}>{translate('EPS')}</th>
// <th rowSpan={2}>{translate('TTD')}</th>
// {/* <th onMouseEnter={termtip.bind(null, 'heat per second')} onMouseLeave={hide} rowSpan={2}>{translate('HPS')}</th> */}
// <th rowSpan={2}>{translate('cargo')}</th>
// <th rowSpan={2} onMouseEnter={termtip.bind(null, 'passenger capacity', { cap: 0 })} onMouseLeave={hide}>{translate('pax')}</th>
// <th rowSpan={2}>{translate('fuel')}</th>
// <th colSpan={3}>{translate('mass')}</th>
// <th onMouseEnter={termtip.bind(null, 'hull hardness', { cap: 0 })} onMouseLeave={hide} rowSpan={2}>{translate('hrd')}</th>
// <th rowSpan={2}>{translate('crew')}</th>
// <th onMouseEnter={termtip.bind(null, 'mass lock factor', { cap: 0 })} onMouseLeave={hide} rowSpan={2}>{translate('MLF')}</th>
// <th onMouseEnter={termtip.bind(null, 'TT_SUMMARY_BOOST_TIME', { cap: 0 })} onMouseLeave={hide} rowSpan={2}>{translate('boost time')}</th>
// <th rowSpan={2}>{translate('resting heat (Beta)')}</th>
// </tr>
// <tr>
// <th className='lft'>{translate('max')}</th>
// <th>{translate('unladen')}</th>
// <th>{translate('laden')}</th>
// <th>{translate('total unladen')}</th>
// <th>{translate('total laden')}</th>
// <th className='lft'>{translate('hull')}</th>
// <th>{translate('unladen')}</th>
// <th>{translate('laden')}</th>
// </tr>
// </thead>
// <tbody>
// <tr>
// <td onMouseEnter={termtip.bind(null, speedTooltip, { cap: 0 })} onMouseLeave={hide}>{ canThrust ? <span>{int(ship.calcSpeed(4, ship.fuelCapacity, 0, false))}{u['m/s']}</span> : <span className='warning'>0 <Warning/></span> }</td>
// <td onMouseEnter={termtip.bind(null, boostTooltip, { cap: 0 })} onMouseLeave={hide}>{ canBoost ? <span>{int(ship.calcSpeed(4, ship.fuelCapacity, 0, true))}{u['m/s']}</span> : <span className='warning'>0 <Warning/></span> }</td>
// <td><span onMouseEnter={termtip.bind(null, 'TT_SUMMARY_MAX_SINGLE_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.jumpRange(ship.unladenMass + ship.standard[2].m.getMaxFuelPerJump(), ship.standard[2].m, ship.standard[2].m.getMaxFuelPerJump(), ship))}{u.LY}</span></td>
// <td><span onMouseEnter={termtip.bind(null, 'TT_SUMMARY_UNLADEN_SINGLE_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.jumpRange(ship.unladenMass + ship.fuelCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY}</span></td>
// <td><span onMouseEnter={termtip.bind(null, 'TT_SUMMARY_LADEN_SINGLE_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.jumpRange(ship.unladenMass + ship.fuelCapacity + ship.cargoCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY}</span></td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_UNLADEN_TOTAL_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.totalJumpRange(ship.unladenMass + ship.fuelCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_LADEN_TOTAL_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.totalJumpRange(ship.unladenMass + ship.fuelCapacity + ship.cargoCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY}</td>
// <td className={sgClassNames} onMouseEnter={termtip.bind(null, sgTooltip, { cap: 0 })} onMouseLeave={hide}>{int(ship.shield)}{u.MJ}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_INTEGRITY', { cap: 0 })} onMouseLeave={hide}>{int(ship.armour)}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_DPS', { cap: 0 })} onMouseLeave={hide}>{f1(ship.totalDps)}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_EPS', { cap: 0 })} onMouseLeave={hide}>{f1(ship.totalEps)}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_TTD', { cap: 0 })} onMouseLeave={hide}>{timeToDrain === Infinity ? '∞' : time(timeToDrain)}</td>
// {/* <td>{f1(ship.totalHps)}</td> */}
// <td>{round(ship.cargoCapacity)}{u.T}</td>
// <td>{ship.passengerCapacity}</td>
// <td>{round(ship.fuelCapacity)}{u.T}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_HULL_MASS', { cap: 0 })} onMouseLeave={hide}>{ship.hullMass}{u.T}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_UNLADEN_MASS', { cap: 0 })} onMouseLeave={hide}>{int(ship.unladenMass)}{u.T}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_LADEN_MASS', { cap: 0 })} onMouseLeave={hide}>{int(ship.ladenMass)}{u.T}</td>
// <td>{int(ship.hardness)}</td>
// <td>{ship.crew}</td>
// <td>{ship.masslock}</td>
// <td>{shipBoost !== 'No Boost' ? formats.time(shipBoost) : 'No Boost'}</td>
// <td>{formats.pct(restingHeat)}</td>
// </tr>
// </tbody>
// </table>
// </div>
// </div>
// </div>;
}
render() {
const ship = this.props.ship;
console.log(ship);
return <div />;
// return <div id='summary'>
// <div style={{display: "table", width: "100%"}}>
// <div style={{display: "table-row"}}>
// <table className={'summaryTable'}>
// <thead>
// <tr className='main'>
// <th rowSpan={2} className={ cn({ 'bg-warning-disabled': !canThrust }) }>{translate('speed')}</th>
// <th rowSpan={2} className={ cn({ 'bg-warning-disabled': !canBoost }) }>{translate('boost')}</th>
// <th colSpan={5}>{translate('jump range')}</th>
// <th rowSpan={2}>{translate('shield')}</th>
// <th rowSpan={2}>{translate('integrity')}</th>
// <th rowSpan={2}>{translate('DPS')}</th>
// <th rowSpan={2}>{translate('EPS')}</th>
// <th rowSpan={2}>{translate('TTD')}</th>
// {/* <th onMouseEnter={termtip.bind(null, 'heat per second')} onMouseLeave={hide} rowSpan={2}>{translate('HPS')}</th> */}
// <th rowSpan={2}>{translate('cargo')}</th>
// <th rowSpan={2} onMouseEnter={termtip.bind(null, 'passenger capacity', { cap: 0 })} onMouseLeave={hide}>{translate('pax')}</th>
// <th rowSpan={2}>{translate('fuel')}</th>
// <th colSpan={3}>{translate('mass')}</th>
// <th onMouseEnter={termtip.bind(null, 'hull hardness', { cap: 0 })} onMouseLeave={hide} rowSpan={2}>{translate('hrd')}</th>
// <th rowSpan={2}>{translate('crew')}</th>
// <th onMouseEnter={termtip.bind(null, 'mass lock factor', { cap: 0 })} onMouseLeave={hide} rowSpan={2}>{translate('MLF')}</th>
// <th onMouseEnter={termtip.bind(null, 'TT_SUMMARY_BOOST_TIME', { cap: 0 })} onMouseLeave={hide} rowSpan={2}>{translate('boost time')}</th>
// <th rowSpan={2}>{translate('resting heat (Beta)')}</th>
// </tr>
// <tr>
// <th className='lft'>{translate('max')}</th>
// <th>{translate('unladen')}</th>
// <th>{translate('laden')}</th>
// <th>{translate('total unladen')}</th>
// <th>{translate('total laden')}</th>
// <th className='lft'>{translate('hull')}</th>
// <th>{translate('unladen')}</th>
// <th>{translate('laden')}</th>
// </tr>
// </thead>
// <tbody>
// <tr>
// <td onMouseEnter={termtip.bind(null, speedTooltip, { cap: 0 })} onMouseLeave={hide}>{ canThrust ? <span>{int(ship.calcSpeed(4, ship.fuelCapacity, 0, false))}{u['m/s']}</span> : <span className='warning'>0 <Warning/></span> }</td>
// <td onMouseEnter={termtip.bind(null, boostTooltip, { cap: 0 })} onMouseLeave={hide}>{ canBoost ? <span>{int(ship.calcSpeed(4, ship.fuelCapacity, 0, true))}{u['m/s']}</span> : <span className='warning'>0 <Warning/></span> }</td>
// <td><span onMouseEnter={termtip.bind(null, 'TT_SUMMARY_MAX_SINGLE_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.jumpRange(ship.unladenMass + ship.standard[2].m.getMaxFuelPerJump(), ship.standard[2].m, ship.standard[2].m.getMaxFuelPerJump(), ship))}{u.LY}</span></td>
// <td><span onMouseEnter={termtip.bind(null, 'TT_SUMMARY_UNLADEN_SINGLE_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.jumpRange(ship.unladenMass + ship.fuelCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY}</span></td>
// <td><span onMouseEnter={termtip.bind(null, 'TT_SUMMARY_LADEN_SINGLE_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.jumpRange(ship.unladenMass + ship.fuelCapacity + ship.cargoCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY}</span></td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_UNLADEN_TOTAL_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.totalJumpRange(ship.unladenMass + ship.fuelCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_LADEN_TOTAL_JUMP', { cap: 0 })} onMouseLeave={hide}>{f2(Calc.totalJumpRange(ship.unladenMass + ship.fuelCapacity + ship.cargoCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY}</td>
// <td className={sgClassNames} onMouseEnter={termtip.bind(null, sgTooltip, { cap: 0 })} onMouseLeave={hide}>{int(ship.shield)}{u.MJ}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_INTEGRITY', { cap: 0 })} onMouseLeave={hide}>{int(ship.armour)}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_DPS', { cap: 0 })} onMouseLeave={hide}>{f1(ship.totalDps)}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_EPS', { cap: 0 })} onMouseLeave={hide}>{f1(ship.totalEps)}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_TTD', { cap: 0 })} onMouseLeave={hide}>{timeToDrain === Infinity ? '∞' : time(timeToDrain)}</td>
// {/* <td>{f1(ship.totalHps)}</td> */}
// <td>{round(ship.cargoCapacity)}{u.T}</td>
// <td>{ship.passengerCapacity}</td>
// <td>{round(ship.fuelCapacity)}{u.T}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_HULL_MASS', { cap: 0 })} onMouseLeave={hide}>{ship.hullMass}{u.T}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_UNLADEN_MASS', { cap: 0 })} onMouseLeave={hide}>{int(ship.unladenMass)}{u.T}</td>
// <td onMouseEnter={termtip.bind(null, 'TT_SUMMARY_LADEN_MASS', { cap: 0 })} onMouseLeave={hide}>{int(ship.ladenMass)}{u.T}</td>
// <td>{int(ship.hardness)}</td>
// <td>{ship.crew}</td>
// <td>{ship.masslock}</td>
// <td>{shipBoost !== 'No Boost' ? formats.time(shipBoost) : 'No Boost'}</td>
// <td>{formats.pct(restingHeat)}</td>
// </tr>
// </tbody>
// </table>
// </div>
// </div>
// </div>;
}
}
ShipSummaryTable.propTypes = {
ship: PropTypes.any.isRequired,
ship: PropTypes.any.isRequired
};
export default ShipSummaryTable;

File diff suppressed because it is too large Load Diff

View File

@@ -1,48 +1,63 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import cn from 'classnames';
import React, { Component } from "react";
import PropTypes from "prop-types";
import cn from "classnames";
class Slot extends Component {
render() {
const m = this.props.mod;
const warning = () => false;
const slot = {};
const classRating = 0;
const mass = 0;
const translate = arg => arg;
const formats = {
round: a => Math.round(a)
};
const units = {};
return (
<div className={'slot'}>
<div className={'cb'}>
<div className={'r'}>{formats.round(mass)}</div>
</div>
<div className={cn('slot', { selected: this.props.selected })} onClick={this.props.onOpen}
onKeyDown={this._keyDown} tabIndex="0" ref={slotDiv => this.slotDiv = slotDiv}>
<div className={cn('details-container', {
warning: warning && warning(slot.m),
disabled: m.grp !== 'bh' && !slot.enabled
})}>
<div className={'sz'}>{m.grp == 'bh' ? m.name.charAt(0) : m.getSize()}</div>
<div>
<div className={'l'}>{classRating} {translate(m.name || m.grp)}{m.mods && Object.keys(m.mods).length > 0 ?
<span className='r'></span> : null}</div>
<div className={'r'}>{formats.round(mass)}{units.T}</div>
<div/>
<div className={'cb'}>
</div>
</div>
</div>
</div>
</div>
);
}
render() {
const m = this.props.mod;
const warning = () => false;
const slot = {};
const classRating = 0;
const mass = 0;
const translate = arg => arg;
const formats = {
round: a => Math.round(a)
};
const units = {};
return (
<div className={"slot"}>
<div className={"cb"}>
<div className={"r"}>{formats.round(mass)}</div>
</div>
<div
className={cn("slot", { selected: this.props.selected })}
onClick={this.props.onOpen}
onKeyDown={this._keyDown}
tabIndex="0"
ref={slotDiv => (this.slotDiv = slotDiv)}
>
<div
className={cn("details-container", {
warning: warning && warning(slot.m),
disabled: m.grp !== "bh" && !slot.enabled
})}
>
<div className={"sz"}>
{m.grp == "bh" ? m.name.charAt(0) : m.getSize()}
</div>
<div>
<div className={"l"}>
{classRating} {translate(m.name || m.grp)}
{m.mods && Object.keys(m.mods).length > 0 ? (
<span className="r" />
) : null}
</div>
<div className={"r"}>
{formats.round(mass)}
{units.T}
</div>
<div />
<div className={"cb"} />
</div>
</div>
</div>
</div>
);
}
}
Slot.propTypes = {
mod: PropTypes.any
mod: PropTypes.any
};
export default Slot;

File diff suppressed because it is too large Load Diff

View File

@@ -1,16 +1,14 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import ShipTable from '../components/ShipTable';
import React, { Component } from "react";
import ShipTable from "../components/ShipTable";
class Home extends Component {
render() {
return (
<div className="page">
<Link className={"link"} to={'/outfit/fer_de_lance'}>Fer De Lance</Link>
<ShipTable/>
</div>
);
}
render() {
return (
<div className="page">
<ShipTable />
</div>
);
}
}
export default Home;

View File

@@ -1,36 +1,32 @@
import React, { Component } from 'react';
import { Factory } from 'ed-forge';
import Slot from '../components/Slot';
import ShipSummaryTable from '../components/ShipSummaryTable';
import React, { Component } from "react";
import { Factory } from "ed-forge";
import Slot from "../components/Slot";
import ShipSummaryTable from "../components/ShipSummaryTable";
class Outfit extends Component {
constructor(props) {
super(props);
constructor(props) {
super(props);
const ship = Factory.newShip(this.props.match.params.ship);
const ship = Factory.newShip(this.props.match.params.ship);
this.state = {
ship
};
this.state = {
ship
};
}
}
render() {
return (
<div
id="outfit"
className={'page'}
>
<ShipSummaryTable ship={this.state.ship}/>
{this.state.ship.getCoreModules().map(core =>
<Slot mod={core}/>
)}
{this.state.ship.getHardpoints().map(core =>
<Slot mod={core}/>
)}
</div>
);
}
render() {
return (
<div id="outfit" className={"page"}>
<ShipSummaryTable ship={this.state.ship} />
{this.state.ship.getCoreModules().map(core => (
<Slot mod={core} />
))}
{this.state.ship.getHardpoints().map(core => (
<Slot mod={core} />
))}
</div>
);
}
}
export default Outfit;

334
yarn.lock
View File

@@ -817,11 +817,340 @@
"@svgr/core" "^2.4.1"
loader-utils "^1.1.0"
"@types/anymatch@*":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.0.tgz#d1d55958d1fccc5527d4aba29fc9c4b942f563ff"
integrity sha512-7WcbyctkE8GTzogDb0ulRAEw7v8oIS54ft9mQTU7PfM0hp5e+8kpa+HeQ7IQrFbKtJXBKcZ4bh+Em9dTw5L6AQ==
"@types/babel-core@6.25.5":
version "6.25.5"
resolved "https://registry.yarnpkg.com/@types/babel-core/-/babel-core-6.25.5.tgz#7598b1287c2cb5a8e9150d60e4d4a8f2dbe29982"
integrity sha512-pecvyMrc46zY0AFYXVZWNmm/gekr7f32OBYCd9baOiIpOTFtNN0ormeWpJaG7p+MEzncUvNtJdYql94dZYZGsw==
dependencies:
"@types/babel-generator" "*"
"@types/babel-template" "*"
"@types/babel-traverse" "*"
"@types/babel-types" "*"
"@types/babylon" "*"
"@types/babel-generator@*":
version "6.25.2"
resolved "https://registry.yarnpkg.com/@types/babel-generator/-/babel-generator-6.25.2.tgz#fa13653ec2d34a4037be9c34dec32ae75bea04cc"
integrity sha512-W7PQkeDlYOqJblfNeqZARwj4W8nO+ZhQQZksU8+wbaKuHeUdIVUAdREO/Qb0FfNr3CY5Sq1gNtqsyFeZfS3iSw==
dependencies:
"@types/babel-types" "*"
"@types/babel-template@*":
version "6.25.1"
resolved "https://registry.yarnpkg.com/@types/babel-template/-/babel-template-6.25.1.tgz#03e23a893c16bab2ec00200ab51feccf488cae78"
integrity sha512-teJYxh35PbBaf9OY6YwLSQ7pRiWRnHCHmlqwfVSfexOsqHUf6hpNZ4FG9PfgnpBM1VRzRJVQF3SqqOtkcNrBZQ==
dependencies:
"@types/babel-types" "*"
"@types/babylon" "*"
"@types/babel-traverse@*":
version "6.25.4"
resolved "https://registry.yarnpkg.com/@types/babel-traverse/-/babel-traverse-6.25.4.tgz#269af6a25c80419b635c8fa29ae42b0d5ce2418c"
integrity sha512-+/670NaZE7qPvdh8EtGds32/2uHFKE5JeS+7ePH6nGwF8Wj8r671/RkTiJQP2k22nFntWEb9xQ11MFj7xEqI0g==
dependencies:
"@types/babel-types" "*"
"@types/babel-types@*":
version "7.0.4"
resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.4.tgz#bfd5b0d0d1ba13e351dff65b6e52783b816826c8"
integrity sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw==
"@types/babel__core@^7.0.4":
version "7.0.4"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.0.4.tgz#14b30c11113bad353cabfaea73e327b48edb0f0e"
integrity sha512-2Y2RK1BN5BRFfhneGfQA8mmFmTANbzGgS5uQPluoRqGNWb6uAcefqxzNbqgxPpmPkLqKapQfmYcyyl5iAQV+fA==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
"@types/babylon@*":
version "6.16.4"
resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.4.tgz#d3df72518b34a6a015d0dc58745cd238b5bb8ad2"
integrity sha512-8dZMcGPno3g7pJ/d0AyJERo+lXh9i1JhDuCUs+4lNIN9eUe5Yh6UCLrpgSEi05Ve2JMLauL2aozdvKwNL0px1Q==
dependencies:
"@types/babel-types" "*"
"@types/body-parser@*":
version "1.17.0"
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c"
integrity sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==
dependencies:
"@types/connect" "*"
"@types/node" "*"
"@types/case-sensitive-paths-webpack-plugin@2.1.2":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@types/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz#8fbac6359d31f75861f3c2f93a60768c8293c563"
integrity sha512-ah/PG3Iz3CLuHk8bczITiGvDcNLogZQfJDL+e7pcJXKdD/5Qp1FB6lxSjPsfXw8fHbhEfaJIq9om3hK6ir391g==
dependencies:
"@types/webpack" "*"
"@types/classnames@^2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.7.tgz#fb68cc9be8487e6ea5b13700e759bfbab7e0fefd"
integrity sha512-rzOhiQ55WzAiFgXRtitP/ZUT8iVNyllEpylJ5zHzR4vArUvMB39GTk+Zon/uAM0JxEFAWnwsxC2gH8s+tZ3Myg==
"@types/clean-css@*":
version "3.4.30"
resolved "https://registry.yarnpkg.com/@types/clean-css/-/clean-css-3.4.30.tgz#0052c136f5248002428e3638b37de4a39818641d"
integrity sha1-AFLBNvUkgAJCjjY4s33ko5gYZB0=
"@types/connect@*":
version "3.4.32"
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28"
integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==
dependencies:
"@types/node" "*"
"@types/dotenv@6.1.0":
version "6.1.0"
resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-6.1.0.tgz#fba2bfd1f28a46eadaa049f3313ebb89bdedfc53"
integrity sha512-gmbNb7V1LbJQA4MmH0hVFgqY1cyKsa6RvKC1Xrq0WBnZ0JuuvXKciXx/s8dN0LVXCJd8xO6wIaSFSyUIoGph9g==
dependencies:
"@types/node" "*"
"@types/eslint@4.16.5":
version "4.16.5"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-4.16.5.tgz#f0b56e011a3f7d01a380a568776f93ec56d7c911"
integrity sha512-103C3Adr8UaucsjYBDdKzL9AZk6c6F2gKIlyZOxv48KtmnvNcXoDsEddF4N/DZJNoVFg6NGSbzYodvxix3Md2g==
dependencies:
"@types/estree" "*"
"@types/json-schema" "*"
"@types/estree@*":
version "0.0.39"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
"@types/events@*":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86"
integrity sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==
"@types/express-serve-static-core@*":
version "4.16.0"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz#fdfe777594ddc1fe8eb8eccce52e261b496e43e7"
integrity sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==
dependencies:
"@types/events" "*"
"@types/node" "*"
"@types/range-parser" "*"
"@types/express@*":
version "4.16.0"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.0.tgz#6d8bc42ccaa6f35cf29a2b7c3333cb47b5a32a19"
integrity sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==
dependencies:
"@types/body-parser" "*"
"@types/express-serve-static-core" "*"
"@types/serve-static" "*"
"@types/fs-extra@5.0.4":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.4.tgz#b971134d162cc0497d221adde3dbb67502225599"
integrity sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g==
dependencies:
"@types/node" "*"
"@types/history@*":
version "4.7.2"
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.2.tgz#0e670ea254d559241b6eeb3894f8754991e73220"
integrity sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==
"@types/html-minifier@*":
version "3.5.2"
resolved "https://registry.yarnpkg.com/@types/html-minifier/-/html-minifier-3.5.2.tgz#f897a13d847a774e9b6fd91497e9b0e0ead71c35"
integrity sha512-yikK28/KlVyf8g9i/k+TDFlteLuZ6QQTUdVqvKtzEB+8DSLCTjxfh6IK45KnW4rYFI3Y8T4LWpYJMTmfJleWaQ==
dependencies:
"@types/clean-css" "*"
"@types/relateurl" "*"
"@types/uglify-js" "*"
"@types/html-webpack-plugin@3.2.0":
version "3.2.0"
resolved "https://registry.yarnpkg.com/@types/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#26b20854124bbcccbc22ccec715a1ba74583526c"
integrity sha512-in9rViBsTRB4ZApndZ12It68nGzSMHVK30JD7c49iLIHMFeTPbP7I7wevzMv7re2o0k5TlU6Ry/beyrmgWX7Bg==
dependencies:
"@types/html-minifier" "*"
"@types/tapable" "*"
"@types/webpack" "*"
"@types/http-proxy-middleware@*":
version "0.19.1"
resolved "https://registry.yarnpkg.com/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#042559a6c45a8f1694b3119902f92890d6ba0909"
integrity sha512-P4zpWTYFp1qXLjEPnjFVBB1KmR+b9Tt+RnzJxQSW4DTyh1lKDnYZi/Q1DzuupocX+7IYi2W7uIrbNybQg91H6A==
dependencies:
"@types/connect" "*"
"@types/http-proxy" "*"
"@types/node" "*"
"@types/http-proxy@*":
version "1.16.2"
resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.16.2.tgz#16cb373b52fff2aa2f389d23d940ed4a642349e5"
integrity sha512-GgqePmC3rlsn1nv+kx5OviPuUBU2omhnlXOaJSXFgOdsTcScNFap+OaCb2ip9Bm4m5L8EOehgT5d9M4uNB90zg==
dependencies:
"@types/events" "*"
"@types/node" "*"
"@types/jest@23.3.12":
version "23.3.12"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.12.tgz#7e0ced251fa94c3bc2d1023d4b84b2992fa06376"
integrity sha512-/kQvbVzdEpOq4tEWT79yAHSM4nH4xMlhJv2GrLVQt4Qmo8yYsPdioBM1QpN/2GX1wkfMnyXvdoftvLUr0LBj7Q==
"@types/json-schema@*":
version "7.0.1"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.1.tgz#fcaa655260285b8061850789f8268c51a4ec8ee1"
integrity sha512-NVQEMviDWjuen3UW+mU1J6fZ0WhOfG1yRce/2OTcbaz+fgmTw2cahx6N2wh0Yl+a+hg2UZj/oElZmtULWyGIsA==
"@types/less@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/less/-/less-3.0.0.tgz#2b76e6a2fecf7108c1c2b701ad846b605d8f2c7e"
integrity sha512-AUO7jdGrDi7x+7w2vYHNCom3NRjkspKSvamYp013Jyd/VYxpm0xtCupRZCdSX2IPx/W9C81Cj7nPXqQUj6MlQQ==
"@types/mime@*":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b"
integrity sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==
"@types/mini-css-extract-plugin@0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@types/mini-css-extract-plugin/-/mini-css-extract-plugin-0.2.0.tgz#afb037dbbd76f6c13803927c2751d194188b5d47"
integrity sha512-oHec+Vasp+K3C1Hb9HpwbA9Iw8ywqDgo9edWQJdBqxu05JH2AQsR56Zo5THpYbu1ieh/xJCvMRIHRdvrUBDmcA==
dependencies:
"@types/webpack" "*"
"@types/node@*", "@types/node@^10.12.18":
version "10.12.18"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67"
integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==
"@types/optimize-css-assets-webpack-plugin@1.3.3":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@types/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-1.3.3.tgz#e2b79784473ac5931ade079e4b70e525b35cd4ad"
integrity sha512-pnxKUggSNq3P+OtHkMc72BZ0FHvUCdMW5clkD+9MWcuWvuo+KJg3X5llMXFcDARJnqYfhaa3hVngnnwaSVwimg==
dependencies:
"@types/webpack" "*"
"@types/prop-types@*":
version "15.5.8"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.8.tgz#8ae4e0ea205fe95c3901a5a1df7f66495e3a56ce"
integrity sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==
"@types/range-parser@*":
version "1.2.3"
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
"@types/react-dom@^16.0.11":
version "16.0.11"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.11.tgz#bd10ccb0d9260343f4b9a49d4f7a8330a5c1f081"
integrity sha512-x6zUx9/42B5Kl2Vl9HlopV8JF64wLpX3c+Pst9kc1HgzrsH+mkehe/zmHMQTplIrR48H2gpU7ZqurQolYu8XBA==
dependencies:
"@types/react" "*"
"@types/react-loadable@^5.4.3":
version "5.4.3"
resolved "https://registry.yarnpkg.com/@types/react-loadable/-/react-loadable-5.4.3.tgz#b3891da6609a869b021319494b27ba85aaa83634"
integrity sha512-tmBmYSY1Ba0BgogDsWOA4W1Ml1P95Fk2XaxVXLYMEcocHmqseaibQOdKxkVii/TI9Pl+fJQGv4985E03sPa21A==
dependencies:
"@types/react" "*"
"@types/webpack" "*"
"@types/react-router-dom@^4.3.1":
version "4.3.1"
resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-4.3.1.tgz#71fe2918f8f60474a891520def40a63997dafe04"
integrity sha512-GbztJAScOmQ/7RsQfO4cd55RuH1W4g6V1gDW3j4riLlt+8yxYLqqsiMzmyuXBLzdFmDtX/uU2Bpcm0cmudv44A==
dependencies:
"@types/history" "*"
"@types/react" "*"
"@types/react-router" "*"
"@types/react-router@*":
version "4.4.3"
resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-4.4.3.tgz#ea68b4021cb576866f83365b2201411537423d50"
integrity sha512-8GmjakEBFNCLJbpg9jtDp1EDvFP0VkIPPKBpVwmB3Q+9whFoHu8rluMUXUE5SoGkEQvVOtgJzWmUsJojNpFMQQ==
dependencies:
"@types/history" "*"
"@types/react" "*"
"@types/react@*", "@types/react@^16.7.18":
version "16.7.18"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.7.18.tgz#f4ce0d539a893dd61e36cd11ae3a5e54f5a48337"
integrity sha512-Tx4uu3ppK53/iHk6VpamMP3f3ahfDLEVt3ZQc8TFm30a1H3v9lMsCntBREswZIW/SKrvJjkb3Hq8UwO6GREBng==
dependencies:
"@types/prop-types" "*"
csstype "^2.2.0"
"@types/relateurl@*":
version "0.2.28"
resolved "https://registry.yarnpkg.com/@types/relateurl/-/relateurl-0.2.28.tgz#6bda7db8653fa62643f5ee69e9f69c11a392e3a6"
integrity sha1-a9p9uGU/piZD9e5p6facEaOS46Y=
"@types/resolve@0.0.8":
version "0.0.8"
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194"
integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==
dependencies:
"@types/node" "*"
"@types/serve-static@*":
version "1.13.2"
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48"
integrity sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==
dependencies:
"@types/express-serve-static-core" "*"
"@types/mime" "*"
"@types/tapable@*":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370"
integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==
"@types/tapable@1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.2.tgz#e13182e1b69871a422d7863e11a4a6f5b814a4bd"
integrity sha512-42zEJkBpNfMEAvWR5WlwtTH22oDzcMjFsL9gDGExwF8X8WvAiw7Vwop7hPw03QT8TKfec83LwbHj6SvpqM4ELQ==
"@types/uglify-js@*":
version "3.0.4"
resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082"
integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==
dependencies:
source-map "^0.6.1"
"@types/webpack-dev-server@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.1.1.tgz#12ae26194b3e1b8a317559592659921f282583c2"
integrity sha512-TnEQPT+OZjWV2kRyNs0RPMDQmBCiLrr/ZhKSgFNF6aM4O/moUAfo2Yu3MIMUjoi3aE/02RH1iVR+Y6mWmXOlVA==
dependencies:
"@types/express" "*"
"@types/http-proxy-middleware" "*"
"@types/serve-static" "*"
"@types/webpack" "*"
"@types/webpack-manifest-plugin@2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@types/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.0.tgz#243674dde09b8f80c9709f2340a0614cfbeb4f94"
integrity sha512-ApcFwlQVwS5UI/uzESw8lO4wDdAY4PIj4ZX0SZv7MnbR9JSmStBNrpkniDvERB/CTTEHPaXDvTZwG1fCPV9h4g==
dependencies:
"@types/webpack" "*"
"@types/webpack@*", "@types/webpack@4.4.22":
version "4.4.22"
resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.4.22.tgz#c4a5ea8b74a31b579537515bcfe86d2b2a34382c"
integrity sha512-PxAAzli3krZX9rCeONSR5Z9v4CR/2HPsKsiVRFNDo9OZefN+dTemteMHZnYkddOu4bqoYqJTJ724gLy0ZySXOw==
dependencies:
"@types/anymatch" "*"
"@types/node" "*"
"@types/tapable" "*"
"@types/uglify-js" "*"
source-map "^0.6.0"
"@webassemblyjs/ast@1.7.6":
version "1.7.6"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.6.tgz#3ef8c45b3e5e943a153a05281317474fef63e21e"
@@ -2689,6 +3018,11 @@ cssstyle@^1.0.0, cssstyle@^1.1.1:
dependencies:
cssom "0.3.x"
csstype@^2.2.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.0.tgz#6cf7b2fa7fc32aab3d746802c244d4eda71371a2"
integrity sha512-by8hi8BlLbowQq0qtkx54d9aN73R9oUW20HISpka5kmgsR9F7nnxgfsemuR2sdCKZh+CDNf5egW9UZMm4mgJRg==
cyclist@~0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"