Compare commits
5 commits
master
...
epub-gener
Author | SHA1 | Date | |
---|---|---|---|
|
8926493a2b | ||
|
98ac5a8884 | ||
|
1ddc5f4e7c | ||
|
d475a5bde9 | ||
|
d5fd82e421 |
7 changed files with 587 additions and 231 deletions
19
README.md
19
README.md
|
@ -40,15 +40,10 @@ files, and for your Ghost API interface. The parameters to set are:
|
||||||
* `WEBDAV_SERVER_URL` - location of your WebDAV server
|
* `WEBDAV_SERVER_URL` - location of your WebDAV server
|
||||||
* `WEBDAV_USERNAME` - username for signing in
|
* `WEBDAV_USERNAME` - username for signing in
|
||||||
* `WEBDAV_PASSWORD` - password, likewise
|
* `WEBDAV_PASSWORD` - password, likewise
|
||||||
* `WEBDAV_PATH_PREFIX` - prefix to add to all WebDAV paths: no uploads
|
* `WEBDAV_UPLOADED_PATH` - path where uploaded images will be served (it
|
||||||
will happen outside of this path
|
could end up being different from `WEBDAV_SERVER_URL`: say you go to
|
||||||
* `UPLOADED_PATH_PREFIX` - path where uploaded images will be
|
`https://myhost.com:1234/dav/[folder]` to upload, but the public sees
|
||||||
served (it could end up being different from `WEBDAV_SERVER_URL`: say
|
it as `https://media.mysite.com/[folder]`.
|
||||||
you go to `https://myhost.com:1234/dav/[folder]` to upload, but the
|
|
||||||
public sees it as `https://media.mysite.com/[folder]`—or, more
|
|
||||||
significantly, when you're doing a local-directory upload!
|
|
||||||
* `LOCAL_UPLOAD_PATH_PREFIX` - path where uploaded images will be copied
|
|
||||||
locally, if you choose not to use WebDAV
|
|
||||||
* `GHOST_URL` - URL of your Ghost installation
|
* `GHOST_URL` - URL of your Ghost installation
|
||||||
* `GHOST_VERSION` - 'v2' or 'v3' depending on which version you're using
|
* `GHOST_VERSION` - 'v2' or 'v3' depending on which version you're using
|
||||||
* `GHOST_ADMIN_KEY` - 'Admi API key for Ghost'
|
* `GHOST_ADMIN_KEY` - 'Admi API key for Ghost'
|
||||||
|
@ -56,11 +51,7 @@ files, and for your Ghost API interface. The parameters to set are:
|
||||||
In case you're wondering about the WebDAV server: that's the setup we
|
In case you're wondering about the WebDAV server: that's the setup we
|
||||||
use at Snipette. We'd like to eventually let you upload directly through
|
use at Snipette. We'd like to eventually let you upload directly through
|
||||||
Ghost as well, but we're prioritising our setup first to get running
|
Ghost as well, but we're prioritising our setup first to get running
|
||||||
before we think of anything else.
|
before we think of anything else. Pull requests are welcome!
|
||||||
|
|
||||||
Now, we've got a "local upload" option as well which basically copies
|
|
||||||
the file to a specified directory on the system. Pull requests for
|
|
||||||
anything else are welcome!
|
|
||||||
|
|
||||||
## Pull a post from Medium
|
## Pull a post from Medium
|
||||||
|
|
||||||
|
|
114
cli.js
114
cli.js
|
@ -42,82 +42,39 @@ program.command('setup')
|
||||||
'\n\nWe\'re going to take you through some steps' +
|
'\n\nWe\'re going to take you through some steps' +
|
||||||
' to set up your system.\n'
|
' to set up your system.\n'
|
||||||
)
|
)
|
||||||
|
console.log('First up: WebDAV details.')
|
||||||
|
console.log(
|
||||||
|
'Please enter your server url (including the port), ' +
|
||||||
|
'username, and password\n'
|
||||||
|
)
|
||||||
|
|
||||||
var res
|
var res
|
||||||
prompt.start()
|
prompt.start()
|
||||||
|
|
||||||
console.log('First up: File uploads.')
|
|
||||||
console.log(
|
|
||||||
'Would you like to upload your files via WebDAV, or just ' +
|
|
||||||
'copy them to a local folder on your filesystem? Type ' +
|
|
||||||
'"webdav" or "local" to choose.\n'
|
|
||||||
)
|
|
||||||
|
|
||||||
res = await prompt.get([
|
res = await prompt.get([
|
||||||
{
|
{ name: 'server_url', default: config.webdav.server_url || '' },
|
||||||
name: 'upload_mode',
|
{ name: 'username', default: config.webdav.username || '' },
|
||||||
default: 'webdav',
|
{ name: 'password', default: config.webdav.password || '' , hidden: true},
|
||||||
pattern: /^(webdav|local)$/ig,
|
|
||||||
message: 'Please enter "webdav" or "local"',
|
|
||||||
},
|
|
||||||
])
|
])
|
||||||
|
config.webdav.server_url = res.server_url
|
||||||
|
config.webdav.username = res.username
|
||||||
|
config.webdav.password = res.password
|
||||||
|
console.log(`\nOkay. So we have ${config.webdav.username} on ${config.webdav.server_url} with [ the password you set]`)
|
||||||
|
|
||||||
if (res.upload_mode == 'webdav') {
|
console.log(
|
||||||
|
'\nA couple more settings for your WebDAV: ' +
|
||||||
console.log('You\'re going with WebDAV? Awesome!')
|
'we need to know the path prefix and the uploaded path prefix.\n' +
|
||||||
console.log(
|
'The path prefix is the subfolder to which you upload, like ' +
|
||||||
'Please enter your server url (including the port), ' +
|
'`/seance-uploads`, while the uploaded path prefix is what '+
|
||||||
'username, and password\n'
|
'you\'d stick in front of the filename after uploading ' +
|
||||||
)
|
'(like `https://media.mysite.com/seance-uploads`).\n'
|
||||||
|
)
|
||||||
res = await prompt.get([
|
res = await prompt.get([
|
||||||
{ name: 'server_url', default: config.webdav.server_url || '' },
|
{ name: 'path_prefix', default: config.webdav.path_prefix || '' },
|
||||||
{ name: 'username', default: config.webdav.username || '' },
|
{ name: 'uploaded_path_prefix', default: config.webdav.uploaded_path_prefix || '' },
|
||||||
{ name: 'password', default: config.webdav.password || '' , hidden: true},
|
])
|
||||||
])
|
config.webdav.path_prefix = res.path_prefix
|
||||||
config.webdav.server_url = res.server_url
|
config.webdav.uploaded_path_prefix = res.uploaded_path_prefix
|
||||||
config.webdav.username = res.username
|
console.log(`Cool. So uploads to ${config.webdav.path_prefix} will go to ${config.webdav.uploaded_path_prefix}.`)
|
||||||
config.webdav.password = res.password
|
|
||||||
console.log(`\nOkay. So we have ${config.webdav.username} on ${config.webdav.server_url} with [ the password you set]`)
|
|
||||||
|
|
||||||
console.log(
|
|
||||||
'\nA couple more settings for your WebDAV: ' +
|
|
||||||
'we need to know the path prefix and the uploaded path prefix.\n' +
|
|
||||||
'The path prefix is the subfolder to which you upload, like ' +
|
|
||||||
'`/seance-uploads`, while the uploaded path prefix is what '+
|
|
||||||
'you\'d stick in front of the filename after uploading ' +
|
|
||||||
'(like `https://media.mysite.com/seance-uploads`).\n'
|
|
||||||
)
|
|
||||||
res = await prompt.get([
|
|
||||||
{ name: 'path_prefix', default: config.webdav.path_prefix || '' },
|
|
||||||
{
|
|
||||||
name: 'uploaded_path_prefix',
|
|
||||||
default: config.uploaded_path_prefix || config.webdav.uploaded_path_prefix || ''
|
|
||||||
},
|
|
||||||
])
|
|
||||||
config.webdav.path_prefix = res.path_prefix
|
|
||||||
config.uploaded_path_prefix = res.uploaded_path_prefix
|
|
||||||
console.log(`Cool. So uploads to ${config.webdav.path_prefix} will be visible at ${config.uploaded_path_prefix}.`)
|
|
||||||
|
|
||||||
} else if (res.upload_mode == 'local') {
|
|
||||||
console.log('You\'re saving files locally? Smart!')
|
|
||||||
console.log(
|
|
||||||
'Two settings we need to know to get things running ' +
|
|
||||||
'smoothly: we need the local path/folder where you\'ll be ' +
|
|
||||||
'uploading the files, and the uploaded path prefix.\n' +
|
|
||||||
'The local path is the folder to which you upload, like ' +
|
|
||||||
'`/var/www/seance-uploads`, while the uploaded path prefix ' +
|
|
||||||
'is what you\'d stick in front of the filename after ' +
|
|
||||||
'uploading (like `https://media.mysite.com/seance-uploads`).\n'
|
|
||||||
)
|
|
||||||
res = await prompt.get([
|
|
||||||
{ name: 'path_prefix', default: config.local_upload.path_prefix || '' },
|
|
||||||
{ name: 'uploaded_path_prefix', default: config.uploaded_path_prefix || '' },
|
|
||||||
])
|
|
||||||
config.local_upload.path_prefix = res.path_prefix
|
|
||||||
config.uploaded_path_prefix = res.uploaded_path_prefix
|
|
||||||
console.log(`Cool. So uploads to ${config.local_upload.path_prefix} will be visible at ${config.uploaded_path_prefix}.`)
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('\n\nNext up: Ghost settings.')
|
console.log('\n\nNext up: Ghost settings.')
|
||||||
console.log(
|
console.log(
|
||||||
|
@ -230,6 +187,23 @@ program.command('webdav-test <file>')
|
||||||
new seance.uploadDav(dir_path, file);
|
new seance.uploadDav(dir_path, file);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
program.command('fetch-epub [postSlugs...]')
|
||||||
|
.description('fetch posts from Ghost and collate them into a ePub')
|
||||||
|
.option('-t, --title <title>', 'title of the final book')
|
||||||
|
.option('-a, --author <author>', 'author of the book')
|
||||||
|
.option('-g, --genre <genre>', 'genre of the book', 'Unknown')
|
||||||
|
.option('-c, --cover-image <file>', 'what to use as the epub cover')
|
||||||
|
.option('-O, --output-folder <path>', 'where to output the file', '.')
|
||||||
|
.action(async (postSlug, o) => {
|
||||||
|
await seance.fetchToEpub(postSlug, {
|
||||||
|
title: o.title,
|
||||||
|
author: o.author,
|
||||||
|
genre: o.genre,
|
||||||
|
coverImage: o.coverImage,
|
||||||
|
outputFolder: o.outputFolder,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
program.command('check-scissors <file>')
|
program.command('check-scissors <file>')
|
||||||
.description('[test command] check if an image matches the set separator')
|
.description('[test command] check if an image matches the set separator')
|
||||||
.action(async (file) => {
|
.action(async (file) => {
|
||||||
|
|
36
config.js
36
config.js
|
@ -1,36 +1,26 @@
|
||||||
// load configuraton from .env file (if exists)
|
// load configuraton from .env file (if exists)
|
||||||
require('dotenv').config()
|
require('dotenv').config()
|
||||||
const convict = require('convict')
|
const convict = require('convict')
|
||||||
const convict_format_with_validator = require('convict-format-with-validator')
|
|
||||||
const os = require('os')
|
const os = require('os')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const yaml = require('js-yaml')
|
const yaml = require('js-yaml')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
|
|
||||||
convict.addFormats(convict_format_with_validator)
|
|
||||||
convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad })
|
convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad })
|
||||||
|
|
||||||
let config = convict({
|
let config = convict({
|
||||||
uploaded_path_prefix: {
|
|
||||||
doc: 'URL where files are uploaded (eg. https://mysitem.com/media)',
|
|
||||||
format: 'url',
|
|
||||||
env: 'UPLOADED_PATH_PREFIX',
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
webdav: {
|
webdav: {
|
||||||
server_url: {
|
server_url: {
|
||||||
doc: 'WebDAV server URL (eg. https://myhost.com:2078)',
|
doc: 'WebDAV server URL (eg. https://myhost.com:2078)',
|
||||||
format: 'url',
|
format: 'url',
|
||||||
env: 'WEBDAV_SERVER_URL',
|
env: 'WEBDAV_SERVER_URL',
|
||||||
default: null,
|
default: null,
|
||||||
nullable: true,
|
|
||||||
},
|
},
|
||||||
username: {
|
username: {
|
||||||
doc: 'Username for WebDAV server',
|
doc: 'Username for WebDAV server',
|
||||||
format: 'String',
|
format: 'String',
|
||||||
env: 'WEBDAV_USERNAME',
|
env: 'WEBDAV_USERNAME',
|
||||||
default: null,
|
default: null,
|
||||||
nullable: true,
|
|
||||||
},
|
},
|
||||||
password: {
|
password: {
|
||||||
doc: 'Password for WebDAV server',
|
doc: 'Password for WebDAV server',
|
||||||
|
@ -38,21 +28,18 @@ let config = convict({
|
||||||
env: 'WEBDAV_PASSWORD',
|
env: 'WEBDAV_PASSWORD',
|
||||||
default: null,
|
default: null,
|
||||||
sensitive: true,
|
sensitive: true,
|
||||||
nullable: true,
|
|
||||||
},
|
},
|
||||||
path_prefix: {
|
path_prefix: {
|
||||||
doc: 'Where to upload files (eg. /seance-uploads)',
|
doc: 'Where to upload files (eg. /seance-uploads)',
|
||||||
format: 'String',
|
format: 'String',
|
||||||
env: 'WEBDAV_PATH_PREFIX',
|
env: 'WEBDAV_PATH_PREFIX',
|
||||||
default: null,
|
default: null,
|
||||||
nullable: true,
|
|
||||||
},
|
},
|
||||||
uploaded_path_prefix: { // FIXME: Deprecated; remove
|
uploaded_path_prefix: {
|
||||||
doc: 'URL where files are uploaded (eg. https://mysitem.com/media)',
|
doc: 'URL where files are uploaded (eg. https://mysitem.com/media)',
|
||||||
format: 'url',
|
format: 'url',
|
||||||
env: 'WEBDAV_UPLOADED_PATH_PREFIX',
|
env: 'WEBDAV_UPLOADED_PATH_PREFIX',
|
||||||
default: null,
|
default: null,
|
||||||
nullable: true,
|
|
||||||
},
|
},
|
||||||
use_digest: {
|
use_digest: {
|
||||||
doc: 'Whether to use digest authentication',
|
doc: 'Whether to use digest authentication',
|
||||||
|
@ -61,14 +48,6 @@ let config = convict({
|
||||||
default: false,
|
default: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
local_upload: {
|
|
||||||
path_prefix: {
|
|
||||||
doc: 'Where to upload files locally (eg. /media/seance-uploads)',
|
|
||||||
format: 'String',
|
|
||||||
env: 'LOCAL_UPLOAD_PATH_PREFIX',
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ghost: {
|
ghost: {
|
||||||
url: {
|
url: {
|
||||||
doc: 'URL of Ghost installation',
|
doc: 'URL of Ghost installation',
|
||||||
|
@ -94,7 +73,7 @@ let config = convict({
|
||||||
format: '*', // TODO: validate by checking path
|
format: '*', // TODO: validate by checking path
|
||||||
env: 'SEPARATOR_IMAGE',
|
env: 'SEPARATOR_IMAGE',
|
||||||
default: null,
|
default: null,
|
||||||
},
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Load configs from home directory, if present
|
// Load configs from home directory, if present
|
||||||
|
@ -119,17 +98,6 @@ try {
|
||||||
validated = false
|
validated = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update deprecated value: config.webdav.uploaded_path_prefix
|
|
||||||
if (!!config.webdav && !!config.webdav.uploaded_path_prefix) {
|
|
||||||
console.warn(
|
|
||||||
'Warning: config.webdav.uploaded_path_prefix and the ' +
|
|
||||||
'WEBDAV_UPLOADED_PATH_PREFIX environment variable are ' +
|
|
||||||
'deprecated! Please use config.uploaded_path_prefix or ' +
|
|
||||||
'the UPLOADED_PATH_PREFIX environment variable instead.'
|
|
||||||
)
|
|
||||||
config.uploaded_path_prefix = config.webdav.uploaded_path_prefix
|
|
||||||
}
|
|
||||||
|
|
||||||
allConf = config.getProperties()
|
allConf = config.getProperties()
|
||||||
allConf.validated = validated
|
allConf.validated = validated
|
||||||
|
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
"babel-preset-env": "^1.7.0",
|
"babel-preset-env": "^1.7.0",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"bulma": "^0.8.2",
|
"bulma": "^0.8.2",
|
||||||
|
"cheerio": "^1.0.0-rc.5",
|
||||||
"commander": "^3.0.2",
|
"commander": "^3.0.2",
|
||||||
"convict": "6",
|
"convict": "^5.2.0",
|
||||||
"convict-format-with-validator": "^6.2.0",
|
|
||||||
"css-loader": "^3.5.3",
|
"css-loader": "^3.5.3",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
|
@ -32,6 +32,7 @@
|
||||||
"mediumexporter": "github:badrihippo/mediumexporter#seance-latest",
|
"mediumexporter": "github:badrihippo/mediumexporter#seance-latest",
|
||||||
"mini-css-extract-plugin": "^0.9.0",
|
"mini-css-extract-plugin": "^0.9.0",
|
||||||
"node-sass": "^4.14.1",
|
"node-sass": "^4.14.1",
|
||||||
|
"nodepub": "^3.0.1",
|
||||||
"postcss-loader": "^3.0.0",
|
"postcss-loader": "^3.0.0",
|
||||||
"prompt-async": "^0.9.9",
|
"prompt-async": "^0.9.9",
|
||||||
"r2": "^2.0.1",
|
"r2": "^2.0.1",
|
||||||
|
@ -47,6 +48,6 @@
|
||||||
"webpack-node-externals": "^1.7.2"
|
"webpack-node-externals": "^1.7.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12.x"
|
"node": "12.x"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
BIN
random-cover.jpg
Normal file
BIN
random-cover.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
279
seance.js
279
seance.js
|
@ -9,7 +9,10 @@ const readline = require('readline')
|
||||||
const { markdown } = require('markdown')
|
const { markdown } = require('markdown')
|
||||||
const GhostAdminAPI = require('@tryghost/admin-api')
|
const GhostAdminAPI = require('@tryghost/admin-api')
|
||||||
const { Canvas, Image } = require('canvas')
|
const { Canvas, Image } = require('canvas')
|
||||||
|
const slugify = require('underscore.string/slugify')
|
||||||
const Rembrandt = require('rembrandt')
|
const Rembrandt = require('rembrandt')
|
||||||
|
const nodepub = require('nodepub')
|
||||||
|
const cheerio = require('cheerio')
|
||||||
|
|
||||||
const config = require('./config')
|
const config = require('./config')
|
||||||
|
|
||||||
|
@ -116,7 +119,7 @@ class Seance {
|
||||||
* @param {Boolean} options.noUpload Skip uploading of images
|
* @param {Boolean} options.noUpload Skip uploading of images
|
||||||
* @param {Boolean} options.noPush Skip pushing to Ghost; just generate the file
|
* @param {Boolean} options.noPush Skip pushing to Ghost; just generate the file
|
||||||
* @param {Boolean} options.dryRun Combination of noUpload and noPush
|
* @param {Boolean} options.dryRun Combination of noUpload and noPush
|
||||||
* @returns [string] status
|
* @returns [object] object containing details of the uploaded Ghost post
|
||||||
*/
|
*/
|
||||||
async pushToGhost (postSlug, options={}) {
|
async pushToGhost (postSlug, options={}) {
|
||||||
this.emit('update', {
|
this.emit('update', {
|
||||||
|
@ -159,7 +162,7 @@ class Seance {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decide file/WebDAV upload path
|
// Decide WebDAV upload path
|
||||||
var current_date = new Date()
|
var current_date = new Date()
|
||||||
|
|
||||||
const uploadPath = path.join(
|
const uploadPath = path.join(
|
||||||
|
@ -168,9 +171,12 @@ class Seance {
|
||||||
postSlug
|
postSlug
|
||||||
)
|
)
|
||||||
|
|
||||||
// Public path to upload those files (eg. https://example.com:2078)
|
// Path where WebDAV files will be placed (eg. https://example.com:2078)
|
||||||
|
const davPath = path.join(config.webdav.path_prefix, uploadPath)
|
||||||
|
|
||||||
|
// Public path to upload those files (eg. https://media.example.com/uploads)
|
||||||
// We'll do it directly since path.join mangles the protocol
|
// We'll do it directly since path.join mangles the protocol
|
||||||
const uploadedPath = config.uploaded_path_prefix + '/' + uploadPath
|
const uploadedPath = config.webdav.uploaded_path_prefix + '/' + uploadPath
|
||||||
|
|
||||||
// load metadata file
|
// load metadata file
|
||||||
this.emit('update', {
|
this.emit('update', {
|
||||||
|
@ -267,7 +273,7 @@ class Seance {
|
||||||
|
|
||||||
// Let's wait for the upload, just to avoid conflicts
|
// Let's wait for the upload, just to avoid conflicts
|
||||||
if (!options.noUpload) {
|
if (!options.noUpload) {
|
||||||
await this.upload(uploadPath, imagePath)
|
await this.uploadDav(davPath, imagePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
newLine = '![' + imageAlt + '](' + uploadedPath + '/' + imageName + ')'
|
newLine = '![' + imageAlt + '](' + uploadedPath + '/' + imageName + ')'
|
||||||
|
@ -317,7 +323,7 @@ class Seance {
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!options.noUpload) {
|
if (!options.noUpload) {
|
||||||
this.upload(uploadPath, imagePath)
|
this.uploadDav(davPath, imagePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
featuredImagePath = uploadedPath + '/' + imageName
|
featuredImagePath = uploadedPath + '/' + imageName
|
||||||
|
@ -564,7 +570,8 @@ class Seance {
|
||||||
loglevel: 'info'
|
loglevel: 'info'
|
||||||
})
|
})
|
||||||
|
|
||||||
await this.upload('avatars', filePath)
|
await this.uploadDav(path.join(config.webdav.path_prefix,'avatars'),
|
||||||
|
filePath)
|
||||||
|
|
||||||
// Generate Ghost JSON
|
// Generate Ghost JSON
|
||||||
|
|
||||||
|
@ -577,7 +584,7 @@ class Seance {
|
||||||
bio: json.payload.user.bio,
|
bio: json.payload.user.bio,
|
||||||
email: email,
|
email: email,
|
||||||
name: json.payload.user.name,
|
name: json.payload.user.name,
|
||||||
profile_image: config.uploaded_path_prefix + '/avatars/' + fileName
|
profile_image: config.webdav.uploaded_path_prefix + '/avatars/' + fileName
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -676,9 +683,6 @@ class Seance {
|
||||||
* @returns [string] status
|
* @returns [string] status
|
||||||
*/
|
*/
|
||||||
async uploadDav (dirPath, filePath) {
|
async uploadDav (dirPath, filePath) {
|
||||||
// Set uploadPath
|
|
||||||
// We'll do it directly since path.join mangles the protocol
|
|
||||||
let uploadPath = path.join(config.webdav.path_prefix, dirPath)
|
|
||||||
|
|
||||||
// connect to webdav
|
// connect to webdav
|
||||||
const client = createClient(
|
const client = createClient(
|
||||||
|
@ -691,7 +695,7 @@ class Seance {
|
||||||
|
|
||||||
// create directory if not exists
|
// create directory if not exists
|
||||||
console.debug(`[dav-upload] Loading ${dirPath}`)
|
console.debug(`[dav-upload] Loading ${dirPath}`)
|
||||||
if (!await this.createDirIfNotExist(client, uploadPath)) {
|
if (!await this.createDirIfNotExist(client, dirPath)) {
|
||||||
console.error(`[dav-upload] Could not upload ${path.basename(filePath)} :(`)
|
console.error(`[dav-upload] Could not upload ${path.basename(filePath)} :(`)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -699,7 +703,7 @@ class Seance {
|
||||||
// upload a file
|
// upload a file
|
||||||
console.debug('Uploading file')
|
console.debug('Uploading file')
|
||||||
const outStream = client.createWriteStream(
|
const outStream = client.createWriteStream(
|
||||||
path.join(uploadPath, path.basename(filePath))
|
path.join(dirPath, path.basename(filePath))
|
||||||
)
|
)
|
||||||
outStream.on('finish', () => console.debug('Uploaded successfully.'))
|
outStream.on('finish', () => console.debug('Uploaded successfully.'))
|
||||||
|
|
||||||
|
@ -711,88 +715,197 @@ class Seance {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* function [exists]
|
* function [fetchToEpub]
|
||||||
* @returns [boolean]
|
* @description fetches posts from Ghost and packs them into an epub
|
||||||
*
|
* @options.id unique ID for the generated epub
|
||||||
* check if the given file exists or not
|
* @options.title title of the generated epub
|
||||||
*/
|
* @options.author author of the generated epub
|
||||||
async fsExists (path) {
|
* @options.language language of the book
|
||||||
try {
|
* @genre genre of the book
|
||||||
await fs.promises.access(path)
|
* @cover cover image to use
|
||||||
return true
|
|
||||||
} catch {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* function [uploadLocal]
|
|
||||||
* @returns [string] status
|
* @returns [string] status
|
||||||
*
|
|
||||||
* upload to a local file path. This should technically be
|
|
||||||
* called "copy" and not "upload", but the equivalent
|
|
||||||
* WebDAV one is actually an upload so ¯\_(ツ)_/¯
|
|
||||||
*/
|
*/
|
||||||
async uploadLocal (dirPath, filePath) {
|
async fetchToEpub (postSlugs, options = {}) {
|
||||||
// Set uploadPath
|
if (!options.title) options.title = 'Seance Collection'
|
||||||
// We'll do it directly since path.join mangles the protocol
|
if (!options.author) options.author = 'Seance'
|
||||||
let uploadPath = path.join(config.local_upload.path_prefix, dirPath)
|
if (!options.language) options.language = 'en'
|
||||||
|
if (!options.genre) options.genre = 'Unknown'
|
||||||
|
if (!options.coverImage) options.coverImage = 'random-cover.jpg'
|
||||||
|
if (!options.outputFolder) options.outputFolder = '.'
|
||||||
|
|
||||||
// safety: don't touch directories outside LOCAL_UPLOAD_PATH_PREFIX
|
|
||||||
if (!uploadPath.startsWith(config.local_upload.path_prefix)) {
|
console.log(`Fetching: ${postSlugs}`)
|
||||||
console.error(`[local-upload] Cannot create directories outside ${config.local_upload.path_prefix}`)
|
let allPosts = []
|
||||||
return false
|
|
||||||
|
// first, fetch all the posts
|
||||||
|
for (let slug of postSlugs) {
|
||||||
|
console.log(`Fetching: ${slug}`)
|
||||||
|
let post = await this.ghostAdmin.posts.read({slug: slug}, {formats: ['html']})
|
||||||
|
allPosts.push(post)
|
||||||
}
|
}
|
||||||
|
|
||||||
// create directory if not exists
|
// prepare for image downloads, starting with the scissors!
|
||||||
console.debug(`[local-upload] Loading ${uploadPath}`)
|
let pics = [path.join(__dirname, 'scissors.png')]
|
||||||
if (
|
let picFolder = path.join(options.outputFolder, 'seance-images')
|
||||||
!(await this.fsExists(uploadPath)) ||
|
if (!fs.existsSync(picFolder)) {
|
||||||
!(await fs.promises.lstat(uploadPath)).isDirectory()
|
fs.mkdirSync(picFolder, { recursive: true })
|
||||||
) {
|
}
|
||||||
if (!(await fs.promises.mkdir(uploadPath,
|
|
||||||
{ recursive: true }))) {
|
// prepare array to collect processed posts
|
||||||
console.error(`[local-upload] Could not upload ${path.basename(filePath)} :(`)
|
let processedPosts = []
|
||||||
return false
|
|
||||||
|
for (let post of allPosts) {
|
||||||
|
// decide a post slug, for future files
|
||||||
|
let postSlug = slugify(post.title)
|
||||||
|
|
||||||
|
// get the cover pic
|
||||||
|
let featurePicTag
|
||||||
|
if (!!post.feature_image) {
|
||||||
|
let imgUrl = post.feature_image
|
||||||
|
if (/^\/\//i.test(imgUrl)) {
|
||||||
|
imgUrl = 'https:' + imgUrl
|
||||||
|
} else if (!/^https?:\/\//i.test(imgUrl)) {
|
||||||
|
imgUrl = 'https://' + imgUrl
|
||||||
|
}
|
||||||
|
let response = await (await r2.get(imgUrl).response).buffer()
|
||||||
|
let ext = post.feature_image.split('.').pop()
|
||||||
|
await await fs.promises.writeFile(path.join(picFolder, `${postSlug}.${ext}`), response, 'base64')
|
||||||
|
featurePicTag = `<img src="../images/${postSlug}.${ext}"/>`
|
||||||
|
pics.push(`${picFolder}/${postSlug}.${ext}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let c = cheerio.load(`${featurePicTag}<h1>${post.title.toLowerCase()}</h1>${post.html}`)
|
||||||
|
|
||||||
|
// hunt for other pics
|
||||||
|
// TODO: make asynchronous
|
||||||
|
let picCounter = 0
|
||||||
|
c('img').each(async function() {
|
||||||
|
// skip if it's a local image
|
||||||
|
if (c(this).attr('src').indexOf('../images') == 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// first, process the url
|
||||||
|
let imgUrl = c(this).attr('src')
|
||||||
|
console.log('Downloading:', imgUrl)
|
||||||
|
if (/^\/\//i.test(imgUrl)) {
|
||||||
|
imgUrl = 'https:' + imgUrl
|
||||||
|
} else if (!/^https?:\/\//i.test(imgUrl)) {
|
||||||
|
imgUrl = 'https://' + imgUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
// now decide an output name
|
||||||
|
let ext = c(this).attr('src').split('.').pop()
|
||||||
|
let imageFile = path.join(picFolder, `${postSlug}-insert-${picCounter}.${ext}`)
|
||||||
|
|
||||||
|
// note down our calculations
|
||||||
|
c(this).attr('src', `../images/${postSlug}-insert-${picCounter}.${ext}`)
|
||||||
|
pics.push(imageFile)
|
||||||
|
picCounter = picCounter + 1
|
||||||
|
|
||||||
|
// finally, download the images
|
||||||
|
let response = await (await r2.get(imgUrl).response).buffer()
|
||||||
|
await fs.promises.writeFile(imageFile, response, 'base64')
|
||||||
|
console.log('Downloaded to:', imageFile)
|
||||||
|
})
|
||||||
|
|
||||||
|
processedPosts.push({
|
||||||
|
title: post.title,
|
||||||
|
body: c.html(),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// actually do the copying
|
// decide metadata
|
||||||
console.debug('Uploading file')
|
let metadata = {
|
||||||
try {
|
id: 'seance-test', // FIXME
|
||||||
await fs.promises.copyFile(filePath,
|
title: options.title,
|
||||||
path.join(uploadPath, path.basename(filePath)))
|
author: options.author,
|
||||||
} catch (err) {
|
language: options.language,
|
||||||
console.error(`Upload error: ${err}`)
|
contents: 'Table of Contents',
|
||||||
|
genre: options.genre,
|
||||||
|
cover: options.coverImage,
|
||||||
|
images: pics,
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
// create the ePub
|
||||||
|
let epub = nodepub.document(metadata)
|
||||||
|
|
||||||
|
// add the documents
|
||||||
|
for (let post of processedPosts) {
|
||||||
|
epub.addSection(post.title, post.body)
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the styles
|
||||||
|
epub.addCSS(`
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-family: "Abhaya Libre Extrabold";
|
||||||
|
text-transform: lowercase;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 2em;
|
||||||
|
line-height: 1em;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 + h2 {
|
||||||
|
font-family: "Open Sans Light";
|
||||||
|
font-variant: small-caps;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 1.2em;
|
||||||
|
line-height: 1em;
|
||||||
|
margin-bottom: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
@supports not (font-variant-caps: small-caps) {
|
||||||
|
h1 + h2 {
|
||||||
|
font-variant: normal;
|
||||||
|
font-feature-settings: "smcp", "onum", "pnum";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@supports (font-variant-caps: small-caps) {
|
||||||
|
h1 + h2 {
|
||||||
|
font-variant: normal;
|
||||||
|
font-variant-caps: small-caps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-family: "Crimson Text Regular";
|
||||||
|
font-size: 1em;
|
||||||
|
line-height: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
display: block;
|
||||||
|
border: 0px;
|
||||||
|
height: 1em;
|
||||||
|
background-image:url('../images/scissors.png');
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 50%;
|
||||||
|
margin-top: 1.5em;
|
||||||
|
margin-bottom: 1.5em;
|
||||||
|
page-break-inside: avoid;
|
||||||
|
break-inside: avoid;
|
||||||
|
}
|
||||||
|
|
||||||
|
@supports not ((page-break-inside: avoid) and (break-inside: avoid)) {
|
||||||
|
hr {
|
||||||
|
-webkit-column-break-inside: avoid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
// generate it!
|
||||||
|
await epub.writeEPUB(options.outputFolder, options.title)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* function [upload]
|
|
||||||
* @returns [boolean] status
|
|
||||||
*
|
|
||||||
* upload to WebDAV or a local folder, whichever is configured.
|
|
||||||
* If both are considered, WebDAV will be preferred.
|
|
||||||
*/
|
|
||||||
async upload (dirPath, filePath) {
|
|
||||||
if (
|
|
||||||
!!config.webdav &&
|
|
||||||
!!config.webdav.server_url &&
|
|
||||||
!!config.webdav.path_prefix
|
|
||||||
) {
|
|
||||||
return await this.uploadDav(dirPath, filePath)
|
|
||||||
} else if (
|
|
||||||
!!config.local_upload &&
|
|
||||||
!!config.local_upload.path_prefix
|
|
||||||
) {
|
|
||||||
return await this.uploadLocal(dirPath, filePath)
|
|
||||||
} else {
|
|
||||||
throw { error: 'Either webdav or local_upload settings must be configured!' }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make Seance an EventEmitter
|
// Make Seance an EventEmitter
|
||||||
|
|
363
yarn.lock
363
yarn.lock
|
@ -299,6 +299,35 @@ aproba@^1.0.3, aproba@^1.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||||
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
||||||
|
|
||||||
|
archiver-utils@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2"
|
||||||
|
integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==
|
||||||
|
dependencies:
|
||||||
|
glob "^7.1.4"
|
||||||
|
graceful-fs "^4.2.0"
|
||||||
|
lazystream "^1.0.0"
|
||||||
|
lodash.defaults "^4.2.0"
|
||||||
|
lodash.difference "^4.5.0"
|
||||||
|
lodash.flatten "^4.4.0"
|
||||||
|
lodash.isplainobject "^4.0.6"
|
||||||
|
lodash.union "^4.6.0"
|
||||||
|
normalize-path "^3.0.0"
|
||||||
|
readable-stream "^2.0.0"
|
||||||
|
|
||||||
|
archiver@^5.2.0:
|
||||||
|
version "5.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba"
|
||||||
|
integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==
|
||||||
|
dependencies:
|
||||||
|
archiver-utils "^2.1.0"
|
||||||
|
async "^3.2.0"
|
||||||
|
buffer-crc32 "^0.2.1"
|
||||||
|
readable-stream "^3.6.0"
|
||||||
|
readdir-glob "^1.0.0"
|
||||||
|
tar-stream "^2.2.0"
|
||||||
|
zip-stream "^4.1.0"
|
||||||
|
|
||||||
are-we-there-yet@~1.1.2:
|
are-we-there-yet@~1.1.2:
|
||||||
version "1.1.5"
|
version "1.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
|
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
|
||||||
|
@ -400,6 +429,11 @@ async@^2.3.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
lodash "^4.17.14"
|
lodash "^4.17.14"
|
||||||
|
|
||||||
|
async@^3.2.0:
|
||||||
|
version "3.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
|
||||||
|
integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
|
||||||
|
|
||||||
async@~0.9.0:
|
async@~0.9.0:
|
||||||
version "0.9.2"
|
version "0.9.2"
|
||||||
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
|
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
|
||||||
|
@ -1025,6 +1059,11 @@ base64-js@^1.0.2:
|
||||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
|
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
|
||||||
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
|
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
|
||||||
|
|
||||||
|
base64-js@^1.3.1:
|
||||||
|
version "1.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
||||||
|
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
|
||||||
|
|
||||||
base@^0.11.1:
|
base@^0.11.1:
|
||||||
version "0.11.2"
|
version "0.11.2"
|
||||||
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
||||||
|
@ -1062,6 +1101,15 @@ bindings@^1.5.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
file-uri-to-path "1.0.0"
|
file-uri-to-path "1.0.0"
|
||||||
|
|
||||||
|
bl@^4.0.3:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
|
||||||
|
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
|
||||||
|
dependencies:
|
||||||
|
buffer "^5.5.0"
|
||||||
|
inherits "^2.0.4"
|
||||||
|
readable-stream "^3.4.0"
|
||||||
|
|
||||||
block-stream@*:
|
block-stream@*:
|
||||||
version "0.0.9"
|
version "0.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
|
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
|
||||||
|
@ -1095,6 +1143,11 @@ body-parser@1.19.0, body-parser@^1.19.0:
|
||||||
raw-body "2.4.0"
|
raw-body "2.4.0"
|
||||||
type-is "~1.6.17"
|
type-is "~1.6.17"
|
||||||
|
|
||||||
|
boolbase@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
|
||||||
|
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.11"
|
version "1.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
@ -1207,6 +1260,11 @@ browserslist@^3.2.6:
|
||||||
caniuse-lite "^1.0.30000844"
|
caniuse-lite "^1.0.30000844"
|
||||||
electron-to-chromium "^1.3.47"
|
electron-to-chromium "^1.3.47"
|
||||||
|
|
||||||
|
buffer-crc32@^0.2.1, buffer-crc32@^0.2.13:
|
||||||
|
version "0.2.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||||
|
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
||||||
|
|
||||||
buffer-equal-constant-time@1.0.1:
|
buffer-equal-constant-time@1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
||||||
|
@ -1231,6 +1289,14 @@ buffer@^4.3.0:
|
||||||
ieee754 "^1.1.4"
|
ieee754 "^1.1.4"
|
||||||
isarray "^1.0.0"
|
isarray "^1.0.0"
|
||||||
|
|
||||||
|
buffer@^5.5.0:
|
||||||
|
version "5.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
|
||||||
|
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
|
||||||
|
dependencies:
|
||||||
|
base64-js "^1.3.1"
|
||||||
|
ieee754 "^1.1.13"
|
||||||
|
|
||||||
builtin-status-codes@^3.0.0:
|
builtin-status-codes@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
|
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
|
||||||
|
@ -1383,6 +1449,30 @@ chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
|
||||||
escape-string-regexp "^1.0.5"
|
escape-string-regexp "^1.0.5"
|
||||||
supports-color "^5.3.0"
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
|
cheerio-select-tmp@^0.1.0:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646"
|
||||||
|
integrity sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==
|
||||||
|
dependencies:
|
||||||
|
css-select "^3.1.2"
|
||||||
|
css-what "^4.0.0"
|
||||||
|
domelementtype "^2.1.0"
|
||||||
|
domhandler "^4.0.0"
|
||||||
|
domutils "^2.4.4"
|
||||||
|
|
||||||
|
cheerio@^1.0.0-rc.5:
|
||||||
|
version "1.0.0-rc.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.5.tgz#88907e1828674e8f9fee375188b27dadd4f0fa2f"
|
||||||
|
integrity sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==
|
||||||
|
dependencies:
|
||||||
|
cheerio-select-tmp "^0.1.0"
|
||||||
|
dom-serializer "~1.2.0"
|
||||||
|
domhandler "^4.0.0"
|
||||||
|
entities "~2.1.0"
|
||||||
|
htmlparser2 "^6.0.0"
|
||||||
|
parse5 "^6.0.0"
|
||||||
|
parse5-htmlparser2-tree-adapter "^6.0.0"
|
||||||
|
|
||||||
chokidar@^2.1.8:
|
chokidar@^2.1.8:
|
||||||
version "2.1.8"
|
version "2.1.8"
|
||||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
|
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
|
||||||
|
@ -1605,6 +1695,16 @@ component-emitter@^1.2.1:
|
||||||
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
|
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
|
||||||
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
|
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
|
||||||
|
|
||||||
|
compress-commons@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.0.tgz#25ec7a4528852ccd1d441a7d4353cd0ece11371b"
|
||||||
|
integrity sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==
|
||||||
|
dependencies:
|
||||||
|
buffer-crc32 "^0.2.13"
|
||||||
|
crc32-stream "^4.0.1"
|
||||||
|
normalize-path "^3.0.0"
|
||||||
|
readable-stream "^3.6.0"
|
||||||
|
|
||||||
concat-map@0.0.1:
|
concat-map@0.0.1:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
|
@ -1661,20 +1761,16 @@ convert-source-map@^1.5.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
safe-buffer "~5.1.1"
|
safe-buffer "~5.1.1"
|
||||||
|
|
||||||
convict-format-with-validator@^6.2.0:
|
convict@^5.2.0:
|
||||||
version "6.2.0"
|
version "5.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/convict-format-with-validator/-/convict-format-with-validator-6.2.0.tgz#3cab7779e83a89351b9157685cbf20a941414192"
|
resolved "https://registry.yarnpkg.com/convict/-/convict-5.2.0.tgz#4c01fa06885b8c4a4ffc98b7de43222fe6c876dc"
|
||||||
integrity sha512-2LIL3yEZY27M13UHLIP4mGivusP9h2M+X4mYsRBLexwUp8+0sgVk2MgB2b2bnQwkn293lkbkxgdevzn0nZdyzQ==
|
integrity sha512-C3cdUwo47cCikZNzu5Vv8AL0MuXVVeg9t/Gyr9qyK5ZpCjOkMPmJ85KUF3CowNeSfj4UtztHxS+hoO9wGRh6kg==
|
||||||
dependencies:
|
dependencies:
|
||||||
validator "^13.6.0"
|
json5 "2.1.0"
|
||||||
|
lodash.clonedeep "4.5.0"
|
||||||
convict@6:
|
moment "2.24.0"
|
||||||
version "6.2.0"
|
validator "11.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/convict/-/convict-6.2.0.tgz#d227aef6d77a4d518ca6a6a3b863bdfdb6dc5665"
|
yargs-parser "13.0.0"
|
||||||
integrity sha512-aCk1+VWt3TG6SJV59u+wwuza7lvtlJfj6zH/fmE1xzx5yZnNby1lPYkccq1mKaJJXHjk9cuVCFWVVIhbkpmwRw==
|
|
||||||
dependencies:
|
|
||||||
lodash.clonedeep "^4.5.0"
|
|
||||||
yargs-parser "^20.2.7"
|
|
||||||
|
|
||||||
cookie-signature@1.0.6:
|
cookie-signature@1.0.6:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
|
@ -1723,6 +1819,22 @@ cosmiconfig@^5.0.0:
|
||||||
js-yaml "^3.13.1"
|
js-yaml "^3.13.1"
|
||||||
parse-json "^4.0.0"
|
parse-json "^4.0.0"
|
||||||
|
|
||||||
|
crc-32@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208"
|
||||||
|
integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==
|
||||||
|
dependencies:
|
||||||
|
exit-on-epipe "~1.0.1"
|
||||||
|
printj "~1.1.0"
|
||||||
|
|
||||||
|
crc32-stream@^4.0.1:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007"
|
||||||
|
integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==
|
||||||
|
dependencies:
|
||||||
|
crc-32 "^1.2.0"
|
||||||
|
readable-stream "^3.4.0"
|
||||||
|
|
||||||
create-ecdh@^4.0.0:
|
create-ecdh@^4.0.0:
|
||||||
version "4.0.3"
|
version "4.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
|
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
|
||||||
|
@ -1833,6 +1945,17 @@ css-loader@^3.5.3:
|
||||||
schema-utils "^2.6.6"
|
schema-utils "^2.6.6"
|
||||||
semver "^6.3.0"
|
semver "^6.3.0"
|
||||||
|
|
||||||
|
css-select@^3.1.2:
|
||||||
|
version "3.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8"
|
||||||
|
integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==
|
||||||
|
dependencies:
|
||||||
|
boolbase "^1.0.0"
|
||||||
|
css-what "^4.0.0"
|
||||||
|
domhandler "^4.0.0"
|
||||||
|
domutils "^2.4.3"
|
||||||
|
nth-check "^2.0.0"
|
||||||
|
|
||||||
css-selector-tokenizer@^0.7.0:
|
css-selector-tokenizer@^0.7.0:
|
||||||
version "0.7.2"
|
version "0.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87"
|
resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87"
|
||||||
|
@ -1847,6 +1970,11 @@ css-unit-converter@^1.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
|
resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
|
||||||
integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=
|
integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=
|
||||||
|
|
||||||
|
css-what@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233"
|
||||||
|
integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==
|
||||||
|
|
||||||
cssesc@^3.0.0:
|
cssesc@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
|
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
|
||||||
|
@ -2063,11 +2191,41 @@ diffie-hellman@^5.0.0:
|
||||||
miller-rabin "^4.0.0"
|
miller-rabin "^4.0.0"
|
||||||
randombytes "^2.0.0"
|
randombytes "^2.0.0"
|
||||||
|
|
||||||
|
dom-serializer@^1.0.1, dom-serializer@~1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1"
|
||||||
|
integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==
|
||||||
|
dependencies:
|
||||||
|
domelementtype "^2.0.1"
|
||||||
|
domhandler "^4.0.0"
|
||||||
|
entities "^2.0.0"
|
||||||
|
|
||||||
domain-browser@^1.1.1:
|
domain-browser@^1.1.1:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
|
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
|
||||||
integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
|
integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
|
||||||
|
|
||||||
|
domelementtype@^2.0.1, domelementtype@^2.1.0, domelementtype@^2.2.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
|
||||||
|
integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
|
||||||
|
|
||||||
|
domhandler@^4.0.0, domhandler@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.1.0.tgz#c1d8d494d5ec6db22de99e46a149c2a4d23ddd43"
|
||||||
|
integrity sha512-/6/kmsGlMY4Tup/nGVutdrK9yQi4YjWVcVeoQmixpzjOUK1U7pQkvAPHBJeUxOgxF0J8f8lwCJSlCfD0V4CMGQ==
|
||||||
|
dependencies:
|
||||||
|
domelementtype "^2.2.0"
|
||||||
|
|
||||||
|
domutils@^2.4.3, domutils@^2.4.4:
|
||||||
|
version "2.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.5.1.tgz#9b8e84b5d9f788499ae77506ea832e9b4f9aa1c0"
|
||||||
|
integrity sha512-hO1XwHMGAthA/1KL7c83oip/6UWo3FlUNIuWiWKltoiQ5oCOiqths8KknvY2jpOohUoUgnwa/+Rm7UpwpSbY/Q==
|
||||||
|
dependencies:
|
||||||
|
dom-serializer "^1.0.1"
|
||||||
|
domelementtype "^2.2.0"
|
||||||
|
domhandler "^4.1.0"
|
||||||
|
|
||||||
dotenv@^8.2.0:
|
dotenv@^8.2.0:
|
||||||
version "8.2.0"
|
version "8.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
|
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
|
||||||
|
@ -2136,7 +2294,7 @@ encodeurl@~1.0.2:
|
||||||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||||
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
||||||
|
|
||||||
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
|
end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
|
||||||
version "1.4.4"
|
version "1.4.4"
|
||||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||||
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||||
|
@ -2157,6 +2315,16 @@ entities@^1.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
|
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
|
||||||
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
|
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
|
||||||
|
|
||||||
|
entities@^2.0.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
|
||||||
|
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
|
||||||
|
|
||||||
|
entities@~2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
|
||||||
|
integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
|
||||||
|
|
||||||
errno@^0.1.3, errno@~0.1.7:
|
errno@^0.1.3, errno@~0.1.7:
|
||||||
version "0.1.7"
|
version "0.1.7"
|
||||||
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
|
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
|
||||||
|
@ -2259,6 +2427,11 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
|
||||||
md5.js "^1.3.4"
|
md5.js "^1.3.4"
|
||||||
safe-buffer "^5.1.1"
|
safe-buffer "^5.1.1"
|
||||||
|
|
||||||
|
exit-on-epipe@~1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692"
|
||||||
|
integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==
|
||||||
|
|
||||||
expand-brackets@^2.1.4:
|
expand-brackets@^2.1.4:
|
||||||
version "2.1.4"
|
version "2.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
|
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
|
||||||
|
@ -2537,6 +2710,11 @@ from2@^2.1.0:
|
||||||
inherits "^2.0.1"
|
inherits "^2.0.1"
|
||||||
readable-stream "^2.0.0"
|
readable-stream "^2.0.0"
|
||||||
|
|
||||||
|
fs-constants@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
||||||
|
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
||||||
|
|
||||||
fs-minipass@^1.2.5:
|
fs-minipass@^1.2.5:
|
||||||
version "1.2.7"
|
version "1.2.7"
|
||||||
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
|
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
|
||||||
|
@ -2664,6 +2842,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
|
||||||
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
|
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
|
||||||
|
|
||||||
|
graceful-fs@^4.2.0:
|
||||||
|
version "4.2.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
|
||||||
|
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
|
||||||
|
|
||||||
har-schema@^2.0.0:
|
har-schema@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
||||||
|
@ -2801,6 +2984,16 @@ html-comment-regex@^1.1.0:
|
||||||
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
|
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
|
||||||
integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
|
integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
|
||||||
|
|
||||||
|
htmlparser2@^6.0.0:
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.1.tgz#422521231ef6d42e56bd411da8ba40aa36e91446"
|
||||||
|
integrity sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==
|
||||||
|
dependencies:
|
||||||
|
domelementtype "^2.0.1"
|
||||||
|
domhandler "^4.0.0"
|
||||||
|
domutils "^2.4.4"
|
||||||
|
entities "^2.0.0"
|
||||||
|
|
||||||
http-errors@1.7.2:
|
http-errors@1.7.2:
|
||||||
version "1.7.2"
|
version "1.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
|
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
|
||||||
|
@ -2868,6 +3061,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss "^7.0.14"
|
postcss "^7.0.14"
|
||||||
|
|
||||||
|
ieee754@^1.1.13:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||||
|
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||||
|
|
||||||
ieee754@^1.1.4:
|
ieee754@^1.1.4:
|
||||||
version "1.1.13"
|
version "1.1.13"
|
||||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
|
||||||
|
@ -3273,6 +3471,13 @@ json-stringify-safe@~5.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||||
|
|
||||||
|
json5@2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850"
|
||||||
|
integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
|
||||||
|
dependencies:
|
||||||
|
minimist "^1.2.0"
|
||||||
|
|
||||||
json5@^0.5.1:
|
json5@^0.5.1:
|
||||||
version "0.5.1"
|
version "0.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
|
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
|
||||||
|
@ -3352,6 +3557,13 @@ kind-of@^6.0.0, kind-of@^6.0.2:
|
||||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
|
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
|
||||||
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
|
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
|
||||||
|
|
||||||
|
lazystream@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
|
||||||
|
integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=
|
||||||
|
dependencies:
|
||||||
|
readable-stream "^2.0.5"
|
||||||
|
|
||||||
load-json-file@^1.0.0:
|
load-json-file@^1.0.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
|
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
|
||||||
|
@ -3403,11 +3615,26 @@ lodash.camelcase@^4.3.0:
|
||||||
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
||||||
integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
|
integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
|
||||||
|
|
||||||
lodash.clonedeep@^4.5.0:
|
lodash.clonedeep@4.5.0:
|
||||||
version "4.5.0"
|
version "4.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
|
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
|
||||||
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
|
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
|
||||||
|
|
||||||
|
lodash.defaults@^4.2.0:
|
||||||
|
version "4.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
|
||||||
|
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
|
||||||
|
|
||||||
|
lodash.difference@^4.5.0:
|
||||||
|
version "4.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
|
||||||
|
integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=
|
||||||
|
|
||||||
|
lodash.flatten@^4.4.0:
|
||||||
|
version "4.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
|
||||||
|
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
|
||||||
|
|
||||||
lodash.includes@^4.3.0:
|
lodash.includes@^4.3.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
|
resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
|
||||||
|
@ -3468,6 +3695,11 @@ lodash.templatesettings@^4.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
lodash._reinterpolate "^3.0.0"
|
lodash._reinterpolate "^3.0.0"
|
||||||
|
|
||||||
|
lodash.union@^4.6.0:
|
||||||
|
version "4.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
|
||||||
|
integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=
|
||||||
|
|
||||||
lodash.uniq@^4.5.0:
|
lodash.uniq@^4.5.0:
|
||||||
version "4.5.0"
|
version "4.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||||
|
@ -3728,11 +3960,16 @@ minimist@0.0.8:
|
||||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||||
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
|
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
|
||||||
|
|
||||||
minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
|
minimist@^1.1.3, minimist@^1.2.5:
|
||||||
version "1.2.5"
|
version "1.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||||
|
|
||||||
|
minimist@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||||
|
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
|
||||||
|
|
||||||
minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
|
minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
|
||||||
version "2.9.0"
|
version "2.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
|
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
|
||||||
|
@ -3794,6 +4031,16 @@ mkdirp@^0.5.0, mkdirp@^0.5.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
minimist "0.0.8"
|
minimist "0.0.8"
|
||||||
|
|
||||||
|
moment@2.24.0:
|
||||||
|
version "2.24.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
|
||||||
|
integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
|
||||||
|
|
||||||
|
moment@^2.29.1:
|
||||||
|
version "2.29.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
|
||||||
|
integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
|
||||||
|
|
||||||
move-concurrently@^1.0.1:
|
move-concurrently@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
|
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
|
||||||
|
@ -3973,6 +4220,14 @@ node-version@^1.1.3:
|
||||||
resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d"
|
resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d"
|
||||||
integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==
|
integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==
|
||||||
|
|
||||||
|
nodepub@^3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/nodepub/-/nodepub-3.0.1.tgz#345a687f28c1852332087329fbc3aac40a049d4c"
|
||||||
|
integrity sha512-aS38l5pCHKeDajiNoZyiLcJIDnZYfFfmpGLtgYUJ4K22wChVX7gvA86dK5XWjPdj1Em7VSIiQNQzwjxmra0xlg==
|
||||||
|
dependencies:
|
||||||
|
archiver "^5.2.0"
|
||||||
|
moment "^2.29.1"
|
||||||
|
|
||||||
"nopt@2 || 3":
|
"nopt@2 || 3":
|
||||||
version "3.0.6"
|
version "3.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
|
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
|
||||||
|
@ -4062,6 +4317,13 @@ npm-packlist@^1.1.6:
|
||||||
gauge "~2.7.3"
|
gauge "~2.7.3"
|
||||||
set-blocking "~2.0.0"
|
set-blocking "~2.0.0"
|
||||||
|
|
||||||
|
nth-check@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125"
|
||||||
|
integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==
|
||||||
|
dependencies:
|
||||||
|
boolbase "^1.0.0"
|
||||||
|
|
||||||
null-loader@^0.1.1:
|
null-loader@^0.1.1:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-0.1.1.tgz#17be9abfcd3ff0e1512f6fc4afcb1f5039378fae"
|
resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-0.1.1.tgz#17be9abfcd3ff0e1512f6fc4afcb1f5039378fae"
|
||||||
|
@ -4249,6 +4511,18 @@ parse-json@^4.0.0:
|
||||||
error-ex "^1.3.1"
|
error-ex "^1.3.1"
|
||||||
json-parse-better-errors "^1.0.1"
|
json-parse-better-errors "^1.0.1"
|
||||||
|
|
||||||
|
parse5-htmlparser2-tree-adapter@^6.0.0:
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
|
||||||
|
integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==
|
||||||
|
dependencies:
|
||||||
|
parse5 "^6.0.1"
|
||||||
|
|
||||||
|
parse5@^6.0.0, parse5@^6.0.1:
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
|
||||||
|
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
|
||||||
|
|
||||||
parseurl@~1.3.3:
|
parseurl@~1.3.3:
|
||||||
version "1.3.3"
|
version "1.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
||||||
|
@ -5018,6 +5292,11 @@ prettier@^1.18.2:
|
||||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
|
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
|
||||||
integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
|
integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
|
||||||
|
|
||||||
|
printj@~1.1.0:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222"
|
||||||
|
integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==
|
||||||
|
|
||||||
private@^0.1.6, private@^0.1.8:
|
private@^0.1.6, private@^0.1.8:
|
||||||
version "0.1.8"
|
version "0.1.8"
|
||||||
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
||||||
|
@ -5243,7 +5522,7 @@ read@1.0.x:
|
||||||
dependencies:
|
dependencies:
|
||||||
mute-stream "~0.0.4"
|
mute-stream "~0.0.4"
|
||||||
|
|
||||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
||||||
version "2.3.7"
|
version "2.3.7"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||||
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
||||||
|
@ -5269,7 +5548,7 @@ readable-stream@^2.0.6:
|
||||||
string_decoder "~1.1.1"
|
string_decoder "~1.1.1"
|
||||||
util-deprecate "~1.0.1"
|
util-deprecate "~1.0.1"
|
||||||
|
|
||||||
readable-stream@^3.6.0:
|
readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
|
||||||
version "3.6.0"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||||
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
||||||
|
@ -5278,6 +5557,13 @@ readable-stream@^3.6.0:
|
||||||
string_decoder "^1.1.1"
|
string_decoder "^1.1.1"
|
||||||
util-deprecate "^1.0.1"
|
util-deprecate "^1.0.1"
|
||||||
|
|
||||||
|
readdir-glob@^1.0.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4"
|
||||||
|
integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==
|
||||||
|
dependencies:
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
|
||||||
readdirp@^2.2.1:
|
readdirp@^2.2.1:
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
|
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
|
||||||
|
@ -6128,6 +6414,17 @@ tapable@^1.0.0, tapable@^1.1.3:
|
||||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
|
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
|
||||||
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
|
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
|
||||||
|
|
||||||
|
tar-stream@^2.2.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
|
||||||
|
integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
|
||||||
|
dependencies:
|
||||||
|
bl "^4.0.3"
|
||||||
|
end-of-stream "^1.4.1"
|
||||||
|
fs-constants "^1.0.0"
|
||||||
|
inherits "^2.0.3"
|
||||||
|
readable-stream "^3.1.1"
|
||||||
|
|
||||||
tar@^2.0.0:
|
tar@^2.0.0:
|
||||||
version "2.2.2"
|
version "2.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
|
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
|
||||||
|
@ -6503,10 +6800,10 @@ validate-npm-package-license@^3.0.1:
|
||||||
spdx-correct "^3.0.0"
|
spdx-correct "^3.0.0"
|
||||||
spdx-expression-parse "^3.0.0"
|
spdx-expression-parse "^3.0.0"
|
||||||
|
|
||||||
validator@^13.6.0:
|
validator@11.1.0:
|
||||||
version "13.6.0"
|
version "11.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/validator/-/validator-13.6.0.tgz#1e71899c14cdc7b2068463cb24c1cc16f6ec7059"
|
resolved "https://registry.yarnpkg.com/validator/-/validator-11.1.0.tgz#ac18cac42e0aa5902b603d7a5d9b7827e2346ac4"
|
||||||
integrity sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==
|
integrity sha512-qiQ5ktdO7CD6C/5/mYV4jku/7qnqzjrxb3C/Q5wR3vGGinHTgJZN/TdFT3ZX4vXhX2R1PXx42fB1cn5W+uJ4lg==
|
||||||
|
|
||||||
vary@~1.1.2:
|
vary@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
|
@ -6780,6 +7077,14 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
|
||||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
||||||
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
|
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
|
||||||
|
|
||||||
|
yargs-parser@13.0.0:
|
||||||
|
version "13.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.0.0.tgz#3fc44f3e76a8bdb1cc3602e860108602e5ccde8b"
|
||||||
|
integrity sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==
|
||||||
|
dependencies:
|
||||||
|
camelcase "^5.0.0"
|
||||||
|
decamelize "^1.2.0"
|
||||||
|
|
||||||
yargs-parser@^13.1.2:
|
yargs-parser@^13.1.2:
|
||||||
version "13.1.2"
|
version "13.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
|
||||||
|
@ -6788,11 +7093,6 @@ yargs-parser@^13.1.2:
|
||||||
camelcase "^5.0.0"
|
camelcase "^5.0.0"
|
||||||
decamelize "^1.2.0"
|
decamelize "^1.2.0"
|
||||||
|
|
||||||
yargs-parser@^20.2.7:
|
|
||||||
version "20.2.9"
|
|
||||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
|
|
||||||
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
|
|
||||||
|
|
||||||
yargs@^13.3.2:
|
yargs@^13.3.2:
|
||||||
version "13.3.2"
|
version "13.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
|
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
|
||||||
|
@ -6808,3 +7108,12 @@ yargs@^13.3.2:
|
||||||
which-module "^2.0.0"
|
which-module "^2.0.0"
|
||||||
y18n "^4.0.0"
|
y18n "^4.0.0"
|
||||||
yargs-parser "^13.1.2"
|
yargs-parser "^13.1.2"
|
||||||
|
|
||||||
|
zip-stream@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79"
|
||||||
|
integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==
|
||||||
|
dependencies:
|
||||||
|
archiver-utils "^2.1.0"
|
||||||
|
compress-commons "^4.1.0"
|
||||||
|
readable-stream "^3.6.0"
|
||||||
|
|
Loading…
Reference in a new issue