From 770fb57ab0f4e60e1b6a2ce64eaa646ef3adf875 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Fri, 10 Apr 2020 11:30:26 -0400 Subject: [PATCH] WIP progress commit --- assets/certs/localhost+2-key.pem | 28 ++++ assets/certs/localhost+2.pem | 26 +++ assets/certs/rootCA.pem | 28 ++++ package.json | 1 + public/css/app.css | 2 +- rollup.dev.js | 19 ++- src/WSCache.js | 23 ++- src/components/Bootstrap/Bootstrap.js | 8 +- src/components/Bootstrap/Modal.js | 20 +-- src/components/DOMForm.js | 121 ++++++++----- src/components/Form/FormBlock.js | 30 +++- src/electron/app.js | 2 +- src/electron/wait-inferno.js | 2 +- src/views/Film/FilmAddView.js | 70 +++++--- src/views/index.js | 1 + yarn.lock | 233 +++++++++++++------------- 16 files changed, 403 insertions(+), 211 deletions(-) create mode 100644 assets/certs/localhost+2-key.pem create mode 100644 assets/certs/localhost+2.pem create mode 100644 assets/certs/rootCA.pem 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 ( +
+ {children} +
+ ); } } - -export function DOMForm (props) { - const passProps = {...props}; - const children = passProps.children; - delete passProps.onChange; - delete passProps.onSubmit; - - return ( -
- {children} -
- ); -} 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 + + - - - + + @@ -108,5 +131,4 @@ export function FilmAddView () { ); -}; - +} 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"