WIP progress commit

This commit is contained in:
Timothy Warren 2020-04-10 11:30:26 -04:00
parent 63e07cd42f
commit 770fb57ab0
16 changed files with 403 additions and 211 deletions

View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9S5RNcm4+LnZA
l0lGV5Lm8tbnbwHc5UaI2DXVKUP9AjiErY7X1tCq7fqeMsqLPwnYkaDltNq+a5tu
BfUHOCfK7tNICIkxZ8QDo1XMByaH3STx8GQ1XRXJr85ZhNxU4xnKUqpSRBFc7KO9
ZxtE+1UMZKoiZovmUc9DBQI2gY8fsric9rNOkGSW3N4xKOpeMvKlDrQwTJylJsyK
uRAaM6r2t4GuIc/BXj++Oj4r12mFAtAJPBGLs6CQWVb1qLhddgzgOxyysFhM9cQv
MbPnexYFLwfIyAXXJFrvJS0lz/HUCYKasqHXt+DD2G08p24Jy/QUX0oS/z/2cW/d
7BdMdAflAgMBAAECggEAGxHf12Nx2HqUdpAr7l8/pr87dEUvowM2nwMsT5tjGZ9j
rbWUI9GYbZkyqcThqiANrGbG95JxZaHFzGoVrD6fkimtFTQDSoloQoztDAxJukwp
qF+UNP1mzDzT6YFScOE5IvHHYZRSV1OP5toD0E2Q0ADlQ54ei4VPemoQ8vJ8ITAS
W7XuW0LvNkluS6DLrP/uJ779oPt97wv5x7jCPZVBQWQnkL3WmqX4WK251vPH4bfB
NWuZ1CPv7JEzrKK3VWe13VxVt2+RBmTMLEICXU217lLZOTmRggMTciBOvieq5zLf
9XRf2WOejU8OQY7ymhO49YD40Z4nSZmYbSqQi+7jAQKBgQD1DW1nlI/bBKeeiCaf
SDf0C6jta0/zw4WqkKb4L1OH80HaXDW+B8YOAqndGSl1iYTgp+z7CfJxdYr8o98z
178bJIofSzFDOgy/NZOatMA4fubq+YWNHWUFR3sRL6ehOBJLKTGVrFP0w0E3SFvG
72ntHFQDxR9ldPvCXImsaot6lQKBgQDFwHpFP2AS4S/FCirZL6rtyCFXUscmrnFc
4IsaCetsJYK9JdnzHlFrkakA53oV6/yZP/ZHWpc5zG9J4Uqqbsu5Uy1a1Ek0KO5p
k4HyUd4RiDojsOr81ZfZ8ByXeBzsOpCkljT3QJoCDDzc/6A3hNl5/Oh3SrvhuUSs
VlzoWxhUEQKBgQDN95c5NFklUWhBi1ZLErxU12gJBeWRkYlLr4FnoP+oiQGUs2RI
cOg65mo3d+qs7AVPflVlOxsX2iAT8Pit7mymN7QQUXb6dlQ4cqO5qKrX0XHtlgR2
c3pxUX9TFqbijupxWhJfJxT56RNrj9nz/08dCG5lLM4SzJy+5GCjFnpdcQKBgDYq
XZNgI5GoSqxe95Obweb1nWRM0S3gND7rZk6QjwKFV8U1e/hiwoyDTlZoEQG2LO9R
HMU4pBl5zLXg1tHOHVE63j51zUNTPtJ+S+ay0+/bb4ldKVBttPVGFp7KkKmH9RyP
5Bwhfs22ymkCP8FVSzhltMsQFlxiodPOqA4g/Y3xAoGBANlStShGqYVBDu+G1jkG
qmXM2eTtrh58RDRXm2ZUcJ+NbSZ1kGA94MdZaWZSSrQXzZzNWajVSE5XOV4dAbGY
LQgjCyRJQU4O+VVNfRb9E1q5P8qpECDqmqb1MHMmc7nI7hub2CLhABC+SYOI+Wn2
6q4mL0cBiCqnyUncK/mx+U47
-----END PRIVATE KEY-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEUjCCArqgAwIBAgIQfGscE02UTD1y2XRmQtXOejANBgkqhkiG9w0BAQsFADBz
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExJDAiBgNVBAsMG3R3YXJy
ZW5ATWFjQm9vay1Qcm8tMi5sb2NhbDErMCkGA1UEAwwibWtjZXJ0IHR3YXJyZW5A
TWFjQm9vay1Qcm8tMi5sb2NhbDAeFw0xOTAxMTYxOTMwNTFaFw0yOTAxMTYxOTMw
NTFaME8xJzAlBgNVBAoTHm1rY2VydCBkZXZlbG9wbWVudCBjZXJ0aWZpY2F0ZTEk
MCIGA1UECwwbdHdhcnJlbkBNYWNCb29rLVByby0yLmxvY2FsMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUuUTXJuPi52QJdJRleS5vLW528B3OVGiNg1
1SlD/QI4hK2O19bQqu36njLKiz8J2JGg5bTavmubbgX1Bzgnyu7TSAiJMWfEA6NV
zAcmh90k8fBkNV0Vya/OWYTcVOMZylKqUkQRXOyjvWcbRPtVDGSqImaL5lHPQwUC
NoGPH7K4nPazTpBkltzeMSjqXjLypQ60MEycpSbMirkQGjOq9reBriHPwV4/vjo+
K9dphQLQCTwRi7OgkFlW9ai4XXYM4DscsrBYTPXELzGz53sWBS8HyMgF1yRa7yUt
Jc/x1AmCmrKh17fgw9htPKduCcv0FF9KEv8/9nFv3ewXTHQH5QIDAQABo4GFMIGC
MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8E
AjAAMB8GA1UdIwQYMBaAFFcbyc7AJktAZnOSeiE2YE03wcQHMCwGA1UdEQQlMCOC
CWxvY2FsaG9zdIcEfwAAAYcQAAAAAAAAAAAAAAAAAAAAATANBgkqhkiG9w0BAQsF
AAOCAYEAT1VQmT7WOpTJoEIFD8Mqw+JcpXKOnpc7TdvSpGu6HDKCYvKEwxsDDQEr
3JGXzzLAvexfod2W+dhBHqey/p9UqJidiLyzySHY4xIYqoBuEYW0puTO8k3kG8HD
j6zYeRkSw/9aRYa1NjjaA4UkMx/Qi74zYjGfiRNpb+RPv0aQI5009fFrD83jf1cG
dQeab8cYk5BTIH4HgRTg8azz3HECM+Hp+4i/oSx1GZ3gt4vaXM7MVVQJZtOn6eyf
ZqW6JfZOlXC4K4rTl8JX0wKWR7EPu/6CSorgLRndvc+1IfuDPn/OGU27d82a5a6S
qXEHTZ2k7Gkl8nfoFWKBmTcqESQAoINvVv3VnHiGltIjX5KfGfW/ypDStwYBhK+e
qoYB5ICKjPBUneIgKu+1MPDk1hjeIEZAXjBDxicznbqx8s7TcaWt3+fhLD1wAiXz
mJMguPnGoRREh+patpjCltXYD3YOQN5eMkGmKTzhiItex2KNqN13foZE5eHDbpMe
ly3G5TlQ
-----END CERTIFICATE-----

28
assets/certs/rootCA.pem Normal file
View File

@ -0,0 +1,28 @@
-----BEGIN CERTIFICATE-----
MIIEtTCCAx2gAwIBAgIQKfl+Gnl63rU7QNzHEtfwBTANBgkqhkiG9w0BAQsFADBz
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExJDAiBgNVBAsMG3R3YXJy
ZW5ATWFjQm9vay1Qcm8tMi5sb2NhbDErMCkGA1UEAwwibWtjZXJ0IHR3YXJyZW5A
TWFjQm9vay1Qcm8tMi5sb2NhbDAeFw0xOTAxMTYxOTMwMDBaFw0yOTAxMTYxOTMw
MDBaMHMxHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTEkMCIGA1UECwwb
dHdhcnJlbkBNYWNCb29rLVByby0yLmxvY2FsMSswKQYDVQQDDCJta2NlcnQgdHdh
cnJlbkBNYWNCb29rLVByby0yLmxvY2FsMIIBojANBgkqhkiG9w0BAQEFAAOCAY8A
MIIBigKCAYEAqzewfMsejpRABJR9U1sk3O9LxoouBZMvtw4SOzNlUrJYTTNI6tJ2
ldq2Isyuxm0Jpj5zW9mlIzQWWQDPFJflPatCR3aL6HkvXwrl3QzJUVpgIdIe7ap2
rfGUUtu/GvA9zirVoCjtgg+Wixp2IpITwq5g2UhvU8gDjRpxQj/CyIgVmj4uIaMJ
uoCmjDQ88LtjW1mtsjuLwrcFwzj1VprcFQBfcFccAnawImvXtDyUpWAtI1EkqMkk
8ZupfWSl6Iz5gG7R5acssgo4k20hZ4RbPvk4JwFqxKSnKxkXQrXYdEsxX09jcc5A
lCgmZWAGKJDPUwhi0AFxqwJ6UP5TANb9AON+jM/NhE+pSIoEmuhAbMtrRTvnCM2Y
sSMT8K0ynDoj51UYJlRf6tgzChJ/Q9hQYHIzD6bRRVf+v+jSrHoC+NPozT/GbINt
R+ccMeWs9CDndM6vRinvrnUgyKtjE67Kzvy4oFtQoLTyF1ycOUFfMAagHMNlD7QO
i26r66QhfE7HAgMBAAGjRTBDMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAG
AQH/AgEAMB0GA1UdDgQWBBRXG8nOwCZLQGZzknohNmBNN8HEBzANBgkqhkiG9w0B
AQsFAAOCAYEAcUrZO2LhcLdVmziFaIMV0YmQumwko1H26xOxefp/Es6UCroqE64M
eMvV/xyX2fJn40Dhn/PBc0SvMYQQepC4FnkduvM92o0d+4rOLdTPIyzO7zG+XPqa
R7xwcUlDg+oNmkTdSDM+KjGN9y7lgGyRM/CS1f+70mqsNOopSuY7fUMKQmait3iU
HIPIsq7dvS5Bah5lCfz7zD86eWdoRuYgIzngA0R9ckz9rSLStB6ZsV2O9TrHlgPI
ZBrBqN4SoBe2w9p+WHJ/pSfZhZAK2JDAYIXS5VUQ16QPcNfYRJMzP9RDHZN/0FAo
zrWKswEM+UM68a3O+IVK4bSHSqyVYn3owbcsc8lDaMpix+d72MSzevHz2SQfrCZf
00xi4HuILrewsQKIlJZEpPkHL1VwPBOjytd/QsxqZ5P3NeVXxb50N9YGdfCVJPw1
9S8YNsX84Xa+vIbNYiccWQ+q6iaSVhry+qR0+L7hZRlTaO4cdLjNKtmAw+wRUGPl
lHHOrOEGYrH/
-----END CERTIFICATE-----

View File

@ -56,6 +56,7 @@
"eslint-plugin-node": "^8.0.1", "eslint-plugin-node": "^8.0.1",
"eslint-plugin-promise": "^4.0.1", "eslint-plugin-promise": "^4.0.1",
"eslint-plugin-standard": "^4.0.0", "eslint-plugin-standard": "^4.0.0",
"exiftool-vendored.pl": "^11.24.0",
"husky": "^1.3.1", "husky": "^1.3.1",
"inferno-devtools": "^7.0.5", "inferno-devtools": "^7.0.5",
"jest": "^23.0.1", "jest": "^23.0.1",

View File

@ -61,7 +61,7 @@ cssload-loader {
margin: auto; margin: auto;
} }
.cssload-inner { cssload-inner {
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100%; height: 100%;

View File

@ -2,6 +2,7 @@ import baseConfig from './rollup.config';
import alias from 'rollup-plugin-alias'; import alias from 'rollup-plugin-alias';
import filesize from 'rollup-plugin-filesize'; import filesize from 'rollup-plugin-filesize';
import fs from 'fs';
import livereload from 'rollup-plugin-livereload'; import livereload from 'rollup-plugin-livereload';
import replace from 'rollup-plugin-replace'; import replace from 'rollup-plugin-replace';
import serve from 'rollup-plugin-serve'; import serve from 'rollup-plugin-serve';
@ -20,15 +21,27 @@ export default {
filesize(), filesize(),
serve({ serve({
contentBase: ['build', 'public'], contentBase: ['build', 'public'],
host: 'localhost',
headers: { headers: {
'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Origin': '*',
'Content-Security-Policy': "default-src 'none'; script-src 'self' localhost:35729 localhost:65432; connect-src 'self' ws://localhost:35729 ws://localhost:65432; img-src 'self' data://*; style-src 'self';", 'Content-Security-Policy': "default-src 'none'; script-src 'self' localhost:35729 localhost:65432; connect-src 'self' wss://localhost:35729 ws://localhost:65432; img-src 'self' data://*; style-src 'self';",
}, },
historyApiFallback: true, historyApiFallback: true,
host: 'localhost',
https: {
ca: fs.readFileSync('./assets/certs/rootCA.pem'),
cert: fs.readFileSync('./assets/certs/localhost+2.pem'),
key: fs.readFileSync('./assets/certs/localhost+2-key.pem'),
},
port: 3000, port: 3000,
}), }),
livereload(), livereload({
https: {
ca: fs.readFileSync('./assets/certs/rootCA.pem'),
cert: fs.readFileSync('./assets/certs/localhost+2.pem'),
key: fs.readFileSync('./assets/certs/localhost+2-key.pem'),
},
watch: 'dist',
}),
visualizer({ visualizer({
filename: './public/stats.html', filename: './public/stats.html',
title: 'Film EXIF modules', title: 'Film EXIF modules',

View File

@ -5,10 +5,6 @@ class WSCache {
constructor (ws) { constructor (ws) {
this.ws = ws; this.ws = ws;
this.ws.addEventListener('message', this.onWebSocketMessage);
this.ws.addEventListener('close', this.onWebSocketClose);
this.ws.addEventListener('error', console.error);
// Websocket channels // Websocket channels
// These hold previous messages if they are needed later // These hold previous messages if they are needed later
this.slots = { this.slots = {
@ -34,9 +30,14 @@ class WSCache {
'sendJSON', 'sendJSON',
'subscribe', 'subscribe',
]); ]);
this.ws.addEventListener('message', this.onWebSocketMessage);
this.ws.addEventListener('close', this.onWebSocketClose);
this.ws.addEventListener('error', console.error);
} }
onWebSocketClose () { onWebSocketClose () {
this.ws = null;
console.info('WebSocket closed'); console.info('WebSocket closed');
} }
@ -46,16 +47,21 @@ class WSCache {
* @param {mixed} message * @param {mixed} message
*/ */
onWebSocketMessage (message) { onWebSocketMessage (message) {
// `this` is overwritten to be the web socket object,
// so use the current instance object instead
try { try {
(() => {})();
const messageObject = JSON.parse(message.data); const messageObject = JSON.parse(message.data);
WSCache.instance.publish(messageObject[0], messageObject[1]); WSCache.instance.publish(messageObject[0], messageObject[1]);
} catch (e) { } catch (e) {
console.error('Error resolving web socket message', e);
// console.error(message);
WSCache.instance.publish('default', message.data); WSCache.instance.publish('default', message.data);
} }
} }
/* /*
* Send a recieved websocket message to the appropriate listener(s) * Send a received websocket message to the appropriate listener(s)
* *
* @param {string} slot * @param {string} slot
* @param {mixed} data * @param {mixed} data
@ -66,6 +72,10 @@ class WSCache {
return; return;
} }
if (this.slots[slot] === undefined) {
this.slots[slot] = [];
}
this.slots[slot].push(data); this.slots[slot].push(data);
this.listeners[slot].forEach(listener => { this.listeners[slot].forEach(listener => {
@ -118,7 +128,8 @@ class WSCache {
this.listeners[slot] = []; this.listeners[slot] = [];
} }
const listenerIndex = this.listeners[slot].push(cb) -1; this.listeners[slot].push(cb);
const listenerIndex = this.listeners[slot].length - 1;
return { return {
remove: () => { remove: () => {

View File

@ -1,5 +1,5 @@
import BSAlert from 'inferno-bootstrap/dist/Alert'; import BSAlert from 'inferno-bootstrap/dist/Alert';
import Badge from 'inferno-bootstrap/dist/Badge'; import BSBadge from 'inferno-bootstrap/dist/Badge';
import Breadcrumb from 'inferno-bootstrap/dist/Breadcrumb'; import Breadcrumb from 'inferno-bootstrap/dist/Breadcrumb';
import BreadcrumbItem from 'inferno-bootstrap/dist/BreadcrumbItem'; import BreadcrumbItem from 'inferno-bootstrap/dist/BreadcrumbItem';
import ButtonDropdown from 'inferno-bootstrap/dist/ButtonDropdown'; import ButtonDropdown from 'inferno-bootstrap/dist/ButtonDropdown';
@ -26,16 +26,18 @@ import Table from 'inferno-bootstrap/dist/Table';
import Tooltip from 'inferno-bootstrap/dist/Tooltip'; import Tooltip from 'inferno-bootstrap/dist/Tooltip';
export const BSWrapper = (Component, tagName) => { export const BSWrapper = (Component, tagName) => {
return ({children, ...props}) => ( return ({children, ...props}) => (Component.defaultProps.wrapTag !== undefined) ? (
<Component wrapTag={tagName} {...props}>{children}</Component>
) : (
<Component tag={tagName} {...props}>{children}</Component> <Component tag={tagName} {...props}>{children}</Component>
); );
}; };
export const Alert = BSWrapper(BSAlert, 'bs-alert'); export const Alert = BSWrapper(BSAlert, 'bs-alert');
export const Badge = BSWrapper(BSBadge, 'bs-badge');
export const Jumbotron = BSWrapper(BSJumbotron, 'bs-jumbotron'); export const Jumbotron = BSWrapper(BSJumbotron, 'bs-jumbotron');
export { export {
Badge,
Breadcrumb, Breadcrumb,
BreadcrumbItem, BreadcrumbItem,
ButtonDropdown, ButtonDropdown,

View File

@ -1,11 +1,11 @@
import Modal from 'inferno-bootstrap/dist/Modal/Modal'; import BSModal from 'inferno-bootstrap/dist/Modal/Modal';
import ModalBody from 'inferno-bootstrap/dist/Modal/ModalBody'; import BSModalBody from 'inferno-bootstrap/dist/Modal/ModalBody';
import ModalFooter from 'inferno-bootstrap/dist/Modal/ModalFooter'; import BSModalFooter from 'inferno-bootstrap/dist/Modal/ModalFooter';
import ModalHeader from 'inferno-bootstrap/dist/Modal/ModalHeader'; import BSModalHeader from 'inferno-bootstrap/dist/Modal/ModalHeader';
export { import { BSWrapper } from './Bootstrap';
Modal,
ModalBody, export const Modal = BSWrapper(BSModal, 'bs-modal');
ModalFooter, export const ModalBody = BSWrapper(BSModalBody, 'bs-modal-body');
ModalHeader, export const ModalFooter = BSWrapper(BSModalFooter, 'bs-modal-footer');
}; export const ModalHeader = BSWrapper(BSModalHeader, 'bs-modal-header');

View File

@ -1,6 +1,21 @@
import { linkEvent } from 'inferno'; import bindAll from 'lodash-es/bindAll';
import { Component, linkEvent } from 'inferno';
function handleChange (props, event) { export class DOMForm extends Component {
constructor () {
super();
this.state = {
hasBeenValidated: false,
};
bindAll(this, [
'handleChange',
'handleSubmit',
]);
}
handleChange (props, event) {
const formElement = event.target.closest('form'); const formElement = event.target.closest('form');
const rawFormData = new FormData(formElement); const rawFormData = new FormData(formElement);
@ -17,14 +32,18 @@ function handleChange (props, event) {
} }
} }
function handleSubmit (props, event) { handleSubmit (props, event) {
// Don't want to actually reload the page! // Don't want to actually reload the page!
event.preventDefault(); event.preventDefault();
const form = event.target.closest('form');
this.setState({
hasBeenValidated: true,
});
// Parsers are formatters or maskers // Parsers are formatters or maskers
const parsers = {}; const parsers = {};
const form = event.target.closest('form');
const data = new FormData(form); const data = new FormData(form);
data.forEach((value, name) => { data.forEach((value, name) => {
@ -37,24 +56,34 @@ function handleSubmit (props, event) {
} }
}); });
// Don't attempt to submit an invalid form
if (!event.target.checkValidity()) {
return;
}
if (props.onSubmit) { if (props.onSubmit) {
props.onSubmit(data); props.onSubmit(data);
} }
} }
export function DOMForm (props) { render (props, state, context) {
const passProps = {...props}; const passProps = {...props};
const children = passProps.children; const children = passProps.children;
delete passProps.onChange; delete passProps.onChange;
delete passProps.onSubmit; delete passProps.onSubmit;
const cssClass = state.hasBeenValidated ? 'was-validated' : 'needs-validation';
return ( return (
<form <form
onInput={linkEvent(props, handleChange)} class={cssClass}
onSubmit={linkEvent(props, handleSubmit)} noValidate
onInput={linkEvent(props, this.handleChange)}
onSubmit={linkEvent(props, this.handleSubmit)}
{...passProps} {...passProps}
> >
{children} {children}
</form> </form>
); );
} }
}

View File

@ -1,25 +1,51 @@
import { import {
Col, Col,
FormFeedback,
FormGroup, FormGroup,
FormText,
Input, Input,
InputGroup,
Label, Label,
} from '//components/Bootstrap'; } from '//components/Bootstrap';
export const FormBlock = ({ export const FormBlock = ({
children, children,
grouped = false,
helpText = null,
invalidText = null,
label, label,
type = 'text', type = 'text',
validText = null,
...props ...props
}) => { }) => {
const formElement = (children !== undefined) let formElement = (children !== undefined)
? children ? children
: <Input id={props.name} name={props.name} type={type} {...props} />; : <Input id={props.name} name={props.name} type={type} {...props} />;
if (grouped !== false) {
formElement = <InputGroup>{formElement}</InputGroup>
}
const helperText = (helpText !== null)
? <FormText>{helpText}</FormText>
: null;
let feedbackText = invalidText
if (feedbackText === null && props.required === true) {
feedbackText = 'This field is required.';
}
const feedback = (feedbackText !== null)
? <FormFeedback>{feedbackText}</FormFeedback>
: null;
return ( return (
<Col xs={12} md={6} xl={4} className="d-flex align-items-baseline justify-content-around"> <Col xs={12} md={6} xl={4} className="d-flex align-items-baseline">
<FormGroup> <FormGroup>
<Label for={props.name}>{label}</Label> <Label for={props.name}>{label}</Label>
{formElement} {formElement}
{helperText}
{feedback}
</FormGroup> </FormGroup>
</Col> </Col>
); );

View File

@ -29,7 +29,7 @@ const createWindow = () => {
// load the index.html of the app. // load the index.html of the app.
const startUrl = DEV_MODE const startUrl = DEV_MODE
? 'http://localhost:3000' ? 'https://localhost:3000'
: `file://${path.join(__dirname, '/../../build/index.html')}`; : `file://${path.join(__dirname, '/../../build/index.html')}`;
mainWindow.loadURL(startUrl); mainWindow.loadURL(startUrl);

View File

@ -3,7 +3,7 @@ const log = require('electron-log');
const net = require('net'); const net = require('net');
const port = process.env.PORT ? (process.env.PORT - 100) : 3000; const port = process.env.PORT ? (process.env.PORT - 100) : 3000;
process.env.ELECTRON_START_URL = `http://localhost:${port}`; process.env.ELECTRON_START_URL = `https://localhost:${port}`;
log.transports.file.level = false; log.transports.file.level = false;
const client = new net.Socket(); const client = new net.Socket();

View File

@ -6,6 +6,12 @@ import {
CardFooter, CardFooter,
CardTitle, CardTitle,
Col, Col,
FormGroup,
FormText,
Input,
InputGroup,
InputGroupAddon,
Label,
Row, Row,
} from '//components/Bootstrap'; } from '//components/Bootstrap';
@ -40,38 +46,56 @@ function handleSave (formData) {
export function FilmAddView () { export function FilmAddView () {
return ( return (
<Row className="full-height"> <Row class="full-height">
<Col sm={12} md={8} lg={4} className="abs-center"> <Col sm={12} class="abs-center">
<DOMForm onChange={handleFormChange} onSubmit={handleSave}> <DOMForm onChange={handleFormChange} onSubmit={handleSave}>
<Card> <Card>
<CardHeader> <CardHeader>
<CardTitle>Add a Film</CardTitle> <CardTitle>Add a Film</CardTitle>
</CardHeader> </CardHeader>
<CardBody> <CardBody>
<Row className="align-items-baseline"> <Row class="form-row align-items-baseline">
<FormBlock <FormBlock
label="Brand" label="Manufacturer"
name="brand" name="brand"
required required
/> />
<FormBlock <FormBlock
helpText="e.g. Ektar, Fujicolor, etc."
label="Film Name" label="Film Name"
name="film-name" name="film-name"
required required
/> />
<FormBlock <Col sm={12} md={6} lg={4}>
label="Film Speed (ASA/ISO)" <FormGroup>
<Label for="film-speed-asa">Film Speed (IS0)</Label>
<InputGroup>
<Input
max="6400" max="6400"
maxLength="4"
min="1" min="1"
name="film-speed-asa" name="film-speed-asa"
placeholder="100"
required required
type="number" type="number"
/> />
<FormBlock <InputGroupAddon addonType="append">/</InputGroupAddon>
label="Film Speed (DIN)" <Input
max="39"
maxLength="2"
min="1"
name="film-speed-din" name="film-speed-din"
placeholder="21"
required
size="2"
step="1"
type="number" type="number"
/> />
<InputGroupAddon addonType="append">&deg;</InputGroupAddon>
</InputGroup>
<FormText>Film Sensitivity</FormText>
</FormGroup>
</Col>
<FormBlock <FormBlock
label="Film Format" label="Film Format"
name="film-format" name="film-format"
@ -81,10 +105,9 @@ export function FilmAddView () {
id="film-format" id="film-format"
name="film-format" name="film-format"
> >
<option value="">&nbsp;</option>
<optgroup label="Miniature Format"> <optgroup label="Miniature Format">
<option value="110">110</option> <option value="110">110 (Pocket Instamatic)</option>
<option value="135">35mm (135)</option> <option selected value="135">35mm (135)</option>
</optgroup> </optgroup>
<optgroup label="Medium Format"> <optgroup label="Medium Format">
<option value="120">120</option> <option value="120">120</option>
@ -108,5 +131,4 @@ export function FilmAddView () {
</Col> </Col>
</Row> </Row>
); );
}; }

View File

@ -1,4 +1,5 @@
export * from '//views/Camera'; export * from '//views/Camera';
export * from '//views/Film'; export * from '//views/Film';
export * from '//views/HomeView'; export * from '//views/HomeView';
export * from '//views/Lenses';
export * from '//views/OopsView'; export * from '//views/OopsView';

233
yarn.lock
View File

@ -782,10 +782,10 @@ ajv-keywords@^3.2.0:
resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo= integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=
ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1: ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1, ajv@^6.7.0:
version "6.6.2" version "6.7.0"
resolved "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d" resolved "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz#e3ce7bb372d6577bb1839f1dfdfcbf5ad2948d96"
integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g== integrity sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==
dependencies: dependencies:
fast-deep-equal "^2.0.1" fast-deep-equal "^2.0.1"
fast-json-stable-stringify "^2.0.0" fast-json-stable-stringify "^2.0.0"
@ -859,37 +859,37 @@ anymatch@^2.0.0:
micromatch "^3.1.4" micromatch "^3.1.4"
normalize-path "^2.1.1" normalize-path "^2.1.1"
app-builder-bin@2.6.1: app-builder-bin@2.6.3:
version "2.6.1" version "2.6.3"
resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.1.tgz#aa97f82d341dfa6f1269d78955482d619cc613ed" resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.3.tgz#428557e8fd517ef6272b3d85593ebb288c2aed90"
integrity sha512-W0l85O+s6lOaziWqAhszPfwiG0s15FvMBP9j9i/bknsMccUkwN60u4Cy7yYtf6akCUDuJenLqpTX4/xvkq1egw== integrity sha512-JL8C41e6yGIchFsHP/q15aGNedAaUakLhkV6ER0Yxafx08sRnlDnlkAkEIKjX7edg/4i7swpGa6CBv1zX9GgCA==
app-builder-lib@20.38.4, app-builder-lib@~20.38.3: app-builder-lib@20.38.5, app-builder-lib@~20.38.5:
version "20.38.4" version "20.38.5"
resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.38.4.tgz#71a515d01f4f2bd48a67495804f659a46c35303c" resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.38.5.tgz#bdfbbc35e10571c6cf1f62daae95991d27686a03"
integrity sha512-JbuAJQBndcCW6BJVIb2tPjM5wiuIjz2LUlbyVxNIawM2wFKUBV9kr0N3RNBJFxcrCEuA9oprMUCoymJdrMUVfA== integrity sha512-vVgM9d9twwlhr+8vNAJOAD9dyVBRk7reuVa1BE1OmvaHb1M+fS8KpvcDKVdBqX9KDHy7zSc57mnIcHgax4/XMA==
dependencies: dependencies:
"7zip-bin" "~4.1.0" "7zip-bin" "~4.1.0"
app-builder-bin "2.6.1" app-builder-bin "2.6.3"
async-exit-hook "^2.0.1" async-exit-hook "^2.0.1"
bluebird-lst "^1.0.6" bluebird-lst "^1.0.6"
builder-util "9.6.1" builder-util "9.6.2"
builder-util-runtime "8.1.0" builder-util-runtime "8.1.1"
chromium-pickle-js "^0.2.0" chromium-pickle-js "^0.2.0"
debug "^4.1.0" debug "^4.1.1"
ejs "^2.6.1" ejs "^2.6.1"
electron-osx-sign "0.4.11" electron-osx-sign "0.4.11"
electron-publish "20.38.3" electron-publish "20.38.5"
fs-extra-p "^7.0.0" fs-extra-p "^7.0.0"
hosted-git-info "^2.7.1" hosted-git-info "^2.7.1"
is-ci "^2.0.0" is-ci "^2.0.0"
isbinaryfile "^3.0.3" isbinaryfile "^4.0.0"
js-yaml "^3.12.0" js-yaml "^3.12.1"
lazy-val "^1.0.3" lazy-val "^1.0.3"
minimatch "^3.0.4" minimatch "^3.0.4"
normalize-package-data "^2.4.0" normalize-package-data "^2.4.0"
plist "^3.0.1" plist "^3.0.1"
read-config-file "3.2.0" read-config-file "3.2.1"
sanitize-filename "^1.6.1" sanitize-filename "^1.6.1"
semver "^5.6.0" semver "^5.6.0"
temp-file "^3.3.2" temp-file "^3.3.2"
@ -1197,9 +1197,9 @@ babel-plugin-macros@2.4.2:
resolve "^1.8.1" resolve "^1.8.1"
babel-plugin-module-resolver@^3.1.1: babel-plugin-module-resolver@^3.1.1:
version "3.1.1" version "3.1.2"
resolved "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.1.tgz#881cf67e3d4b8400d5eaaefc1be44d2dc1fe404f" resolved "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.2.tgz#5d4bd3572eb1d1d4c7ca37bd53de8ec82d251dcb"
integrity sha512-1Q77Al4ydp6nYApJ7sQ2fmgz30WuQgJZegIYuyOdbdpxenB/bSezQ3hDPsumIXGlUS4vUIv+EwFjzzXZNWtARw== integrity sha512-OiDI8VKCp8zcjhbp/QwqZ5MliRTHp+Fv8tO2IJYiCl1B18/4t8ZCVhm90/8JDe+Zu4Th/DUxeLCHws8kbkVUZQ==
dependencies: dependencies:
find-babel-config "^1.1.0" find-babel-config "^1.1.0"
glob "^7.1.2" glob "^7.1.2"
@ -1483,12 +1483,12 @@ browserslist@4.3.5:
node-releases "^1.0.5" node-releases "^1.0.5"
browserslist@^4.3.4: browserslist@^4.3.4:
version "4.3.7" version "4.4.0"
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.3.7.tgz#f1de479a6466ea47a0a26dcc725e7504817e624a" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.4.0.tgz#7050d1412cbfc5274aba609ed5e50359ca1a5fdf"
integrity sha512-pWQv51Ynb0MNk9JGMCZ8VkM785/4MQNXiFYtPqI7EEP0TJO+/d/NqRVn1uiAN0DNbnlUSpL2sh16Kspasv3pUQ== integrity sha512-tQkHS8VVxWbrjnNDXgt7/+SuPJ7qDvD0Y2e6bLtoQluR2SPvlmPUcfcU75L1KAalhqULlIFJlJ6BDfnYyJxJsw==
dependencies: dependencies:
caniuse-lite "^1.0.30000925" caniuse-lite "^1.0.30000928"
electron-to-chromium "^1.3.96" electron-to-chromium "^1.3.100"
node-releases "^1.1.3" node-releases "^1.1.3"
bser@^2.0.0: bser@^2.0.0:
@ -1521,31 +1521,31 @@ buffer-from@^1.0.0:
resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
builder-util-runtime@8.1.0, builder-util-runtime@^8.1.0: builder-util-runtime@8.1.1, builder-util-runtime@^8.1.1:
version "8.1.0" version "8.1.1"
resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.1.0.tgz#dd7fca995d48ceee7580b4851ca057566c94601e" resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.1.1.tgz#f2f6fc43e33d26892bd491667fc746ad69bccc50"
integrity sha512-s1mlJ28mv+56Iebh6c9aXjVe11O3Z0cDTwAGeB0PCcUzHA37fDxGgS8ZGoYNMZP+rBHj21d/od1wuYofTVLaQg== integrity sha512-+ieS4PMB33vVE2S3ZNWBEQJ1zKmAs/agrBdh7XadE1lKLjrH4aXYuOh9OOGdxqIRldhlhNBaF+yKMMEFOdNVig==
dependencies: dependencies:
bluebird-lst "^1.0.6" bluebird-lst "^1.0.6"
debug "^4.1.0" debug "^4.1.1"
fs-extra-p "^7.0.0" fs-extra-p "^7.0.0"
sax "^1.2.4" sax "^1.2.4"
builder-util@9.6.1, builder-util@~9.6.0: builder-util@9.6.2, builder-util@~9.6.2:
version "9.6.1" version "9.6.2"
resolved "https://registry.npmjs.org/builder-util/-/builder-util-9.6.1.tgz#4625620b1535fe40dcacb178d24fe56d0d7c8957" resolved "https://registry.npmjs.org/builder-util/-/builder-util-9.6.2.tgz#3366aefea1b5ce292840be727a094e96fa25802f"
integrity sha512-8MljKTjeV+A+LLVexuWEV3EpWbiUcsHHrB4Bg2qNo/3dC+vTo6g/27+W3Ij7Ij1UTobSkNBstFieWijXJCco9A== integrity sha512-cWl/0/Q851lesMmXp1IjreeAX1QAWA9e+iU2IT61oh+CvMYJnDwao2m9ZCHammdw2zllrwWu4fOC3gvsb/yOCw==
dependencies: dependencies:
"7zip-bin" "~4.1.0" "7zip-bin" "~4.1.0"
app-builder-bin "2.6.1" app-builder-bin "2.6.3"
bluebird-lst "^1.0.6" bluebird-lst "^1.0.6"
builder-util-runtime "^8.1.0" builder-util-runtime "^8.1.1"
chalk "^2.4.1" chalk "^2.4.2"
debug "^4.1.0" debug "^4.1.1"
fs-extra-p "^7.0.0" fs-extra-p "^7.0.0"
is-ci "^2.0.0" is-ci "^2.0.0"
js-yaml "^3.12.0" js-yaml "^3.12.1"
source-map-support "^0.5.9" source-map-support "^0.5.10"
stat-mode "^0.2.2" stat-mode "^0.2.2"
temp-file "^3.3.2" temp-file "^3.3.2"
@ -1621,10 +1621,10 @@ camelcase@^5.0.0:
resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42"
integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==
caniuse-lite@^1.0.30000912, caniuse-lite@^1.0.30000925: caniuse-lite@^1.0.30000912, caniuse-lite@^1.0.30000928:
version "1.0.30000928" version "1.0.30000929"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000928.tgz#805e828dc72b06498e3683a32e61c7507fd67b88" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000929.tgz#7b391b781a9c3097ecc39ea053301aea8ea16317"
integrity sha512-aSpMWRXL6ZXNnzm8hgE4QDLibG5pVJ2Ujzsuj3icazlIkxXkPXtL+BWnMx6FBkWmkZgBHGUxPZQvrbRw2ZTxhg== integrity sha512-n2w1gPQSsYyorSVYqPMqbSaz1w7o9ZC8VhOEGI9T5MfGDzp7sbopQxG6GaQmYsaq13Xfx/mkxJUWC1Dz3oZfzw==
capture-exit@^1.2.0: capture-exit@^1.2.0:
version "1.2.0" version "1.2.0"
@ -1663,7 +1663,7 @@ chalk@2.4.1:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
supports-color "^5.3.0" supports-color "^5.3.0"
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2" version "2.4.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@ -1996,7 +1996,7 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.2.5:
dependencies: dependencies:
ms "^2.1.1" ms "^2.1.1"
debug@^4.0.1, debug@^4.1.0: debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
version "4.1.1" version "4.1.1"
resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
@ -2113,17 +2113,17 @@ diff@^3.2.0:
resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
dmg-builder@6.5.3: dmg-builder@6.5.4:
version "6.5.3" version "6.5.4"
resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.5.3.tgz#95afe3deab33fd874f68d299bc71b481e94f5312" resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.5.4.tgz#18c573a5e777cbb39d84d7eaa84d965e1bb5b01f"
integrity sha512-ZNl4GFBg6rdFplnuoK56iftxh/qgM7rXJUxgl21eK4WsjxgQwtQ0REZo+pDSL4OzVeyOO8MMNWSNQcCsBLiDyA== integrity sha512-EaEkF8weXez3iAwgYffjcYfumauUh5x+BggMgn/IuihNIA5/WfzRAUR4wMq9aII2zwArlw+rIrX6ZHKbmtkQmA==
dependencies: dependencies:
app-builder-lib "~20.38.3" app-builder-lib "~20.38.5"
bluebird-lst "^1.0.6" bluebird-lst "^1.0.6"
builder-util "~9.6.0" builder-util "~9.6.2"
fs-extra-p "^7.0.0" fs-extra-p "^7.0.0"
iconv-lite "^0.4.24" iconv-lite "^0.4.24"
js-yaml "^3.12.0" js-yaml "^3.12.1"
parse-color "^1.0.0" parse-color "^1.0.0"
sanitize-filename "^1.6.1" sanitize-filename "^1.6.1"
@ -2161,7 +2161,7 @@ dotenv-expand@^4.2.0:
resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275"
integrity sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU= integrity sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=
dotenv@^6.1.0: dotenv@^6.2.0:
version "6.2.0" version "6.2.0"
resolved "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" resolved "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064"
integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==
@ -2190,20 +2190,20 @@ ejs@^2.6.1:
integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==
electron-builder@^20.15.1: electron-builder@^20.15.1:
version "20.38.4" version "20.38.5"
resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-20.38.4.tgz#67727529ffb87e7fdd78b3a84ea0d6c22bf04ec2" resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-20.38.5.tgz#31b3913a68b4911afd4cfc7bcd2522c5808040cd"
integrity sha512-WHOr3Rz2wktxV5TqmRL6woO9/wrIZeRfJPSEXOhgfgLskE5Sp2Aer0zAF7lHNqXuG6JhU+0I9IYFAxa73MTs9w== integrity sha512-p88IDHhH2J4hA6KwRBJY+OfVZuFtFIShY3Uh/TwYAfbX0v1RhKZytuGdO8sty2zcWxDYX74xDBv+X9oN6qEIRQ==
dependencies: dependencies:
app-builder-lib "20.38.4" app-builder-lib "20.38.5"
bluebird-lst "^1.0.6" bluebird-lst "^1.0.6"
builder-util "9.6.1" builder-util "9.6.2"
builder-util-runtime "8.1.0" builder-util-runtime "8.1.1"
chalk "^2.4.1" chalk "^2.4.2"
dmg-builder "6.5.3" dmg-builder "6.5.4"
fs-extra-p "^7.0.0" fs-extra-p "^7.0.0"
is-ci "^2.0.0" is-ci "^2.0.0"
lazy-val "^1.0.3" lazy-val "^1.0.3"
read-config-file "3.2.0" read-config-file "3.2.1"
sanitize-filename "^1.6.1" sanitize-filename "^1.6.1"
update-notifier "^2.5.0" update-notifier "^2.5.0"
yargs "^12.0.5" yargs "^12.0.5"
@ -2250,23 +2250,23 @@ electron-osx-sign@0.4.11:
minimist "^1.2.0" minimist "^1.2.0"
plist "^3.0.1" plist "^3.0.1"
electron-publish@20.38.3: electron-publish@20.38.5:
version "20.38.3" version "20.38.5"
resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-20.38.3.tgz#7c162904f728ba2bbf2640bc3620b65ce1061ce3" resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-20.38.5.tgz#c6ed7ea12bc80796b1f36489995f4651f730b1df"
integrity sha512-Qomq253NT5DfjUZgFSx6p+gheU5YhM6zZ67fTtBZvwyk0v8HwxNXfa8fZT7h+1c3BwEmjusTbmjZRNW/XZBXFA== integrity sha512-EhdPm6t0nKDfa0r3KjV1kSFcz03VrzgJRv7v5nHkkpQZB6OSmDNlHq7k66NBwQhPK3i4CK+uvehljZAP28vbCA==
dependencies: dependencies:
bluebird-lst "^1.0.6" bluebird-lst "^1.0.6"
builder-util "~9.6.0" builder-util "~9.6.2"
builder-util-runtime "^8.1.0" builder-util-runtime "^8.1.1"
chalk "^2.4.1" chalk "^2.4.2"
fs-extra-p "^7.0.0" fs-extra-p "^7.0.0"
lazy-val "^1.0.3" lazy-val "^1.0.3"
mime "^2.4.0" mime "^2.4.0"
electron-to-chromium@^1.3.86, electron-to-chromium@^1.3.96: electron-to-chromium@^1.3.100, electron-to-chromium@^1.3.86:
version "1.3.100" version "1.3.103"
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.100.tgz#899fb088def210aee6b838a47655bbb299190e13" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.103.tgz#a695777efdbc419cad6cbb0e58458251302cd52f"
integrity sha512-cEUzis2g/RatrVf8x26L8lK5VEls1AGnLHk6msluBUg/NTB4wcXzExTsGscFq+Vs4WBBU2zbLLySvD4C0C3hwg== integrity sha512-tObPqGmY9X8MUM8i3MEimYmbnLLf05/QV5gPlkR8MQ3Uj8G8B2govE1U4cQcBYtv3ymck9Y8cIOu4waoiykMZQ==
electron@^4.0.1: electron@^4.0.1:
version "4.0.1" version "4.0.1"
@ -2525,9 +2525,9 @@ eslint@^5.12.0:
text-table "^0.2.0" text-table "^0.2.0"
esm@^3.0.40: esm@^3.0.40:
version "3.0.84" version "3.1.0"
resolved "https://registry.npmjs.org/esm/-/esm-3.0.84.tgz#bb108989f4673b32d4f62406869c28eed3815a63" resolved "https://registry.npmjs.org/esm/-/esm-3.1.0.tgz#89eb950b3f04b691b12f96a0d9c8de93039a1a26"
integrity sha512-SzSGoZc17S7P+12R9cg21Bdb7eybX25RnIeRZ80xZs+VZ3kdQKzqTp2k4hZJjR7p9l0186TTXSgrxzlMDBktlw== integrity sha512-r4Go7Wh7Wh0WPinRXeeM9PIajRsUdt8SAyki5R1obVc0+BwtqvtjbngVSSdXg0jCe2xZkY8hyBMx6q/uymUkPw==
espree@^5.0.0: espree@^5.0.0:
version "5.0.0" version "5.0.0"
@ -2617,27 +2617,27 @@ execa@^1.0.0:
signal-exit "^3.0.0" signal-exit "^3.0.0"
strip-eof "^1.0.0" strip-eof "^1.0.0"
exiftool-vendored.exe@11.21.0: exiftool-vendored.exe@11.24.0:
version "11.21.0" version "11.24.0"
resolved "https://registry.npmjs.org/exiftool-vendored.exe/-/exiftool-vendored.exe-11.21.0.tgz#623223aba3aef9babc6732732cf790a2b5273b1d" resolved "https://registry.npmjs.org/exiftool-vendored.exe/-/exiftool-vendored.exe-11.24.0.tgz#5f4f1ea52a43f0056d19cc6207cfa216405a37dc"
integrity sha512-gLGy2DUln/vhnFY8NDx2ALc/Gz1hHT/Svgkc44ewF+3EGFXE3zD+6gW3TWfhJk/7qEVppLJdc6BxX8ssD//Ztw== integrity sha512-HWFfM7N5Oqb9ZulptuyxpQDvPNQ/K/OFSQyufaEyYhXC1jwJ2thmBJ/ESRR+C6rZ+rlIiMiyvXsC0OfA4L5OGw==
exiftool-vendored.pl@11.21.0: exiftool-vendored.pl@11.24.0, exiftool-vendored.pl@^11.24.0:
version "11.21.0" version "11.24.0"
resolved "https://registry.npmjs.org/exiftool-vendored.pl/-/exiftool-vendored.pl-11.21.0.tgz#c0a385e1bfd72766556570009e09d4acdc7e652f" resolved "https://registry.npmjs.org/exiftool-vendored.pl/-/exiftool-vendored.pl-11.24.0.tgz#26ea1ff8661015888be572e300ad2e63b4773678"
integrity sha512-Z3lOoDnSNcOtJaZah5V4OyGK24l1SqMdAxmJ3nls51l8M1dSQYX5LyO1YWtNK2NbO+bC64deMULZB3BPltkPiA== integrity sha512-LEoKO28SJxvDbbHwG5Iu/AagTFESfxKZl4RHAfk6T8jAQObUbS0XJLQTglfRoDXNgx3RHcI6rzYsk/c7mUU/rg==
exiftool-vendored@^7.5.0: exiftool-vendored@^7.5.0:
version "7.5.0" version "7.6.1"
resolved "https://registry.npmjs.org/exiftool-vendored/-/exiftool-vendored-7.5.0.tgz#36d9134e50b450c06c8e196257da2b7ad63a5b43" resolved "https://registry.npmjs.org/exiftool-vendored/-/exiftool-vendored-7.6.1.tgz#aa5da10780c94c4ede87c4c612173d343c927629"
integrity sha512-APSeQlS4JLcu9OLtuAPILMLmGXcCUwDBCF0wHtV8hrzM01QdCIy3mUuf9Yye0QOWmIUsF8X2ZYrOAyXlRFOZsg== integrity sha512-Y8mtnV77yfWLwsi6vSwjRITrjukya/Q5rGltGOzKRdq6BLn2iF1JfS2RmA3pT8S/mHIMTJxH14b/WbCK/pCgEw==
dependencies: dependencies:
batch-cluster "^5.0.1" batch-cluster "^5.0.1"
luxon "^1.8.2" luxon "^1.10.0"
tz-lookup "^6.1.8" tz-lookup "^6.1.8"
optionalDependencies: optionalDependencies:
exiftool-vendored.exe "11.21.0" exiftool-vendored.exe "11.24.0"
exiftool-vendored.pl "11.21.0" exiftool-vendored.pl "11.24.0"
exit@^0.1.2: exit@^0.1.2:
version "0.1.2" version "0.1.2"
@ -2990,9 +2990,9 @@ fs.realpath@^1.0.0:
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@^1.0.0, fsevents@^1.2.3: fsevents@^1.0.0, fsevents@^1.2.3:
version "1.2.4" version "1.2.6"
resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.6.tgz#d3a1864a71876a2eb9b244e3bd8f606eb09568c0"
integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== integrity sha512-BalK54tfK0pMC0jQFb2oHn1nz7JNQD/2ex5pBnCHgBi2xG7VV0cAOGy2RS2VbCqUXx5/6obMrMcQTJ8yjcGzbg==
dependencies: dependencies:
nan "^2.9.2" nan "^2.9.2"
node-pre-gyp "^0.10.0" node-pre-gyp "^0.10.0"
@ -3900,13 +3900,18 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
isbinaryfile@^3.0.2, isbinaryfile@^3.0.3: isbinaryfile@^3.0.2:
version "3.0.3" version "3.0.3"
resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80"
integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==
dependencies: dependencies:
buffer-alloc "^1.2.0" buffer-alloc "^1.2.0"
isbinaryfile@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.0.tgz#07d1061c21598b41292b0f5c68add5eab601ad8e"
integrity sha512-RBtmso6l2mCaEsUvXngMTIjg3oheXo0MgYzzfT6sk44RYggPnm9fT+cQJAmzRnJIxPHXg9FZglqDJGW28dvcqA==
isexe@^2.0.0: isexe@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@ -4344,7 +4349,7 @@ js-tokens@^3.0.2:
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.9.0: js-yaml@^3.12.0, js-yaml@^3.12.1, js-yaml@^3.7.0, js-yaml@^3.9.0:
version "3.12.1" version "3.12.1"
resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600"
integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA== integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==
@ -4673,7 +4678,7 @@ lru-cache@^4.0.1:
pseudomap "^1.0.2" pseudomap "^1.0.2"
yallist "^2.1.2" yallist "^2.1.2"
luxon@^1.8.2: luxon@^1.10.0:
version "1.10.0" version "1.10.0"
resolved "https://registry.npmjs.org/luxon/-/luxon-1.10.0.tgz#335b55e2fed50e09f869aee828897a3f67c7044e" resolved "https://registry.npmjs.org/luxon/-/luxon-1.10.0.tgz#335b55e2fed50e09f869aee828897a3f67c7044e"
integrity sha512-ry3GKh//v3isD6oJN5pFWmdh+3GiScwv9q8VgG6fZ2j1guGOol2vVVdo4GBAWCrcq5RHOqSeipqHBnOu/u024Q== integrity sha512-ry3GKh//v3isD6oJN5pFWmdh+3GiScwv9q8VgG6fZ2j1guGOol2vVVdo4GBAWCrcq5RHOqSeipqHBnOu/u024Q==
@ -4724,9 +4729,9 @@ map-visit@^1.0.0:
object-visit "^1.0.0" object-visit "^1.0.0"
math-random@^1.0.1: math-random@^1.0.1:
version "1.0.1" version "1.0.4"
resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
mem@^1.1.0: mem@^1.1.0:
version "1.1.0" version "1.1.0"
@ -5711,18 +5716,18 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.1, rc@^1.2.7:
minimist "^1.2.0" minimist "^1.2.0"
strip-json-comments "~2.0.1" strip-json-comments "~2.0.1"
read-config-file@3.2.0: read-config-file@3.2.1:
version "3.2.0" version "3.2.1"
resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.0.tgz#50a2756a9a128ab9dcbe087e2724c512e3d0ccd1" resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.1.tgz#112dc8636121fa71fd524e1a8a5b4470ef7a2732"
integrity sha512-i1QRc5jy4sHm9YBGb6ArA5SU1mDrc5wu2mnm3r9gPnm+LVZhBGbpTCKqAXyvV4TJHnBR3Yaaww+9b3DyRZcfww== integrity sha512-yW4hZZXdNN+Paij5JVAiTv1lUsAN5QRBU5NqotQqwYdVkUczSmDzm66VLu0eojiZt2zFeYptTFDAYlalDGuHdA==
dependencies: dependencies:
ajv "^6.5.5" ajv "^6.7.0"
ajv-keywords "^3.2.0" ajv-keywords "^3.2.0"
bluebird-lst "^1.0.6" bluebird-lst "^1.0.6"
dotenv "^6.1.0" dotenv "^6.2.0"
dotenv-expand "^4.2.0" dotenv-expand "^4.2.0"
fs-extra-p "^7.0.0" fs-extra-p "^7.0.0"
js-yaml "^3.12.0" js-yaml "^3.12.1"
json5 "^2.1.0" json5 "^2.1.0"
lazy-val "^1.0.3" lazy-val "^1.0.3"
@ -6452,7 +6457,7 @@ source-map-support@^0.4.15:
dependencies: dependencies:
source-map "^0.5.6" source-map "^0.5.6"
source-map-support@^0.5.6, source-map-support@^0.5.9, source-map-support@~0.5.6: source-map-support@^0.5.10, source-map-support@^0.5.6, source-map-support@~0.5.6:
version "0.5.10" version "0.5.10"
resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ== integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==
@ -6694,9 +6699,9 @@ symbol-tree@^3.2.2:
integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
table@^5.0.2: table@^5.0.2:
version "5.2.0" version "5.2.1"
resolved "https://registry.npmjs.org/table/-/table-5.2.0.tgz#2e38bd1f16dd3f97085ac80cdc574ad9198af04d" resolved "https://registry.npmjs.org/table/-/table-5.2.1.tgz#e78463702b1be9f7131c39860bcfb1b81114c2a1"
integrity sha512-hAdBBAMCZl4/U3eQhsPN2Z8wRJC98lpRhDW2I86VQbPBqyj4E681VhvUkfb90qUJ4rnRfu8t4/8SGHPsAH1ygg== integrity sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==
dependencies: dependencies:
ajv "^6.6.1" ajv "^6.6.1"
lodash "^4.17.11" lodash "^4.17.11"