diff --git a/assets/certs/localhost+2-key.pem b/assets/certs/localhost+2-key.pem
new file mode 100644
index 0000000..1a17095
--- /dev/null
+++ b/assets/certs/localhost+2-key.pem
@@ -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-----
diff --git a/assets/certs/localhost+2.pem b/assets/certs/localhost+2.pem
new file mode 100644
index 0000000..635fa12
--- /dev/null
+++ b/assets/certs/localhost+2.pem
@@ -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-----
diff --git a/assets/certs/rootCA.pem b/assets/certs/rootCA.pem
new file mode 100644
index 0000000..6a8dc29
--- /dev/null
+++ b/assets/certs/rootCA.pem
@@ -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-----
diff --git a/package.json b/package.json
index 8049f1f..08ccb3a 100644
--- a/package.json
+++ b/package.json
@@ -56,6 +56,7 @@
"eslint-plugin-node": "^8.0.1",
"eslint-plugin-promise": "^4.0.1",
"eslint-plugin-standard": "^4.0.0",
+ "exiftool-vendored.pl": "^11.24.0",
"husky": "^1.3.1",
"inferno-devtools": "^7.0.5",
"jest": "^23.0.1",
diff --git a/public/css/app.css b/public/css/app.css
index bcba87b..6e36c64 100644
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -61,7 +61,7 @@ cssload-loader {
margin: auto;
}
-.cssload-inner {
+cssload-inner {
position: absolute;
width: 100%;
height: 100%;
diff --git a/rollup.dev.js b/rollup.dev.js
index 300cb84..ae1b99a 100644
--- a/rollup.dev.js
+++ b/rollup.dev.js
@@ -2,6 +2,7 @@ import baseConfig from './rollup.config';
import alias from 'rollup-plugin-alias';
import filesize from 'rollup-plugin-filesize';
+import fs from 'fs';
import livereload from 'rollup-plugin-livereload';
import replace from 'rollup-plugin-replace';
import serve from 'rollup-plugin-serve';
@@ -20,15 +21,27 @@ export default {
filesize(),
serve({
contentBase: ['build', 'public'],
- host: 'localhost',
headers: {
'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,
+ 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,
}),
- 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({
filename: './public/stats.html',
title: 'Film EXIF modules',
diff --git a/src/WSCache.js b/src/WSCache.js
index 7773ab4..82eee83 100644
--- a/src/WSCache.js
+++ b/src/WSCache.js
@@ -5,10 +5,6 @@ class WSCache {
constructor (ws) {
this.ws = ws;
- this.ws.addEventListener('message', this.onWebSocketMessage);
- this.ws.addEventListener('close', this.onWebSocketClose);
- this.ws.addEventListener('error', console.error);
-
// Websocket channels
// These hold previous messages if they are needed later
this.slots = {
@@ -34,9 +30,14 @@ class WSCache {
'sendJSON',
'subscribe',
]);
+
+ this.ws.addEventListener('message', this.onWebSocketMessage);
+ this.ws.addEventListener('close', this.onWebSocketClose);
+ this.ws.addEventListener('error', console.error);
}
onWebSocketClose () {
+ this.ws = null;
console.info('WebSocket closed');
}
@@ -46,16 +47,21 @@ class WSCache {
* @param {mixed} message
*/
onWebSocketMessage (message) {
+ // `this` is overwritten to be the web socket object,
+ // so use the current instance object instead
try {
+ (() => {})();
const messageObject = JSON.parse(message.data);
WSCache.instance.publish(messageObject[0], messageObject[1]);
} catch (e) {
+ console.error('Error resolving web socket message', e);
+ // console.error(message);
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 {mixed} data
@@ -66,6 +72,10 @@ class WSCache {
return;
}
+ if (this.slots[slot] === undefined) {
+ this.slots[slot] = [];
+ }
+
this.slots[slot].push(data);
this.listeners[slot].forEach(listener => {
@@ -118,7 +128,8 @@ class WSCache {
this.listeners[slot] = [];
}
- const listenerIndex = this.listeners[slot].push(cb) -1;
+ this.listeners[slot].push(cb);
+ const listenerIndex = this.listeners[slot].length - 1;
return {
remove: () => {
diff --git a/src/components/Bootstrap/Bootstrap.js b/src/components/Bootstrap/Bootstrap.js
index da8543a..1c1e43f 100644
--- a/src/components/Bootstrap/Bootstrap.js
+++ b/src/components/Bootstrap/Bootstrap.js
@@ -1,5 +1,5 @@
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 BreadcrumbItem from 'inferno-bootstrap/dist/BreadcrumbItem';
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';
export const BSWrapper = (Component, tagName) => {
- return ({children, ...props}) => (
+ return ({children, ...props}) => (Component.defaultProps.wrapTag !== undefined) ? (
+ {children}
+ ) : (
{children}
);
};
export const Alert = BSWrapper(BSAlert, 'bs-alert');
+export const Badge = BSWrapper(BSBadge, 'bs-badge');
export const Jumbotron = BSWrapper(BSJumbotron, 'bs-jumbotron');
export {
- Badge,
Breadcrumb,
BreadcrumbItem,
ButtonDropdown,
diff --git a/src/components/Bootstrap/Modal.js b/src/components/Bootstrap/Modal.js
index 626a9e7..39246af 100644
--- a/src/components/Bootstrap/Modal.js
+++ b/src/components/Bootstrap/Modal.js
@@ -1,11 +1,11 @@
-import Modal from 'inferno-bootstrap/dist/Modal/Modal';
-import ModalBody from 'inferno-bootstrap/dist/Modal/ModalBody';
-import ModalFooter from 'inferno-bootstrap/dist/Modal/ModalFooter';
-import ModalHeader from 'inferno-bootstrap/dist/Modal/ModalHeader';
+import BSModal from 'inferno-bootstrap/dist/Modal/Modal';
+import BSModalBody from 'inferno-bootstrap/dist/Modal/ModalBody';
+import BSModalFooter from 'inferno-bootstrap/dist/Modal/ModalFooter';
+import BSModalHeader from 'inferno-bootstrap/dist/Modal/ModalHeader';
-export {
- Modal,
- ModalBody,
- ModalFooter,
- ModalHeader,
-};
+import { BSWrapper } from './Bootstrap';
+
+export const Modal = BSWrapper(BSModal, 'bs-modal');
+export const ModalBody = BSWrapper(BSModalBody, 'bs-modal-body');
+export const ModalFooter = BSWrapper(BSModalFooter, 'bs-modal-footer');
+export const ModalHeader = BSWrapper(BSModalHeader, 'bs-modal-header');
diff --git a/src/components/DOMForm.js b/src/components/DOMForm.js
index 1609aac..936597b 100644
--- a/src/components/DOMForm.js
+++ b/src/components/DOMForm.js
@@ -1,60 +1,89 @@
-import { linkEvent } from 'inferno';
+import bindAll from 'lodash-es/bindAll';
+import { Component, linkEvent } from 'inferno';
-function handleChange (props, event) {
- const formElement = event.target.closest('form');
- const rawFormData = new FormData(formElement);
+export class DOMForm extends Component {
+ constructor () {
+ super();
- if (props.onChange !== undefined) {
- const modified = props.onChange(rawFormData);
+ this.state = {
+ hasBeenValidated: false,
+ };
- if (modified !== undefined) {
- // Update form
- modified.forEach((value, key) => {
- const element = formElement.elements[key];
- element.value = value;
- });
+ bindAll(this, [
+ 'handleChange',
+ 'handleSubmit',
+ ]);
+ }
+
+ handleChange (props, event) {
+ const formElement = event.target.closest('form');
+ const rawFormData = new FormData(formElement);
+
+ if (props.onChange !== undefined) {
+ const modified = props.onChange(rawFormData);
+
+ if (modified !== undefined) {
+ // Update form
+ modified.forEach((value, key) => {
+ const element = formElement.elements[key];
+ element.value = value;
+ });
+ }
}
}
-}
-function handleSubmit (props, event) {
- // Don't want to actually reload the page!
- event.preventDefault();
+ handleSubmit (props, event) {
+ // Don't want to actually reload the page!
+ event.preventDefault();
- // Parsers are formatters or maskers
- const parsers = {};
+ const form = event.target.closest('form');
- const form = event.target.closest('form');
- const data = new FormData(form);
+ this.setState({
+ hasBeenValidated: true,
+ });
- data.forEach((value, name) => {
- const parserName = form.elements[name].dataset.parse;
+ // Parsers are formatters or maskers
+ const parsers = {};
+ const data = new FormData(form);
- if (parserName !== undefined && parsers[parserName] !== undefined) {
- const parser = parsers[parserName];
- const parsedValue = parser(data.get(name));
- data.set(name, parsedValue);
+ data.forEach((value, name) => {
+ const parserName = form.elements[name].dataset.parse;
+
+ if (parserName !== undefined && parsers[parserName] !== undefined) {
+ const parser = parsers[parserName];
+ const parsedValue = parser(data.get(name));
+ data.set(name, parsedValue);
+ }
+ });
+
+ // Don't attempt to submit an invalid form
+ if (!event.target.checkValidity()) {
+ return;
}
- });
- if (props.onSubmit) {
- props.onSubmit(data);
+ if (props.onSubmit) {
+ props.onSubmit(data);
+ }
+ }
+
+ render (props, state, context) {
+ const passProps = {...props};
+ const children = passProps.children;
+ delete passProps.onChange;
+ delete passProps.onSubmit;
+
+ const cssClass = state.hasBeenValidated ? 'was-validated' : 'needs-validation';
+
+ return (
+
+ );
}
}
-
-export function DOMForm (props) {
- const passProps = {...props};
- const children = passProps.children;
- delete passProps.onChange;
- delete passProps.onSubmit;
-
- return (
-
- );
-}
diff --git a/src/components/Form/FormBlock.js b/src/components/Form/FormBlock.js
index f03d91b..78378c1 100644
--- a/src/components/Form/FormBlock.js
+++ b/src/components/Form/FormBlock.js
@@ -1,25 +1,51 @@
import {
Col,
+ FormFeedback,
FormGroup,
+ FormText,
Input,
+ InputGroup,
Label,
} from '//components/Bootstrap';
export const FormBlock = ({
children,
+ grouped = false,
+ helpText = null,
+ invalidText = null,
label,
type = 'text',
+ validText = null,
...props
}) => {
- const formElement = (children !== undefined)
+ let formElement = (children !== undefined)
? children
: ;
+ if (grouped !== false) {
+ formElement = {formElement}
+ }
+
+ const helperText = (helpText !== null)
+ ? {helpText}
+ : null;
+
+ let feedbackText = invalidText
+ if (feedbackText === null && props.required === true) {
+ feedbackText = 'This field is required.';
+ }
+
+ const feedback = (feedbackText !== null)
+ ? {feedbackText}
+ : null;
+
return (
-
+
{formElement}
+ {helperText}
+ {feedback}
);
diff --git a/src/electron/app.js b/src/electron/app.js
index 9b858ec..9a20640 100644
--- a/src/electron/app.js
+++ b/src/electron/app.js
@@ -29,7 +29,7 @@ const createWindow = () => {
// load the index.html of the app.
const startUrl = DEV_MODE
- ? 'http://localhost:3000'
+ ? 'https://localhost:3000'
: `file://${path.join(__dirname, '/../../build/index.html')}`;
mainWindow.loadURL(startUrl);
diff --git a/src/electron/wait-inferno.js b/src/electron/wait-inferno.js
index 51ce2cf..79780e1 100644
--- a/src/electron/wait-inferno.js
+++ b/src/electron/wait-inferno.js
@@ -3,7 +3,7 @@ const log = require('electron-log');
const net = require('net');
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;
const client = new net.Socket();
diff --git a/src/views/Film/FilmAddView.js b/src/views/Film/FilmAddView.js
index 426c250..49f8e1f 100644
--- a/src/views/Film/FilmAddView.js
+++ b/src/views/Film/FilmAddView.js
@@ -6,11 +6,17 @@ import {
CardFooter,
CardTitle,
Col,
+ FormGroup,
+ FormText,
+ Input,
+ InputGroup,
+ InputGroupAddon,
+ Label,
Row,
} from '//components/Bootstrap';
-import { FormBlock } from '//components/Form';
-import { DOMForm } from '//components';
+import {FormBlock} from '//components/Form';
+import {DOMForm} from '//components';
/*
* Fields from AnalogExif
@@ -40,38 +46,56 @@ function handleSave (formData) {
export function FilmAddView () {
return (
-
-
+
+
Add a Film
-
+
-
-
+
+
+
+
+
+ /
+
+ °
+
+ Film Sensitivity
+
+
-
);
-};
-
+}
diff --git a/src/views/index.js b/src/views/index.js
index a9bb49d..76cfd99 100644
--- a/src/views/index.js
+++ b/src/views/index.js
@@ -1,4 +1,5 @@
export * from '//views/Camera';
export * from '//views/Film';
export * from '//views/HomeView';
+export * from '//views/Lenses';
export * from '//views/OopsView';
diff --git a/yarn.lock b/yarn.lock
index 2d309cd..e4040be 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -782,10 +782,10 @@ ajv-keywords@^3.2.0:
resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=
-ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1:
- version "6.6.2"
- resolved "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d"
- integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==
+ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1, ajv@^6.7.0:
+ version "6.7.0"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz#e3ce7bb372d6577bb1839f1dfdfcbf5ad2948d96"
+ integrity sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==
dependencies:
fast-deep-equal "^2.0.1"
fast-json-stable-stringify "^2.0.0"
@@ -859,37 +859,37 @@ anymatch@^2.0.0:
micromatch "^3.1.4"
normalize-path "^2.1.1"
-app-builder-bin@2.6.1:
- version "2.6.1"
- resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.1.tgz#aa97f82d341dfa6f1269d78955482d619cc613ed"
- integrity sha512-W0l85O+s6lOaziWqAhszPfwiG0s15FvMBP9j9i/bknsMccUkwN60u4Cy7yYtf6akCUDuJenLqpTX4/xvkq1egw==
+app-builder-bin@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.3.tgz#428557e8fd517ef6272b3d85593ebb288c2aed90"
+ integrity sha512-JL8C41e6yGIchFsHP/q15aGNedAaUakLhkV6ER0Yxafx08sRnlDnlkAkEIKjX7edg/4i7swpGa6CBv1zX9GgCA==
-app-builder-lib@20.38.4, app-builder-lib@~20.38.3:
- version "20.38.4"
- resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.38.4.tgz#71a515d01f4f2bd48a67495804f659a46c35303c"
- integrity sha512-JbuAJQBndcCW6BJVIb2tPjM5wiuIjz2LUlbyVxNIawM2wFKUBV9kr0N3RNBJFxcrCEuA9oprMUCoymJdrMUVfA==
+app-builder-lib@20.38.5, app-builder-lib@~20.38.5:
+ version "20.38.5"
+ resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.38.5.tgz#bdfbbc35e10571c6cf1f62daae95991d27686a03"
+ integrity sha512-vVgM9d9twwlhr+8vNAJOAD9dyVBRk7reuVa1BE1OmvaHb1M+fS8KpvcDKVdBqX9KDHy7zSc57mnIcHgax4/XMA==
dependencies:
"7zip-bin" "~4.1.0"
- app-builder-bin "2.6.1"
+ app-builder-bin "2.6.3"
async-exit-hook "^2.0.1"
bluebird-lst "^1.0.6"
- builder-util "9.6.1"
- builder-util-runtime "8.1.0"
+ builder-util "9.6.2"
+ builder-util-runtime "8.1.1"
chromium-pickle-js "^0.2.0"
- debug "^4.1.0"
+ debug "^4.1.1"
ejs "^2.6.1"
electron-osx-sign "0.4.11"
- electron-publish "20.38.3"
+ electron-publish "20.38.5"
fs-extra-p "^7.0.0"
hosted-git-info "^2.7.1"
is-ci "^2.0.0"
- isbinaryfile "^3.0.3"
- js-yaml "^3.12.0"
+ isbinaryfile "^4.0.0"
+ js-yaml "^3.12.1"
lazy-val "^1.0.3"
minimatch "^3.0.4"
normalize-package-data "^2.4.0"
plist "^3.0.1"
- read-config-file "3.2.0"
+ read-config-file "3.2.1"
sanitize-filename "^1.6.1"
semver "^5.6.0"
temp-file "^3.3.2"
@@ -1197,9 +1197,9 @@ babel-plugin-macros@2.4.2:
resolve "^1.8.1"
babel-plugin-module-resolver@^3.1.1:
- version "3.1.1"
- resolved "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.1.tgz#881cf67e3d4b8400d5eaaefc1be44d2dc1fe404f"
- integrity sha512-1Q77Al4ydp6nYApJ7sQ2fmgz30WuQgJZegIYuyOdbdpxenB/bSezQ3hDPsumIXGlUS4vUIv+EwFjzzXZNWtARw==
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.2.tgz#5d4bd3572eb1d1d4c7ca37bd53de8ec82d251dcb"
+ integrity sha512-OiDI8VKCp8zcjhbp/QwqZ5MliRTHp+Fv8tO2IJYiCl1B18/4t8ZCVhm90/8JDe+Zu4Th/DUxeLCHws8kbkVUZQ==
dependencies:
find-babel-config "^1.1.0"
glob "^7.1.2"
@@ -1483,12 +1483,12 @@ browserslist@4.3.5:
node-releases "^1.0.5"
browserslist@^4.3.4:
- version "4.3.7"
- resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.3.7.tgz#f1de479a6466ea47a0a26dcc725e7504817e624a"
- integrity sha512-pWQv51Ynb0MNk9JGMCZ8VkM785/4MQNXiFYtPqI7EEP0TJO+/d/NqRVn1uiAN0DNbnlUSpL2sh16Kspasv3pUQ==
+ version "4.4.0"
+ resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.4.0.tgz#7050d1412cbfc5274aba609ed5e50359ca1a5fdf"
+ integrity sha512-tQkHS8VVxWbrjnNDXgt7/+SuPJ7qDvD0Y2e6bLtoQluR2SPvlmPUcfcU75L1KAalhqULlIFJlJ6BDfnYyJxJsw==
dependencies:
- caniuse-lite "^1.0.30000925"
- electron-to-chromium "^1.3.96"
+ caniuse-lite "^1.0.30000928"
+ electron-to-chromium "^1.3.100"
node-releases "^1.1.3"
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"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-builder-util-runtime@8.1.0, builder-util-runtime@^8.1.0:
- version "8.1.0"
- resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.1.0.tgz#dd7fca995d48ceee7580b4851ca057566c94601e"
- integrity sha512-s1mlJ28mv+56Iebh6c9aXjVe11O3Z0cDTwAGeB0PCcUzHA37fDxGgS8ZGoYNMZP+rBHj21d/od1wuYofTVLaQg==
+builder-util-runtime@8.1.1, builder-util-runtime@^8.1.1:
+ version "8.1.1"
+ resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.1.1.tgz#f2f6fc43e33d26892bd491667fc746ad69bccc50"
+ integrity sha512-+ieS4PMB33vVE2S3ZNWBEQJ1zKmAs/agrBdh7XadE1lKLjrH4aXYuOh9OOGdxqIRldhlhNBaF+yKMMEFOdNVig==
dependencies:
bluebird-lst "^1.0.6"
- debug "^4.1.0"
+ debug "^4.1.1"
fs-extra-p "^7.0.0"
sax "^1.2.4"
-builder-util@9.6.1, builder-util@~9.6.0:
- version "9.6.1"
- resolved "https://registry.npmjs.org/builder-util/-/builder-util-9.6.1.tgz#4625620b1535fe40dcacb178d24fe56d0d7c8957"
- integrity sha512-8MljKTjeV+A+LLVexuWEV3EpWbiUcsHHrB4Bg2qNo/3dC+vTo6g/27+W3Ij7Ij1UTobSkNBstFieWijXJCco9A==
+builder-util@9.6.2, builder-util@~9.6.2:
+ version "9.6.2"
+ resolved "https://registry.npmjs.org/builder-util/-/builder-util-9.6.2.tgz#3366aefea1b5ce292840be727a094e96fa25802f"
+ integrity sha512-cWl/0/Q851lesMmXp1IjreeAX1QAWA9e+iU2IT61oh+CvMYJnDwao2m9ZCHammdw2zllrwWu4fOC3gvsb/yOCw==
dependencies:
"7zip-bin" "~4.1.0"
- app-builder-bin "2.6.1"
+ app-builder-bin "2.6.3"
bluebird-lst "^1.0.6"
- builder-util-runtime "^8.1.0"
- chalk "^2.4.1"
- debug "^4.1.0"
+ builder-util-runtime "^8.1.1"
+ chalk "^2.4.2"
+ debug "^4.1.1"
fs-extra-p "^7.0.0"
is-ci "^2.0.0"
- js-yaml "^3.12.0"
- source-map-support "^0.5.9"
+ js-yaml "^3.12.1"
+ source-map-support "^0.5.10"
stat-mode "^0.2.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"
integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==
-caniuse-lite@^1.0.30000912, caniuse-lite@^1.0.30000925:
- version "1.0.30000928"
- resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000928.tgz#805e828dc72b06498e3683a32e61c7507fd67b88"
- integrity sha512-aSpMWRXL6ZXNnzm8hgE4QDLibG5pVJ2Ujzsuj3icazlIkxXkPXtL+BWnMx6FBkWmkZgBHGUxPZQvrbRw2ZTxhg==
+caniuse-lite@^1.0.30000912, caniuse-lite@^1.0.30000928:
+ version "1.0.30000929"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000929.tgz#7b391b781a9c3097ecc39ea053301aea8ea16317"
+ integrity sha512-n2w1gPQSsYyorSVYqPMqbSaz1w7o9ZC8VhOEGI9T5MfGDzp7sbopQxG6GaQmYsaq13Xfx/mkxJUWC1Dz3oZfzw==
capture-exit@^1.2.0:
version "1.2.0"
@@ -1663,7 +1663,7 @@ chalk@2.4.1:
escape-string-regexp "^1.0.5"
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"
resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
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:
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"
resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
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"
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
-dmg-builder@6.5.3:
- version "6.5.3"
- resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.5.3.tgz#95afe3deab33fd874f68d299bc71b481e94f5312"
- integrity sha512-ZNl4GFBg6rdFplnuoK56iftxh/qgM7rXJUxgl21eK4WsjxgQwtQ0REZo+pDSL4OzVeyOO8MMNWSNQcCsBLiDyA==
+dmg-builder@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.5.4.tgz#18c573a5e777cbb39d84d7eaa84d965e1bb5b01f"
+ integrity sha512-EaEkF8weXez3iAwgYffjcYfumauUh5x+BggMgn/IuihNIA5/WfzRAUR4wMq9aII2zwArlw+rIrX6ZHKbmtkQmA==
dependencies:
- app-builder-lib "~20.38.3"
+ app-builder-lib "~20.38.5"
bluebird-lst "^1.0.6"
- builder-util "~9.6.0"
+ builder-util "~9.6.2"
fs-extra-p "^7.0.0"
iconv-lite "^0.4.24"
- js-yaml "^3.12.0"
+ js-yaml "^3.12.1"
parse-color "^1.0.0"
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"
integrity sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=
-dotenv@^6.1.0:
+dotenv@^6.2.0:
version "6.2.0"
resolved "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064"
integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==
@@ -2190,20 +2190,20 @@ ejs@^2.6.1:
integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==
electron-builder@^20.15.1:
- version "20.38.4"
- resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-20.38.4.tgz#67727529ffb87e7fdd78b3a84ea0d6c22bf04ec2"
- integrity sha512-WHOr3Rz2wktxV5TqmRL6woO9/wrIZeRfJPSEXOhgfgLskE5Sp2Aer0zAF7lHNqXuG6JhU+0I9IYFAxa73MTs9w==
+ version "20.38.5"
+ resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-20.38.5.tgz#31b3913a68b4911afd4cfc7bcd2522c5808040cd"
+ integrity sha512-p88IDHhH2J4hA6KwRBJY+OfVZuFtFIShY3Uh/TwYAfbX0v1RhKZytuGdO8sty2zcWxDYX74xDBv+X9oN6qEIRQ==
dependencies:
- app-builder-lib "20.38.4"
+ app-builder-lib "20.38.5"
bluebird-lst "^1.0.6"
- builder-util "9.6.1"
- builder-util-runtime "8.1.0"
- chalk "^2.4.1"
- dmg-builder "6.5.3"
+ builder-util "9.6.2"
+ builder-util-runtime "8.1.1"
+ chalk "^2.4.2"
+ dmg-builder "6.5.4"
fs-extra-p "^7.0.0"
is-ci "^2.0.0"
lazy-val "^1.0.3"
- read-config-file "3.2.0"
+ read-config-file "3.2.1"
sanitize-filename "^1.6.1"
update-notifier "^2.5.0"
yargs "^12.0.5"
@@ -2250,23 +2250,23 @@ electron-osx-sign@0.4.11:
minimist "^1.2.0"
plist "^3.0.1"
-electron-publish@20.38.3:
- version "20.38.3"
- resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-20.38.3.tgz#7c162904f728ba2bbf2640bc3620b65ce1061ce3"
- integrity sha512-Qomq253NT5DfjUZgFSx6p+gheU5YhM6zZ67fTtBZvwyk0v8HwxNXfa8fZT7h+1c3BwEmjusTbmjZRNW/XZBXFA==
+electron-publish@20.38.5:
+ version "20.38.5"
+ resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-20.38.5.tgz#c6ed7ea12bc80796b1f36489995f4651f730b1df"
+ integrity sha512-EhdPm6t0nKDfa0r3KjV1kSFcz03VrzgJRv7v5nHkkpQZB6OSmDNlHq7k66NBwQhPK3i4CK+uvehljZAP28vbCA==
dependencies:
bluebird-lst "^1.0.6"
- builder-util "~9.6.0"
- builder-util-runtime "^8.1.0"
- chalk "^2.4.1"
+ builder-util "~9.6.2"
+ builder-util-runtime "^8.1.1"
+ chalk "^2.4.2"
fs-extra-p "^7.0.0"
lazy-val "^1.0.3"
mime "^2.4.0"
-electron-to-chromium@^1.3.86, electron-to-chromium@^1.3.96:
- version "1.3.100"
- resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.100.tgz#899fb088def210aee6b838a47655bbb299190e13"
- integrity sha512-cEUzis2g/RatrVf8x26L8lK5VEls1AGnLHk6msluBUg/NTB4wcXzExTsGscFq+Vs4WBBU2zbLLySvD4C0C3hwg==
+electron-to-chromium@^1.3.100, electron-to-chromium@^1.3.86:
+ version "1.3.103"
+ resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.103.tgz#a695777efdbc419cad6cbb0e58458251302cd52f"
+ integrity sha512-tObPqGmY9X8MUM8i3MEimYmbnLLf05/QV5gPlkR8MQ3Uj8G8B2govE1U4cQcBYtv3ymck9Y8cIOu4waoiykMZQ==
electron@^4.0.1:
version "4.0.1"
@@ -2525,9 +2525,9 @@ eslint@^5.12.0:
text-table "^0.2.0"
esm@^3.0.40:
- version "3.0.84"
- resolved "https://registry.npmjs.org/esm/-/esm-3.0.84.tgz#bb108989f4673b32d4f62406869c28eed3815a63"
- integrity sha512-SzSGoZc17S7P+12R9cg21Bdb7eybX25RnIeRZ80xZs+VZ3kdQKzqTp2k4hZJjR7p9l0186TTXSgrxzlMDBktlw==
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/esm/-/esm-3.1.0.tgz#89eb950b3f04b691b12f96a0d9c8de93039a1a26"
+ integrity sha512-r4Go7Wh7Wh0WPinRXeeM9PIajRsUdt8SAyki5R1obVc0+BwtqvtjbngVSSdXg0jCe2xZkY8hyBMx6q/uymUkPw==
espree@^5.0.0:
version "5.0.0"
@@ -2617,27 +2617,27 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
-exiftool-vendored.exe@11.21.0:
- version "11.21.0"
- resolved "https://registry.npmjs.org/exiftool-vendored.exe/-/exiftool-vendored.exe-11.21.0.tgz#623223aba3aef9babc6732732cf790a2b5273b1d"
- integrity sha512-gLGy2DUln/vhnFY8NDx2ALc/Gz1hHT/Svgkc44ewF+3EGFXE3zD+6gW3TWfhJk/7qEVppLJdc6BxX8ssD//Ztw==
+exiftool-vendored.exe@11.24.0:
+ version "11.24.0"
+ resolved "https://registry.npmjs.org/exiftool-vendored.exe/-/exiftool-vendored.exe-11.24.0.tgz#5f4f1ea52a43f0056d19cc6207cfa216405a37dc"
+ integrity sha512-HWFfM7N5Oqb9ZulptuyxpQDvPNQ/K/OFSQyufaEyYhXC1jwJ2thmBJ/ESRR+C6rZ+rlIiMiyvXsC0OfA4L5OGw==
-exiftool-vendored.pl@11.21.0:
- version "11.21.0"
- resolved "https://registry.npmjs.org/exiftool-vendored.pl/-/exiftool-vendored.pl-11.21.0.tgz#c0a385e1bfd72766556570009e09d4acdc7e652f"
- integrity sha512-Z3lOoDnSNcOtJaZah5V4OyGK24l1SqMdAxmJ3nls51l8M1dSQYX5LyO1YWtNK2NbO+bC64deMULZB3BPltkPiA==
+exiftool-vendored.pl@11.24.0, exiftool-vendored.pl@^11.24.0:
+ version "11.24.0"
+ resolved "https://registry.npmjs.org/exiftool-vendored.pl/-/exiftool-vendored.pl-11.24.0.tgz#26ea1ff8661015888be572e300ad2e63b4773678"
+ integrity sha512-LEoKO28SJxvDbbHwG5Iu/AagTFESfxKZl4RHAfk6T8jAQObUbS0XJLQTglfRoDXNgx3RHcI6rzYsk/c7mUU/rg==
exiftool-vendored@^7.5.0:
- version "7.5.0"
- resolved "https://registry.npmjs.org/exiftool-vendored/-/exiftool-vendored-7.5.0.tgz#36d9134e50b450c06c8e196257da2b7ad63a5b43"
- integrity sha512-APSeQlS4JLcu9OLtuAPILMLmGXcCUwDBCF0wHtV8hrzM01QdCIy3mUuf9Yye0QOWmIUsF8X2ZYrOAyXlRFOZsg==
+ version "7.6.1"
+ resolved "https://registry.npmjs.org/exiftool-vendored/-/exiftool-vendored-7.6.1.tgz#aa5da10780c94c4ede87c4c612173d343c927629"
+ integrity sha512-Y8mtnV77yfWLwsi6vSwjRITrjukya/Q5rGltGOzKRdq6BLn2iF1JfS2RmA3pT8S/mHIMTJxH14b/WbCK/pCgEw==
dependencies:
batch-cluster "^5.0.1"
- luxon "^1.8.2"
+ luxon "^1.10.0"
tz-lookup "^6.1.8"
optionalDependencies:
- exiftool-vendored.exe "11.21.0"
- exiftool-vendored.pl "11.21.0"
+ exiftool-vendored.exe "11.24.0"
+ exiftool-vendored.pl "11.24.0"
exit@^0.1.2:
version "0.1.2"
@@ -2990,9 +2990,9 @@ fs.realpath@^1.0.0:
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@^1.0.0, fsevents@^1.2.3:
- version "1.2.4"
- resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
- integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==
+ version "1.2.6"
+ resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.6.tgz#d3a1864a71876a2eb9b244e3bd8f606eb09568c0"
+ integrity sha512-BalK54tfK0pMC0jQFb2oHn1nz7JNQD/2ex5pBnCHgBi2xG7VV0cAOGy2RS2VbCqUXx5/6obMrMcQTJ8yjcGzbg==
dependencies:
nan "^2.9.2"
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"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-isbinaryfile@^3.0.2, isbinaryfile@^3.0.3:
+isbinaryfile@^3.0.2:
version "3.0.3"
resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80"
integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==
dependencies:
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:
version "2.0.0"
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"
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"
resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600"
integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==
@@ -4673,7 +4678,7 @@ lru-cache@^4.0.1:
pseudomap "^1.0.2"
yallist "^2.1.2"
-luxon@^1.8.2:
+luxon@^1.10.0:
version "1.10.0"
resolved "https://registry.npmjs.org/luxon/-/luxon-1.10.0.tgz#335b55e2fed50e09f869aee828897a3f67c7044e"
integrity sha512-ry3GKh//v3isD6oJN5pFWmdh+3GiScwv9q8VgG6fZ2j1guGOol2vVVdo4GBAWCrcq5RHOqSeipqHBnOu/u024Q==
@@ -4724,9 +4729,9 @@ map-visit@^1.0.0:
object-visit "^1.0.0"
math-random@^1.0.1:
- version "1.0.1"
- resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
- integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w=
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
+ integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
mem@^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"
strip-json-comments "~2.0.1"
-read-config-file@3.2.0:
- version "3.2.0"
- resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.0.tgz#50a2756a9a128ab9dcbe087e2724c512e3d0ccd1"
- integrity sha512-i1QRc5jy4sHm9YBGb6ArA5SU1mDrc5wu2mnm3r9gPnm+LVZhBGbpTCKqAXyvV4TJHnBR3Yaaww+9b3DyRZcfww==
+read-config-file@3.2.1:
+ version "3.2.1"
+ resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.1.tgz#112dc8636121fa71fd524e1a8a5b4470ef7a2732"
+ integrity sha512-yW4hZZXdNN+Paij5JVAiTv1lUsAN5QRBU5NqotQqwYdVkUczSmDzm66VLu0eojiZt2zFeYptTFDAYlalDGuHdA==
dependencies:
- ajv "^6.5.5"
+ ajv "^6.7.0"
ajv-keywords "^3.2.0"
bluebird-lst "^1.0.6"
- dotenv "^6.1.0"
+ dotenv "^6.2.0"
dotenv-expand "^4.2.0"
fs-extra-p "^7.0.0"
- js-yaml "^3.12.0"
+ js-yaml "^3.12.1"
json5 "^2.1.0"
lazy-val "^1.0.3"
@@ -6452,7 +6457,7 @@ source-map-support@^0.4.15:
dependencies:
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"
resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==
@@ -6694,9 +6699,9 @@ symbol-tree@^3.2.2:
integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
table@^5.0.2:
- version "5.2.0"
- resolved "https://registry.npmjs.org/table/-/table-5.2.0.tgz#2e38bd1f16dd3f97085ac80cdc574ad9198af04d"
- integrity sha512-hAdBBAMCZl4/U3eQhsPN2Z8wRJC98lpRhDW2I86VQbPBqyj4E681VhvUkfb90qUJ4rnRfu8t4/8SGHPsAH1ygg==
+ version "5.2.1"
+ resolved "https://registry.npmjs.org/table/-/table-5.2.1.tgz#e78463702b1be9f7131c39860bcfb1b81114c2a1"
+ integrity sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==
dependencies:
ajv "^6.6.1"
lodash "^4.17.11"