Page Menu
Home
Sealhub
Search
Configure Global Search
Log In
Files
F972269
D625.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
55 KB
Referenced Files
None
Subscribers
None
D625.diff
View Options
diff --git a/admin-panel/body-page-editor/element-editor.jsx b/admin-panel/body-page-editor/element-editor.jsx
--- a/admin-panel/body-page-editor/element-editor.jsx
+++ b/admin-panel/body-page-editor/element-editor.jsx
@@ -10,18 +10,22 @@
function createControls() {
let controls = [];
- for (const prop in components[componentName].propsControls) {
- let formControlName = components[componentName].propsControls[prop];
+ let propsControls = components[componentName].propsControls();
+ for (const prop in propsControls) {
+ let { control: formControlName, label } = propsControls[prop];
controls.push(
- formControls[formControlName]({
- name: prop,
- key: prop,
- value: componentProps[prop] || '',
- onChange: newValue => {
- onChange({ ...componentProps, [prop]: newValue });
- },
- })
+ <label>
+ {label}:
+ {formControls[formControlName]({
+ name: prop,
+ key: prop,
+ value: componentProps[prop] || '',
+ onChange: newValue => {
+ onChange({ ...componentProps, [prop]: newValue });
+ },
+ })}
+ </label>
);
}
diff --git a/admin-panel/body-page-editor/preview.jsx b/admin-panel/body-page-editor/preview.jsx
--- a/admin-panel/body-page-editor/preview.jsx
+++ b/admin-panel/body-page-editor/preview.jsx
@@ -1,35 +1,37 @@
const React = require('react');
const { useState, useEffect } = React;
+const uuidv4 = require('uuid/v4');
-async function generateRenderedHTML(elements) {
+async function generateRenderedHTML(uuid, elements) {
return await fetch('/api/v1/render', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
- body: JSON.stringify({ body: elements }),
+ body: JSON.stringify({ uuid, body: elements }),
}).then(response => response.text());
}
module.exports = function Preview({ elements }) {
- const [html, setHtml] = useState('');
+ const [previewUrl, setPreviewUrl] = useState('');
+ const [uuid] = useState(uuidv4());
useEffect(() => {
- generateRenderedHTML(elements).then(data => setHtml(data));
- }, [elements]);
+ generateRenderedHTML(uuid, elements).then(url => setPreviewUrl(url));
+ }, [JSON.stringify(elements)]);
- return React.createElement('div', {
- style: {
- backgroundColor: '#f1f1f1',
- display: 'flex',
- flexFlow: 'column',
- height: 'auto',
- margin: '1rem',
- padding: '1rem',
- width: '30rem',
- },
- dangerouslySetInnerHTML: {
- __html: html,
- },
- });
+ return (
+ <iframe
+ src={previewUrl}
+ style={{
+ backgroundColor: '#f1f1f1',
+ display: 'flex',
+ flexFlow: 'column',
+ height: 'auto',
+ margin: '1rem',
+ padding: '1rem',
+ width: '30rem',
+ }}
+ />
+ );
};
diff --git a/admin-panel/collections/use-collections.js b/admin-panel/collections/use-collections.js
--- a/admin-panel/collections/use-collections.js
+++ b/admin-panel/collections/use-collections.js
@@ -4,7 +4,7 @@
let loaded = false;
let promise = null;
-const url = 'http://localhost:8080/api/v1/specifications';
+const url = '/api/v1/specifications';
export default function useCollections(collection_name) {
const [collections, setCollections] = useState(collections_cache);
diff --git a/admin-panel/form-controls/form-controls.jsx b/admin-panel/form-controls/form-controls.jsx
--- a/admin-panel/form-controls/form-controls.jsx
+++ b/admin-panel/form-controls/form-controls.jsx
@@ -1,13 +1,14 @@
const date = require('./date.jsx');
const text = require('./text.jsx');
const textarea = require('./textarea.jsx');
-// const bodyPageEditor = require('../body-page-editor/body-page-editor.jsx');
+const image = require('./image.jsx');
module.exports = {};
module.exports.text = text;
module.exports.date = date;
module.exports.slug = text;
module.exports.textarea = textarea;
+module.exports.image = image;
module.exports[
'array-of-objects'
] = require('../body-page-editor/body-page-editor.jsx');
diff --git a/admin-panel/form-controls/image.jsx b/admin-panel/form-controls/image.jsx
new file mode 100644
--- /dev/null
+++ b/admin-panel/form-controls/image.jsx
@@ -0,0 +1,38 @@
+const React = require('react');
+const { useState } = React;
+
+module.exports = function date(props) {
+ const [imagePreviewUrl, setImagePreviewUrl] = useState(null);
+ const [imageFile, setImageFile] = useState(null);
+
+ return (
+ <div>
+ <input
+ id={props.name}
+ name={props.name}
+ onChange={function onChange(e) {
+ const reader = new FileReader();
+ const file = e.target.files[0];
+ reader.onloadend = () => {
+ setImageFile(file);
+ setImagePreviewUrl(reader.result);
+ };
+ reader.readAsDataURL(file);
+ return props.onChange(e.target.value);
+ }}
+ required={props.required}
+ accept={'image/*'}
+ type={'file'}
+ value={props.value}
+ />
+ <img
+ src={imagePreviewUrl}
+ style={{
+ height: '100px',
+ width: '100px',
+ objectFit: 'contain',
+ }}
+ />
+ </div>
+ );
+};
diff --git a/admin-panel/index.jsx b/admin-panel/index.jsx
--- a/admin-panel/index.jsx
+++ b/admin-panel/index.jsx
@@ -6,35 +6,78 @@
import Collections from './collections/collections.jsx';
import useCollections from './collections/use-collections.js';
+class ErrorBoundary extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = { hasError: false, error: null };
+ }
+
+ static getDerivedStateFromError(error) {
+ return { hasError: true, error: error };
+ }
+
+ componentDidCatch(error, info) {
+ console.error(error, info);
+ }
+
+ render() {
+ if (this.state.hasError) {
+ // You can render any custom fallback UI
+ return (
+ <div>
+ <h1>Something went wrong.</h1>
+ <code>
+ <pre>
+ <strong>{this.state.error.message}</strong>
+ {'\n'}
+ {this.state.error.stack}
+ </pre>
+ </code>
+ </div>
+ );
+ }
+
+ return this.props.children;
+ }
+}
+
function AppRouter() {
const collections = useCollections();
return (
- <HashRouter basename="/#">
- <div>
- <Link to="/">
- <h1>Sealpage</h1>
- </Link>
- <nav>
- <ul>
- {collections.map(collection => (
- <li key={collection.name}>
- <Link to={`/collections/${collection.name}`}>
- {collection.name}
- </Link>
- </li>
- ))}
- </ul>
- <Link to={'/body-page-editor'}>BodyPageEditor</Link>
- </nav>
-
- <hr />
- <Route path="/" exact component={() => <h2>Admin panel</h2>} />
- <Route path="/collections" component={Collections} />
-
- {/* it's only for mockup testing */}
- {/* <Route path="/body-page-editor" component={BodyPageEditor} /> */}
- </div>
- </HashRouter>
+ <ErrorBoundary>
+ <HashRouter basename="/#">
+ <div>
+ <Link to="/">
+ <h1>Sealpage</h1>
+ </Link>
+ <nav>
+ <ul>
+ {collections.map(collection => (
+ <li key={collection.name}>
+ <Link
+ to={`/collections/${collection.name}`}
+ >
+ {collection.name}
+ </Link>
+ </li>
+ ))}
+ </ul>
+ <Link to={'/body-page-editor'}>BodyPageEditor</Link>
+ </nav>
+
+ <hr />
+ <Route
+ path="/"
+ exact
+ component={() => <h2>Admin panel</h2>}
+ />
+ <Route path="/collections" component={Collections} />
+
+ {/* it's only for mockup testing */}
+ {/* <Route path="/body-page-editor" component={BodyPageEditor} /> */}
+ </div>
+ </HashRouter>
+ </ErrorBoundary>
);
}
diff --git a/components/component.class.js b/components/component.class.js
--- a/components/component.class.js
+++ b/components/component.class.js
@@ -1,26 +1,9 @@
module.exports = class Component {
- constructor({ renderFn, propsControls }) {
- if (typeof renderFn !== 'function') {
- throw new Error('renderFn must be a function');
- }
-
- if (typeof propsControls !== 'object') {
- throw new Error('propsControls must be an object');
- }
-
- for (let item in propsControls) {
- if (typeof propsControls[item] !== 'string') {
- throw new Error(
- `${propsControls[item]} formControl is not a string`
- );
- }
- }
-
- this.renderFn = renderFn;
- this.propsControls = propsControls;
+ constructor(s) {
+ this.s = s;
}
- async render(propsControls) {
- return await this.renderFn(propsControls);
+ async render(props) {
+ return await this.renderFn(this.s, props);
}
};
diff --git a/components/download-file-button/download-file-button.js b/components/download-file-button/download-file-button.js
new file mode 100644
--- /dev/null
+++ b/components/download-file-button/download-file-button.js
@@ -0,0 +1,35 @@
+const Component = require('../component.class');
+
+class DownloadFileButton extends Component {
+ async renderFn(s, { text }) {
+ const fs = s.node_require('fs');
+ const util = s.node_require('util');
+ const path = s.node_require('path');
+
+ const readFile = util.promisify(fs.readFile);
+ /* eslint-disable indent */
+ return /* HTML */ `
+ <a
+ href="${
+ await s.addOutputFile({
+ output_subdir: './assets/images/',
+ base_name: 'example-file.png',
+ generator: async function() {
+ return await readFile(
+ path.resolve(__dirname, './example-file.png')
+ );
+ },
+ deps: [],
+ })
+ }"
+ >${text}</a
+ >
+ `;
+ /* eslint-enable indent */
+ }
+ static propsControls() {
+ return { text: { control: 'text', label: 'Button text' } };
+ }
+}
+
+module.exports = DownloadFileButton;
diff --git a/components/download-file-button/example-file.png b/components/download-file-button/example-file.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/components/index.js b/components/index.js
--- a/components/index.js
+++ b/components/index.js
@@ -1,9 +1,13 @@
const Markdown = require('./markdown/markdown.html');
const Navbar = require('./navbar/navbar.html');
+const DownloadFileButton = require('./download-file-button/download-file-button');
+const ResponsiveImage = require('./responsive-image/responsive-image');
const components = {
Markdown,
Navbar,
+ DownloadFileButton,
+ ResponsiveImage,
};
function register(pluginComponents) {
diff --git a/components/markdown/markdown.html.js b/components/markdown/markdown.html.js
--- a/components/markdown/markdown.html.js
+++ b/components/markdown/markdown.html.js
@@ -1,13 +1,16 @@
const Component = require('../component.class');
const marked = require('marked');
-const Markdown = new Component({
- renderFn: ({ markdown_source }) => {
+class Markdown extends Component {
+ renderFn(s, { markdown_source }) {
return marked(markdown_source || '');
- },
- propsControls: {
- markdown_source: 'textarea',
- },
-});
+ }
+
+ static propsControls() {
+ return {
+ markdown_source: { label: 'Markdown source', control: 'textarea' },
+ };
+ }
+}
module.exports = Markdown;
diff --git a/components/navbar/navbar.html.js b/components/navbar/navbar.html.js
--- a/components/navbar/navbar.html.js
+++ b/components/navbar/navbar.html.js
@@ -1,14 +1,16 @@
const Component = require('../component.class');
-const Navbar = new Component({
- renderFn: ({ title }) => {
+class Navbar extends Component {
+ renderFn(s, { title }) {
return /* HTML */ `
<nav>${title}</nav>
`;
- },
- propsControls: {
- title: 'text',
- },
-});
+ }
+ static propsControls() {
+ return {
+ title: { label: 'Title', control: 'text' },
+ };
+ }
+}
module.exports = Navbar;
diff --git a/components/responsive-image/responsive-image.html.js b/components/responsive-image/responsive-image.html.js
deleted file mode 100644
--- a/components/responsive-image/responsive-image.html.js
+++ /dev/null
@@ -1,61 +0,0 @@
-const sharp = require('sharp');
-const path = require('path');
-const { promisify } = require('util');
-const locreq = require('locreq')(__dirname);
-const fs = require('fs');
-const hashFile = require('../../../lib/hash-file.js');
-const access = promisify(fs.access);
-
-/*
- image_path: string
- resolutions: array of sizes ie. [200, 150 ...]
- quality: number, quality of the resized image
- sizes_attr: string, sizes attribute for responsive img html tag
- alt: string, img's alt attribute
-*/
-
-module.exports = async function({
- image_path,
- resolutions,
- quality = 80,
- sizes_attr,
- alt = '',
-}) {
- try {
- const image_path_to_checksum = {};
-
- const created_files = await Promise.all(
- resolutions.map(async resolution => {
- let image_basename = path.basename(image_path); //Extract file's name
- const extension = path.extname(image_basename); //Get the file extension
- image_basename = path.basename(image_path, extension);
- if (!image_path_to_checksum[image_path]) {
- image_path_to_checksum[image_path] = hashFile(
- locreq.resolve(image_path)
- ).substring(0, 8);
- }
- const checksum = image_path_to_checksum[image_path];
- const responsive_file_name = `${image_basename}-${checksum}-${resolution}w${extension}`;
- const destination = `/assets/${responsive_file_name}`;
- // If resized image already exists do not resize it again
- await access(locreq.resolve(image_path), fs.constants.OK).catch(
- () => {
- return -1;
- }
- );
- //Resize and save new, transformed file
- await sharp(locreq.resolve(image_path))
- .resize(resolution)
- .jpeg({ quality })
- .toFile(locreq.resolve(`public/${destination}`));
- return `${destination} ${resolution}w`;
- })
- );
- //Generate appropriate repsonsive img tag
- return /* HTML */ `<img src="${image_path}" srcset="${created_files.join(
- ',\n'
- )}" sizes="${sizes_attr}" alt="${alt}"/>`;
- } catch (error) {
- throw new Error(error);
- }
-};
diff --git a/components/responsive-image/responsive-image.js b/components/responsive-image/responsive-image.js
new file mode 100644
--- /dev/null
+++ b/components/responsive-image/responsive-image.js
@@ -0,0 +1,78 @@
+const Component = require('../component.class');
+
+/*
+ image_path: string
+ resolutions: array of sizes ie. [200, 150 ...]
+ quality: number, quality of the resized image
+ sizes_attr: string, sizes attribute for responsive img html tag
+ alt: string, img's alt attribute
+*/
+
+class ResponsiveImage extends Component {
+ async renderFn(
+ s,
+ {
+ image_path,
+ resolutions = [100, 400, 900, 1000, 1300],
+ quality = 80,
+ sizes_attr,
+ alt = '',
+ }
+ ) {
+ const sharp = s.node_require('sharp');
+ const path = s.node_require('path');
+ const { promisify } = s.node_require('util');
+ const locreq = s.node_require('locreq')(__dirname);
+ const fs = s.node_require('fs');
+ const hashFile = s.node_require(
+ path.resolve(__dirname, '../../lib/hash-file.js')
+ );
+ if (!image_path) {
+ image_path = locreq.resolve('assets/sealpage-logo.png');
+ }
+ const readFile = promisify(fs.readFile);
+
+ let image_basename = path.basename(image_path); //Extract file's name
+ const extension = path.extname(image_basename); //Get the file extension
+ image_basename = path.basename(image_path, extension);
+
+ const file_hash = hashFile(locreq.resolve(image_path)).substring(0, 8);
+
+ const output_files = {};
+
+ for (let resolution of resolutions) {
+ const path = await s.addOutputFile({
+ output_subdir: 'images',
+ base_name: `${image_basename}-${resolution}.${extension}`,
+ generator: () =>
+ sharp(locreq.resolve(image_path))
+ .resize(resolution)
+ .jpeg({ quality })
+ .toBuffer(),
+ deps: [file_hash],
+ });
+ output_files[resolution] = path;
+ }
+
+ const median_resolution =
+ resolutions[Math.round((resolutions.length - 1) / 2)];
+
+ const srcset = resolutions
+ .map(resolution => `${output_files[resolution]} ${resolution}w`)
+ .join(',\n');
+
+ return /* HTML */ `
+ <img
+ src="${output_files[median_resolution]}"
+ srcset="${srcset}"
+ sizes="${sizes_attr}"
+ alt="${alt}"
+ />
+ `;
+ }
+ static propsControls() {
+ return { source_image: { control: 'image', label: 'Source image' } };
+ }
+}
+
+module.exports = ResponsiveImage;
diff --git a/get-app.js b/get-app.js
--- a/get-app.js
+++ b/get-app.js
@@ -1,4 +1,12 @@
const Sealious = require('sealious');
+const S = require('./lib/s');
+const path = require('path');
+const fs = require('fs');
+const uuidv4 = require('uuid/v4');
+const util = require('util');
+const writeFile = util.promisify(fs.writeFile);
+const exists = util.promisify(fs.access);
+const mkdir = util.promisify(fs.mkdir);
const components = require('./components/index').components;
const fieldTypes = {
@@ -15,14 +23,41 @@
admin_email: 'sealpage_devs@sealcode.org',
};
-async function renderPreview(elements) {
+async function renderPreview(uuid, elements) {
let html = '';
+ let temporary_path = `/tmp/sealpage_bundle/${uuid}`;
+ try {
+ await exists('/tmp/sealpage_bundle');
+ } catch (error) {
+ await mkdir('/tmp/sealpage_bundle');
+ }
+
+ try {
+ await exists(temporary_path);
+ } catch (error) {
+ await mkdir(temporary_path);
+ }
+
+ let output_dir = path.resolve(temporary_path);
+
+ const component_instances = {};
+ const path_prefix = `/previews/${uuid}`;
+ const s = new S({ output_dir, path_prefix });
+
+ // creating componentsinstances
+ for (const component_name in components) {
+ component_instances[component_name] = new components[component_name](s);
+ }
+
+ // render preview using component instances
for (const [componentName, componentProps] of elements) {
- html += await components[componentName].render(componentProps);
+ html += await component_instances[componentName].render(componentProps);
}
- return html;
+ await writeFile(`${output_dir}/index.html`, html);
+
+ return `${path_prefix}/index.html?${uuidv4()}`;
}
module.exports = config => {
@@ -32,11 +67,16 @@
fieldTypes[type](app);
}
+ app.WwwServer.static_route(
+ '/tmp/sealpage_bundle', // system path
+ '/previews' // url
+ );
+
app.WwwServer.custom_route(
'POST',
'/api/v1/render',
- async (app, context, { body }) => {
- return renderPreview(body);
+ async (app, context, { uuid, body }) => {
+ return renderPreview(uuid.replace(/(\.|\/)/g, '-'), body);
}
);
diff --git a/lib/render-site.js b/lib/render-site.js
--- a/lib/render-site.js
+++ b/lib/render-site.js
@@ -25,12 +25,14 @@
const result = await site_description[page_name]();
+ /* eslint-disable indent */
typeof result === 'string'
? await renderPage(
- result,
- path.resolve(directory, `./${page_name}.html`)
+ result,
+ path.resolve(directory, `./${page_name}.html`)
)
: await renderSite(result, path.resolve(directory, page_name));
+ /* eslint-enable indent */
});
}
diff --git a/lib/s.js b/lib/s.js
new file mode 100644
--- /dev/null
+++ b/lib/s.js
@@ -0,0 +1,62 @@
+const fs = require('fs');
+const path = require('path');
+const util = require('util');
+
+const access = util.promisify(fs.access);
+const writeFile = util.promisify(fs.writeFile);
+
+const md5 = require('md5');
+const makeDir = require('make-dir');
+
+class S {
+ constructor({ output_dir, path_prefix }) {
+ this.output_dir = output_dir;
+ this.path_prefix = path_prefix; // for example: "/previews/92180392ueu093"
+ }
+
+ async addOutputFile({ output_subdir, base_name, generator, deps }) {
+ const hash = md5(JSON.stringify(deps));
+
+ let output_filename = base_name.split('.');
+ output_filename.splice(output_filename.length - 1, 0, hash);
+ output_filename = output_filename.join('.');
+
+ if (output_subdir[0] === '/') {
+ output_subdir = '.' + output_subdir;
+ }
+
+ const output_path = path.resolve(
+ this.output_dir,
+ output_subdir,
+ output_filename
+ );
+
+ try {
+ await access(path.resolve(output_path, '..'));
+ } catch (error) {
+ if (error.code === 'ENOENT') {
+ await makeDir(path.resolve(output_path, '..'));
+ } else throw error;
+ }
+
+ try {
+ await access(output_path);
+ } catch (error) {
+ await writeFile(output_path, await generator());
+ }
+ return path.join(this.path_prefix, output_subdir, output_filename);
+ }
+
+ node_require(module_name) {
+ try {
+ return require(module_name);
+ } catch (e) {
+ console.error(e);
+ throw new Error(
+ `Could not resolve module '${module_name}'. It might not be installed or you're running the s.node_require function in the browser, while it's only supposed to be called on backend side`
+ );
+ }
+ }
+}
+
+module.exports = S;
diff --git a/package-lock.json b/package-lock.json
--- a/package-lock.json
+++ b/package-lock.json
@@ -1980,12 +1980,11 @@
}
},
"assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
"dev": true,
"requires": {
- "object-assign": "^4.1.1",
"util": "0.10.3"
},
"dependencies": {
@@ -3853,6 +3852,14 @@
"dev": true,
"requires": {
"pako": "~1.0.5"
+ },
+ "dependencies": {
+ "pako": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
+ "dev": true
+ }
}
},
"browserslist": {
@@ -3934,27 +3941,47 @@
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
},
"cacache": {
- "version": "11.3.2",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
- "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+ "version": "11.3.3",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz",
+ "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==",
"dev": true,
"requires": {
- "bluebird": "^3.5.3",
+ "bluebird": "^3.5.5",
"chownr": "^1.1.1",
"figgy-pudding": "^3.5.1",
- "glob": "^7.1.3",
+ "glob": "^7.1.4",
"graceful-fs": "^4.1.15",
"lru-cache": "^5.1.1",
"mississippi": "^3.0.0",
"mkdirp": "^0.5.1",
"move-concurrently": "^1.0.1",
"promise-inflight": "^1.0.1",
- "rimraf": "^2.6.2",
+ "rimraf": "^2.6.3",
"ssri": "^6.0.1",
"unique-filename": "^1.1.1",
"y18n": "^4.0.0"
},
"dependencies": {
+ "bluebird": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
+ "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -4074,6 +4101,11 @@
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"dev": true
},
+ "charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
+ },
"cheerio": {
"version": "0.22.0",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
@@ -4485,6 +4517,13 @@
"uuid": "^2.0.1",
"write-file-atomic": "^1.1.2",
"xdg-basedir": "^2.0.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho="
+ }
}
},
"connect": {
@@ -4708,6 +4747,11 @@
"which": "^1.2.9"
}
},
+ "crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
+ },
"crypto-browserify": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
@@ -5843,6 +5887,24 @@
"commondir": "^1.0.1",
"make-dir": "^2.0.0",
"pkg-dir": "^3.0.0"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ }
}
},
"find-up": {
@@ -6334,21 +6396,26 @@
"dependencies": {
"abbrev": {
"version": "1.1.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "optional": true
},
"aproba": {
"version": "1.2.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"optional": true
},
"are-we-there-yet": {
"version": "1.1.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"optional": true,
"requires": {
"delegates": "^1.0.0",
@@ -6357,12 +6424,14 @@
},
"balanced-match": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"optional": true
},
"brace-expansion": {
"version": "1.1.11",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
@@ -6371,32 +6440,38 @@
},
"chownr": {
"version": "1.1.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
"optional": true
},
"code-point-at": {
"version": "1.1.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
"optional": true
},
"concat-map": {
"version": "0.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"optional": true
},
"console-control-strings": {
"version": "1.1.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
"optional": true
},
"core-util-is": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"optional": true
},
"debug": {
"version": "2.6.9",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"optional": true,
"requires": {
"ms": "2.0.0"
@@ -6404,22 +6479,26 @@
},
"deep-extend": {
"version": "0.6.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"optional": true
},
"delegates": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"optional": true
},
"detect-libc": {
"version": "1.0.3",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
"optional": true,
"requires": {
"minipass": "^2.2.1"
@@ -6427,12 +6506,14 @@
},
"fs.realpath": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"optional": true
},
"gauge": {
"version": "2.7.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"optional": true,
"requires": {
"aproba": "^1.0.3",
@@ -6447,7 +6528,8 @@
},
"glob": {
"version": "7.1.3",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"optional": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -6460,12 +6542,14 @@
},
"has-unicode": {
"version": "2.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"optional": true
},
"iconv-lite": {
"version": "0.4.24",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"optional": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
@@ -6473,7 +6557,8 @@
},
"ignore-walk": {
"version": "3.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
"optional": true,
"requires": {
"minimatch": "^3.0.4"
@@ -6481,7 +6566,8 @@
},
"inflight": {
"version": "1.0.6",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"optional": true,
"requires": {
"once": "^1.3.0",
@@ -6490,17 +6576,20 @@
},
"inherits": {
"version": "2.0.3",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"optional": true
},
"ini": {
"version": "1.3.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
@@ -6508,12 +6597,14 @@
},
"isarray": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"optional": true
},
"minimatch": {
"version": "3.0.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -6521,12 +6612,14 @@
},
"minimist": {
"version": "0.0.8",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"optional": true
},
"minipass": {
"version": "2.3.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
@@ -6535,7 +6628,8 @@
},
"minizlib": {
"version": "1.2.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
"optional": true,
"requires": {
"minipass": "^2.2.1"
@@ -6543,7 +6637,8 @@
},
"mkdirp": {
"version": "0.5.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"optional": true,
"requires": {
"minimist": "0.0.8"
@@ -6551,12 +6646,14 @@
},
"ms": {
"version": "2.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"optional": true
},
"needle": {
"version": "2.2.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
+ "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
"optional": true,
"requires": {
"debug": "^2.1.2",
@@ -6566,7 +6663,8 @@
},
"node-pre-gyp": {
"version": "0.10.3",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
+ "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
@@ -6583,7 +6681,8 @@
},
"nopt": {
"version": "4.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
"optional": true,
"requires": {
"abbrev": "1",
@@ -6592,12 +6691,14 @@
},
"npm-bundled": {
"version": "1.0.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
+ "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
"optional": true
},
"npm-packlist": {
"version": "1.2.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz",
+ "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
"optional": true,
"requires": {
"ignore-walk": "^3.0.1",
@@ -6606,7 +6707,8 @@
},
"npmlog": {
"version": "4.1.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
@@ -6617,17 +6719,20 @@
},
"number-is-nan": {
"version": "1.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"optional": true
},
"object-assign": {
"version": "4.1.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"optional": true
},
"once": {
"version": "1.4.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"optional": true,
"requires": {
"wrappy": "1"
@@ -6635,17 +6740,20 @@
},
"os-homedir": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"optional": true
},
"osenv": {
"version": "0.1.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"optional": true,
"requires": {
"os-homedir": "^1.0.0",
@@ -6654,17 +6762,20 @@
},
"path-is-absolute": {
"version": "1.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"optional": true
},
"rc": {
"version": "1.2.8",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"optional": true,
"requires": {
"deep-extend": "^0.6.0",
@@ -6675,14 +6786,16 @@
"dependencies": {
"minimist": {
"version": "1.2.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"optional": true
}
}
},
"readable-stream": {
"version": "2.3.6",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"optional": true,
"requires": {
"core-util-is": "~1.0.0",
@@ -6696,7 +6809,8 @@
},
"rimraf": {
"version": "2.6.3",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"optional": true,
"requires": {
"glob": "^7.1.3"
@@ -6704,36 +6818,44 @@
},
"safe-buffer": {
"version": "5.1.2",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"optional": true
},
"sax": {
"version": "1.2.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"optional": true
},
"semver": {
"version": "5.6.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"optional": true
},
"set-blocking": {
"version": "2.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"optional": true
},
"signal-exit": {
"version": "3.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"optional": true
},
"string-width": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
@@ -6743,7 +6865,8 @@
},
"string_decoder": {
"version": "1.1.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
@@ -6751,19 +6874,23 @@
},
"strip-ansi": {
"version": "3.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"optional": true
},
"tar": {
"version": "4.4.8",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
+ "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
"optional": true,
"requires": {
"chownr": "^1.1.1",
@@ -6777,12 +6904,14 @@
},
"util-deprecate": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"optional": true
},
"wide-align": {
"version": "1.1.3",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
@@ -6790,11 +6919,15 @@
},
"wrappy": {
"version": "1.0.2",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "optional": true
},
"yallist": {
"version": "3.0.3",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "optional": true
}
}
},
@@ -8803,20 +8936,17 @@
}
},
"make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz",
+ "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==",
"requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
+ "semver": "^6.0.0"
},
"dependencies": {
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
+ "semver": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
+ "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ=="
}
}
},
@@ -8877,6 +9007,16 @@
"resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
"integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A=="
},
+ "md5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
+ "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
+ "requires": {
+ "charenc": "~0.0.1",
+ "crypt": "~0.0.1",
+ "is-buffer": "~1.1.1"
+ }
+ },
"md5-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/md5-file/-/md5-file-4.0.0.tgz",
@@ -9707,18 +9847,18 @@
}
},
"mongodb": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.3.tgz",
- "integrity": "sha512-jw8UyPsq4QleZ9z+t/pIVy3L++51vKdaJ2Q/XXeYxk/3cnKioAH8H6f5tkkDivrQL4PUgUOHe9uZzkpRFH1XtQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.7.tgz",
+ "integrity": "sha512-2YdWrdf1PJgxcCrT1tWoL6nHuk6hCxhddAAaEh8QJL231ci4+P9FLyqopbTm2Z2sAU6mhCri+wd9r1hOcHdoMw==",
"requires": {
- "mongodb-core": "^3.2.3",
+ "mongodb-core": "3.2.7",
"safe-buffer": "^5.1.2"
}
},
"mongodb-core": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.3.tgz",
- "integrity": "sha512-UyI0rmvPPkjOJV8XGWa9VCTq7R4hBVipimhnAXeSXnuAPjuTqbyfA5Ec9RcYJ1Hhu+ISnc8bJ1KfGZd4ZkYARQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz",
+ "integrity": "sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ==",
"requires": {
"bson": "^1.1.1",
"require_optional": "^1.0.1",
@@ -9757,9 +9897,9 @@
"integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw=="
},
"nanoid": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.0.1.tgz",
- "integrity": "sha512-k1u2uemjIGsn25zmujKnotgniC/gxQ9sdegdezeDiKdkDW56THUMqlz3urndKCXJxA6yPzSZbXx/QCMe/pxqsA=="
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.0.3.tgz",
+ "integrity": "sha512-NbaoqdhIYmY6FXDRB4eYtDVC9Z9eCbn8TyaiC16LNKtpPv/aqa0tOPD8y6gNE4yUNnaZ7LLhYtXOev/6+cBtfw=="
},
"nanomatch": {
"version": "1.2.13",
@@ -10032,11 +10172,6 @@
"resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
"integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8="
},
- "node-uuid": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
- "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc="
- },
"node-watch": {
"version": "0.5.9",
"resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.5.9.tgz",
@@ -10494,12 +10629,6 @@
"semver": "^5.1.0"
}
},
- "pako": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
- "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
- "dev": true
- },
"parallel-transform": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
@@ -12047,8 +12176,8 @@
}
},
"sealious": {
- "version": "github:sealcode/sealious#e311447ce5ead8462a8150bd6f8c5ef1fcc783f0",
- "from": "github:sealcode/sealious#e311447ce5ead8462a8150bd6",
+ "version": "github:sealcode/sealious#39b71ca55fa8b49aa548e8f0e995b01a5d36733d",
+ "from": "github:sealcode/sealious#39b71ca55fa8b49aa548e8f0e9",
"requires": {
"@3846masa/axios-cookiejar-support": "^0.1.4",
"@babel/polyfill": "^7.0.0",
@@ -12057,7 +12186,7 @@
"bluebird-events": "^2.0.0",
"boom": "^4.2.0",
"clone": "^1.0.2",
- "color": "^3.1.1",
+ "color": "^3.1.2",
"deep-equal": "^1.0.1",
"dot-prop": "^4.2.0",
"escape-html": "^1.0.3",
@@ -12085,23 +12214,31 @@
},
"dependencies": {
"axios": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
- "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz",
+ "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==",
"requires": {
- "follow-redirects": "^1.3.0",
- "is-buffer": "^1.1.5"
+ "follow-redirects": "1.5.10",
+ "is-buffer": "^2.0.2"
}
},
"color": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz",
- "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
+ "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
"requires": {
"color-convert": "^1.9.1",
"color-string": "^1.5.2"
}
},
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"dot-prop": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
@@ -12110,6 +12247,29 @@
"is-obj": "^1.0.0"
}
},
+ "follow-redirects": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+ "requires": {
+ "debug": "=3.1.0"
+ }
+ },
+ "is-buffer": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
+ "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw=="
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "node-uuid": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
+ "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc="
+ },
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
@@ -13062,25 +13222,6 @@
"xtend": "^4.0.0"
}
},
- "terser": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz",
- "integrity": "sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==",
- "dev": true,
- "requires": {
- "commander": "^2.19.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.10"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
"terser-webpack-plugin": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz",
@@ -13104,6 +13245,17 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
+ },
+ "terser": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.0.2.tgz",
+ "integrity": "sha512-IWLuJqTvx97KP3uTYkFVn93cXO+EtlzJu8TdJylq+H0VBDlPMIfQA9MBS5Vc5t3xTEUG1q0hIfHMpAP2R+gWTw==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.19.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.10"
+ }
}
}
},
@@ -13498,9 +13650,9 @@
}
},
"unique-slug": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
- "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
"dev": true,
"requires": {
"imurmurhash": "^0.1.4"
@@ -13699,9 +13851,9 @@
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"uuid": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho="
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"v8flags": {
"version": "2.1.1",
@@ -14362,9 +14514,9 @@
}
},
"webpack": {
- "version": "4.32.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.32.2.tgz",
- "integrity": "sha512-F+H2Aa1TprTQrpodRAWUMJn7A8MgDx82yQiNvYMaj3d1nv3HetKU0oqEulL9huj8enirKi8KvEXQ3QtuHF89Zg==",
+ "version": "4.35.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.35.2.tgz",
+ "integrity": "sha512-TZAmorNymV4q66gAM/h90cEjG+N3627Q2MnkSgKlX/z3DlNVKUtqy57lz1WmZU2+FUZwzM+qm7cGaO95PyrX5A==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.8.5",
diff --git a/package.json b/package.json
--- a/package.json
+++ b/package.json
@@ -22,7 +22,9 @@
"glob": "^7.1.3",
"http-server": "^0.11.1",
"locreq": "^1.1.0",
+ "make-dir": "^3.0.0",
"marked": "^0.6.2",
+ "md5": "^2.2.1",
"md5-file": "^4.0.0",
"node-jsx": "^0.13.3",
"node-sass": "^4.11.0",
@@ -30,8 +32,9 @@
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-router-dom": "^5.0.0",
- "sealious": "sealcode/sealious#e311447ce5ead8462a8150bd6",
+ "sealious": "sealcode/sealious#39b71ca55fa8b49aa548e8f0e9",
"sharp": "^0.21.3",
+ "uuid": "^3.3.2",
"yargs": "^13.2.2"
},
"devDependencies": {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Nov 25, 23:05 (20 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
549018
Default Alt Text
D625.diff (55 KB)
Attached To
Mode
D625: Mozliwość dodawania plików ubocznych - s.addOutputFile
Attached
Detach File
Event Timeline
Log In to Comment