[WIP] Improve PIXI export and preview in newIDE

This commit is contained in:
Florian Rival
2017-05-25 13:45:48 +02:00
parent ae49eb02c4
commit 18f9b66615
16 changed files with 293 additions and 114 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

View File

@@ -261,18 +261,12 @@ gd::String EventsCodeGenerator::GenerateConditionCode(gd::Instruction & conditio
&& find_if(scene.GetObjectGroups().begin(), scene.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == scene.GetObjectGroups().end()
&& find_if(project.GetObjectGroups().begin(), project.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == project.GetObjectGroups().end() )
{
cout << "Bad object (" << objectInParameter << ") in a parameter of a condition " << condition.GetType() << endl;
condition.SetParameter(pNb, gd::Expression(""));
condition.SetType("");
}
else if ( !instrInfos.parameters[pNb].supplementaryInformation.empty()
&& gd::GetTypeOfObject(project, scene, objectInParameter) != instrInfos.parameters[pNb].supplementaryInformation )
{
cout << "Bad object type in a parameter of a condition " << condition.GetType() << endl;
cout << "Condition wanted " << instrInfos.parameters[pNb].supplementaryInformation << endl;
cout << "Condition wanted " << instrInfos.parameters[pNb].supplementaryInformation << " of type " << instrInfos.parameters[pNb].supplementaryInformation << endl;
cout << "Condition has received " << objectInParameter << " of type " << gd::GetTypeOfObject(project, scene, objectInParameter) << endl;
condition.SetParameter(pNb, gd::Expression(""));
condition.SetType("");
}
@@ -407,17 +401,12 @@ gd::String EventsCodeGenerator::GenerateActionCode(gd::Instruction & action, Eve
&& find_if(scene.GetObjectGroups().begin(), scene.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == scene.GetObjectGroups().end()
&& find_if(project.GetObjectGroups().begin(), project.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == project.GetObjectGroups().end() )
{
cout << "Bad object (" << objectInParameter << ") in a parameter of an action " << action.GetType() << endl;
action.SetParameter(pNb, gd::Expression(""));
action.SetType("");
}
else if ( !instrInfos.parameters[pNb].supplementaryInformation.empty()
&& gd::GetTypeOfObject(project, scene, objectInParameter) != instrInfos.parameters[pNb].supplementaryInformation )
{
cout << "Bad object type in parameter "+gd::String::From(pNb)+" of an action " << action.GetType() << endl;
cout << "Action wanted " << instrInfos.parameters[pNb].supplementaryInformation << " of type " << instrInfos.parameters[pNb].supplementaryInformation << endl;
cout << "Action has received " << objectInParameter << " of type " << gd::GetTypeOfObject(project, scene, objectInParameter) << endl;
action.SetParameter(pNb, gd::Expression(""));
action.SetType("");
}

View File

@@ -7,7 +7,7 @@
"devDependencies": {
"flow-bin": "^0.46.0",
"prettier": "^0.22.0",
"react-scripts": "1.0.1",
"react-scripts": "1.0.6",
"shelljs": "^0.7.7"
},
"dependencies": {

View File

@@ -1,11 +1,12 @@
import React, { Component } from 'react';
import Dialog from 'material-ui/Dialog';
import FlatButton from 'material-ui/FlatButton';
import nodeFileSystem from './NodeFileSystem';
import { findGDJS } from './LocalGDJSFinder';
import localFileSystem from './LocalFileSystem';
import assignIn from 'lodash/assignIn';
const gd = global.gd;
export default class ExportDialog extends Component {
export default class LocalExportDialog extends Component {
constructor(props) {
super(props);
@@ -30,22 +31,27 @@ export default class ExportDialog extends Component {
const { project } = this.props;
if (!project) return;
const fileSystem = assignIn(new gd.AbstractFileSystemJS(), nodeFileSystem);
const outputDir = '/Users/florian/desktop/testexport';
const gdjsRoot = '/Users/florian/Projects/F/GD/Binaries/Output/Release_Darwin/JsPlatform';
const exportForCordova = false;
const exporter = new gd.Exporter(
fileSystem,
gdjsRoot,
);
exporter.exportWholePixiProject(
project,
outputDir,
false,
exportForCordova
);
console.log(exporter.getLastError());
exporter.delete();
findGDJS(gdjsRoot => {
if (!gdjsRoot) {
//TODO
console.log("Could not find GDJS");
return;
}
console.log("GDJS found in ", gdjsRoot);
const fileSystem = assignIn(new gd.AbstractFileSystemJS(), localFileSystem);
const outputDir = '/Users/florian/desktop/testexport';
const exportForCordova = false;
const exporter = new gd.Exporter(fileSystem, gdjsRoot);
exporter.exportWholePixiProject(
project,
outputDir,
false,
exportForCordova
);
console.log(exporter.getLastError());
exporter.delete();
});
};
render() {

View File

@@ -1,6 +1,7 @@
import optionalRequire from '../Utils/OptionalRequire.js';
var fs = optionalRequire('fs-extra');
var path = optionalRequire('path');
var os = optionalRequire('os');
const gd = global.gd;
export default {
@@ -34,7 +35,7 @@ export default {
}
},
getTempDir: function() {
return '/tmp/';
return os.tmpdir();
},
fileNameFrom: function(fullpath) {
if (this._isExternalURL(fullpath)) return fullpath;

View File

@@ -0,0 +1,43 @@
// @flow
import optionalRequire from '../Utils/OptionalRequire.js';
import path from 'path';
const fs = optionalRequire('fs');
const process = optionalRequire('process');
var isWin = process && /^win/.test(process.platform);
var isDarwin = process && /^darwin/.test(process.platform);
const tryPath = (
path: string,
onExists: (string) => void,
onNoAccess: Function
) =>
fs.access(path, fs.constants.R_OK, err => {
if (!err) onExists(path);
else onNoAccess();
});
export const findGDJS = (cb: (?string) => void) => {
if (!process || !fs) return '';
const cwd = process.cwd();
const releaseFolder = isWin
? 'Release_Windows'
: isDarwin ? 'Release_Darwin' : 'Release_Linux';
tryPath(path.join(cwd, 'JsPlatform'), cb, () => {
tryPath(path.join(cwd, '..', 'JsPlatform'), cb, () => {
const devPath = path.join(
cwd,
'..',
'..',
'Binaries',
'Output',
releaseFolder,
'JsPlatform'
);
tryPath(devPath, cb, () => {
cb(null);
});
});
});
};

View File

@@ -0,0 +1,64 @@
// @flow
import localFileSystem from './LocalFileSystem';
import optionalRequire from '../Utils/OptionalRequire';
import { findGDJS } from './LocalGDJSFinder';
import assignIn from 'lodash/assignIn';
import path from 'path';
const electron = optionalRequire('electron');
const BrowserWindow = electron ? electron.remote.BrowserWindow : null;
const gd = global.gd;
export default class LocalPreviewLauncher {
static _openPreviewWindow = (project, gamePath): void => {
if (!BrowserWindow) return;
const win = new BrowserWindow({
width: project.getMainWindowDefaultWidth(),
height: project.getMainWindowDefaultHeight(),
title: `Preview of ${project.getName()}`,
});
win.loadURL(`file://${gamePath}/index.html`);
};
static launchLayoutPreview = (project, layout): Promise<any> => {
if (!project || !layout) return Promise.reject();
return new Promise((resolve, reject) => {
findGDJS(gdjsRoot => {
if (!gdjsRoot) {
//TODO
console.error('Could not find GDJS');
return reject();
}
console.info('GDJS found in ', gdjsRoot);
const fileSystem = assignIn(
new gd.AbstractFileSystemJS(),
localFileSystem
);
const outputDir = path.join(fileSystem.getTempDir(), 'preview');
const exporter = new gd.Exporter(fileSystem, gdjsRoot);
var t0 = performance.now();
exporter.exportLayoutForPixiPreview(project, layout, outputDir);
exporter.delete();
var t1 = performance.now();
console.log(
'Call to exporter.exportLayoutForPixiPreview took ' +
(t1 - t0) +
' milliseconds.'
);
LocalPreviewLauncher._openPreviewWindow(project, outputDir);
resolve();
});
});
};
static launchExternalLayoutPreview = (): Promise<any> => {
throw new Error('todo');
};
}

View File

@@ -1,18 +1,40 @@
// @flow
import Bridge from './Bridge.js';
import React, { Component } from 'react';
import Window from '../Utils/Window.js';
const gd = global.gd;
type _State = {
loading: boolean,
};
type _Props = {
serverPort: number,
isIntegrated: boolean,
editor: string,
editedElementName: string,
children: React$Element<any>,
};
class ExternalEditor extends Component {
constructor(props) {
state: _State;
props: _Props;
bridge: Bridge;
editorOpened: boolean = false;
lastShowCommandDate: number = 0;
sendingUpdate: boolean = false;
editor: any = null;
_serializedObject: any = null;
constructor(props: _Props) {
super(props);
this.bridge = new Bridge();
this.lastShowCommandDate = 0;
this.state = {
loading: false,
};
this.editorOpened = false;
if (this.bridge.isSupported()) {
console.log('Connection to an external editor...');
@@ -105,12 +127,13 @@ class ExternalEditor extends Component {
console.log('Update send done');
};
launchPreview = () => {
launchPreview = (): Promise<any> => {
this.sendUpdate();
this.bridge.send('requestPreview', undefined);
return Promise.resolve();
};
editObject = object => {
editObject = (object: any) => {
this.sendUpdate();
this.bridge.send('editObject', object.getName());
};
@@ -119,12 +142,12 @@ class ExternalEditor extends Component {
* Request an update to the server. Note that if forcedUpdate is set to false,
* the server may not send back an update (for example if nothing changed).
*/
requestUpdate = (scope = '', forcedUpdate = false) => {
requestUpdate = (scope: string = '', forcedUpdate: boolean = false) => {
const command = forcedUpdate ? 'requestForcedUpdate' : 'requestUpdate';
this.bridge.send(command, undefined, scope);
};
_onUpdateReceived = (payload, scope) => {
_onUpdateReceived = (payload: any, scope: string) => {
console.log('Received project update from server');
if (scope !== '') {
console.warn(`Not implemented: received ${scope} update from server`);
@@ -179,7 +202,8 @@ class ExternalEditor extends Component {
loading: this.state.loading,
ref: editor => this.editor = editor,
requestUpdate: () => this.requestUpdate('', true),
onPreview: this.launchPreview,
onLayoutPreview: this.launchPreview,
onExternalLayoutPreview: this.launchPreview,
onEditObject: this.editObject,
singleEditor: true,
});

View File

@@ -25,15 +25,17 @@ export default class MainFrameToolbar extends Component {
return (
<Toolbar>
<ToolbarGroup firstChild={true}>
<ToolbarIcon
onClick={this.props.toggleProjectManager}
src="res/ribbon_default/projectManager32.png"
disabled={!this.props.hasProject}
/>
<ToolbarIcon
onClick={this.props.openProject}
src="res/ribbon_default/open32.png"
/>
{this.props.showProjectIcons &&
<ToolbarIcon
onClick={this.props.toggleProjectManager}
src="res/ribbon_default/projectManager32.png"
disabled={!this.props.hasProject}
/>}
{this.props.showProjectIcons &&
<ToolbarIcon
onClick={this.props.openProject}
src="res/ribbon_default/open32.png"
/>}
{this.isDev &&
<IconMenu
iconButtonElement={

View File

@@ -9,7 +9,6 @@ import NavigationClose from 'material-ui/svg-icons/navigation/close';
import Toolbar from './Toolbar';
import StartPage from './StartPage';
import ProjectTitlebar from './ProjectTitlebar';
import ExportDialog from '../Export/ExportDialog';
import ConfirmCloseDialog from './ConfirmCloseDialog';
import EventsSheetContainer from '../EventsSheet/EventsSheetContainer.js';
import SceneEditor from '../SceneEditor';
@@ -29,6 +28,7 @@ import {
getCurrentTab,
closeProjectTabs,
} from './EditorTabsHandler';
import { watchPromiseInState } from '../Utils/WatchPromiseInState';
import FileOpener from '../Utils/FileOpener';
import FileWriter from '../Utils/FileWriter';
@@ -40,6 +40,7 @@ class MainFrame extends Component {
super();
this.state = {
loadingProject: false,
previewLoading: false,
currentProject: null,
projectManagerOpen: false,
editorTabs: getEditorTabsInitialState(),
@@ -91,10 +92,6 @@ class MainFrame extends Component {
return editorTab.editorRef.getSerializedElements();
};
requestUpdate = () => {
this.props.requestUpdate();
};
loadBuiltinGame = () => {
this.setState(
{
@@ -160,7 +157,11 @@ class MainFrame extends Component {
project={this.state.currentProject}
layoutName={name}
setToolbar={this.setEditorToolbar}
onPreview={this.props.onPreview}
onPreview={(project, layout) =>
watchPromiseInState(this, 'previewLoading', () =>
this.props.onLayoutPreview(project, layout)).catch(() => {
/*TODO: Error*/
})}
showPreviewButton
onEditObject={this.props.onEditObject}
/>
@@ -180,7 +181,14 @@ class MainFrame extends Component {
project={this.state.currentProject}
externalLayoutName={name}
setToolbar={this.setEditorToolbar}
onPreview={this.props.onPreview}
onPreview={(project, externalLayout) =>
watchPromiseInState(this, 'previewLoading', () =>
this.props.onExternalLayoutPreview(
project,
externalLayout
)).catch(() => {
/*TODO: Error*/
})}
showPreviewButton
onEditObject={this.props.onEditObject}
/>
@@ -285,7 +293,7 @@ class MainFrame extends Component {
this.state.currentProject.delete();
this.setState({
currentProject: null,
})
});
}
);
});
@@ -293,7 +301,7 @@ class MainFrame extends Component {
_onExportProject = () => {
this.exportDialog.show();
}
};
_onChangeEditorTab = value => {
this.setState({
@@ -316,6 +324,10 @@ class MainFrame extends Component {
const {
currentProject,
} = this.state;
const ExportDialog = this.props.exportDialogComponent;
const showLoader = this.state.loadingProject ||
this.state.previewLoading ||
this.props.loading;
return (
<MuiThemeProvider muiTheme={defaultTheme}>
@@ -344,11 +356,12 @@ class MainFrame extends Component {
</Drawer>
<Toolbar
ref={toolbar => this.toolbar = toolbar}
showProjectIcons={!this.props.singleEditor}
hasProject={!!this.state.currentProject}
toggleProjectManager={this.toggleProjectManager}
openProject={this._onOpenFromFile}
loadBuiltinGame={this.loadBuiltinGame}
requestUpdate={this.requestUpdate}
requestUpdate={this.props.requestUpdate}
/>
<Tabs
value={getCurrentTabIndex(this.state.editorTabs)}
@@ -369,14 +382,16 @@ class MainFrame extends Component {
</Tab>
))}
</Tabs>
<LoaderModal show={this.state.loadingProject || this.props.loading} />
<LoaderModal show={showLoader} />
<ConfirmCloseDialog
ref={confirmCloseDialog => this.confirmCloseDialog = confirmCloseDialog}
/>
<ExportDialog
ref={exportDialog => this.exportDialog = exportDialog}
project={this.state.currentProject}
ref={confirmCloseDialog =>
this.confirmCloseDialog = confirmCloseDialog}
/>
{!!ExportDialog &&
<ExportDialog
ref={exportDialog => this.exportDialog = exportDialog}
project={this.state.currentProject}
/>}
</div>
</MuiThemeProvider>
);

View File

@@ -33,7 +33,7 @@ export default class ProjectManager extends React.Component {
<ListItem
key="export"
primaryText="Export"
leftIcon={<ListIcon src="res/ribbon_default/close32.png" />}
leftIcon={<ListIcon src="res/ribbon_default/export32.png" />}
onTouchTap={() => this.props.onExportProject()}
/>,
]}

View File

@@ -66,6 +66,7 @@ export default class ExternalLayoutEditor extends BaseEditor {
initialUiSettings={serializeToJSObject(
externalLayout.getAssociatedSettings()
)}
onPreview={() => this.props.onPreview(project, externalLayout)}
/>
);
}

View File

@@ -47,6 +47,7 @@ export default class SceneEditor extends BaseEditor {
initialUiSettings={serializeToJSObject(
layout.getAssociatedSettings()
)}
onPreview={() => this.props.onPreview(project, layout)}
/>
);
}

View File

@@ -0,0 +1,25 @@
// @flow
import React from 'react';
export const watchPromiseInState = (
component: React.Component<*, *, *>,
stateField: string,
fn: () => Promise<any>
) => {
component.setState({
[stateField]: true,
});
return fn()
.then(value => {
component.setState({
[stateField]: false,
});
return value;
})
.catch(err => {
component.setState({
[stateField]: false,
});
throw err;
});
};

View File

@@ -3,6 +3,8 @@ import ReactDOM from 'react-dom';
import MainFrame from './MainFrame';
import ExternalEditor from './ExternalEditor';
import Window from './Utils/Window';
import LocalPreviewLauncher from './Export/LocalPreviewLauncher';
import LocalExportDialog from './Export/LocalExportDialog';
import injectTapEventPlugin from 'react-tap-event-plugin';
import registerServiceWorker from './registerServiceWorker';
import 'react-virtualized/styles.css'; // Styles for react-virtualized Table
@@ -26,7 +28,11 @@ if (appArguments['server-port']) {
</ExternalEditor>
);
} else {
app = <MainFrame />;
app = <MainFrame
onLayoutPreview={LocalPreviewLauncher.launchLayoutPreview}
onExternalLayoutPreview={LocalPreviewLauncher.launchExternalLayoutPreview}
exportDialogComponent={LocalExportDialog}
/>;
}
ReactDOM.render(app, document.getElementById('root'));

View File

@@ -759,15 +759,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1:
babel-plugin-syntax-async-generators "^6.5.0"
babel-runtime "^6.22.0"
babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.8.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e"
dependencies:
babel-helper-remap-async-to-generator "^6.22.0"
babel-plugin-syntax-async-functions "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-async-to-generator@^6.24.1:
babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
dependencies:
@@ -775,6 +767,14 @@ babel-plugin-transform-async-to-generator@^6.24.1:
babel-plugin-syntax-async-functions "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-async-to-generator@^6.8.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e"
dependencies:
babel-helper-remap-async-to-generator "^6.22.0"
babel-plugin-syntax-async-functions "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-class-constructor-call@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9"
@@ -1015,14 +1015,14 @@ babel-plugin-transform-function-bind@^6.22.0:
babel-plugin-syntax-function-bind "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-object-rest-spread@6.22.0:
babel-plugin-transform-object-rest-spread@6.22.0, babel-plugin-transform-object-rest-spread@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc"
dependencies:
babel-plugin-syntax-object-rest-spread "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-object-rest-spread@6.23.0, babel-plugin-transform-object-rest-spread@^6.22.0:
babel-plugin-transform-object-rest-spread@6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921"
dependencies:
@@ -1374,11 +1374,11 @@ babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22
lodash "^4.2.0"
to-fast-properties "^1.0.1"
babylon@6.15.0, babylon@^6.11.0:
babylon@6.15.0, babylon@^6.11.0, babylon@^6.15.0:
version "6.15.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e"
babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0:
babylon@^6.13.0, babylon@^6.17.0:
version "6.17.1"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f"
@@ -1687,7 +1687,11 @@ capture-stack-trace@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
case-sensitive-paths-webpack-plugin@2.0.0, case-sensitive-paths-webpack-plugin@^2.0.0:
case-sensitive-paths-webpack-plugin@1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-1.1.4.tgz#8aaedd5699a86cac2b34cf40d9b4145758978472"
case-sensitive-paths-webpack-plugin@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.0.0.tgz#60142d7d0beabdb35676ef0aeace3027da0578ba"
@@ -1935,7 +1939,7 @@ configstore@^3.0.0:
write-file-atomic "^2.0.0"
xdg-basedir "^3.0.0"
connect-history-api-fallback@1.3.0, connect-history-api-fallback@^1.3.0:
connect-history-api-fallback@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169"
@@ -2641,9 +2645,9 @@ escope@^3.6.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"
eslint-config-react-app@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-1.0.1.tgz#8ce98d0b05d7075711ad3971458ed1fb3ab88855"
eslint-config-react-app@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-1.0.4.tgz#c0178f535a922236c53daafea4f397203db7d9af"
eslint-import-resolver-node@^0.2.0:
version "0.2.3"
@@ -2692,9 +2696,9 @@ eslint-plugin-import@2.2.0:
minimatch "^3.0.3"
pkg-up "^1.0.0"
eslint-plugin-jsx-a11y@5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.0.1.tgz#48e678891fec9fe1e53ef53adc2f7d05fee6640c"
eslint-plugin-jsx-a11y@5.0.3:
version "5.0.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.0.3.tgz#4a939f76ec125010528823331bf948cc573380b6"
dependencies:
aria-query "^0.5.0"
array-includes "^3.0.3"
@@ -5733,9 +5737,9 @@ react-color@2.11.7:
reactcss "^1.2.0"
tinycolor2 "^1.1.2"
react-dev-utils@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-1.0.1.tgz#3eee71e3a28d31810838d3464576b2b41b06052c"
react-dev-utils@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-2.0.1.tgz#5843504d89f038f046258a871fc26071775fc065"
dependencies:
"@timer/detect-port" "1.1.3"
address "1.0.1"
@@ -5753,6 +5757,7 @@ react-dev-utils@^1.0.1:
shell-quote "1.6.1"
sockjs-client "1.1.4"
strip-ansi "3.0.1"
text-table "0.2.0"
react-dnd-html5-backend@^2.1.2:
version "2.3.0"
@@ -5790,14 +5795,14 @@ react-dom@15.4.2:
loose-envify "^1.1.0"
object-assign "^4.1.0"
react-error-overlay@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-1.0.1.tgz#b22d7b28ce7c828cf407b1961e129a3b5a54baa2"
react-error-overlay@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-1.0.6.tgz#f40ba0791f05b5bb973f4ff66454a7c70f324fdc"
dependencies:
anser "1.2.5"
babel-code-frame "6.22.0"
babel-runtime "6.23.0"
react-dev-utils "^1.0.1"
react-dev-utils "^2.0.1"
settle-promise "1.0.0"
source-map "0.5.6"
@@ -5866,9 +5871,9 @@ react-mosaic-component@^0.3.4:
react-dnd-html5-backend "^2.1.2"
uuid "^3.0.1"
react-scripts@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.0.1.tgz#369e3fc8000e761b8fbbd232033e34c79902e580"
react-scripts@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.0.6.tgz#09db92d4dd756f940b6eb71739b6f4b8232cefe3"
dependencies:
autoprefixer "7.1.0"
babel-core "6.24.1"
@@ -5877,31 +5882,28 @@ react-scripts@1.0.1:
babel-loader "7.0.0"
babel-preset-react-app "^3.0.0"
babel-runtime "6.23.0"
case-sensitive-paths-webpack-plugin "2.0.0"
case-sensitive-paths-webpack-plugin "1.1.4"
chalk "1.1.3"
connect-history-api-fallback "1.3.0"
cross-spawn "4.0.2"
css-loader "0.28.1"
dotenv "4.0.0"
eslint "3.19.0"
eslint-config-react-app "^1.0.1"
eslint-config-react-app "^1.0.4"
eslint-loader "1.7.1"
eslint-plugin-flowtype "2.33.0"
eslint-plugin-import "2.2.0"
eslint-plugin-jsx-a11y "5.0.1"
eslint-plugin-jsx-a11y "5.0.3"
eslint-plugin-react "7.0.1"
extract-text-webpack-plugin "2.1.0"
file-loader "0.11.1"
fs-extra "3.0.1"
html-webpack-plugin "2.28.0"
inquirer "3.0.6"
jest "20.0.3"
object-assign "4.1.1"
postcss-flexbugs-fixes "3.0.0"
postcss-loader "2.0.5"
promise "7.1.1"
react-dev-utils "^1.0.1"
react-error-overlay "^1.0.1"
react-dev-utils "^2.0.1"
react-error-overlay "^1.0.6"
style-loader "0.17.0"
sw-precache-webpack-plugin "0.9.1"
url-loader "0.5.8"
@@ -5999,7 +6001,7 @@ readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.2.6:
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.2.2, readable-stream@^2.2.6:
version "2.2.9"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8"
dependencies:
@@ -6011,7 +6013,7 @@ readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.
string_decoder "~1.0.0"
util-deprecate "~1.0.1"
readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2:
readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5:
version "2.2.3"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.3.tgz#9cf49463985df016c8ae8813097a9293a9b33729"
dependencies:
@@ -6314,15 +6316,15 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"
rimraf@2, rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
version "2.5.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
dependencies:
glob "^7.0.5"
rimraf@~2.5.1, rimraf@~2.5.4:
version "2.5.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
dependencies:
glob "^7.0.5"
@@ -6899,7 +6901,7 @@ test-exclude@^4.1.0:
read-pkg-up "^1.0.1"
require-main-filename "^1.0.1"
text-table@~0.2.0:
text-table@0.2.0, text-table@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"