Moved Knob into project. Replace mediainfo. Unmount client
when switching pages.
This commit is contained in:
parent
8469c37254
commit
a28938aaa2
13 changed files with 594 additions and 90 deletions
|
@ -5,20 +5,18 @@
|
|||
"dependencies": {
|
||||
"material-design-icons": "^3.0.1",
|
||||
"react": "^16.3.2",
|
||||
"react-canvas-knob": "^0.5.0",
|
||||
"react-dom": "^16.3.2",
|
||||
"react-draggable": "^3.0.5",
|
||||
"react-router": "^4.2.0",
|
||||
"react-router-dom": "^4.2.2",
|
||||
"react-scripts": "1.1.4",
|
||||
"react-transform-catch-errors": "^1.0.2",
|
||||
"react-transform-hmr": "^1.0.4",
|
||||
"redbox-react": "^1.6.0",
|
||||
"startaudiocontext": "^1.2.1"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"build": "NODE_ENV=production react-scripts build",
|
||||
"test": "react-scripts test --env=jsdom",
|
||||
"eject": "react-scripts eject"
|
||||
}
|
||||
|
|
365
frontend/src/Knob.js
Normal file
365
frontend/src/Knob.js
Normal file
|
@ -0,0 +1,365 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
class Knob extends React.Component {
|
||||
static propTypes = {
|
||||
value: PropTypes.number.isRequired,
|
||||
onChange: PropTypes.func.isRequired,
|
||||
onChangeEnd: PropTypes.func,
|
||||
min: PropTypes.number,
|
||||
max: PropTypes.number,
|
||||
step: PropTypes.number,
|
||||
log: PropTypes.bool,
|
||||
width: PropTypes.number,
|
||||
height: PropTypes.number,
|
||||
thickness: PropTypes.number,
|
||||
lineCap: PropTypes.oneOf(['butt', 'round']),
|
||||
bgColor: PropTypes.string,
|
||||
fgColor: PropTypes.string,
|
||||
inputColor: PropTypes.string,
|
||||
font: PropTypes.string,
|
||||
fontWeight: PropTypes.string,
|
||||
clockwise: PropTypes.bool,
|
||||
cursor: PropTypes.oneOfType([
|
||||
PropTypes.number,
|
||||
PropTypes.bool,
|
||||
]),
|
||||
stopper: PropTypes.bool,
|
||||
readOnly: PropTypes.bool,
|
||||
disableTextInput: PropTypes.bool,
|
||||
displayInput: PropTypes.bool,
|
||||
displayCustom: PropTypes.func,
|
||||
angleArc: PropTypes.number,
|
||||
angleOffset: PropTypes.number,
|
||||
disableMouseWheel: PropTypes.bool,
|
||||
title: PropTypes.string,
|
||||
className: PropTypes.string,
|
||||
canvasClassName: PropTypes.string,
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
onChangeEnd: () => {},
|
||||
min: 0,
|
||||
max: 100,
|
||||
step: 1,
|
||||
log: false,
|
||||
width: 200,
|
||||
height: 200,
|
||||
thickness: 0.35,
|
||||
lineCap: 'butt',
|
||||
bgColor: '#EEE',
|
||||
fgColor: '#EA2',
|
||||
inputColor: '',
|
||||
font: 'Arial',
|
||||
fontWeight: 'bold',
|
||||
clockwise: true,
|
||||
cursor: false,
|
||||
stopper: true,
|
||||
readOnly: false,
|
||||
disableTextInput: false,
|
||||
displayInput: true,
|
||||
angleArc: 360,
|
||||
angleOffset: 0,
|
||||
disableMouseWheel: false,
|
||||
className: null,
|
||||
canvasClassName: null,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.w = this.props.width || 200;
|
||||
this.h = this.props.height || this.w;
|
||||
this.cursorExt = this.props.cursor === true ? 0.3 : this.props.cursor / 100;
|
||||
this.angleArc = this.props.angleArc * Math.PI / 180;
|
||||
this.angleOffset = this.props.angleOffset * Math.PI / 180;
|
||||
this.startAngle = (1.5 * Math.PI) + this.angleOffset;
|
||||
this.endAngle = (1.5 * Math.PI) + this.angleOffset + this.angleArc;
|
||||
this.digits = Math.max(
|
||||
String(Math.abs(this.props.min)).length,
|
||||
String(Math.abs(this.props.max)).length,
|
||||
2
|
||||
) + 2;
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.drawCanvas();
|
||||
if (!this.props.readOnly) {
|
||||
this.canvasRef.addEventListener('touchstart', this.handleTouchStart, { passive: false });
|
||||
}
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
if (nextProps.width && this.w !== nextProps.width) {
|
||||
this.w = nextProps.width;
|
||||
}
|
||||
if (nextProps.height && this.h !== nextProps.height) {
|
||||
this.h = nextProps.height;
|
||||
}
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
this.drawCanvas();
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.canvasRef.removeEventListener('touchstart', this.handleTouchStart);
|
||||
}
|
||||
|
||||
getArcToValue = (v) => {
|
||||
let startAngle;
|
||||
let endAngle;
|
||||
const angle = !this.props.log
|
||||
? ((v - this.props.min) * this.angleArc) / (this.props.max - this.props.min)
|
||||
: Math.log(Math.pow((v / this.props.min), this.angleArc)) / Math.log(this.props.max / this.props.min);
|
||||
if (!this.props.clockwise) {
|
||||
startAngle = this.endAngle + 0.00001;
|
||||
endAngle = startAngle - angle - 0.00001;
|
||||
} else {
|
||||
startAngle = this.startAngle - 0.00001;
|
||||
endAngle = startAngle + angle + 0.00001;
|
||||
}
|
||||
if (this.props.cursor) {
|
||||
startAngle = endAngle - this.cursorExt;
|
||||
endAngle += this.cursorExt;
|
||||
}
|
||||
return {
|
||||
startAngle,
|
||||
endAngle,
|
||||
acw: !this.props.clockwise && !this.props.cursor,
|
||||
};
|
||||
};
|
||||
|
||||
// Calculate ratio to scale canvas to avoid blurriness on HiDPI devices
|
||||
getCanvasScale = (ctx) => {
|
||||
const devicePixelRatio = window.devicePixelRatio ||
|
||||
window.screen.deviceXDPI / window.screen.logicalXDPI || // IE10
|
||||
1;
|
||||
const backingStoreRatio = ctx.webkitBackingStorePixelRatio || 1;
|
||||
return devicePixelRatio / backingStoreRatio;
|
||||
};
|
||||
|
||||
coerceToStep = (v) => {
|
||||
let val = !this.props.log
|
||||
? (~~(((v < 0) ? -0.5 : 0.5) + (v / this.props.step))) * this.props.step
|
||||
: Math.pow(this.props.step, ~~(((Math.abs(v) < 1) ? -0.5 : 0.5) + (Math.log(v) / Math.log(this.props.step))));
|
||||
val = Math.max(Math.min(val, this.props.max), this.props.min);
|
||||
if (isNaN(val)) { val = 0; }
|
||||
return Math.round(val * 1000) / 1000;
|
||||
};
|
||||
|
||||
eventToValue = (e) => {
|
||||
const bounds = this.canvasRef.getBoundingClientRect();
|
||||
const x = e.clientX - bounds.left;
|
||||
const y = e.clientY - bounds.top;
|
||||
let a = Math.atan2(x - (this.w / 2), (this.w / 2) - y) - this.angleOffset;
|
||||
if (!this.props.clockwise) {
|
||||
a = this.angleArc - a - (2 * Math.PI);
|
||||
}
|
||||
if (this.angleArc !== Math.PI * 2 && (a < 0) && (a > -0.5)) {
|
||||
a = 0;
|
||||
} else if (a < 0) {
|
||||
a += Math.PI * 2;
|
||||
}
|
||||
const val = !this.props.log
|
||||
? (a * (this.props.max - this.props.min) / this.angleArc) + this.props.min
|
||||
: Math.pow(this.props.max / this.props.min, a / this.angleArc) * this.props.min;
|
||||
return this.coerceToStep(val);
|
||||
};
|
||||
|
||||
handleMouseDown = (e) => {
|
||||
this.props.onChange(this.eventToValue(e));
|
||||
document.addEventListener('mousemove', this.handleMouseMove);
|
||||
document.addEventListener('mouseup', this.handleMouseUp);
|
||||
document.addEventListener('keyup', this.handleEsc);
|
||||
};
|
||||
|
||||
handleMouseMove = (e) => {
|
||||
e.preventDefault();
|
||||
this.props.onChange(this.eventToValue(e));
|
||||
};
|
||||
|
||||
handleMouseUp = (e) => {
|
||||
this.props.onChangeEnd(this.eventToValue(e));
|
||||
document.removeEventListener('mousemove', this.handleMouseMove);
|
||||
document.removeEventListener('mouseup', this.handleMouseUp);
|
||||
document.removeEventListener('keyup', this.handleEsc);
|
||||
};
|
||||
|
||||
handleTouchStart = (e) => {
|
||||
e.preventDefault();
|
||||
this.touchIndex = e.targetTouches.length - 1;
|
||||
this.props.onChange(this.eventToValue(e.targetTouches[this.touchIndex]));
|
||||
document.addEventListener('touchmove', this.handleTouchMove, { passive: false });
|
||||
document.addEventListener('touchend', this.handleTouchEnd);
|
||||
document.addEventListener('touchcancel', this.handleTouchEnd);
|
||||
};
|
||||
|
||||
handleTouchMove = (e) => {
|
||||
e.preventDefault();
|
||||
this.props.onChange(this.eventToValue(e.targetTouches[this.touchIndex]));
|
||||
};
|
||||
|
||||
handleTouchEnd = (e) => {
|
||||
this.props.onChangeEnd(this.eventToValue(e));
|
||||
document.removeEventListener('touchmove', this.handleTouchMove);
|
||||
document.removeEventListener('touchend', this.handleTouchEnd);
|
||||
document.removeEventListener('touchcancel', this.handleTouchEnd);
|
||||
};
|
||||
|
||||
handleEsc = (e) => {
|
||||
if (e.keyCode === 27) {
|
||||
e.preventDefault();
|
||||
this.handleMouseUp();
|
||||
}
|
||||
};
|
||||
|
||||
handleTextInput = (e) => {
|
||||
const val = Math.max(Math.min(+e.target.value, this.props.max), this.props.min) || this.props.min;
|
||||
this.props.onChange(val);
|
||||
};
|
||||
|
||||
handleWheel = (e) => {
|
||||
e.preventDefault();
|
||||
if (e.deltaX > 0 || e.deltaY > 0) {
|
||||
this.props.onChange(this.coerceToStep(
|
||||
!this.props.log
|
||||
? this.props.value + this.props.step
|
||||
: this.props.value * this.props.step
|
||||
));
|
||||
} else if (e.deltaX < 0 || e.deltaY < 0) {
|
||||
this.props.onChange(this.coerceToStep(
|
||||
!this.props.log
|
||||
? this.props.value - this.props.step
|
||||
: this.props.value / this.props.step
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
handleArrowKey = (e) => {
|
||||
if (e.keyCode === 37 || e.keyCode === 40) {
|
||||
e.preventDefault();
|
||||
this.props.onChange(this.coerceToStep(
|
||||
!this.props.log
|
||||
? this.props.value - this.props.step
|
||||
: this.props.value / this.props.step
|
||||
));
|
||||
} else if (e.keyCode === 38 || e.keyCode === 39) {
|
||||
e.preventDefault();
|
||||
this.props.onChange(this.coerceToStep(
|
||||
!this.props.log
|
||||
? this.props.value + this.props.step
|
||||
: this.props.value * this.props.step
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
inputStyle = () => ({
|
||||
width: `${((this.w / 2) + 4) >> 0}px`,
|
||||
height: `${(this.w / 3) >> 0}px`,
|
||||
position: 'absolute',
|
||||
verticalAlign: 'middle',
|
||||
marginTop: `${(this.w / 3) >> 0}px`,
|
||||
marginLeft: `-${((this.w * 3 / 4) + 2) >> 0}px`,
|
||||
border: 0,
|
||||
background: 'none',
|
||||
font: `${this.props.fontWeight} ${(this.w / this.digits) >> 0}px ${this.props.font}`,
|
||||
textAlign: 'center',
|
||||
color: this.props.inputColor || this.props.fgColor,
|
||||
padding: '0px',
|
||||
WebkitAppearance: 'none',
|
||||
});
|
||||
|
||||
drawCanvas() {
|
||||
const ctx = this.canvasRef.getContext('2d');
|
||||
const scale = this.getCanvasScale(ctx);
|
||||
this.canvasRef.width = this.w * scale; // clears the canvas
|
||||
this.canvasRef.height = this.h * scale;
|
||||
ctx.scale(scale, scale);
|
||||
this.xy = this.w / 2; // coordinates of canvas center
|
||||
this.lineWidth = this.xy * this.props.thickness;
|
||||
this.radius = this.xy - (this.lineWidth / 2);
|
||||
ctx.lineWidth = this.lineWidth;
|
||||
ctx.lineCap = this.props.lineCap;
|
||||
// background arc
|
||||
ctx.beginPath();
|
||||
ctx.strokeStyle = this.props.bgColor;
|
||||
ctx.arc(
|
||||
this.xy,
|
||||
this.xy,
|
||||
this.radius,
|
||||
this.endAngle - 0.00001,
|
||||
this.startAngle + 0.00001,
|
||||
true
|
||||
);
|
||||
ctx.stroke();
|
||||
// foreground arc
|
||||
const a = this.getArcToValue(this.props.value);
|
||||
ctx.beginPath();
|
||||
ctx.strokeStyle = this.props.fgColor;
|
||||
ctx.arc(
|
||||
this.xy,
|
||||
this.xy,
|
||||
this.radius,
|
||||
a.startAngle,
|
||||
a.endAngle,
|
||||
a.acw
|
||||
);
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
renderCenter = () => {
|
||||
const {
|
||||
displayCustom,
|
||||
displayInput,
|
||||
disableTextInput,
|
||||
readOnly,
|
||||
value,
|
||||
} = this.props;
|
||||
|
||||
if (displayInput) {
|
||||
return (
|
||||
<input
|
||||
style={this.inputStyle()}
|
||||
type="text"
|
||||
value={value}
|
||||
onChange={this.handleTextInput}
|
||||
onKeyDown={this.handleArrowKey}
|
||||
readOnly={readOnly || disableTextInput}
|
||||
/>
|
||||
);
|
||||
} else if (displayCustom && typeof displayCustom === 'function') {
|
||||
return displayCustom();
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
canvasClassName,
|
||||
className,
|
||||
disableMouseWheel,
|
||||
readOnly,
|
||||
title,
|
||||
value,
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<div
|
||||
className={className}
|
||||
style={{ width: this.w, height: this.h, display: 'inline-block' }}
|
||||
onWheel={readOnly || disableMouseWheel ? null : this.handleWheel}
|
||||
>
|
||||
<canvas
|
||||
ref={(ref) => { this.canvasRef = ref; }}
|
||||
className={canvasClassName}
|
||||
style={{ width: '100%', height: '100%' }}
|
||||
onMouseDown={readOnly ? null : this.handleMouseDown}
|
||||
title={title ? `${title}: ${value}` : value}
|
||||
/>
|
||||
{this.renderCenter()}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Knob;
|
|
@ -240,6 +240,11 @@ class BufferClientBackend {
|
|||
});
|
||||
|
||||
}
|
||||
close() {
|
||||
this._context.close();
|
||||
this._ws.onclose = () => {};
|
||||
this._ws.close();
|
||||
}
|
||||
resume() {
|
||||
this._context.resume();
|
||||
}
|
||||
|
|
|
@ -43,6 +43,10 @@ function getProps(render) {
|
|||
});
|
||||
};
|
||||
|
||||
client.onComponentUnmount = () => {
|
||||
backend.close();
|
||||
}
|
||||
|
||||
return client;
|
||||
};
|
||||
|
||||
|
|
|
@ -76,6 +76,9 @@ function getProps (render) {
|
|||
client.name = name;
|
||||
render();
|
||||
},
|
||||
onComponentUnmount: () => {
|
||||
backend.close();
|
||||
}
|
||||
};
|
||||
|
||||
StartAudioContext(backend._context, '.playit')
|
||||
|
|
|
@ -17,6 +17,8 @@ import getAdminProps from './controller/admin';
|
|||
import Simulator from './view/simulator';
|
||||
import getSimulatorProps from './controller/simulator';
|
||||
|
||||
registerServiceWorker();
|
||||
|
||||
const render = () => ReactDOM.render(router(), document.getElementById('root'));
|
||||
|
||||
let clientProps, adminProps, simulatorProps;
|
||||
|
@ -33,4 +35,3 @@ const router = () => {
|
|||
};
|
||||
|
||||
render();
|
||||
registerServiceWorker();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import _ from 'lodash';
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import Knob from 'react-canvas-knob';
|
||||
import Knob from '../Knob';
|
||||
|
||||
import './admin.css';
|
||||
|
||||
|
|
|
@ -6,6 +6,9 @@ class BufferClient extends React.Component {
|
|||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
componentWillUnmount() {
|
||||
this.props.onComponentUnmount && this.props.onComponentUnmount();
|
||||
}
|
||||
render() {
|
||||
let enabledSources = this.props.sources.filter(source => source.enabled);
|
||||
return (
|
||||
|
|
|
@ -2054,10 +2054,6 @@ dom-urls@^1.1.0:
|
|||
dependencies:
|
||||
urijs "^1.16.1"
|
||||
|
||||
dom-walk@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
|
||||
|
||||
domain-browser@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
|
||||
|
@ -2966,13 +2962,6 @@ global-prefix@^1.0.1:
|
|||
is-windows "^1.0.1"
|
||||
which "^1.2.14"
|
||||
|
||||
global@^4.3.0:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
|
||||
dependencies:
|
||||
min-document "^2.19.0"
|
||||
process "~0.5.1"
|
||||
|
||||
globals@^9.17.0, globals@^9.18.0:
|
||||
version "9.18.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
|
||||
|
@ -4264,7 +4253,7 @@ lodash.uniq@^4.5.0:
|
|||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||
|
||||
"lodash@>=3.5 <5", lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.6.1:
|
||||
"lodash@>=3.5 <5", lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0:
|
||||
version "4.17.10"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
|
||||
|
||||
|
@ -4462,12 +4451,6 @@ mimic-fn@^1.0.0:
|
|||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||
|
||||
min-document@^2.19.0:
|
||||
version "2.19.0"
|
||||
resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
|
||||
dependencies:
|
||||
dom-walk "^0.1.0"
|
||||
|
||||
minimalistic-assert@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
||||
|
@ -5408,10 +5391,6 @@ process@^0.11.10:
|
|||
version "0.11.10"
|
||||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||
|
||||
process@~0.5.1:
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
|
||||
|
||||
progress@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
|
||||
|
@ -5553,16 +5532,6 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
|
|||
minimist "^1.2.0"
|
||||
strip-json-comments "~2.0.1"
|
||||
|
||||
react-canvas-knob@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/react-canvas-knob/-/react-canvas-knob-0.5.0.tgz#5712742379345ab872d7999046989cf2be574172"
|
||||
dependencies:
|
||||
prop-types "^15.5.10"
|
||||
|
||||
react-deep-force-update@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.1.tgz#bcd31478027b64b3339f108921ab520b4313dc2c"
|
||||
|
||||
react-dev-utils@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-5.0.1.tgz#1f396e161fe44b595db1b186a40067289bf06613"
|
||||
|
@ -5606,13 +5575,6 @@ react-error-overlay@^4.0.0:
|
|||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.0.tgz#d198408a85b4070937a98667f500c832f86bd5d4"
|
||||
|
||||
react-proxy@^1.1.7:
|
||||
version "1.1.8"
|
||||
resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a"
|
||||
dependencies:
|
||||
lodash "^4.6.1"
|
||||
react-deep-force-update "^1.0.0"
|
||||
|
||||
react-router-dom@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.2.2.tgz#c8a81df3adc58bba8a76782e946cbd4eae649b8d"
|
||||
|
@ -5685,13 +5647,6 @@ react-transform-catch-errors@^1.0.2:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/react-transform-catch-errors/-/react-transform-catch-errors-1.0.2.tgz#1b4d4a76e97271896fc16fe3086c793ec88a9eeb"
|
||||
|
||||
react-transform-hmr@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb"
|
||||
dependencies:
|
||||
global "^4.3.0"
|
||||
react-proxy "^1.1.7"
|
||||
|
||||
react@^16.3.2:
|
||||
version "16.3.2"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-16.3.2.tgz#fdc8420398533a1e58872f59091b272ce2f91ea9"
|
||||
|
|
10
index.js
10
index.js
|
@ -6,7 +6,7 @@ const q = require('q');
|
|||
const fs = require('fs');
|
||||
const cors = require('cors');
|
||||
const execFile = q.denodeify(require('child_process').execFile);
|
||||
const mediainfo = q.denodeify(require('mediainfo-parser').exec);
|
||||
const musicMetadata = require('music-metadata');
|
||||
const path = require('path');
|
||||
const ws = require('./ws');
|
||||
const config = require('./config.js');
|
||||
|
@ -17,7 +17,7 @@ const app = express();
|
|||
|
||||
app.listen(3030, () => console.log('Listening...'));
|
||||
|
||||
const whitelist = ['http://localhost:3032', new RegExp('^http://.*:3032')];
|
||||
const whitelist = ['http://localhost:3032', new RegExp('^http://.*:3032'), new RegExp('^http://.*:3000')];
|
||||
|
||||
const corsOptions = {
|
||||
origin: (origin, callback) => {
|
||||
|
@ -41,8 +41,10 @@ app.get('/files.json', cors(corsOptions), (req, res) => {
|
|||
|
||||
const getDuration = (filename) => {
|
||||
return q.resolve()
|
||||
.then(() => mediainfo(filename))
|
||||
.then(meta => meta.file.track[0].duration );
|
||||
.then(() => musicMetadata.parseFile(filename))
|
||||
.then(meta => {
|
||||
return meta.format.duration * 1000;
|
||||
});
|
||||
};
|
||||
|
||||
q.resolve()
|
||||
|
|
12
package.json
12
package.json
|
@ -6,12 +6,10 @@
|
|||
"scripts": {
|
||||
"debug": "npm-run-all --parallel frontend debug-server",
|
||||
"debug-server": "nodemon --inspect-brk=0.0.0.0:9229 ./index.js",
|
||||
"frontend": "cd ./frontend && yarn install && yarn run start",
|
||||
|
||||
"server": "node ./index.js",
|
||||
|
||||
"latency": "npm-run-all --parallel static latency-server",
|
||||
"latency-server": "node ./latency.js"
|
||||
"debug-frontend": "cd ./frontend && yarn install && yarn run start",
|
||||
"start": "npm-run-all --parallel frontend server",
|
||||
"frontend": "cd ./frontend && yarn install && yarn run build && npx static-html-server -p 3000 -r ./build -f index.html",
|
||||
"server": "node ./index.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"cors": "^2.8.4",
|
||||
|
@ -19,7 +17,7 @@
|
|||
"express": "^4.16.2",
|
||||
"http-server": "^0.10.0",
|
||||
"lowdb": "^1.0.0",
|
||||
"mediainfo-parser": "^1.1.5",
|
||||
"music-metadata": "^1.1.0",
|
||||
"node-storage": "^0.0.7",
|
||||
"npm-run-all": "^4.1.2",
|
||||
"q": "^1.5.1",
|
||||
|
|
1
ws.js
1
ws.js
|
@ -5,7 +5,6 @@ const q = require('q');
|
|||
const fs = require('fs');
|
||||
const cors = require('cors');
|
||||
const execFile = q.denodeify(require('child_process').execFile);
|
||||
const mediainfo = q.denodeify(require('mediainfo-parser').exec);
|
||||
const path = require('path');
|
||||
const lowdb = require('lowdb');
|
||||
const FileSync = require('lowdb/adapters/FileSync');
|
||||
|
|
225
yarn.lock
225
yarn.lock
|
@ -24,6 +24,15 @@ ajv@^4.9.1:
|
|||
co "^4.6.0"
|
||||
json-stable-stringify "^1.0.1"
|
||||
|
||||
ajv@^5.1.0:
|
||||
version "5.5.2"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
|
||||
dependencies:
|
||||
co "^4.6.0"
|
||||
fast-deep-equal "^1.0.0"
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
json-schema-traverse "^0.3.0"
|
||||
|
||||
align-text@^0.1.1, align-text@^0.1.3:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
|
||||
|
@ -84,6 +93,12 @@ are-we-there-yet@~1.1.2:
|
|||
delegates "^1.0.0"
|
||||
readable-stream "^2.0.6"
|
||||
|
||||
argparse@^1.0.7:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
|
||||
dependencies:
|
||||
sprintf-js "~1.0.2"
|
||||
|
||||
args@4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/args/-/args-4.0.0.tgz#5ca24cdba43d4b17111c56616f5f2e9d91933954"
|
||||
|
@ -159,10 +174,18 @@ aws-sign2@~0.6.0:
|
|||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
|
||||
|
||||
aws-sign2@~0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
||||
|
||||
aws4@^1.2.1:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
|
||||
|
||||
aws4@^1.6.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
|
@ -189,7 +212,7 @@ block-stream@*:
|
|||
dependencies:
|
||||
inherits "~2.0.0"
|
||||
|
||||
bluebird@3.5.1:
|
||||
bluebird@3.5.1, bluebird@^3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
|
||||
|
||||
|
@ -356,6 +379,12 @@ colors@1.0.3:
|
|||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
|
||||
|
||||
combined-stream@1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
|
||||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
combined-stream@^1.0.5, combined-stream@~1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
|
||||
|
@ -430,6 +459,16 @@ corser@~2.0.0:
|
|||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
|
||||
|
||||
coveralls@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.1.tgz#12e15914eaa29204e56869a5ece7b9e1492d2ae2"
|
||||
dependencies:
|
||||
js-yaml "^3.6.1"
|
||||
lcov-parse "^0.0.10"
|
||||
log-driver "^1.2.5"
|
||||
minimist "^1.2.0"
|
||||
request "^2.79.0"
|
||||
|
||||
create-error-class@^3.0.0:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
|
||||
|
@ -470,6 +509,12 @@ debug@2.6.9, debug@^2.2.0, debug@^2.6.0, debug@^2.6.8:
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
decamelize@^1.0.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||
|
@ -593,6 +638,10 @@ escape-string-regexp@^1.0.5:
|
|||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
|
||||
esprima@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
|
||||
|
||||
etag@~1.8.1:
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
||||
|
@ -684,7 +733,7 @@ express@^4.16.2:
|
|||
utils-merge "1.0.1"
|
||||
vary "~1.1.2"
|
||||
|
||||
extend@~3.0.0:
|
||||
extend@~3.0.0, extend@~3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
|
||||
|
||||
|
@ -702,6 +751,14 @@ extsprintf@^1.2.0:
|
|||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
|
||||
|
||||
fast-deep-equal@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
|
||||
|
||||
fast-json-stable-stringify@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
|
||||
|
||||
filename-regex@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
|
||||
|
@ -758,6 +815,14 @@ form-data@~2.1.1:
|
|||
combined-stream "^1.0.5"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
form-data@~2.3.1:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "1.0.6"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
forwarded@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
|
||||
|
@ -770,7 +835,7 @@ from@~0:
|
|||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
|
||||
|
||||
fs-extra@5.0.0:
|
||||
fs-extra@5.0.0, fs-extra@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
|
||||
dependencies:
|
||||
|
@ -778,6 +843,14 @@ fs-extra@5.0.0:
|
|||
jsonfile "^4.0.0"
|
||||
universalify "^0.1.0"
|
||||
|
||||
fs-extra@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b"
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
jsonfile "^4.0.0"
|
||||
universalify "^0.1.0"
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
|
@ -897,6 +970,10 @@ har-schema@^1.0.5:
|
|||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
|
||||
|
||||
har-schema@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
||||
|
||||
har-validator@~4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
|
||||
|
@ -904,6 +981,13 @@ har-validator@~4.2.1:
|
|||
ajv "^4.9.1"
|
||||
har-schema "^1.0.5"
|
||||
|
||||
har-validator@~5.0.3:
|
||||
version "5.0.3"
|
||||
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
|
||||
dependencies:
|
||||
ajv "^5.1.0"
|
||||
har-schema "^2.0.0"
|
||||
|
||||
has-flag@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
|
||||
|
@ -980,6 +1064,14 @@ http-signature@~1.1.0:
|
|||
jsprim "^1.2.2"
|
||||
sshpk "^1.7.0"
|
||||
|
||||
http-signature@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
||||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
jsprim "^1.2.2"
|
||||
sshpk "^1.7.0"
|
||||
|
||||
iconv-lite@0.4.19:
|
||||
version "0.4.19"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
|
||||
|
@ -1174,6 +1266,13 @@ isstream@~0.1.2:
|
|||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||
|
||||
js-yaml@^3.6.1:
|
||||
version "3.11.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef"
|
||||
dependencies:
|
||||
argparse "^1.0.7"
|
||||
esprima "^4.0.0"
|
||||
|
||||
jsbn@~0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
|
||||
|
@ -1182,6 +1281,10 @@ json-parse-better-errors@^1.0.1:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a"
|
||||
|
||||
json-schema-traverse@^0.3.0:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
|
||||
|
||||
json-schema@0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
||||
|
@ -1237,6 +1340,10 @@ lazy-cache@^1.0.3:
|
|||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
|
||||
|
||||
lcov-parse@^0.0.10:
|
||||
version "0.0.10"
|
||||
resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3"
|
||||
|
||||
leven@2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
|
||||
|
@ -1250,10 +1357,14 @@ load-json-file@^4.0.0:
|
|||
pify "^3.0.0"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
lodash@4, lodash@^4.16.4:
|
||||
lodash@4:
|
||||
version "4.17.4"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
|
||||
|
||||
log-driver@^1.2.5:
|
||||
version "1.2.7"
|
||||
resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"
|
||||
|
||||
longest@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
|
||||
|
@ -1293,13 +1404,6 @@ media-typer@0.3.0:
|
|||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
||||
|
||||
mediainfo-parser@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/mediainfo-parser/-/mediainfo-parser-1.1.5.tgz#5a0c0584b1b5aeb79d089ffd9d67c747ad1ff2d7"
|
||||
dependencies:
|
||||
lodash "^4.16.4"
|
||||
xml2js "^0.4.17"
|
||||
|
||||
memorystream@^0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
|
||||
|
@ -1353,7 +1457,7 @@ mime-db@~1.30.0:
|
|||
version "1.30.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
|
||||
|
||||
mime-types@2.1.18:
|
||||
mime-types@2.1.18, mime-types@~2.1.17:
|
||||
version "2.1.18"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
|
||||
dependencies:
|
||||
|
@ -1405,6 +1509,17 @@ ms@2.0.0:
|
|||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
|
||||
music-metadata@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/music-metadata/-/music-metadata-1.1.0.tgz#0f08dd39115546408d01ea7cc858ace48ffeb40f"
|
||||
dependencies:
|
||||
bluebird "^3.5.1"
|
||||
debug "^3.1.0"
|
||||
fs-extra "^6.0.1"
|
||||
strtok3 "^1.4.2"
|
||||
then-read-stream "^1.1.3"
|
||||
token-types "^0.9.4"
|
||||
|
||||
nan@^2.3.0:
|
||||
version "2.8.0"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
|
||||
|
@ -1514,7 +1629,7 @@ number-is-nan@^1.0.0:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
|
||||
oauth-sign@~0.8.1:
|
||||
oauth-sign@~0.8.1, oauth-sign@~0.8.2:
|
||||
version "0.8.2"
|
||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
|
||||
|
||||
|
@ -1650,6 +1765,10 @@ performance-now@^0.2.0:
|
|||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
|
||||
|
||||
performance-now@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
|
||||
pify@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
||||
|
@ -1721,6 +1840,10 @@ qs@~6.4.0:
|
|||
version "6.4.0"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
|
||||
|
||||
qs@~6.5.1:
|
||||
version "6.5.2"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
|
||||
|
||||
randomatic@^1.1.3:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
|
||||
|
@ -1844,6 +1967,31 @@ request@2.81.0:
|
|||
tunnel-agent "^0.6.0"
|
||||
uuid "^3.0.0"
|
||||
|
||||
request@^2.79.0:
|
||||
version "2.87.0"
|
||||
resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e"
|
||||
dependencies:
|
||||
aws-sign2 "~0.7.0"
|
||||
aws4 "^1.6.0"
|
||||
caseless "~0.12.0"
|
||||
combined-stream "~1.0.5"
|
||||
extend "~3.0.1"
|
||||
forever-agent "~0.6.1"
|
||||
form-data "~2.3.1"
|
||||
har-validator "~5.0.3"
|
||||
http-signature "~1.2.0"
|
||||
is-typedarray "~1.0.0"
|
||||
isstream "~0.1.2"
|
||||
json-stringify-safe "~5.0.1"
|
||||
mime-types "~2.1.17"
|
||||
oauth-sign "~0.8.2"
|
||||
performance-now "^2.1.0"
|
||||
qs "~6.5.1"
|
||||
safe-buffer "^5.1.1"
|
||||
tough-cookie "~2.3.3"
|
||||
tunnel-agent "^0.6.0"
|
||||
uuid "^3.1.0"
|
||||
|
||||
requires-port@1.x.x:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
|
||||
|
@ -1864,9 +2012,9 @@ safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
|||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
|
||||
|
||||
sax@>=0.6.0:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
safe-buffer@^5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
|
||||
semver-diff@^2.0.0:
|
||||
version "2.1.0"
|
||||
|
@ -2026,6 +2174,10 @@ split@0.3:
|
|||
dependencies:
|
||||
through "2"
|
||||
|
||||
sprintf-js@~1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||
|
||||
sshpk@^1.7.0:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
|
||||
|
@ -2117,6 +2269,16 @@ strip-json-comments@~2.0.1:
|
|||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
|
||||
strtok3@^1.4.2:
|
||||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-1.4.2.tgz#39aa7990a99edbdb4a94cfa8f0df27b2d6b03cb2"
|
||||
dependencies:
|
||||
bluebird "^3.5.1"
|
||||
coveralls "^3.0.1"
|
||||
fs-extra "^5.0.0"
|
||||
then-read-stream "^1.1.3"
|
||||
token-types "^0.9.4"
|
||||
|
||||
supports-color@^4.0.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
|
||||
|
@ -2156,6 +2318,12 @@ term-size@^1.2.0:
|
|||
dependencies:
|
||||
execa "^0.7.0"
|
||||
|
||||
then-read-stream@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/then-read-stream/-/then-read-stream-1.1.3.tgz#1940a884649ca63636bd55e924d4c6f874aea7db"
|
||||
dependencies:
|
||||
bluebird "^3.5.1"
|
||||
|
||||
through@2, through@~2.3, through@~2.3.1:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
|
@ -2164,6 +2332,10 @@ timed-out@^4.0.0:
|
|||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
|
||||
|
||||
token-types@^0.9.4:
|
||||
version "0.9.4"
|
||||
resolved "https://registry.yarnpkg.com/token-types/-/token-types-0.9.4.tgz#ea24c5c3fc577292a1d362a252e348a0016361ad"
|
||||
|
||||
touch@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
|
||||
|
@ -2176,6 +2348,12 @@ tough-cookie@~2.3.0:
|
|||
dependencies:
|
||||
punycode "^1.4.1"
|
||||
|
||||
tough-cookie@~2.3.3:
|
||||
version "2.3.4"
|
||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
|
||||
dependencies:
|
||||
punycode "^1.4.1"
|
||||
|
||||
tunnel-agent@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
|
||||
|
@ -2285,6 +2463,10 @@ uuid@^3.0.0:
|
|||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
|
||||
|
||||
uuid@^3.1.0:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
|
||||
|
||||
validate-npm-package-license@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
|
||||
|
@ -2358,17 +2540,6 @@ xdg-basedir@^3.0.0:
|
|||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
|
||||
|
||||
xml2js@^0.4.17:
|
||||
version "0.4.19"
|
||||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
|
||||
dependencies:
|
||||
sax ">=0.6.0"
|
||||
xmlbuilder "~9.0.1"
|
||||
|
||||
xmlbuilder@~9.0.1:
|
||||
version "9.0.4"
|
||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f"
|
||||
|
||||
yallist@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
||||
|
|
Loading…
Add table
Reference in a new issue