From e13ca0de7451ed656a072bd5978b218bcaa9d66b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 19:09:43 -0400 Subject: [PATCH 001/186] Remove xmlserializer dependency jsdom can be counted on to do that for us, these days, in a more standards-complaint way. A notable change is that void elements get serialized like
instead of
. --- lib/convert.js | 28 ++++++++++++------------- lib/substitutions.json | 46 +++++++++++++++++++++--------------------- npm-shrinkwrap.json | 5 ----- package.json | 1 - 4 files changed, 37 insertions(+), 43 deletions(-) diff --git a/lib/convert.js b/lib/convert.js index 2708a71..457e081 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -2,7 +2,6 @@ const path = require("path"); const fs = require("fs").promises; const throat = require("throat"); -const serializeToXML = require("xmlserializer").serializeToString; const { JSDOM } = require("jsdom"); const substitutions = require("./substitutions.json"); @@ -139,10 +138,11 @@ function getBodyXML(chapter, contentEl) { bodyEl.appendChild(contentEl.firstChild); } - let xml = serializeToXML(bodyEl); + const xmlSerializer = new contentEl.ownerDocument.defaultView.XMLSerializer(); + let xml = xmlSerializer.serializeToString(bodyEl); // Fix recurring strange pattern of extra
in

......
\n

- xml = xml.replace(/\s*<\/em><\/p>/g, "

"); + xml = xml.replace(/
\s*<\/em><\/p>/g, "

"); // There are way too many nonbreaking spaces where they don't belong. // If they show up three in a row, then let them live. Otherwise, they die. @@ -203,17 +203,17 @@ function getBodyXML(chapter, contentEl) { fixEms(); // Similar problems occur in Ward with and as do in Worm with s - xml = xml.replace(//g, ""); - xml = xml.replace(/(\s*\s*)<\/b>/g, "$1"); - xml = xml.replace(/(\s*\s*)<\/strong>/g, "$1"); + xml = xml.replace(//g, ""); + xml = xml.replace(/(\s*
\s*)<\/b>/g, "$1"); + xml = xml.replace(/(\s*
\s*)<\/strong>/g, "$1"); xml = xml.replace(/<\/strong>(\s*)/g, "$1"); xml = xml.replace(/@<\/strong>/g, "@"); - xml = xml.replace(/(\s*)<\/strong>/g, "
$1"); + xml = xml.replace(/
(\s*)<\/strong>/g, "

$1"); xml = xml.replace(/(\s*)<\/strong>/g, "
$1"); // No need for line breaks before paragraph ends // These often occur with the
s inside / fixed above. - xml = xml.replace(/\s*<\/p>/g, "

"); + xml = xml.replace(/
\s*<\/p>/g, "

"); // Fix possessive of names ending in "s" // Note: if the "s" is unvoiced, as in Marquis, then it doesn't get the second "s". @@ -298,12 +298,12 @@ function getBodyXML(chapter, contentEl) { // Use
for separators // https://www.parahumans.net/2019/12/21/interlude-18-z-radiation/ has "super-separators" ("⊙ ⊙ ⊙ ⊙ ⊙") which we // leave untouched for now. - xml = xml.replace(/

■<\/p>/g, "


"); - xml = xml.replace(/

■<\/p>/g, "


"); - xml = xml.replace(/

⊙<\/p>/g, "


"); - xml = xml.replace(/

⊙<\/strong><\/p>/g, "


"); - xml = xml.replace(/

⊙<\/strong><\/em><\/p>/g, "


"); - xml = xml.replace(/

⊙⊙<\/strong><\/p>/g, "


"); + xml = xml.replace(/

■<\/p>/g, "


"); + xml = xml.replace(/

■<\/p>/g, "


"); + xml = xml.replace(/

⊙<\/p>/g, "


"); + xml = xml.replace(/

⊙<\/strong><\/p>/g, "


"); + xml = xml.replace(/

⊙<\/strong><\/em><\/p>/g, "


"); + xml = xml.replace(/

⊙⊙<\/strong><\/p>/g, "


"); // Fix recurring miscapitalization with questions xml = xml.replace(/\?”\s\s?She asked/g, "?” she asked"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 0431645..4264abd 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5,7 +5,7 @@ "after": "bugs: flies, ants" }, { - "before": "

Brief note from the author: This story isn’t intended for young or sensitive readers. Readers who are on the lookout for trigger warnings are advised to give Worm a pass.

\n
\n", + "before": "

Brief note from the author: This story isn’t intended for young or sensitive readers. Readers who are on the lookout for trigger warnings are advised to give Worm a pass.

\n
\n", "after": "", "_comment": "The pseudo-trigger warning is out of place in an eBook." } @@ -906,15 +906,15 @@ "after": "crash when the wave rolled" }, { - "regExp": "\n ?\\s*([^<]+)(
|

)", + "regExp": "\n ?\\s*([^<]+)(
|

)", "replacement": "\n

$1

" }, { - "regExp": "\n

([^<]+)(
|

)", + "regExp": "\n

([^<]+)(
|

)", "replacement": "\n

$1

" }, { - "regExp": "\n

([^<\n]+)
\n([^>\n]+)

\n", + "regExp": "\n

([^<\n]+)
\n([^>\n]+)

\n", "replacement": "\n

$1

\n

$2

\n" } ], @@ -1770,15 +1770,15 @@ "replacement": "

" }, { - "before": "agreed-upon confidentiality.
\n■ ", + "before": "agreed-upon confidentiality.
\n■ ", "after": "agreed-upon confidentiality.

\n
    \n
  • " }, { - "regExp": "
    \n■ ", + "regExp": "
    \n■ ", "replacement": "
  • \n
  • " }, { - "before": "three, male.
    \nBoth vials", + "before": "three, male.
    \nBoth vials", "after": "three, male.
  • \n
\n

Both vials" }, { @@ -1904,24 +1904,24 @@ "after": "

Sweet Honey—

" }, { - "before": "

Love me, love me, you know you wanna love me…
\nLove me, love me, you know you wanna love me…

", - "after": "

Love me, love me, you know you wanna love me…
\nLove me, love me, you know you wanna love me…

" + "before": "

Love me, love me, you know you wanna love me…
\nLove me, love me, you know you wanna love me…

", + "after": "

Love me, love me, you know you wanna love me…
\nLove me, love me, you know you wanna love me…

" }, { - "before": "

Love me, you?
\nLove me, true?

", - "after": "

Love me, you?
\nLove me, true?

" + "before": "

Love me, you?
\nLove me, true?

", + "after": "

Love me, you?
\nLove me, true?

" }, { - "before": "

Crazed, kooky, cracked, crazy,
\nNutty, barmy, mad for me…

", - "after": "

Crazed, kooky, cracked, crazy,
\nNutty, barmy, mad for me…

" + "before": "

Crazed, kooky, cracked, crazy,
\nNutty, barmy, mad for me…

", + "after": "

Crazed, kooky, cracked, crazy,
\nNutty, barmy, mad for me…

" }, { - "before": "

Crazed, kooky, cracked, crazy,
\nMental, dotty, whacked, loopy…

", - "after": "

Crazed, kooky, cracked, crazy,
\nMental, dotty, whacked, loopy…

" + "before": "

Crazed, kooky, cracked, crazy,
\nMental, dotty, whacked, loopy…

", + "after": "

Crazed, kooky, cracked, crazy,
\nMental, dotty, whacked, loopy…

" }, { - "before": "

Crazed, kooky, cracked, crazy,
\nNutty, screwy, mentally diseased…
\n
She ", - "after": "

Crazed, kooky, cracked, crazy,
\nNutty, screwy, mentally diseased…

\n

She " + "before": "

Crazed, kooky, cracked, crazy,
\nNutty, screwy, mentally diseased…
\n
She ", + "after": "

Crazed, kooky, cracked, crazy,
\nNutty, screwy, mentally diseased…

\n

She " }, { "before": "Ça va?", @@ -2206,7 +2206,7 @@ ], "https://parahumans.wordpress.com/2012/09/11/prey-14-3/": [ { - "before": "truck reached
\nthe other Nine", + "before": "truck reached
\nthe other Nine", "after": "truck reached the other Nine" }, { @@ -2266,7 +2266,7 @@ ], "https://parahumans.wordpress.com/2012/10/18/interlude-15-donation-bonus/": [ { - "before": "volunteered, asked
\n
to", + "before": "volunteered, asked
\n
to", "after": "volunteered, asked to" }, { @@ -3365,7 +3365,7 @@ "https://parahumans.wordpress.com/2013/06/25/interlude-24-donation-bonus-1/": [ { "before": "silence like this. Divide: They", - "after": "silence like this.
Divide: They" + "after": "silence like this.
Divide: They" }, { "before": "Bay,” Wanton said. “Not", @@ -3441,7 +3441,7 @@ }, { "before": "SimurghNotes", - "after": "Simurgh
Notes" + "after": "Simurgh
Notes" }, { "before": "avoided-", @@ -4238,7 +4238,7 @@ "after": "Imp: I’ve" }, { - "before": "Tattletale:
\nwaiting?", + "before": "Tattletale:
\nwaiting?", "after": "Tattletale: waiting?" }, { @@ -4308,7 +4308,7 @@ ], "https://www.parahumans.net/2017/09/11/daybreak-1-1/": [ { - "before": "

Ward is the second work in the Parahumans series, and reading Worm first is strongly recommended. A lot of this won’t make sense otherwise and if you do find yourself a fan of the universe, the spoilers in Ward will affect the reading of the other work.

\n

Ward is not recommended for young or sensitive readers.

\n
", + "before": "

Ward is the second work in the Parahumans series, and reading Worm first is strongly recommended. A lot of this won’t make sense otherwise and if you do find yourself a fan of the universe, the spoilers in Ward will affect the reading of the other work.

\n

Ward is not recommended for young or sensitive readers.

\n
", "after": "", "_comment": "This is out of place in an eBook." } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index c5eb93a..599380f 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -2060,11 +2060,6 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "xmlserializer": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/xmlserializer/-/xmlserializer-0.6.1.tgz", - "integrity": "sha512-FNb0eEqqUUbnuvxuHqNuKH8qCGKqxu+558Zi8UzOoQk8Z9LdvpONK+v7m3gpKVHrk5Aq+0nNLsKxu/6OYh7Umw==" - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 90654f3..05b24e9 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "jsdom": "^16.2.2", "requisition": "^1.5.0", "throat": "^5.0.0", - "xmlserializer": "^0.6.1", "yargs": "^15.3.1" }, "devDependencies": { From 51520c11beb22819fbbb1d235dc81563865ca3b7 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 19:20:29 -0400 Subject: [PATCH 002/186] Add an original-URL HTML comment to each chapter This makes it easier for me to figure out how to update substitutions.json. --- lib/convert.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/convert.js b/lib/convert.js index 457e081..a4251be 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -130,10 +130,14 @@ function getBodyXML(chapter, contentEl) { // Synthesize a tag to serialize const bodyEl = contentEl.ownerDocument.createElement("body"); + const h1El = contentEl.ownerDocument.createElement("h1"); h1El.textContent = chapter.title; - bodyEl.appendChild(h1El); + + const comment = contentEl.ownerDocument.createComment(chapter.url); + bodyEl.appendChild(comment); + while (contentEl.firstChild) { bodyEl.appendChild(contentEl.firstChild); } From ae5b179d7c261a7bfed20ab6006f4ab193470c28 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 19:31:28 -0400 Subject: [PATCH 003/186] Add a nice progress bar for the convert step --- lib/convert.js | 15 ++++++++++++--- npm-shrinkwrap.json | 14 ++++++++++++++ package.json | 1 + 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/convert.js b/lib/convert.js index a4251be..8a989c7 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -3,14 +3,24 @@ const path = require("path"); const fs = require("fs").promises; const throat = require("throat"); const { JSDOM } = require("jsdom"); +const cliProgress = require("cli-progress"); const substitutions = require("./substitutions.json"); module.exports = async (cachePath, manifestPath, contentPath, concurrentJobs) => { const manifestContents = await fs.readFile(manifestPath, { encoding: "utf-8" }); const chapters = JSON.parse(manifestContents); - console.log("All chapters downloaded; beginning conversion to EPUB chapters"); - const mapper = throat(concurrentJobs, chapter => convertChapter(chapter, cachePath, contentPath)); + console.log("Converting raw downloaded HTML to EPUB chapters"); + const progress = new cliProgress.SingleBar({ + stopOnComplete: true, + clearOnComplete: true + }, cliProgress.Presets.shades_classic); + progress.start(chapters.length, 0); + + const mapper = throat(concurrentJobs, async chapter => { + await convertChapter(chapter, cachePath, contentPath); + progress.increment(); + }); await Promise.all(chapters.map(mapper)); console.log("All chapters converted"); @@ -32,7 +42,6 @@ async function convertChapter(chapter, cachePath, contentPath) { const destFilePath = path.resolve(contentPath, destFileName); await fs.writeFile(destFilePath, output); - console.log(`- Finished converting ${filename}`); } function getChapterString(chapter, rawChapterDoc) { diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 599380f..468ce14 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -335,6 +335,15 @@ } } }, + "cli-progress": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.8.2.tgz", + "integrity": "sha512-qRwBxLldMSfxB+YGFgNRaj5vyyHe1yMpVeDL79c+7puGujdKJHQHydgqXDcrkvQgJ5U/d3lpf6vffSoVVUftVQ==", + "requires": { + "colors": "^1.1.2", + "string-width": "^4.2.0" + } + }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -358,6 +367,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", diff --git a/package.json b/package.json index 05b24e9..e29c69b 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ }, "dependencies": { "archiver": "^4.0.1", + "cli-progress": "^3.8.2", "cpr": "^3.0.1", "jsdom": "^16.2.2", "requisition": "^1.5.0", From 4d9e55643192efaf7da5ce4b26e73733ce71c168 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 19:34:58 -0400 Subject: [PATCH 004/186] Update dependencies --- npm-shrinkwrap.json | 482 ++++++++++++++++++++++---------------------- package.json | 8 +- 2 files changed, 249 insertions(+), 241 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 468ce14..3c54975 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -67,20 +67,58 @@ } } }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" }, "acorn": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", - "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==" + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "acorn-globals": { "version": "6.0.0", @@ -92,9 +130,9 @@ } }, "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, "acorn-walk": { @@ -106,6 +144,7 @@ "version": "6.12.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -114,9 +153,9 @@ } }, "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-regex": { @@ -139,17 +178,17 @@ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "archiver": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-4.0.1.tgz", - "integrity": "sha512-/YV1pU4Nhpf/rJArM23W6GTUjT0l++VbjykrCRua1TSXrn+yM8Qs7XvtwSiRse0iCe49EPNf7ktXnPsWuSb91Q==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", + "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", "requires": { "archiver-utils": "^2.1.0", - "async": "^2.6.3", + "async": "^3.2.0", "buffer-crc32": "^0.2.1", - "glob": "^7.1.6", "readable-stream": "^3.6.0", - "tar-stream": "^2.1.2", - "zip-stream": "^3.0.1" + "readdir-glob": "^1.0.0", + "tar-stream": "^2.1.4", + "zip-stream": "^4.0.0" } }, "archiver-utils": { @@ -214,12 +253,9 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, "asynckit": { "version": "0.4.0", @@ -232,9 +268,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" }, "balanced-match": { "version": "1.0.0", @@ -255,9 +291,9 @@ } }, "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -298,11 +334,6 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -325,9 +356,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -345,13 +376,13 @@ } }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.3.tgz", + "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, "color-convert": { @@ -381,30 +412,14 @@ } }, "compress-commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz", - "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.1.tgz", + "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", "requires": { "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", + "crc32-stream": "^4.0.0", "normalize-path": "^3.0.0", - "readable-stream": "^2.3.7" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } + "readable-stream": "^3.6.0" } }, "concat-map": { @@ -442,9 +457,9 @@ } }, "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.0.tgz", + "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", "requires": { "crc": "^3.4.4", "readable-stream": "^3.4.0" @@ -500,23 +515,18 @@ } }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, "decimal.js": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", - "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" }, "deep-is": { "version": "0.1.3", @@ -585,14 +595,19 @@ } }, "enquirer": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.5.tgz", - "integrity": "sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { - "ansi-colors": "^3.2.1" + "ansi-colors": "^4.1.1" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -612,22 +627,23 @@ } }, "eslint": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.1.tgz", - "integrity": "sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", + "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", - "eslint-scope": "^5.1.0", - "eslint-utils": "^2.0.0", - "eslint-visitor-keys": "^1.2.0", - "espree": "^7.1.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", "esquery": "^1.2.0", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", @@ -641,7 +657,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.14", + "lodash": "^4.17.19", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -665,6 +681,12 @@ "type-check": "~0.4.0" } }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -697,12 +719,12 @@ } }, "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, @@ -713,23 +735,45 @@ "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", "dev": true }, "espree": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", - "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", "dev": true, "requires": { - "acorn": "^7.2.0", + "acorn": "^7.4.0", "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.2.0" + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "esprima": { @@ -747,20 +791,28 @@ }, "dependencies": { "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "estraverse": { @@ -807,15 +859,6 @@ "flat-cache": "^2.0.1" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -941,12 +984,25 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + } } }, "has-flag": { @@ -1107,9 +1163,9 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsdom": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.2.2.tgz", - "integrity": "sha512-pDFQbcYtKBHxRaP55zGXCJWgFHkDAYbKcsXEK/3Icu9nKYZkutUXfLBwbD+09XDutkYSHcgfQLZ0qvpAAm9mvg==", + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", + "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", "requires": { "abab": "^2.0.3", "acorn": "^7.1.1", @@ -1131,7 +1187,7 @@ "tough-cookie": "^3.0.1", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.0.0", + "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.0.0", @@ -1204,18 +1260,11 @@ "type-check": "~0.3.2" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true }, "lodash.defaults": { "version": "4.2.0", @@ -1368,27 +1417,6 @@ "word-wrap": "~1.2.3" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -1411,11 +1439,6 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1473,6 +1496,14 @@ "util-deprecate": "^1.0.1" } }, + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "requires": { + "minimatch": "^3.0.4" + } + }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -1518,19 +1549,26 @@ } }, "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", "requires": { - "lodash": "^4.17.15" + "lodash": "^4.17.19" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + } } }, "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", "requires": { - "request-promise-core": "1.1.3", + "request-promise-core": "1.1.4", "stealthy-require": "^1.1.1", "tough-cookie": "^2.3.3" }, @@ -1551,11 +1589,6 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "requisition": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/requisition/-/requisition-1.7.0.tgz", @@ -1616,11 +1649,6 @@ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -1757,9 +1785,9 @@ } }, "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { @@ -1829,11 +1857,11 @@ } }, "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", "requires": { - "bl": "^4.0.1", + "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", @@ -2000,20 +2028,13 @@ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" }, "whatwg-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz", - "integrity": "sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", "requires": { "lodash.sortby": "^4.7.0", "tr46": "^2.0.2", - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" - } + "webidl-conversions": "^6.1.0" } }, "which": { @@ -2025,20 +2046,15 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -2060,9 +2076,9 @@ } }, "ws": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", - "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==" + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==" }, "xml-name-validator": { "version": "3.0.0", @@ -2080,44 +2096,36 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.4.tgz", + "integrity": "sha512-deLOfD+RvFgrpAmSZgfGdWYE+OKyHcVHaRQ7NphG/63scpRvTHHeQMAxGGvaLVGJ+HYVcCXlzcTK0ZehFf+eHQ==" }, "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", + "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" + "y18n": "^5.0.2", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz", + "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==" }, "zip-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz", - "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.2.tgz", + "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", "requires": { "archiver-utils": "^2.1.0", - "compress-commons": "^3.0.0", + "compress-commons": "^4.0.0", "readable-stream": "^3.6.0" } } diff --git a/package.json b/package.json index e29c69b..2fba4a3 100644 --- a/package.json +++ b/package.json @@ -23,16 +23,16 @@ "lint": "eslint lib" }, "dependencies": { - "archiver": "^4.0.1", + "archiver": "^5.0.2", "cli-progress": "^3.8.2", "cpr": "^3.0.1", - "jsdom": "^16.2.2", + "jsdom": "^16.4.0", "requisition": "^1.5.0", "throat": "^5.0.0", - "yargs": "^15.3.1" + "yargs": "^16.1.0" }, "devDependencies": { - "eslint": "7.3.1" + "eslint": "^7.11.0" }, "engines": { "node": ">=12.10.0" From d4c67d73dfffd04058e2d67e1d413be26b113b9d Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 20:49:50 -0400 Subject: [PATCH 005/186] Fix uncapitalized sentences --- lib/substitutions.json | 354 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 339 insertions(+), 15 deletions(-) diff --git a/lib/substitutions.json b/lib/substitutions.json index 4264abd..1501418 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -444,6 +444,10 @@ { "before": "what I could see of the the second floor", "after": "what I could see of the second floor" + }, + { + "before": "down the stairs. then as carefully as we could", + "after": "down the stairs. Then, as carefully as we could" } ], "https://parahumans.wordpress.com/2011/12/03/hive-5-9/": [ @@ -962,6 +966,10 @@ { "before": "reeled—He", "after": "reeled—he" + }, + { + "before": "Shielder’s bubble. water in front of", + "after": "Shielder’s bubble. Water in front of" } ], "https://parahumans.wordpress.com/2012/03/13/extermination-8-4/": [ @@ -2656,6 +2664,10 @@ { "before": "Krouse,” Luke said. “We", "after": "Krouse,” Luke said, “we" + }, + { + "before": "on his knees. he held the cigarette", + "after": "on his knees. He held the cigarette" } ], "https://parahumans.wordpress.com/2013/01/19/queen-18-1/": [ @@ -3025,6 +3037,10 @@ "before": "the Clairvoyant", "after": "the clairvoyant", "_comment": "see convert.js; this corrects an over-correction" + }, + { + "before": "maintain eye contact. he could feel the warmth", + "after": "maintain eye contact. He could feel the warmth" } ], "https://parahumans.wordpress.com/2013/04/09/imago-21-1/": [ @@ -3782,6 +3798,10 @@ { "before": "willingly,” Weld said. “Before", "after": "willingly,” Weld said, “before" + }, + { + "before": "onto the phone. seven point font", + "after": "onto the phone. Seven point font" } ], "https://parahumans.wordpress.com/2013/09/19/venom-29-1/": [ @@ -3896,12 +3916,20 @@ { "before": "by Golem’s bindings

", "after": "by Golem’s bindings.

" + }, + { + "before": "have time to react. the light detonated", + "after": "have time to react. The light detonated" } ], "https://parahumans.wordpress.com/2013/10/12/interlude-29/": [ { "before": "the host’s natures", "after": "the hosts’ natures" + }, + { + "before": "panting for breath. the wound at his", + "after": "panting for breath. The wound at his" } ], "https://parahumans.wordpress.com/2013/10/15/speck-30-1/": [ @@ -4148,6 +4176,14 @@ { "before": "“Yes,’ I", "after": "“Yes,” I" + }, + { + "before": "against me. it would be idiotic", + "after": "against me. It would be idiotic" + }, + { + "before": "hand as he talked. he pointed to me", + "after": "hand as he talked. He pointed to me" } ], "https://parahumans.wordpress.com/2013/11/02/teneral-e-1/": [ @@ -4194,6 +4230,10 @@ { "before": "standby”", "after": "standby.”" + }, + { + "before": "minutes passed. the chance rose", + "after": "minutes passed. The chance rose" } ], "https://parahumans.wordpress.com/2013/11/12/teneral-e-4/": [ @@ -4212,6 +4252,14 @@ { "before": "—Problematic", "after": "—problematic" + }, + { + "before": "balconies and rooftops. hazards", + "after": "balconies and rooftops. Hazards" + }, + { + "before": "another tree stood. with a glimpse", + "after": "another tree stood, with a glimpse" } ], "https://parahumans.wordpress.com/2013/11/16/teneral-e-5/": [ @@ -4329,12 +4377,6 @@ "after": "and Mom being business" } ], - "https://www.parahumans.net/2017/12/09/flare-2-1/": [ - { - "before": "Some is mom and dad’s", - "after": "Some is Mom and Dad’s" - } - ], "https://www.parahumans.net/2017/11/30/daybreak-1-7/": [ { "before": "How do you even think rec—how do you think", @@ -4351,6 +4393,12 @@ "after": "Glitzglam *New Message*: I" } ], + "https://www.parahumans.net/2017/12/09/flare-2-1/": [ + { + "before": "Some is mom and dad’s", + "after": "Some is Mom and Dad’s" + } + ], "https://www.parahumans.net/2017/12/16/flare-2-3/": [ { "before": "two—piece", @@ -4359,6 +4407,10 @@ { "before": "want to think about mom", "after": "want to think about Mom" + }, + { + "before": "the floor. the armband landed", + "after": "the floor. The armband landed" } ], "https://www.parahumans.net/2017/12/23/flare-2-5/": [ @@ -4413,6 +4465,10 @@ { "before": "Tristan, “You should take", "after": "Tristan, “you should take" + }, + { + "before": "to start with. it’s delicate enough", + "after": "to start with. It’s delicate enough" } ], "https://www.parahumans.net/2018/01/13/glare-3-3/": [ @@ -4511,6 +4567,10 @@ { "before": "mom’s verdict was", "after": "Mom’s verdict was" + }, + { + "before": "as you walk. or blurry light", + "after": "as you walk. Or blurry light" } ], "https://www.parahumans.net/2018/02/20/shade-4-7/": [ @@ -4543,6 +4603,10 @@ { "before": "“Cozy,” The side of the", "after": "“Cozy.” The side of the" + }, + { + "before": "hair he had. it was long", + "after": "hair he had. It was long" } ], "https://www.parahumans.net/2018/03/06/shadow-5-4/": [ @@ -4597,16 +4661,48 @@ "after": "The convoy continued to disintegrate as the road made its gradual turn" } ], + "https://www.parahumans.net/2018/03/27/shadow-5-10/": [ + { + "before": "our heads. the pupil", + "after": "our heads. The pupil" + }, + { + "before": "forearm and her fingertips. and she stumbled into", + "after": "forearm and her fingertips, and she stumbled into" + } + ], "https://www.parahumans.net/2018/03/31/shadow-5-11/": [ { "before": "side of her her chin", "after": "side of her chin" } ], + "https://www.parahumans.net/2018/04/03/shadow-5-12/": [ + { + "before": "lost my grip on him. and my hand", + "after": "lost my grip on him, and my hand" + } + ], + "https://www.parahumans.net/2018/04/21/pitch-6-3/": [ + { + "before": "wall of bodies. the woman behind", + "after": "wall of bodies. The woman behind" + } + ], + "https://www.parahumans.net/2018/04/24/pitch-6-4/": [ + { + "before": "glanced back. the others had", + "after": "glanced back. The others had" + } + ], "https://www.parahumans.net/2018/04/28/pitch-6-5/": [ { "before": "of material to to bandage", "after": "of material to bandage" + }, + { + "before": "Cradle said. his tone was", + "after": "Cradle said. His tone was" } ], "https://www.parahumans.net/2018/05/08/pitch-6-8/": [ @@ -4652,6 +4748,18 @@ "after": "answer the second question" } ], + "https://www.parahumans.net/2018/05/30/eclipse-x-5/": [ + { + "before": "no words. and there", + "after": "no words. And there" + } + ], + "https://www.parahumans.net/2018/06/09/torch-7-6/": [ + { + "before": "I saw. the scans of the woman", + "after": "I saw. The scans of the woman" + } + ], "https://www.parahumans.net/2018/06/12/torch-7-7/": [ { "before": "and I can call dad", @@ -4702,6 +4810,10 @@ { "before": "cooked for me,” mom said", "after": "cooked for me,” Mom said" + }, + { + "before": "of her bag. only one temporary tattoo", + "after": "of her bag. Only one temporary tattoo" } ], "https://www.parahumans.net/2018/07/07/beacon-8-2/": [ @@ -4710,16 +4822,76 @@ "after": "

Mom and Dad.

" } ], - "https://www.parahumans.net/2018/07/31/beacon-8-9/": [ + "https://www.parahumans.net/2018/07/17/beacon-8-5/": [ { - "before": "you know that dad and I saying", - "after": "you know that dad and I saying" + "before": "on the offensive. chains whirled", + "after": "on the offensive. Chains whirled" } ], "https://www.parahumans.net/2018/07/21/beacon-8-6/": [ { "before": "unfolded umbrella.A metal", "after": "unfolded umbrella. A metal" + }, + { + "before": "above me. the sky was dark", + "after": "above me. The sky was dark" + } + ], + "https://www.parahumans.net/2018/07/31/beacon-8-9/": [ + { + "before": "you know that dad and I saying", + "after": "you know that Dad and I saying" + }, + { + "before": "was impatient. it was hard to tell", + "after": "was impatient. It was hard to tell" + } + ], + "https://www.parahumans.net/2018/08/11/beacon-8-12/": [ + { + "before": "who are free now. they’re out there", + "after": "who are free now. They’re out there" + } + ], + "https://www.parahumans.net/2018/08/28/gleaming-9-3/": [ + { + "before": "Chris in the process. stretched on his way", + "after": "Chris in the process. He stretched on his way" + } + ], + "https://www.parahumans.net/2018/09/11/gleaming-9-7/": [ + { + "before": "Byron said. he was at", + "after": "Byron said. He was at" + } + ], + "https://www.parahumans.net/2018/09/13/gleaming-interlude-9-x/": [ + { + "before": "he bottles it up. then the bottle cracks", + "after": "he bottles it up. Then the bottle cracks" + } + ], + "https://www.parahumans.net/2018/09/25/gleaming-9-10/": [ + { + "before": "and mom and dad’s rules", + "after": "and Mom and Dad’s rules" + }, + { + "before": "at the balcony. both wore", + "after": "at the balcony. Both wore" + } + ], + "https://www.parahumans.net/2018/09/29/gleaming-9-11/": [ + { + "before": "two people died. the forcefield went", + "after": "two people died. The forcefield went" + } + ], + "https://www.parahumans.net/2018/10/09/gleaming-9-14/": [ + { + "before": "in a fireman carry. with my free hand", + "after": "in a fireman carry. With my free hand" } ], "https://www.parahumans.net/2018/10/16/gleaming-interlude-9-z/": [ @@ -4734,18 +4906,30 @@ "after": "shape of the moment" } ], - "https://www.parahumans.net/2018/09/25/gleaming-9-10/": [ - { - "before": "and mom and dad’s rules", - "after": "and Mom and Dad’s rules" - } - ], "https://www.parahumans.net/2018/10/23/polarize-10-1/": [ { "before": "You let mom talk and", "after": "You let Mom talk and" } ], + "https://www.parahumans.net/2018/11/03/polarize-10-4/": [ + { + "before": "services of mercenaries. depending on timing", + "after": "services of mercenaries. Depending on timing" + } + ], + "https://www.parahumans.net/2018/11/17/polarize-10-8/": [ + { + "before": "Sveta said. her hand was removed", + "after": "Sveta said. Her hand was removed" + } + ], + "https://www.parahumans.net/2018/11/20/polarize-10-9/": [ + { + "before": "confines of the suit. and rearranged herself", + "after": "confines of the suit, and rearranged herself" + } + ], "https://www.parahumans.net/2018/12/01/polarize-10-11/": [ { "before": "See dad, sleep.", @@ -4772,6 +4956,22 @@ { "before": "someone had been been called at three", "after": "someone had been called at three" + }, + { + "before": "I croaked. as she picked up", + "after": "I croaked, as she picked up" + } + ], + "https://www.parahumans.net/2019/02/02/blinding-11-11/": [ + { + "before": "to Capricorn. then she looked", + "after": "to Capricorn. Then she looked" + } + ], + "https://www.parahumans.net/2019/02/05/blinding-11-12/": [ + { + "before": "and drawers. her legs were stacked against", + "after": "and drawers. Her legs were stacked against" } ], "https://www.parahumans.net/2019/02/09/interlude-12-z/": [ @@ -4822,6 +5022,18 @@ "after": "wrists behind them around the stomach" } ], + "https://www.parahumans.net/2019/03/16/heavens-12-7/": [ + { + "before": "without knowing. by Love Lost", + "after": "without knowing. By Love Lost" + } + ], + "https://www.parahumans.net/2019/03/19/heavens-12-8/": [ + { + "before": "created glowing orbs. he threw one to my", + "after": "created glowing orbs. He threw one to my" + } + ], "https://www.parahumans.net/2019/03/26/heavens-12-none/": [ { "before": "if I inherit mom’s whole", @@ -4840,6 +5052,14 @@ { "before": "Night mom", "after": "Night Mom" + }, + { + "before": "was distorted. if it wasn’t for the fact", + "after": "was distorted. If it wasn’t for the fact" + }, + { + "before": "March said. she flourished her", + "after": "March said. She flourished her" } ], "https://www.parahumans.net/2019/04/09/black-13-3/": [ @@ -4848,12 +5068,24 @@ "after": "you have surmised" } ], + "https://www.parahumans.net/2019/04/02/black-13-1/": [ + { + "before": "walls stone and wood. the building", + "after": "walls stone and wood. The building" + } + ], "https://www.parahumans.net/2019/04/23/black-13-7/": [ { "before": "looked like they were were painted on", "after": "looked like they were painted on" } ], + "https://www.parahumans.net/2019/04/27/black-13-8/": [ + { + "before": "cash are involved. there’s a reason", + "after": "cash are involved. There’s a reason" + } + ], "https://www.parahumans.net/2019/05/11/black-13-11/": [ { "before": "been scummy and and tried", @@ -4892,10 +5124,26 @@ "after": "You stay away from Mom, you stay away from Dad" } ], + "https://www.parahumans.net/2019/06/29/breaking-14-z/": [ + { + "before": "smirked, leering. her face was stretching", + "after": "smirked, leering. Her face was stretching" + } + ], "https://www.parahumans.net/2019/07/02/dying-15-a/": [ { "before": "this sad old man made her think of dad", "after": "this sad old man made her think of Dad" + }, + { + "before": "scary. that’s all", + "after": "scary. That’s all" + } + ], + "https://www.parahumans.net/2019/07/06/dying-15-1/": [ + { + "before": "wall met ceiling. the wall was smooth", + "after": "wall met ceiling. The wall was smooth" } ], "https://www.parahumans.net/2019/07/13/dying-15-3/": [ @@ -4916,6 +5164,22 @@ "after": "worth of water" } ], + "https://www.parahumans.net/2019/07/30/dying-15-8/": [ + { + "before": "I thought. the dosage was supposed", + "after": "I thought. The dosage was supposed" + }, + { + "before": "I got a glimpse. it’s fucking with me", + "after": "I got a glimpse. It’s fucking with me" + } + ], + "https://www.parahumans.net/2019/08/13/from-within-16-1/": [ + { + "before": "wasn’t A.I. it was just a picture", + "after": "wasn’t A.I. It was just a picture" + } + ], "https://www.parahumans.net/2019/08/17/from-within-16-2/": [ { "before": "a small part of that was being being grumpy", @@ -4928,6 +5192,18 @@ "after": "small face on a fifteen inch" } ], + "https://www.parahumans.net/2019/08/24/from-within-16-4/": [ + { + "before": "the rest black and slim. with doodle-like drawings", + "after": "the rest black and slim, with doodle-like drawings" + } + ], + "https://www.parahumans.net/2019/08/27/from-within-16-5/": [ + { + "before": "thing number one. it’s not a lot", + "after": "thing number one. It’s not a lot" + } + ], "https://www.parahumans.net/2019/08/31/from-within-16-6/": [ { "before": "letters I wrote to dad’s friends", @@ -4940,6 +5216,12 @@ "after": "changers and shakers" } ], + "https://www.parahumans.net/2019/09/15/from-within-16-10/": [ + { + "before": "carried on. out of", + "after": "carried on, out of" + } + ], "https://www.parahumans.net/2019/10/01/sundown-17-1/": [ { "before": "mind of dad after his head injury", @@ -4982,16 +5264,32 @@ "after": "Because it made Mom come" } ], + "https://www.parahumans.net/2019/11/12/interlude-17-z-sundown/": [ + { + "before": "had his powers. the forcefield above", + "after": "had his powers. The forcefield above" + } + ], "https://www.parahumans.net/2019/11/19/radiation-18-2/": [ { "before": "looking for mom in the crowd", "after": "looking for Mom in the crowd" } ], + "https://www.parahumans.net/2019/11/23/radiation-18-3/": [ + { + "before": "in the eyes. they were a", + "after": "in the eyes. They were a" + } + ], "https://www.parahumans.net/2019/11/26/radiation-18-4/": [ { "before": "bucked a little with the the impact", "after": "bucked a little with the impact" + }, + { + "before": "you go. no joke, no wiggle", + "after": "you go. No joke, no wiggle" } ], "https://www.parahumans.net/2019/12/07/radiation-18-7/": [ @@ -5028,6 +5326,12 @@ "after": "so Mom doesn’t end up alone" } ], + "https://www.parahumans.net/2020/02/02/infrared-19-7/": [ + { + "before": "I really wasn’t. really", + "after": "I really wasn’t. Really" + } + ], "https://www.parahumans.net/2020/02/04/infrared-19-8/": [ { "before": "Lessons from mom, age thirteen", @@ -5058,6 +5362,22 @@ { "before": "thinking about mom getting on my case", "after": "thinking about Mom getting on my case" + }, + { + "before": "figure out while she was gone. we’ll see who", + "after": "figure out while she was gone. We’ll see who" + } + ], + "https://www.parahumans.net/2020/02/25/last-20-1/": [ + { + "before": "across this clearing. eyes, cameras", + "after": "across this clearing. Eyes, cameras" + } + ], + "https://www.parahumans.net/2020/03/31/last-20-10/": [ + { + "before": "shaping it as it rolled out. it became a circular", + "after": "shaping it as it rolled out. It became a circular" } ], "https://www.parahumans.net/2020/04/21/last-20-e4/": [ @@ -5122,6 +5442,10 @@ { "before": "he mom shook her head", "after": "her mom shook her head" + }, + { + "before": "with black slacks. his hair was chin", + "after": "with black slacks. His hair was chin" } ] } From 68eabd0ca03c1053c773fd0036c9b84107e2e1a0 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 20:57:01 -0400 Subject: [PATCH 006/186] Fix incorrect over-substitution of "TV" in place of "tv" Ward contains several instances of words that contain "tv", which shouldn't get capitalized. --- lib/convert.js | 2 +- lib/substitutions.json | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/convert.js b/lib/convert.js index 8a989c7..7897f88 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -368,7 +368,7 @@ function getBodyXML(chapter, contentEl) { xml = xml.replace(/the birdcage/g, "the Birdcage"); // This is usually spelled "TV" but sometimes the other ways. Normalize. - xml = xml.replace(/tv/g, "TV"); + xml = xml.replace(/(\b)tv(\b)/g, "$1TV$2"); xml = xml.replace(/T\.V\./g, "TV"); // There's no reason why these should be capitalized. (Note that they never appear at the beginning of any sentences.) diff --git a/lib/substitutions.json b/lib/substitutions.json index 1501418..6ccc84c 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4683,6 +4683,12 @@ "after": "lost my grip on him, and my hand" } ], + "https://www.parahumans.net/2018/04/07/shadow-interlude-5-x/": [ + { + "before": "objectvity", + "after": "objectivity" + } + ], "https://www.parahumans.net/2018/04/21/pitch-6-3/": [ { "before": "wall of bodies. the woman behind", From eebd6cb66926fc838f1ddb32b58a7dc00179a41e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 21:03:55 -0400 Subject: [PATCH 007/186] Spot fixes for Ward through Shadow 5.12 --- lib/substitutions.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 6ccc84c..29b4ac5 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4669,18 +4669,38 @@ { "before": "forearm and her fingertips. and she stumbled into", "after": "forearm and her fingertips, and she stumbled into" + }, + { + "before": "and nearby bowled over", + "after": "and nearly bowled over" + }, + { + "before": "There’s—Careful, Victoria.", + "after": "There’s— Careful, Victoria." } ], "https://www.parahumans.net/2018/03/31/shadow-5-11/": [ { "before": "side of her her chin", "after": "side of her chin" + }, + { + "before": "Plus my walkman and pocket atari", + "after": "Plus my Walkman and Pocket Atari" + }, + { + "before": "The woman—I turned to look and saw", + "after": "The woman— I turned to look and saw" } ], "https://www.parahumans.net/2018/04/03/shadow-5-12/": [ { "before": "lost my grip on him. and my hand", "after": "lost my grip on him, and my hand" + }, + { + "before": "Tristan-as Capricorn", + "after": "Tristan-as-Capricorn" } ], "https://www.parahumans.net/2018/04/07/shadow-interlude-5-x/": [ From 6848456bc92668c2574723bd5ecc718035599430 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 21:14:06 -0400 Subject: [PATCH 008/186] Fix overcapitalizations of "master" --- lib/substitutions.json | 86 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 29b4ac5..cc2b8fd 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2755,6 +2755,14 @@ { "before": "Kayden,” Theo said. “You’re", "after": "Kayden,” Theo said, “you’re" + }, + { + "before": "about how Masters tend to have", + "after": "about how masters tend to have" + }, + { + "before": "that was why Masters tend to be", + "after": "that was why masters tend to be" } ], "https://parahumans.wordpress.com/2013/02/07/interlude-18-donation-bonus-3/": [ @@ -3532,6 +3540,10 @@ { "before": "This,” Imp said. “Is", "after": "This,” Imp said, “is" + }, + { + "before": "kill all of the Masters that are generating", + "after": "kill all of the masters that are generating" } ], "https://parahumans.wordpress.com/2013/08/03/sting-26-6/": [ @@ -4677,6 +4689,14 @@ { "before": "There’s—Careful, Victoria.", "after": "There’s— Careful, Victoria." + }, + { + "before": "Hypnotist Master", + "after": "Hypnotist master" + }, + { + "before": "with Masters in mind", + "after": "with masters in mind" } ], "https://www.parahumans.net/2018/03/31/shadow-5-11/": [ @@ -4701,6 +4721,10 @@ { "before": "Tristan-as Capricorn", "after": "Tristan-as-Capricorn" + }, + { + "before": "were Masters and strangers", + "after": "were masters and strangers" } ], "https://www.parahumans.net/2018/04/07/shadow-interlude-5-x/": [ @@ -4719,6 +4743,10 @@ { "before": "glanced back. the others had", "after": "glanced back. The others had" + }, + { + "before": "Animal Master, likely", + "after": "Animal master, likely" } ], "https://www.parahumans.net/2018/04/28/pitch-6-5/": [ @@ -4752,6 +4780,10 @@ { "before": "those hectic days after dad’s head injury", "after": "those hectic days after Dad’s head injury" + }, + { + "before": "no Master pets", + "after": "no master pets" } ], "https://www.parahumans.net/2018/05/26/eclipse-x-1/": [ @@ -4884,6 +4916,10 @@ { "before": "Chris in the process. stretched on his way", "after": "Chris in the process. He stretched on his way" + }, + { + "before": "with a strong Master", + "after": "with a strong master" } ], "https://www.parahumans.net/2018/09/11/gleaming-9-7/": [ @@ -4956,6 +4992,12 @@ "after": "confines of the suit, and rearranged herself" } ], + "https://www.parahumans.net/2018/11/27/polarize-10-10/": [ + { + "before": "all about how Masters have", + "after": "all about how masters have" + } + ], "https://www.parahumans.net/2018/12/01/polarize-10-11/": [ { "before": "See dad, sleep.", @@ -5100,6 +5142,12 @@ "after": "walls stone and wood. The building" } ], + "https://www.parahumans.net/2019/04/20/black-13-6/": [ + { + "before": "I’m a Master, right, you", + "after": "I’m a master, right, you" + } + ], "https://www.parahumans.net/2019/04/23/black-13-7/": [ { "before": "looked like they were were painted on", @@ -5154,6 +5202,14 @@ { "before": "smirked, leering. her face was stretching", "after": "smirked, leering. Her face was stretching" + }, + { + "before": "But Master–stranger protocols", + "after": "But master–stranger protocols" + }, + { + "before": "allusion to Master–stranger protocols", + "after": "allusion to master–stranger protocols" } ], "https://www.parahumans.net/2019/07/02/dying-15-a/": [ @@ -5190,6 +5246,12 @@ "after": "worth of water" } ], + "https://www.parahumans.net/2019/07/27/dying-15-7/": [ + { + "before": "stranger or Master in", + "after": "stranger or master in" + } + ], "https://www.parahumans.net/2019/07/30/dying-15-8/": [ { "before": "I thought. the dosage was supposed", @@ -5260,6 +5322,12 @@ "after": "egg for Crystal and Mom" } ], + "https://www.parahumans.net/2019/10/12/sundown-17-4/": [ + { + "before": "on resisting Master influence", + "after": "on resisting master influence" + } + ], "https://www.parahumans.net/2019/10/15/sundown-17-5/": [ { "before": "Is mom walking without difficulty", @@ -5318,6 +5386,12 @@ "after": "you go. No joke, no wiggle" } ], + "https://www.parahumans.net/2019/12/03/radiation-18-6/": [ + { + "before": "Some Master minions", + "after": "Some master minions" + } + ], "https://www.parahumans.net/2019/12/07/radiation-18-7/": [ { "before": "Couple of of times a month", @@ -5338,6 +5412,18 @@ { "before": "Hey mom? Mom", "after": "Hey Mom? Mom" + }, + { + "before": "or heard of the Master who had created", + "after": "or heard of the master who had created" + }, + { + "before": "pretty sure it’s Master", + "after": "pretty sure it’s master" + }, + { + "before": "Love Lost is Master-class", + "after": "Love Lost is master-class" } ], "https://www.parahumans.net/2020/01/25/infrared-19-d/": [ From ad2c0b0ca5c22bea95d7e898d85388c54c724863 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 21:41:12 -0400 Subject: [PATCH 009/186] Improve conversion speed using a worker pool --- README.md | 2 +- lib/convert-worker.js | 473 ++++++++++++++++++++++++++++++++++++++++ lib/convert.js | 497 ++---------------------------------------- lib/worm-scraper.js | 5 +- npm-shrinkwrap.json | 10 +- package.json | 2 +- 6 files changed, 501 insertions(+), 488 deletions(-) create mode 100644 lib/convert-worker.js diff --git a/README.md b/README.md index 3987306..19f8e7a 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,6 @@ Alternately, if you are a developer, a pull request adding support for MOBI outp ## Text fixups -This project makes a lot of fixups to the original text, mostly around typos, punctuation, capitalization, and consistency. You can get a more specific idea of what these are via the code; there's [`convert.js`](https://github.com/domenic/worm-scraper/blob/master/lib/convert.js), where some things are handled generally, and [`substitutions.json`](https://github.com/domenic/worm-scraper/blob/master/lib/substitutions.json), for one-off fixes. +This project makes a lot of fixups to the original text, mostly around typos, punctuation, capitalization, and consistency. You can get a more specific idea of what these are via the code; there's [`convert-worker.js`](https://github.com/domenic/worm-scraper/blob/master/lib/convert-worker.js), where some things are handled generally, and [`substitutions.json`](https://github.com/domenic/worm-scraper/blob/master/lib/substitutions.json), for one-off fixes. This process is designed to be extensible, so if you notice any problems with the original text that you think should be fixed, file an issue to let me know, and we can update the fixup code so that the resulting eBook is improved. (Or better yet, send a pull request!) diff --git a/lib/convert-worker.js b/lib/convert-worker.js new file mode 100644 index 0000000..ee5c02f --- /dev/null +++ b/lib/convert-worker.js @@ -0,0 +1,473 @@ +"use strict"; +const workerpool = require("workerpool"); +const fs = require("fs"); +const { JSDOM } = require("jsdom"); +const substitutions = require("./substitutions.json"); + +workerpool.worker({ convertChapter }); + +function convertChapter(chapter, inputPath, outputPath) { + const contents = fs.readFileSync(inputPath, { encoding: "utf-8" }); + + const rawChapterJSDOM = new JSDOM(contents); + const output = getChapterString(chapter, rawChapterJSDOM.window.document); + + // TODO: this should probably not be necessary... jsdom bug I guess!? + rawChapterJSDOM.window.close(); + + fs.writeFileSync(outputPath, output); +} + +function getChapterString(chapter, rawChapterDoc) { + const body = getBodyXML(chapter, rawChapterDoc.querySelector(".entry-content")); + + return ` + + + + + ${chapter.title} + +${body} +`; +} + +function getBodyXML(chapter, contentEl) { + // Remove initial Next Chapter and Previous Chapter

+ contentEl.removeChild(contentEl.firstElementChild); + + // Remove everything after the last

(e.g. analytics

s) + const lastP = contentEl.querySelector("p:last-of-type"); + while (contentEl.lastElementChild !== lastP) { + contentEl.removeChild(contentEl.lastElementChild); + } + + // Remove empty

s or Last Chapter/Next Chapter

s + while (isEmptyOrGarbage(contentEl.lastElementChild)) { + contentEl.removeChild(contentEl.lastElementChild); + } + + // Remove redundant attributes and style + Array.prototype.forEach.call(contentEl.children, child => { + if (child.getAttribute("dir") === "ltr") { + child.removeAttribute("dir"); + } + + // Only ever appears with align="LEFT" (useless) or align="CENTER" overridden by style="text-align: left;" (also + // useless) + child.removeAttribute("align"); + + if (child.getAttribute("style") === "text-align:left;") { + child.removeAttribute("style"); + } + if (child.getAttribute("style") === "text-align:left;padding-left:30px;") { + child.setAttribute("style", "padding-left:30px;"); + } + }); + + // Remove empty s and s + // Remove style attributes from them, as they're always messed up. + const ems = contentEl.querySelectorAll("em, i"); + Array.prototype.forEach.call(ems, em => { + if (em.textContent.trim() === "") { + const replacement = contentEl.ownerDocument.createTextNode(" "); + em.parentNode.replaceChild(replacement, em); + } else { + em.removeAttribute("style"); + } + }); + + // In https://parahumans.wordpress.com/2013/01/05/monarch-16-13/ there are some

s that should be

s O_o + const addresses = contentEl.querySelectorAll("address"); + Array.prototype.forEach.call(addresses, address => { + const p = contentEl.ownerDocument.createElement("p"); + p.innerHTML = address.innerHTML; + address.parentNode.replaceChild(p, address); + }); + + // Every except underline ones is pointless at best and frequently messed up. (Weird font size, line spacing, + // etc.) + const spans = contentEl.querySelectorAll("span"); + Array.prototype.forEach.call(spans, span => { + if (span.getAttribute("style") === "text-decoration:underline;") { + return; + } + + if (span.textContent.trim() === "") { + span.parentNode.removeChild(span); + } else { + const docFrag = contentEl.ownerDocument.createDocumentFragment(); + while (span.firstChild) { + docFrag.appendChild(span.firstChild); + } + span.parentNode.replaceChild(docFrag, span); + } + }); + + // In Ward, CloudFlare email protection obfuscates the email addresses: + // https://usamaejaz.com/cloudflare-email-decoding/ + for (const emailEl of contentEl.querySelectorAll("[data-cfemail]")) { + const decoded = decodeCloudFlareEmail(emailEl.dataset.cfemail); + emailEl.replaceWith(contentEl.ownerDocument.createTextNode(decoded)); + } + + // Synthesize a tag to serialize + const bodyEl = contentEl.ownerDocument.createElement("body"); + + const h1El = contentEl.ownerDocument.createElement("h1"); + h1El.textContent = chapter.title; + bodyEl.appendChild(h1El); + + const comment = contentEl.ownerDocument.createComment(chapter.url); + bodyEl.appendChild(comment); + + while (contentEl.firstChild) { + bodyEl.appendChild(contentEl.firstChild); + } + + const xmlSerializer = new contentEl.ownerDocument.defaultView.XMLSerializer(); + let xml = xmlSerializer.serializeToString(bodyEl); + + // Fix recurring strange pattern of extra
in

......
\n

+ xml = xml.replace(/
\s*<\/em><\/p>/g, "

"); + + // There are way too many nonbreaking spaces where they don't belong. + // If they show up three in a row, then let them live. Otherwise, they die. + // Also remove any run of them after a period. + xml = xml.replace(/([^\xA0])\xA0\xA0?([^\xA0])/g, "$1 $2"); + xml = xml.replace(/\.\xA0+\s*/, ". "); + + function fixEms() { + // Fix recurring broken-up or erroneous s + xml = xml.replace(/<\/em>‘s/g, "’s"); + xml = xml.replace(/<\/em>/g, ""); + xml = xml.replace(/<\/em>/g, ""); + xml = xml.replace(/(\s?\s?[^A-Za-z]\s?\s?)<\/em>/g, "$1"); + xml = xml.replace(/<\/em>(\s?\s?[^A-Za-z]\s?\s?)/g, "$1"); + xml = xml.replace(/“([^>]+)<\/em>(!|\?|\.)”/g, "“$1$2”"); + xml = xml.replace(/

([^>]+)<\/em>(!|\?|\.)<\/p>/g, "

$1$2

"); + xml = xml.replace(/(!|\?|\.)\s{2}<\/em><\/p>/g, "$1

"); + xml = xml.replace(/([a-z]+)(\?|\.)<\/em>/g, "$1$2"); + xml = xml.replace(/([^>]+?)( +)<\/em>/g, "$1$2"); + xml = xml.replace(/ ([a-zA-Z]+)<\/em>/g, " $1"); + xml = xml.replace(/‘\s*([^<]+)\s*’<\/em>/g, "‘$1’"); + xml = xml.replace(/‘\s*([^<]+)\s*<\/em>\s*’/g, "‘$1’"); + xml = xml.replace(/‘\s*\s*([^<]+)\s*’<\/em>/g, "‘$1’"); + xml = xml.replace(/“\s*([^<]+)\s*”<\/em>/g, "“$1”"); + xml = xml.replace(/“\s*([^<]+)\s*<\/em>\s*”/g, "“$1”"); + xml = xml.replace(/“\s*\s*([^<]+)\s*”<\/em>/g, "“$1”"); + xml = xml.replace(/([^\n>]) ?/g, "$1 "); + xml = xml.replace(/ ?<\/em>/g, " "); + xml = xml.replace(/]+)> /g, ""); + xml = xml.replace(/<\/em> <\/p>/g, "

"); + xml = xml.replace(/([a-z]+),<\/em>/g, "$1,"); + } + + function fixQuotesAndApostrophes() { + // Fix recurring poor quotes and apostrophes + xml = xml.replace(/

”/g, "

“"); + xml = xml.replace(/“\s*<\/p>/g, "”

"); + xml = xml.replace(/“\s*<\/em><\/p>/g, "

"); + xml = xml.replace(/‘\s*<\/p>/g, "’

"); + xml = xml.replace(/‘\s*<\/em><\/p>/g, "’

"); + xml = xml.replace(/,” <\/em>/g, ",” "); + xml = xml.replace(/′/g, "’"); + xml = xml.replace(/″/g, "”"); + xml = xml.replace(/([A-Za-z])‘s(\s?)/g, "$1’s$2"); + xml = xml.replace(/I‘m/g, "I’m"); + xml = xml.replace(/

“\s+/g, "

“"); + xml = xml.replace(/'/g, "’"); + xml = xml.replace(/’([A-Za-z]+)’/g, "‘$1’"); + xml = xml.replace(/‘Sup/g, "’Sup"); + } + + // These interact with each other, so do them a few times. + xml = xml.replace(/,” <\/em>/g, ",” "); + fixEms(); + fixQuotesAndApostrophes(); + fixEms(); + fixQuotesAndApostrophes(); + fixEms(); + + // Similar problems occur in Ward with and as do in Worm with s + xml = xml.replace(//g, ""); + xml = xml.replace(/(\s*
\s*)<\/b>/g, "$1"); + xml = xml.replace(/(\s*
\s*)<\/strong>/g, "$1"); + xml = xml.replace(/<\/strong>(\s*)/g, "$1"); + xml = xml.replace(/@<\/strong>/g, "@"); + xml = xml.replace(/
(\s*)<\/strong>/g, "

$1"); + xml = xml.replace(/(\s*)<\/strong>/g, "
$1"); + + // No need for line breaks before paragraph ends + // These often occur with the
s inside / fixed above. + xml = xml.replace(/
\s*<\/p>/g, "

"); + + // Fix possessive of names ending in "s" + // Note: if the "s" is unvoiced, as in Marquis, then it doesn't get the second "s". + xml = xml.replace(/([^‘])Judas’([^s])/g, "$1Judas’s$2"); + xml = xml.replace(/([^‘])Brutus’([^s])/g, "$1Brutus’s$2"); + xml = xml.replace(/([^‘])Jess’([^s])/g, "$1Jess’s$2"); + xml = xml.replace(/([^‘])Aegis’([^s])/g, "$1Aegis’s$2"); + xml = xml.replace(/([^‘])Dauntless’([^s])/g, "$1Dauntless’s$2"); + xml = xml.replace(/([^‘])Circus’([^s])/g, "$1Circus’s$2"); + xml = xml.replace(/([^‘])Sirius’([^s])/g, "$1Sirius’s$2"); + xml = xml.replace(/([^‘])Brooks’([^s])/g, "$1Brooks’s$2"); + xml = xml.replace(/([^‘])Genesis’([^s])/g, "$1Genesis’s$2"); + xml = xml.replace(/([^‘])Atlas’([^s])/g, "$1Atlas’s$2"); + xml = xml.replace(/([^‘])Lucas’([^s])/g, "$1Lucas’s$2"); + xml = xml.replace(/([^‘])Gwerrus’([^s])/g, "$1Gwerrus’s$2"); + xml = xml.replace(/([^‘])Chris’([^s])/g, "$1Chris’s$2"); + xml = xml.replace(/([^‘])Eligos’([^s])/g, "$1Eligos’s$2"); + xml = xml.replace(/([^‘])Animos’([^s])/g, "$1Animos’s$2"); + xml = xml.replace(/([^‘])Mags’([^s])/g, "$1Mags’s$2"); + xml = xml.replace(/([^‘])Huntress’([^s])/g, "$1Huntress’s$2"); + xml = xml.replace(/([^‘])Hephaestus’([^s])/g, "$1Hephaestus’s$2"); + xml = xml.replace(/([^‘])Lord of Loss’([^s])/g, "$1Lord of Loss’s$2"); + xml = xml.replace(/([^‘])John Combs’([^s])/g, "$1John Combs’s$2"); + xml = xml.replace(/([^‘])Mama Mathers’([^s])/g, "$1Mama Mathers’s$2"); + xml = xml.replace(/([^‘])Monokeros’([^s])/g, "$1Monokeros’s$2"); + xml = xml.replace(/([^‘])Goddess’([^s])/g, "$1Goddess’s$2"); + xml = xml.replace(/([^‘])Boundless’([^s])/g, "$1Boundless’s$2"); + xml = xml.replace(/([^‘])Paris’([^s])/g, "$1Paris’s$2"); + xml = xml.replace(/([^‘])Tress’([^s])/g, "$1Tress’s$2"); + xml = xml.replace(/([^‘])Harris’([^s])/g, "$1Harris’s$2"); + xml = xml.replace(/([^‘])Antares’([^s])/g, "$1Antares’s$2"); + xml = xml.replace(/([^‘])Nieves’([^s])/g, "$1Nieves’s$2"); + xml = xml.replace(/([^‘])Backwoods’([^s])/g, "$1Backwoods’s$2"); + xml = xml.replace(/([^‘])Midas’([^s])/g, "$1Midas’s$2"); + xml = xml.replace(/([^‘])Mrs. Sims’([^s])/g, "$1Mrs. Sims’s$2"); + xml = xml.replace(/([^‘])Ms. Stillons’([^s])/g, "$1Ms. Stillons’s$2"); + xml = xml.replace(/([^‘])Chuckles’([^s])/g, "$1Chuckles’s$2"); + + // Fixes dashes + xml = xml.replace(/ – /g, "—"); + xml = xml.replace(/“((?:)?)-/g, "“$1—"); + xml = xml.replace(/-[,.]?”/g, "—”"); + xml = xml.replace(/-(!|\?)”/g, "—$1”"); + xml = xml.replace(/-[,.]?<\/em>”/g, "—”"); + xml = xml.replace(/-“/g, "—”"); + xml = xml.replace(/

-/g, "

—"); + xml = xml.replace(/-<\/p>/g, "—

"); + xml = xml.replace(/-<\/em><\/p>/g, "—

"); + xml = xml.replace(/\s?\s?–\s?\s?/g, "—"); + xml = xml.replace(/-\s\s?/g, "—"); + xml = xml.replace(/\s?\s-/g, "—"); + xml = xml.replace(/\s+—”/g, "—”"); + xml = xml.replace(/I-I/g, "I—I"); + xml = xml.replace(/I-uh/g, "I—uh"); + + // Joint names should use em dashes + xml = xml.replace(/Dallon-Pelham/g, "Dallon–Pelham"); + xml = xml.replace(/Bet-Gimel/g, "Bet–Gimel"); + xml = xml.replace(/Tristan-Capricorn/g, "Tristan–Capricorn"); + xml = xml.replace(/Capricorn-Byron/g, "Capricorn–Byron"); + xml = xml.replace(/Tristan-Byron/g, "Tristan–Byron"); + xml = xml.replace(/Earth-Gimel/g, "Earth–Gimel"); + xml = xml.replace(/Gimel-Europe/g, "Gimel–Europe"); + xml = xml.replace(/Imp-Damsel/g, "Imp–Damsel"); + xml = xml.replace(/Damsel-Ashley/g, "Damsel–Ashley"); + xml = xml.replace(/Antares-Anelace/g, "Antares–Anelace"); + xml = xml.replace(/Challenger-Gallant/g, "Challenger–Gallant"); + xml = xml.replace(/Undersider(s?)-(Breakthrough|Ambassador)/g, "Undersider$1–$2"); + xml = xml.replace(/Norwalk-Fairfield/g, "Norwalk–Fairfield"); + xml = xml.replace(/East-West/g, "east–west"); + xml = xml.replace(/(Green|Yellow)-Black/g, "$1–Black"); + xml = xml.replace(/Creutzfeldt-Jakob/g, "Creutzfeldt–Jakob"); + xml = xml.replace(/Astaroth-Nidhug/g, "Astaroth–Nidhug"); + xml = xml.replace(/Capulet-Montague/g, "Capulet–Montague"); + xml = xml.replace(/Weaver-Clockblocker/g, "Weaver–Clockblocker"); + xml = xml.replace(/Alexandria-Pretender/g, "Alexandria–Pretender"); + xml = xml.replace(/Night Hag-Nyx/g, "Night Hag–Nyx"); + xml = xml.replace(/Crawler-Breed/g, "Crawler–Breed"); + xml = xml.replace(/Simurgh-Myrddin-plant/g, "Simurgh–Myrddin–plant"); + xml = xml.replace(/Armsmaster-Defiant/g, "Armsmaster–Defiant"); + + // Use
for separators + // https://www.parahumans.net/2019/12/21/interlude-18-z-radiation/ has "super-separators" ("⊙ ⊙ ⊙ ⊙ ⊙") which we + // leave untouched for now. + xml = xml.replace(/

■<\/p>/g, "


"); + xml = xml.replace(/

■<\/p>/g, "


"); + xml = xml.replace(/

⊙<\/p>/g, "


"); + xml = xml.replace(/

⊙<\/strong><\/p>/g, "


"); + xml = xml.replace(/

⊙<\/strong><\/em><\/p>/g, "


"); + xml = xml.replace(/

⊙⊙<\/strong><\/p>/g, "


"); + + // Fix recurring miscapitalization with questions + xml = xml.replace(/\?”\s\s?She asked/g, "?” she asked"); + xml = xml.replace(/\?”\s\s?He asked/g, "?” he asked"); + + // Fix bad periods and spacing/markup surrounding them + xml = xml.replace(/\.\.<\/p>/g, ".

"); + xml = xml.replace(/\.\.”<\/p>/g, ".”

"); + xml = xml.replace(/ \. /g, ". "); + xml = xml.replace(/ \.<\/p>/g, ".

"); + xml = xml.replace(/\.\.\./g, "…"); + + // Fix extra spaces + xml = xml.replace(/ ? <\/p>/g, "

"); + xml = xml.replace(/([a-z]) ,/g, "$1,"); + + // The author often fails to terminate a sentence, instead using a comma after a dialogue tag. For example, + // > “I didn’t get much done,” Greg said, “I got distracted by... + // This should instead be + // > “I didn’t get much done,” Greg said. “I got distracted by... + // + // Our heuristic is to try to automatically fix this if the dialogue tag is two words (X said/admitted/sighed/etc.). + // + // This sometimes overcorrects, as in the following example: + // > “Basically,” Alec said, “For your powers to manifest, ... + // Here instead we should lowercase the "f". We handle that via one-offs in substitutions.json. + // + // This applies to ~800 instances, so although we have to correct back in substitutions.json a decent number of + // times, it definitely pays for itself. Most of the instances we have to correct back we also need to fix the + // capitalization anyway, and that's harder to do automatically, since proper names/"I"/etc. stay capitalized. + xml = xml.replace(/,” ([A-Za-z]+ [A-Za-z]+), “([A-Z])/g, ",” $1. “$2"); + + // Replace single-word s with s. Other s are probably erroneous too, but these are known-bad. + xml = xml.replace(/([A-Za-z]+)<\/i>/g, "$1"); + + // This occurs enough times it's better to do here than in one-off fixes. We correct the single instance where + // it's incorrect to capitalize in the one-off fixes. + // Note that Ward contains much talk of "the clairvoyants", so we don't want to capitalize plurals. + xml = xml.replace(/the clairvoyant([^s])/g, "the Clairvoyant$1"); + + // ReSound's name is sometimes miscapitalized. The word is never used in a non-name context. + xml = xml.replace(/Resound/g, "ReSound"); + + // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". I can see + // arguments for any of them, so let's go with the most prevalent: "patrol block". + xml = xml.replace(/([^ ]) Patrol (?:B|b)lock/g, "$1 patrol block"); + + // This is sometimes missing its capitalization. + xml = xml.replace(/the birdcage/g, "the Birdcage"); + + // This is usually spelled "TV" but sometimes the other ways. Normalize. + xml = xml.replace(/(\b)tv(\b)/g, "$1TV$2"); + xml = xml.replace(/T\.V\./g, "TV"); + + // There's no reason why these should be capitalized. (Note that they never appear at the beginning of any sentences.) + xml = xml.replace(/Halberd/g, "halberd"); + xml = xml.replace(/Loft/g, "loft"); + + // Especially early in the story, PRT designations are capitalized; they should not be. This fixes the cases where we + // can be reasonably sure they don't start a sentence, although more specific instances are done in + // substitutions.json, and some need to be back-corrected. + // + // Note: "Master" is specifically omitted because it fails poorly on Interlude 4. Other instances need to be + // corrected via substitutions.json. + xml = xml.replace( + /([a-zA-Z,] |\/)(Mover|Shaker|Brute|Breaker|Tinker|Blaster|Thinker|Striker|Changer|Trump|Stranger|Shifter|Shaper)/g, + (_, prefix, designation) => prefix + designation.toLowerCase() + ); + xml = xml.replace( + /(mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)-(\d+)/gi, + "$1 $2" + ); + xml = xml.replace( + // eslint-disable-next-line max-len + /(mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)[ -/](mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)/gi, + "$1–$2" + ); + + // This is consistently missing accents + xml = xml.replace(/Yangban/g, "Yàngbǎn"); + + // Place names need to always be capitalized + xml = xml.replace(/North end/g, "North End"); + xml = xml.replace(/Stonemast avenue/g, "Stonemast Avenue"); + xml = xml.replace(/Shale avenue/g, "Shale Avenue"); + xml = xml.replace(/Lord street/g, "Lord Street"); + xml = xml.replace(/Slater street/g, "Slater Street"); + xml = xml.replace(/Hollow point/g, "Hollow Point"); + xml = xml.replace(/Cedar point/g, "Cedar Point"); + + // These are usually not italicized, but sometimes are. Other foreign-language names (like Yàngbǎn) are not + // italicized, so we go in the direction of removing the italics. + xml = xml.replace(/Garama<\/em>/g, "Garama"); + xml = xml.replace(/Thanda<\/em>/g, "Thanda"); + xml = xml.replace(/Sifara([^<]*)<\/em>/g, "Sifara$1"); + xml = xml.replace(/Moord Nag([^<]*)<\/em>/g, "Moord Nag$1"); + xml = xml.replace(/Califa de Perro([^<]*)<\/em>/g, "Califa de Perro$1"); + xml = xml.replace(/Turanta([^<]*)<\/em>/g, "Turanta$1"); + + // "okay" is preferred to "ok". This sometimes gets changed back via substitutions.json when people are writing notes + // and thus probably the intention was to be less formal. Also it seems per https://en.wikipedia.org/wiki/A-ok the + // "A" in "A-okay" should be capitalized. + xml = xml.replace(/Ok([,. ])/g, "Okay$1"); + xml = xml.replace(/([^a-zA-Z])ok([^a])/g, "$1okay$2"); + xml = xml.replace(/a-okay/g, "A-okay"); + + // Signal(l)ing/signal(l)ed are spelled both ways. Both are acceptable in English. Let's standardize on single-L. + xml = xml.replace(/(S|s)ignall/g, "$1ignal"); + + // Clich(e|é) is spelled both ways. Let's standardize on including the accent. + xml = xml.replace(/cliche/g, "cliché"); + + // "gray" is the majority spelling, except for "greyhound" + xml = xml.replace(/(G|g)rey(?!hound)/g, "$1ray"); + + // "Mom" and "Dad" should be capitalized when used as a proper name. These regexps are tuned to catch a good amount of + // instances, without over-correcting for non-proper-name-like cases. Many other instances are handled in + // substitutions.json. + xml = xml.replace(/(? { + if (substitution.before) { + const indexOf = xml.indexOf(substitution.before); + if (indexOf === -1) { + console.warn(`Could not find text "${substitution.before}" in ${chapter.url}. The chapter may have been ` + + `updated at the source, in which case, you should edit substitutions.json.`); + } + if (indexOf !== xml.lastIndexOf(substitution.before)) { + console.warn(`The text "${substitution.before}" occurred twice, and so the substitution was ambiguous. ` + + `Update substitutions.json for a more precise substitution.`); + } + + xml = xml.replace(new RegExp(escapeRegExp(substitution.before)), substitution.after); + } else if (substitution.regExp) { + xml = xml.replace(new RegExp(substitution.regExp, "g"), substitution.replacement); + } else { + console.warn(`Invalid substitution specified for ${chapter.url}`); + } + }); + + // Serializer inserts extra xmlns for us since it doesn't know we're going to put this into a + xml = xml.replace(//, ""); + + return xml; +} + +function isEmptyOrGarbage(el) { + const text = el.textContent.trim(); + return text === "" || + text.startsWith("Last Chapter") || + text.startsWith("Previous Chapter") || + text.startsWith("Next Chapter"); +} + +function escapeRegExp(str) { + return str.replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&"); +} + +function decodeCloudFlareEmail(hash) { + let email = ""; + const xorWithThis = parseInt(hash.substring(0, 2), 16); + for (let i = 2; i < hash.length; i += 2) { + const charCode = parseInt(hash.substring(i, i + 2), 16) ^ xorWithThis; + email += String.fromCharCode(charCode); + } + + return email; +} diff --git a/lib/convert.js b/lib/convert.js index 7897f88..8ff6509 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -1,10 +1,8 @@ "use strict"; const path = require("path"); const fs = require("fs").promises; -const throat = require("throat"); -const { JSDOM } = require("jsdom"); +const workerpool = require("workerpool"); const cliProgress = require("cli-progress"); -const substitutions = require("./substitutions.json"); module.exports = async (cachePath, manifestPath, contentPath, concurrentJobs) => { const manifestContents = await fs.readFile(manifestPath, { encoding: "utf-8" }); @@ -17,483 +15,24 @@ module.exports = async (cachePath, manifestPath, contentPath, concurrentJobs) => }, cliProgress.Presets.shades_classic); progress.start(chapters.length, 0); - const mapper = throat(concurrentJobs, async chapter => { - await convertChapter(chapter, cachePath, contentPath); + const poolOptions = {}; + if (concurrentJobs !== undefined) { + poolOptions.maxWorkers = concurrentJobs; + } + const pool = workerpool.pool(path.resolve(__dirname, "convert-worker.js"), poolOptions); + + await Promise.all(chapters.map(async chapter => { + const inputPath = path.resolve(cachePath, chapter.filename); + + const destFileName = `${path.basename(chapter.filename, ".html")}.xhtml`; + const outputPath = path.resolve(contentPath, destFileName); + + await pool.exec("convertChapter", [chapter, inputPath, outputPath]); + progress.increment(); - }); - await Promise.all(chapters.map(mapper)); + })); + + pool.terminate(); console.log("All chapters converted"); }; - -async function convertChapter(chapter, cachePath, contentPath) { - const filename = chapter.filename; - const filePath = path.resolve(cachePath, filename); - - const contents = await fs.readFile(filePath, { encoding: "utf-8" }); - - const rawChapterJSDOM = new JSDOM(contents); - const output = getChapterString(chapter, rawChapterJSDOM.window.document); - - // TODO: this should probably not be necessary... jsdom bug I guess!? - rawChapterJSDOM.window.close(); - - const destFileName = `${path.basename(filename, ".html")}.xhtml`; - const destFilePath = path.resolve(contentPath, destFileName); - - await fs.writeFile(destFilePath, output); -} - -function getChapterString(chapter, rawChapterDoc) { - const body = getBodyXML(chapter, rawChapterDoc.querySelector(".entry-content")); - - return ` - - - - - ${chapter.title} - -${body} -`; -} - -function getBodyXML(chapter, contentEl) { - // Remove initial Next Chapter and Previous Chapter

- contentEl.removeChild(contentEl.firstElementChild); - - // Remove everything after the last

(e.g. analytics

s) - const lastP = contentEl.querySelector("p:last-of-type"); - while (contentEl.lastElementChild !== lastP) { - contentEl.removeChild(contentEl.lastElementChild); - } - - // Remove empty

s or Last Chapter/Next Chapter

s - while (isEmptyOrGarbage(contentEl.lastElementChild)) { - contentEl.removeChild(contentEl.lastElementChild); - } - - // Remove redundant attributes and style - Array.prototype.forEach.call(contentEl.children, child => { - if (child.getAttribute("dir") === "ltr") { - child.removeAttribute("dir"); - } - - // Only ever appears with align="LEFT" (useless) or align="CENTER" overridden by style="text-align: left;" (also - // useless) - child.removeAttribute("align"); - - if (child.getAttribute("style") === "text-align:left;") { - child.removeAttribute("style"); - } - if (child.getAttribute("style") === "text-align:left;padding-left:30px;") { - child.setAttribute("style", "padding-left:30px;"); - } - }); - - // Remove empty s and s - // Remove style attributes from them, as they're always messed up. - const ems = contentEl.querySelectorAll("em, i"); - Array.prototype.forEach.call(ems, em => { - if (em.textContent.trim() === "") { - const replacement = contentEl.ownerDocument.createTextNode(" "); - em.parentNode.replaceChild(replacement, em); - } else { - em.removeAttribute("style"); - } - }); - - // In https://parahumans.wordpress.com/2013/01/05/monarch-16-13/ there are some

s that should be

s O_o - const addresses = contentEl.querySelectorAll("address"); - Array.prototype.forEach.call(addresses, address => { - const p = contentEl.ownerDocument.createElement("p"); - p.innerHTML = address.innerHTML; - address.parentNode.replaceChild(p, address); - }); - - // Every except underline ones is pointless at best and frequently messed up. (Weird font size, line spacing, - // etc.) - const spans = contentEl.querySelectorAll("span"); - Array.prototype.forEach.call(spans, span => { - if (span.getAttribute("style") === "text-decoration:underline;") { - return; - } - - if (span.textContent.trim() === "") { - span.parentNode.removeChild(span); - } else { - const docFrag = contentEl.ownerDocument.createDocumentFragment(); - while (span.firstChild) { - docFrag.appendChild(span.firstChild); - } - span.parentNode.replaceChild(docFrag, span); - } - }); - - // In Ward, CloudFlare email protection obfuscates the email addresses: - // https://usamaejaz.com/cloudflare-email-decoding/ - for (const emailEl of contentEl.querySelectorAll("[data-cfemail]")) { - const decoded = decodeCloudFlareEmail(emailEl.dataset.cfemail); - emailEl.replaceWith(contentEl.ownerDocument.createTextNode(decoded)); - } - - // Synthesize a tag to serialize - const bodyEl = contentEl.ownerDocument.createElement("body"); - - const h1El = contentEl.ownerDocument.createElement("h1"); - h1El.textContent = chapter.title; - bodyEl.appendChild(h1El); - - const comment = contentEl.ownerDocument.createComment(chapter.url); - bodyEl.appendChild(comment); - - while (contentEl.firstChild) { - bodyEl.appendChild(contentEl.firstChild); - } - - const xmlSerializer = new contentEl.ownerDocument.defaultView.XMLSerializer(); - let xml = xmlSerializer.serializeToString(bodyEl); - - // Fix recurring strange pattern of extra
in

......
\n

- xml = xml.replace(/
\s*<\/em><\/p>/g, "

"); - - // There are way too many nonbreaking spaces where they don't belong. - // If they show up three in a row, then let them live. Otherwise, they die. - // Also remove any run of them after a period. - xml = xml.replace(/([^\xA0])\xA0\xA0?([^\xA0])/g, "$1 $2"); - xml = xml.replace(/\.\xA0+\s*/, ". "); - - function fixEms() { - // Fix recurring broken-up or erroneous s - xml = xml.replace(/<\/em>‘s/g, "’s"); - xml = xml.replace(/<\/em>/g, ""); - xml = xml.replace(/<\/em>/g, ""); - xml = xml.replace(/(\s?\s?[^A-Za-z]\s?\s?)<\/em>/g, "$1"); - xml = xml.replace(/<\/em>(\s?\s?[^A-Za-z]\s?\s?)/g, "$1"); - xml = xml.replace(/“([^>]+)<\/em>(!|\?|\.)”/g, "“$1$2”"); - xml = xml.replace(/

([^>]+)<\/em>(!|\?|\.)<\/p>/g, "

$1$2

"); - xml = xml.replace(/(!|\?|\.)\s{2}<\/em><\/p>/g, "$1

"); - xml = xml.replace(/([a-z]+)(\?|\.)<\/em>/g, "$1$2"); - xml = xml.replace(/([^>]+?)( +)<\/em>/g, "$1$2"); - xml = xml.replace(/ ([a-zA-Z]+)<\/em>/g, " $1"); - xml = xml.replace(/‘\s*([^<]+)\s*’<\/em>/g, "‘$1’"); - xml = xml.replace(/‘\s*([^<]+)\s*<\/em>\s*’/g, "‘$1’"); - xml = xml.replace(/‘\s*\s*([^<]+)\s*’<\/em>/g, "‘$1’"); - xml = xml.replace(/“\s*([^<]+)\s*”<\/em>/g, "“$1”"); - xml = xml.replace(/“\s*([^<]+)\s*<\/em>\s*”/g, "“$1”"); - xml = xml.replace(/“\s*\s*([^<]+)\s*”<\/em>/g, "“$1”"); - xml = xml.replace(/([^\n>]) ?/g, "$1 "); - xml = xml.replace(/ ?<\/em>/g, " "); - xml = xml.replace(/]+)> /g, ""); - xml = xml.replace(/<\/em> <\/p>/g, "

"); - xml = xml.replace(/([a-z]+),<\/em>/g, "$1,"); - } - - function fixQuotesAndApostrophes() { - // Fix recurring poor quotes and apostrophes - xml = xml.replace(/

”/g, "

“"); - xml = xml.replace(/“\s*<\/p>/g, "”

"); - xml = xml.replace(/“\s*<\/em><\/p>/g, "

"); - xml = xml.replace(/‘\s*<\/p>/g, "’

"); - xml = xml.replace(/‘\s*<\/em><\/p>/g, "’

"); - xml = xml.replace(/,” <\/em>/g, ",” "); - xml = xml.replace(/′/g, "’"); - xml = xml.replace(/″/g, "”"); - xml = xml.replace(/([A-Za-z])‘s(\s?)/g, "$1’s$2"); - xml = xml.replace(/I‘m/g, "I’m"); - xml = xml.replace(/

“\s+/g, "

“"); - xml = xml.replace(/'/g, "’"); - xml = xml.replace(/’([A-Za-z]+)’/g, "‘$1’"); - xml = xml.replace(/‘Sup/g, "’Sup"); - } - - // These interact with each other, so do them a few times. - xml = xml.replace(/,” <\/em>/g, ",” "); - fixEms(); - fixQuotesAndApostrophes(); - fixEms(); - fixQuotesAndApostrophes(); - fixEms(); - - // Similar problems occur in Ward with and as do in Worm with s - xml = xml.replace(//g, ""); - xml = xml.replace(/(\s*
\s*)<\/b>/g, "$1"); - xml = xml.replace(/(\s*
\s*)<\/strong>/g, "$1"); - xml = xml.replace(/<\/strong>(\s*)/g, "$1"); - xml = xml.replace(/@<\/strong>/g, "@"); - xml = xml.replace(/
(\s*)<\/strong>/g, "

$1"); - xml = xml.replace(/(\s*)<\/strong>/g, "
$1"); - - // No need for line breaks before paragraph ends - // These often occur with the
s inside / fixed above. - xml = xml.replace(/
\s*<\/p>/g, "

"); - - // Fix possessive of names ending in "s" - // Note: if the "s" is unvoiced, as in Marquis, then it doesn't get the second "s". - xml = xml.replace(/([^‘])Judas’([^s])/g, "$1Judas’s$2"); - xml = xml.replace(/([^‘])Brutus’([^s])/g, "$1Brutus’s$2"); - xml = xml.replace(/([^‘])Jess’([^s])/g, "$1Jess’s$2"); - xml = xml.replace(/([^‘])Aegis’([^s])/g, "$1Aegis’s$2"); - xml = xml.replace(/([^‘])Dauntless’([^s])/g, "$1Dauntless’s$2"); - xml = xml.replace(/([^‘])Circus’([^s])/g, "$1Circus’s$2"); - xml = xml.replace(/([^‘])Sirius’([^s])/g, "$1Sirius’s$2"); - xml = xml.replace(/([^‘])Brooks’([^s])/g, "$1Brooks’s$2"); - xml = xml.replace(/([^‘])Genesis’([^s])/g, "$1Genesis’s$2"); - xml = xml.replace(/([^‘])Atlas’([^s])/g, "$1Atlas’s$2"); - xml = xml.replace(/([^‘])Lucas’([^s])/g, "$1Lucas’s$2"); - xml = xml.replace(/([^‘])Gwerrus’([^s])/g, "$1Gwerrus’s$2"); - xml = xml.replace(/([^‘])Chris’([^s])/g, "$1Chris’s$2"); - xml = xml.replace(/([^‘])Eligos’([^s])/g, "$1Eligos’s$2"); - xml = xml.replace(/([^‘])Animos’([^s])/g, "$1Animos’s$2"); - xml = xml.replace(/([^‘])Mags’([^s])/g, "$1Mags’s$2"); - xml = xml.replace(/([^‘])Huntress’([^s])/g, "$1Huntress’s$2"); - xml = xml.replace(/([^‘])Hephaestus’([^s])/g, "$1Hephaestus’s$2"); - xml = xml.replace(/([^‘])Lord of Loss’([^s])/g, "$1Lord of Loss’s$2"); - xml = xml.replace(/([^‘])John Combs’([^s])/g, "$1John Combs’s$2"); - xml = xml.replace(/([^‘])Mama Mathers’([^s])/g, "$1Mama Mathers’s$2"); - xml = xml.replace(/([^‘])Monokeros’([^s])/g, "$1Monokeros’s$2"); - xml = xml.replace(/([^‘])Goddess’([^s])/g, "$1Goddess’s$2"); - xml = xml.replace(/([^‘])Boundless’([^s])/g, "$1Boundless’s$2"); - xml = xml.replace(/([^‘])Paris’([^s])/g, "$1Paris’s$2"); - xml = xml.replace(/([^‘])Tress’([^s])/g, "$1Tress’s$2"); - xml = xml.replace(/([^‘])Harris’([^s])/g, "$1Harris’s$2"); - xml = xml.replace(/([^‘])Antares’([^s])/g, "$1Antares’s$2"); - xml = xml.replace(/([^‘])Nieves’([^s])/g, "$1Nieves’s$2"); - xml = xml.replace(/([^‘])Backwoods’([^s])/g, "$1Backwoods’s$2"); - xml = xml.replace(/([^‘])Midas’([^s])/g, "$1Midas’s$2"); - xml = xml.replace(/([^‘])Mrs. Sims’([^s])/g, "$1Mrs. Sims’s$2"); - xml = xml.replace(/([^‘])Ms. Stillons’([^s])/g, "$1Ms. Stillons’s$2"); - xml = xml.replace(/([^‘])Chuckles’([^s])/g, "$1Chuckles’s$2"); - - // Fixes dashes - xml = xml.replace(/ – /g, "—"); - xml = xml.replace(/“((?:)?)-/g, "“$1—"); - xml = xml.replace(/-[,.]?”/g, "—”"); - xml = xml.replace(/-(!|\?)”/g, "—$1”"); - xml = xml.replace(/-[,.]?<\/em>”/g, "—”"); - xml = xml.replace(/-“/g, "—”"); - xml = xml.replace(/

-/g, "

—"); - xml = xml.replace(/-<\/p>/g, "—

"); - xml = xml.replace(/-<\/em><\/p>/g, "—

"); - xml = xml.replace(/\s?\s?–\s?\s?/g, "—"); - xml = xml.replace(/-\s\s?/g, "—"); - xml = xml.replace(/\s?\s-/g, "—"); - xml = xml.replace(/\s+—”/g, "—”"); - xml = xml.replace(/I-I/g, "I—I"); - xml = xml.replace(/I-uh/g, "I—uh"); - - // Joint names should use em dashes - xml = xml.replace(/Dallon-Pelham/g, "Dallon–Pelham"); - xml = xml.replace(/Bet-Gimel/g, "Bet–Gimel"); - xml = xml.replace(/Tristan-Capricorn/g, "Tristan–Capricorn"); - xml = xml.replace(/Capricorn-Byron/g, "Capricorn–Byron"); - xml = xml.replace(/Tristan-Byron/g, "Tristan–Byron"); - xml = xml.replace(/Earth-Gimel/g, "Earth–Gimel"); - xml = xml.replace(/Gimel-Europe/g, "Gimel–Europe"); - xml = xml.replace(/Imp-Damsel/g, "Imp–Damsel"); - xml = xml.replace(/Damsel-Ashley/g, "Damsel–Ashley"); - xml = xml.replace(/Antares-Anelace/g, "Antares–Anelace"); - xml = xml.replace(/Challenger-Gallant/g, "Challenger–Gallant"); - xml = xml.replace(/Undersider(s?)-(Breakthrough|Ambassador)/g, "Undersider$1–$2"); - xml = xml.replace(/Norwalk-Fairfield/g, "Norwalk–Fairfield"); - xml = xml.replace(/East-West/g, "east–west"); - xml = xml.replace(/(Green|Yellow)-Black/g, "$1–Black"); - xml = xml.replace(/Creutzfeldt-Jakob/g, "Creutzfeldt–Jakob"); - xml = xml.replace(/Astaroth-Nidhug/g, "Astaroth–Nidhug"); - xml = xml.replace(/Capulet-Montague/g, "Capulet–Montague"); - xml = xml.replace(/Weaver-Clockblocker/g, "Weaver–Clockblocker"); - xml = xml.replace(/Alexandria-Pretender/g, "Alexandria–Pretender"); - xml = xml.replace(/Night Hag-Nyx/g, "Night Hag–Nyx"); - xml = xml.replace(/Crawler-Breed/g, "Crawler–Breed"); - xml = xml.replace(/Simurgh-Myrddin-plant/g, "Simurgh–Myrddin–plant"); - xml = xml.replace(/Armsmaster-Defiant/g, "Armsmaster–Defiant"); - - // Use
for separators - // https://www.parahumans.net/2019/12/21/interlude-18-z-radiation/ has "super-separators" ("⊙ ⊙ ⊙ ⊙ ⊙") which we - // leave untouched for now. - xml = xml.replace(/

■<\/p>/g, "


"); - xml = xml.replace(/

■<\/p>/g, "


"); - xml = xml.replace(/

⊙<\/p>/g, "


"); - xml = xml.replace(/

⊙<\/strong><\/p>/g, "


"); - xml = xml.replace(/

⊙<\/strong><\/em><\/p>/g, "


"); - xml = xml.replace(/

⊙⊙<\/strong><\/p>/g, "


"); - - // Fix recurring miscapitalization with questions - xml = xml.replace(/\?”\s\s?She asked/g, "?” she asked"); - xml = xml.replace(/\?”\s\s?He asked/g, "?” he asked"); - - // Fix bad periods and spacing/markup surrounding them - xml = xml.replace(/\.\.<\/p>/g, ".

"); - xml = xml.replace(/\.\.”<\/p>/g, ".”

"); - xml = xml.replace(/ \. /g, ". "); - xml = xml.replace(/ \.<\/p>/g, ".

"); - xml = xml.replace(/\.\.\./g, "…"); - - // Fix extra spaces - xml = xml.replace(/ ? <\/p>/g, "

"); - xml = xml.replace(/([a-z]) ,/g, "$1,"); - - // The author often fails to terminate a sentence, instead using a comma after a dialogue tag. For example, - // > “I didn’t get much done,” Greg said, “I got distracted by... - // This should instead be - // > “I didn’t get much done,” Greg said. “I got distracted by... - // - // Our heuristic is to try to automatically fix this if the dialogue tag is two words (X said/admitted/sighed/etc.). - // - // This sometimes overcorrects, as in the following example: - // > “Basically,” Alec said, “For your powers to manifest, ... - // Here instead we should lowercase the "f". We handle that via one-offs in substitutions.json. - // - // This applies to ~800 instances, so although we have to correct back in substitutions.json a decent number of - // times, it definitely pays for itself. Most of the instances we have to correct back we also need to fix the - // capitalization anyway, and that's harder to do automatically, since proper names/"I"/etc. stay capitalized. - xml = xml.replace(/,” ([A-Za-z]+ [A-Za-z]+), “([A-Z])/g, ",” $1. “$2"); - - // Replace single-word s with s. Other s are probably erroneous too, but these are known-bad. - xml = xml.replace(/([A-Za-z]+)<\/i>/g, "$1"); - - // This occurs enough times it's better to do here than in one-off fixes. We correct the single instance where - // it's incorrect to capitalize in the one-off fixes. - // Note that Ward contains much talk of "the clairvoyants", so we don't want to capitalize plurals. - xml = xml.replace(/the clairvoyant([^s])/g, "the Clairvoyant$1"); - - // ReSound's name is sometimes miscapitalized. The word is never used in a non-name context. - xml = xml.replace(/Resound/g, "ReSound"); - - // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". I can see - // arguments for any of them, so let's go with the most prevalent: "patrol block". - xml = xml.replace(/([^ ]) Patrol (?:B|b)lock/g, "$1 patrol block"); - - // This is sometimes missing its capitalization. - xml = xml.replace(/the birdcage/g, "the Birdcage"); - - // This is usually spelled "TV" but sometimes the other ways. Normalize. - xml = xml.replace(/(\b)tv(\b)/g, "$1TV$2"); - xml = xml.replace(/T\.V\./g, "TV"); - - // There's no reason why these should be capitalized. (Note that they never appear at the beginning of any sentences.) - xml = xml.replace(/Halberd/g, "halberd"); - xml = xml.replace(/Loft/g, "loft"); - - // Especially early in the story, PRT designations are capitalized; they should not be. This fixes the cases where we - // can be reasonably sure they don't start a sentence, although more specific instances are done in - // substitutions.json, and some need to be back-corrected. - // - // Note: "Master" is specifically omitted because it fails poorly on Interlude 4. Other instances need to be - // corrected via substitutions.json. - xml = xml.replace( - /([a-zA-Z,] |\/)(Mover|Shaker|Brute|Breaker|Tinker|Blaster|Thinker|Striker|Changer|Trump|Stranger|Shifter|Shaper)/g, - (_, prefix, designation) => prefix + designation.toLowerCase() - ); - xml = xml.replace( - /(mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)-(\d+)/gi, - "$1 $2" - ); - xml = xml.replace( - // eslint-disable-next-line max-len - /(mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)[ -/](mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)/gi, - "$1–$2" - ); - - // This is consistently missing accents - xml = xml.replace(/Yangban/g, "Yàngbǎn"); - - // Place names need to always be capitalized - xml = xml.replace(/North end/g, "North End"); - xml = xml.replace(/Stonemast avenue/g, "Stonemast Avenue"); - xml = xml.replace(/Shale avenue/g, "Shale Avenue"); - xml = xml.replace(/Lord street/g, "Lord Street"); - xml = xml.replace(/Slater street/g, "Slater Street"); - xml = xml.replace(/Hollow point/g, "Hollow Point"); - xml = xml.replace(/Cedar point/g, "Cedar Point"); - - // These are usually not italicized, but sometimes are. Other foreign-language names (like Yàngbǎn) are not - // italicized, so we go in the direction of removing the italics. - xml = xml.replace(/Garama<\/em>/g, "Garama"); - xml = xml.replace(/Thanda<\/em>/g, "Thanda"); - xml = xml.replace(/Sifara([^<]*)<\/em>/g, "Sifara$1"); - xml = xml.replace(/Moord Nag([^<]*)<\/em>/g, "Moord Nag$1"); - xml = xml.replace(/Califa de Perro([^<]*)<\/em>/g, "Califa de Perro$1"); - xml = xml.replace(/Turanta([^<]*)<\/em>/g, "Turanta$1"); - - // "okay" is preferred to "ok". This sometimes gets changed back via substitutions.json when people are writing notes - // and thus probably the intention was to be less formal. Also it seems per https://en.wikipedia.org/wiki/A-ok the - // "A" in "A-okay" should be capitalized. - xml = xml.replace(/Ok([,. ])/g, "Okay$1"); - xml = xml.replace(/([^a-zA-Z])ok([^a])/g, "$1okay$2"); - xml = xml.replace(/a-okay/g, "A-okay"); - - // Signal(l)ing/signal(l)ed are spelled both ways. Both are acceptable in English. Let's standardize on single-L. - xml = xml.replace(/(S|s)ignall/g, "$1ignal"); - - // Clich(e|é) is spelled both ways. Let's standardize on including the accent. - xml = xml.replace(/cliche/g, "cliché"); - - // "gray" is the majority spelling, except for "greyhound" - xml = xml.replace(/(G|g)rey(?!hound)/g, "$1ray"); - - // "Mom" and "Dad" should be capitalized when used as a proper name. These regexps are tuned to catch a good amount of - // instances, without over-correcting for non-proper-name-like cases. Many other instances are handled in - // substitutions.json. - xml = xml.replace(/(? { - if (substitution.before) { - const indexOf = xml.indexOf(substitution.before); - if (indexOf === -1) { - console.warn(`Could not find text "${substitution.before}" in ${chapter.url}. The chapter may have been ` + - `updated at the source, in which case, you should edit substitutions.json.`); - } - if (indexOf !== xml.lastIndexOf(substitution.before)) { - console.warn(`The text "${substitution.before}" occurred twice, and so the substitution was ambiguous. ` + - `Update substitutions.json for a more precise substitution.`); - } - - xml = xml.replace(new RegExp(escapeRegExp(substitution.before)), substitution.after); - } else if (substitution.regExp) { - xml = xml.replace(new RegExp(substitution.regExp, "g"), substitution.replacement); - } else { - console.warn(`Invalid substitution specified for ${chapter.url}`); - } - }); - - // Serializer inserts extra xmlns for us since it doesn't know we're going to put this into a - xml = xml.replace(//, ""); - - return xml; -} - -function isEmptyOrGarbage(el) { - const text = el.textContent.trim(); - return text === "" || - text.startsWith("Last Chapter") || - text.startsWith("Previous Chapter") || - text.startsWith("Next Chapter"); -} - -function escapeRegExp(str) { - return str.replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&"); -} - -function decodeCloudFlareEmail(hash) { - let email = ""; - const xorWithThis = parseInt(hash.substring(0, 2), 16); - for (let i = 2; i < hash.length; i += 2) { - const charCode = parseInt(hash.substring(i, i + 2), 16) ^ xorWithThis; - email += String.fromCharCode(charCode); - } - - return email; -} diff --git a/lib/worm-scraper.js b/lib/worm-scraper.js index 6afbab5..381f9eb 100644 --- a/lib/worm-scraper.js +++ b/lib/worm-scraper.js @@ -52,8 +52,9 @@ const argv = yargs }) .option("j", { alias: "jobs", - default: 10, - describe: "Number of concurrent read/write conversion jobs", + default: undefined, + defaultDescription: "# of CPU cores - 1", + describe: "number of concurrent read/write conversion jobs", requiresArg: true, global: true }) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 3c54975..015a00c 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1895,11 +1895,6 @@ "thenify": ">= 3.1.0 < 4" } }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" - }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -2051,6 +2046,11 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, + "workerpool": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", + "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==" + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 2fba4a3..cb0e2ba 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "cpr": "^3.0.1", "jsdom": "^16.4.0", "requisition": "^1.5.0", - "throat": "^5.0.0", + "workerpool": "^6.0.2", "yargs": "^16.1.0" }, "devDependencies": { From e2277751c0e8e0bf642512837364a292225da750 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 21:58:59 -0400 Subject: [PATCH 010/186] Fix various dash issues --- lib/substitutions.json | 132 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index cc2b8fd..7984c85 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -3185,6 +3185,10 @@ { "before": "But.“ He", "after": "But.” He" + }, + { + "before": "is led by non-capes", + "after": "is led by non-capes" } ], "https://parahumans.wordpress.com/2013/05/09/cell-22-3/": [ @@ -4290,6 +4294,10 @@ { "before": "background of his mind

", "after": "background of his mind.

" + }, + { + "before": "boyfriends are my ex-boyfriends", + "after": "boyfriends are my ex-boyfriends" } ], "https://parahumans.wordpress.com/2013/11/19/interlude-end/": [ @@ -4411,6 +4419,12 @@ "after": "Some is Mom and Dad’s" } ], + "https://www.parahumans.net/2017/12/12/flare-2-2/": [ + { + "before": "-Victoria", + "after": "—Victoria" + } + ], "https://www.parahumans.net/2017/12/16/flare-2-3/": [ { "before": "two—piece", @@ -4725,12 +4739,24 @@ { "before": "were Masters and strangers", "after": "were masters and strangers" + }, + { + "before": "or if he said something like ‘You’ or “Everyone’, I could", + "after": "or if he said something like ‘You’ or ‘Everyone’, I could" } ], "https://www.parahumans.net/2018/04/07/shadow-interlude-5-x/": [ { "before": "objectvity", "after": "objectivity" + }, + { + "before": "“Are the production rates", + "after": "“—are the production rates" + }, + { + "before": "millions—tens of millions- is", + "after": "millions—tens of millions—is" } ], "https://www.parahumans.net/2018/04/21/pitch-6-3/": [ @@ -4872,6 +4898,10 @@ { "before": "of her bag. only one temporary tattoo", "after": "of her bag. Only one temporary tattoo" + }, + { + "before": "loved—loved- for my", + "after": "loved—loved—for my" } ], "https://www.parahumans.net/2018/07/07/beacon-8-2/": [ @@ -4932,6 +4962,10 @@ { "before": "he bottles it up. then the bottle cracks", "after": "he bottles it up. Then the bottle cracks" + }, + { + "before": "that made her her- the shock of white", + "after": "that made her her—the shock of white" } ], "https://www.parahumans.net/2018/09/25/gleaming-9-10/": [ @@ -4956,6 +4990,12 @@ "after": "in a fireman carry. With my free hand" } ], + "https://www.parahumans.net/2018/10/13/gleaming-9-15/": [ + { + "before": "-fucked in the head.", + "after": "—fucked in the head." + } + ], "https://www.parahumans.net/2018/10/16/gleaming-interlude-9-z/": [ { "before": "cliff he was was expected", @@ -4980,6 +5020,20 @@ "after": "services of mercenaries. Depending on timing" } ], + "https://www.parahumans.net/2018/11/13/polarize-10-7/": [ + { + "before": "your favorite top-’", + "after": "your favorite top—’" + }, + { + "before": "-your phone, twice, your banking card-", + "after": "—your phone, twice, your banking card—" + }, + { + "before": "-your pancreas.", + "after": "—your pancreas." + } + ], "https://www.parahumans.net/2018/11/17/polarize-10-8/": [ { "before": "Sveta said. her hand was removed", @@ -5018,6 +5072,10 @@ { "before": "and it it pulled him", "after": "and it pulled him" + }, + { + "before": "Victoria-flesh", + "after": "Victoria-flesh" } ], "https://www.parahumans.net/2019/01/26/blinding-11-9/": [ @@ -5054,6 +5112,10 @@ { "before": "mom messed up", "after": "Mom messed up" + }, + { + "before": "You- upstairs.", + "after": "You—upstairs." } ], "https://www.parahumans.net/2019/02/12/heavens-12-1/": [ @@ -5062,6 +5124,12 @@ "after": "And Mom’s implying I want" } ], + "https://www.parahumans.net/2019/02/16/heavens-12-2/": [ + { + "before": "And you- don’t do that", + "after": "And you—don’t do that" + } + ], "https://www.parahumans.net/2019/02/19/interlude-12-e/": [ { "before": "I want dad", @@ -5072,6 +5140,12 @@ "after": "I need Dad" } ], + "https://www.parahumans.net/2019/02/23/heavens-12-3/": [ + { + "before": "had shaken them good- but I could", + "after": "had shaken them good—but I could" + } + ], "https://www.parahumans.net/2019/03/02/heavens-12-all/": [ { "before": "bounce off of the the people", @@ -5142,6 +5216,12 @@ "after": "walls stone and wood. The building" } ], + "https://www.parahumans.net/2019/04/13/black-13-4/": [ + { + "before": "wiped—or perhaps struck- clean.", + "after": "wiped—or perhaps struck—clean." + } + ], "https://www.parahumans.net/2019/04/20/black-13-6/": [ { "before": "I’m a Master, right, you", @@ -5198,6 +5278,30 @@ "after": "You stay away from Mom, you stay away from Dad" } ], + "https://www.parahumans.net/2019/06/22/breaking-14-11/": [ + { + "before": "-He’s changing-", + "after": "-He’s changing-" + } + ], + "https://www.parahumans.net/2019/06/25/breaking-14-12/": [ + { + "before": "-Her phone?—", + "after": "-Her phone?-" + }, + { + "before": "-Have to ask her.—", + "after": "-Have to ask her.-" + }, + { + "before": "-down hall with gate. basement of that part of complx—", + "after": "-down hall with gate. basement of that part of complx-" + }, + { + "before": "-That was us—the message on my display read.—cuz guards—", + "after": "-That was us- the message on my display read. -cuz guards-" + } + ], "https://www.parahumans.net/2019/06/29/breaking-14-z/": [ { "before": "smirked, leering. her face was stretching", @@ -5314,6 +5418,10 @@ { "before": "mind of dad after his head injury", "after": "mind of Dad after his head injury" + }, + { + "before": "Some—many- were unwillingly", + "after": "Some—many—were unwillingly" } ], "https://www.parahumans.net/2019/10/05/sundown-17-2/": [ @@ -5426,6 +5534,30 @@ "after": "Love Lost is master-class" } ], + "https://www.parahumans.net/2020/01/14/infrared-19-c/": [ + { + "before": "-maim, destroy, tear it all down—", + "after": "—maim, destroy, tear it all down—" + }, + { + "before": "-make it hurt, torture, butcher, kill—", + "after": "—make it hurt, torture, butcher, kill—" + }, + { + "before": "—Retaliate—", + "after": "—Retaliate—" + }, + { + "before": "—die quickly, if he has to die.", + "after": "—die quickly, if he has to die." + } + ], + "https://www.parahumans.net/2020/01/21/infrared-19-6/": [ + { + "before": "-through the emotion. Emote through the emotion. Emote—", + "after": "—through the emotion. Emote through the emotion. Emote—" + } + ], "https://www.parahumans.net/2020/01/25/infrared-19-d/": [ { "before": "look after mom", From b6bce1244dc4c66f1185ab7c044e6f4efedcd709 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 22:17:02 -0400 Subject: [PATCH 011/186] Spot fixes for Ward through Eclipse x.1 --- lib/substitutions.json | 101 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 7984c85..d1a7ad9 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4757,6 +4757,38 @@ { "before": "millions—tens of millions- is", "after": "millions—tens of millions—is" + }, + { + "before": "“—And frankly,” Mr. Nieves said", + "after": "“—and frankly,” Mr. Nieves said" + }, + { + "before": "Because, Balminder,” Kurt said. “You were plausible", + "after": "Because, Balminder,” Kurt said, “you were plausible" + }, + { + "before": "she aid", + "after": "she said" + } + ], + "https://www.parahumans.net/2018/04/10/shadow-interlude-5-y/": [ + { + "before": "Hopefully—I’m hoping she figures out", + "after": "Hopefully— I’m hoping she figures out" + }, + { + "before": "…It’s not so important when", + "after": "…it’s not so important when" + } + ], + "https://www.parahumans.net/2018/04/17/pitch-6-2/": [ + { + "before": "very clear words, only ‘ERIN’ and ‘NO-‘.", + "after": "very clear words, only ‘ERIN’ and ‘NO—’." + }, + { + "before": "The Mcveay’s", + "after": "The McVeays" } ], "https://www.parahumans.net/2018/04/21/pitch-6-3/": [ @@ -4783,18 +4815,87 @@ { "before": "Cradle said. his tone was", "after": "Cradle said. His tone was" + }, + { + "before": "“…Multiply the grudge,”", + "after": "“…multiply the grudge,”" + }, + { + "before": "used flight to stead myself", + "after": "used flight to steady myself" + } + ], + "https://www.parahumans.net/2018/05/05/pitch-6-7/": [ + { + "before": "“—And we wanted to ask for your", + "after": "“—and we wanted to ask for your" + }, + { + "before": "while you were bloody—I shouldn’t be", + "after": "while you were bloody— I shouldn’t be" } ], "https://www.parahumans.net/2018/05/08/pitch-6-8/": [ { "before": "check in on on Ashley and Rain", "after": "check in on Ashley and Rain" + }, + { + "before": "earth Shin", + "after": "Earth Shin" + }, + { + "before": "one Jackass said", + "after": "one jackass said" + }, + { + "before": "an Über-neighborhood", + "after": "an uber-neighborhood", + "_comment": "This seems to lose its umlaut in English; see e.g. https://www.dictionary.com/browse/uber. It's certainly not capitalized." + } + ], + "https://www.parahumans.net/2018/05/11/pitch-6-9/": [ + { + "before": "bunch of Jackasses that", + "after": "bunch of jackasses that" + }, + { + "before": "some of the Jackasses", + "after": "some of the jackasses" + }, + { + "before": "one of the Jackasses turned", + "after": "one of the jackasses turned" + }, + { + "before": "The Jackass next to Vince", + "after": "The jackass next to Vince" + }, + { + "before": "couple of the Jackasses’", + "after": "couple of the jackasses" + }, + { + "before": "I could hear her, “I’m trying", + "after": "I could hear her. “I’m trying" + }, + { + "before": "all-hands on deck", + "after": "all-hands-on-deck" + }, + { + "before": "the Junior Captain said", + "after": "the junior captain said" } ], "https://www.parahumans.net/2018/05/19/torch-7-2/": [ { "before": "you had to deal with with could have", "after": "you had to deal with could have" + }, + { + "before": "—And from other horrors.", + "after": "—and from other horrors." } ], "https://www.parahumans.net/2018/05/26/torch-7-4/": [ From 5cbbd8a6fb695240c61dd94ebc3efe6fe35c7a82 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 22:21:54 -0400 Subject: [PATCH 012/186] Fix missing space in many instances of "shoulder blade" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index ee5c02f..f3511f6 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -345,6 +345,9 @@ function getBodyXML(chapter, contentEl) { xml = xml.replace(/(\b)tv(\b)/g, "$1TV$2"); xml = xml.replace(/T\.V\./g, "TV"); + // This is commonly misspelled. + xml = xml.replace(/([Ss])houlderblade/g, "$1houlder blade"); + // There's no reason why these should be capitalized. (Note that they never appear at the beginning of any sentences.) xml = xml.replace(/Halberd/g, "halberd"); xml = xml.replace(/Loft/g, "loft"); From 3e2bc4a4479c15a67adbca2bf0af6ea3e266ee0e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 22:27:02 -0400 Subject: [PATCH 013/186] Fix train station capitalization --- lib/convert-worker.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index f3511f6..db0d832 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -377,12 +377,10 @@ function getBodyXML(chapter, contentEl) { // Place names need to always be capitalized xml = xml.replace(/North end/g, "North End"); - xml = xml.replace(/Stonemast avenue/g, "Stonemast Avenue"); - xml = xml.replace(/Shale avenue/g, "Shale Avenue"); - xml = xml.replace(/Lord street/g, "Lord Street"); - xml = xml.replace(/Slater street/g, "Slater Street"); - xml = xml.replace(/Hollow point/g, "Hollow Point"); - xml = xml.replace(/Cedar point/g, "Cedar Point"); + xml = xml.replace(/(Stonemast|Shale) avenue/g, "$1 Avenue"); + xml = xml.replace(/(Lord|Slater) street/g, "$1 Street"); + xml = xml.replace(/(Hollow|Cedar) point/g, "$1 Point"); + xml = xml.replace(/(Norwalk|Fenway|Stratford) station/g, "$1 Station"); // These are usually not italicized, but sometimes are. Other foreign-language names (like Yàngbǎn) are not // italicized, so we go in the direction of removing the italics. From 304955df72ba0f0de56bd0d5c63130759412d21b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 22:35:29 -0400 Subject: [PATCH 014/186] Settle on lowercasing "kiss and kill" --- lib/substitutions.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index d1a7ad9..c7cac21 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4779,6 +4779,10 @@ { "before": "…It’s not so important when", "after": "…it’s not so important when" + }, + { + "before": "Kiss and Kill.", + "after": "Kiss and kill." } ], "https://www.parahumans.net/2018/04/17/pitch-6-2/": [ @@ -5217,6 +5221,10 @@ { "before": "You- upstairs.", "after": "You—upstairs." + }, + { + "before": "all the Kiss and Kill things", + "after": "all the kiss and kill things" } ], "https://www.parahumans.net/2019/02/12/heavens-12-1/": [ From e8921bbbfe142c4c1d9b7cebfd6230046ac06858 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 22:39:47 -0400 Subject: [PATCH 015/186] Fix more cases of extra spaces after periods --- lib/convert-worker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index db0d832..1a1e64d 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -135,7 +135,7 @@ function getBodyXML(chapter, contentEl) { // If they show up three in a row, then let them live. Otherwise, they die. // Also remove any run of them after a period. xml = xml.replace(/([^\xA0])\xA0\xA0?([^\xA0])/g, "$1 $2"); - xml = xml.replace(/\.\xA0+\s*/, ". "); + xml = xml.replace(/\.\x20*\xA0[\xA0\x20]*/, ". "); function fixEms() { // Fix recurring broken-up or erroneous s From 3905965134cdb7d42f0893a48031ab66570db25a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 22:50:11 -0400 Subject: [PATCH 016/186] Fix missing periods at the end of quotations --- lib/convert-worker.js | 1 + lib/substitutions.json | 74 +++++------------------------------------- 2 files changed, 10 insertions(+), 65 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 1a1e64d..a0a7528 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -179,6 +179,7 @@ function getBodyXML(chapter, contentEl) { xml = xml.replace(/'/g, "’"); xml = xml.replace(/’([A-Za-z]+)’/g, "‘$1’"); xml = xml.replace(/‘Sup/g, "’Sup"); + xml = xml.replace(/([a-z])”<\/p>/g, "$1.”

"); } // These interact with each other, so do them a few times. diff --git a/lib/substitutions.json b/lib/substitutions.json index c7cac21..6e78aa3 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -74,7 +74,7 @@ ], "https://parahumans.wordpress.com/2011/07/09/insinuation-2-2/": [ { - "before": "simply, “Bug”", + "before": "simply, “Bug.”", "after": "simply, ‘Bug’." }, { @@ -361,10 +361,6 @@ } ], "https://parahumans.wordpress.com/2011/10/29/shell-4-11/": [ - { - "before": "eyes, I see”", - "after": "eyes, I see.”" - }, { "before": "bugging the f-, uh", "after": "bugging the f—, uh" @@ -679,10 +675,6 @@ } ], "https://parahumans.wordpress.com/2012/01/28/buzz-7-4/": [ - { - "before": "on the way”", - "after": "on the way.”" - }, { "before": "better I’ll feel,” he was", "after": "better I’ll feel.” He was" @@ -693,10 +685,6 @@ } ], "https://parahumans.wordpress.com/2012/01/31/buzz-7-5/": [ - { - "before": "in force”", - "after": "in force.”" - }, { "before": "realized,” Brian spoke. “I", "after": "realized,” Brian spoke, “I" @@ -1751,10 +1739,6 @@ } ], "https://parahumans.wordpress.com/2012/06/05/infestation-11-6/": [ - { - "before": "we do here”", - "after": "we do here.”" - }, { "before": "&", "after": "and" @@ -2276,10 +2260,6 @@ { "before": "volunteered, asked
\n
to", "after": "volunteered, asked to" - }, - { - "before": "her father’s abilities”", - "after": "her father’s abilities.”" } ], "https://parahumans.wordpress.com/2012/10/25/interlude-15-donation-bonus-2/": [ @@ -2418,12 +2398,6 @@ "after": "that,” Grue said, “is" } ], - "https://parahumans.wordpress.com/2012/11/29/interlude-16-donation-bonus/": [ - { - "before": "in the darkness”", - "after": "in the darkness.”" - } - ], "https://parahumans.wordpress.com/2012/12/01/monarch-16-3/": [ { "before": "two teams” I said", @@ -2443,10 +2417,6 @@ } ], "https://parahumans.wordpress.com/2012/12/11/monarch-16-6/": [ - { - "before": "Lost in thought”", - "after": "Lost in thought.”" - }, { "before": "—But we definitely", "after": "—but we definitely" @@ -2513,10 +2483,6 @@ } ], "https://parahumans.wordpress.com/2013/01/05/monarch-16-13/": [ - { - "before": "word on both points”", - "after": "word on both points.”" - }, { "before": "doubts,” I said. “You", "after": "doubts,” I said, “you" @@ -3343,12 +3309,6 @@ "after": "And,” I said, “we" } ], - "https://parahumans.wordpress.com/2013/06/11/crushed-24-2/": [ - { - "before": "To Behemoth”", - "after": "To Behemoth.”" - } - ], "https://parahumans.wordpress.com/2013/06/15/crushed-24-3/": [ { "before": "Phir Sē echoed me. “", @@ -3507,10 +3467,6 @@ "before": "the other-.", "after": "the other—" }, - { - "before": "“Yeah”", - "after": "“Yeah.”" - }, { "before": "Vista,” he said. “Another", "after": "Vista,” he said, “another" @@ -3687,10 +3643,6 @@ } ], "https://parahumans.wordpress.com/2013/08/31/cockroaches-28-1/": [ - { - "before": "lot of supplies in”", - "after": "lot of supplies in.”" - }, { "before": "could save issue", "after": "could say issue" @@ -3799,10 +3751,6 @@ } ], "https://parahumans.wordpress.com/2013/09/17/interlude-28/": [ - { - "before": "“Password protected”", - "after": "“Password protected.”" - }, { "before": "Case fifty-threes", "after": "case fifty-threes" @@ -4213,10 +4161,6 @@ "before": "property of Nero", "after": "property of Nero" }, - { - "before": "“Stay, Hooligan”", - "after": "“Stay, Hooligan.”" - }, { "before": "Nero, Why don’t we get", "after": "Nero, why don’t we get" @@ -4243,10 +4187,6 @@ "before": "vageuly", "after": "vaguely" }, - { - "before": "standby”", - "after": "standby.”" - }, { "before": "minutes passed. the chance rose", "after": "minutes passed. The chance rose" @@ -4287,10 +4227,6 @@ "before": "the ‘cage", "after": "the ’cage" }, - { - "before": "camera follows”", - "after": "camera follows.”" - }, { "before": "background of his mind

", "after": "background of his mind.

" @@ -4663,6 +4599,10 @@ { "before": "Peaches and—You mean peachy", "after": "Peaches and— You mean peachy" + }, + { + "before": "Victoria” she", + "after": "Victoria,” she" } ], "https://www.parahumans.net/2018/03/20/shadow-5-7/": [ @@ -4799,6 +4739,10 @@ { "before": "wall of bodies. the woman behind", "after": "wall of bodies. The woman behind" + }, + { + "before": "dying, motherfuckers” the bearded", + "after": "dying, motherfuckers,” the bearded" } ], "https://www.parahumans.net/2018/04/24/pitch-6-4/": [ From 695bb24d3c5030571b247a415d1feb289eab95fd Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 22:56:38 -0400 Subject: [PATCH 017/186] Fix missing commas at the end of quotations --- lib/substitutions.json | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 6e78aa3..08e0cab 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -682,6 +682,10 @@ { "before": "In short, It", "after": "In short, it" + }, + { + "before": "phone, Alec” Brian spoke", + "after": "phone, Alec,” Brian spoke" } ], "https://parahumans.wordpress.com/2012/01/31/buzz-7-5/": [ @@ -2080,6 +2084,12 @@ "after": "leaving the space that Mom had once occupied" } ], + "https://parahumans.wordpress.com/2012/07/14/plague-12-6/": [ + { + "before": "had their shots” I said", + "after": "had their shots,” I said" + } + ], "https://parahumans.wordpress.com/2012/07/17/plague-12-7/": [ { "before": "costumes: The", @@ -4887,6 +4897,12 @@ "after": "no words. And there" } ], + "https://www.parahumans.net/2018/06/02/eclipse-x-8/": [ + { + "before": "Bonesaw” Blasto said", + "after": "Bonesaw,” Blasto said" + } + ], "https://www.parahumans.net/2018/06/09/torch-7-6/": [ { "before": "I saw. the scans of the woman", @@ -4903,6 +4919,10 @@ { "before": "abused by the the transition", "after": "abused by the transition" + }, + { + "before": "poking around” I said", + "after": "poking around,” I said" } ], "https://www.parahumans.net/2018/06/23/torch-7-10/": [ @@ -4959,6 +4979,12 @@ "after": "

Mom and Dad.

" } ], + "https://www.parahumans.net/2018/07/14/beacon-8-4/": [ + { + "before": "use their surveillance” Kenzie said", + "after": "use their surveillance,” Kenzie said" + } + ], "https://www.parahumans.net/2018/07/17/beacon-8-5/": [ { "before": "on the offensive. chains whirled", @@ -4975,6 +5001,12 @@ "after": "above me. The sky was dark" } ], + "https://www.parahumans.net/2018/07/28/beacon-8-8/": [ + { + "before": "“Yeah, that’s breaker” I said.", + "after": "“Yeah, that’s breaker,” I said." + } + ], "https://www.parahumans.net/2018/07/31/beacon-8-9/": [ { "before": "you know that dad and I saying", @@ -5215,6 +5247,10 @@ { "before": "wrists behind them around around the stomach", "after": "wrists behind them around the stomach" + }, + { + "before": "back pouch” my mom said", + "after": "back pouch,” my mom said" } ], "https://www.parahumans.net/2019/03/16/heavens-12-7/": [ @@ -5559,6 +5595,12 @@ "after": "Couple of times a month" } ], + "https://www.parahumans.net/2020/01/01/interlude-19-a/": [ + { + "before": "“I’m fine” Egg said", + "after": "“I’m fine,” Egg said" + } + ], "https://www.parahumans.net/2020/01/04/infrared-19-3/": [ { "before": "I thought of dad, seeing him hug my mother", @@ -5633,12 +5675,20 @@ { "before": "Lessons from mom, age thirteen", "after": "Lessons from Mom, age thirteen" + }, + { + "before": "relatively speaking” Number Five", + "after": "relatively speaking,” Number Five" } ], "https://www.parahumans.net/2020/02/08/infrared-19-9/": [ { "before": "had insisted she or dad drive us", "after": "had insisted she or Dad drive us" + }, + { + "before": "you know about” my Aunt Sarah said", + "after": "you know about,” my Aunt Sarah said" } ], "https://www.parahumans.net/2020/02/11/infrared-19-f/": [ From 367b69221a5eeb34be107ad3f59c961134df18ad Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 22 Oct 2020 23:09:51 -0400 Subject: [PATCH 018/186] Fix missing periods at end of sentences in Ward --- lib/substitutions.json | 114 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 08e0cab..d7b4143 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4581,6 +4581,12 @@ "after": "hair he had. It was long" } ], + "https://www.parahumans.net/2018/02/24/shadow-5-1/": [ + { + "before": "thermos of regular tap water

", + "after": "thermos of regular tap water.

" + } + ], "https://www.parahumans.net/2018/03/06/shadow-5-4/": [ { "before": "It’s—My forcefield moves", @@ -4661,6 +4667,10 @@ { "before": "with Masters in mind", "after": "with masters in mind" + }, + { + "before": "paralyzed started moving

", + "after": "paralyzed started moving.

" } ], "https://www.parahumans.net/2018/03/31/shadow-5-11/": [ @@ -4781,6 +4791,10 @@ { "before": "used flight to stead myself", "after": "used flight to steady myself" + }, + { + "before": "Capes converged, ready to guard

", + "after": "Capes converged, ready to guard.

" } ], "https://www.parahumans.net/2018/05/05/pitch-6-7/": [ @@ -4897,6 +4911,18 @@ "after": "no words. And there" } ], + "https://www.parahumans.net/2018/05/31/eclipse-x-6/": [ + { + "before": "a desperate edge to her feelings

", + "after": "a desperate edge to her feelings.

" + } + ], + "https://www.parahumans.net/2018/06/01/eclipse-x-7/": [ + { + "before": "dotting the ‘i’s and slashing the ‘Q’s

", + "after": "dotting the ‘i’s and slashing the ‘Q’s.

" + } + ], "https://www.parahumans.net/2018/06/02/eclipse-x-8/": [ { "before": "Bonesaw” Blasto said", @@ -4983,6 +5009,10 @@ { "before": "use their surveillance” Kenzie said", "after": "use their surveillance,” Kenzie said" + }, + { + "before": "and then hit buttons

", + "after": "and then hit buttons.

" } ], "https://www.parahumans.net/2018/07/17/beacon-8-5/": [ @@ -5023,6 +5053,12 @@ "after": "who are free now. They’re out there" } ], + "https://www.parahumans.net/2018/08/18/beacon-interlude-8-y/": [ + { + "before": "A sufficient impact or distraction

", + "after": "A sufficient impact or distraction.

" + } + ], "https://www.parahumans.net/2018/08/28/gleaming-9-3/": [ { "before": "Chris in the process. stretched on his way", @@ -5095,6 +5131,12 @@ "after": "You let Mom talk and" } ], + "https://www.parahumans.net/2018/10/27/polarize-10-2/": [ + { + "before": "Sveta said, leaning on me

", + "after": "Sveta said, leaning on me.

" + } + ], "https://www.parahumans.net/2018/11/03/polarize-10-4/": [ { "before": "services of mercenaries. depending on timing", @@ -5127,6 +5169,12 @@ "after": "confines of the suit, and rearranged herself" } ], + "https://www.parahumans.net/2018/11/24/interlude-10-x/": [ + { + "before": "that would be in time Hopefully

", + "after": "that would be in time. Hopefully.

" + } + ], "https://www.parahumans.net/2018/11/27/polarize-10-10/": [ { "before": "all about how Masters have", @@ -5147,6 +5195,10 @@ { "before": "Reminded me of mom", "after": "Reminded me of Mom" + }, + { + "before": "more fragile than it should have been

", + "after": "more fragile than it should have been.

" } ], "https://www.parahumans.net/2019/01/15/blinding-11-8/": [ @@ -5159,6 +5211,12 @@ "after": "Victoria-flesh" } ], + "https://www.parahumans.net/2019/01/19/interlude-11-b/": [ + { + "before": "loading up trucks with basic supplies

", + "after": "loading up trucks with basic supplies.

" + } + ], "https://www.parahumans.net/2019/01/26/blinding-11-9/": [ { "before": "someone had been been called at three", @@ -5241,6 +5299,10 @@ { "before": "mom, are you okay being", "after": "Mom, are you okay being" + }, + { + "before": "we didn’t resume the discussion

", + "after": "we didn’t resume the discussion.

" } ], "https://www.parahumans.net/2019/03/09/heavens-12-6/": [ @@ -5303,6 +5365,10 @@ { "before": "walls stone and wood. the building", "after": "walls stone and wood. The building" + }, + { + "before": "he asked

", + "after": "he asked.

" } ], "https://www.parahumans.net/2019/04/13/black-13-4/": [ @@ -5421,6 +5487,12 @@ "after": "wall met ceiling. The wall was smooth" } ], + "https://www.parahumans.net/2019/07/09/dying-15-2/": [ + { + "before": "I told Precipice

", + "after": "I told Precipice.

" + } + ], "https://www.parahumans.net/2019/07/13/dying-15-3/": [ { "before": "Didn’t ask about mom, dad, or", @@ -5439,6 +5511,12 @@ "after": "worth of water" } ], + "https://www.parahumans.net/2019/07/23/dying-15-6/": [ + { + "before": "The teams had finished picking

", + "after": "The teams had finished picking.

" + } + ], "https://www.parahumans.net/2019/07/27/dying-15-7/": [ { "before": "stranger or Master in", @@ -5503,6 +5581,12 @@ "after": "carried on, out of" } ], + "https://www.parahumans.net/2019/09/28/from-within-16-z/": [ + { + "before": "ducked their heads down and hurried

", + "after": "ducked their heads down and hurried.

" + } + ], "https://www.parahumans.net/2019/10/01/sundown-17-1/": [ { "before": "mind of dad after his head injury", @@ -5541,12 +5625,20 @@ { "before": "art good enough to to keep forever", "after": "art good enough to keep forever" + }, + { + "before": "Golem explained

", + "after": "Golem explained.

" } ], "https://www.parahumans.net/2019/11/02/sundown-17-10/": [ { "before": "wanted you to go to mom if you", "after": "wanted you to go to Mom if you" + }, + { + "before": "that didn’t betray too much

", + "after": "that didn’t betray too much.

" } ], "https://www.parahumans.net/2019/11/09/interlude-17-y-sundown/": [ @@ -5581,6 +5673,10 @@ { "before": "you go. no joke, no wiggle", "after": "you go. No joke, no wiggle" + }, + { + "before": "some business headquarters I was in

", + "after": "some business headquarters I was in.

" } ], "https://www.parahumans.net/2019/12/03/radiation-18-6/": [ @@ -5595,6 +5691,16 @@ "after": "Couple of times a month" } ], + "https://www.parahumans.net/2019/12/28/infrared-19-2/": [ + { + "before": "a violent exclamation

", + "after": "a violent exclamation.

" + }, + { + "before": "

Three seconds

", + "after": "

Three seconds.

" + } + ], "https://www.parahumans.net/2020/01/01/interlude-19-a/": [ { "before": "“I’m fine” Egg said", @@ -5627,6 +5733,14 @@ { "before": "Love Lost is Master-class", "after": "Love Lost is master-class" + }, + { + "before": "opportunity to handpick people

", + "after": "opportunity to handpick people.

" + }, + { + "before": "pause, drew its attention

", + "after": "pause, drew its attention.

" } ], "https://www.parahumans.net/2020/01/14/infrared-19-c/": [ From 6406a0f37072665c4b3a3bfdaefa5d46e2f0060e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 20:28:48 -0400 Subject: [PATCH 019/186] Spot fixes for Ward through Torch 7.x MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also some general fixes to "TV", "okay", and "’cuz". --- lib/convert-worker.js | 10 +-- lib/substitutions.json | 158 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+), 4 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index a0a7528..c3b4518 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -179,6 +179,7 @@ function getBodyXML(chapter, contentEl) { xml = xml.replace(/'/g, "’"); xml = xml.replace(/’([A-Za-z]+)’/g, "‘$1’"); xml = xml.replace(/‘Sup/g, "’Sup"); + xml = xml.replace(/‘cuz/g, "’cuz"); xml = xml.replace(/([a-z])”<\/p>/g, "$1.”

"); } @@ -344,7 +345,7 @@ function getBodyXML(chapter, contentEl) { // This is usually spelled "TV" but sometimes the other ways. Normalize. xml = xml.replace(/(\b)tv(\b)/g, "$1TV$2"); - xml = xml.replace(/T\.V\./g, "TV"); + xml = xml.replace(/t\.v\./ig, "TV"); // This is commonly misspelled. xml = xml.replace(/([Ss])houlderblade/g, "$1houlder blade"); @@ -392,11 +393,12 @@ function getBodyXML(chapter, contentEl) { xml = xml.replace(/Califa de Perro([^<]*)<\/em>/g, "Califa de Perro$1"); xml = xml.replace(/Turanta([^<]*)<\/em>/g, "Turanta$1"); - // "okay" is preferred to "ok". This sometimes gets changed back via substitutions.json when people are writing notes - // and thus probably the intention was to be less formal. Also it seems per https://en.wikipedia.org/wiki/A-ok the - // "A" in "A-okay" should be capitalized. + // "okay" is preferred to "ok" or "o.k.". This sometimes gets changed back via substitutions.json when people are + // writing notes and thus probably the intention was to be less formal. Also it seems per + // https://en.wikipedia.org/wiki/A-ok the "A" in "A-okay" should be capitalized. xml = xml.replace(/Ok([,. ])/g, "Okay$1"); xml = xml.replace(/([^a-zA-Z])ok([^a])/g, "$1okay$2"); + xml = xml.replace(/([^a-zA-Z])o\.k\.([^a])/g, "$1okay$2"); xml = xml.replace(/a-okay/g, "A-okay"); // Signal(l)ing/signal(l)ed are spelled both ways. Both are acceptable in English. Let's standardize on single-L. diff --git a/lib/substitutions.json b/lib/substitutions.json index d7b4143..458adbb 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -3398,6 +3398,10 @@ { "before": "There’ more", "after": "There’s more" + }, + { + "before": "White capped", + "after": "White-capped" } ], "https://parahumans.wordpress.com/2013/07/09/scarab-25-4/": [ @@ -4903,42 +4907,156 @@ { "before": "answer the the second question", "after": "answer the second question" + }, + { + "before": "discuss goals,” Jessica said. “We think", + "after": "discuss goals,” Jessica said, “we think" + } + ], + "https://www.parahumans.net/2018/05/29/eclipse-x-4/": [ + { + "before": "ma‘am", + "after": "ma’am" } ], "https://www.parahumans.net/2018/05/30/eclipse-x-5/": [ { "before": "no words. and there", "after": "no words. And there" + }, + { + "before": "hesitated to long", + "after": "hesitated too long" + }, + { + "before": "back.,", + "after": "back," + }, + { + "before": "Wardens’ ID badges", + "after": "Wardens ID badges" } ], "https://www.parahumans.net/2018/05/31/eclipse-x-6/": [ { "before": "a desperate edge to her feelings

", "after": "a desperate edge to her feelings.

" + }, + { + "before": "—To need at least three if", + "after": "—to need at least three if" + }, + { + "before": "We—if you stop and", + "after": "We— If you stop and" + }, + { + "before": "…We’re not especially", + "after": "…we’re not especially" } ], "https://www.parahumans.net/2018/06/01/eclipse-x-7/": [ { "before": "dotting the ‘i’s and slashing the ‘Q’s

", "after": "dotting the ‘i’s and slashing the ‘Q’s.

" + }, + { + "before": "—And they have thinkers", + "after": "—and they have thinkers" + }, + { + "before": "You’re leaving Boston?", + "after": "You’re leaving Boston?" + }, + { + "before": "—Assign her house arrest", + "after": "—assign her house arrest" + }, + { + "before": "Mr… Chief Armstrong", + "after": "Mr.… Chief Armstrong" + }, + { + "before": "The there were monsters out there", + "after": "That there were monsters out there" + }, + { + "before": "“I’m not—I wasn’t—”", + "after": "“I’m not— I wasn’t—”" } ], "https://www.parahumans.net/2018/06/02/eclipse-x-8/": [ { "before": "Bonesaw” Blasto said", "after": "Bonesaw,” Blasto said" + }, + { + "before": "“Well,” Fappy said. “You know Stan,", + "after": "“Well,” Fappy said, “you know Stan," + }, + { + "before": "it or not,” Jack said. “I want", + "after": "it or not,” Jack said, “I want" + } + ], + "https://www.parahumans.net/2018/06/05/torch-7-5/": [ + { + "before": "
\n

I don’t", + "after": "

I don’t" + }, + { + "before": "Chris snorted, “Count yourself lucky.", + "after": "Chris snorted. “Count yourself lucky." + }, + { + "before": "was your crush Jhett Marion?", + "after": "was your crush Jhett Marion?" + }, + { + "before": "thing aside,” I said. “I mean", + "after": "thing aside,” I said, “I mean" + }, + { + "before": "Fifty…seven", + "after": "Fifty… seven" + }, + { + "before": "brass capped", + "after": "brass-capped" } ], "https://www.parahumans.net/2018/06/09/torch-7-6/": [ { "before": "I saw. the scans of the woman", "after": "I saw. The scans of the woman" + }, + { + "before": "the woman withw the sunglasses", + "after": "the woman with the sunglasses" } ], "https://www.parahumans.net/2018/06/12/torch-7-7/": [ { "before": "and I can call dad", "after": "and I can call Dad" + }, + { + "before": "five by three inch", + "after": "five-by-three inch" + }, + { + "before": "staying calm, her voice quieter, “Said your", + "after": "staying calm, her voice quieter, “said your" + } + ], + "https://www.parahumans.net/2018/06/16/torch-7-8/": [ + { + "before": "you asked him,” Sveta said. “He’d say", + "after": "you asked him,” Sveta said, “he’d say" + }, + { + "before": "Looksee, You mentioned", + "after": "Looksee, you mentioned" } ], "https://www.parahumans.net/2018/06/19/torch-7-9/": [ @@ -4949,6 +5067,10 @@ { "before": "poking around” I said", "after": "poking around,” I said" + }, + { + "before": "Loss as he said it, “Because", + "after": "Loss as he said it, “because" } ], "https://www.parahumans.net/2018/06/23/torch-7-10/": [ @@ -4959,6 +5081,22 @@ { "before": "Kenzie almost yipped out out a, “No.”", "after": "Kenzie almost yipped out, a “No.”" + }, + { + "before": "thought things through mid-sentence, “Is that for", + "after": "thought things through mid-sentence, “is that for" + }, + { + "before": "he goes to Church with them", + "after": "he goes to church with them" + }, + { + "before": "maybe,” She said, smiling", + "after": "maybe,” she said, smiling" + }, + { + "before": "fighting, ‘rene", + "after": "fighting, ’rene" } ], "https://www.parahumans.net/2018/06/26/torch-interlude-7-x/": [ @@ -4997,6 +5135,26 @@ { "before": "loved—loved- for my", "after": "loved—loved—for my" + }, + { + "before": "pitched to be heard, “But her antics", + "after": "pitched to be heard, “but her antics" + }, + { + "before": "—Really truly, I hope", + "after": "—really truly, I hope" + }, + { + "before": "big guy said, “Is our mood", + "after": "big guy said, “is our mood" + }, + { + "before": "thing we try to do,” he said. “Is we ask", + "after": "thing we try to do,” he said, “is we ask" + }, + { + "before": "Keith said. “You decide", + "after": "Keith said, “you decide" } ], "https://www.parahumans.net/2018/07/07/beacon-8-2/": [ From ab28acfd9af94f506abff0e1d6701c3e3ce593f6 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 20:32:19 -0400 Subject: [PATCH 020/186] Remove erroneous hyphen in "preemptive(ly)" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index c3b4518..d9f45dd 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -426,6 +426,9 @@ function getBodyXML(chapter, contentEl) { xml = xml.replace(/well armed/g, "well-armed"); xml = xml.replace(/able bodied/g, "able-bodied"); + // Preemptive(ly) is often hyphenated (not always). It should not be. + xml = xml.replace(/([Pp])re-emptive/g, "$1reemptive"); + // One-off fixes (substitutions[chapter.url] || []).forEach(substitution => { if (substitution.before) { From 6b5bedcbc721e31af286edb220f7d3ac2bd31569 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 20:34:01 -0400 Subject: [PATCH 021/186] =?UTF-8?q?Use=20en=20dash=20instead=20of=20hyphen?= =?UTF-8?q?-minus=20for=20"G=E2=80=93N"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index d9f45dd..c853b9c 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -266,6 +266,7 @@ function getBodyXML(chapter, contentEl) { xml = xml.replace(/Tristan-Byron/g, "Tristan–Byron"); xml = xml.replace(/Earth-Gimel/g, "Earth–Gimel"); xml = xml.replace(/Gimel-Europe/g, "Gimel–Europe"); + xml = xml.replace(/G-N/g, "G–N"); xml = xml.replace(/Imp-Damsel/g, "Imp–Damsel"); xml = xml.replace(/Damsel-Ashley/g, "Damsel–Ashley"); xml = xml.replace(/Antares-Anelace/g, "Antares–Anelace"); From 4fbaa0e8db262b185d45719a605a164da9163f6a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 20:54:25 -0400 Subject: [PATCH 022/186] Settle on "Patrol " and "the Patrol" This is reversing the decision made in 84e0d83bd1a84f098a201e7362d60e07d6aec42f, and extending the revised decision to other Patrol-related terms. --- lib/convert-worker.js | 22 ++++++++++++++-------- lib/convert.js | 4 ++-- lib/worm-scraper.js | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index c853b9c..87dcd1e 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -6,11 +6,11 @@ const substitutions = require("./substitutions.json"); workerpool.worker({ convertChapter }); -function convertChapter(chapter, inputPath, outputPath) { +function convertChapter(chapter, book, inputPath, outputPath) { const contents = fs.readFileSync(inputPath, { encoding: "utf-8" }); const rawChapterJSDOM = new JSDOM(contents); - const output = getChapterString(chapter, rawChapterJSDOM.window.document); + const output = getChapterString(chapter, book, rawChapterJSDOM.window.document); // TODO: this should probably not be necessary... jsdom bug I guess!? rawChapterJSDOM.window.close(); @@ -18,8 +18,8 @@ function convertChapter(chapter, inputPath, outputPath) { fs.writeFileSync(outputPath, output); } -function getChapterString(chapter, rawChapterDoc) { - const body = getBodyXML(chapter, rawChapterDoc.querySelector(".entry-content")); +function getChapterString(chapter, book, rawChapterDoc) { + const body = getBodyXML(chapter, book, rawChapterDoc.querySelector(".entry-content")); return ` @@ -32,7 +32,7 @@ ${body} `; } -function getBodyXML(chapter, contentEl) { +function getBodyXML(chapter, book, contentEl) { // Remove initial Next Chapter and Previous Chapter

contentEl.removeChild(contentEl.firstElementChild); @@ -337,9 +337,15 @@ function getBodyXML(chapter, contentEl) { // ReSound's name is sometimes miscapitalized. The word is never used in a non-name context. xml = xml.replace(/Resound/g, "ReSound"); - // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". I can see - // arguments for any of them, so let's go with the most prevalent: "patrol block". - xml = xml.replace(/([^ ]) Patrol (?:B|b)lock/g, "$1 patrol block"); + // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". "patrol + // group" is always lowercased. It seems like "Patrol" is a proper name, and is used as a capitalized modifier in + // other contexts (e.g. Patrol leader). So let's standardize on "Patrol ". + xml = xml.replace(/patrol (block|group|leader|guard|student|uniform|squad|soldier|officer|crew|girl)/ig, + (_, $1) => `Patrol ${$1.toLowerCase()}`); + // This always works in Ward and has a few false positives in Worm, where it is never needed: + if (book === "ward") { + xml = xml.replace(/the patrol/g, "the Patrol"); + } // This is sometimes missing its capitalization. xml = xml.replace(/the birdcage/g, "the Birdcage"); diff --git a/lib/convert.js b/lib/convert.js index 8ff6509..e7555cb 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -4,7 +4,7 @@ const fs = require("fs").promises; const workerpool = require("workerpool"); const cliProgress = require("cli-progress"); -module.exports = async (cachePath, manifestPath, contentPath, concurrentJobs) => { +module.exports = async (cachePath, manifestPath, contentPath, book, concurrentJobs) => { const manifestContents = await fs.readFile(manifestPath, { encoding: "utf-8" }); const chapters = JSON.parse(manifestContents); @@ -27,7 +27,7 @@ module.exports = async (cachePath, manifestPath, contentPath, concurrentJobs) => const destFileName = `${path.basename(chapter.filename, ".html")}.xhtml`; const outputPath = path.resolve(contentPath, destFileName); - await pool.exec("convertChapter", [chapter, inputPath, outputPath]); + await pool.exec("convertChapter", [chapter, book, inputPath, outputPath]); progress.increment(); })); diff --git a/lib/worm-scraper.js b/lib/worm-scraper.js index 381f9eb..556a0df 100644 --- a/lib/worm-scraper.js +++ b/lib/worm-scraper.js @@ -86,7 +86,7 @@ if (argv._.includes("convert")) { commands.push(() => { return fs.rmdir(chaptersPath, { recursive: true }) .then(() => fs.mkdir(chaptersPath, { recursive: true })) - .then(() => convert(cachePath, manifestPath, chaptersPath, argv.jobs)); + .then(() => convert(cachePath, manifestPath, chaptersPath, argv.book, argv.jobs)); }); } From 0fc22d064dd41d7df350be29b9a55ddc8c7c3d2b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 20:59:32 -0400 Subject: [PATCH 023/186] Remove periods from a few instances of PRT --- lib/substitutions.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 458adbb..7d11c61 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2630,6 +2630,14 @@ { "before": "exaggerated shrug

", "after": "exaggerated shrug.

" + }, + { + "before": "the P.R.T. uniforms", + "after": "the PRT uniforms" + }, + { + "before": "injured P.R.T. soldier", + "after": "injured PRT soldier" } ], "https://parahumans.wordpress.com/2013/01/15/migration-17-8/": [ @@ -5811,6 +5819,12 @@ "after": "had his powers. The forcefield above" } ], + "https://www.parahumans.net/2019/11/16/radiation-18-1/": [ + { + "before": "worked for the P.R.T.", + "after": "worked for the PRT." + } + ], "https://www.parahumans.net/2019/11/19/radiation-18-2/": [ { "before": "looking for mom in the crowd", @@ -5999,6 +6013,12 @@ "after": "shaping it as it rolled out. It became a circular" } ], + "https://www.parahumans.net/2020/04/07/last-20-11/": [ + { + "before": "had harangued the P.R.T., even", + "after": "had harangued the PRT, even" + } + ], "https://www.parahumans.net/2020/04/21/last-20-e4/": [ { "before": "grown around the the maille sheath", From 50dce93587dbf1344211d584df013966df6e6b63 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 21:08:51 -0400 Subject: [PATCH 024/186] Remove empty paragraph starting Ward Daybreak 1.8 --- lib/substitutions.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 7d11c61..a26f014 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4362,6 +4362,10 @@ } ], "https://www.parahumans.net/2017/12/01/daybreak-1-8/": [ + { + "before": "

\n

", + "after": "

" + }, { "before": "parahumans online", "after": "Parahumans Online" From fb933228231e267960a705b76c0d857aa2313ca2 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 21:19:56 -0400 Subject: [PATCH 025/186] Modernize DOM manipulation code jsdom, and JavaScript, have gotten nicer since this was first written. --- lib/convert-worker.js | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 87dcd1e..8d3b2e4 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -34,21 +34,21 @@ ${body} function getBodyXML(chapter, book, contentEl) { // Remove initial Next Chapter and Previous Chapter

- contentEl.removeChild(contentEl.firstElementChild); + contentEl.firstElementChild.remove(); // Remove everything after the last

(e.g. analytics

s) const lastP = contentEl.querySelector("p:last-of-type"); while (contentEl.lastElementChild !== lastP) { - contentEl.removeChild(contentEl.lastElementChild); + contentEl.lastElementChild.remove(); } // Remove empty

s or Last Chapter/Next Chapter

s while (isEmptyOrGarbage(contentEl.lastElementChild)) { - contentEl.removeChild(contentEl.lastElementChild); + contentEl.lastElementChild.remove(); } // Remove redundant attributes and style - Array.prototype.forEach.call(contentEl.children, child => { + for (const child of contentEl.children) { if (child.getAttribute("dir") === "ltr") { child.removeAttribute("dir"); } @@ -63,46 +63,42 @@ function getBodyXML(chapter, book, contentEl) { if (child.getAttribute("style") === "text-align:left;padding-left:30px;") { child.setAttribute("style", "padding-left:30px;"); } - }); + } // Remove empty s and s // Remove style attributes from them, as they're always messed up. - const ems = contentEl.querySelectorAll("em, i"); - Array.prototype.forEach.call(ems, em => { + for (const em of contentEl.querySelectorAll("em, i")) { if (em.textContent.trim() === "") { - const replacement = contentEl.ownerDocument.createTextNode(" "); - em.parentNode.replaceChild(replacement, em); + em.replaceWith(contentEl.ownerDocument.createTextNode(" ")); } else { em.removeAttribute("style"); } - }); + } // In https://parahumans.wordpress.com/2013/01/05/monarch-16-13/ there are some

s that should be

s O_o - const addresses = contentEl.querySelectorAll("address"); - Array.prototype.forEach.call(addresses, address => { + for (const address of contentEl.querySelectorAll("address")) { const p = contentEl.ownerDocument.createElement("p"); p.innerHTML = address.innerHTML; - address.parentNode.replaceChild(p, address); - }); + address.replaceWith(p); + } // Every except underline ones is pointless at best and frequently messed up. (Weird font size, line spacing, // etc.) - const spans = contentEl.querySelectorAll("span"); - Array.prototype.forEach.call(spans, span => { + for (const span of contentEl.querySelectorAll("span")) { if (span.getAttribute("style") === "text-decoration:underline;") { - return; + continue; } if (span.textContent.trim() === "") { - span.parentNode.removeChild(span); + span.remove(); } else { const docFrag = contentEl.ownerDocument.createDocumentFragment(); while (span.firstChild) { docFrag.appendChild(span.firstChild); } - span.parentNode.replaceChild(docFrag, span); + span.replaceWith(docFrag); } - }); + } // In Ward, CloudFlare email protection obfuscates the email addresses: // https://usamaejaz.com/cloudflare-email-decoding/ From 699c9be71f099d7ede04b6d089ae95bf5c52111c Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 21:20:30 -0400 Subject: [PATCH 026/186] Uniformize indentation between Ward and Worm --- lib/convert-worker.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 8d3b2e4..c29163c 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -57,11 +57,16 @@ function getBodyXML(chapter, book, contentEl) { // useless) child.removeAttribute("align"); - if (child.getAttribute("style") === "text-align:left;") { + const style = child.getAttribute("style"); + if (style === "text-align:left;" || style === "text-align: left;") { child.removeAttribute("style"); } - if (child.getAttribute("style") === "text-align:left;padding-left:30px;") { - child.setAttribute("style", "padding-left:30px;"); + + // Worm uses 30px; Ward mostly uses 40px but sometimes uses 30px/60px. Let's standardize on 30px. + if (style === "text-align:left;padding-left:30px;" || + style === "text-align: left;padding-left: 40px;" || + style === "padding-left: 40px;") { + child.setAttribute("style", "padding-left: 30px;"); } } From bcca56866c354d7ae01ac1010c40d42f3ce64842 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 21:29:21 -0400 Subject: [PATCH 027/186] Revise the chapter URL comments --- lib/convert-worker.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index c29163c..a01a2a1 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -119,9 +119,6 @@ function getBodyXML(chapter, book, contentEl) { h1El.textContent = chapter.title; bodyEl.appendChild(h1El); - const comment = contentEl.ownerDocument.createComment(chapter.url); - bodyEl.appendChild(comment); - while (contentEl.firstChild) { bodyEl.appendChild(contentEl.firstChild); } @@ -458,8 +455,11 @@ function getBodyXML(chapter, book, contentEl) { } }); - // Serializer inserts extra xmlns for us since it doesn't know we're going to put this into a - xml = xml.replace(//, ""); + // Serializer inserts extra xmlns for us since it doesn't know we're going to put this into a . + // Use this opportunity to insert a comment pointing to the original URL, for reference. + xml = xml.replace( + //, + `\n\n`); return xml; } From 056dc9d514ef68c19426d327062911a6f059ac86 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 26 Oct 2020 21:59:41 -0400 Subject: [PATCH 028/186] 4.3.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 015a00c..7f379e7 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.2.0", + "version": "4.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index cb0e2ba..5011a22 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.2.0", + "version": "4.3.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From 3810138e15b12d080fa2b46406044135d633739a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 31 Oct 2020 17:36:31 -0400 Subject: [PATCH 029/186] Spot fixes for Ward through Beacon 8.12 --- lib/convert-worker.js | 1 - lib/substitutions.json | 98 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index a01a2a1..51d5d61 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -262,7 +262,6 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/Tristan-Capricorn/g, "Tristan–Capricorn"); xml = xml.replace(/Capricorn-Byron/g, "Capricorn–Byron"); xml = xml.replace(/Tristan-Byron/g, "Tristan–Byron"); - xml = xml.replace(/Earth-Gimel/g, "Earth–Gimel"); xml = xml.replace(/Gimel-Europe/g, "Gimel–Europe"); xml = xml.replace(/G-N/g, "G–N"); xml = xml.replace(/Imp-Damsel/g, "Imp–Damsel"); diff --git a/lib/substitutions.json b/lib/substitutions.json index a26f014..33c689a 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5169,10 +5169,38 @@ "after": "Keith said, “you decide" } ], + "https://www.parahumans.net/2018/07/03/beacon-8-1/": [ + { + "before": "a group of minors,” Dragon said. “Allow others", + "after": "a group of minors,” Dragon said, “allow others" + } + ], "https://www.parahumans.net/2018/07/07/beacon-8-2/": [ { "before": "

Mom and dad.

", "after": "

Mom and Dad.

" + }, + { + "before": "Missisipi", + "after": "Mississippi" + }, + { + "before": "dragoncraft", + "after": "Dragon-craft" + } + ], + "https://www.parahumans.net/2018/07/10/beacon-8-3/": [ + { + "before": "It’s—I can’t talk to Byron", + "after": "It’s— I can’t talk to Byron" + }, + { + "before": "emergency, we’re capes, Cryptid said", + "after": "emergency, we’re capes,” Cryptid said" + }, + { + "before": "one or two more fallen", + "after": "one or two more Fallen" } ], "https://www.parahumans.net/2018/07/14/beacon-8-4/": [ @@ -5183,12 +5211,24 @@ { "before": "and then hit buttons

", "after": "and then hit buttons.

" + }, + { + "before": "I think it’s done", + "after": "I think it’s done" } ], "https://www.parahumans.net/2018/07/17/beacon-8-5/": [ { "before": "on the offensive. chains whirled", "after": "on the offensive. Chains whirled" + }, + { + "before": "a bit hit to morale", + "after": "a big hit to morale" + }, + { + "before": "mask was only a B-", + "after": "mask was only a B−" } ], "https://www.parahumans.net/2018/07/21/beacon-8-6/": [ @@ -5199,6 +5239,28 @@ { "before": "above me. the sky was dark", "after": "above me. The sky was dark" + }, + { + "before": "she thrwe out a hand", + "after": "she threw out a hand" + }, + { + "before": "corner them,” I said. “They’ll threaten civilians", + "after": "corner them,” I said, “they’ll threaten civilians" + }, + { + "before": "reminiscent of a certain teenage boy-was cast in", + "after": "reminiscent of a certain teenage boy—was cast in" + }, + { + "before": "Errors influence", + "after": "Error’s influence" + } + ], + "https://www.parahumans.net/2018/07/24/beacon-8-7/": [ + { + "before": "Ashley’s activities therin", + "after": "Ashley’s activities therein" } ], "https://www.parahumans.net/2018/07/28/beacon-8-8/": [ @@ -5215,12 +5277,48 @@ { "before": "was impatient. it was hard to tell", "after": "was impatient. It was hard to tell" + }, + { + "before": "“Is—Yes,” I finished", + "after": "“Is— Yes,” I finished" + } + ], + "https://www.parahumans.net/2018/08/04/beacon-8-10/": [ + { + "before": "I’m supposed to be you?", + "after": "I’m supposed to be you?" + }, + { + "before": "She had her Eyehook", + "after": "She had her eyehook" + }, + { + "before": "You—I have to imagine you were", + "after": "You— I have to imagine you were" + }, + { + "before": "I don’t—I can hear your mother", + "after": "I don’t— I can hear your mother" + }, + { + "before": "my A—costume with my makeup at an A", + "after": "my A− costume with my makeup at an A" + } + ], + "https://www.parahumans.net/2018/08/07/beacon-8-11/": [ + { + "before": "easy to understand story", + "after": "easy-to-understand story" } ], "https://www.parahumans.net/2018/08/11/beacon-8-12/": [ { "before": "who are free now. they’re out there", "after": "who are free now. They’re out there" + }, + { + "before": "dare you? Hamza barked, again", + "after": "dare you?” Hamza barked, again" } ], "https://www.parahumans.net/2018/08/18/beacon-interlude-8-y/": [ From ff09d1fd76f9efc255faf0d610c0538ed26d53ce Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 31 Oct 2020 17:41:13 -0400 Subject: [PATCH 030/186] Always capitalize "the Megalopolis" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 51d5d61..086745d 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -387,6 +387,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/(Lord|Slater) street/g, "$1 Street"); xml = xml.replace(/(Hollow|Cedar) point/g, "$1 Point"); xml = xml.replace(/(Norwalk|Fenway|Stratford) station/g, "$1 Station"); + xml = xml.replace(/the megalopolis/g, "the Megalopolis"); // These are usually not italicized, but sometimes are. Other foreign-language names (like Yàngbǎn) are not // italicized, so we go in the direction of removing the italics. From e24bbc462beeb29117da58a1b6248f16b7f8b2de Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 31 Oct 2020 17:48:01 -0400 Subject: [PATCH 031/186] Fixes instances of -, in Ward They are usually supposed to be em dashes. --- lib/substitutions.json | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 33c689a..04dd1b7 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5303,6 +5303,10 @@ { "before": "my A—costume with my makeup at an A", "after": "my A− costume with my makeup at an A" + }, + { + "before": "now my apartment-, three or four minutes", + "after": "now my apartment—three or four minutes" } ], "https://www.parahumans.net/2018/08/07/beacon-8-11/": [ @@ -5621,6 +5625,10 @@ { "before": "March said. she flourished her", "after": "March said. She flourished her" + }, + { + "before": "morning breath—more than morning breath-, but there", + "after": "morning breath—more than morning breath—but there" } ], "https://www.parahumans.net/2019/04/09/black-13-3/": [ @@ -5661,6 +5669,16 @@ { "before": "cash are involved. there’s a reason", "after": "cash are involved. There’s a reason" + }, + { + "before": "zero—a circle made with her full hand-, three", + "after": "zero—a circle made with her full hand—three" + } + ], + "https://www.parahumans.net/2019/05/07/black-13-10/": [ + { + "before": "the interior of this one was quiet-, I could", + "after": "the interior of this one was quiet—I could" } ], "https://www.parahumans.net/2019/05/11/black-13-11/": [ @@ -5669,6 +5687,12 @@ "after": "been scummy and tried" } ], + "https://www.parahumans.net/2019/05/18/breaking-14-1/": [ + { + "before": "face—ridiculous notion but still-, if I wrote him a note or sent him a text—less ridiculous notion-, saying", + "after": "face—ridiculous notion but still—if I wrote him a note or sent him a text—less ridiculous notion—saying" + } + ], "https://www.parahumans.net/2019/05/25/breaking-14-3/": [ { "before": "actively tamper with it it", @@ -5687,12 +5711,20 @@ { "before": "Promises to mom and dad", "after": "Promises to Mom and Dad" + }, + { + "before": "or innovators—scientists-, they say", + "after": "or innovators—scientists—they say" } ], "https://www.parahumans.net/2019/06/08/breaking-14-7/": [ { "before": "Regretting sending mom here", "after": "Regretting sending Mom here" + }, + { + "before": "you’re talking syncope—fainting-, arrythmia,", + "after": "you’re talking syncope—fainting, arrythmia," } ], "https://www.parahumans.net/2019/06/15/breaking-14-9/": [ @@ -5701,6 +5733,12 @@ "after": "You stay away from Mom, you stay away from Dad" } ], + "https://www.parahumans.net/2019/06/18/breaking-14-10/": [ + { + "before": "in a real fight-, but in", + "after": "in a real fight—but in" + } + ], "https://www.parahumans.net/2019/06/22/breaking-14-11/": [ { "before": "-He’s changing-", @@ -5899,6 +5937,12 @@ "after": "Golem explained.

" } ], + "https://www.parahumans.net/2019/10/26/sundown-17-8/": [ + { + "before": "one primary goal—me-, and who", + "after": "one primary goal—me—and who" + } + ], "https://www.parahumans.net/2019/11/02/sundown-17-10/": [ { "before": "wanted you to go to mom if you", @@ -5973,6 +6017,10 @@ { "before": "

Three seconds

", "after": "

Three seconds.

" + }, + { + "before": "scream—no sound when viewing crystal-pictures, of course-, and", + "after": "scream—no sound when viewing crystal-pictures, of course—and" } ], "https://www.parahumans.net/2020/01/01/interlude-19-a/": [ From dd2b5b15ce67bf33a48f400a2cacce57061f78c7 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 31 Oct 2020 17:53:32 -0400 Subject: [PATCH 032/186] Fix instances of "The clairvoyant" Previously we only fixed "the clairvoyant", missing cases where it his name started sentences. --- lib/convert-worker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 086745d..4d33ecf 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -329,7 +329,7 @@ function getBodyXML(chapter, book, contentEl) { // This occurs enough times it's better to do here than in one-off fixes. We correct the single instance where // it's incorrect to capitalize in the one-off fixes. // Note that Ward contains much talk of "the clairvoyants", so we don't want to capitalize plurals. - xml = xml.replace(/the clairvoyant([^s])/g, "the Clairvoyant$1"); + xml = xml.replace(/([Tt])he clairvoyant([^s])/g, "$1he Clairvoyant$2"); // ReSound's name is sometimes miscapitalized. The word is never used in a non-name context. xml = xml.replace(/Resound/g, "ReSound"); From 24809f607bcf011062feb0210a704545d937f115 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 31 Oct 2020 17:58:16 -0400 Subject: [PATCH 033/186] Always capitalize "Earths" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 4d33ecf..3ea0d9c 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -388,6 +388,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/(Hollow|Cedar) point/g, "$1 Point"); xml = xml.replace(/(Norwalk|Fenway|Stratford) station/g, "$1 Station"); xml = xml.replace(/the megalopolis/g, "the Megalopolis"); + xml = xml.replace(/earths(?![a-z])/g, "Earths"); // These are usually not italicized, but sometimes are. Other foreign-language names (like Yàngbǎn) are not // italicized, so we go in the direction of removing the italics. From 411defc1531f588885bcbd3225cf2d77994193ce Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 31 Oct 2020 18:04:01 -0400 Subject: [PATCH 034/186] 4.4.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 7f379e7..1c2a77a 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.3.0", + "version": "4.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5011a22..6466068 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.3.0", + "version": "4.4.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From b4454f8432ac3a8f751174201cc2777bb1954928 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 16:08:25 -0500 Subject: [PATCH 035/186] Fix warning output This has been broken since the progress bar addition. --- lib/convert-worker.js | 26 ++++++++++++++++---------- lib/convert.js | 7 ++++++- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 3ea0d9c..c0305d5 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -10,29 +10,35 @@ function convertChapter(chapter, book, inputPath, outputPath) { const contents = fs.readFileSync(inputPath, { encoding: "utf-8" }); const rawChapterJSDOM = new JSDOM(contents); - const output = getChapterString(chapter, book, rawChapterJSDOM.window.document); + const { output, warnings } = getChapterString(chapter, book, rawChapterJSDOM.window.document); // TODO: this should probably not be necessary... jsdom bug I guess!? rawChapterJSDOM.window.close(); fs.writeFileSync(outputPath, output); + return warnings; } function getChapterString(chapter, book, rawChapterDoc) { - const body = getBodyXML(chapter, book, rawChapterDoc.querySelector(".entry-content")); + const { xml, warnings } = + getBodyXML(chapter, book, rawChapterDoc.querySelector(".entry-content")); - return ` + const output = ` ${chapter.title} -${body} +${xml} `; + + return { output, warnings }; } function getBodyXML(chapter, book, contentEl) { + const warnings = []; + // Remove initial Next Chapter and Previous Chapter

contentEl.firstElementChild.remove(); @@ -440,19 +446,19 @@ function getBodyXML(chapter, book, contentEl) { if (substitution.before) { const indexOf = xml.indexOf(substitution.before); if (indexOf === -1) { - console.warn(`Could not find text "${substitution.before}" in ${chapter.url}. The chapter may have been ` + - `updated at the source, in which case, you should edit substitutions.json.`); + warnings.push(`Could not find text "${substitution.before}" in ${chapter.url}. The chapter may have been ` + + `updated at the source, in which case, you should edit substitutions.json.`); } if (indexOf !== xml.lastIndexOf(substitution.before)) { - console.warn(`The text "${substitution.before}" occurred twice, and so the substitution was ambiguous. ` + - `Update substitutions.json for a more precise substitution.`); + warnings.push(`The text "${substitution.before}" occurred twice, and so the substitution was ambiguous. ` + + `Update substitutions.json for a more precise substitution.`); } xml = xml.replace(new RegExp(escapeRegExp(substitution.before)), substitution.after); } else if (substitution.regExp) { xml = xml.replace(new RegExp(substitution.regExp, "g"), substitution.replacement); } else { - console.warn(`Invalid substitution specified for ${chapter.url}`); + warnings.push(`Invalid substitution specified for ${chapter.url}`); } }); @@ -462,7 +468,7 @@ function getBodyXML(chapter, book, contentEl) { //, `\n\n`); - return xml; + return { xml, warnings }; } function isEmptyOrGarbage(el) { diff --git a/lib/convert.js b/lib/convert.js index e7555cb..c4ae90d 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -21,18 +21,23 @@ module.exports = async (cachePath, manifestPath, contentPath, book, concurrentJo } const pool = workerpool.pool(path.resolve(__dirname, "convert-worker.js"), poolOptions); + const warnings = []; await Promise.all(chapters.map(async chapter => { const inputPath = path.resolve(cachePath, chapter.filename); const destFileName = `${path.basename(chapter.filename, ".html")}.xhtml`; const outputPath = path.resolve(contentPath, destFileName); - await pool.exec("convertChapter", [chapter, book, inputPath, outputPath]); + warnings.push(...await pool.exec("convertChapter", [chapter, book, inputPath, outputPath])); progress.increment(); })); pool.terminate(); + for (const warning of warnings) { + console.warn(warning); + } + console.log("All chapters converted"); }; From 547b7e95180dc576f9b1235dc4fcdd5736f0cbdb Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 16:12:41 -0500 Subject: [PATCH 036/186] Restore original scene breaks, instead of using


--- lib/convert-worker.js | 22 +++++++++++++--------- lib/substitutions.json | 6 +++--- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index c0305d5..d0fc0c9 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -288,15 +288,19 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/Simurgh-Myrddin-plant/g, "Simurgh–Myrddin–plant"); xml = xml.replace(/Armsmaster-Defiant/g, "Armsmaster–Defiant"); - // Use
for separators - // https://www.parahumans.net/2019/12/21/interlude-18-z-radiation/ has "super-separators" ("⊙ ⊙ ⊙ ⊙ ⊙") which we - // leave untouched for now. - xml = xml.replace(/

■<\/p>/g, "


"); - xml = xml.replace(/

■<\/p>/g, "


"); - xml = xml.replace(/

⊙<\/p>/g, "


"); - xml = xml.replace(/

⊙<\/strong><\/p>/g, "


"); - xml = xml.replace(/

⊙<\/strong><\/em><\/p>/g, "


"); - xml = xml.replace(/

⊙⊙<\/strong><\/p>/g, "


"); + // Normalize scene breaks.
would be more semantically appropriate, but loses the author's intent. This is + // especially the case in Ward, which uses a variety of different scene breaks. + xml = xml.replace(/]*)>■<\/p>/g, `

`); + + xml = xml.replace(/

⊙<\/p>/g, `

`); + xml = xml.replace(/

⊙<\/strong><\/p>/g, `

`); + xml = xml.replace(/

⊙<\/strong><\/em><\/p>/g, + `

`); + xml = xml.replace(/

⊙⊙<\/strong><\/p>/g, + `

`); + + xml = xml.replace(/

⊙ *⊙ *⊙ *⊙ *⊙<\/strong><\/p>/g, + `

⊙ ⊙ ⊙ ⊙ ⊙

`); // Fix recurring miscapitalization with questions xml = xml.replace(/\?”\s\s?She asked/g, "?” she asked"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 04dd1b7..e0f82cd 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5,7 +5,7 @@ "after": "bugs: flies, ants" }, { - "before": "

Brief note from the author: This story isn’t intended for young or sensitive readers. Readers who are on the lookout for trigger warnings are advised to give Worm a pass.

\n
\n", + "before": "

Brief note from the author: This story isn’t intended for young or sensitive readers. Readers who are on the lookout for trigger warnings are advised to give Worm a pass.

\n

\n", "after": "", "_comment": "The pseudo-trigger warning is out of place in an eBook." } @@ -4334,7 +4334,7 @@ ], "https://www.parahumans.net/2017/09/11/daybreak-1-1/": [ { - "before": "

Ward is the second work in the Parahumans series, and reading Worm first is strongly recommended. A lot of this won’t make sense otherwise and if you do find yourself a fan of the universe, the spoilers in Ward will affect the reading of the other work.

\n

Ward is not recommended for young or sensitive readers.

\n
", + "before": "

Ward is the second work in the Parahumans series, and reading Worm first is strongly recommended. A lot of this won’t make sense otherwise and if you do find yourself a fan of the universe, the spoilers in Ward will affect the reading of the other work.

\n

Ward is not recommended for young or sensitive readers.

\n

\n", "after": "", "_comment": "This is out of place in an eBook." } @@ -5013,7 +5013,7 @@ ], "https://www.parahumans.net/2018/06/05/torch-7-5/": [ { - "before": "
\n

I don’t", + "before": "

\n

I don’t", "after": "

I don’t" }, { From b85e8a68b157623aba902bd02471bebe8882aa55 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 17:29:01 -0500 Subject: [PATCH 037/186] Spot fixes for Ward through Polarize 10.x --- lib/convert-worker.js | 2 +- lib/substitutions.json | 431 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 429 insertions(+), 4 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index d0fc0c9..6ade3b7 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -347,7 +347,7 @@ function getBodyXML(chapter, book, contentEl) { // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". "patrol // group" is always lowercased. It seems like "Patrol" is a proper name, and is used as a capitalized modifier in // other contexts (e.g. Patrol leader). So let's standardize on "Patrol ". - xml = xml.replace(/patrol (block|group|leader|guard|student|uniform|squad|soldier|officer|crew|girl)/ig, + xml = xml.replace(/patrol (block|group|leader|guard|student|uniform|squad|soldier|officer|crew|girl|bus)/ig, (_, $1) => `Patrol ${$1.toLowerCase()}`); // This always works in Ward and has a few false positives in Worm, where it is never needed: if (book === "ward") { diff --git a/lib/substitutions.json b/lib/substitutions.json index e0f82cd..412659d 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4505,6 +4505,12 @@ "after": "much like the machines" } ], + "https://www.parahumans.net/2018/01/30/shade-4-2/": [ + { + "before": "one earth", + "after": "one Earth" + } + ], "https://www.parahumans.net/2018/02/03/shade-4-3/": [ { "before": "ex-birdcage", @@ -4719,6 +4725,10 @@ { "before": "or if he said something like ‘You’ or “Everyone’, I could", "after": "or if he said something like ‘You’ or ‘Everyone’, I could" + }, + { + "before": "rain. and I saw", + "after": "rain. And I saw" } ], "https://www.parahumans.net/2018/04/07/shadow-interlude-5-x/": [ @@ -5167,6 +5177,10 @@ { "before": "Keith said. “You decide", "after": "Keith said, “you decide" + }, + { + "before": "The towels!", + "after": "The towels!" } ], "https://www.parahumans.net/2018/07/03/beacon-8-1/": [ @@ -5325,10 +5339,54 @@ "after": "dare you?” Hamza barked, again" } ], + "https://www.parahumans.net/2018/08/14/beacon-interlude-8-x/": [ + { + "before": "attention on Natalie, “this is", + "after": "attention on Natalie. “This is" + }, + { + "before": "Natalie’s beetle", + "after": "Natalie’s Beetle" + }, + { + "before": "I said!", + "after": "I said!" + }, + { + "before": "adam’s apple", + "after": "Adam’s apple" + }, + { + "before": "Time-time for Kenzie", + "after": "Time—time for Kenzie" + } + ], "https://www.parahumans.net/2018/08/18/beacon-interlude-8-y/": [ { "before": "A sufficient impact or distraction

", "after": "A sufficient impact or distraction.

" + }, + { + "before": "‘Hard Boil.’", + "after": "‘Hard Boil’." + }, + { + "before": "tee-vee", + "after": "TV" + }, + { + "before": "teacher’s power", + "after": "Teacher’s power" + } + ], + "https://www.parahumans.net/2018/08/21/gleaming-9-1/": [ + { + "before": "Probably teacher", + "after": "Probably Teacher" + }, + { + "before": "b-list", + "after": "B-list" } ], "https://www.parahumans.net/2018/08/28/gleaming-9-3/": [ @@ -5339,12 +5397,54 @@ { "before": "with a strong Master", "after": "with a strong master" + }, + { + "before": "—But I can’t make concessions", + "after": "—but I can’t make concessions" + }, + { + "before": "too impatient and angry It was worse because", + "after": "too impatient and angry. It was worse because" + }, + { + "before": "what it’s worth,” Tristan said. “Thanks for", + "after": "what it’s worth,” Tristan said, “thanks for" + }, + { + "before": "Apparently… perk of..", + "after": "Apparently… perk of…" + } + ], + "https://www.parahumans.net/2018/09/01/gleaming-9-4/": [ + { + "before": "Power related", + "after": "Power-related" + } + ], + "https://www.parahumans.net/2018/09/04/gleaming-9-5/": [ + { + "before": "still a voice without confidence", + "after": "Still a voice without confidence" + }, + { + "before": "The only thing that hold him back", + "after": "The only things that hold him back" + } + ], + "https://www.parahumans.net/2018/09/08/gleaming-9-6/": [ + { + "before": "The patrol had done its work", + "after": "The Patrol had done its work" } ], "https://www.parahumans.net/2018/09/11/gleaming-9-7/": [ { "before": "Byron said. he was at", "after": "Byron said. He was at" + }, + { + "before": "then teacher can’t", + "after": "then Teacher can’t" } ], "https://www.parahumans.net/2018/09/13/gleaming-interlude-9-x/": [ @@ -5355,6 +5455,120 @@ { "before": "that made her her- the shock of white", "after": "that made her her—the shock of white" + }, + { + "regExp": "their Papa", + "replacement": "their papa" + }, + { + "before": "Mama and papa talk", + "after": "Mama and Papa talk" + }, + { + "before": "injuries,” papa said", + "after": "injuries,” Papa said" + }, + { + "before": "papa’s face", + "after": "Papa’s face" + }, + { + "before": "Selfless?” papa asked", + "after": "Selfless?” Papa asked" + }, + { + "before": "kind of selfie, papa", + "after": "kind of selfie, Papa" + }, + { + "before": "part of that,” papa said", + "after": "part of that,” Papa said" + }, + { + "before": "you,” papa said", + "after": "you,” Papa said" + }, + { + "before": "too, papa,” Tristan said", + "after": "too, Papa,” Tristan said" + }, + { + "before": "worked in rigid. the armor’s", + "after": "worked in rigid. The armor’s" + }, + { + "before": "moving and across to", + "after": "moving across to" + }, + { + "before": "fucking sense!
”", + "after": "fucking sense
!”" + }, + { + "before": "that hurt! Stop!", + "after": "that hurt! Stop!" + }, + { + "before": "it was one thing!", + "after": "It was one thing!" + }, + { + "before": "as an anything!", + "after": "as an anything!" + }, + { + "before": "have backed you up!", + "after": "have backed you up!" + }, + { + "before": "mr. Vaughn", + "after": "Mr. Vaughn" + } + ], + "https://www.parahumans.net/2018/09/15/gleaming-9-8/": [ + { + "before": "

For those who missed it, there was a Thursday update. See the prior chapter.

\n

\n", + "after": "" + }, + { + "before": "Capricorn blue", + "after": "Capricorn Blue" + }, + { + "before": "everything ended, Several of my", + "after": "everything ended, several of my" + }, + { + "before": "you can! You", + "after": "you can! You" + } + ], + "https://www.parahumans.net/2018/09/18/gleaming-9-9/": [ + { + "before": "teacher thrall", + "after": "Teacher thrall" + }, + { + "before": "need to,” I said, because I’m", + "after": "need to,” I said, “because I’m" + }, + { + "before": "keeping the Warden and his deputy", + "after": "keeping the warden and his deputy" + } + ], + "https://www.parahumans.net/2018/09/22/gleaming-interlude-9-y/": [ + { + "before": "you up where you’re
weak? You’re", + "after": "you up where you’re weak? You’re" + }, + { + "before": "for you.", + "after": "for you." + }, + { + "before": "Why ‘inflict‘", + "after": "Why ‘inflict’" } ], "https://www.parahumans.net/2018/09/25/gleaming-9-10/": [ @@ -5365,54 +5579,195 @@ { "before": "at the balcony. both wore", "after": "at the balcony. Both wore" + }, + { + "before": "—But Rain and Sveta", + "after": "—but Rain and Sveta" + }, + { + "before": "Cyrstalclear", + "after": "Crystalclear" + }, + { + "before": "He stopped here he was", + "after": "He stopped where he was" + }, + { + "regExp": "Warden", + "replacement": "warden", + "_comment": "This is discussing prison wardens, which is a normal job title" } ], "https://www.parahumans.net/2018/09/29/gleaming-9-11/": [ { "before": "two people died. the forcefield went", "after": "two people died. The forcefield went" + }, + { + "before": "Maybe wrong to think that within", + "after": "Maybe wrong to think that, within" + }, + { + "regExp": "Crock o Shit", + "after": "Crock o’ Shit" + } + ], + "https://www.parahumans.net/2018/10/02/gleaming-9-12/": [ + { + "before": "teacher hit squad", + "after": "Teacher hit squad" + }, + { + "before": "—You gotta give something", + "after": "—you gotta give something" } ], "https://www.parahumans.net/2018/10/09/gleaming-9-14/": [ { "before": "in a fireman carry. with my free hand", "after": "in a fireman carry. With my free hand" + }, + { + "before": "fucking teacher wouldn’t", + "after": "fucking Teacher wouldn’t" } ], "https://www.parahumans.net/2018/10/13/gleaming-9-15/": [ { "before": "-fucked in the head.", "after": "—fucked in the head." + }, + { + "before": "some of the creases. and from the", + "after": "some of the creases, and from the" + }, + { + "before": "Disappointed?", + "after": "Disappointed?" } ], "https://www.parahumans.net/2018/10/16/gleaming-interlude-9-z/": [ { "before": "cliff he was was expected", "after": "cliff he was expected" + }, + { + "before": "told the Warden differed", + "after": "told the warden differed" + }, + { + "before": "assistant Warden", + "after": "assistant warden" + }, + { + "before": "behind those things was By,", + "after": "behind those things was By," + }, + { + "before": "What got into you?", + "after": "What got into you?" + }, + { + "before": "what happens to anyone with powers is near anyone", + "after": "what happens when anyone with powers is near anyone" } ], - "https://www.parahumans.net/2018/12/11/interlude-10-y/": [ + "https://www.parahumans.net/2018/10/20/gleaming-interlude-9/": [ { - "before": "shape of the the moment", - "after": "shape of the moment" + "before": "Guarderò", + "after": "Guarderò." + }, + { + "before": "one earth’s worth", + "after": "one Earth’s worth" + }, + { + "before": "the adjacent earth", + "after": "the adjacent Earth" + }, + { + "before": "closest earth", + "after": "closest Earth" + }, + { + "before": "of them, “Would be", + "after": "of them, “would be" + }, + { + "before": "finds it’s root", + "after": "finds its root" + }, + { + "before": "they’re Valkyrie, Crystal", + "after": "they’re Valkyrie, Crystal" } ], "https://www.parahumans.net/2018/10/23/polarize-10-1/": [ { "before": "You let mom talk and", "after": "You let Mom talk and" + }, + { + "before": "post-Prison", + "after": "post-prison" + }, + { + "before": "to take power!’ ”", + "after": "to take power!’”" + }, + { + "before": "I’m sorry, what? What?", + "after": "I’m sorry, what? What?" } ], "https://www.parahumans.net/2018/10/27/polarize-10-2/": [ { "before": "Sveta said, leaning on me

", "after": "Sveta said, leaning on me.

" + }, + { + "before": "and that part of me is really disappointed", + "after": "And that part of me is really disappointed" + } + ], + "https://www.parahumans.net/2018/10/30/polarize-10-3/": [ + { + "before": "betray-y", + "after": "betray-ey" } ], "https://www.parahumans.net/2018/11/03/polarize-10-4/": [ { "before": "services of mercenaries. depending on timing", "after": "services of mercenaries. Depending on timing" + }, + { + "before": "we should get going", + "after": "We should get going" + }, + { + "before": "clean her stuff.. She’ll be out soon", + "after": "clean her stuff. She’ll be out soon" + }, + { + "before": "finger—and thumb-rings", + "after": "finger- and thumb-rings" + } + ], + "https://www.parahumans.net/2018/11/06/polarize-10-5/": [ + { + "before": "because It’s pertinent to", + "after": "because it’s pertinent to" + }, + { + "before": "bangs said, “They won’t give", + "after": "bangs said, “they won’t give" + } + ], + "https://www.parahumans.net/2018/11/10/polarize-10-6/": [ + { + "before": "Caveat", + "after": "caveat" } ], "https://www.parahumans.net/2018/11/13/polarize-10-7/": [ @@ -5427,24 +5782,84 @@ { "before": "-your pancreas.", "after": "—your pancreas." + }, + { + "before": "a hair of headphones", + "after": "a pair of headphones" + }, + { + "before": "Shark girl", + "after": "shark girl" + }, + { + "before": "Be safe—Nat.", + "after": "Be safe —Nat." + }, + { + "before": "kill each other.”", + "after": "kill each other.”" } ], "https://www.parahumans.net/2018/11/17/polarize-10-8/": [ { "before": "Sveta said. her hand was removed", "after": "Sveta said. Her hand was removed" + }, + { + "before": "There were a bag fast food", + "after": "There was a bag of fast food" + }, + { + "before": "anti parahuman", + "after": "anti-parahuman" } ], "https://www.parahumans.net/2018/11/20/polarize-10-9/": [ { "before": "confines of the suit. and rearranged herself", "after": "confines of the suit, and rearranged herself" + }, + { + "before": "‘piece", + "after": "’piece" + }, + { + "before": "Fuck y—of course", + "after": "Fuck y— Of course" + }, + { + "before": "they had Fallen behind", + "after": "they had fallen behind" + }, + { + "before": "Fucking heroes!", + "after": "Fucking heroes!" + }, + { + "before": "the unfucked!", + "after": "the unfucked!" } ], "https://www.parahumans.net/2018/11/24/interlude-10-x/": [ { "before": "that would be in time Hopefully

", "after": "that would be in time. Hopefully.

" + }, + { + "before": "consisting of two—and three-person", + "after": "consisting of two- and three-person" + }, + { + "before": "Garotte, Hand at one", + "after": "Garotte, hand at one" + }, + { + "before": "with that, The unfortunately named", + "after": "with that, the unfortunately-named" + }, + { + "before": "not aware of the lipstick am", + "after": "not aware of the lipstick" } ], "https://www.parahumans.net/2018/11/27/polarize-10-10/": [ @@ -5459,6 +5874,12 @@ "after": "See Dad, sleep." } ], + "https://www.parahumans.net/2018/12/11/interlude-10-y/": [ + { + "before": "shape of the the moment", + "after": "shape of the moment" + } + ], "https://www.parahumans.net/2019/01/12/blinding-11-7/": [ { "before": "threw the the man", @@ -5553,6 +5974,10 @@ { "before": "I need dad", "after": "I need Dad" + }, + { + "before": "Oh fuck!", + "after": "Oh fuck!" } ], "https://www.parahumans.net/2019/02/23/heavens-12-3/": [ From e364cb2b221d6054fed0fae82a61fdaefb9ad5f8 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 17:34:22 -0500 Subject: [PATCH 038/186] Normalize a few instances of "T-shirt" to "t-shirt" The latter is overwhelmingly more common. --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 6ade3b7..05292c8 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -423,6 +423,9 @@ function getBodyXML(chapter, book, contentEl) { // Clich(e|é) is spelled both ways. Let's standardize on including the accent. xml = xml.replace(/cliche/g, "cliché"); + // T-shirt is usually spelled lowercase ("t-shirt"). Normalize the remaining instances. + xml = xml.replace(/T-shirt/g, "t-shirt"); + // "gray" is the majority spelling, except for "greyhound" xml = xml.replace(/(G|g)rey(?!hound)/g, "$1ray"); From 6cdf486858666ea9e60d1480b7226aa447a71fd6 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 17:39:13 -0500 Subject: [PATCH 039/186] Fix missing spaces after commas --- lib/convert-worker.js | 3 +++ lib/substitutions.json | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 05292c8..ec909a8 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -262,6 +262,9 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/I-I/g, "I—I"); xml = xml.replace(/I-uh/g, "I—uh"); + // Fix missing spaces after commas + xml = xml.replace(/([a-zA-Z]+),([a-zA-Z]+)/g, "$1, $2"); + // Joint names should use em dashes xml = xml.replace(/Dallon-Pelham/g, "Dallon–Pelham"); xml = xml.replace(/Bet-Gimel/g, "Bet–Gimel"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 412659d..9d1d362 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2754,10 +2754,6 @@ "before": "fighting. But.", "after": "fighting. But…" }, - { - "before": "r,s", - "after": "r, s" - }, { "before": "—But I have", "after": "—but I have" From 56a38609ca12c190ee4afcd314caf720b431fdb8 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 17:46:23 -0500 Subject: [PATCH 040/186] Fix a variety of misplaced or extraneous quotes --- lib/convert-worker.js | 1 + lib/substitutions.json | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index ec909a8..a3a8000 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -194,6 +194,7 @@ function getBodyXML(chapter, book, contentEl) { fixEms(); fixQuotesAndApostrophes(); fixEms(); + xml = xml.replace(/I”m/g, "I’m"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index 9d1d362..b0506d4 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2350,6 +2350,18 @@ { "before": "to,” Alexandria spoke. “Is", "after": "to,” Alexandria spoke, “is" + }, + { + "before": "leave?” Hero asked. ”Why", + "after": "leave?” Hero asked. “Why" + }, + { + "before": "eye contact. ”She", + "after": "eye contact. “She" + }, + { + "before": "Alexandria said. ”Why", + "after": "Alexandria said. “Why" } ], "https://parahumans.wordpress.com/2012/11/10/colony-15-8/": [ @@ -2857,6 +2869,12 @@ "after": "the phone.

" } ], + "https://parahumans.wordpress.com/2013/02/16/interlude-18/": [ + { + "before": "her feet. ”We’re", + "after": "her feet. “We’re" + } + ], "https://parahumans.wordpress.com/2013/02/19/scourge-19-1/": [ { "before": "Rachel,” Tattletale said. “Come", @@ -4459,6 +4477,10 @@ { "before": "my flight toward toward Tristan", "after": "my flight toward Tristan" + }, + { + "before": "“Spooky,” Sveta said.”I expected", + "after": "“Spooky,” Sveta said. “I expected" } ], "https://www.parahumans.net/2018/01/16/glare-3-4/": [ @@ -4703,6 +4725,10 @@ { "before": "The woman—I turned to look and saw", "after": "The woman— I turned to look and saw" + }, + { + "before": "Tristan asked.”", + "after": "Tristan asked." } ], "https://www.parahumans.net/2018/04/03/shadow-5-12/": [ @@ -5618,6 +5644,12 @@ "after": "—you gotta give something" } ], + "https://www.parahumans.net/2018/10/06/gleaming-9-13/": [ + { + "before": "second.”Clarify.”", + "after": "second. “Clarify.”" + } + ], "https://www.parahumans.net/2018/10/09/gleaming-9-14/": [ { "before": "in a fireman carry. with my free hand", @@ -5900,6 +5932,12 @@ "after": "Victoria-flesh" } ], + "https://www.parahumans.net/2019/01/26/blinding-11-9/": [ + { + "before": "I told the mercenary.”", + "after": "I told the mercenary." + } + ], "https://www.parahumans.net/2019/01/19/interlude-11-b/": [ { "before": "loading up trucks with basic supplies

", @@ -6276,6 +6314,10 @@ { "before": "small face on on a fifteen inch", "after": "small face on a fifteen inch" + }, + { + "before": "for the recording.”", + "after": "for the recording." } ], "https://www.parahumans.net/2019/08/24/from-within-16-4/": [ From 0053545444bd68262262302e2383118ee05d252e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 17:58:33 -0500 Subject: [PATCH 041/186] Correctly hyphenate "X-year-old" --- lib/convert-worker.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index a3a8000..9959711 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -263,6 +263,11 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/I-I/g, "I—I"); xml = xml.replace(/I-uh/g, "I—uh"); + // "X-year-old" should use hyphens; all grammar guides agree. The books are very inconsistent but most often omit + // them. + xml = xml.replace(/(\w+)[ -]year[ -]old(s?)(?!\w)/g, "$1-year-old$2"); + xml = xml.replace(/(\w+) or (\w+)-year-old/g, "$1- or $2-year-old"); + // Fix missing spaces after commas xml = xml.replace(/([a-zA-Z]+),([a-zA-Z]+)/g, "$1, $2"); From 481e9cc3a881257cd78d046bd99d6d870571fea9 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 18:03:58 -0500 Subject: [PATCH 042/186] Capitalize "the Pharmacist" from Ward Gleaming 9.10 onward In Gleaming 9.10, it starts being capitalized consistently, presumably reflecting the shift from thinking of "the pharmacist" as a job title, to thinking of "the Pharmacist" as a cape name. So, for subsequent chapters, let's be sure to retain that. --- lib/substitutions.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index b0506d4..dcfbf93 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5632,6 +5632,11 @@ { "regExp": "Crock o Shit", "after": "Crock o’ Shit" + }, + { + "regExp": "the pharmacist", + "replacement": "the Pharmacist", + "_comment": "in the previous chapter, 'the Pharmacist' starts getting capitalized consistently, as if it's a name instead of a profession. Carry it forward." } ], "https://www.parahumans.net/2018/10/02/gleaming-9-12/": [ @@ -5642,6 +5647,11 @@ { "before": "—You gotta give something", "after": "—you gotta give something" + }, + { + "before": "the pharmacist", + "after": "the Pharmacist", + "_comment": "See comment in https://www.parahumans.net/2018/09/29/gleaming-9-11/" } ], "https://www.parahumans.net/2018/10/06/gleaming-9-13/": [ @@ -5908,6 +5918,13 @@ "after": "shape of the moment" } ], + "https://www.parahumans.net/2018/12/25/blinding-11-3/": [ + { + "before": "the pharmacist", + "after": "the Pharmacist", + "_comment": "See comment in https://www.parahumans.net/2018/09/29/gleaming-9-11/" + } + ], "https://www.parahumans.net/2019/01/12/blinding-11-7/": [ { "before": "threw the the man", From 7d5167c952888615d6f1f80615f0f347a561abab Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 18:09:19 -0500 Subject: [PATCH 043/186] 4.5.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 1c2a77a..aaea9a7 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.4.0", + "version": "4.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6466068..81d34a5 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.4.0", + "version": "4.5.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From 58b0856deb141055e15e452de6fd5bce9d659925 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 18:36:29 -0500 Subject: [PATCH 044/186] Stop failing the convert step due to busy filesystems This often happens with virus scanners, etc. --- lib/worm-scraper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/worm-scraper.js b/lib/worm-scraper.js index 556a0df..52f3fd0 100644 --- a/lib/worm-scraper.js +++ b/lib/worm-scraper.js @@ -84,7 +84,7 @@ if (argv._.includes("download")) { if (argv._.includes("convert")) { commands.push(() => { - return fs.rmdir(chaptersPath, { recursive: true }) + return fs.rmdir(chaptersPath, { recursive: true, maxRetries: 3 }) .then(() => fs.mkdir(chaptersPath, { recursive: true })) .then(() => convert(cachePath, manifestPath, chaptersPath, argv.book, argv.jobs)); }); From f70ba646297c12fdb53f13b3a6502bb44ddbc61a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 18:46:56 -0500 Subject: [PATCH 045/186] Measure and output the time conversion takes --- lib/convert.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/convert.js b/lib/convert.js index c4ae90d..0f35b62 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -1,6 +1,7 @@ "use strict"; const path = require("path"); const fs = require("fs").promises; +const { performance } = require("perf_hooks"); const workerpool = require("workerpool"); const cliProgress = require("cli-progress"); @@ -11,9 +12,12 @@ module.exports = async (cachePath, manifestPath, contentPath, book, concurrentJo console.log("Converting raw downloaded HTML to EPUB chapters"); const progress = new cliProgress.SingleBar({ stopOnComplete: true, - clearOnComplete: true + clearOnComplete: true, + format: " {bar} {percentage}% | {time} | {value}/{total}" }, cliProgress.Presets.shades_classic); - progress.start(chapters.length, 0); + + const start = performance.now(); + progress.start(chapters.length, 0, { time: " " }); const poolOptions = {}; if (concurrentJobs !== undefined) { @@ -30,7 +34,8 @@ module.exports = async (cachePath, manifestPath, contentPath, book, concurrentJo warnings.push(...await pool.exec("convertChapter", [chapter, book, inputPath, outputPath])); - progress.increment(); + const time = String(Math.round((performance.now() - start) / 1000)).padStart(3) + " s"; + progress.increment({ time }); })); pool.terminate(); @@ -39,5 +44,5 @@ module.exports = async (cachePath, manifestPath, contentPath, book, concurrentJo console.warn(warning); } - console.log("All chapters converted"); + console.log(`All chapters converted in ${Math.round((performance.now() - start) / 100) / 10} seconds`); }; From 33d88eb52307c530095852499dd844bd2aa18319 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 18:37:35 -0500 Subject: [PATCH 046/186] Refactor convert-worker.js a bit This introduces a few fixes around italics. --- lib/convert-worker.js | 353 +++++++++++++++++++++++------------------ lib/substitutions.json | 20 ++- 2 files changed, 214 insertions(+), 159 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 9959711..f69df99 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -135,6 +135,10 @@ function getBodyXML(chapter, book, contentEl) { // Fix recurring strange pattern of extra
in

......
\n

xml = xml.replace(/
\s*<\/em><\/p>/g, "

"); + // Replace single-word s with s. Other s are probably erroneous too, but these are known-bad. + xml = xml.replace(/([^ ]+)<\/i>/g, "$1"); + xml = xml.replace(/([^ ]+)( +)<\/i>/g, "$1$2"); + // There are way too many nonbreaking spaces where they don't belong. // If they show up three in a row, then let them live. Otherwise, they die. // Also remove any run of them after a period. @@ -192,8 +196,6 @@ function getBodyXML(chapter, book, contentEl) { fixEms(); fixQuotesAndApostrophes(); fixEms(); - fixQuotesAndApostrophes(); - fixEms(); xml = xml.replace(/I”m/g, "I’m"); // Similar problems occur in Ward with and as do in Worm with s @@ -206,9 +208,155 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/(\s*)<\/strong>/g, "$1"); // No need for line breaks before paragraph ends - // These often occur with the
s inside / fixed above. + // These often occur with the
s inside /// fixed above. xml = xml.replace(/
\s*<\/p>/g, "

"); + // Fix missing spaces after commas + xml = xml.replace(/([a-zA-Z]+),([a-zA-Z]+)/g, "$1, $2"); + + // Fix bad periods and spacing/markup surrounding them + xml = xml.replace(/\.\.<\/p>/g, ".

"); + xml = xml.replace(/\.\.”<\/p>/g, ".”

"); + xml = xml.replace(/ \. /g, ". "); + xml = xml.replace(/ \.<\/p>/g, ".

"); + xml = xml.replace(/\.\.\./g, "…"); + + // Fix extra spaces + xml = xml.replace(/ ? <\/p>/g, "

"); + xml = xml.replace(/([a-z]) ,/g, "$1,"); + + xml = fixDialogueTags(xml); + xml = fixForeignNames(xml); + xml = fixEmDashes(xml); + xml = enDashJointNames(xml); + xml = fixPossessives(xml); + xml = cleanSceneBreaks(xml); + xml = fixCapitalization(xml, book); + xml = fixMispellings(xml); + xml = fixHyphens(xml); + xml = standardizeSpellings(xml); + + // One-off fixes + for (const substitution of substitutions[chapter.url] || []) { + if (substitution.before) { + const indexOf = xml.indexOf(substitution.before); + if (indexOf === -1) { + warnings.push(`Could not find text "${substitution.before}" in ${chapter.url}. The chapter may have been ` + + `updated at the source, in which case, you should edit substitutions.json.`); + } + if (indexOf !== xml.lastIndexOf(substitution.before)) { + warnings.push(`The text "${substitution.before}" occurred twice, and so the substitution was ambiguous. ` + + `Update substitutions.json for a more precise substitution.`); + } + + xml = xml.replace(new RegExp(escapeRegExp(substitution.before)), substitution.after); + } else if (substitution.regExp) { + xml = xml.replace(new RegExp(substitution.regExp, "g"), substitution.replacement); + } else { + warnings.push(`Invalid substitution specified for ${chapter.url}`); + } + } + + // Serializer inserts extra xmlns for us since it doesn't know we're going to put this into a . + // Use this opportunity to insert a comment pointing to the original URL, for reference. + xml = xml.replace( + //, + `\n\n`); + + return { xml, warnings }; +} + +function fixDialogueTags(xml) { + // Fix recurring miscapitalization with questions + xml = xml.replace(/\?”\s\s?She asked/g, "?” she asked"); + xml = xml.replace(/\?”\s\s?He asked/g, "?” he asked"); + + // The author often fails to terminate a sentence, instead using a comma after a dialogue tag. For example, + // > “I didn’t get much done,” Greg said, “I got distracted by... + // This should instead be + // > “I didn’t get much done,” Greg said. “I got distracted by... + // + // Our heuristic is to try to automatically fix this if the dialogue tag is two words (X said/admitted/sighed/etc.). + // + // This sometimes overcorrects, as in the following example: + // > “Basically,” Alec said, “For your powers to manifest, ... + // Here instead we should lowercase the "f". We handle that via one-offs in substitutions.json. + // + // This applies to ~800 instances, so although we have to correct back in substitutions.json a decent number of + // times, it definitely pays for itself. Most of the instances we have to correct back we also need to fix the + // capitalization anyway, and that's harder to do automatically, since proper names/"I"/etc. stay capitalized. + xml = xml.replace(/,” ([A-Za-z]+ [A-Za-z]+), “([A-Z])/g, ",” $1. “$2"); + + return xml; +} + +function fixForeignNames(xml) { + // This is consistently missing diacritics + xml = xml.replace(/Yangban/g, "Yàngbǎn"); + + // These are usually not italicized, but sometimes are. Other foreign-language names (like Yàngbǎn) are not + // italicized, so we go in the direction of removing the italics. + xml = xml.replace(/Garama<\/em>/g, "Garama"); + xml = xml.replace(/Thanda<\/em>/g, "Thanda"); + xml = xml.replace(/Sifara([^<]*)<\/em>/g, "Sifara$1"); + xml = xml.replace(/Moord Nag([^<]*)<\/em>/g, "Moord Nag$1"); + xml = xml.replace(/Califa de Perro([^<]*)<\/em>/g, "Califa de Perro$1"); + xml = xml.replace(/Turanta([^<]*)<\/em>/g, "Turanta$1"); + + return xml; +} + +function fixEmDashes(xml) { + xml = xml.replace(/ – /g, "—"); + xml = xml.replace(/“((?:)?)-/g, "“$1—"); + xml = xml.replace(/-[,.]?”/g, "—”"); + xml = xml.replace(/-(!|\?)”/g, "—$1”"); + xml = xml.replace(/-[,.]?<\/em>”/g, "—”"); + xml = xml.replace(/-“/g, "—”"); + xml = xml.replace(/

-/g, "

—"); + xml = xml.replace(/-<\/p>/g, "—

"); + xml = xml.replace(/-<\/em><\/p>/g, "—

"); + xml = xml.replace(/\s?\s?–\s?\s?/g, "—"); + xml = xml.replace(/-\s\s?/g, "—"); + xml = xml.replace(/\s?\s-/g, "—"); + xml = xml.replace(/\s+—”/g, "—”"); + xml = xml.replace(/I-I/g, "I—I"); + xml = xml.replace(/I-uh/g, "I—uh"); + + return xml; +} + +function enDashJointNames(xml) { + // Joint names should use en dashes + xml = xml.replace(/Dallon-Pelham/g, "Dallon–Pelham"); + xml = xml.replace(/Bet-Gimel/g, "Bet–Gimel"); + xml = xml.replace(/Tristan-Capricorn/g, "Tristan–Capricorn"); + xml = xml.replace(/Capricorn-Byron/g, "Capricorn–Byron"); + xml = xml.replace(/Tristan-Byron/g, "Tristan–Byron"); + xml = xml.replace(/Gimel-Europe/g, "Gimel–Europe"); + xml = xml.replace(/G-N/g, "G–N"); + xml = xml.replace(/Imp-Damsel/g, "Imp–Damsel"); + xml = xml.replace(/Damsel-Ashley/g, "Damsel–Ashley"); + xml = xml.replace(/Antares-Anelace/g, "Antares–Anelace"); + xml = xml.replace(/Challenger-Gallant/g, "Challenger–Gallant"); + xml = xml.replace(/Undersider(s?)-(Breakthrough|Ambassador)/g, "Undersider$1–$2"); + xml = xml.replace(/Norwalk-Fairfield/g, "Norwalk–Fairfield"); + xml = xml.replace(/East-West/g, "east–west"); + xml = xml.replace(/(Green|Yellow)-Black/g, "$1–Black"); + xml = xml.replace(/Creutzfeldt-Jakob/g, "Creutzfeldt–Jakob"); + xml = xml.replace(/Astaroth-Nidhug/g, "Astaroth–Nidhug"); + xml = xml.replace(/Capulet-Montague/g, "Capulet–Montague"); + xml = xml.replace(/Weaver-Clockblocker/g, "Weaver–Clockblocker"); + xml = xml.replace(/Alexandria-Pretender/g, "Alexandria–Pretender"); + xml = xml.replace(/Night Hag-Nyx/g, "Night Hag–Nyx"); + xml = xml.replace(/Crawler-Breed/g, "Crawler–Breed"); + xml = xml.replace(/Simurgh-Myrddin-plant/g, "Simurgh–Myrddin–plant"); + xml = xml.replace(/Armsmaster-Defiant/g, "Armsmaster–Defiant"); + + return xml; +} + +function fixPossessives(xml) { // Fix possessive of names ending in "s" // Note: if the "s" is unvoiced, as in Marquis, then it doesn't get the second "s". xml = xml.replace(/([^‘])Judas’([^s])/g, "$1Judas’s$2"); @@ -246,62 +394,15 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/([^‘])Ms. Stillons’([^s])/g, "$1Ms. Stillons’s$2"); xml = xml.replace(/([^‘])Chuckles’([^s])/g, "$1Chuckles’s$2"); - // Fixes dashes - xml = xml.replace(/ – /g, "—"); - xml = xml.replace(/“((?:)?)-/g, "“$1—"); - xml = xml.replace(/-[,.]?”/g, "—”"); - xml = xml.replace(/-(!|\?)”/g, "—$1”"); - xml = xml.replace(/-[,.]?<\/em>”/g, "—”"); - xml = xml.replace(/-“/g, "—”"); - xml = xml.replace(/

-/g, "

—"); - xml = xml.replace(/-<\/p>/g, "—

"); - xml = xml.replace(/-<\/em><\/p>/g, "—

"); - xml = xml.replace(/\s?\s?–\s?\s?/g, "—"); - xml = xml.replace(/-\s\s?/g, "—"); - xml = xml.replace(/\s?\s-/g, "—"); - xml = xml.replace(/\s+—”/g, "—”"); - xml = xml.replace(/I-I/g, "I—I"); - xml = xml.replace(/I-uh/g, "I—uh"); - - // "X-year-old" should use hyphens; all grammar guides agree. The books are very inconsistent but most often omit - // them. - xml = xml.replace(/(\w+)[ -]year[ -]old(s?)(?!\w)/g, "$1-year-old$2"); - xml = xml.replace(/(\w+) or (\w+)-year-old/g, "$1- or $2-year-old"); - - // Fix missing spaces after commas - xml = xml.replace(/([a-zA-Z]+),([a-zA-Z]+)/g, "$1, $2"); - - // Joint names should use em dashes - xml = xml.replace(/Dallon-Pelham/g, "Dallon–Pelham"); - xml = xml.replace(/Bet-Gimel/g, "Bet–Gimel"); - xml = xml.replace(/Tristan-Capricorn/g, "Tristan–Capricorn"); - xml = xml.replace(/Capricorn-Byron/g, "Capricorn–Byron"); - xml = xml.replace(/Tristan-Byron/g, "Tristan–Byron"); - xml = xml.replace(/Gimel-Europe/g, "Gimel–Europe"); - xml = xml.replace(/G-N/g, "G–N"); - xml = xml.replace(/Imp-Damsel/g, "Imp–Damsel"); - xml = xml.replace(/Damsel-Ashley/g, "Damsel–Ashley"); - xml = xml.replace(/Antares-Anelace/g, "Antares–Anelace"); - xml = xml.replace(/Challenger-Gallant/g, "Challenger–Gallant"); - xml = xml.replace(/Undersider(s?)-(Breakthrough|Ambassador)/g, "Undersider$1–$2"); - xml = xml.replace(/Norwalk-Fairfield/g, "Norwalk–Fairfield"); - xml = xml.replace(/East-West/g, "east–west"); - xml = xml.replace(/(Green|Yellow)-Black/g, "$1–Black"); - xml = xml.replace(/Creutzfeldt-Jakob/g, "Creutzfeldt–Jakob"); - xml = xml.replace(/Astaroth-Nidhug/g, "Astaroth–Nidhug"); - xml = xml.replace(/Capulet-Montague/g, "Capulet–Montague"); - xml = xml.replace(/Weaver-Clockblocker/g, "Weaver–Clockblocker"); - xml = xml.replace(/Alexandria-Pretender/g, "Alexandria–Pretender"); - xml = xml.replace(/Night Hag-Nyx/g, "Night Hag–Nyx"); - xml = xml.replace(/Crawler-Breed/g, "Crawler–Breed"); - xml = xml.replace(/Simurgh-Myrddin-plant/g, "Simurgh–Myrddin–plant"); - xml = xml.replace(/Armsmaster-Defiant/g, "Armsmaster–Defiant"); + return xml; +} +function cleanSceneBreaks(xml) { // Normalize scene breaks.
would be more semantically appropriate, but loses the author's intent. This is // especially the case in Ward, which uses a variety of different scene breaks. + xml = xml.replace(/]*)>■<\/p>/g, `

`); - xml = xml.replace(/

⊙<\/p>/g, `

`); xml = xml.replace(/

⊙<\/strong><\/p>/g, `

`); xml = xml.replace(/

⊙<\/strong><\/em><\/p>/g, `

`); @@ -311,40 +412,10 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/

⊙ *⊙ *⊙ *⊙ *⊙<\/strong><\/p>/g, `

⊙ ⊙ ⊙ ⊙ ⊙

`); - // Fix recurring miscapitalization with questions - xml = xml.replace(/\?”\s\s?She asked/g, "?” she asked"); - xml = xml.replace(/\?”\s\s?He asked/g, "?” he asked"); - - // Fix bad periods and spacing/markup surrounding them - xml = xml.replace(/\.\.<\/p>/g, ".

"); - xml = xml.replace(/\.\.”<\/p>/g, ".”

"); - xml = xml.replace(/ \. /g, ". "); - xml = xml.replace(/ \.<\/p>/g, ".

"); - xml = xml.replace(/\.\.\./g, "…"); - - // Fix extra spaces - xml = xml.replace(/ ? <\/p>/g, "

"); - xml = xml.replace(/([a-z]) ,/g, "$1,"); - - // The author often fails to terminate a sentence, instead using a comma after a dialogue tag. For example, - // > “I didn’t get much done,” Greg said, “I got distracted by... - // This should instead be - // > “I didn’t get much done,” Greg said. “I got distracted by... - // - // Our heuristic is to try to automatically fix this if the dialogue tag is two words (X said/admitted/sighed/etc.). - // - // This sometimes overcorrects, as in the following example: - // > “Basically,” Alec said, “For your powers to manifest, ... - // Here instead we should lowercase the "f". We handle that via one-offs in substitutions.json. - // - // This applies to ~800 instances, so although we have to correct back in substitutions.json a decent number of - // times, it definitely pays for itself. Most of the instances we have to correct back we also need to fix the - // capitalization anyway, and that's harder to do automatically, since proper names/"I"/etc. stay capitalized. - xml = xml.replace(/,” ([A-Za-z]+ [A-Za-z]+), “([A-Z])/g, ",” $1. “$2"); - - // Replace single-word s with s. Other s are probably erroneous too, but these are known-bad. - xml = xml.replace(/([A-Za-z]+)<\/i>/g, "$1"); + return xml; +} +function fixCapitalization(xml, book) { // This occurs enough times it's better to do here than in one-off fixes. We correct the single instance where // it's incorrect to capitalize in the one-off fixes. // Note that Ward contains much talk of "the clairvoyants", so we don't want to capitalize plurals. @@ -366,13 +437,6 @@ function getBodyXML(chapter, book, contentEl) { // This is sometimes missing its capitalization. xml = xml.replace(/the birdcage/g, "the Birdcage"); - // This is usually spelled "TV" but sometimes the other ways. Normalize. - xml = xml.replace(/(\b)tv(\b)/g, "$1TV$2"); - xml = xml.replace(/t\.v\./ig, "TV"); - - // This is commonly misspelled. - xml = xml.replace(/([Ss])houlderblade/g, "$1houlder blade"); - // There's no reason why these should be capitalized. (Note that they never appear at the beginning of any sentences.) xml = xml.replace(/Halberd/g, "halberd"); xml = xml.replace(/Loft/g, "loft"); @@ -397,9 +461,6 @@ function getBodyXML(chapter, book, contentEl) { "$1–$2" ); - // This is consistently missing accents - xml = xml.replace(/Yangban/g, "Yàngbǎn"); - // Place names need to always be capitalized xml = xml.replace(/North end/g, "North End"); xml = xml.replace(/(Stonemast|Shale) avenue/g, "$1 Avenue"); @@ -409,14 +470,48 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/the megalopolis/g, "the Megalopolis"); xml = xml.replace(/earths(?![a-z])/g, "Earths"); - // These are usually not italicized, but sometimes are. Other foreign-language names (like Yàngbǎn) are not - // italicized, so we go in the direction of removing the italics. - xml = xml.replace(/Garama<\/em>/g, "Garama"); - xml = xml.replace(/Thanda<\/em>/g, "Thanda"); - xml = xml.replace(/Sifara([^<]*)<\/em>/g, "Sifara$1"); - xml = xml.replace(/Moord Nag([^<]*)<\/em>/g, "Moord Nag$1"); - xml = xml.replace(/Califa de Perro([^<]*)<\/em>/g, "Califa de Perro$1"); - xml = xml.replace(/Turanta([^<]*)<\/em>/g, "Turanta$1"); + // "Mom" and "Dad" should be capitalized when used as a proper name. These regexps are tuned to catch a good amount of + // instances, without over-correcting for non-proper-name-like cases. Many other instances are handled in + // substitutions.json. + xml = xml.replace(/(? { - if (substitution.before) { - const indexOf = xml.indexOf(substitution.before); - if (indexOf === -1) { - warnings.push(`Could not find text "${substitution.before}" in ${chapter.url}. The chapter may have been ` + - `updated at the source, in which case, you should edit substitutions.json.`); - } - if (indexOf !== xml.lastIndexOf(substitution.before)) { - warnings.push(`The text "${substitution.before}" occurred twice, and so the substitution was ambiguous. ` + - `Update substitutions.json for a more precise substitution.`); - } - - xml = xml.replace(new RegExp(escapeRegExp(substitution.before)), substitution.after); - } else if (substitution.regExp) { - xml = xml.replace(new RegExp(substitution.regExp, "g"), substitution.replacement); - } else { - warnings.push(`Invalid substitution specified for ${chapter.url}`); - } - }); - - // Serializer inserts extra xmlns for us since it doesn't know we're going to put this into a . - // Use this opportunity to insert a comment pointing to the original URL, for reference. - xml = xml.replace( - //, - `\n\n`); - - return { xml, warnings }; + return xml; } function isEmptyOrGarbage(el) { diff --git a/lib/substitutions.json b/lib/substitutions.json index dcfbf93..ef2bc4f 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2448,12 +2448,6 @@ "after": "all the way up to the nape of my neck" } ], - "https://parahumans.wordpress.com/2012/12/13/interlude-16-donation-bonus-2/": [ - { - "before": "", - "after": "”" - } - ], "https://parahumans.wordpress.com/2012/12/15/monarch-16-7/": [ { "before": "Brockton bay", @@ -2516,6 +2510,10 @@ { "before": "ten,” I asked. “Just", "after": "ten,” I asked, “just" + }, + { + "before": "weeks, months. Anticipating", + "after": "weeks, months. Anticipating" } ], "https://parahumans.wordpress.com/2013/01/08/migration-17-1/": [ @@ -2654,7 +2652,7 @@ ], "https://parahumans.wordpress.com/2013/01/15/migration-17-8/": [ { - "before": "replied. Need to talk about being more secure with our names. “What’s going on?", + "before": "replied. Need to talk about being more secure with our names. “What’s going on?”", "after": "replied. Need to talk about being more secure with our names. “What’s going on?”" }, { @@ -3356,6 +3354,10 @@ { "before": "aren’t allies.", "after": "aren’t allies.”" + }, + { + "before": "Blameful? “Guilty", + "after": "Blameful? “Guilty" } ], "https://parahumans.wordpress.com/2013/06/20/crushed-24-5/": [ @@ -4547,6 +4549,10 @@ { "before": "dangerous?” The recluse asked", "after": "dangerous?” the recluse asked" + }, + { + "before": "Stop. Please.", + "after": "Stop. Please." } ], "https://www.parahumans.net/2018/02/08/shade-4-4/": [ From 6ee5fb9ef6c2a17d05c075e8ddbd45cab4a89440 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 19:46:52 -0500 Subject: [PATCH 047/186] Fix backward closing single quotation marks --- lib/convert-worker.js | 1 + lib/substitutions.json | 20 ++------------------ 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index f69df99..4fac1b9 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -196,6 +196,7 @@ function getBodyXML(chapter, book, contentEl) { fixEms(); fixQuotesAndApostrophes(); fixEms(); + xml = xml.replace(/‘([^<]+)<\/em>‘/g, "‘$1’"); xml = xml.replace(/I”m/g, "I’m"); // Similar problems occur in Ward with and as do in Worm with s diff --git a/lib/substitutions.json b/lib/substitutions.json index ef2bc4f..5ddd4c0 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2222,8 +2222,8 @@ ], "https://parahumans.wordpress.com/2012/09/15/prey-14-4/": [ { - "before": "a ‘No, you just told me.‘, but", - "after": "a “No, you just told me,” but" + "before": "a ‘No, you just told me.’, but", + "after": "a ‘No, you just told me,’ but" }, { "before": "Amy,” Tattletale said. “But", @@ -3749,14 +3749,6 @@ "before": "I’m not? Fuck. There’s", "after": "I’m not? Fuck. There’s" }, - { - "before": "‘Freud‘, and", - "after": "‘Freud’, and" - }, - { - "before": "‘who knows?‘", - "after": "‘who knows?’" - }, { "before": "I suspect It’s a", "after": "I suspect it’s a" @@ -4599,10 +4591,6 @@ { "before": "‘Won’t", "after": "‘Won’t" - }, - { - "before": "you the number‘", - "after": "you the number’" } ], "https://www.parahumans.net/2018/02/22/shade-interlude-4c/": [ @@ -5593,10 +5581,6 @@ { "before": "for you.", "after": "for you." - }, - { - "before": "Why ‘inflict‘", - "after": "Why ‘inflict’" } ], "https://www.parahumans.net/2018/09/25/gleaming-9-10/": [ From 6c6b360dac181de30e93b0428b1aa5d678a26893 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 19:48:52 -0500 Subject: [PATCH 048/186] Fix a couple instances of "Hardboil" to be "Hard Boil" --- lib/substitutions.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 5ddd4c0..54b3eca 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5894,6 +5894,10 @@ { "before": "all about how Masters have", "after": "all about how masters have" + }, + { + "before": "Hardboil", + "after": "Hard Boil" } ], "https://www.parahumans.net/2018/12/01/polarize-10-11/": [ @@ -6315,6 +6319,10 @@ { "before": "a small part of that was being being grumpy", "after": "a small part of that was being grumpy" + }, + { + "before": "Hardboil", + "after": "Hard Boil" } ], "https://www.parahumans.net/2019/08/20/from-within-16-3/": [ From 326ec148c9b07b4847b4a182024d5100000c187c Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 19:56:45 -0500 Subject: [PATCH 049/186] =?UTF-8?q?Fix=20instances=20of=20"Warden=E2=80=99?= =?UTF-8?q?s"=20which=20should=20be=20"Wardens=E2=80=99"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 4fac1b9..b16399b 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -395,6 +395,9 @@ function fixPossessives(xml) { xml = xml.replace(/([^‘])Ms. Stillons’([^s])/g, "$1Ms. Stillons’s$2"); xml = xml.replace(/([^‘])Chuckles’([^s])/g, "$1Chuckles’s$2"); + // This one is not just missing the extra "s"; it's often misplaced. + xml = xml.replace(/Warden’s/g, "Wardens’"); + return xml; } From 13b25835ba50be4d9a376f24c52e93f1c3d76b7b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 7 Nov 2020 19:58:11 -0500 Subject: [PATCH 050/186] =?UTF-8?q?Always=20lowercase=20"the=20Wardens?= =?UTF-8?q?=E2=80=99=20headquarters"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/convert-worker.js | 4 ++++ lib/substitutions.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index b16399b..9c5c0f8 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -480,6 +480,10 @@ function fixCapitalization(xml, book) { xml = xml.replace(/(? Date: Sat, 14 Nov 2020 16:53:15 -0500 Subject: [PATCH 051/186] Spot fixes for Ward through Blinding 11.5 --- lib/substitutions.json | 176 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 2db7cf8..cbe754e 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5902,18 +5902,132 @@ { "before": "Sveta added a, “No,” for good measure", "after": "Sveta added a “no” for good measure" + }, + { + "before": "We need to figure out how—we—handle this", + "after": "We need to figure out how we handle this" } ], "https://www.parahumans.net/2018/12/01/polarize-10-11/": [ { "before": "See dad, sleep.", "after": "See Dad, sleep." + }, + { + "before": "T, u-.", + "after": "T, U." + }, + { + "before": "I did it with—I’ve done it before", + "after": "I did it with— I’ve done it before" + }, + { + "before": "and to be our liaisons to the Wardens", + "after": "and to be our liaison to the Wardens" + }, + { + "before": "“Twelve hours ago,” I explained. “The Navigators were sent", + "after": "“Twelve hours ago,” I explained, “the Navigators were sent" + }, + { + "before": "You said you wanted to limiting this serious step", + "after": "You said you wanted to limit this serious step" + }, + { + "before": "On any other day, objective, I would", + "after": "On any other day, objectively, I would" + }, + { + "before": "how it were more active", + "after": "how it was more active" + }, + { + "before": "running to the same places.”", + "after": "running to the same places.”" + } + ], + "https://www.parahumans.net/2018/12/04/polarize-10-12/": [ + { + "before": "Dryad Project 3", + "after": "Dryad Project Three" + }, + { + "before": "Pollution, deforestation, ecology all things that", + "after": "Pollution, deforestation, ecology, all things that" + }, + { + "before": "dropped an expose", + "after": "dropped an exposé" + }, + { + "before": "—But the good feelings", + "after": "—but the good feelings" + }, + { + "before": "A pan—a cure all for", + "after": "A pan— A cure-all for" + }, + { + "before": "No—Yes, but that isn’t", + "after": "No— Yes, but that isn’t" + } + ], + "https://www.parahumans.net/2018/12/08/polarize-10-13/": [ + { + "before": "A ring thirty feet in diameterand past those thirty feet", + "after": "A ring thirty feet in diameter—and past those thirty feet" + }, + { + "before": "axe—arm", + "after": "axe-arm" } ], "https://www.parahumans.net/2018/12/11/interlude-10-y/": [ { "before": "shape of the the moment", "after": "shape of the moment" + }, + { + "before": "We have! Multiple times!", + "after": "We have! Multiple times!" + } + ], + "https://www.parahumans.net/2018/12/15/interlude-10-z/": [ + { + "before": "roman with hair on his legs", + "after": "Roman with hair on his legs" + }, + { + "before": "New Brockton primary school", + "after": "New Brockton Primary School" + }, + { + "before": "They can be so cool, but", + "after": "They can be so cool, but" + }, + { + "before": "Rome-Roman’s", + "after": "Rome—Roman’s" + }, + { + "before": "Amais’", + "after": "Amais’s" + } + ], + "https://www.parahumans.net/2018/12/18/blinding-11-1/": [ + { + "before": "prisoner and patrol", + "after": "prisoner and Patrol" + }, + { + "before": "before they chage", + "after": "before they change" + } + ], + "https://www.parahumans.net/2018/12/22/blinding-11-2/": [ + { + "before": "—But please respect", + "after": "—but please respect" } ], "https://www.parahumans.net/2018/12/25/blinding-11-3/": [ @@ -5921,6 +6035,68 @@ "before": "the pharmacist", "after": "the Pharmacist", "_comment": "See comment in https://www.parahumans.net/2018/09/29/gleaming-9-11/" + }, + { + "before": "…Delivering my coup de grace", + "after": "…delivering my coup de grace" + }, + { + "before": "G.G..", + "after": "G.G." + }, + { + "before": "Flash Gun", + "after": "flash gun" + } + ], + "https://www.parahumans.net/2018/12/29/interlude-11-a/": [ + { + "before": "D.J..", + "after": "D.J." + }, + { + "before": "Chiet", + "after": "Cheit" + } + ], + "https://www.parahumans.net/2019/01/01/blinding-11-4/": [ + { + "before": "—But if your head is full of noise", + "after": "—but if your head is full of noise" + }, + { + "before": "One of the Heartbroken—Candy, I was pretty sure, was sitting", + "after": "One of the Heartbroken—Candy, I was pretty sure—was sitting" + } + ], + "https://www.parahumans.net/2019/01/05/blinding-11-5/": [ + { + "before": "they‘re", + "after": "they’re" + }, + { + "before": "and piece of construction material", + "after": "and pieces of construction material" + }, + { + "before": "the chiming finding it stride", + "after": "the chiming finding its stride" + }, + { + "before": "need to step in.", + "after": "need to step in.”" + }, + { + "before": "a smell had soaked into", + "after": "a smell that had soaked into" + }, + { + "before": "result putting together", + "after": "result of putting together" + }, + { + "before": "’emergency alert’", + "after": "‘emergency alert’" } ], "https://www.parahumans.net/2019/01/12/blinding-11-7/": [ From c5b13e7cc1e5a66cb37f4bd7b03a5c6b35b50a58 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 16:54:19 -0500 Subject: [PATCH 052/186] Fix capitalization and apostrophes for truncated names --- lib/convert-worker.js | 22 ++++++++++++++++++++-- lib/substitutions.json | 8 -------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 9c5c0f8..8d73a55 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -186,8 +186,6 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/

“\s+/g, "

“"); xml = xml.replace(/'/g, "’"); xml = xml.replace(/’([A-Za-z]+)’/g, "‘$1’"); - xml = xml.replace(/‘Sup/g, "’Sup"); - xml = xml.replace(/‘cuz/g, "’cuz"); xml = xml.replace(/([a-z])”<\/p>/g, "$1.”

"); } @@ -226,6 +224,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/ ? <\/p>/g, "

"); xml = xml.replace(/([a-z]) ,/g, "$1,"); + xml = fixTruncatedWords(xml); xml = fixDialogueTags(xml); xml = fixForeignNames(xml); xml = fixEmDashes(xml); @@ -267,6 +266,22 @@ function getBodyXML(chapter, book, contentEl) { return { xml, warnings }; } +function fixTruncatedWords(xml) { + xml = xml.replace(/‘Sup/g, "’Sup"); + xml = xml.replace(/‘cuz/g, "’cuz"); + + // Short for "Sidepeace" + xml = xml.replace(/[‘’][Pp]iece(?![a-z])/g, "’Piece"); + + // Short for "Disjoint" + xml = xml.replace(/[‘’][Jj]oint(?![a-z])/g, "’Joint"); + + // Short for "Contender" + xml = xml.replace(/[‘’][Tt]end(?![a-z])/g, "’Tend"); + + return xml; +} + function fixDialogueTags(xml) { // Fix recurring miscapitalization with questions xml = xml.replace(/\?”\s\s?She asked/g, "?” she asked"); @@ -428,6 +443,9 @@ function fixCapitalization(xml, book) { // ReSound's name is sometimes miscapitalized. The word is never used in a non-name context. xml = xml.replace(/Resound/g, "ReSound"); + // The Speedrunners team name is missing its capitalization a couple times. + xml = xml.replace(/speedrunners/g, "Speedrunners"); + // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". "patrol // group" is always lowercased. It seems like "Patrol" is a proper name, and is used as a capitalized modifier in // other contexts (e.g. Patrol leader). So let's standardize on "Patrol ". diff --git a/lib/substitutions.json b/lib/substitutions.json index cbe754e..6aa1e31 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4628,10 +4628,6 @@ } ], "https://www.parahumans.net/2018/03/10/shadow-5-5/": [ - { - "before": "Don’t fucking hit me, ‘piece", - "after": "Don’t fucking hit me, ’piece" - }, { "before": "out of the back, “She still would have", "after": "out of the back, “she still would have" @@ -5847,10 +5843,6 @@ "before": "confines of the suit. and rearranged herself", "after": "confines of the suit, and rearranged herself" }, - { - "before": "‘piece", - "after": "’piece" - }, { "before": "Fuck y—of course", "after": "Fuck y— Of course" From 15e34e47a316d616acd890ddd3b3be7eb736b9cc Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 17:00:06 -0500 Subject: [PATCH 053/186] Fix double-periods in Ward It appears all the ones in Worm, at least detectable via this pattern, were already caught. --- lib/convert-worker.js | 1 + lib/substitutions.json | 42 ------------------------------------------ 2 files changed, 1 insertion(+), 42 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 8d73a55..0b7a59c 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -219,6 +219,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/ \. /g, ". "); xml = xml.replace(/ \.<\/p>/g, ".

"); xml = xml.replace(/\.\.\./g, "…"); + xml = xml.replace(/\.\. {2}/g, ". "); // Fix extra spaces xml = xml.replace(/ ? <\/p>/g, "

"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 6aa1e31..eb74acf 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2322,16 +2322,6 @@ "after": "this,” Regent said, “I" } ], - "https://parahumans.wordpress.com/2012/11/03/colony-15-6/": [ - { - "before": "M.O..", - "after": "M.O." - }, - { - "before": "tearing flesh..", - "after": "tearing flesh." - } - ], "https://parahumans.wordpress.com/2012/11/06/colony-15-7/": [ { "before": "this sort of resistance.", @@ -2401,10 +2391,6 @@ } ], "https://parahumans.wordpress.com/2012/11/24/monarch-16-1/": [ - { - "before": "A.I..", - "after": "A.I." - }, { "before": "; Nobody", "after": "; nobody" @@ -2727,10 +2713,6 @@ } ], "https://parahumans.wordpress.com/2013/02/05/monarch-18-6/": [ - { - "before": "M.M..", - "after": "M.M." - }, { "before": "‘okay’", "after": "‘OK’", @@ -3544,12 +3526,6 @@ "after": "kill all of the masters that are generating" } ], - "https://parahumans.wordpress.com/2013/08/03/sting-26-6/": [ - { - "before": "canals..", - "after": "canals." - } - ], "https://parahumans.wordpress.com/2013/08/06/interlude-26a/": [ { "before": "city, Golem thought.
", @@ -3638,12 +3614,6 @@ "after": "said. “But" } ], - "https://parahumans.wordpress.com/2013/08/22/extinction-27-4/": [ - { - "before": "pattern..", - "after": "pattern." - } - ], "https://parahumans.wordpress.com/2013/08/24/extinction-27-5/": [ { "before": "around around", @@ -5769,10 +5739,6 @@ "before": "we should get going", "after": "We should get going" }, - { - "before": "clean her stuff.. She’ll be out soon", - "after": "clean her stuff. She’ll be out soon" - }, { "before": "finger—and thumb-rings", "after": "finger- and thumb-rings" @@ -6032,20 +5998,12 @@ "before": "…Delivering my coup de grace", "after": "…delivering my coup de grace" }, - { - "before": "G.G..", - "after": "G.G." - }, { "before": "Flash Gun", "after": "flash gun" } ], "https://www.parahumans.net/2018/12/29/interlude-11-a/": [ - { - "before": "D.J..", - "after": "D.J." - }, { "before": "Chiet", "after": "Cheit" From 1a2b6de78e12a04a5aed90c4443344e9f964fe81 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 17:23:22 -0500 Subject: [PATCH 054/186] Standardize on one style for "Case Fifty-Three" and friends --- lib/convert-worker.js | 26 ++++++++++++++++++++++++++ lib/substitutions.json | 16 ---------------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 0b7a59c..a943d8f 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -236,6 +236,7 @@ function getBodyXML(chapter, book, contentEl) { xml = fixMispellings(xml); xml = fixHyphens(xml); xml = standardizeSpellings(xml); + xml = fixCaseNumbers(xml); // One-off fixes for (const substitution of substitutions[chapter.url] || []) { @@ -563,6 +564,31 @@ function standardizeSpellings(xml) { return xml; } +function fixCaseNumbers(xml) { + // Case numbers are very inconsistent. For "Case Fifty-Three", the breakdown is: + // * 9 Case-53 + // * 6 Case 53 + // * 2 case-53 + // * 1 Case-Fifty-Three + // * 41 Case Fifty-Three + // * 1 Case Fifty Three + // * 13 Case fifty-three + // * 119 case fifty-three + // * 4 case-fifty-three + // * 1 case fifty three + // We standardize on "Case Fifty-Three"; although it isn't the most common, it seems best to treat these as proper + // nouns. + + xml = xml.replace(/case[ -](?:fifty[ -]three|53)(?!’)/ig, "Case Fifty-Three"); + xml = xml.replace(/case[ -](?:thirty[ -]two|53)(?!’)/ig, "Case Thirty-Two"); + xml = xml.replace(/case[ -](?:sixty[ -]nine|53)(?!’)/ig, "Case Sixty-Nine"); + + xml = xml.replace(/(? "Case " + caseNumber[0].toUpperCase() + caseNumber.substring(1)); + + return xml; +} + function isEmptyOrGarbage(el) { const text = el.textContent.trim(); return text === "" || diff --git a/lib/substitutions.json b/lib/substitutions.json index eb74acf..edab3e9 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -3723,10 +3723,6 @@ "before": "I suspect It’s a", "after": "I suspect it’s a" }, - { - "before": "Case Fifty-three", - "after": "case fifty-three" - }, { "before": "reality,” Tattletale said. “What’s", "after": "reality,” Tattletale said, “what’s" @@ -3751,10 +3747,6 @@ } ], "https://parahumans.wordpress.com/2013/09/17/interlude-28/": [ - { - "before": "Case fifty-threes", - "after": "case fifty-threes" - }, { "before": "than,” Revel paused. “Six", "after": "than,” Revel paused, “six" @@ -4045,14 +4037,6 @@ "before": "gun build", "after": "gun built" }, - { - "before": "hunchbacked Case fifty-three", - "after": "hunchbacked case fifty-three" - }, - { - "before": "moved Case fifty-threes", - "after": "moved case fifty-threes" - }, { "before": "I revoked my control over her, leaving in in the middle", "after": "I revoked my control over her, leaving her in the middle" From 631897b011d5cb1d49ef1499d51d5cfc9b0f2574 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 17:36:52 -0500 Subject: [PATCH 055/186] Capitalize "Heartbroken" when it's a proper noun --- lib/substitutions.json | 60 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/lib/substitutions.json b/lib/substitutions.json index edab3e9..97ef03c 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -6031,6 +6031,14 @@ { "before": "’emergency alert’", "after": "‘emergency alert’" + }, + { + "before": "Three heartbroken", + "after": "Three Heartbroken" + }, + { + "before": "two heartbroken", + "after": "two Heartbroken" } ], "https://www.parahumans.net/2019/01/12/blinding-11-7/": [ @@ -6045,6 +6053,18 @@ { "before": "more fragile than it should have been

", "after": "more fragile than it should have been.

" + }, + { + "before": "too close to heartbroken", + "after": "too close to Heartbroken" + }, + { + "before": "Precipice and the heartbroken", + "after": "Precipice and the Heartbroken" + }, + { + "before": "If the heartbroken’s power", + "after": "If the Heartbroken’s power" } ], "https://www.parahumans.net/2019/01/15/blinding-11-8/": [ @@ -6057,12 +6077,6 @@ "after": "Victoria-flesh" } ], - "https://www.parahumans.net/2019/01/26/blinding-11-9/": [ - { - "before": "I told the mercenary.”", - "after": "I told the mercenary." - } - ], "https://www.parahumans.net/2019/01/19/interlude-11-b/": [ { "before": "loading up trucks with basic supplies

", @@ -6070,6 +6084,10 @@ } ], "https://www.parahumans.net/2019/01/26/blinding-11-9/": [ + { + "before": "I told the mercenary.”", + "after": "I told the mercenary." + }, { "before": "someone had been been called at three", "after": "someone had been called at three" @@ -6077,6 +6095,20 @@ { "before": "I croaked. as she picked up", "after": "I croaked, as she picked up" + }, + { + "before": "two heartbroken", + "after": "two Heartbroken" + }, + { + "before": "three heartbroken", + "after": "three Heartbroken" + } + ], + "https://www.parahumans.net/2019/01/29/blinding-11-10/": [ + { + "before": "heartbroken kid", + "after": "Heartbroken kid" } ], "https://www.parahumans.net/2019/02/02/blinding-11-11/": [ @@ -6237,6 +6269,12 @@ "after": "wiped—or perhaps struck—clean." } ], + "https://www.parahumans.net/2019/04/16/black-13-5/": [ + { + "before": "For some of the heartbroken", + "after": "For some of the Heartbroken" + } + ], "https://www.parahumans.net/2019/04/20/black-13-6/": [ { "before": "I’m a Master, right, you", @@ -6375,6 +6413,10 @@ { "before": "wall met ceiling. the wall was smooth", "after": "wall met ceiling. The wall was smooth" + }, + { + "before": "The blond heartbroken", + "after": "The blond Heartbroken" } ], "https://www.parahumans.net/2019/07/09/dying-15-2/": [ @@ -6743,6 +6785,12 @@ "after": "figure out while she was gone. We’ll see who" } ], + "https://www.parahumans.net/2020/02/18/infrared-19-g/": [ + { + "before": "Imp and the heartbroken", + "after": "Imp and the Heartbroken" + } + ], "https://www.parahumans.net/2020/02/25/last-20-1/": [ { "before": "across this clearing. eyes, cameras", From 9da59c9104844d29a4444dc9b3bdda37f61b7488 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 17:49:41 -0500 Subject: [PATCH 056/186] Fix a variety of missing periods --- lib/substitutions.json | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 97ef03c..9f0c45c 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -444,6 +444,10 @@ { "before": "down the stairs. then as carefully as we could", "after": "down the stairs. Then, as carefully as we could" + }, + { + "before": "I took his feet With agonizing slowness", + "after": "I took his feet. With agonizing slowness" } ], "https://parahumans.wordpress.com/2011/12/03/hive-5-9/": [ @@ -754,6 +758,10 @@ { "before": "Coil,” I spoke. “It’s", "after": "Coil,” I spoke, “it’s" + }, + { + "before": "trying to convince me The question", + "after": "trying to convince me. The question" } ], "https://parahumans.wordpress.com/2012/02/25/buzz-7-12/": [ @@ -1450,6 +1458,10 @@ { "before": "“…Things are", "after": "“…things are" + }, + { + "before": "swarm had gone Had the girl’s armor", + "after": "swarm had gone. Had the girl’s armor" } ], "https://parahumans.wordpress.com/2012/04/24/parasite-10-1/": [ @@ -2785,6 +2797,10 @@ { "before": "priest,” he said. “I", "after": "priest,” he said, “I" + }, + { + "before": "Jessica observed She looked like", + "after": "Jessica observed. She looked like" } ], "https://parahumans.wordpress.com/2013/02/09/queen-18-7/": [ @@ -2905,6 +2921,12 @@ "after": "noting,” Legend said, “that" } ], + "https://parahumans.wordpress.com/2013/03/05/scourge-19-5/": [ + { + "before": "returned to a standing position Her face was softer", + "after": "returned to a standing position. Her face was softer" + } + ], "https://parahumans.wordpress.com/2013/03/09/scourge-19-6/": [ { "before": "heailng", @@ -3500,6 +3522,10 @@ { "before": "think,” Dobrynja said. “You’ve", "after": "think,” Dobrynja said, “you’ve" + }, + { + "before": "particular type out there Eight Cherishes are dead", + "after": "particular type out there. Eight Cherishes are dead" } ], "https://parahumans.wordpress.com/2013/07/27/sting-26-4/": [ @@ -3570,6 +3596,10 @@ { "before": "these past few years

", "after": "these past few years.

" + }, + { + "before": "Focus Memorize.", + "after": "Focus. Memorize." } ], "https://parahumans.wordpress.com/2013/08/13/extinction-27-1/": [ @@ -3886,6 +3916,10 @@ { "before": "panting for breath. the wound at his", "after": "panting for breath. The wound at his" + }, + { + "before": "appeared behind her A man with yellow skin", + "after": "appeared behind her. A man with yellow skin" } ], "https://parahumans.wordpress.com/2013/10/15/speck-30-1/": [ @@ -5922,6 +5956,10 @@ { "before": "axe—arm", "after": "axe-arm" + }, + { + "before": "hit him again He wouldn’t simply", + "after": "hit him again. He wouldn’t simply" } ], "https://www.parahumans.net/2018/12/11/interlude-10-y/": [ @@ -6041,6 +6079,16 @@ "after": "two Heartbroken" } ], + "https://www.parahumans.net/2019/01/08/blinding-11-6/": [ + { + "before": "Let’s go Let’s make a hole", + "after": "Let’s go. Let’s make a hole" + }, + { + "before": "catch up with the group I saw Foil and Chastity", + "after": "catch up with the group. I saw Foil and Chastity" + } + ], "https://www.parahumans.net/2019/01/12/blinding-11-7/": [ { "before": "threw the the man", @@ -6575,6 +6623,10 @@ { "before": "one primary goal—me-, and who", "after": "one primary goal—me—and who" + }, + { + "before": "She’s aggressive If anyone makes", + "after": "She’s aggressive. If anyone makes" } ], "https://www.parahumans.net/2019/11/02/sundown-17-10/": [ @@ -6661,6 +6713,10 @@ { "before": "“I’m fine” Egg said", "after": "“I’m fine,” Egg said" + }, + { + "before": "can’t induce triggers There were parahumans", + "after": "can’t induce triggers. There were parahumans" } ], "https://www.parahumans.net/2020/01/04/infrared-19-3/": [ From 05a9abab9119b6c1825ba24cf279e5e070922c54 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 17:56:50 -0500 Subject: [PATCH 057/186] Fix many erroneously-italicized exclamation points --- lib/convert-worker.js | 1 + lib/substitutions.json | 44 +++++++++++++++--------------------------- 2 files changed, 17 insertions(+), 28 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index a943d8f..d90d750 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -196,6 +196,7 @@ function getBodyXML(chapter, book, contentEl) { fixEms(); xml = xml.replace(/‘([^<]+)<\/em>‘/g, "‘$1’"); xml = xml.replace(/I”m/g, "I’m"); + xml = xml.replace(/([a-z]+)!<\/em>/g, "$1!"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index 9f0c45c..5485182 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2282,6 +2282,10 @@ { "before": "volunteered, asked
\n
to", "after": "volunteered, asked to" + }, + { + "before": "happened to my daughter!?", + "after": "happened to my daughter!?" } ], "https://parahumans.wordpress.com/2012/10/25/interlude-15-donation-bonus-2/": [ @@ -2660,6 +2664,10 @@ { "before": "on his knees. he held the cigarette", "after": "on his knees. He held the cigarette" + }, + { + "before": "‘hief!", + "after": "’hief!" } ], "https://parahumans.wordpress.com/2013/01/19/queen-18-1/": [ @@ -3550,6 +3558,10 @@ { "before": "kill all of the Masters that are generating", "after": "kill all of the masters that are generating" + }, + { + "before": "—break up the fog!", + "after": "—break up the fog!" } ], "https://parahumans.wordpress.com/2013/08/06/interlude-26a/": [ @@ -4263,10 +4275,6 @@ "before": "Tattletale:
\nwaiting?", "after": "Tattletale: waiting?" }, - { - "before": "yes!", - "after": "yes!" - }, { "before": "Please, If you", "after": "Please, if you" @@ -5177,10 +5185,6 @@ { "before": "Keith said. “You decide", "after": "Keith said, “you decide" - }, - { - "before": "The towels!", - "after": "The towels!" } ], "https://www.parahumans.net/2018/07/03/beacon-8-1/": [ @@ -5348,10 +5352,6 @@ "before": "Natalie’s beetle", "after": "Natalie’s Beetle" }, - { - "before": "I said!", - "after": "I said!" - }, { "before": "adam’s apple", "after": "Adam’s apple" @@ -5512,10 +5512,6 @@ "before": "it was one thing!", "after": "It was one thing!" }, - { - "before": "as an anything!", - "after": "as an anything!" - }, { "before": "have backed you up!", "after": "have backed you up!" @@ -5834,14 +5830,6 @@ { "before": "they had Fallen behind", "after": "they had fallen behind" - }, - { - "before": "Fucking heroes!", - "after": "Fucking heroes!" - }, - { - "before": "the unfucked!", - "after": "the unfucked!" } ], "https://www.parahumans.net/2018/11/24/interlude-10-x/": [ @@ -6163,6 +6151,10 @@ { "before": "to Capricorn. then she looked", "after": "to Capricorn. Then she looked" + }, + { + "before": "fucking daughter!", + "after": "fucking daughter!" } ], "https://www.parahumans.net/2019/02/05/blinding-11-12/": [ @@ -6213,10 +6205,6 @@ { "before": "I need dad", "after": "I need Dad" - }, - { - "before": "Oh fuck!", - "after": "Oh fuck!" } ], "https://www.parahumans.net/2019/02/23/heavens-12-3/": [ From d2402b1bb2980c7698c0b5301449ac8614ce1486 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 18:13:12 -0500 Subject: [PATCH 058/186] Fix many erroneously-italicized closing quotes --- lib/convert-worker.js | 8 +++++--- lib/substitutions.json | 40 ++++++++++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index d90d750..63967ca 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -161,9 +161,9 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/‘\s*([^<]+)\s*’<\/em>/g, "‘$1’"); xml = xml.replace(/‘\s*([^<]+)\s*<\/em>\s*’/g, "‘$1’"); xml = xml.replace(/‘\s*\s*([^<]+)\s*’<\/em>/g, "‘$1’"); - xml = xml.replace(/“\s*([^<]+)\s*”<\/em>/g, "“$1”"); - xml = xml.replace(/“\s*([^<]+)\s*<\/em>\s*”/g, "“$1”"); - xml = xml.replace(/“\s*\s*([^<]+)\s*”<\/em>/g, "“$1”"); + xml = xml.replace(/“\s*([^<”]+)\s*”<\/em>/g, "“$1”"); + xml = xml.replace(/“\s*([^<”]+)\s*<\/em>\s*”/g, "“$1”"); + xml = xml.replace(/“\s*\s*([^<”]+)\s*”<\/em>/g, "“$1”"); xml = xml.replace(/([^\n>]) ?/g, "$1 "); xml = xml.replace(/ ?<\/em>/g, " "); xml = xml.replace(/]+)> /g, ""); @@ -197,6 +197,8 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/‘([^<]+)<\/em>‘/g, "‘$1’"); xml = xml.replace(/I”m/g, "I’m"); xml = xml.replace(/([a-z]+)!<\/em>/g, "$1!"); + xml = xml.replace(/(?([\w ’]+)([!.?])”<\/em>/g, "$1$2”"); + xml = xml.replace(/([\w ’]+[!.?])”<\/em>/g, "$1”"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index 5485182..8cdf8c4 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2544,6 +2544,10 @@ { "before": "city,” Jess said. “And", "after": "city,” Jess said, “and" + }, + { + "before": "“No!”", + "after": "“No!”" } ], "https://parahumans.wordpress.com/2013/01/10/migration-17-3/": [ @@ -3438,6 +3442,10 @@ { "before": "White capped", "after": "White-capped" + }, + { + "before": ". “Bosses are worried.”", + "after": ". “Bosses are worried.”" } ], "https://parahumans.wordpress.com/2013/07/09/scarab-25-4/": [ @@ -3486,12 +3494,6 @@ "after": "avoided" } ], - "https://parahumans.wordpress.com/2013/07/16/interlude-25/": [ - { - "before": "your manners?”", - "after": "your manners?”" - } - ], "https://parahumans.wordpress.com/2013/07/18/sting-26-1/": [ { "before": "up,” I said. “The", @@ -5798,10 +5800,6 @@ { "before": "Be safe—Nat.", "after": "Be safe —Nat." - }, - { - "before": "kill each other.”", - "after": "kill each other.”" } ], "https://www.parahumans.net/2018/11/17/polarize-10-8/": [ @@ -5904,10 +5902,6 @@ { "before": "how it were more active", "after": "how it was more active" - }, - { - "before": "running to the same places.”", - "after": "running to the same places.”" } ], "https://www.parahumans.net/2018/12/04/polarize-10-12/": [ @@ -6287,6 +6281,10 @@ { "before": "you have have surmised", "after": "you have surmised" + }, + { + "before": "pound of flesh, at least—!”", + "after": "pound of flesh, at least—!”" } ], "https://www.parahumans.net/2019/04/02/black-13-1/": [ @@ -6649,6 +6647,10 @@ { "before": "looking for mom in the crowd", "after": "looking for Mom in the crowd" + }, + { + "before": "“Entrapment.”", + "after": "“Entrapment.”" } ], "https://www.parahumans.net/2019/11/23/radiation-18-3/": [ @@ -6803,6 +6805,10 @@ { "before": "you know about” my Aunt Sarah said", "after": "you know about,” my Aunt Sarah said" + }, + { + "before": "so they grow in…”", + "after": "so they grow in…”" } ], "https://www.parahumans.net/2020/02/11/infrared-19-f/": [ @@ -6841,6 +6847,12 @@ "after": "across this clearing. Eyes, cameras" } ], + "https://www.parahumans.net/2020/03/07/last-20-4/": [ + { + "before": "peace!” Cryptid growled", + "after": "peace!” Cryptid growled" + } + ], "https://www.parahumans.net/2020/03/31/last-20-10/": [ { "before": "shaping it as it rolled out. it became a circular", From 075db7f4461739fd023f17ba3051fda519f8397c Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 18:37:52 -0500 Subject: [PATCH 059/186] Standardize on "Mrs." Yamada, not "Ms." --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 63967ca..6d722e1 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -228,6 +228,9 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/ ? <\/p>/g, "

"); xml = xml.replace(/([a-z]) ,/g, "$1,"); + // 197 instances of "Mrs." to 21 of "Ms." + xml = xml.replace(/Ms\. Yamada/g, "Mrs. Yamada"); + xml = fixTruncatedWords(xml); xml = fixDialogueTags(xml); xml = fixForeignNames(xml); From 584a52fc27f73f9bf231e72bae99c86de9d37268 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 18:41:39 -0500 Subject: [PATCH 060/186] Standardize on "Amias", not "Amais" --- lib/convert-worker.js | 15 ++++++++++++--- lib/substitutions.json | 4 ---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 6d722e1..acd415e 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -228,12 +228,10 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/ ? <\/p>/g, "

"); xml = xml.replace(/([a-z]) ,/g, "$1,"); - // 197 instances of "Mrs." to 21 of "Ms." - xml = xml.replace(/Ms\. Yamada/g, "Mrs. Yamada"); - xml = fixTruncatedWords(xml); xml = fixDialogueTags(xml); xml = fixForeignNames(xml); + xml = standardizeNames(xml); xml = fixEmDashes(xml); xml = enDashJointNames(xml); xml = fixPossessives(xml); @@ -330,6 +328,16 @@ function fixForeignNames(xml) { return xml; } +function standardizeNames(xml) { + // 197 instances of "Mrs." to 21 of "Ms." + xml = xml.replace(/Ms\. Yamada/g, "Mrs. Yamada"); + + // 25 instances of "Amias" to 3 of "Amais" + xml = xml.replace(/Amais/g, "Amias"); + + return xml; +} + function fixEmDashes(xml) { xml = xml.replace(/ – /g, "—"); xml = xml.replace(/“((?:)?)-/g, "“$1—"); @@ -417,6 +425,7 @@ function fixPossessives(xml) { xml = xml.replace(/([^‘])Mrs. Sims’([^s])/g, "$1Mrs. Sims’s$2"); xml = xml.replace(/([^‘])Ms. Stillons’([^s])/g, "$1Ms. Stillons’s$2"); xml = xml.replace(/([^‘])Chuckles’([^s])/g, "$1Chuckles’s$2"); + xml = xml.replace(/([^‘])Amias’([^s])/g, "$1Amias’s$2"); // This one is not just missing the extra "s"; it's often misplaced. xml = xml.replace(/Warden’s/g, "Wardens’"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 8cdf8c4..507413d 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5970,10 +5970,6 @@ { "before": "Rome-Roman’s", "after": "Rome—Roman’s" - }, - { - "before": "Amais’", - "after": "Amais’s" } ], "https://www.parahumans.net/2018/12/18/blinding-11-1/": [ From 41566a380ebf8830b349aa426e174bae8ed81afe Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 18:46:43 -0500 Subject: [PATCH 061/186] Refactor possessive-fixing regular expressions --- lib/convert-worker.js | 40 +++++----------------------------------- 1 file changed, 5 insertions(+), 35 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index acd415e..f5f9bc2 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -391,41 +391,11 @@ function enDashJointNames(xml) { function fixPossessives(xml) { // Fix possessive of names ending in "s" // Note: if the "s" is unvoiced, as in Marquis, then it doesn't get the second "s". - xml = xml.replace(/([^‘])Judas’([^s])/g, "$1Judas’s$2"); - xml = xml.replace(/([^‘])Brutus’([^s])/g, "$1Brutus’s$2"); - xml = xml.replace(/([^‘])Jess’([^s])/g, "$1Jess’s$2"); - xml = xml.replace(/([^‘])Aegis’([^s])/g, "$1Aegis’s$2"); - xml = xml.replace(/([^‘])Dauntless’([^s])/g, "$1Dauntless’s$2"); - xml = xml.replace(/([^‘])Circus’([^s])/g, "$1Circus’s$2"); - xml = xml.replace(/([^‘])Sirius’([^s])/g, "$1Sirius’s$2"); - xml = xml.replace(/([^‘])Brooks’([^s])/g, "$1Brooks’s$2"); - xml = xml.replace(/([^‘])Genesis’([^s])/g, "$1Genesis’s$2"); - xml = xml.replace(/([^‘])Atlas’([^s])/g, "$1Atlas’s$2"); - xml = xml.replace(/([^‘])Lucas’([^s])/g, "$1Lucas’s$2"); - xml = xml.replace(/([^‘])Gwerrus’([^s])/g, "$1Gwerrus’s$2"); - xml = xml.replace(/([^‘])Chris’([^s])/g, "$1Chris’s$2"); - xml = xml.replace(/([^‘])Eligos’([^s])/g, "$1Eligos’s$2"); - xml = xml.replace(/([^‘])Animos’([^s])/g, "$1Animos’s$2"); - xml = xml.replace(/([^‘])Mags’([^s])/g, "$1Mags’s$2"); - xml = xml.replace(/([^‘])Huntress’([^s])/g, "$1Huntress’s$2"); - xml = xml.replace(/([^‘])Hephaestus’([^s])/g, "$1Hephaestus’s$2"); - xml = xml.replace(/([^‘])Lord of Loss’([^s])/g, "$1Lord of Loss’s$2"); - xml = xml.replace(/([^‘])John Combs’([^s])/g, "$1John Combs’s$2"); - xml = xml.replace(/([^‘])Mama Mathers’([^s])/g, "$1Mama Mathers’s$2"); - xml = xml.replace(/([^‘])Monokeros’([^s])/g, "$1Monokeros’s$2"); - xml = xml.replace(/([^‘])Goddess’([^s])/g, "$1Goddess’s$2"); - xml = xml.replace(/([^‘])Boundless’([^s])/g, "$1Boundless’s$2"); - xml = xml.replace(/([^‘])Paris’([^s])/g, "$1Paris’s$2"); - xml = xml.replace(/([^‘])Tress’([^s])/g, "$1Tress’s$2"); - xml = xml.replace(/([^‘])Harris’([^s])/g, "$1Harris’s$2"); - xml = xml.replace(/([^‘])Antares’([^s])/g, "$1Antares’s$2"); - xml = xml.replace(/([^‘])Nieves’([^s])/g, "$1Nieves’s$2"); - xml = xml.replace(/([^‘])Backwoods’([^s])/g, "$1Backwoods’s$2"); - xml = xml.replace(/([^‘])Midas’([^s])/g, "$1Midas’s$2"); - xml = xml.replace(/([^‘])Mrs. Sims’([^s])/g, "$1Mrs. Sims’s$2"); - xml = xml.replace(/([^‘])Ms. Stillons’([^s])/g, "$1Ms. Stillons’s$2"); - xml = xml.replace(/([^‘])Chuckles’([^s])/g, "$1Chuckles’s$2"); - xml = xml.replace(/([^‘])Amias’([^s])/g, "$1Amias’s$2"); + xml = xml.replace( + // eslint-disable-next-line max-len + /(? Date: Sat, 14 Nov 2020 18:54:02 -0500 Subject: [PATCH 062/186] Remove overcapitalization of "university" --- lib/convert-worker.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index f5f9bc2..50d8eda 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -450,6 +450,10 @@ function fixCapitalization(xml, book) { xml = xml.replace(/Halberd/g, "halberd"); xml = xml.replace(/Loft/g, "loft"); + // There's no reason why university should be capitalized in most contexts, although sometimes it's used as part of + // a compound noun or at the beginning of a sentence. + xml = xml.replace(/(? Date: Sat, 14 Nov 2020 18:57:51 -0500 Subject: [PATCH 063/186] Fix inconsistently-bolded colons in Ward text conversations --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 50d8eda..92e1821 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -208,6 +208,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/@<\/strong>/g, "@"); xml = xml.replace(/
(\s*)<\/strong>/g, "

$1"); xml = xml.replace(/(\s*)<\/strong>/g, "
$1"); + xml = xml.replace(/>(.*)<\/strong>:$1:s inside /// fixed above. From 54093109bf6bb16c24e3992d59afd45040afd79b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 19:30:00 -0500 Subject: [PATCH 064/186] Spot fixes for Ward through Heavens 12.4 --- lib/convert-worker.js | 4 +- lib/substitutions.json | 134 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 92e1821..bd9d172 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -437,7 +437,7 @@ function fixCapitalization(xml, book) { // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". "patrol // group" is always lowercased. It seems like "Patrol" is a proper name, and is used as a capitalized modifier in // other contexts (e.g. Patrol leader). So let's standardize on "Patrol ". - xml = xml.replace(/patrol (block|group|leader|guard|student|uniform|squad|soldier|officer|crew|girl|bus)/ig, + xml = xml.replace(/patrol (block|group|leader|guard|student|uniform|squad|soldier|officer|crew|girl|bus|training)/ig, (_, $1) => `Patrol ${$1.toLowerCase()}`); // This always works in Ward and has a few false positives in Worm, where it is never needed: if (book === "ward") { @@ -546,7 +546,7 @@ function standardizeSpellings(xml) { xml = xml.replace(/cliche/g, "cliché"); // T-shirt is usually spelled lowercase ("t-shirt"). Normalize the remaining instances. - xml = xml.replace(/T-shirt/g, "t-shirt"); + xml = xml.replace(/(?", "after": "loading up trucks with basic supplies.

" + }, + { + "before": "I’m sor—that fucking sucks", + "after": "I’m sor— That fucking sucks" + }, + { + "before": "two of the targets was really", + "after": "two of the targets were really" + }, + { + "before": "punch a hold into the ground", + "after": "punch a hole into the ground" + } + ], + "https://www.parahumans.net/2019/01/22/interlude-11-c/": [ + { + "before": "were a worse adult examples", + "after": "were worse adult examples" + }, + { + "before": "four-times-normal—width", + "after": "four-times-normal-width" + }, + { + "before": "accumualted", + "after": "accumulated" + }, + { + "before": "get away from one swung", + "after": "get away from one swing" + }, + { + "before": "“Cradle—the most intact part of Tattletale said", + "after": "“Cradle—” the most intact part of Tattletale said" } ], "https://www.parahumans.net/2019/01/26/blinding-11-9/": [ @@ -6129,12 +6163,28 @@ { "before": "three heartbroken", "after": "three Heartbroken" + }, + { + "before": "Do yo want me to send", + "after": "Do you want me to send" + }, + { + "before": "PRT—or SWAT-van style", + "after": "PRT- or SWAT-van style" + }, + { + "before": "apparently I", + "after": "apparently I" } ], "https://www.parahumans.net/2019/01/29/blinding-11-10/": [ { "before": "heartbroken kid", "after": "Heartbroken kid" + }, + { + "before": "The team, the dynamic with the Undersiders, the Heartbroken, the kids", + "after": "The team, the dynamic with the Undersiders, the Heartbroken, the kids" } ], "https://www.parahumans.net/2019/02/02/blinding-11-11/": [ @@ -6145,12 +6195,36 @@ { "before": "fucking daughter!", "after": "fucking daughter!" + }, + { + "before": "The Warrior Monk told me", + "after": "the Warrior Monk told me" + }, + { + "before": "Foil-Hookline", + "after": "Foil–Hookline" } ], "https://www.parahumans.net/2019/02/05/blinding-11-12/": [ { "before": "and drawers. her legs were stacked against", "after": "and drawers. Her legs were stacked against" + }, + { + "before": "Not when—not like this.", + "after": "Not when— Not like this." + }, + { + "before": "Go you, Little V.", + "after": "Go you, Little V." + }, + { + "before": "the King on the chess board", + "after": "the king on the chess board" + }, + { + "before": "Almost Eight?", + "after": "Almost eight?" } ], "https://www.parahumans.net/2019/02/09/interlude-12-z/": [ @@ -6173,18 +6247,54 @@ { "before": "all the Kiss and Kill things", "after": "all the kiss and kill things" + }, + { + "before": "relatives houses", + "after": "relatives’ houses" + }, + { + "before": "Do you want to see me go all out? she thought", + "after": "Do you want to see me go all out? she thought" + }, + { + "before": "roof top", + "after": "rooftop" } ], "https://www.parahumans.net/2019/02/12/heavens-12-1/": [ { "before": "And mom’s implying I want", "after": "And Mom’s implying I want" + }, + { + "before": "ent North", + "after": "ent north" + }, + { + "before": "They headed North", + "after": "They headed north" + }, + { + "before": "It had been Marquis, before", + "after": "It had been Marquis’, before" + }, + { + "before": "police, patrol, or station", + "after": "police, Patrol, or station" + }, + { + "before": "earth-N", + "after": "Earth-N" } ], "https://www.parahumans.net/2019/02/16/heavens-12-2/": [ { "before": "And you- don’t do that", "after": "And you—don’t do that" + }, + { + "before": "Harbingers?", + "after": "Harbingers?" } ], "https://www.parahumans.net/2019/02/19/interlude-12-e/": [ @@ -6195,12 +6305,30 @@ { "before": "I need dad", "after": "I need Dad" + }, + { + "before": "going to mars or some", + "after": "going to Mars or some" } ], "https://www.parahumans.net/2019/02/23/heavens-12-3/": [ { "before": "had shaken them good- but I could", "after": "had shaken them good—but I could" + }, + { + "before": "Harbinger one was down, and two was wounded", + "after": "Harbinger One was down, and Two was wounded" + } + ], + "https://www.parahumans.net/2019/02/26/heavens-12-4/": [ + { + "before": "but the Harbinger said, “yes,” and I took", + "after": "but the Harbinger said “yes,” and I took" + }, + { + "before": "closer to haunting, “Think you can", + "after": "closer to haunting, “think you can" } ], "https://www.parahumans.net/2019/03/02/heavens-12-all/": [ @@ -6241,6 +6369,12 @@ "after": "created glowing orbs. He threw one to my" } ], + "https://www.parahumans.net/2019/03/23/heavens-12-9/": [ + { + "before": "Harbinger two was out and Harbinger one", + "after": "Harbinger Two was out and Harbinger One" + } + ], "https://www.parahumans.net/2019/03/26/heavens-12-none/": [ { "before": "if I inherit mom’s whole", From b017ab54d1c74c4fe2c968b7fbb3585dfd7bf3bb Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 19:51:20 -0500 Subject: [PATCH 065/186] Fix a variety of wrong closing quotes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit E.g. doubles, "I”ll", backwards --- lib/convert-worker.js | 40 +++++++++++++++++++--------------------- lib/substitutions.json | 42 ++++++++++++++++++++++++++++++++---------- 2 files changed, 51 insertions(+), 31 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index bd9d172..e796a84 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -171,34 +171,32 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/([a-z]+),<\/em>/g, "$1,"); } - function fixQuotesAndApostrophes() { - // Fix recurring poor quotes and apostrophes - xml = xml.replace(/

”/g, "

“"); - xml = xml.replace(/“\s*<\/p>/g, "”

"); - xml = xml.replace(/“\s*<\/em><\/p>/g, "

"); - xml = xml.replace(/‘\s*<\/p>/g, "’

"); - xml = xml.replace(/‘\s*<\/em><\/p>/g, "’

"); - xml = xml.replace(/,” <\/em>/g, ",” "); - xml = xml.replace(/′/g, "’"); - xml = xml.replace(/″/g, "”"); - xml = xml.replace(/([A-Za-z])‘s(\s?)/g, "$1’s$2"); - xml = xml.replace(/I‘m/g, "I’m"); - xml = xml.replace(/

“\s+/g, "

“"); - xml = xml.replace(/'/g, "’"); - xml = xml.replace(/’([A-Za-z]+)’/g, "‘$1’"); - xml = xml.replace(/([a-z])”<\/p>/g, "$1.”

"); - } - - // These interact with each other, so do them a few times. + // These quote/apostrophe/em fixes interact with each other. TODO: try to disentangle so we don't repeat all of + // fixEms. xml = xml.replace(/,” <\/em>/g, ",” "); fixEms(); - fixQuotesAndApostrophes(); + xml = xml.replace(/

”/g, "

“"); + xml = xml.replace(/“\s*<\/p>/g, "”

"); + xml = xml.replace(/“\s*<\/em><\/p>/g, "”

"); + xml = xml.replace(/‘\s*<\/p>/g, "’

"); + xml = xml.replace(/‘\s*<\/em><\/p>/g, "’

"); + xml = xml.replace(/,” <\/em>/g, ",” "); + xml = xml.replace(/′/g, "’"); + xml = xml.replace(/″/g, "”"); + xml = xml.replace(/([A-Za-z])‘s(\s?)/g, "$1’s$2"); + xml = xml.replace(/I‘m/g, "I’m"); + xml = xml.replace(/

“\s+/g, "

“"); + xml = xml.replace(/'/g, "’"); + xml = xml.replace(/’([A-Za-z]+)’/g, "‘$1’"); + xml = xml.replace(/([a-z])”<\/p>/g, "$1.”

"); fixEms(); xml = xml.replace(/‘([^<]+)<\/em>‘/g, "‘$1’"); - xml = xml.replace(/I”m/g, "I’m"); xml = xml.replace(/([a-z]+)!<\/em>/g, "$1!"); xml = xml.replace(/(?([\w ’]+)([!.?])”<\/em>/g, "$1$2”"); xml = xml.replace(/([\w ’]+[!.?])”<\/em>/g, "$1”"); + xml = xml.replace(/I”(m|ll)/g, "I’$1"); + xml = xml.replace(/””<\/p>/g, "”

"); + xml = xml.replace(/^([^“]+?) ?”(?![ —<])/gm, "$1 “"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index 9eafa64..3552166 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2361,13 +2361,13 @@ "before": "leave?” Hero asked. ”Why", "after": "leave?” Hero asked. “Why" }, - { - "before": "eye contact. ”She", - "after": "eye contact. “She" - }, { "before": "Alexandria said. ”Why", "after": "Alexandria said. “Why" + }, + { + "before": "voice as quiet. ”We’ve got teams", + "after": "voice as quiet. “We’ve got teams" } ], "https://parahumans.wordpress.com/2012/11/10/colony-15-8/": [ @@ -3408,6 +3408,10 @@ { "before": "Bay,” Wanton said. “Not", "after": "Bay,” Wanton said, “not" + }, + { + "before": "Connecting to “agChat.ParahumansOnline016.par:6667” (Attempt 1 of 55)
\nResolving Host Name
\nConnecting…
\nConnected.
\nUsing identityIblis”, nick “Iblis”
\nWelcome to Parahumans Online Chatroom #116, ‘The Holdout’. Rules Here. Behave. Obey the @s.
", + "after": "Connecting to “agChat.ParahumansOnline016.par:6667” (Attempt 1 of 55)
\nResolving Host Name
\nConnecting…
\nConnected.
\nUsing identity “Iblis”, nick “Iblis”
\nWelcome to Parahumans Online Chatroom #116, ‘The Holdout’. Rules Here. Behave. Obey the @s.
" } ], "https://parahumans.wordpress.com/2013/06/29/scarab-25-1/": [ @@ -4906,6 +4910,12 @@ "after": "—and from other horrors." } ], + "https://www.parahumans.net/2018/05/22/torch-7-3/": [ + { + "before": "by saying,”Isn’t it a rule", + "after": "by saying, “Isn’t it a rule" + } + ], "https://www.parahumans.net/2018/05/26/torch-7-4/": [ { "before": "

", @@ -5447,6 +5457,10 @@ { "before": "then teacher can’t", "after": "then Teacher can’t" + }, + { + "before": "“Who is this?”a strange voice asked", + "after": "“Who is this?” a strange voice asked" } ], "https://www.parahumans.net/2018/09/13/gleaming-interlude-9-x/": [ @@ -5626,12 +5640,6 @@ "_comment": "See comment in https://www.parahumans.net/2018/09/29/gleaming-9-11/" } ], - "https://www.parahumans.net/2018/10/06/gleaming-9-13/": [ - { - "before": "second.”Clarify.”", - "after": "second. “Clarify.”" - } - ], "https://www.parahumans.net/2018/10/09/gleaming-9-14/": [ { "before": "in a fireman carry. with my free hand", @@ -6383,6 +6391,10 @@ { "before": "wasn’t mom’s whole", "after": "wasn’t Mom’s whole" + }, + { + "before": "“Fuck,”Capricorn said again", + "after": "“Fuck,” Capricorn said again" } ], "https://www.parahumans.net/2019/03/29/heavens-12-x/": [ @@ -6689,6 +6701,10 @@ { "before": "ducked their heads down and hurried

", "after": "ducked their heads down and hurried.

" + }, + { + "before": "in the way,”she said", + "after": "in the way,” she said" } ], "https://www.parahumans.net/2019/10/01/sundown-17-1/": [ @@ -6971,6 +6987,12 @@ "after": "Imp and the Heartbroken" } ], + "https://www.parahumans.net/2020/02/23/infrared-19-z/": [ + { + "before": "5’1 “", + "after": "5′1″" + } + ], "https://www.parahumans.net/2020/02/25/last-20-1/": [ { "before": "across this clearing. eyes, cameras", From b20182ad0d283e1b0e71c2b377aa91717001ef71 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 20:21:26 -0500 Subject: [PATCH 066/186] Un-italicize various commas --- lib/convert-worker.js | 1 + lib/substitutions.json | 14 +++----------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index e796a84..531347b 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -197,6 +197,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/I”(m|ll)/g, "I’$1"); xml = xml.replace(/””<\/p>/g, "”

"); xml = xml.replace(/^([^“]+?) ?”(?![ —<])/gm, "$1 “"); + xml = xml.replace(/(?([A-Za-z]+),<\/em>(?!”| +[A-Za-z]+ thought)/, "$1,"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index 3552166..854677e 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -956,7 +956,7 @@ "after": "CD-6.

" }, { - "before": "Narwhal,", + "before": "Narwhal,", "after": "Narwhal," }, { @@ -5677,10 +5677,6 @@ "before": "assistant Warden", "after": "assistant warden" }, - { - "before": "behind those things was By,", - "after": "behind those things was By," - }, { "before": "What got into you?", "after": "What got into you?" @@ -5714,10 +5710,6 @@ { "before": "finds it’s root", "after": "finds its root" - }, - { - "before": "they’re Valkyrie, Crystal", - "after": "they’re Valkyrie, Crystal" } ], "https://www.parahumans.net/2018/10/23/polarize-10-1/": [ @@ -7073,8 +7065,8 @@ "after": "Your issue with Dad" }, { - "before": "My boss is-was Narwhal, mom", - "after": "My boss is—was Narwhal, Mom" + "before": "My boss is-was", + "after": "My boss is—was" }, { "before": "he mom shook her head", From 21bded56503c6831119706ced69c40c251013511 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 14 Nov 2020 20:27:22 -0500 Subject: [PATCH 067/186] 4.6.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index aaea9a7..85e811f 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.5.0", + "version": "4.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 81d34a5..e6f658c 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.5.0", + "version": "4.6.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From d69484af8e8481c64a1fd38a266ec09dabadfca8 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Tue, 17 Nov 2020 10:39:03 -0500 Subject: [PATCH 068/186] Fix messed up chapters with text conversations aea63ba05564b97580042213b8875e71bb6080bb introduced a bug where these chapters would contain ill-formed XML, and so at least some eBook readers would refuse to display them. --- lib/convert-worker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 531347b..7bb84db 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -207,7 +207,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/@<\/strong>/g, "@"); xml = xml.replace(/
(\s*)<\/strong>/g, "

$1"); xml = xml.replace(/(\s*)<\/strong>/g, "
$1"); - xml = xml.replace(/>(.*)<\/strong>:$1:(.*)<\/strong>:$1:<"); // No need for line breaks before paragraph ends // These often occur with the
s inside /// fixed above. From b113b240cc1ab2192a6098b9b0321e0fcb33e04f Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Tue, 17 Nov 2020 10:39:12 -0500 Subject: [PATCH 069/186] 4.6.1 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 85e811f..2821b4e 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.6.0", + "version": "4.6.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index e6f658c..e240275 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.6.0", + "version": "4.6.1", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From abca01b1d630dbad8bd8a7891e28cf1467a18008 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 15:59:28 -0500 Subject: [PATCH 070/186] Fix a few incomplete or misplaced ellipses --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 7bb84db..dc50ab6 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -223,6 +223,9 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/ \.<\/p>/g, ".

"); xml = xml.replace(/\.\.\./g, "…"); xml = xml.replace(/\.\. {2}/g, ". "); + xml = xml.replace(/\.\./g, "…"); + xml = xml.replace(/(?/g, "

"); From 121ab01243a14dc3e7f733af0d15dc39a86ca348 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 16:11:50 -0500 Subject: [PATCH 071/186] Spot fixes for Ward through Heavens 12.none --- lib/convert-worker.js | 9 +++- lib/substitutions.json | 100 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 98 insertions(+), 11 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index dc50ab6..a580dfd 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -436,14 +436,19 @@ function fixCapitalization(xml, book) { // The Speedrunners team name is missing its capitalization a couple times. xml = xml.replace(/speedrunners/g, "Speedrunners"); + // Capitalization is inconsistent, but shard names seems to usually be capitalized. + xml = xml.replace(/Grasping self/g, "Grasping Self"); + xml = xml.replace(/Cloven stranger/g, "Cloven Stranger"); + // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". "patrol // group" is always lowercased. It seems like "Patrol" is a proper name, and is used as a capitalized modifier in // other contexts (e.g. Patrol leader). So let's standardize on "Patrol ". xml = xml.replace(/patrol (block|group|leader|guard|student|uniform|squad|soldier|officer|crew|girl|bus|training)/ig, (_, $1) => `Patrol ${$1.toLowerCase()}`); - // This always works in Ward and has a few false positives in Worm, where it is never needed: + // This usually works in Ward (some instances corrected back in substitutions.json), and has a few false positives in + // Worm, where it is never needed: if (book === "ward") { - xml = xml.replace(/the patrol/g, "the Patrol"); + xml = xml.replace(/the patrol(?!s)/g, "the Patrol"); } // This is sometimes missing its capitalization. diff --git a/lib/substitutions.json b/lib/substitutions.json index 854677e..28f0485 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -1174,6 +1174,10 @@ { "before": "hand at me, “She’s", "after": "hand at me, “she’s" + }, + { + "before": ", kay", + "after": ", ’kay" } ], "https://parahumans.wordpress.com/2012/03/27/extermination-8-8/": [ @@ -1689,10 +1693,6 @@ } ], "https://parahumans.wordpress.com/2012/05/19/infestation-11-1/": [ - { - "before": "was.. how", - "after": "was… how" - }, { "before": "Dinah being kidnapped and leaving", "after": "Dinah being kidnapped, and leaving" @@ -3596,7 +3596,7 @@ ], "https://parahumans.wordpress.com/2013/08/10/interlude-26/": [ { - "before": "variation...", + "before": "variation…. ", "after": "variation…" }, { @@ -5421,10 +5421,6 @@ { "before": "what it’s worth,” Tristan said. “Thanks for", "after": "what it’s worth,” Tristan said, “thanks for" - }, - { - "before": "Apparently… perk of..", - "after": "Apparently… perk of…" } ], "https://www.parahumans.net/2018/09/01/gleaming-9-4/": [ @@ -6335,6 +6331,30 @@ { "before": "bounce off of the the people", "after": "bounce off of the people" + }, + { + "before": "a ‘us’", + "after": "an ‘us’" + }, + { + "before": "keep going,” Their March says", + "after": "keep going,” their March says" + }, + { + "before": "move, but Vista was, at least a little", + "after": "move, but Vista could, at least a little" + }, + { + "before": "a fraction of a second her more time", + "after": "a fraction of a second more time" + }, + { + "before": "let the charge grow", + "after": "lets the charge grow" + }, + { + "before": "She imagines It would", + "after": "She imagines it would" } ], "https://www.parahumans.net/2019/03/05/heavens-12-5/": [ @@ -6345,6 +6365,18 @@ { "before": "we didn’t resume the discussion

", "after": "we didn’t resume the discussion.

" + }, + { + "before": "flashlight of the Patrol", + "after": "flashlight of the patrol" + }, + { + "before": "ID’s", + "after": "IDs" + }, + { + "before": "My mom asked", + "after": "my mom asked" } ], "https://www.parahumans.net/2019/03/09/heavens-12-6/": [ @@ -6355,12 +6387,42 @@ { "before": "back pouch” my mom said", "after": "back pouch,” my mom said" + }, + { + "before": "protest—Two people held hostage", + "after": "protest—two people held hostage" + } + ], + "https://www.parahumans.net/2019/03/12/heavens-12-f/": [ + { + "before": ", kay", + "after": ", ’kay" + }, + { + "before": "thinking, the he brushed", + "after": "thinking, then he brushed" } ], "https://www.parahumans.net/2019/03/16/heavens-12-7/": [ { "before": "without knowing. by Love Lost", "after": "without knowing. By Love Lost" + }, + { + "before": "The man-though he", + "after": "The man—though he" + }, + { + "before": "a chance it might never.", + "after":"a chance it might never stop." + }, + { + "before": "wrench a weapon free, Curved blades that", + "after": "wrench a weapon free. Curved blades that" + }, + { + "before": "saw the group that standing tallest", + "after": "saw the group that was standing tallest" } ], "https://www.parahumans.net/2019/03/19/heavens-12-8/": [ @@ -6373,6 +6435,18 @@ { "before": "Harbinger two was out and Harbinger one", "after": "Harbinger Two was out and Harbinger One" + }, + { + "before": "pizz dispenser", + "after": "Pez dispenser" + }, + { + "before": "background keeping Crete", + "after": "background keeping Cretan" + }, + { + "regExp": " Mech", + "replacement": " mech" } ], "https://www.parahumans.net/2019/03/26/heavens-12-none/": [ @@ -6387,6 +6461,14 @@ { "before": "“Fuck,”Capricorn said again", "after": "“Fuck,” Capricorn said again" + }, + { + "before": "With your friends, your teachers the places you love", + "after": "With your friends, your teachers, the places you love" + }, + { + "before": "every earth", + "after": "every Earth" } ], "https://www.parahumans.net/2019/03/29/heavens-12-x/": [ From 3284c04f8b6b42023192e6e556d26f9febc303b9 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 16:14:35 -0500 Subject: [PATCH 072/186] Always capitalize "Dauntless Titan" --- lib/convert-worker.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index a580dfd..9aa7cbd 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -436,6 +436,10 @@ function fixCapitalization(xml, book) { // The Speedrunners team name is missing its capitalization a couple times. xml = xml.replace(/speedrunners/g, "Speedrunners"); + // Dauntless is a cape name. The majority of the time "Dauntless Titan" is fully capitalized, but either word + // sometimes is missing its capitalization. + xml = xml.replace(/dauntless titan/ig, "Dauntless Titan"); + // Capitalization is inconsistent, but shard names seems to usually be capitalized. xml = xml.replace(/Grasping self/g, "Grasping Self"); xml = xml.replace(/Cloven stranger/g, "Cloven Stranger"); From 06c7b3adf230fa094bfb641fd2a30660686e483e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 16:22:29 -0500 Subject: [PATCH 073/186] Standardize on "Dragon-craft" and "Dragon-mech" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 9aa7cbd..59094bc 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -562,6 +562,9 @@ function standardizeSpellings(xml) { // "gray" is the majority spelling, except for "greyhound" xml = xml.replace(/(G|g)rey(?!hound)/g, "$1ray"); + // 12 instances of "Dragon-craft", 12 instances of "Dragon craft", 1 instance of "dragon craft" + xml = xml.replace(/[Dd]ragon[ -](craft|mech)/g, "Dragon-$1"); + return xml; } From 60709f54c2366b75054e46e7991dd0b15d446c5c Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 16:32:08 -0500 Subject: [PATCH 074/186] Always capitalize "Nazi" Also fix hyphenation and capitalization around "neo-Nazi". --- lib/convert-worker.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 59094bc..e12de7d 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -505,6 +505,12 @@ function fixCapitalization(xml, book) { // place name. So we remove the capitalization in the few places where it does appear. xml = xml.replace(/Wardens’ Headquarters/g, "Wardens’ headquarters"); + // Some style guides try to reserve capitalized "Nazi" for historical discussions of members of the Nazi party. This + // seems fuzzy when it comes to phrases like "neo-Nazi", and doesn't seem to be what the author is doing; the books + // are just plain inconsistent. So, let's standardize on always uppercasing. + xml = xml.replace(/(? Date: Mon, 23 Nov 2020 16:37:29 -0500 Subject: [PATCH 075/186] =?UTF-8?q?Use=20apostrophes=20instead=20of=20open?= =?UTF-8?q?ing=20quotes=20for=20=E2=80=99kay?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/convert-worker.js | 1 + lib/substitutions.json | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index e12de7d..74c9344 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -198,6 +198,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/””<\/p>/g, "”

"); xml = xml.replace(/^([^“]+?) ?”(?![ —<])/gm, "$1 “"); xml = xml.replace(/(?([A-Za-z]+),<\/em>(?!”| +[A-Za-z]+ thought)/, "$1,"); + xml = xml.replace(/‘([Kk])ay(?!’)/g, "’$1ay"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index 28f0485..385a81b 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -346,7 +346,7 @@ "after": "in point: shazam" }, { - "before": "‘Kay", + "before": "’Kay", "after": "’kay" } ], @@ -405,10 +405,6 @@ "before": "guardian spoke, “You’d", "after": "guardian spoke. “You’d" }, - { - "before": "‘Kay", - "after": "’Kay" - }, { "before": "‘specially with", "after": "’Specially with" From 53f7307daa10fca3b08ccb61817a17631c162d40 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 16:49:50 -0500 Subject: [PATCH 076/186] Capitalize "English" but de-capitalize "english muffin" Also lowercase one instance of "french toast" --- lib/convert-worker.js | 6 ++++++ lib/substitutions.json | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 74c9344..cf14d7a 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -512,6 +512,12 @@ function fixCapitalization(xml, book) { xml = xml.replace(/(? Date: Mon, 23 Nov 2020 16:53:07 -0500 Subject: [PATCH 077/186] =?UTF-8?q?Fix=20capitalization=20and=20apostrophe?= =?UTF-8?q?s=20for=20=E2=80=99Lace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index cf14d7a..395cf0e 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -289,6 +289,9 @@ function fixTruncatedWords(xml) { // Short for "Contender" xml = xml.replace(/[‘’][Tt]end(?![a-z])/g, "’Tend"); + // Short for "Anelace" + xml = xml.replace(/[‘’][Ll]ace(?![a-z])/g, "’Lace"); + return xml; } From 22fbff008e956fbaf19e2cf02c893db24c5e2a4d Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 16:57:05 -0500 Subject: [PATCH 078/186] Capitalize a few more alternate "Earth"s --- lib/substitutions.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index c558abc..31fce07 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4130,6 +4130,10 @@ { "before": "resulting crater that compared with", "after": "resulting crater compared with" + }, + { + "before": "on the other earth", + "after": "on the other Earth" } ], "https://parahumans.wordpress.com/2013/10/29/30-7/": [ @@ -6543,6 +6547,16 @@ "after": "zero—a circle made with her full hand—three" } ], + "https://www.parahumans.net/2019/04/30/black-13-x/": [ + { + "before": "technology from another earth", + "after": "technology from another Earth" + }, + { + "before": "from yet another earth", + "after": "from yet another Earth" + } + ], "https://www.parahumans.net/2019/05/07/black-13-10/": [ { "before": "the interior of this one was quiet-, I could", @@ -6567,6 +6581,12 @@ "after": "actively tamper with it" } ], + "https://www.parahumans.net/2019/05/28/breaking-14-4/": [ + { + "before": "Once Goddess’s earth", + "after": "Once Goddess’s Earth" + } + ], "https://www.parahumans.net/2019/06/04/breaking-14-6/": [ { "before": "and the the undo button", From af0306422183271f899b9c228fee40830e58173c Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 17:00:33 -0500 Subject: [PATCH 079/186] =?UTF-8?q?Standardize=20on=20"Crock=20o=E2=80=99?= =?UTF-8?q?=20Shit"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 395cf0e..1f622c1 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -342,6 +342,9 @@ function standardizeNames(xml) { // 25 instances of "Amias" to 3 of "Amais" xml = xml.replace(/Amais/g, "Amias"); + // Earlier chapters have a space; later ones do not. They're separate words, so side with the earlier chapters. + xml = xml.replace(/Crock o[‘’]Shit/g, "Crock o’ Shit"); + return xml; } From 2eafeee8146ed5feaa3cc7c836e3a26d6917deb2 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 17:49:17 -0500 Subject: [PATCH 080/186] Fix possessive of Semiramis --- lib/convert-worker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 1f622c1..a2a38ac 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -403,7 +403,7 @@ function fixPossessives(xml) { // Note: if the "s" is unvoiced, as in Marquis, then it doesn't get the second "s". xml = xml.replace( // eslint-disable-next-line max-len - /(? Date: Mon, 23 Nov 2020 17:50:24 -0500 Subject: [PATCH 081/186] Spot fixes for Ward through Breaking 14.z --- lib/substitutions.json | 266 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 258 insertions(+), 8 deletions(-) diff --git a/lib/substitutions.json b/lib/substitutions.json index 31fce07..e5dcbc8 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2819,6 +2819,10 @@ { "before": "fight,” Tattletale said. “And", "after": "fight,” Tattletale said, “and" + }, + { + "before": "earth-shaking", + "after": "earthshaking" } ], "https://parahumans.wordpress.com/2013/02/12/queen-18-8/": [ @@ -6423,6 +6427,10 @@ { "before": "saw the group that standing tallest", "after": "saw the group that was standing tallest" + }, + { + "before": "T’was", + "after": "’Twas" } ], "https://www.parahumans.net/2019/03/19/heavens-12-8/": [ @@ -6491,6 +6499,66 @@ { "before": "morning breath—more than morning breath-, but there", "after": "morning breath—more than morning breath—but there" + }, + { + "before": "

Previous Chapter                                              Next Chapter

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

", + "after": "
 
\n
 
", + "_comment": "This is the best way I can think of to emulate the end of chapter 'fake out' in an ebook format" + }, + { + "before": "Can we—Can we do my thing", + "after": "Can we— Can we do my thing" + }, + { + "before": "Let me through!", + "after": "Let me through!" + }, + { + "before": "This? That?", + "after": "This? That?" + }, + { + "before": "more saccharine, “You don’t", + "after": "more saccharine, “you don’t" + }, + { + "before": "Damsel told Antares, “Think again", + "after": "Damsel told Antares, “think again" + } + ], + "https://www.parahumans.net/2019/04/02/black-13-1/": [ + { + "before": "

\n

Previous Chapter                                              Next Chapter

\n", + "after": "", + "_comment": "Our usual heuristics of removing the first paragraph to remove the previous/next chapter links are broken here because of the 'go back and look at the fake out' comment at the top" + }, + { + "before": "walls stone and wood. the building", + "after": "walls stone and wood. The building" + }, + { + "before": "he asked

", + "after": "he asked.

" + }, + { + "before": "—and my costume leggings", + "after": "—And my costume leggings" + }, + { + "before": "I told Rain, “Is a goodbye.", + "after": "I told Rain, “is a goodbye." + }, + { + "before": "fiancee", + "after": "fiancée" + }, + { + "before": "Signal fire", + "after": "Signal Fire" + }, + { + "before": "“It’s winter,’", + "after": "“It’s winter,”" } ], "https://www.parahumans.net/2019/04/09/black-13-3/": [ @@ -6501,40 +6569,66 @@ { "before": "pound of flesh, at least—!”", "after": "pound of flesh, at least—!”" - } - ], - "https://www.parahumans.net/2019/04/02/black-13-1/": [ - { - "before": "walls stone and wood. the building", - "after": "walls stone and wood. The building" }, { - "before": "he asked

", - "after": "he asked.

" + "before": "…Kind of hate hospitals", + "after": "…kind of hate hospitals" + }, + { + "before": "—For them!", + "after": "—for them!" } ], "https://www.parahumans.net/2019/04/13/black-13-4/": [ { "before": "wiped—or perhaps struck- clean.", "after": "wiped—or perhaps struck—clean." + }, + { + "before": "—Because it’s a dress", + "after": "—because it’s a dress" + }, + { + "before": "Bam!", + "after": "Bam!" } ], "https://www.parahumans.net/2019/04/16/black-13-5/": [ { "before": "For some of the heartbroken", "after": "For some of the Heartbroken" + }, + { + "before": "agent-parahuman", + "after": "agent–parahuman" } ], "https://www.parahumans.net/2019/04/20/black-13-6/": [ { "before": "I’m a Master, right, you", "after": "I’m a master, right, you" + }, + { + "before": "been studying, woo
!", + "after": "been studying, woo!
" + }, + { + "before": "Kenz-Lookout", + "after": "Kenz—Lookout" } ], "https://www.parahumans.net/2019/04/23/black-13-7/": [ { "before": "looked like they were were painted on", "after": "looked like they were painted on" + }, + { + "before": "—My friend", + "after": "—my friend" + }, + { + "before": "Fucking what? When? How bad", + "after": "Fucking what? When? How bad" } ], "https://www.parahumans.net/2019/04/27/black-13-8/": [ @@ -6545,6 +6639,10 @@ { "before": "zero—a circle made with her full hand-, three", "after": "zero—a circle made with her full hand—three" + }, + { + "before": "what the Wedge is or where", + "after": "what the wedge is or where" } ], "https://www.parahumans.net/2019/04/30/black-13-x/": [ @@ -6555,30 +6653,106 @@ { "before": "from yet another earth", "after": "from yet another Earth" + }, + { + "before": "in that a sea of yellow", + "after": "in that sea of yellow" + }, + { + "regExp": "cell five", + "replacement": "Cell Five" + }, + { + "regExp": "cell eleven", + "replacement": "Cell Eleven" + }, + { + "regExp": "cell nineteen", + "replacement": "Cell Nineteen" + }, + { + "before": "there were always some overhead", + "after": "there were always some over head" + }, + { + "before": "one of the Theocrats", + "after": "one of the theocrats" + } + ], + "https://www.parahumans.net/2019/05/04/black-13-9/": [ + { + "before": "thing is,” Tattletale said. “What did", + "after": "thing is,” Tattletale said, “what did" + }, + { + "before": "jacakss", + "after": "jackass" + }, + { + "before": "whether you invite me or not, it’s understandable if you don’t you’re going to want", + "after": "whether you invite me or not, it’s understandable if you don’t, you’re going to want" } ], "https://www.parahumans.net/2019/05/07/black-13-10/": [ { "before": "the interior of this one was quiet-, I could", "after": "the interior of this one was quiet—I could" + }, + { + "before": "‘why didn’t Imp back us up’?", + "after": "‘why didn’t Imp back us up?’" } ], "https://www.parahumans.net/2019/05/11/black-13-11/": [ { "before": "been scummy and and tried", "after": "been scummy and tried" + }, + { + "before": "—And I wanted to bring it up", + "after": "—and I wanted to bring it up" + }, + { + "before": "—Because I could have pushed harder", + "after": "—because I could have pushed harder" + } + ], + "https://www.parahumans.net/2019/05/14/13-z/": [ + { + "before": "and they were pro-irregular", + "after": "and they were pro-Irregular" } ], "https://www.parahumans.net/2019/05/18/breaking-14-1/": [ { "before": "face—ridiculous notion but still-, if I wrote him a note or sent him a text—less ridiculous notion-, saying", "after": "face—ridiculous notion but still—if I wrote him a note or sent him a text—less ridiculous notion—saying" + }, + { + "before": "Instead a 1,—2, 4", + "after": "Instead a 1, −2, 4" } ], "https://www.parahumans.net/2019/05/25/breaking-14-3/": [ { "before": "actively tamper with it it", "after": "actively tamper with it" + }, + { + "before": "to reclaim her throne, and I.”", + "after": "to reclaim her throne, and I—”" + }, + { + "before": "A teacher plot", + "after": "A Teacher plot" + }, + { + "before": "Your own mother just went", + "after": "your own mother just went" + }, + { + "before": "Ashley stared int the", + "after": "Ashley stared into the" } ], "https://www.parahumans.net/2019/05/28/breaking-14-4/": [ @@ -6587,6 +6761,16 @@ "after": "Once Goddess’s Earth" } ], + "https://www.parahumans.net/2019/06/01/breaking-14-5/": [ + { + "before": "his wife was dressed in patching colors", + "after": "his wife was dressed in matching colors" + }, + { + "before": "Luis said. “he saw a lot of", + "after": "Luis said. “He saw a lot of" + } + ], "https://www.parahumans.net/2019/06/04/breaking-14-6/": [ { "before": "and the the undo button", @@ -6603,6 +6787,18 @@ { "before": "or innovators—scientists-, they say", "after": "or innovators—scientists—they say" + }, + { + "before": "PHD", + "after": "PhD" + }, + { + "before": "If I’m asking?", + "after": "If I’m asking?" + }, + { + "before": "Isn’t it?", + "after": "Isn’t it?" } ], "https://www.parahumans.net/2019/06/08/breaking-14-7/": [ @@ -6613,18 +6809,60 @@ { "before": "you’re talking syncope—fainting-, arrythmia,", "after": "you’re talking syncope—fainting, arrythmia," + }, + { + "before": "inter-earth", + "after": "inter-Earth" + }, + { + "before": "‘can‘t’", + "after": "‘can’t’" + }, + { + "before": "The Western of the two half-castles", + "after": "The western of the two half-castles" + } + ], + "https://www.parahumans.net/2019/06/11/breaking-14-8/": [ + { + "before": "the conditions weren’t great-it was cold enough", + "after": "the conditions weren’t great—it was cold enough" + }, + { + "before": "pick up line", + "after": "pickup line" + }, + { + "before": "got me,” Rain said. “Was that", + "after": "got me,” Rain said, “was that" + }, + { + "before": "—Ask for some strings", + "after": "—ask for some strings" } ], "https://www.parahumans.net/2019/06/15/breaking-14-9/": [ { "before": "You stay away from mom, you stay away from dad", "after": "You stay away from Mom, you stay away from Dad" + }, + { + "before": "‘fuck this, not hitching a ride with—this-‘", + "after": "‘fuck this, not hitching a ride with this’" } ], "https://www.parahumans.net/2019/06/18/breaking-14-10/": [ { "before": "in a real fight-, but in", "after": "in a real fight—but in" + }, + { + "before": "fall to the mattress, “Let", + "after": "fall to the mattress, “let" + }, + { + "before": "I—Only if you hold onto it.", + "after": "I— Only if you hold onto it." } ], "https://www.parahumans.net/2019/06/22/breaking-14-11/": [ @@ -6649,6 +6887,14 @@ { "before": "-That was us—the message on my display read.—cuz guards—", "after": "-That was us- the message on my display read. -cuz guards-" + }, + { + "before": "blinfd", + "after": "blind" + }, + { + "before": "This? It’s stupid politics", + "after": "This? It’s stupid politics" } ], "https://www.parahumans.net/2019/06/29/breaking-14-z/": [ @@ -6663,6 +6909,10 @@ { "before": "allusion to Master–stranger protocols", "after": "allusion to master–stranger protocols" + }, + { + "before": "I dealt with ‘m", + "after": "I dealt with ’m" } ], "https://www.parahumans.net/2019/07/02/dying-15-a/": [ From 16ef1836da085e1a329d165787bef5cb7be7cf83 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 18:35:10 -0500 Subject: [PATCH 082/186] Hyphenate spelled out numbers from 11 through 99 --- lib/convert-worker.js | 6 ++++++ lib/substitutions.json | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index a2a38ac..069d369 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -543,6 +543,12 @@ function fixHyphens(xml) { xml = xml.replace(/(\w+)[ -]year[ -]old(s?)(?!\w)/g, "$1-year-old$2"); xml = xml.replace(/(\w+) or (\w+)-year-old/g, "$1- or $2-year-old"); + // Compound numbers must be hyphenated. + xml = xml.replace( + /(?here? Now?", "after": "here? Now?" @@ -1886,7 +1882,7 @@ "after": "my ‘candy’" }, { - "before": "Thirty Nine point", + "before": "Thirty-Nine point", "after": "Thirty-nine point" }, { @@ -3516,6 +3512,10 @@ { "before": "a burst of alarm.", "after": "a burst of alarm." + }, + { + "before": "Up from Eighty-three point four percent", + "after": "Up from eighty-three point four percent" } ], "https://parahumans.wordpress.com/2013/07/23/sting-26-3/": [ From b6135149943cafe39ef980a856cd6d6022f1f06f Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 18:58:56 -0500 Subject: [PATCH 083/186] Remove hyphenation around "hundred" and "percent" --- lib/convert-worker.js | 5 ++++- lib/substitutions.json | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 069d369..f4622e9 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -543,11 +543,14 @@ function fixHyphens(xml) { xml = xml.replace(/(\w+)[ -]year[ -]old(s?)(?!\w)/g, "$1-year-old$2"); xml = xml.replace(/(\w+) or (\w+)-year-old/g, "$1- or $2-year-old"); - // Compound numbers must be hyphenated. + // Compound numbers from 11 through 99 must be hyphenated, but others should not be. xml = xml.replace( /(? Date: Mon, 23 Nov 2020 19:04:28 -0500 Subject: [PATCH 084/186] Always capitalize "the Bunker" in Ward --- lib/convert-worker.js | 4 ++++ lib/substitutions.json | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index f4622e9..6f6d4e1 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -501,6 +501,10 @@ function fixCapitalization(xml, book) { xml = xml.replace(/(Norwalk|Fenway|Stratford) station/g, "$1 Station"); xml = xml.replace(/the megalopolis/g, "the Megalopolis"); xml = xml.replace(/earths(?![a-z])/g, "Earths"); + if (book === "ward") { + xml = xml.replace(/the bunker/g, "the Bunker"); + xml = xml.replace(/‘bunker’/g, "‘Bunker’"); + } // "Mom" and "Dad" should be capitalized when used as a proper name. These regexps are tuned to catch a good amount of // instances, without over-correcting for non-proper-name-like cases. Many other instances are handled in diff --git a/lib/substitutions.json b/lib/substitutions.json index a9efd6a..e1290cc 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -6731,6 +6731,14 @@ { "before": "—Because I could have pushed harder", "after": "—because I could have pushed harder" + }, + { + "before": "the Wardens’ bunker", + "after": "the Wardens’ Bunker" + }, + { + "before": "the more distant bunker itself", + "after": "the more distant Bunker itself" } ], "https://www.parahumans.net/2019/05/14/13-z/": [ From ea19dbb6c511f28af7f83d12a06e6456d2f8b53a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 19:09:40 -0500 Subject: [PATCH 085/186] Standardize on "Jotun" instead of "Jotunn" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 6f6d4e1..ebdd2bb 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -345,6 +345,9 @@ function standardizeNames(xml) { // Earlier chapters have a space; later ones do not. They're separate words, so side with the earlier chapters. xml = xml.replace(/Crock o[‘’]Shit/g, "Crock o’ Shit"); + // 5 instances of "Jotun" to 2 of "Jotunn" + xml = xml.replace(/Jotunn/g, "Jotun"); + return xml; } From 1da99791d37d28e46dfa3ab80a2002e99269afe0 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 19:30:38 -0500 Subject: [PATCH 086/186] Replace hyphen-minus with em dash when preceding a question mark --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index ebdd2bb..72a73c2 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -367,6 +367,7 @@ function fixEmDashes(xml) { xml = xml.replace(/\s+—”/g, "—”"); xml = xml.replace(/I-I/g, "I—I"); xml = xml.replace(/I-uh/g, "I—uh"); + xml = xml.replace(/-\?/g, "—?"); return xml; } From 6751136becbf9859bd2fb6d50080c69e8ae9bef3 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 19:33:27 -0500 Subject: [PATCH 087/186] Fix some instances of the possessive of Marquis --- lib/convert-worker.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 72a73c2..dd91449 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -403,14 +403,16 @@ function enDashJointNames(xml) { } function fixPossessives(xml) { - // Fix possessive of names ending in "s" - // Note: if the "s" is unvoiced, as in Marquis, then it doesn't get the second "s". + // Fix possessive of names ending in "s". xml = xml.replace( // eslint-disable-next-line max-len /(? Date: Mon, 23 Nov 2020 19:35:48 -0500 Subject: [PATCH 088/186] Always hyphenate self-conscious and derivatives --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index dd91449..0ecad93 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -571,6 +571,7 @@ function fixHyphens(xml) { xml = xml.replace(/creepy crawl/g, "creepy-crawl"); xml = xml.replace(/well armed/g, "well-armed"); xml = xml.replace(/able bodied/g, "able-bodied"); + xml = xml.replace(/self conscious/g, "self-conscious"); // This is usually correct but sometimes wrong. xml = xml.replace(/neo /g, "neo-"); From 3ec6e36e34c2ec24a976fa4c3010c8d46715f9da Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 23 Nov 2020 19:39:04 -0500 Subject: [PATCH 089/186] Un-capitalize "Church" when appropriate --- lib/substitutions.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index e1290cc..869172f 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -1808,6 +1808,10 @@ { "before": "asinine confession again, “It’s", "after": "asinine confession again. “It’s" + }, + { + "before": "people from the Church", + "after": "people from the church" } ], "https://parahumans.wordpress.com/2012/06/16/interlude-11a/": [ @@ -4631,6 +4635,10 @@ { "before": "hair he had. it was long", "after": "hair he had. It was long" + }, + { + "before": "about you and Church", + "after": "about you and church" } ], "https://www.parahumans.net/2018/02/24/shadow-5-1/": [ @@ -4916,6 +4924,12 @@ "after": "the junior captain said" } ], + "https://www.parahumans.net/2018/05/15/torch-7-1/": [ + { + "before": "got to go to Church", + "after": "got to go to church" + } + ], "https://www.parahumans.net/2018/05/19/torch-7-2/": [ { "before": "you had to deal with with could have", @@ -6863,6 +6877,10 @@ { "before": "—Ask for some strings", "after": "—ask for some strings" + }, + { + "before": "for the needy for Church events", + "after": "for the needy for church events" } ], "https://www.parahumans.net/2019/06/15/breaking-14-9/": [ @@ -7197,6 +7215,10 @@ { "before": "Couple of of times a month", "after": "Couple of times a month" + }, + { + "before": "This would be the Church.", + "after": "This would be the church." } ], "https://www.parahumans.net/2019/12/28/infrared-19-2/": [ From de83a47bfa3c05d48be14daa4f607e2e93811c40 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 15:06:43 -0500 Subject: [PATCH 090/186] Spot fixes through Dying 15.z --- lib/convert-worker.js | 1 + lib/substitutions.json | 221 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 222 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 0ecad93..d427070 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -71,6 +71,7 @@ function getBodyXML(chapter, book, contentEl) { // Worm uses 30px; Ward mostly uses 40px but sometimes uses 30px/60px. Let's standardize on 30px. if (style === "text-align:left;padding-left:30px;" || style === "text-align: left;padding-left: 40px;" || + style === "text-align: left; padding-left: 40px;" || style === "padding-left: 40px;") { child.setAttribute("style", "padding-left: 30px;"); } diff --git a/lib/substitutions.json b/lib/substitutions.json index 869172f..b57c532 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5473,6 +5473,10 @@ { "before": "The patrol had done its work", "after": "The Patrol had done its work" + }, + { + "before": "guard confirmed as Thralls", + "after": "guard confirmed as thralls" } ], "https://www.parahumans.net/2018/09/11/gleaming-9-7/": [ @@ -6325,6 +6329,10 @@ { "before": "Harbingers?", "after": "Harbingers?" + }, + { + "before": "“Thing one, thing two", + "after": "“Thing One, Thing Two" } ], "https://www.parahumans.net/2019/02/19/interlude-12-e/": [ @@ -6965,6 +6973,14 @@ { "before": "scary. that’s all", "after": "scary. That’s all" + }, + { + "before": "At Anita’s assistance", + "after": "At Anita’s insistence" + }, + { + "before": "kanji for ‘Shi’", + "after": "kanji for ‘shi’" } ], "https://www.parahumans.net/2019/07/06/dying-15-1/": [ @@ -6975,42 +6991,162 @@ { "before": "The blond heartbroken", "after": "The blond Heartbroken" + }, + { + "before": "straight A’s", + "after": "straight As" } ], "https://www.parahumans.net/2019/07/09/dying-15-2/": [ { "before": "I told Precipice

", "after": "I told Precipice.

" + }, + { + "before": "Guys’ gotta be a thirteen", + "after": "Guy’s gotta be a thirteen" + }, + { + "before": "been sitting her for", + "after": "been sitting here for" + }, + { + "before": "a body torn two", + "after": "a body torn in two" + }, + { + "before": "it had eben damaged", + "after": "it had been damaged" + }, + { + "before": "dodge that was fast moving", + "after": "dodge something that fast-moving" + }, + { + "before": "done so far, and crippling", + "after": "done so far, crippling" + }, + { + "before": "‘hedrons", + "after": "’hedrons" + }, + { + "before": "post its", + "after": "Post-its" } ], "https://www.parahumans.net/2019/07/13/dying-15-3/": [ { "before": "Didn’t ask about mom, dad, or", "after": "Didn’t ask about Mom, Dad, or" + }, + { + "before": "—And we’re heading upstairs", + "after": "—and we’re heading upstairs" } ], "https://www.parahumans.net/2019/07/16/dying-15-4/": [ { "before": "There was was no ‘good’", "after": "There was no ‘good’" + }, + { + "before": "was a H turned", + "after": "was an H turned" + }, + { + "before": "Needles receded as the entered", + "after": "Needles receded as they entered" + }, + { + "before": "flanking help other teams", + "after": "flanking to help other teams" + }, + { + "before": "water off a ducks’ back", + "after": "water off a duck’s back" + }, + { + "before": "the damage segments around", + "after": "the damaged segments around" + }, + { + "before": "when we’re done this mission", + "after": "when we’re done with this mission" + }, + { + "before": "If you take the current device with you can use it again", + "after": "If you take the current device with, you can use it again" + }, + { + "before": "one remaining Thrall", + "after": "one remaining thrall" } ], "https://www.parahumans.net/2019/07/20/dying-15-5/": [ { "before": "worth of of water", "after": "worth of water" + }, + { + "before": "mind controlling", + "after": "mind-controlling" + }, + { + "before": "range of the Halo", + "after": "range of the halo" + }, + { + "before": "tear up the Haloed angel", + "after": "tear up the haloed angel" + }, + { + "before": "her power helping, to keep her there instead of falling", + "after": "her power helping to keep her there instead of falling" + }, + { + "before": "the time manipulating tinkers", + "after": "the time-manipulating tinkers" } ], "https://www.parahumans.net/2019/07/23/dying-15-6/": [ { "before": "The teams had finished picking

", "after": "The teams had finished picking.

" + }, + { + "before": "no wifi", + "after": "no Wi-Fi" + }, + { + "before": "a of linked metal segments", + "after": "a ??? of linked metal segments" + }, + { + "before": "Things one through whatever", + "after": "Things One through whatever" + }, + { + "before": "close to identical powersets", + "after": "close-to-identical powersets" + }, + { + "before": "distracting you, Lookout, I wrote.", + "after": "distracting you, Lookout, I wrote." + }, + { + "before": "The second they were out jailer’s door", + "after": "The second they were out of the jailer’s door" } ], "https://www.parahumans.net/2019/07/27/dying-15-7/": [ { "before": "stranger or Master in", "after": "stranger or master in" + }, + { + "before": "d—! _ ! d—", + "after": "d- ! _ ! d-" } ], "https://www.parahumans.net/2019/07/30/dying-15-8/": [ @@ -7021,6 +7157,85 @@ { "before": "I got a glimpse. it’s fucking with me", "after": "I got a glimpse. It’s fucking with me" + }, + { + "before": "What? But Cassie.", + "after": "What? But Cassie." + }, + { + "before": "‘aunt Rachel‘s’", + "after": "‘Aunt Rachel’s’" + }, + { + "before": "Letting teacher go, knowing two members", + "after": "Letting Teacher go, knowing two members" + }, + { + "before": "using then to help hold up", + "after": "using them to help hold up" + } + ], + "https://www.parahumans.net/2019/08/03/dying-15-x/": [ + { + "before": "The Halo protected against", + "after": "The halo protected against" + }, + { + "before": "Normally teacher granted something", + "after": "Normally Teacher granted something" + }, + { + "before": "Carbon Dioxide bubbles manifesting", + "after": "Carbon dioxide bubbles manifesting" + }, + { + "before": "got the Thrall Commander, right", + "after": "got the thrall commander, right" + }, + { + "before": "I could ask these questions. Why?", + "after": "I could ask these questions. Why?" + }, + { + "before": "the Yàngbǎn supported squad", + "after": "the Yàngbǎn-supported squad" + }, + { + "before": "radius in you systems", + "after": "radius in your systems" + } + ], + "https://www.parahumans.net/2019/08/06/dying-15-y/": [ + { + "before": "little miss Webb’s way", + "after": "little Miss Webb’s way" + } + ], + "https://www.parahumans.net/2019/08/10/dying-15-z/": [ + { + "before": "All around her, Thralls paid her their worship", + "after": "All around her, thralls paid her their worship" + }, + { + "before": "almost floated almost three hundred thousand", + "after": "almost floated amongst three hundred thousand" + }, + { + "before": "parahuman’s hackers", + "after": "parahumans’ hackers" + }, + { + "before": "the room, and them him", + "after": "the room, and then him" + }, + { + "before": "transcendant", + "after": "transcendent" + }, + { + "before": "The one who was slicing up the supporting walls ground rumbled, the floor twisted, the house-sized turbine in the center of the room lost some of its foundation", + "after": "The one who was slicing up the supporting walls—

\n

The ground rumbled, the floor twisted, the house-sized turbine in the center of the room lost some of its foundation", + "_comment": "This paragraph break probably wasn't what was intended, but a good chunk of the sentence is missing, so this is the best fix I can think of." } ], "https://www.parahumans.net/2019/08/13/from-within-16-1/": [ @@ -7071,6 +7286,12 @@ "after": "letters I wrote to Dad’s friends" } ], + "https://www.parahumans.net/2019/09/03/from-within-16-7/": [ + { + "before": "aunt Rachel", + "after": "Aunt Rachel" + } + ], "https://www.parahumans.net/2019/09/10/from-within-16-9/": [ { "before": "changers and and shakers", From 4c1c7cd03df0544f8a89c93141d338925e01407b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 15:29:00 -0500 Subject: [PATCH 091/186] Remove extra spaces before closing quote marks --- lib/convert-worker.js | 3 ++- lib/substitutions.json | 28 ++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index d427070..c4747bc 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -187,6 +187,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/([A-Za-z])‘s(\s?)/g, "$1’s$2"); xml = xml.replace(/I‘m/g, "I’m"); xml = xml.replace(/

“\s+/g, "

“"); + xml = xml.replace(/\s+”/g, "”"); xml = xml.replace(/'/g, "’"); xml = xml.replace(/’([A-Za-z]+)’/g, "‘$1’"); xml = xml.replace(/([a-z])”<\/p>/g, "$1.”

"); @@ -197,7 +198,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/([\w ’]+[!.?])”<\/em>/g, "$1”"); xml = xml.replace(/I”(m|ll)/g, "I’$1"); xml = xml.replace(/””<\/p>/g, "”

"); - xml = xml.replace(/^([^“]+?) ?”(?![ —<])/gm, "$1 “"); + xml = xml.replace(/^([^“]+? ?)”(?![ —<])/gm, "$1 “"); xml = xml.replace(/(?([A-Za-z]+),<\/em>(?!”| +[A-Za-z]+ thought)/, "$1,"); xml = xml.replace(/‘([Kk])ay(?!’)/g, "’$1ay"); diff --git a/lib/substitutions.json b/lib/substitutions.json index b57c532..d9aed16 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -372,6 +372,10 @@ { "before": "so to speak, they", "after": "so to speak; they" + }, + { + "before": "Brian looked across the room,” We’ve", + "after": "Brian looked across the room. “We’ve" } ], "https://parahumans.wordpress.com/2011/11/12/hive-5-3/": [ @@ -464,6 +468,10 @@ { "before": "East", "after": "east" + }, + { + "before": "“Yeah,” Newter grinned,” You can tell", + "after": "“Yeah,” Newter grinned. “You can tell" } ], "https://parahumans.wordpress.com/2011/12/10/interlude-5/": [ @@ -2354,15 +2362,15 @@ "after": "to,” Alexandria spoke, “is" }, { - "before": "leave?” Hero asked. ”Why", + "before": "leave?” Hero asked.”Why", "after": "leave?” Hero asked. “Why" }, { - "before": "Alexandria said. ”Why", + "before": "Alexandria said.”Why", "after": "Alexandria said. “Why" }, { - "before": "voice as quiet. ”We’ve got teams", + "before": "voice as quiet.”We’ve got teams", "after": "voice as quiet. “We’ve got teams" } ], @@ -2883,7 +2891,7 @@ ], "https://parahumans.wordpress.com/2013/02/16/interlude-18/": [ { - "before": "her feet. ”We’re", + "before": "her feet.”We’re", "after": "her feet. “We’re" } ], @@ -3546,6 +3554,10 @@ { "before": "me,” I said. “Is", "after": "me,” I said, “is" + }, + { + "before": "

“Help’s on the way.”

", + "after": "

Help’s on the way.

" } ], "https://parahumans.wordpress.com/2013/07/25/interlude-26-donation-bonus-1/": [ @@ -5755,10 +5767,6 @@ "before": "post-Prison", "after": "post-prison" }, - { - "before": "to take power!’ ”", - "after": "to take power!’”" - }, { "before": "I’m sorry, what? What?", "after": "I’m sorry, what? What?" @@ -7626,6 +7634,10 @@ { "before": "had harangued the P.R.T., even", "after": "had harangued the PRT, even" + }, + { + "before": "“Actually,” Tattletale said. “I’ve been going", + "after": "“Actually,” Tattletale said, “I’ve been going" } ], "https://www.parahumans.net/2020/04/21/last-20-e4/": [ From 2a0919547122dbd9de92c2c457189fab01b32b61 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 15:34:23 -0500 Subject: [PATCH 092/186] Italicize question marks in single-question-word sentences --- lib/convert-worker.js | 3 ++- lib/substitutions.json | 12 ------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index c4747bc..ec9ed38 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -198,9 +198,10 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/([\w ’]+[!.?])”<\/em>/g, "$1”"); xml = xml.replace(/I”(m|ll)/g, "I’$1"); xml = xml.replace(/””<\/p>/g, "”

"); - xml = xml.replace(/^([^“]+? ?)”(?![ —<])/gm, "$1 “"); + xml = xml.replace(/^([^“]+?) ?”(?![ —<])/gm, "$1 “"); xml = xml.replace(/(?([A-Za-z]+),<\/em>(?!”| +[A-Za-z]+ thought)/, "$1,"); xml = xml.replace(/‘([Kk])ay(?!’)/g, "’$1ay"); + xml = xml.replace(/(Why|What|Who|How|Where|When)<\/em>\?/g, "$1?"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index d9aed16..0f603b3 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -1539,10 +1539,6 @@ "before": "Brian, “You’re", "after": "Brian. “You’re" }, - { - "before": "Why? Why come", - "after": "Why? Why come" - }, { "before": "‘Sides", "after": "’Sides" @@ -7166,10 +7162,6 @@ "before": "I got a glimpse. it’s fucking with me", "after": "I got a glimpse. It’s fucking with me" }, - { - "before": "What? But Cassie.", - "after": "What? But Cassie." - }, { "before": "‘aunt Rachel‘s’", "after": "‘Aunt Rachel’s’" @@ -7200,10 +7192,6 @@ "before": "got the Thrall Commander, right", "after": "got the thrall commander, right" }, - { - "before": "I could ask these questions. Why?", - "after": "I could ask these questions. Why?" - }, { "before": "the Yàngbǎn supported squad", "after": "the Yàngbǎn-supported squad" From ee76715935adbdfc1f53b3961047b5f8e772970d Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 15:43:20 -0500 Subject: [PATCH 093/186] Stop over-italicizing commas --- lib/convert-worker.js | 1 + lib/substitutions.json | 30 +++++++----------------------- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index ec9ed38..dd59cfd 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -202,6 +202,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/(?([A-Za-z]+),<\/em>(?!”| +[A-Za-z]+ thought)/, "$1,"); xml = xml.replace(/‘([Kk])ay(?!’)/g, "’$1ay"); xml = xml.replace(/(Why|What|Who|How|Where|When)<\/em>\?/g, "$1?"); + xml = xml.replace(/,<\/em>/g, ","); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index 0f603b3..a74c262 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -814,7 +814,7 @@ "after": "east" }, { - "before": "listened to,", + "before": "listened to,", "after": "listened to." }, { @@ -940,11 +940,11 @@ "after": "

Brigandine deceased, CD-5.

" }, { - "before": "deceased,
CD-6.", + "before": "deceased
, CD-6.", "after": "deceased, CD-6." }, { - "before": "CD-6, The armbands", + "before": "CD-6, The armbands", "after": "CD-6, the armbands" }, { @@ -1014,7 +1014,7 @@ "after": "Aegis deceased, CD-6" }, { - "before": "down, CC-6.", + "before": "down, CC-6.", "after": "down, CC-6." }, { @@ -1052,17 +1052,13 @@ "after": "deceased, BW-8." }, { - "before": "deceased, CB-10.", + "before": "deceased, CB-10.", "after": "deceased, CB-10." }, { "before": "Defensive perimeter, report.", "after": "Defensive perimeter, report." }, - { - "before": "Enemy location unknown,", - "after": "Enemy location unknown," - }, { "before": "Dad.", "after": "Dad." @@ -1838,10 +1834,6 @@ { "before": "“I—” Bitch paused, “Don’t", "after": "“I—” Bitch paused. “Don’t" - }, - { - "before": "Bitch,”", - "after": "Bitch,”" } ], "https://parahumans.wordpress.com/2012/06/17/interlude-11b/": [ @@ -1920,11 +1912,11 @@ "after": "

Love me, you?
\nLove me, true?

" }, { - "before": "

Crazed, kooky, cracked, crazy,
\nNutty, barmy, mad for me…

", + "before": "

Crazed, kooky, cracked, crazy,
\nNutty, barmy, mad for me…

", "after": "

Crazed, kooky, cracked, crazy,
\nNutty, barmy, mad for me…

" }, { - "before": "

Crazed, kooky, cracked, crazy,
\nMental, dotty, whacked, loopy…

", + "before": "

Crazed, kooky, cracked, crazy,
\nMental, dotty, whacked, loopy…

", "after": "

Crazed, kooky, cracked, crazy,
\nMental, dotty, whacked, loopy…

" }, { @@ -6001,10 +5993,6 @@ "before": "New Brockton primary school", "after": "New Brockton Primary School" }, - { - "before": "They can be so cool, but", - "after": "They can be so cool, but" - }, { "before": "Rome-Roman’s", "after": "Rome—Roman’s" @@ -7134,10 +7122,6 @@ "before": "close to identical powersets", "after": "close-to-identical powersets" }, - { - "before": "distracting you, Lookout, I wrote.", - "after": "distracting you, Lookout, I wrote." - }, { "before": "The second they were out jailer’s door", "after": "The second they were out of the jailer’s door" From 79efec7080823b4ba34e09cf615b615738ca73ab Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 15:45:28 -0500 Subject: [PATCH 094/186] Fix end-of-line commas that should be periods. --- lib/convert-worker.js | 2 ++ lib/substitutions.json | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index dd59cfd..f781647 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -203,6 +203,8 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/‘([Kk])ay(?!’)/g, "’$1ay"); xml = xml.replace(/(Why|What|Who|How|Where|When)<\/em>\?/g, "$1?"); xml = xml.replace(/,<\/em>/g, ","); + xml = xml.replace(/,”<\/p>/g, ".”

"); + xml = xml.replace(/

(.*),<\/p>/g, "

$1.

"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index a74c262..3ab3573 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -3967,10 +3967,6 @@ "before": "‘lowed to do that, ‘miright", "after": "’lowed to do that, ’miright" }, - { - "before": "path was clear,", - "after": "path was clear." - }, { "before": "hard, don’t you?", "after": "hard, don’t you?" @@ -6229,6 +6225,10 @@ { "before": "Foil-Hookline", "after": "Foil–Hookline" + }, + { + "before": "“Fired through a hole I made in my fist.

", + "after": "“Fired through a hole I made in my fist.”

" } ], "https://www.parahumans.net/2019/02/05/blinding-11-12/": [ From 5310672cc2ff7f1b6d8ec406c6ab301e76ce64c6 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 15:58:08 -0500 Subject: [PATCH 095/186] De-capitalize aunt and uncle where appropriate --- lib/substitutions.json | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 3ab3573..c4f2055 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4563,6 +4563,10 @@ { "before": "Stop. Please.", "after": "Stop. Please." + }, + { + "before": "his Aunt would say", + "after": "his aunt would say" } ], "https://www.parahumans.net/2018/02/08/shade-4-4/": [ @@ -7125,6 +7129,10 @@ { "before": "The second they were out jailer’s door", "after": "The second they were out of the jailer’s door" + }, + { + "before": "my Aunt’s", + "after": "my aunt’s" } ], "https://www.parahumans.net/2019/07/27/dying-15-7/": [ @@ -7420,6 +7428,42 @@ { "before": "This would be the Church.", "after": "This would be the church." + }, + { + "before": "my Uncle said", + "after": "my uncle said" + }, + { + "before": "my Uncle asked", + "after": "my uncle asked" + }, + { + "before": "Only Jester and my Uncle were", + "after": "Only Jester and my uncle were" + }, + { + "before": "Victoria?” My Uncle asked", + "after": "Victoria?” my uncle asked" + } + ], + "https://www.parahumans.net/2019/12/21/interlude-18-z-radiation/": [ + { + "before": "face where her Uncle would see", + "after": "face where her uncle would see" + }, + { + "before": "Her Uncle put his hand", + "after": "Her uncle put his hand" + }, + { + "before": "and saw her Aunt and Uncle approaching", + "after": "and saw her aunt and uncle approaching" + } + ], + "https://www.parahumans.net/2019/12/24/infrared-19-1/": [ + { + "before": "Victoria,” my Aunt said", + "after": "Victoria,” my aunt said" } ], "https://www.parahumans.net/2019/12/28/infrared-19-2/": [ @@ -7480,6 +7524,18 @@ { "before": "pause, drew its attention

", "after": "pause, drew its attention.

" + }, + { + "before": "someone my Aunt and Uncle deemed subversive", + "after": "someone my aunt and uncle deemed subversive" + }, + { + "before": "Looks after my Aunt while my Uncle", + "after": "Looks after my aunt while my uncle" + }, + { + "before": "can understand your Aunt and Uncle", + "after": "can understand your aunt and uncle" } ], "https://www.parahumans.net/2020/01/14/infrared-19-c/": [ @@ -7546,6 +7602,10 @@ { "before": "so they grow in…”", "after": "so they grow in…”" + }, + { + "before": "my Uncle said", + "after": "my uncle said" } ], "https://www.parahumans.net/2020/02/11/infrared-19-f/": [ From 1328dfd8e317f7df5721d023f9808dfda3fad4df Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 16:01:00 -0500 Subject: [PATCH 096/186] Standardize on "A.I." instead of "AI" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index f781647..8e5bb59 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -613,6 +613,9 @@ function standardizeSpellings(xml) { // 12 instances of "Dragon-craft", 12 instances of "Dragon craft", 1 instance of "dragon craft" xml = xml.replace(/[Dd]ragon[ -](craft|mech)/g, "Dragon-$1"); + // 88 instances of "A.I." to four of "AI" + xml = xml.replace(/AI(!?\b)/g, "A.I."); + return xml; } From f3063854ffa9309e9316d3d89521242f9c46a4a6 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 16:04:06 -0500 Subject: [PATCH 097/186] De-capitalize season names --- lib/substitutions.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index c4f2055..3c6072f 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -7230,6 +7230,10 @@ { "before": "wasn’t A.I. it was just a picture", "after": "wasn’t A.I. It was just a picture" + }, + { + "before": "end of Summer that", + "after": "end of summer that" } ], "https://www.parahumans.net/2019/08/17/from-within-16-2/": [ @@ -7392,6 +7396,10 @@ { "before": "“Entrapment.”", "after": "“Entrapment.”" + }, + { + "before": "tents last Winter or Spring", + "after": "tents last winter or spring" } ], "https://www.parahumans.net/2019/11/23/radiation-18-3/": [ @@ -7444,6 +7452,10 @@ { "before": "Victoria?” My Uncle asked", "after": "Victoria?” my uncle asked" + }, + { + "before": "end of the Summer", + "after": "end of the summer" } ], "https://www.parahumans.net/2019/12/21/interlude-18-z-radiation/": [ From d62739f6cded1194fb35eeb764db2e5e1333bf58 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 16:06:14 -0500 Subject: [PATCH 098/186] De-capitalize math --- lib/substitutions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 3c6072f..96859db 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -7244,6 +7244,10 @@ { "before": "Hardboil", "after": "Hard Boil" + }, + { + "before": "after class in Math, my", + "after": "after class in math, my" } ], "https://www.parahumans.net/2019/08/20/from-within-16-3/": [ @@ -7322,6 +7326,12 @@ "after": "egg for Crystal and Mom" } ], + "https://www.parahumans.net/2019/10/08/sundown-17-3/": [ + { + "before": "say, Math class", + "after": "say, math class" + } + ], "https://www.parahumans.net/2019/10/12/sundown-17-4/": [ { "before": "on resisting Master influence", From c128712bb442f1b3726ffd0cf556dc723b398f48 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 16:11:58 -0500 Subject: [PATCH 099/186] Change treatment of Teacher color team names Previously I was treating them as "conflict or connection", trying to give them an en dash. But I think they're just compound adjectives, so let's revert to a hyphen-minus. Also fixes missing capitalization for one of them. --- lib/convert-worker.js | 1 - lib/substitutions.json | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 8e5bb59..ea159d4 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -394,7 +394,6 @@ function enDashJointNames(xml) { xml = xml.replace(/Undersider(s?)-(Breakthrough|Ambassador)/g, "Undersider$1–$2"); xml = xml.replace(/Norwalk-Fairfield/g, "Norwalk–Fairfield"); xml = xml.replace(/East-West/g, "east–west"); - xml = xml.replace(/(Green|Yellow)-Black/g, "$1–Black"); xml = xml.replace(/Creutzfeldt-Jakob/g, "Creutzfeldt–Jakob"); xml = xml.replace(/Astaroth-Nidhug/g, "Astaroth–Nidhug"); xml = xml.replace(/Capulet-Montague/g, "Capulet–Montague"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 96859db..50f02e3 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -7077,6 +7077,10 @@ { "before": "one remaining Thrall", "after": "one remaining thrall" + }, + { + "before": "Team copper-white", + "after": "Team Copper-White" } ], "https://www.parahumans.net/2019/07/20/dying-15-5/": [ From 32817eb2551e5fdd26daabc7f56a0eff5b20229a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 16:13:59 -0500 Subject: [PATCH 100/186] =?UTF-8?q?Fix=20capitalization=20and=20apostrophe?= =?UTF-8?q?s=20for=20=E2=80=99Cage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/convert-worker.js | 3 +++ lib/substitutions.json | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index ea159d4..6f0c2ea 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -298,6 +298,9 @@ function fixTruncatedWords(xml) { // Short for "Anelace" xml = xml.replace(/[‘’][Ll]ace(?![a-z])/g, "’Lace"); + // Short for "Birdcage" + xml = xml.replace(/[‘’][Cc]age(?![a-z])/g, "’Cage"); + return xml; } diff --git a/lib/substitutions.json b/lib/substitutions.json index 50f02e3..1174977 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4275,10 +4275,6 @@ "before": "and His flesh began", "after": "and his flesh began" }, - { - "before": "the ‘cage", - "after": "the ’cage" - }, { "before": "background of his mind

", "after": "background of his mind.

" From 2412fa0375b766c1984ed2c6bee1635c6cee7c9a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 16:19:45 -0500 Subject: [PATCH 101/186] Capitalize U-turn --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 6f0c2ea..8fdea9e 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -552,6 +552,9 @@ function fixMispellings(xml) { // Preemptive(ly) is often hyphenated (not always). It should not be. xml = xml.replace(/([Pp])re-emptive/g, "$1reemptive"); + // All dictionaries agree this is capitalized. + xml = xml.replace(/u-turn/g, "U-turn"); + return xml; } From 5c80327fef326ea28cf9dab5f3ba1b6c5e3f9110 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 16:07:52 -0500 Subject: [PATCH 102/186] Spot fixes for Ward through From Within 16.z --- lib/convert-worker.js | 12 ++- lib/substitutions.json | 214 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+), 2 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 8fdea9e..4156330 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -352,11 +352,15 @@ function standardizeNames(xml) { xml = xml.replace(/Amais/g, "Amias"); // Earlier chapters have a space; later ones do not. They're separate words, so side with the earlier chapters. - xml = xml.replace(/Crock o[‘’]Shit/g, "Crock o’ Shit"); + // One location is missing the "k". + xml = xml.replace(/Crock? o[‘’]Shit/g, "Crock o’ Shit"); // 5 instances of "Jotun" to 2 of "Jotunn" xml = xml.replace(/Jotunn/g, "Jotun"); + // 13 instances of Elman to 1 of Elmann + xml = xml.replace(/Elmann/g, "Elman"); + return xml; } @@ -464,6 +468,7 @@ function fixCapitalization(xml, book) { // Capitalization is inconsistent, but shard names seems to usually be capitalized. xml = xml.replace(/Grasping self/g, "Grasping Self"); xml = xml.replace(/Cloven stranger/g, "Cloven Stranger"); + xml = xml.replace(/Princess shaper/g, "Princess Shaper"); // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". "patrol // group" is always lowercased. It seems like "Patrol" is a proper name, and is used as a capitalized modifier in @@ -619,7 +624,10 @@ function standardizeSpellings(xml) { xml = xml.replace(/[Dd]ragon[ -](craft|mech)/g, "Dragon-$1"); // 88 instances of "A.I." to four of "AI" - xml = xml.replace(/AI(!?\b)/g, "A.I."); + xml = xml.replace(/(?<=\b)AI(?=\b)/g, "A.I."); + + // 2 instances of "G.M." to one of "GM" + xml = xml.replace(/(?<=\b)GM(?=\b)/g, "G.M."); return xml; } diff --git a/lib/substitutions.json b/lib/substitutions.json index 1174977..cfad210 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -170,6 +170,10 @@ { "before": "gangbangers easy access to to the rest of the city", "after": "gangbangers easy access to the rest of the city" + }, + { + "before": "be, tonight, If that’s", + "after": "be, tonight, if that’s" } ], "https://parahumans.wordpress.com/2011/08/23/agitation-3-5/": [ @@ -5285,6 +5289,10 @@ { "before": "mask was only a B-", "after": "mask was only a B−" + }, + { + "before": "Nothing about it was even B-.", + "after": "Nothing about it was even B−." } ], "https://www.parahumans.net/2018/07/21/beacon-8-6/": [ @@ -6731,6 +6739,10 @@ { "before": "‘why didn’t Imp back us up’?", "after": "‘why didn’t Imp back us up?’" + }, + { + "before": "panic inducing memories", + "after": "panic-inducing memories" } ], "https://www.parahumans.net/2019/05/11/black-13-11/": [ @@ -7025,6 +7037,10 @@ { "before": "post its", "after": "Post-its" + }, + { + "before": "travelled", + "after": "traveled" } ], "https://www.parahumans.net/2019/07/13/dying-15-3/": [ @@ -7077,6 +7093,10 @@ { "before": "Team copper-white", "after": "Team Copper-White" + }, + { + "before": "Caraytid", + "after": "Caryatid" } ], "https://www.parahumans.net/2019/07/20/dying-15-5/": [ @@ -7234,6 +7254,10 @@ { "before": "end of Summer that", "after": "end of summer that" + }, + { + "before": "or get back to where you", + "after": "or to get back to where you" } ], "https://www.parahumans.net/2019/08/17/from-within-16-2/": [ @@ -7248,6 +7272,18 @@ { "before": "after class in Math, my", "after": "after class in math, my" + }, + { + "before": "My point is, If you", + "after": "My point is, if you" + }, + { + "before": "loyalty inducing Goddesses", + "after": "loyalty-inducing Goddesses" + }, + { + "before": "Did you get an impression about her character, or anything weird.", + "after": "Did you get an impression about her character, or anything weird?" } ], "https://www.parahumans.net/2019/08/20/from-within-16-3/": [ @@ -7258,12 +7294,24 @@ { "before": "for the recording.”", "after": "for the recording." + }, + { + "before": "—But one of us could still", + "after": "—but one of us could still" } ], "https://www.parahumans.net/2019/08/24/from-within-16-4/": [ { "before": "the rest black and slim. with doodle-like drawings", "after": "the rest black and slim, with doodle-like drawings" + }, + { + "before": "trophy wrack", + "after": "trophy rack" + }, + { + "before": "hopped onto his back for the extra eight", + "after": "hopped onto his back for the extra height" } ], "https://www.parahumans.net/2019/08/27/from-within-16-5/": [ @@ -7274,12 +7322,24 @@ { "before": "French toast", "after": "french toast" + }, + { + "before": "put into Neutral out of", + "after": "put into neutral out of" + }, + { + "before": "after Mockument’s had hatched that", + "after": "after Mockument had hatched that" } ], "https://www.parahumans.net/2019/08/31/from-within-16-6/": [ { "before": "letters I wrote to dad’s friends", "after": "letters I wrote to Dad’s friends" + }, + { + "before": "—But that might be intentional", + "after": "—but that might be intentional" } ], "https://www.parahumans.net/2019/09/03/from-within-16-7/": [ @@ -7288,16 +7348,136 @@ "after": "Aunt Rachel" } ], + "https://www.parahumans.net/2019/09/07/from-within-16-8/": [ + { + "before": "Giant lightning man guard dog", + "after": "Giant lightning-man guard dog" + }, + { + "before": "35: 10", + "after": "35:10" + }, + { + "before": "pluckign", + "after": "plucking" + }, + { + "before": "special event space", + "after": "Special event space" + } + ], "https://www.parahumans.net/2019/09/10/from-within-16-9/": [ { "before": "changers and and shakers", "after": "changers and shakers" + }, + { + "before": "the Twins’ portion of the room", + "after": "the twins’ portion of the room" + }, + { + "before": "one central area—No weapon—and swung backhanded", + "after": "one central area—no weapon—and swung backhanded" + }, + { + "before": "shifted course to favor the smallest portion of the gap leaped the ditch", + "after": "shifted course to favor the smallest portion of the gap and leaped the ditch" + }, + { + "before": "—It’s not three-dimensional", + "after": "—it’s not three-dimensional" + }, + { + "before": "a work bench", + "after": "a workbench" + }, + { + "before": "—Don’t shoot it!", + "after": "—don’t shoot it!" } ], "https://www.parahumans.net/2019/09/15/from-within-16-10/": [ { "before": "carried on. out of", "after": "carried on, out of" + }, + { + "before": "That-. Okay.", + "after": "That— Okay." + }, + { + "before": "combat trained", + "after": "combat-trained" + } + ], + "https://www.parahumans.net/2019/09/17/from-within-16-11/": [ + { + "before": "Warrior monk", + "after": "Warrior Monk" + }, + { + "before": "Empire Eighty-eight", + "after": "Empire Eighty-Eight" + } + ], + "https://www.parahumans.net/2019/09/21/from-within-16-12/": [ + { + "before": "harder than normal exhalation", + "after": "harder-than-normal exhalation" + }, + { + "before": "maybe a bit to the right. “There’s probably a", + "after": "maybe a bit to the right, “there’s probably a" + }, + { + "before": "—We need to do this fast", + "after": "—we need to do this fast" + } + ], + "https://www.parahumans.net/2019/09/24/from-within-16-y/": [ + { + "before": "…She was my first kiss", + "after": "…she was my first kiss" + }, + { + "before": "another on the railing. “I’m not", + "after": "another on the railing, “I’m not" + }, + { + "before": "that out loud, “—But you’re a therapist", + "after": "that out loud, “—but you’re a therapist" + }, + { + "before": "monster slaying", + "after": "monster-slaying" + }, + { + "before": "so important they’d focus on you’?”", + "after": "so important they’d focus on you?’”" + }, + { + "before": "Than in B—In B, the woman", + "after": "Than in B—in B, the woman" + }, + { + "before": "insistent, annoyed. “I could", + "after": "insistent, annoyed, “I could" + }, + { + "before": "Listen!", + "after": "Listen!" + }, + { + "before": "“—But when I shook your hand", + "after": "“—but when I shook your hand" + }, + { + "before": "That,” Chris said. “Is what", + "after": "That,” Chris said, “is what" + }, + { + "before": "transcending earth and humanity", + "after": "transcending Earth and humanity" } ], "https://www.parahumans.net/2019/09/28/from-within-16-z/": [ @@ -7308,6 +7488,34 @@ { "before": "in the way,”she said", "after": "in the way,” she said" + }, + { + "before": "his voice just for her. “I’ll be", + "after": "his voice just for her, “I’ll be" + }, + { + "before": "through the threshold to the.", + "after": "through the threshold." + }, + { + "regExp": "capitol", + "replacement": "capital" + }, + { + "before": "—But none of that would", + "after": "—but none of that would" + }, + { + "before": "the Doctor replied", + "after": "the doctor replied" + }, + { + "before": "…It’d be exactly the same", + "after": "…it’d be exactly the same" + }, + { + "before": "This—This had been just for her.", + "after": "This—this had been just for her." } ], "https://www.parahumans.net/2019/10/01/sundown-17-1/": [ @@ -7694,6 +7902,12 @@ "after": "“Actually,” Tattletale said, “I’ve been going" } ], + "https://www.parahumans.net/2020/04/18/last-20-e3/": [ + { + "before": "madness inducing years of isolation", + "after": "madness-inducing years of isolation" + } + ], "https://www.parahumans.net/2020/04/21/last-20-e4/": [ { "before": "grown around the the maille sheath", From 2e4a3e56dc54f91cddc1882039d8e34c67e64ca6 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 16:50:30 -0500 Subject: [PATCH 103/186] Hyphenate compound words ending in "haired" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 4156330..3f34d1c 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -578,6 +578,9 @@ function fixHyphens(xml) { xml = xml.replace(/(? Date: Sun, 29 Nov 2020 16:55:34 -0500 Subject: [PATCH 104/186] Fix opening quotes inside quotes to apostrophes instead --- lib/convert-worker.js | 1 + lib/substitutions.json | 10 ---------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 3f34d1c..bb0674b 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -205,6 +205,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/,<\/em>/g, ","); xml = xml.replace(/,”<\/p>/g, ".”

"); xml = xml.replace(/

(.*),<\/p>/g, "

$1.

"); + xml = xml.replace(/‘(\w+)‘(\w+)’/g, "‘$1’$2’"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); diff --git a/lib/substitutions.json b/lib/substitutions.json index cfad210..0311867 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4985,12 +4985,6 @@ "after": "discuss goals,” Jessica said, “we think" } ], - "https://www.parahumans.net/2018/05/29/eclipse-x-4/": [ - { - "before": "ma‘am", - "after": "ma’am" - } - ], "https://www.parahumans.net/2018/05/30/eclipse-x-5/": [ { "before": "no words. and there", @@ -6864,10 +6858,6 @@ "before": "inter-earth", "after": "inter-Earth" }, - { - "before": "‘can‘t’", - "after": "‘can’t’" - }, { "before": "The Western of the two half-castles", "after": "The western of the two half-castles" From 0c22f7df11de4dfe4ba658feb329771f2813e600 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 17:00:22 -0500 Subject: [PATCH 105/186] Hyphenate N-dimensional --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index bb0674b..9db4fb8 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -592,6 +592,7 @@ function fixHyphens(xml) { xml = xml.replace(/well armed/g, "well-armed"); xml = xml.replace(/able bodied/g, "able-bodied"); xml = xml.replace(/self conscious/g, "self-conscious"); + xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); // This is usually correct but sometimes wrong. xml = xml.replace(/neo /g, "neo-"); From 54f2f82650f121cc603fda95576439d0f6a99b37 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 17:08:31 -0500 Subject: [PATCH 106/186] De-capitalize "corona pollentia" and friends --- lib/convert-worker.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 9db4fb8..40ab0ab 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -493,6 +493,13 @@ function fixCapitalization(xml, book) { // a compound noun or at the beginning of a sentence. xml = xml.replace(/(? Date: Sun, 29 Nov 2020 17:10:54 -0500 Subject: [PATCH 107/186] Always hyphenate "one-on-one" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 40ab0ab..6f52ab1 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -600,6 +600,7 @@ function fixHyphens(xml) { xml = xml.replace(/able bodied/g, "able-bodied"); xml = xml.replace(/self conscious/g, "self-conscious"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); + xml = xml.replace(/(?<=\b)one on one(?=\b)/g, "one-on-one"); // This is usually correct but sometimes wrong. xml = xml.replace(/neo /g, "neo-"); From ecea0f56604f724300ca20779ea5fa07d4d20c2d Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 17:17:54 -0500 Subject: [PATCH 108/186] Hyphenate day-to-day when appropriate --- lib/substitutions.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 0311867..d51c5a2 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -390,6 +390,10 @@ { "before": "Terrifying.” Alan told my dad, “When", "after": "Terrifying,” Alan told my dad. “When" + }, + { + "before": "day to day basis", + "after": "day-to-day basis" } ], "https://parahumans.wordpress.com/2011/11/15/hive-5-4/": [ @@ -476,6 +480,10 @@ { "before": "“Yeah,” Newter grinned,” You can tell", "after": "“Yeah,” Newter grinned. “You can tell" + }, + { + "before": "day to day interactions", + "after": "day-to-day interactions" } ], "https://parahumans.wordpress.com/2011/12/10/interlude-5/": [ @@ -4210,6 +4218,10 @@ { "before": "stories,” Riley said. “The", "after": "stories,” Riley said, “the" + }, + { + "before": "day to day, minute-to-minute existence", + "after": "day-to-day, minute-to-minute existence" } ], "https://parahumans.wordpress.com/2013/11/05/teneral-e-2/": [ @@ -4399,6 +4411,10 @@ { "before": "Glitzglam *New Message*: I", "after": "Glitzglam *New Message*: I" + }, + { + "before": "day to day life", + "after": "day-to-day life" } ], "https://www.parahumans.net/2017/12/09/flare-2-1/": [ @@ -4959,6 +4975,10 @@ { "before": "no Master pets", "after": "no master pets" + }, + { + "before": "day to day basis", + "after": "day-to-day basis" } ], "https://www.parahumans.net/2018/05/26/eclipse-x-1/": [ @@ -5227,6 +5247,10 @@ { "before": "a group of minors,” Dragon said. “Allow others", "after": "a group of minors,” Dragon said, “allow others" + }, + { + "before": "day to day basis", + "after": "day-to-day basis" } ], "https://www.parahumans.net/2018/07/07/beacon-8-2/": [ @@ -6031,6 +6055,10 @@ { "before": "Chiet", "after": "Cheit" + }, + { + "before": "day to day way", + "after": "day-to-day way" } ], "https://www.parahumans.net/2019/01/01/blinding-11-4/": [ @@ -6975,6 +7003,10 @@ { "before": "kanji for ‘Shi’", "after": "kanji for ‘shi’" + }, + { + "before": "re-learning day to day life", + "after": "relearning day-to-day life" } ], "https://www.parahumans.net/2019/07/06/dying-15-1/": [ @@ -7468,6 +7500,14 @@ { "before": "transcending earth and humanity", "after": "transcending Earth and humanity" + }, + { + "before": "day to day stuff", + "after": "day-to-day stuff" + }, + { + "before": "day to day work", + "after": "day-to-day work" } ], "https://www.parahumans.net/2019/09/28/from-within-16-z/": [ From 6e591815242e27b38a31e88ba3414d5ebdbf8ae4 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 17:22:36 -0500 Subject: [PATCH 109/186] Standardize on "Juliette" instead of "Juliet" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 6f52ab1..8356f39 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -352,6 +352,9 @@ function standardizeNames(xml) { // 25 instances of "Amias" to 3 of "Amais" xml = xml.replace(/Amais/g, "Amias"); + // 185 instances of Juliette to 4 of Juliet + xml = xml.replace(/Juliet(?=\b)/g, "Juliette"); + // Earlier chapters have a space; later ones do not. They're separate words, so side with the earlier chapters. // One location is missing the "k". xml = xml.replace(/Crock? o[‘’]Shit/g, "Crock o’ Shit"); From fc641af4f58782dc5df0e84222495de477ab4e96 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 29 Nov 2020 17:26:34 -0500 Subject: [PATCH 110/186] 4.7.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 2821b4e..b997681 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.6.1", + "version": "4.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index e240275..80f362f 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.6.1", + "version": "4.7.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From a86e21b846177185bebfbf4011e1f9e29c998c69 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 13:01:05 -0500 Subject: [PATCH 111/186] Re-capitalize "Stranger Titan" --- lib/convert-worker.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 8356f39..ff96285 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -503,15 +503,18 @@ function fixCapitalization(xml, book) { xml = xml.replace(/Radiata/g, "radiata"); xml = xml.replace(/Gemma/g, "gemma"); - // Especially early in the story, PRT designations are capitalized; they should not be. This fixes the cases where we + // Especially early in Worm, PRT designations are capitalized; they should not be. This fixes the cases where we // can be reasonably sure they don't start a sentence, although more specific instances are done in // substitutions.json, and some need to be back-corrected. // - // Note: "Master" is specifically omitted because it fails poorly on Interlude 4. Other instances need to be + // Note: "Master" is specifically omitted because it fails poorly on Worm Interlude 4. Other instances need to be // corrected via substitutions.json. + // + // This also over-de-capitalizes "The Stranger" in Ward (a titan name). Those also get fixed in substitutions.json. xml = xml.replace( - /([a-zA-Z,] |\/)(Mover|Shaker|Brute|Breaker|Tinker|Blaster|Thinker|Striker|Changer|Trump|Stranger|Shifter|Shaper)/g, - (_, prefix, designation) => prefix + designation.toLowerCase() + // eslint-disable-next-line max-len + /(?|“|\n|: )(Mover|Shaker|Brute|Breaker|Tinker|Blaster|Thinker|Striker|Changer|Trump|Stranger|Shifter|Shaper)(?! [A-Z])/g, + (_, designation) => designation.toLowerCase() ); xml = xml.replace( /(mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)-(\d+)/gi, From cc151355fde1a430cbb8a091db9676b17e44039a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 13:07:50 -0500 Subject: [PATCH 112/186] Re-capitalize "the Stranger" --- lib/substitutions.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/substitutions.json b/lib/substitutions.json index d51c5a2..0c470f6 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2987,7 +2987,7 @@ { "before": "Unfortunate tinker", "after": "Unfortunate tinker", - "_comment": "See convert.js; this corrects an over-correction" + "_comment": "See convert-worker.js; this corrects an over-correction" } ], "https://parahumans.wordpress.com/2013/03/19/interlude-19/": [ @@ -3068,7 +3068,7 @@ { "before": "the Clairvoyant", "after": "the clairvoyant", - "_comment": "see convert.js; this corrects an over-correction" + "_comment": "See convert-worker.js; this corrects an over-correction" }, { "before": "maintain eye contact. he could feel the warmth", @@ -7724,6 +7724,11 @@ { "before": "Victoria,” my Aunt said", "after": "Victoria,” my aunt said" + }, + { + "regExp": "([Tt]he) stranger", + "replacement": "$1 Stranger", + "_comment": "See convert-worker.js; this corrects an over-correction" } ], "https://www.parahumans.net/2019/12/28/infrared-19-2/": [ @@ -7738,6 +7743,11 @@ { "before": "scream—no sound when viewing crystal-pictures, of course-, and", "after": "scream—no sound when viewing crystal-pictures, of course—and" + }, + { + "regExp": "([Tt]he) stranger", + "replacement": "$1 Stranger", + "_comment": "See convert-worker.js; this corrects an over-correction" } ], "https://www.parahumans.net/2020/01/01/interlude-19-a/": [ From 730cc512e393c91e61ca64996a7888620c616876 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 13:17:14 -0500 Subject: [PATCH 113/186] Capitalize "Titans" --- lib/convert-worker.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index ff96285..ea79761 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -561,6 +561,15 @@ function fixCapitalization(xml, book) { xml = xml.replace(/english(?! muffin)/g, "English"); xml = xml.replace(/(? Date: Sat, 19 Dec 2020 13:40:07 -0500 Subject: [PATCH 114/186] Consistently capitalize "Titan" --- lib/convert-worker.js | 19 ++++++++----- lib/substitutions.json | 60 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index ea79761..5873150 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -465,10 +465,6 @@ function fixCapitalization(xml, book) { // The Speedrunners team name is missing its capitalization a couple times. xml = xml.replace(/speedrunners/g, "Speedrunners"); - // Dauntless is a cape name. The majority of the time "Dauntless Titan" is fully capitalized, but either word - // sometimes is missing its capitalization. - xml = xml.replace(/dauntless titan/ig, "Dauntless Titan"); - // Capitalization is inconsistent, but shard names seems to usually be capitalized. xml = xml.replace(/Grasping self/g, "Grasping Self"); xml = xml.replace(/Cloven stranger/g, "Cloven Stranger"); @@ -563,11 +559,20 @@ function fixCapitalization(xml, book) { // I was very torn on what to do with capitalization for "Titan" and "Titans". In general you don't capitalize species // names or other classifications, e.g. style guides are quite clear you don't capitalize "gods". The author - // capitalizes them more often than not (e.g., 179 raw "Titans" to 49 "titans"), but is quite inconsistent. In the - // end, I decided for capitalization, based on the precedent set by "Endbringers" (which are conceptually paired with - // Titans several times in the text). + // capitalizes them more often than not (e.g., 179 raw "Titans" to 49 "titans"), but is quite inconsistent. + // + // In the end, I decided against de-capitalization, based on the precedent set by "Endbringers" (which are + // conceptually paired with Titans several times in the text). However, we only capitalize the class after they are + // _introduced_ as a class in Sundown 17.y. (Before then we still capitalize individual names like "Dauntless Titan" + // or "Kronos Titan".) if (book === "ward") { + // All plural discussions of "Titans" are after Sundown 17.y. xml = xml.replace(/titans/g, "Titans"); + + // Since we can't safely change all instances of "titan", most are in substitutions.json. We can do a few here, + // though. + xml = xml.replace(/dauntless titan/ig, "Dauntless Titan"); // Sometimes "Dauntless" isn't even capitalized. + xml = xml.replace(/Kronos titan/g, "Kronos Titan"); } return xml; diff --git a/lib/substitutions.json b/lib/substitutions.json index 0c470f6..8249bd6 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -7622,18 +7622,30 @@ { "before": "Because it made mom come", "after": "Because it made Mom come" + }, + { + "before": "new titan", + "after": "new Titan" } ], "https://www.parahumans.net/2019/11/12/interlude-17-z-sundown/": [ { "before": "had his powers. the forcefield above", "after": "had his powers. The forcefield above" + }, + { + "regExp": "titan(?![a-z])", + "replacement": "Titan" } ], "https://www.parahumans.net/2019/11/16/radiation-18-1/": [ { "before": "worked for the P.R.T.", "after": "worked for the PRT." + }, + { + "regExp": "titan(?![a-z])", + "replacement": "Titan" } ], "https://www.parahumans.net/2019/11/19/radiation-18-2/": [ @@ -7648,12 +7660,20 @@ { "before": "tents last Winter or Spring", "after": "tents last winter or spring" + }, + { + "regExp": "titan(?![a-z])", + "replacement": "Titan" } ], "https://www.parahumans.net/2019/11/23/radiation-18-3/": [ { "before": "in the eyes. they were a", "after": "in the eyes. They were a" + }, + { + "before": "first look at a titan", + "after": "first look at a Titan" } ], "https://www.parahumans.net/2019/11/26/radiation-18-4/": [ @@ -7668,12 +7688,20 @@ { "before": "some business headquarters I was in

", "after": "some business headquarters I was in.

" + }, + { + "before": "hunched-over titan", + "after": "hunched-over Titan" } ], "https://www.parahumans.net/2019/12/03/radiation-18-6/": [ { "before": "Some Master minions", "after": "Some master minions" + }, + { + "before": "bomb to a titan", + "after": "bomb to a Titan" } ], "https://www.parahumans.net/2019/12/07/radiation-18-7/": [ @@ -7706,6 +7734,18 @@ "after": "end of the summer" } ], + "https://www.parahumans.net/2019/12/14/radiation-18-9/": [ + { + "before": "the next titan", + "after": "the next Titan" + } + ], + "https://www.parahumans.net/2019/12/17/radiation-18-10/": [ + { + "before": "one titan dogging me", + "after": "one Titan dogging me" + } + ], "https://www.parahumans.net/2019/12/21/interlude-18-z-radiation/": [ { "before": "face where her Uncle would see", @@ -7748,6 +7788,10 @@ "regExp": "([Tt]he) stranger", "replacement": "$1 Stranger", "_comment": "See convert-worker.js; this corrects an over-correction" + }, + { + "before": "because the titan was", + "after": "because the Titan was" } ], "https://www.parahumans.net/2020/01/01/interlude-19-a/": [ @@ -7764,6 +7808,14 @@ { "before": "I thought of dad, seeing him hug my mother", "after": "I thought of Dad, seeing him hug my mother" + }, + { + "before": "One titan mobilizing", + "after": "One Titan mobilizing" + }, + { + "before": "the horrifying titan", + "after": "the horrifying Titan" } ], "https://www.parahumans.net/2020/01/11/infrared-19-b/": [ @@ -7830,6 +7882,10 @@ { "before": "-through the emotion. Emote through the emotion. Emote—", "after": "—through the emotion. Emote through the emotion. Emote—" + }, + { + "before": "titan Ophion’s", + "after": "Titan Ophion’s" } ], "https://www.parahumans.net/2020/01/25/infrared-19-d/": [ @@ -7912,6 +7968,10 @@ { "before": "5’1 “", "after": "5′1″" + }, + { + "before": "pink and black titan", + "after": "pink and black Titan" } ], "https://www.parahumans.net/2020/02/25/last-20-1/": [ From 3aece3e05e486654da2960022f0b7c008d2f9351 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 14:40:21 -0500 Subject: [PATCH 115/186] Fix misspellings of "Tattletale" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 5873150..4c8e5c9 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -365,6 +365,9 @@ function standardizeNames(xml) { // 13 instances of Elman to 1 of Elmann xml = xml.replace(/Elmann/g, "Elman"); + // Thousands of instances of Tattletale to 4 instances of Tatteltale + xml = xml.replace(/Tatteltale/g, "Tattletale"); + return xml; } From 3e06358fa24003ccad81220bf8d7fde27554efe5 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 13:42:36 -0500 Subject: [PATCH 116/186] Spot fixes for Ward through Sundown 17.z --- lib/convert-worker.js | 18 ++- lib/substitutions.json | 276 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 283 insertions(+), 11 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 4c8e5c9..1cd668f 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -302,6 +302,9 @@ function fixTruncatedWords(xml) { // Short for "Birdcage" xml = xml.replace(/[‘’][Cc]age(?![a-z])/g, "’Cage"); + // We can't do "’Clear" (short for Crystalclear) here because it appears too much as a normal word preceded by an + // open quote, so we do that in substitutions.json. + return xml; } @@ -396,6 +399,7 @@ function enDashJointNames(xml) { // Joint names should use en dashes xml = xml.replace(/Dallon-Pelham/g, "Dallon–Pelham"); xml = xml.replace(/Bet-Gimel/g, "Bet–Gimel"); + xml = xml.replace(/Cheit-Gimel/g, "Bet–Gimel"); xml = xml.replace(/Tristan-Capricorn/g, "Tristan–Capricorn"); xml = xml.replace(/Capricorn-Byron/g, "Capricorn–Byron"); xml = xml.replace(/Tristan-Byron/g, "Tristan–Byron"); @@ -417,6 +421,8 @@ function enDashJointNames(xml) { xml = xml.replace(/Crawler-Breed/g, "Crawler–Breed"); xml = xml.replace(/Simurgh-Myrddin-plant/g, "Simurgh–Myrddin–plant"); xml = xml.replace(/Armsmaster-Defiant/g, "Armsmaster–Defiant"); + xml = xml.replace(/([Aa])gent-parahuman/g, "$1gent–parahuman"); + xml = xml.replace(/([Pp])arahuman-agent/g, "$1arahuman–agent"); return xml; } @@ -425,7 +431,7 @@ function fixPossessives(xml) { // Fix possessive of names ending in "s". xml = xml.replace( // eslint-disable-next-line max-len - /(?". @@ -525,6 +526,11 @@ function fixCapitalization(xml, book) { "$1–$2" ); + // Capitalization is inconsistent, but shard names seems to usually be capitalized. + xml = xml.replace(/Grasping self/g, "Grasping Self"); + xml = xml.replace(/Cloven stranger/g, "Cloven Stranger"); + xml = xml.replace(/Princess shaper/g, "Princess Shaper"); + // Place names need to always be capitalized xml = xml.replace(/North end/g, "North End"); xml = xml.replace(/(Stonemast|Shale) avenue/g, "$1 Avenue"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 8249bd6..a9ee5de 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4162,6 +4162,10 @@ { "before": "on the other earth", "after": "on the other Earth" + }, + { + "before": "name? did it start", + "after": "name? Did it start" } ], "https://parahumans.wordpress.com/2013/10/29/30-7/": [ @@ -6227,6 +6231,10 @@ { "before": "apparently I", "after": "apparently I" + }, + { + "before": "Hey Little V", + "after": "Hey little V" } ], "https://www.parahumans.net/2019/01/29/blinding-11-10/": [ @@ -6272,7 +6280,7 @@ }, { "before": "Go you, Little V.", - "after": "Go you, Little V." + "after": "Go you, little V." }, { "before": "the King on the chess board", @@ -6657,10 +6665,6 @@ { "before": "For some of the heartbroken", "after": "For some of the Heartbroken" - }, - { - "before": "agent-parahuman", - "after": "agent–parahuman" } ], "https://www.parahumans.net/2019/04/20/black-13-6/": [ @@ -7556,36 +7560,172 @@ { "before": "Some—many- were unwillingly", "after": "Some—many—were unwillingly" + }, + { + "before": "looking down at my hand at her arm and my hand", + "after": "looking down at her arm and my hand" + }, + { + "before": "more more thing hanging over our heads", + "after": "one more thing hanging over our heads" + }, + { + "before": "my mothers cheeks", + "after": "my mother’s cheeks" + }, + { + "before": "—Understand, please", + "after": "—understand, please" + }, + { + "before": "“Victoria,” Crystal’s voice was gentle", + "after": "“Victoria.” Crystal’s voice was gentle" } ], "https://www.parahumans.net/2019/10/05/sundown-17-2/": [ { "before": "egg for Crystal and mom", "after": "egg for Crystal and Mom" + }, + { + "before": "

Me:
", + "after": "

Me:
" + }, + { + "before": "

Vista (Little V):
", + "after": "

Vista (Little V):
" + }, + { + "before": "few minutes of peace, damn it.—", + "after": "few minutes of peace, damn it—" + }, + { + "regExp": "‘Clear", + "replacement": "’Clear" } ], "https://www.parahumans.net/2019/10/08/sundown-17-3/": [ { "before": "say, Math class", "after": "say, math class" + }, + { + "before": "hang outs", + "after": "hangouts" + }, + { + "before": "", + "after": "’" + }, + { + "before": "“—Which I’m not.”", + "after": "“—which I’m not.”" + }, + { + "before": "Vista for the kid’s sake", + "after": "Vista for the kids’ sake" + }, + { + "before": "Day to day activities", + "after": "Day-to-day activities" + }, + { + "before": "tower crescent avenue", + "after": "Tower Crescent Avenue" + }, + { + "before": "all had to deal with ‘heavy’.", + "after": "all had to deal with ‘heavy’.”" + }, + { + "before": "stuff?” I spoke up, “it get into that control", + "after": "stuff?” I spoke up. “It gets into that control" + }, + { + "before": "talked to me a like", + "after": "talked to me like" + }, + { + "before": "call me Big V", + "after": "call me big V" } ], "https://www.parahumans.net/2019/10/12/sundown-17-4/": [ { "before": "on resisting Master influence", "after": "on resisting master influence" + }, + { + "before": "CDs and Vinyls", + "after": "CDs and vinyls" + }, + { + "before": "“P.R.T.”", + "after": "“PRT.”" + }, + { + "before": "second or third string Wardens", + "after": "second- or third-string Wardens" + }, + { + "before": "intern level clerks", + "after": "intern-level clerks" + }, + { + "before": "half way", + "after": "halfway" + }, + { + "before": "her tone didn’t soft", + "after": "her tone didn’t soften" + }, + { + "before": "Jessica, Mr…", + "after": "Jessica, Mr.…" + }, + { + "before": "—Captive", + "after": "—captive" + }, + { + "before": "come from? what language", + "after": "come from? What language" } ], "https://www.parahumans.net/2019/10/15/sundown-17-5/": [ { "before": "Is mom walking without difficulty", "after": "Is Mom walking without difficulty" + }, + { + "before": "Through valkyrie", + "after": "Through Valkyrie" + }, + { + "before": "“‘Lo.”", + "after": "“’Lo.”" } ], "https://www.parahumans.net/2019/10/19/sundown-17-6/": [ { "before": "Probably dad", "after": "Probably Dad" + }, + { + "before": "and no and no rejiggered rat", + "after": "and no rejiggered rat" + }, + { + "before": "Harder headed", + "after": "Harder-headed" + }, + { + "before": "you proved my sister right? Tired,", + "after": "you proved my sister right? Tired," + }, + { + "before": "boundary,” He whispered", + "after": "boundary,” he whispered" } ], "https://www.parahumans.net/2019/10/22/sundown-17-7/": [ @@ -7596,6 +7736,10 @@ { "before": "Golem explained

", "after": "Golem explained.

" + }, + { + "before": "see the Lab", + "after": "see the lab" } ], "https://www.parahumans.net/2019/10/26/sundown-17-8/": [ @@ -7606,6 +7750,40 @@ { "before": "She’s aggressive If anyone makes", "after": "She’s aggressive. If anyone makes" + }, + { + "before": "—They mobbed Lookout", + "after": "—they mobbed Lookout" + }, + { + "before": "Of Course Kenzie", + "after": "Of course Kenzie" + }, + { + "before": "Rain about Girls", + "after": "Rain about girls" + }, + { + "before": "I typed: The one", + "after": "I typed: The one" + }, + { + "before": "realize,” Seir called out. “If a fight", + "after": "realize,” Seir called out, “if a fight" + }, + { + "before": "was emotion resistant", + "after": "was emotion-resistant" + } + ], + "https://www.parahumans.net/2019/10/29/sundown-17-9/": [ + { + "before": "—Are you going to be wishing", + "after": "—are you going to be wishing" + }, + { + "before": "Asking question?", + "after": "Asking a question?" } ], "https://www.parahumans.net/2019/11/02/sundown-17-10/": [ @@ -7616,6 +7794,40 @@ { "before": "that didn’t betray too much

", "after": "that didn’t betray too much.

" + }, + { + "before": "say Molasses", + "after": "say molasses" + }, + { + "before": "‘nother", + "after": "’nother" + }, + { + "before": "‘she peed on me!’", + "after": "‘she peed on me!’." + }, + { + "before": "madam Mayor", + "after": "Madam Mayor" + } + ], + "https://www.parahumans.net/2019/11/05/interlude-17-x-sundown/": [ + { + "before": "five-o’clock shadow", + "after": "five o’clock shadow" + }, + { + "before": "nervous looking guy", + "after": "nervous-looking guy" + }, + { + "before": "you have drugs? Alcohol? Cigarettes? I have", + "after": "you have drugs? Alcohol? Cigarettes? I have" + }, + { + "before": "Not by mom or dad", + "after": "Not by Mom or Dad" } ], "https://www.parahumans.net/2019/11/09/interlude-17-y-sundown/": [ @@ -7626,6 +7838,14 @@ { "before": "new titan", "after": "new Titan" + }, + { + "before": "anti parahumans", + "after": "anti-parahumans" + }, + { + "before": "hit the Anti-parahumans", + "after": "hit the anti-parahumans" } ], "https://www.parahumans.net/2019/11/12/interlude-17-z-sundown/": [ @@ -7636,6 +7856,42 @@ { "regExp": "titan(?![a-z])", "replacement": "Titan" + }, + { + "before": "What if you weren’t?", + "after": "What if you weren’t?" + }, + { + "before": "Victor, Can you go join Tribute", + "after": "Victor, can you go join Tribute" + }, + { + "before": "The forcefield above him elaborate and getting", + "after": "The forcefield above him was elaborate and getting" + }, + { + "before": "Their faculties were diminished, but

", + "after": "Their faculties were diminished, but—

" + }, + { + "before": "Flashbang, he saw was one of the", + "after": "Flashbang, he saw, was one of the" + }, + { + "before": "the palm, Out each foot, and out of the mouth.lifting one", + "after": "the palm. Out each foot, and out of the mouth. Lifting one" + }, + { + "before": "no eyes; only a blindfold", + "after": "no eyes, only a blindfold" + }, + { + "before": "lightness of a feather landing, came to perch", + "after": "lightness of a feather landing, it came to perch" + }, + { + "before": "…The only things that are", + "after": "…the only things that are" } ], "https://www.parahumans.net/2019/11/16/radiation-18-1/": [ @@ -7816,6 +8072,16 @@ { "before": "the horrifying titan", "after": "the horrifying Titan" + }, + { + "before": "that stranger", + "after": "that Stranger" + } + ], + "https://www.parahumans.net/2020/01/07/infrared-19-4/": [ + { + "before": "talked to them? or done", + "after": "talked to them? Or done" } ], "https://www.parahumans.net/2020/01/11/infrared-19-b/": [ From 5ff6621b31a000c194f46f9d9426b5af91ec78fa Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 14:44:29 -0500 Subject: [PATCH 117/186] Hyphenate a variety of words starting with "self-" Previously we only did self-conscious; this brings along self-esteem, self-loathing, and self-harm. --- lib/convert-worker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 1cd668f..bf9c938 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -627,7 +627,7 @@ function fixHyphens(xml) { xml = xml.replace(/creepy crawl/g, "creepy-crawl"); xml = xml.replace(/well armed/g, "well-armed"); xml = xml.replace(/able bodied/g, "able-bodied"); - xml = xml.replace(/self conscious/g, "self-conscious"); + xml = xml.replace(/self (conscious|esteem|loathing|harm)/g, "self-$1"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)one on one(?=\b)/g, "one-on-one"); From 8a9562e10eaac3f2800559e4923b27cf903e1118 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 14:52:03 -0500 Subject: [PATCH 118/186] Hyphenate "level-headed" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index bf9c938..86f5ca5 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -627,6 +627,7 @@ function fixHyphens(xml) { xml = xml.replace(/creepy crawl/g, "creepy-crawl"); xml = xml.replace(/well armed/g, "well-armed"); xml = xml.replace(/able bodied/g, "able-bodied"); + xml = xml.replace(/level headed/g, "level-headed"); xml = xml.replace(/self (conscious|esteem|loathing|harm)/g, "self-$1"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)one on one(?=\b)/g, "one-on-one"); From 631417a53004cf274e6d71636a3b036dd603be10 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 14:55:37 -0500 Subject: [PATCH 119/186] Capitalize "Fragile One" --- lib/convert-worker.js | 1 + lib/substitutions.json | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 86f5ca5..1b7d4e4 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -530,6 +530,7 @@ function fixCapitalization(xml, book) { xml = xml.replace(/Grasping self/g, "Grasping Self"); xml = xml.replace(/Cloven stranger/g, "Cloven Stranger"); xml = xml.replace(/Princess shaper/g, "Princess Shaper"); + xml = xml.replace(/Fragile one/g, "Fragile One"); // Place names need to always be capitalized xml = xml.replace(/North end/g, "North End"); diff --git a/lib/substitutions.json b/lib/substitutions.json index a9ee5de..3b81b22 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -7774,6 +7774,10 @@ { "before": "was emotion resistant", "after": "was emotion-resistant" + }, + { + "before": "Thank you, fragile one", + "after": "Thank you, Fragile One" } ], "https://www.parahumans.net/2019/10/29/sundown-17-9/": [ @@ -7948,6 +7952,14 @@ { "before": "hunched-over titan", "after": "hunched-over Titan" + }, + { + "before": "experience the world, fragile one", + "after": "experience the world, Fragile One" + }, + { + "before": "chime in, fragile one", + "after": "chime in, Fragile One" } ], "https://www.parahumans.net/2019/12/03/radiation-18-6/": [ @@ -8152,6 +8164,14 @@ { "before": "titan Ophion’s", "after": "Titan Ophion’s" + }, + { + "before": "Work with me, fragile one", + "after": "Work with me, Fragile One" + }, + { + "before": "‘fragile one’", + "after": "‘Fragile One’" } ], "https://www.parahumans.net/2020/01/25/infrared-19-d/": [ From 9fc36b813fa5f8119406328d20e9cdacf1a2df12 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 14:59:08 -0500 Subject: [PATCH 120/186] Hyphenate "clear-cut" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 1b7d4e4..1d40868 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -629,6 +629,7 @@ function fixHyphens(xml) { xml = xml.replace(/well armed/g, "well-armed"); xml = xml.replace(/able bodied/g, "able-bodied"); xml = xml.replace(/level headed/g, "level-headed"); + xml = xml.replace(/clear cut/g, "clear-cut"); xml = xml.replace(/self (conscious|esteem|loathing|harm)/g, "self-$1"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)one on one(?=\b)/g, "one-on-one"); From 442d245e2d10af20b534e417243bd558d38e96b2 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 15:55:38 -0500 Subject: [PATCH 121/186] Remove more non-breaking spaces Also normalizes after-sentence spaces to two (normal) spaces, but that's not visible to readers. --- lib/convert-worker.js | 13 ++++++++----- lib/substitutions.json | 13 +++++++++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 1d40868..36b043b 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -140,11 +140,14 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/([^ ]+)<\/i>/g, "$1"); xml = xml.replace(/([^ ]+)( +)<\/i>/g, "$1$2"); - // There are way too many nonbreaking spaces where they don't belong. - // If they show up three in a row, then let them live. Otherwise, they die. - // Also remove any run of them after a period. - xml = xml.replace(/([^\xA0])\xA0\xA0?([^\xA0])/g, "$1 $2"); - xml = xml.replace(/\.\x20*\xA0[\xA0\x20]*/, ". "); + // There are way too many nonbreaking spaces where they don't belong. If they show up three in a row, then let them + // live; they're maybe being used for alignment or something. Otherwise, they die. + // + // Also, normalize spaces after a period/quote mark to two (normal) spaces. The second one is invisible when + // rendered, but it helps future heuristics detect end of sentences. + xml = xml.replace(/\xA0{1,2}(?!\x20\xA0)/g, " "); + xml = xml.replace(/([.”])\x20*\xA0[\xA0\x20]*/g, "$1 "); + xml = xml.replace(/([.”])\x20{3,}/g, "$1 "); function fixEms() { // Fix recurring broken-up or erroneous s diff --git a/lib/substitutions.json b/lib/substitutions.json index 3b81b22..d3ba79c 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -1200,6 +1200,11 @@ { "before": "of her head, “And my", "after": "of her head. “And my" + }, + { + "before": "KOOROW BULLIT
\nMILK         STUMPY
\nBROOTUS JOODUS
\nAXIL GINGIR", + "after": "KOOROW\u00A0\u00A0\u00A0BULLIT
\nMILK\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0STUMPY
\nBROOTUS\u00A0\u00A0JOODUS
\nAXIL\u00A0\u00A0\u00A0\u00A0\u00A0GINGIR", + "_comment": "This section plays poorly with our space-normalizing heuristic." } ], "https://parahumans.wordpress.com/2012/03/31/interlude-8/": [ @@ -2925,6 +2930,10 @@ { "before": "and be brought it", "after": "and he brought it" + }, + { + "before": "propellers  One caught her", + "after": "propellers. One caught her" } ], "https://parahumans.wordpress.com/2013/03/02/scourge-19-4/": [ @@ -6569,7 +6578,7 @@ "after": "morning breath—more than morning breath—but there" }, { - "before": "

Previous Chapter                                              Next Chapter

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

", + "before": "

Previous Chapter                                                                               Next Chapter

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

", "after": "
 
\n
 
", "_comment": "This is the best way I can think of to emulate the end of chapter 'fake out' in an ebook format" }, @@ -6596,7 +6605,7 @@ ], "https://www.parahumans.net/2019/04/02/black-13-1/": [ { - "before": "

\n

Previous Chapter                                              Next Chapter

\n", + "before": "

\n

Previous Chapter                                                                               Next Chapter

\n", "after": "", "_comment": "Our usual heuristics of removing the first paragraph to remove the previous/next chapter links are broken here because of the 'go back and look at the fake out' comment at the top" }, From 5b7ec80750554c63732fbf13f37f1c003ad3bbed Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 16:53:26 -0500 Subject: [PATCH 122/186] Spot fixes for Ward through Infrared 19.4 --- lib/convert-worker.js | 2 +- lib/substitutions.json | 257 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 258 insertions(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 36b043b..7e36b60 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -485,7 +485,7 @@ function fixCapitalization(xml, book) { // This usually works in Ward (some instances corrected back in substitutions.json), and has a few false positives in // Worm, where it is never needed: if (book === "ward") { - xml = xml.replace(/the patrol(?!s)/g, "the Patrol"); + xml = xml.replace(/the patrol(?!s|ling)/g, "the Patrol"); } // This is sometimes missing its capitalization. diff --git a/lib/substitutions.json b/lib/substitutions.json index d3ba79c..5fe4175 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -7933,6 +7933,30 @@ { "regExp": "titan(?![a-z])", "replacement": "Titan" + }, + { + "before": "condemnation free", + "after": "condemnation-free" + }, + { + "before": "eyes heavily decorate with gray", + "after": "eyes heavily decorated with gray" + }, + { + "before": "Yuh!", + "after": "Yuh!" + }, + { + "before": "cultured accent, “Is that us", + "after": "cultured accent, “is that us" + }, + { + "before": "to force one.”", + "after": "to force one’.”" + }, + { + "before": "between the Titans Pull", + "after": "between the Titans. Pull" } ], "https://www.parahumans.net/2019/11/23/radiation-18-3/": [ @@ -7943,6 +7967,18 @@ { "before": "first look at a titan", "after": "first look at a Titan" + }, + { + "before": "too much fo a retreat", + "after": "too much of a retreat" + }, + { + "before": "said, “after we were all", + "after": "said, “After we were all" + }, + { + "before": "reconicle", + "after": "reconcile" } ], "https://www.parahumans.net/2019/11/26/radiation-18-4/": [ @@ -7969,6 +8005,60 @@ { "before": "chime in, fragile one", "after": "chime in, Fragile One" + }, + { + "before": "syndicate-awareness", + "after": "Syndicate-awareness" + }, + { + "before": "gray Jester Mockument was like", + "after": "gray jester Mockument like" + }, + { + "before": "he halfway back", + "after": "he was halfway back" + }, + { + "before": "master of biology", + "after": "mastery of biology" + }, + { + "before": "for most move, or raise", + "after": "for most moves, or raise" + }, + { + "before": "wasn’t hookline’s", + "after": "wasn’t Hookline’s" + }, + { + "before": "Chicken little", + "after": "Chicken Little" + } + ], + "https://www.parahumans.net/2019/11/30/radiation-18-5/": [ + { + "before": "jumping of a cardboard", + "after": "jumping off a cardboard" + }, + { + "before": "Tattletale said. “That breastplate", + "after": "Tattletale said, “that breastplate" + }, + { + "before": "they were gas damaged", + "after": "they were gas-damaged" + }, + { + "before": "“skewer them to", + "after": "“Skewer them to" + }, + { + "before": "…You have to conserve", + "after": "…you have to conserve" + }, + { + "before": "Shorcut", + "after": "Shortcut" } ], "https://www.parahumans.net/2019/12/03/radiation-18-6/": [ @@ -7979,6 +8069,14 @@ { "before": "bomb to a titan", "after": "bomb to a Titan" + }, + { + "before": "military inspired", + "after": "military-inspired" + }, + { + "before": "a rough fight", + "after": "a rough flight" } ], "https://www.parahumans.net/2019/12/07/radiation-18-7/": [ @@ -8009,18 +8107,80 @@ { "before": "end of the Summer", "after": "end of the summer" + }, + { + "before": "five pound phone", + "after": "five-pound phone" + }, + { + "before": "He was slowly knitting itself together", + "after": "He was slowly knitting himself together" + }, + { + "before": "and uh, Stables", + "after": "and uh, stables" + }, + { + "before": "feel the meta tines", + "after": "feel the metal tines" + }, + { + "before": "back at the Workshop", + "after": "back at the workshop" + }, + { + "before": "Victoria,” My uncle", + "after": "Victoria,” my uncle" + } + ], + "https://www.parahumans.net/2019/12/10/radiation-18-8/": [ + { + "before": "Parahuman Sciences", + "after": "parahuman sciences" + }, + { + "before": "protocols in action.’", + "after": "protocols in action’." + }, + { + "before": "“—Too close", + "after": "“—too close" + }, + { + "before": "Ten-thirty-six", + "after": "Ten thirty-six" + }, + { + "before": "“—He was warm and safe", + "after": "“—he was warm and safe" } ], "https://www.parahumans.net/2019/12/14/radiation-18-9/": [ { "before": "the next titan", "after": "the next Titan" + }, + { + "before": "Kenzie said. Give me a minute.", + "after": "Kenzie said. “Give me a minute." + }, + { + "before": "Sveta said. Especially if we", + "after": "Sveta said. “Especially if we" + }, + { + "before": "from the cold, though his face", + "after": "from the cold; though his face" } ], "https://www.parahumans.net/2019/12/17/radiation-18-10/": [ { "before": "one titan dogging me", "after": "one Titan dogging me" + }, + { + "before": "Capes on two rises", + "after": "Capes on two risers" } ], "https://www.parahumans.net/2019/12/21/interlude-18-z-radiation/": [ @@ -8035,6 +8195,15 @@ { "before": "and saw her Aunt and Uncle approaching", "after": "and saw her aunt and uncle approaching" + }, + { + "regExp": "([Tt]he) Giantess", + "replacement": "$1 giantess", + "_comment": "14 other instances in this chapter are not capitalized" + }, + { + "before": "had allies. connections.", + "after": "had allies. Connections." } ], "https://www.parahumans.net/2019/12/24/infrared-19-1/": [ @@ -8046,6 +8215,14 @@ "regExp": "([Tt]he) stranger", "replacement": "$1 Stranger", "_comment": "See convert-worker.js; this corrects an over-correction" + }, + { + "before": "doing the damage herself", + "after": "doing the damage themselves" + }, + { + "before": "This? This", + "after": "This? This" } ], "https://www.parahumans.net/2019/12/28/infrared-19-2/": [ @@ -8069,6 +8246,46 @@ { "before": "because the titan was", "after": "because the Titan was" + }, + { + "before": "endless flesh monster were", + "after": "endless flesh monsters were" + }, + { + "before": "putting it of balance", + "after": "putting it off balance" + }, + { + "before": "What lay us below", + "after": "What lay below us" + }, + { + "before": "Do you have any regrets now?", + "after": "Do you have any regrets now?" + }, + { + "before": "Stygean Blue", + "after": "stygian blue" + }, + { + "before": "Except the feeling of breached", + "after": "Except the feeling of being breached" + }, + { + "before": "best guess of it’s location", + "after": "best guess of its location" + }, + { + "before": "Dream Room", + "after": "dream room" + }, + { + "before": "‘EM", + "after": "’EM" + }, + { + "before": "In effect, Powers were different", + "after": "In effect, powers were different" } ], "https://www.parahumans.net/2020/01/01/interlude-19-a/": [ @@ -8079,6 +8296,30 @@ { "before": "can’t induce triggers There were parahumans", "after": "can’t induce triggers. There were parahumans" + }, + { + "before": "into the conversation, “You do some", + "after": "into the conversation, “you do some" + }, + { + "before": "None of us do, Egg thought", + "after": "None of us do, Egg thought" + }, + { + "before": "Our ‘number zero’s wife", + "after": "Our ‘number zero’s’ wife" + }, + { + "before": "his voice was hard, “You took", + "after": "his voice was hard, “you took" + }, + { + "before": "You don’t get to do that!", + "after": "You don’t get to do that!" + }, + { + "before": "Almost a Figurehead", + "after": "Almost a figurehead" } ], "https://www.parahumans.net/2020/01/04/infrared-19-3/": [ @@ -8097,12 +8338,28 @@ { "before": "that stranger", "after": "that Stranger" + }, + { + "before": "I could Strands worked to braid together", + "after": "I could see strands working to braid together" + }, + { + "before": "any of the Master Protocols", + "after": "any of the master protocols" } ], "https://www.parahumans.net/2020/01/07/infrared-19-4/": [ { "before": "talked to them? or done", "after": "talked to them? Or done" + }, + { + "before": "all nighters", + "after": "all-nighters" + }, + { + "before": "the other cases", + "after": "the other Cases" } ], "https://www.parahumans.net/2020/01/11/infrared-19-b/": [ From 1a0780bd7b3326645e716f2d5e52fe2eac4a8ac5 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 16:55:34 -0500 Subject: [PATCH 123/186] Capitalize "Aunt Sarah" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 7e36b60..136db35 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -554,6 +554,9 @@ function fixCapitalization(xml, book) { xml = xml.replace(/(? Date: Sat, 19 Dec 2020 17:03:33 -0500 Subject: [PATCH 124/186] Fix hyphenation for high five and fist bump --- lib/convert-worker.js | 10 +++++++--- lib/substitutions.json | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 136db35..db7eedc 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -598,9 +598,6 @@ function fixMispellings(xml) { // This is commonly misspelled. xml = xml.replace(/([Ss])houlderblade/g, "$1houlder blade"); - // Preemptive(ly) is often hyphenated (not always). It should not be. - xml = xml.replace(/([Pp])re-emptive/g, "$1reemptive"); - // All dictionaries agree this is capitalized. xml = xml.replace(/u-turn/g, "U-turn"); @@ -640,6 +637,13 @@ function fixHyphens(xml) { xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)one on one(?=\b)/g, "one-on-one"); + // Preemptive(ly) is often hyphenated (not always). It should not be. + xml = xml.replace(/([Pp])re-emptive/g, "$1reemptive"); + + // These should be hyphenated only when used as a verb. We correct those cases back in substitutions.json. + xml = xml.replace(/fist-bump/g, "fist bump"); + xml = xml.replace(/high-five/g, "high five"); + // This is usually correct but sometimes wrong. xml = xml.replace(/neo /g, "neo-"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 5fe4175..b2ff494 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -6206,6 +6206,10 @@ { "before": "“Cradle—the most intact part of Tattletale said", "after": "“Cradle—” the most intact part of Tattletale said" + }, + { + "before": "backwards-high five", + "after": "backwards high five" } ], "https://www.parahumans.net/2019/01/26/blinding-11-9/": [ @@ -7381,6 +7385,11 @@ { "before": "aunt Rachel", "after": "Aunt Rachel" + }, + { + "before": "for Kenzie to high five", + "after": "for Kenzie to high-five", + "_comment": "Here it's a verb" } ], "https://www.parahumans.net/2019/09/07/from-within-16-8/": [ @@ -8320,6 +8329,11 @@ { "before": "Almost a Figurehead", "after": "Almost a figurehead" + }, + { + "before": "Can’t fist bump", + "after": "Can’t fist-bump", + "_comment": "Here it's a verb" } ], "https://www.parahumans.net/2020/01/04/infrared-19-3/": [ From a1c7f00b42da4450110928f4d1ad7d1b11da71ff Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 17:05:36 -0500 Subject: [PATCH 125/186] Capitalize "Machine Army" --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index db7eedc..f07db96 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -477,6 +477,9 @@ function fixCapitalization(xml, book) { // The Speedrunners team name is missing its capitalization a couple times. xml = xml.replace(/speedrunners/g, "Speedrunners"); + // The Machine Army is missing its capitalization a couple times. + xml = xml.replace(/machine army/g, "Machine Army"); + // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". "patrol // group" is always lowercased. It seems like "Patrol" is a proper name, and is used as a capitalized modifier in // other contexts (e.g. Patrol leader). So let's standardize on "Patrol ". From aa9fc197e9706cae406e78d6bfa411c6e31a8cb5 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 17:11:34 -0500 Subject: [PATCH 126/186] Hyphenate "hand-to-hand" --- lib/convert-worker.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index f07db96..4faeb16 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -647,6 +647,11 @@ function fixHyphens(xml) { xml = xml.replace(/fist-bump/g, "fist bump"); xml = xml.replace(/high-five/g, "high five"); + // This should be hyphenated when used as an adjective (instead of an adverb or noun). I.e. it should be + // "hand-to-hand combat", but "passed from hand to hand", and "capable in hand to hand". The following heuristic works + // in the books. + xml = xml.replace(/hand to hand(?= [a-z])/g, "hand-to-hand"); + // This is usually correct but sometimes wrong. xml = xml.replace(/neo /g, "neo-"); From 6ddde0681720b43af7e65b6c15cb6223b70cff34 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 17:16:05 -0500 Subject: [PATCH 127/186] De-capitalize "parahumans" --- lib/substitutions.json | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index b2ff494..6e1df8c 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -124,6 +124,10 @@ { "before": "Really dad", "after": "Really Dad" + }, + { + "before": "The Parahumans wiki", + "after": "The parahumans wiki" } ], "https://parahumans.wordpress.com/2011/08/09/agitation-3-1/": [ @@ -2529,6 +2533,10 @@ { "before": "weeks, months. Anticipating", "after": "weeks, months. Anticipating" + }, + { + "before": "as much or more about Parahumans than", + "after": "as much or more about parahumans than" } ], "https://parahumans.wordpress.com/2013/01/08/migration-17-1/": [ @@ -2776,6 +2784,10 @@ { "before": "that was why Masters tend to be", "after": "that was why masters tend to be" + }, + { + "before": "the top researchers on Parahumans", + "after": "the top researchers on parahumans" } ], "https://parahumans.wordpress.com/2013/02/07/interlude-18-donation-bonus-3/": [ @@ -5196,6 +5208,10 @@ { "before": "fighting, ‘rene", "after": "fighting, ’rene" + }, + { + "before": "I studied Parahumans before", + "after": "I studied parahumans before" } ], "https://www.parahumans.net/2018/06/26/torch-interlude-7-x/": [ @@ -5717,6 +5733,10 @@ { "before": "fucking teacher wouldn’t", "after": "fucking Teacher wouldn’t" + }, + { + "before": "That the Parahumans were taking over", + "after": "That the parahumans were taking over" } ], "https://www.parahumans.net/2018/10/13/gleaming-9-15/": [ @@ -6822,6 +6842,12 @@ "after": "Instead a 1, −2, 4" } ], + "https://www.parahumans.net/2019/05/21/breaking-14-2/": [ + { + "before": "if Parahumans like Swansong", + "after": "if parahumans like Swansong" + } + ], "https://www.parahumans.net/2019/05/25/breaking-14-3/": [ { "before": "actively tamper with it it", @@ -8334,6 +8360,10 @@ "before": "Can’t fist bump", "after": "Can’t fist-bump", "_comment": "Here it's a verb" + }, + { + "before": "that other Parahumans are", + "after": "that other parahumans are" } ], "https://www.parahumans.net/2020/01/04/infrared-19-3/": [ From 877beda7332b74570b653873d3b07ef61481392e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 19 Dec 2020 17:21:59 -0500 Subject: [PATCH 128/186] 4.8.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index b997681..748555a 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.7.0", + "version": "4.8.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 80f362f..7437398 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.7.0", + "version": "4.8.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From 6f51bc6c9a7296c8b2790eecf8b02e4d7bfcdfb6 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 24 Dec 2020 21:22:37 -0500 Subject: [PATCH 129/186] Spot fixes for Ward through Infrared 19.8 --- lib/convert-worker.js | 2 + lib/substitutions.json | 106 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 4faeb16..774a772 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -424,6 +424,8 @@ function enDashJointNames(xml) { xml = xml.replace(/Crawler-Breed/g, "Crawler–Breed"); xml = xml.replace(/Simurgh-Myrddin-plant/g, "Simurgh–Myrddin–plant"); xml = xml.replace(/Armsmaster-Defiant/g, "Armsmaster–Defiant"); + xml = xml.replace(/Matryoshka-Valentin/g, "Matryoshka–Valentin"); + xml = xml.replace(/Gaea-Eden/g, "Gaea–Eden"); xml = xml.replace(/([Aa])gent-parahuman/g, "$1gent–parahuman"); xml = xml.replace(/([Pp])arahuman-agent/g, "$1arahuman–agent"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 6e1df8c..1ffed4a 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -7950,6 +7950,10 @@ { "regExp": "titan(?![a-z])", "replacement": "Titan" + }, + { + "before": "the Fallen Raid or the Prison?", + "after": "the Fallen raid or the prison?" } ], "https://www.parahumans.net/2019/11/19/radiation-18-2/": [ @@ -8446,6 +8450,14 @@ { "before": "can understand your Aunt and Uncle", "after": "can understand your aunt and uncle" + }, + { + "before": "—And I think I have a grasp", + "after": "—and I think I have a grasp" + }, + { + "before": "emotion driven", + "after": "emotion-driven" } ], "https://www.parahumans.net/2020/01/14/infrared-19-c/": [ @@ -8464,6 +8476,24 @@ { "before": "—die quickly, if he has to die.", "after": "—die quickly, if he has to die." + }, + { + "before": "close mouthed", + "after": "close-mouthed" + }, + { + "before": "“…Don’t really trust", + "after": "“…don’t really trust" + } + ], + "https://www.parahumans.net/2020/01/18/infrared-19-5/": [ + { + "before": "liqud Titan", + "after": "liquid Titan" + }, + { + "before": "done at the Prison", + "after": "done at the prison" } ], "https://www.parahumans.net/2020/01/21/infrared-19-6/": [ @@ -8482,24 +8512,96 @@ { "before": "‘fragile one’", "after": "‘Fragile One’" + }, + { + "before": "“—But there won’t be any effects", + "after": "“—but there won’t be any effects" + }, + { + "before": "One of his Titans lurked", + "after": "One of his giants lurked" + }, + { + "before": "furously", + "after": "furiously" + }, + { + "before": "what I’d looked, hadn’t registered", + "after": "what I’d looked at, hadn’t registered" + }, + { + "before": "Mother Titan", + "after": "Mother Giant" + }, + { + "before": "Adrenline", + "after": "Adrenaline" + }, + { + "before": "ex-Prison", + "after": "ex-prison" + }, + { + "before": "Chris and the Syringe", + "after": "Chris and the syringe" + }, + { + "before": "“…She might have gotten", + "after": "“…she might have gotten" + }, + { + "before": "“—It was Jessica accepting", + "after": "“—it was Jessica accepting" + }, + { + "before": "We saw people running around.

", + "after": "We saw people running around.”

" } ], "https://www.parahumans.net/2020/01/25/infrared-19-d/": [ { "before": "look after mom", "after": "look after Mom" + }, + { + "before": "pink-a line of red-pink", + "after": "pink—a line of red—pink" + }, + { + "before": "recruited for busy work", + "after": "recruited for busywork" + }, + { + "before": "Steamwheel went Rogue", + "after": "Steamwheel went rogue" + }, + { + "before": "mother said. Such a horrible", + "after": "mother said. “Such a horrible" } ], "https://www.parahumans.net/2020/01/28/infrared-19-e/": [ { "before": "so mom doesn’t end up alone", "after": "so Mom doesn’t end up alone" + }, + { + "before": "“No!” she was almost drowned out", + "after": "“No!” She was almost drowned out" } ], "https://www.parahumans.net/2020/02/02/infrared-19-7/": [ { "before": "I really wasn’t. really", "after": "I really wasn’t. Really" + }, + { + "before": "‘I have that and ‘I don’t want it’", + "after": "‘I have that and I don’t want it’" + }, + { + "before": "number boy", + "after": "Number Boy" } ], "https://www.parahumans.net/2020/02/04/infrared-19-8/": [ @@ -8510,6 +8612,10 @@ { "before": "relatively speaking” Number Five", "after": "relatively speaking,” Number Five" + }, + { + "before": "Skitter, Khepri", + "after": "Skitter, Khepri" } ], "https://www.parahumans.net/2020/02/08/infrared-19-9/": [ From bf8a1b325c5bcf482408770b2167537ef4134753 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Dec 2020 15:42:12 -0500 Subject: [PATCH 130/186] Hyphenate self-preservation --- lib/convert-worker.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 774a772..63576f7 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -628,7 +628,6 @@ function fixHyphens(xml) { xml = xml.replace(/ haired/g, "-haired"); // These are consistently missing hyphens. - xml = xml.replace(/self destruct/g, "self-destruct"); xml = xml.replace(/life threatening/g, "life-threatening"); xml = xml.replace(/hard headed/g, "hard-headed"); xml = xml.replace(/shoulder mounted/g, "shoulder-mounted"); @@ -638,7 +637,7 @@ function fixHyphens(xml) { xml = xml.replace(/able bodied/g, "able-bodied"); xml = xml.replace(/level headed/g, "level-headed"); xml = xml.replace(/clear cut/g, "clear-cut"); - xml = xml.replace(/self (conscious|esteem|loathing|harm)/g, "self-$1"); + xml = xml.replace(/self (conscious|esteem|loathing|harm|destruct|preservation)/g, "self-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)one on one(?=\b)/g, "one-on-one"); From 6256b332cbcadeedde50e1c11ed7fcbfdb516c38 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Dec 2020 15:44:35 -0500 Subject: [PATCH 131/186] Apply hyphenation fixes even to capitalized phrases --- lib/convert-worker.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 63576f7..9d851a6 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -628,18 +628,18 @@ function fixHyphens(xml) { xml = xml.replace(/ haired/g, "-haired"); // These are consistently missing hyphens. - xml = xml.replace(/life threatening/g, "life-threatening"); - xml = xml.replace(/hard headed/g, "hard-headed"); - xml = xml.replace(/shoulder mounted/g, "shoulder-mounted"); - xml = xml.replace(/golden skinned/g, "golden-skinned"); - xml = xml.replace(/creepy crawl/g, "creepy-crawl"); - xml = xml.replace(/well armed/g, "well-armed"); - xml = xml.replace(/able bodied/g, "able-bodied"); - xml = xml.replace(/level headed/g, "level-headed"); - xml = xml.replace(/clear cut/g, "clear-cut"); - xml = xml.replace(/self (conscious|esteem|loathing|harm|destruct|preservation)/g, "self-$2"); + xml = xml.replace(/([Ll]ife) threatening/g, "life-threatening"); + xml = xml.replace(/([Hh]ard) headed/g, "$1-headed"); + xml = xml.replace(/([Ss]houlder) mounted/g, "$1-mounted"); + xml = xml.replace(/([Gg]olden) skinned/g, "$1-skinned"); + xml = xml.replace(/([Cc]reepy) crawl/g, "$1-crawl"); + xml = xml.replace(/([Ww]ell) armed/g, "$1-armed"); + xml = xml.replace(/([Aa]ble) bodied/g, "$1-bodied"); + xml = xml.replace(/([Ll]evel) headed/g, "$1-headed"); + xml = xml.replace(/([Cc]lear) cut/g, "$1-cut"); + xml = xml.replace(/([Ss]elf) (conscious|esteem|loathing|harm|destruct|preservation)/g, "$1-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); - xml = xml.replace(/(?<=\b)one on one(?=\b)/g, "one-on-one"); + xml = xml.replace(/(?<=\b)([Oo]ne) on one(?=\b)/g, "$1-on-one"); // Preemptive(ly) is often hyphenated (not always). It should not be. xml = xml.replace(/([Pp])re-emptive/g, "$1reemptive"); From 294cbb2e718c596aecf3d4064cdce2852d196332 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Dec 2020 15:46:36 -0500 Subject: [PATCH 132/186] Hyphenate "vat-grown" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 9d851a6..1b49329 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -637,6 +637,7 @@ function fixHyphens(xml) { xml = xml.replace(/([Aa]ble) bodied/g, "$1-bodied"); xml = xml.replace(/([Ll]evel) headed/g, "$1-headed"); xml = xml.replace(/([Cc]lear) cut/g, "$1-cut"); + xml = xml.replace(/([Vv]at) grown/g, "$1-grown"); xml = xml.replace(/([Ss]elf) (conscious|esteem|loathing|harm|destruct|preservation)/g, "$1-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)([Oo]ne) on one(?=\b)/g, "$1-on-one"); From 44f2cc3c7beef87c4734bd62168d956a33d89c04 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Dec 2020 15:48:00 -0500 Subject: [PATCH 133/186] Hyphenate "shell-shocked" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 1b49329..30add8e 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -638,6 +638,7 @@ function fixHyphens(xml) { xml = xml.replace(/([Ll]evel) headed/g, "$1-headed"); xml = xml.replace(/([Cc]lear) cut/g, "$1-cut"); xml = xml.replace(/([Vv]at) grown/g, "$1-grown"); + xml = xml.replace(/([Ss]hell) shocked/g, "$1-shocked"); xml = xml.replace(/([Ss]elf) (conscious|esteem|loathing|harm|destruct|preservation)/g, "$1-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)([Oo]ne) on one(?=\b)/g, "$1-on-one"); From 651944b4da0c80a6fd0923165fedcd98c28eea4b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Dec 2020 15:56:24 -0500 Subject: [PATCH 134/186] Hyphenate "second-guess" and derivatives, when appropriate --- lib/convert-worker.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 30add8e..11ed960 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -655,6 +655,10 @@ function fixHyphens(xml) { // in the books. xml = xml.replace(/hand to hand(?= [a-z])/g, "hand-to-hand"); + // This is usually wrong but sometimes correct. The lookarounds avoid specific cases where it's referring to an actual + // second in a series of guesses. + xml = xml.replace(/(? Date: Fri, 25 Dec 2020 15:59:20 -0500 Subject: [PATCH 135/186] Hyphenate "built-in" when appropriate --- lib/substitutions.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index 1ffed4a..d8de61a 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -4422,6 +4422,10 @@ { "before": "How do you even think rec—how do you think", "after": "How do you even think rec— How do you think" + }, + { + "before": "built in protections", + "after": "built-in protections" } ], "https://www.parahumans.net/2017/12/01/daybreak-1-8/": [ @@ -4494,6 +4498,10 @@ { "before": "She huffed out out a small", "after": "She huffed out a small" + }, + { + "before": "a built in glare", + "after": "a built-in glare" } ], "https://www.parahumans.net/2017/12/30/flare-2-7/": [ @@ -6662,6 +6670,12 @@ "after": "“It’s winter,”" } ], + "https://www.parahumans.net/2019/04/05/black-13-2/": [ + { + "before": "built in protection", + "after": "built-in protection" + } + ], "https://www.parahumans.net/2019/04/09/black-13-3/": [ { "before": "you have have surmised", @@ -8616,6 +8630,10 @@ { "before": "Skitter, Khepri", "after": "Skitter, Khepri" + }, + { + "before": "built in spears", + "after": "built-in spears" } ], "https://www.parahumans.net/2020/02/08/infrared-19-9/": [ From e1b59994f8d8b0ec392b73dcbea5977cc21ab22e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Dec 2020 16:01:21 -0500 Subject: [PATCH 136/186] Capitalize "Uncle Neil" and "Aunt Fleur" --- lib/convert-worker.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 11ed960..2c11cd1 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -559,8 +559,10 @@ function fixCapitalization(xml, book) { xml = xml.replace(/(? Date: Fri, 25 Dec 2020 16:03:23 -0500 Subject: [PATCH 137/186] Hyphenate "dog-tired" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 2c11cd1..8506a0f 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -641,6 +641,7 @@ function fixHyphens(xml) { xml = xml.replace(/([Cc]lear) cut/g, "$1-cut"); xml = xml.replace(/([Vv]at) grown/g, "$1-grown"); xml = xml.replace(/([Ss]hell) shocked/g, "$1-shocked"); + xml = xml.replace(/([Dd]og) tired/g, "$1-tired"); xml = xml.replace(/([Ss]elf) (conscious|esteem|loathing|harm|destruct|preservation)/g, "$1-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)([Oo]ne) on one(?=\b)/g, "$1-on-one"); From 369714f3d15dac7e5b403cadf085caafc1989a4e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Dec 2020 17:32:28 -0500 Subject: [PATCH 138/186] Spot fixes for Ward through Infrared 19.10 --- lib/substitutions.json | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/lib/substitutions.json b/lib/substitutions.json index d8de61a..92f7ff9 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -3949,6 +3949,10 @@ { "before": "this,” I said. “I", "after": "this,” I said, “I" + }, + { + "before": "Second Triggers", + "after": "Second triggers" } ], "https://parahumans.wordpress.com/2013/10/05/venom-29-8/": [ @@ -8652,6 +8656,22 @@ { "before": "my Uncle said", "after": "my uncle said" + }, + { + "before": "Anywhere else?", + "after": "Anywhere else?" + }, + { + "before": "do you understand about Trigger events", + "after": "do you understand about trigger events" + }, + { + "before": "good day,” my mother said, “The best", + "after": "good day,” my mother said, “the best" + }, + { + "before": "happen to you,” My mother said", + "after": "happen to you,” my mother said" } ], "https://www.parahumans.net/2020/02/11/infrared-19-f/": [ @@ -8662,6 +8682,30 @@ { "before": "while mom did her own thing", "after": "while Mom did her own thing" + }, + { + "before": "still hadn’t been repeated from the fights", + "after": "still hadn’t been repaired from the fights" + }, + { + "before": "“Hey!” the girl turned", + "after": "“Hey!” The girl turned" + }, + { + "before": "Lookout, How long do you need", + "after": "Lookout, how long do you need" + }, + { + "before": "You guy should know", + "after": "You guys should know" + }, + { + "before": "he’d gotten more of dad", + "after": "he’d gotten more of Dad" + }, + { + "before": "Its Capricorn", + "after": "It’s Capricorn" } ], "https://www.parahumans.net/2020/02/15/infrared-19-10/": [ @@ -8676,6 +8720,14 @@ { "before": "figure out while she was gone. we’ll see who", "after": "figure out while she was gone. We’ll see who" + }, + { + "before": "miligram", + "after": "milligram" + }, + { + "before": "same clothes that had been issues to the refugees", + "after": "same clothes that had been issued to the refugees" } ], "https://www.parahumans.net/2020/02/18/infrared-19-g/": [ From d0c23d86fd64ed9a7b80341b74cd6371304c44ee Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Dec 2020 17:37:00 -0500 Subject: [PATCH 139/186] Hyphenate "a just-in-case" --- lib/convert-worker.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 8506a0f..b7e4760 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -662,6 +662,10 @@ function fixHyphens(xml) { // second in a series of guesses. xml = xml.replace(/(? Date: Fri, 25 Dec 2020 17:45:48 -0500 Subject: [PATCH 140/186] De-capitalize judo, aikido, karate, and tae kwon do --- lib/convert-worker.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index b7e4760..0e3bcda 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -496,9 +496,16 @@ function fixCapitalization(xml, book) { // This is sometimes missing its capitalization. xml = xml.replace(/the birdcage/g, "the Birdcage"); - // There's no reason why these should be capitalized. (Note that they never appear at the beginning of any sentences.) - xml = xml.replace(/Halberd/g, "halberd"); - xml = xml.replace(/Loft/g, "loft"); + // There's no reason why these should be capitalized. + xml = xml.replace(/(? Date: Fri, 25 Dec 2020 17:53:31 -0500 Subject: [PATCH 141/186] Hyphenate "face-to-face" when appropriate --- lib/convert-worker.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 0e3bcda..1e6c0df 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -673,6 +673,11 @@ function fixHyphens(xml) { // noun cases are missing one or both hyphens. xml = xml.replace(/([Aa]) just[ -]in case/g, "$1 just-in-case"); + // When used as an adjective, it's hyphenated. It turns out most cases are as an adverb, so we go with this approach: + xml = xml.replace( + /face to face(?= meeting| hang-out| interaction| contact| conversation| confrontation| fight)/g, + "face-to-face"); + // This is usually correct but sometimes wrong. xml = xml.replace(/neo /g, "neo-"); From 26a2b9c9b54c58f7600c452105231a52c6a6870c Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Dec 2020 18:07:06 -0500 Subject: [PATCH 142/186] Hyphenate "fight or flight" when appropriate --- lib/convert-worker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 1e6c0df..b7904bf 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -678,6 +678,9 @@ function fixHyphens(xml) { /face to face(?= meeting| hang-out| interaction| contact| conversation| confrontation| fight)/g, "face-to-face"); + // When used as an adjective, it's hyphenated. This heuristic works in the books. + xml = xml.replace(/fight or flight(?= [a-z])/g, "fight-or-flight"); + // This is usually correct but sometimes wrong. xml = xml.replace(/neo /g, "neo-"); From b652e3812bdb0965cffcf604dfb6e1c7f2e78445 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 15:09:14 -0500 Subject: [PATCH 143/186] De-capitalize "flock" to match prevailing usage --- lib/convert-worker.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index b7904bf..1e3558b 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -471,7 +471,7 @@ function fixCapitalization(xml, book) { // This occurs enough times it's better to do here than in one-off fixes. We correct the single instance where // it's incorrect to capitalize in the one-off fixes. // Note that Ward contains much talk of "the clairvoyants", so we don't want to capitalize plurals. - xml = xml.replace(/([Tt])he clairvoyant([^s])/g, "$1he Clairvoyant$2"); + xml = xml.replace(/([Tt])he clairvoyant(?!s)/g, "$1he Clairvoyant"); // ReSound's name is sometimes miscapitalized. The word is never used in a non-name context. xml = xml.replace(/Resound/g, "ReSound"); @@ -518,6 +518,11 @@ function fixCapitalization(xml, book) { xml = xml.replace(/Radiata/g, "radiata"); xml = xml.replace(/Gemma/g, "gemma"); + // We de-capitalize Valkyrie's "flock", since most uses are de-capitalized (e.g. the many instances in Gleaming + // Interlude 9, or Dying 15.z). This is a bit surprising; it seems like an organization name. But I guess it's + // informal. + xml = xml.replace(/(? Date: Sat, 26 Dec 2020 15:35:31 -0500 Subject: [PATCH 144/186] De-capitalize "giants" but capitalize "X Giant" --- lib/convert-worker.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 1e3558b..390deac 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -497,23 +497,23 @@ function fixCapitalization(xml, book) { xml = xml.replace(/the birdcage/g, "the Birdcage"); // There's no reason why these should be capitalized. - xml = xml.replace(/(?)Halberd/g, "halberd"); + xml = xml.replace(/(?)Loft/g, "loft"); // These are treated as common nouns and not traditionally capitalized. "Krav Maga" remains capitalized, // interestingly (according to dictionaries and Wikipedia). - xml = xml.replace(/(?)Judo/g, "judo"); + xml = xml.replace(/(?)Aikido/g, "aikido"); + xml = xml.replace(/(?)Karate/g, "karate"); + xml = xml.replace(/(?)Tae Kwon Do/g, "tae kwon do"); // There's no reason why university should be capitalized in most contexts, although sometimes it's used as part of // a compound noun or at the beginning of a sentence. - xml = xml.replace(/(?|Cornell |Nilles )University(?! Road)/, "university"); // Organ names (e.g. brain, arm) or scientific names are not capitalized, so the "corona pollentia" and friends should // not be either. The books are inconsistent. - xml = xml.replace(/(?|-)Corona/g, "corona"); xml = xml.replace(/Pollentia/g, "pollentia"); xml = xml.replace(/Radiata/g, "radiata"); xml = xml.replace(/Gemma/g, "gemma"); @@ -521,7 +521,7 @@ function fixCapitalization(xml, book) { // We de-capitalize Valkyrie's "flock", since most uses are de-capitalized (e.g. the many instances in Gleaming // Interlude 9, or Dying 15.z). This is a bit surprising; it seems like an organization name. But I guess it's // informal. - xml = xml.replace(/(?)Flock/g, "flock"); // Especially early in Worm, PRT designations are capitalized; they should not be. This fixes the cases where we // can be reasonably sure they don't start a sentence, although more specific instances are done in @@ -533,7 +533,7 @@ function fixCapitalization(xml, book) { // This also over-de-capitalizes "The Stranger" in Ward (a titan name). Those also get fixed in substitutions.json. xml = xml.replace( // eslint-disable-next-line max-len - /(?|“|\n|: )(Mover|Shaker|Brute|Breaker|Tinker|Blaster|Thinker|Striker|Changer|Trump|Stranger|Shifter|Shaper)(?! [A-Z])/g, + /(?|\n|: )(Mover|Shaker|Brute|Breaker|Tinker|Blaster|Thinker|Striker|Changer|Trump|Stranger|Shifter|Shaper)(?! [A-Z])/g, (_, designation) => designation.toLowerCase() ); xml = xml.replace( @@ -610,6 +610,11 @@ function fixCapitalization(xml, book) { xml = xml.replace(/Kronos titan/g, "Kronos Titan"); } + // For the giants, the prevailing usage seems to be to keep the term lowercase, but capitalize when used as a name. + xml = xml.replace(/(?<=Mathers |Goddess )giant/g, "Giant"); + xml = xml.replace(/mother giant/ig, "Mother Giant"); + xml = xml.replace(/(?)Giants/g, "giants"); + return xml; } From 08e0d0d9a851263873b2e49b0a12a2a443a4f805 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 15:39:39 -0500 Subject: [PATCH 145/186] De-italicize some commas --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 390deac..2dbdb32 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -209,6 +209,7 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/,”<\/p>/g, ".”

"); xml = xml.replace(/

(.*),<\/p>/g, "

$1.

"); xml = xml.replace(/‘(\w+)‘(\w+)’/g, "‘$1’$2’"); + xml = xml.replace(/([a-z]+), ([a-z]+)<\/em>/g, "$1, $2"); // Similar problems occur in Ward with and as do in Worm with s xml = xml.replace(//g, ""); From f5f0ba8e61b51ddf1635bca81e501951ae79c4f9 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 16:20:31 -0500 Subject: [PATCH 146/186] Spot fixes for Ward through Last 20.end --- lib/convert-worker.js | 1 + lib/substitutions.json | 274 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 273 insertions(+), 2 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 2dbdb32..030d689 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -660,6 +660,7 @@ function fixHyphens(xml) { xml = xml.replace(/([Vv]at) grown/g, "$1-grown"); xml = xml.replace(/([Ss]hell) shocked/g, "$1-shocked"); xml = xml.replace(/([Dd]og) tired/g, "$1-tired"); + xml = xml.replace(/([Nn]ightmare) filled/g, "$1-filled"); xml = xml.replace(/([Ss]elf) (conscious|esteem|loathing|harm|destruct|preservation)/g, "$1-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)([Oo]ne) on one(?=\b)/g, "$1-on-one"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 92f7ff9..991f542 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -3667,6 +3667,10 @@ { "before": "Focus Memorize.", "after": "Focus. Memorize." + }, + { + "before": "The Entity slowed", + "after": "The entity slowed" } ], "https://parahumans.wordpress.com/2013/08/13/extinction-27-1/": [ @@ -8734,6 +8738,14 @@ { "before": "Imp and the heartbroken", "after": "Imp and the Heartbroken" + }, + { + "before": "That’s the way it always goes I get close to people", + "after": "That’s the way it always goes—I get close to people" + }, + { + "before": "The voices, a veritable crowd, was audible now", + "after": "The voices, a veritable crowd, were audible now" } ], "https://www.parahumans.net/2020/02/23/infrared-19-z/": [ @@ -8744,18 +8756,141 @@ { "before": "pink and black titan", "after": "pink and black Titan" + }, + { + "before": "throguh", + "after": "through" } ], "https://www.parahumans.net/2020/02/25/last-20-1/": [ { "before": "across this clearing. eyes, cameras", "after": "across this clearing. Eyes, cameras" + }, + { + "before": "monsters, and to use the phrasing he liked", + "after": "monsters, to use the phrasing he liked" + }, + { + "before": "about giving short speeches. I couldn’t help", + "after": "about giving short speeches, I couldn’t help" + }, + { + "before": "this Endbringer that wasn’t brutish and noisy", + "after": "this Endbringer wasn’t brutish and noisy" + }, + { + "before": "like a dance with wings", + "after": "like a dancer with wings" + }, + { + "before": "a gravely sound", + "after": "a gravelly sound" + }, + { + "before": "trying to remain peripherally aware of.", + "after": "trying to remain peripherally aware." + }, + { + "before": "The scream, the fact was", + "after": "The scream, the fact we" + }, + { + "before": "The water receded before tsunami", + "after": "The water receded before a tsunami" + }, + { + "before": "Stay the course!

", + "after": "Stay the course!”

" + } + ], + "https://www.parahumans.net/2020/02/29/last-20-2/": [ + { + "before": "Go!", + "after": "Go!" + } + ], + "https://www.parahumans.net/2020/03/03/last-20-3/": [ + { + "before": "Get-between the words", + "after": "Get——between the words" } ], "https://www.parahumans.net/2020/03/07/last-20-4/": [ { "before": "peace!” Cryptid growled", "after": "peace!” Cryptid growled" + }, + { + "before": "I’m going crazy,” Sveta remarked. “It’s you", + "after": "I’m going crazy,” Sveta remarked, “it’s you" + } + ], + "https://www.parahumans.net/2020/03/10/last-20-5/": [ + { + "before": "“…It’s slipping through our", + "after": "“…it’s slipping through our" + } + ], + "https://www.parahumans.net/2020/03/15/last-20-6/": [ + { + "before": "Strikes, brutes, breakers", + "after": "Strikers, brutes, breakers" + } + ], + "https://www.parahumans.net/2020/03/17/last-20-7/": [ + { + "before": "the pain in the ass heroine", + "after": "the pain-in-the-ass heroine" + }, + { + "before": "manton limit", + "after": "Manton limit" + } + ], + "https://www.parahumans.net/2020/03/21/last-20-8/": [ + { + "before": "For Humanity?", + "after": "For humanity?" + }, + { + "before": "a plan for Endgame", + "after": "a plan for endgame" + }, + { + "before": "Saturday Morning cartoon", + "after": "Saturday-morning cartoon", + "_comment": "https://en.wikipedia.org/wiki/Saturday-morning_cartoon" + }, + { + "before": "Simurgh driven future", + "after": "Simurgh-driven future" + }, + { + "before": "the Entities", + "after": "the entities" + } + ], + "https://www.parahumans.net/2020/03/25/last-20-9/": [ + { + "before": "you could help miss—help Antares", + "after": "you could help Miss—help Antares" + }, + { + "before": "Did I scare him?", + "after": "Did I scare him?" + }, + { + "regExp": "nurse Leah", + "replacement": "Nurse Leah" + }, + { + "before": "“…But I have to draw", + "after": "“…but I have to draw" + }, + { + "before": "break Capricorn’s parents hearts", + "after": "break Capricorn’s parents’ hearts" } ], "https://www.parahumans.net/2020/03/31/last-20-10/": [ @@ -8764,32 +8899,139 @@ "after": "shaping it as it rolled out. It became a circular" } ], + "https://www.parahumans.net/2020/04/04/last-20-b/": [ + { + "before": "Aurora Borealis", + "after": "aurora borealis" + }, + { + "before": "the snow fall and", + "after": "the snowfall and" + }, + { + "before": "the more boy crazy girls", + "after": "the more boy-crazy girls" + }, + { + "before": "hostage with us, too!", + "after": "hostage with us, too!" + }, + { + "before": "done, prez", + "after": "done, Prez" + }, + { + "before": "The—-bye.", + "after": "The——bye." + }, + { + "before": "who would gave gone after", + "after": "who would have gone after" + }, + { + "before": "a problem?” Her dad asked", + "after": "a problem?” her dad asked" + }, + { + "before": "her fathers hand", + "after": "her father’s hand" + } + ], "https://www.parahumans.net/2020/04/07/last-20-11/": [ { - "before": "had harangued the P.R.T., even", - "after": "had harangued the PRT, even" + "before": "had harangued the P.R.T., even though the Patrol had", + "after": "had harangued the PRT, even though the patrol had" }, { "before": "“Actually,” Tattletale said. “I’ve been going", "after": "“Actually,” Tattletale said, “I’ve been going" + }, + { + "before": "It’s not hell either", + "after": "It’s not Hell either" + }, + { + "before": "damocles", + "after": "Damocles" + } + ], + "https://www.parahumans.net/2020/04/11/last-20-e1/": [ + { + "before": "newly formed Protectorate", + "after": "newly-formed Protectorate" + }, + { + "before": "looked out over the city, and feeling shock", + "after": "looked out over the city, and felt shock" + } + ], + "https://www.parahumans.net/2020/04/14/last-20-e2/": [ + { + "before": "a few years where father felt like", + "after": "a few years where Father felt like" + }, + { + "before": "“—And the escaped prisoners", + "after": "“—and the escaped prisoners" + }, + { + "before": "case by case basis", + "after": "case-by-case basis" } ], "https://www.parahumans.net/2020/04/18/last-20-e3/": [ { "before": "madness inducing years of isolation", "after": "madness-inducing years of isolation" + }, + { + "before": "Finale! Now!", + "after": "Finale! Now!" } ], "https://www.parahumans.net/2020/04/21/last-20-e4/": [ { "before": "grown around the the maille sheath", "after": "grown around the maille sheath" + }, + { + "before": "the size of a deserted earth", + "after": "the size of a deserted Earth" } ], "https://www.parahumans.net/2020/04/25/last-20-e5/": [ { "before": "She has has some past therapy", "after": "She has had some past therapy" + }, + { + "before": "

It was a sunny spring", + "after": "

It was a sunny spring" + }, + { + "before": "living like a king.

", + "after": "living like a king.

" + }, + { + "before": "dont’", + "after": "don’t" + }, + { + "before": "its a nightmare I know", + "after": "it’s a nightmare I know" + }, + { + "before": "what to do.”

\n

“Imp was saying Lookout", + "after": "what to do.

\n

“Imp was saying Lookout", + "_comment": "https://english.stackexchange.com/q/2288/242244" + }, + { + "before": "listening, lost in tinkering—

", + "after": "listening, lost in tinkering—”

" + }, + { + "before": "

:Transmit
\nI’ve got", + "after": "

:Transmit
I’ve got" } ], "https://www.parahumans.net/2020/04/28/last-20-e6/": [ @@ -8812,6 +9054,22 @@ { "before": "Back to mom", "after": "Back to Mom" + }, + { + "before": "Gold morning", + "after": "Gold Morning" + }, + { + "before": "pay it safe", + "after": "play it safe" + }, + { + "before": "“—You’ll want to pass on", + "after": "“—you’ll want to pass on" + }, + { + "before": "cross the Ocean", + "after": "cross the ocean" } ], "https://www.parahumans.net/?p=3365&preview=true": [ @@ -8846,6 +9104,18 @@ { "before": "with black slacks. his hair was chin", "after": "with black slacks. His hair was chin" + }, + { + "before": "human right’s abuses", + "after": "human rights abuses" + }, + { + "before": "‘us‘", + "after": "‘us’" + }, + { + "before": "captain Gaile", + "after": "Captain Gaile" } ] } From 0b4af123ab760b0d8c72a4e0c5ddd4391a71477b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 16:23:03 -0500 Subject: [PATCH 147/186] Hyphenate "one-sided" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 030d689..24d6b56 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -661,6 +661,7 @@ function fixHyphens(xml) { xml = xml.replace(/([Ss]hell) shocked/g, "$1-shocked"); xml = xml.replace(/([Dd]og) tired/g, "$1-tired"); xml = xml.replace(/([Nn]ightmare) filled/g, "$1-filled"); + xml = xml.replace(/([Oo]ne) sided/g, "$1-sided"); xml = xml.replace(/([Ss]elf) (conscious|esteem|loathing|harm|destruct|preservation)/g, "$1-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)([Oo]ne) on one(?=\b)/g, "$1-on-one"); From f3366e834690869fc59611fa7b176761b883983e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 16:28:36 -0500 Subject: [PATCH 148/186] Hyphenate "medium-sized" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 24d6b56..3fefb13 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -662,6 +662,7 @@ function fixHyphens(xml) { xml = xml.replace(/([Dd]og) tired/g, "$1-tired"); xml = xml.replace(/([Nn]ightmare) filled/g, "$1-filled"); xml = xml.replace(/([Oo]ne) sided/g, "$1-sided"); + xml = xml.replace(/([Mm]edium) sized/g, "$1-sized"); xml = xml.replace(/([Ss]elf) (conscious|esteem|loathing|harm|destruct|preservation)/g, "$1-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)([Oo]ne) on one(?=\b)/g, "$1-on-one"); From 5a25df658b0322ca12cb590b7396966665b2e66c Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 16:31:44 -0500 Subject: [PATCH 149/186] Hyphenate "teary-eyed" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 3fefb13..a271a5a 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -663,6 +663,7 @@ function fixHyphens(xml) { xml = xml.replace(/([Nn]ightmare) filled/g, "$1-filled"); xml = xml.replace(/([Oo]ne) sided/g, "$1-sided"); xml = xml.replace(/([Mm]edium) sized/g, "$1-sized"); + xml = xml.replace(/([Tt]eary) eyed/g, "$1-eyed"); xml = xml.replace(/([Ss]elf) (conscious|esteem|loathing|harm|destruct|preservation)/g, "$1-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)([Oo]ne) on one(?=\b)/g, "$1-on-one"); From 89789724d176911f7a1b7f74de80c915e3c73a0b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 16:34:26 -0500 Subject: [PATCH 150/186] Hyphenate "worst-case scenario" --- lib/convert-worker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index a271a5a..5b9602d 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -664,6 +664,7 @@ function fixHyphens(xml) { xml = xml.replace(/([Oo]ne) sided/g, "$1-sided"); xml = xml.replace(/([Mm]edium) sized/g, "$1-sized"); xml = xml.replace(/([Tt]eary) eyed/g, "$1-eyed"); + xml = xml.replace(/([Ww]orst) case scenario/g, "$1-case scenario"); xml = xml.replace(/([Ss]elf) (conscious|esteem|loathing|harm|destruct|preservation)/g, "$1-$2"); xml = xml.replace(/([Oo]ne|[Tt]wo|[Tt]hree|[Ff]our|[Ff]ourth) dimensional/g, "$1-dimensional"); xml = xml.replace(/(?<=\b)([Oo]ne) on one(?=\b)/g, "$1-on-one"); From a89414392ef6c6bc53a6b60b062c32092cd46cf7 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 16:38:42 -0500 Subject: [PATCH 151/186] Fix some em dashes in Ward Last 20.e5 --- lib/convert-worker.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 5b9602d..5b1f4a0 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -383,11 +383,12 @@ function fixEmDashes(xml) { xml = xml.replace(/“((?:)?)-/g, "“$1—"); xml = xml.replace(/-[,.]?”/g, "—”"); xml = xml.replace(/-(!|\?)”/g, "—$1”"); - xml = xml.replace(/-[,.]?<\/em>”/g, "—”"); + xml = xml.replace(/-[,.]?<\/([a-z]+)>”/g, "—”"); xml = xml.replace(/-“/g, "—”"); xml = xml.replace(/

-/g, "

—"); xml = xml.replace(/-<\/p>/g, "—

"); - xml = xml.replace(/-<\/em><\/p>/g, "—

"); + xml = xml.replace(/-
/g, "—
"); + xml = xml.replace(/-<\/([a-z]+)><\/p>/g, "—

"); xml = xml.replace(/\s?\s?–\s?\s?/g, "—"); xml = xml.replace(/-\s\s?/g, "—"); xml = xml.replace(/\s?\s-/g, "—"); From cc2db87b5843c1927c425c2b911a899179c88a00 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 16:55:45 -0500 Subject: [PATCH 152/186] 4.9.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 748555a..35c64ed 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.8.0", + "version": "4.9.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7437398..d21c2be 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.8.0", + "version": "4.9.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From 28d4c6927a9873e250ad52d4564d1b7c5e813d6f Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 17:31:16 -0500 Subject: [PATCH 153/186] Add a new cover for Worm --- covers/worm/cover.jpg | Bin 0 -> 383259 bytes covers/worm/cover.png | Bin 339496 -> 0 bytes covers/worm/cover.xhtml | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 covers/worm/cover.jpg delete mode 100644 covers/worm/cover.png diff --git a/covers/worm/cover.jpg b/covers/worm/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4c70423e93055c223742b03c970c906b4da63bb GIT binary patch literal 383259 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%0DXtfu9 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 z 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
  • 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 literal 0 HcmV?d00001 diff --git a/covers/worm/cover.png b/covers/worm/cover.png deleted file mode 100644 index 04595ba20f5b3f7f16f40f0d2e435f3e271f0168..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339496 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 Z{C`S}*+k^GHW~l`002ovPDHLkV1jbc=bZom diff --git a/covers/worm/cover.xhtml b/covers/worm/cover.xhtml index 2178682..8b44d63 100644 --- a/covers/worm/cover.xhtml +++ b/covers/worm/cover.xhtml @@ -17,6 +17,6 @@ - + From 54dc72b18274a5eb5c99991a71f5b67a96268a91 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 17:38:16 -0500 Subject: [PATCH 154/186] Update dependencies --- npm-shrinkwrap.json | 433 ++++++++++++++++---------------------------- package.json | 8 +- 2 files changed, 164 insertions(+), 277 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 35c64ed..387c802 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -5,18 +5,18 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, "@babel/highlight": { @@ -68,9 +68,9 @@ } }, "@eslint/eslintrc": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", - "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -83,33 +83,8 @@ "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } } }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -141,10 +116,9 @@ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -164,11 +138,10 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -178,9 +151,9 @@ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "archiver": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", - "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.1.0.tgz", + "integrity": "sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA==", "requires": { "archiver-utils": "^2.1.0", "async": "^3.2.0", @@ -188,7 +161,7 @@ "readable-stream": "^3.6.0", "readdir-glob": "^1.0.0", "tar-stream": "^2.1.4", - "zip-stream": "^4.0.0" + "zip-stream": "^4.0.4" } }, "archiver-utils": { @@ -247,9 +220,9 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { @@ -268,9 +241,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", - "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "balanced-match": { "version": "1.0.0", @@ -278,9 +251,9 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -315,12 +288,12 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "buffer-crc32": { @@ -376,9 +349,9 @@ } }, "cliui": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.3.tgz", - "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -412,12 +385,12 @@ } }, "compress-commons": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.1.tgz", - "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz", + "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==", "requires": { "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.0", + "crc32-stream": "^4.0.1", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" } @@ -448,20 +421,21 @@ "rimraf": "^2.5.4" } }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", "requires": { - "buffer": "^5.1.0" + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" } }, "crc32-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.0.tgz", - "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz", + "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==", "requires": { - "crc": "^3.4.4", + "crc-32": "^1.2.0", "readable-stream": "^3.4.0" } }, @@ -515,9 +489,9 @@ } }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -627,13 +601,13 @@ } }, "eslint": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", - "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz", + "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.1.3", + "@eslint/eslintrc": "^0.2.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -643,10 +617,10 @@ "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", + "espree": "^7.3.1", "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", @@ -666,7 +640,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -681,12 +655,6 @@ "type-check": "~0.4.0" } }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -752,22 +720,16 @@ "dev": true }, "espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", + "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", @@ -825,6 +787,11 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -851,29 +818,28 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "dependencies": { "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -882,9 +848,9 @@ } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", "dev": true }, "forever-agent": { @@ -990,19 +956,6 @@ "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - } } }, "has-flag": { @@ -1050,9 +1003,9 @@ } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "4.0.6", @@ -1061,9 +1014,9 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -1148,9 +1101,9 @@ "dev": true }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -1263,8 +1216,7 @@ "lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, "lodash.defaults": { "version": "4.2.0", @@ -1296,6 +1248,15 @@ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1460,6 +1421,11 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1554,13 +1520,6 @@ "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", "requires": { "lodash": "^4.17.19" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - } } }, "request-promise-native": { @@ -1644,10 +1603,13 @@ } }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "setprototypeof": { "version": "1.2.0", @@ -1670,46 +1632,14 @@ "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, "source-map": { @@ -1805,55 +1735,15 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", + "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "ajv": "^6.12.4", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" } }, "tar-stream": { @@ -1955,9 +1845,9 @@ } }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "requires": { "punycode": "^2.1.0" } @@ -1973,9 +1863,9 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, "verror": { @@ -2047,9 +1937,9 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "workerpool": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", - "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.3.tgz", + "integrity": "sha512-meU8ZzO+ipcx/njxtKUcbu2K95085q5WYDo8fR6PMW3hCY4driteIsNsEowYV7dzOtvq0HotUKsReJkK8gKXgg==" }, "wrap-ansi": { "version": "7.0.0", @@ -2066,19 +1956,10 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==" + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", + "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" }, "xml-name-validator": { "version": "3.0.0", @@ -2096,36 +1977,42 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.4.tgz", - "integrity": "sha512-deLOfD+RvFgrpAmSZgfGdWYE+OKyHcVHaRQ7NphG/63scpRvTHHeQMAxGGvaLVGJ+HYVcCXlzcTK0ZehFf+eHQ==" + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yargs": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", - "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", - "y18n": "^5.0.2", + "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "20.2.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz", - "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==" + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" }, "zip-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.2.tgz", - "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz", + "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==", "requires": { "archiver-utils": "^2.1.0", - "compress-commons": "^4.0.0", + "compress-commons": "^4.0.2", "readable-stream": "^3.6.0" } } diff --git a/package.json b/package.json index d21c2be..a87f9a9 100644 --- a/package.json +++ b/package.json @@ -23,16 +23,16 @@ "lint": "eslint lib" }, "dependencies": { - "archiver": "^5.0.2", + "archiver": "^5.1.0", "cli-progress": "^3.8.2", "cpr": "^3.0.1", "jsdom": "^16.4.0", "requisition": "^1.5.0", - "workerpool": "^6.0.2", - "yargs": "^16.1.0" + "workerpool": "^6.0.3", + "yargs": "^16.2.0" }, "devDependencies": { - "eslint": "^7.11.0" + "eslint": "^7.16.0" }, "engines": { "node": ">=12.10.0" From 0be098ff16a76f4d0b8e54b8ea371f1ba67e8436 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 17:43:42 -0500 Subject: [PATCH 155/186] Allow running with no commands --- README.md | 4 ++-- lib/worm-scraper.js | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 19f8e7a..ce27d97 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ worm-scraper --help If this outputs some help documentation, then the installation process went smoothly. You can move on to assemble the eBook by typing ```bash -worm-scraper download convert scaffold zip +worm-scraper ``` This will take a while, but will eventually produce a `Worm.epub` file! @@ -29,7 +29,7 @@ This will take a while, but will eventually produce a `Worm.epub` file! If you'd like to get _Ward_ instead of _Worm_, use `--book=ward`, e.g. ```bash -worm-scraper download convert scaffold zip --book=ward +worm-scraper --book=ward ``` ## EPUB vs. other formats diff --git a/lib/worm-scraper.js b/lib/worm-scraper.js index 52f3fd0..01b033d 100644 --- a/lib/worm-scraper.js +++ b/lib/worm-scraper.js @@ -16,7 +16,8 @@ const OUTPUT_DEFAULT = "(Book name).epub"; const argv = yargs .usage(`${packageJson.description}\n\n${packageJson.name} [ [ [ ...]]]\n\n` + - "Each command will fail if the previously-listed one has not yet been run (with matching options).") + "Each command will fail if the previously-listed one has not yet been run (with matching options).\n\n" + + "Running with no commands is equivalent to running download convert scaffold zip.") .command("download", "download all chapters into the cache") .command("convert", "convert the raw HTML into cleaned-up ebook chapters") .command("scaffold", "assemble the table of contents, etc.") @@ -58,7 +59,6 @@ const argv = yargs requiresArg: true, global: true }) - .demandCommand(1) // TODO remove and allow all .recommendCommands() .help() .version() @@ -77,6 +77,10 @@ const chaptersPath = path.resolve(contentPath, "chapters"); const commands = []; +if (argv._.length === 0) { + argv._ = ["download", "convert", "scaffold", "zip"]; +} + if (argv._.includes("download")) { const startURL = books[argv.book].startURL; commands.push(() => download(startURL, cachePath, manifestPath)); From d5f3b58f0b2f4de2850c83b1d9a87f19e1088f07 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 17:54:19 -0500 Subject: [PATCH 156/186] Slightly improve program output Most notably reduce the number of output lines per chapter in the download step. --- lib/download.js | 7 ++----- lib/scaffold.js | 2 ++ lib/worm-scraper.js | 2 -- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/download.js b/lib/download.js index b7541ab..edc7591 100644 --- a/lib/download.js +++ b/lib/download.js @@ -39,13 +39,11 @@ async function downloadAllChapters(manifest, startChapterURL, cachePath, manifes while (currentChapter !== null) { const filename = `${FILENAME_PREFIX}${chapterIndex.toString().padStart(3, "0")}.html`; - console.log(`Downloading ${currentChapter}`); + process.stdout.write(`Downloading ${currentChapter}... `); const response = await downloadChapter(currentChapter); const contents = await response.text(); - console.log("- Response body received"); const rawChapterJSDOM = new JSDOM(contents, { url: currentChapter }); - console.log("- Response body parsed into DOM"); const chapterURLToSave = currentChapter; const chapterTitle = getChapterTitle(rawChapterJSDOM.window.document); @@ -61,12 +59,11 @@ async function downloadAllChapters(manifest, startChapterURL, cachePath, manifes }); await fs.writeFile(path.resolve(cachePath, filename), contents); - console.log("- Response text saved to cache file"); // Incrementally update the manifest after every successful download, instead of waiting until the end. const newManifestContents = JSON.stringify(manifest, undefined, 2); await fs.writeFile(manifestPath, newManifestContents); - console.log("- Manifest updated"); + process.stdout.write("done\n"); ++chapterIndex; } diff --git a/lib/scaffold.js b/lib/scaffold.js index df44e83..ef834b9 100644 --- a/lib/scaffold.js +++ b/lib/scaffold.js @@ -22,6 +22,8 @@ module.exports = async (scaffoldingPath, coverPath, bookPath, contentPath, chapt ]); }) ]); + + console.log(`EPUB contents assembled into ${scaffoldingPath}`); }; function noThumbs(filePath) { diff --git a/lib/worm-scraper.js b/lib/worm-scraper.js index 01b033d..4a63eef 100644 --- a/lib/worm-scraper.js +++ b/lib/worm-scraper.js @@ -110,8 +110,6 @@ if (argv._.includes("zip")) { for (const command of commands) { await command(); } - - console.log("All done!"); } catch (e) { console.error(e.stack); process.exit(1); From 18874a335c392ba35679e77b2173d5c011835909 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 17:58:09 -0500 Subject: [PATCH 157/186] Add cover credits --- covers/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 covers/README.md diff --git a/covers/README.md b/covers/README.md new file mode 100644 index 0000000..bced1af --- /dev/null +++ b/covers/README.md @@ -0,0 +1,11 @@ +# Cover credits + +The _Worm_ cover is assembled from: + +- [Ari Ibarra's fanart](https://www.instagram.com/p/B1wSi1Ynaze/) on Instagram +- The "Wildbow's Past Works" image for _Worm_ on [parahumans.net](https://www.parahumans.net/) + +The _Ward_ cover is assembled from: + +- [zearoe's fanart](https://www.reddit.com/r/Parahumans/comments/b8n7o0/fanartrepost_antares/) on Reddit +- The header image on [parahumans.net](https://www.parahumans.net/) From e1f93205243f38ef06741c6d4a2c9ee14079795a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 17:58:59 -0500 Subject: [PATCH 158/186] Capitalize "Wildbow" in book metadata Per Q2 on https://www.parahumans.net/f-a-q/ it seems to be capitalized like a name, not just at the beginning of sentences. --- lib/scaffold.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/scaffold.js b/lib/scaffold.js index ef834b9..538499d 100644 --- a/lib/scaffold.js +++ b/lib/scaffold.js @@ -4,7 +4,7 @@ const path = require("path"); const cpr = require("util").promisify(require("cpr")); const BOOK_PUBLISHER = "Domenic Denicola"; -const BOOK_AUTHOR = "wildbow"; +const BOOK_AUTHOR = "Wildbow"; const NCX_FILENAME = "toc.ncx"; From 07f3011423ea428bf5c2a644fbed0c3e1b9b6788 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 26 Dec 2020 18:03:22 -0500 Subject: [PATCH 159/186] 4.10.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 387c802..37549cd 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.9.0", + "version": "4.10.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index a87f9a9..eb17054 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.9.0", + "version": "4.10.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From 4a2d33f968eddecd690eb952ae22c8ad53b52433 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 31 Dec 2020 13:40:19 -0500 Subject: [PATCH 160/186] Fix bad XHTML in Worm Interlude 8 (Bonus) Part of #22. --- lib/substitutions.json | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/substitutions.json b/lib/substitutions.json index 991f542..677bcee 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -926,16 +926,14 @@ "after": "crash when the wave rolled" }, { - "regExp": "\n ?\\s*([^<]+)(
    |

    )", - "replacement": "\n

    $1

    " + "regExp": "

    \n\\s*", + "replacement": "

    \n

    ", + "_comment": "These are clearly paragraphs. Also the leading space is strange." }, { - "regExp": "\n

    ([^<]+)(
    |

    )", - "replacement": "\n

    $1

    " - }, - { - "regExp": "\n

    ([^<\n]+)
    \n([^>\n]+)

    \n", - "replacement": "\n

    $1

    \n

    $2

    \n" + "before": "Word choice, ‘too’: haunted by demons.
    \nSwearing: antisocial.
    ", + "after": "Word choice, ‘too’: haunted by demons.

    \n

    Swearing: antisocial.", + "_comment": "This one has the surrounding the
    , unlike the others." } ], "https://parahumans.wordpress.com/2012/03/10/extermination-8-3/": [ From d4663ed2e34794d55eb4109badc9dc1f43930b3d Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 31 Dec 2020 13:53:11 -0500 Subject: [PATCH 161/186] Replace WordPress s with emoji Noticed via the validation discussed in #22, which was failing on the draggable attribute. --- lib/convert-worker.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 5b1f4a0..2432474 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -243,6 +243,12 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/ ? <\/p>/g, "

    "); xml = xml.replace(/([a-z]) ,/g, "$1,"); + // Use actual emojis instead of images + xml = xml.replace( + // eslint-disable-next-line max-len + /O_o/g, + "🤨"); + xml = fixTruncatedWords(xml); xml = fixDialogueTags(xml); xml = fixForeignNames(xml); From 3865ae0f5bf7ff033b6aaab4c7d60b686c1e671e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 31 Dec 2020 14:00:47 -0500 Subject: [PATCH 162/186] Fix bad XHTML in Worm Cockroaches 28.2 Part of #22. --- lib/substitutions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/substitutions.json b/lib/substitutions.json index 677bcee..4c4c2fe 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -3761,8 +3761,8 @@ ], "https://parahumans.wordpress.com/2013/09/03/cockroaches-28-2/": [ { - "before": "Next", - "after": "Next" + "before": "Next 12 of 32 additional windows.", + "after": "Next 12 of 32 additional windows." }, { "before": "—But no", From c6f7460b82a4b0bc0ec6774d0b80d7831b130621 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 31 Dec 2020 14:13:37 -0500 Subject: [PATCH 163/186] Tweaks to cover-related EPUB stuff Helps with the validation errors noted in #22. --- covers/ward/cover.xhtml | 6 ++++-- covers/worm/cover.xhtml | 6 ++++-- lib/scaffold.js | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/covers/ward/cover.xhtml b/covers/ward/cover.xhtml index 8b44d63..b1affee 100644 --- a/covers/ward/cover.xhtml +++ b/covers/ward/cover.xhtml @@ -3,7 +3,7 @@ Cover - - +
    + +
    diff --git a/covers/worm/cover.xhtml b/covers/worm/cover.xhtml index 8b44d63..b1affee 100644 --- a/covers/worm/cover.xhtml +++ b/covers/worm/cover.xhtml @@ -3,7 +3,7 @@ Cover - - +
    + +
    diff --git a/lib/scaffold.js b/lib/scaffold.js index 538499d..dda16b0 100644 --- a/lib/scaffold.js +++ b/lib/scaffold.js @@ -56,7 +56,7 @@ function writeOPF(chapters, contentPath, coverFiles, bookInfo) { - + ${manifestChapters} From db1b3d9e97a35277758782d8c75ea0ca2d6c8d5a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 31 Dec 2020 14:17:41 -0500 Subject: [PATCH 164/186] Do not compress the mimetype file This is the last error (for Worm) noted via epubcheck, per #22. --- lib/zip.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/zip.js b/lib/zip.js index 3e7d20c..333eeec 100644 --- a/lib/zip.js +++ b/lib/zip.js @@ -21,7 +21,7 @@ module.exports = (bookPath, contentPath, outPath) => { archive.pipe(destStream); // Order matters; mimetype must be first for a valid EPUB - archive.file(path.resolve(bookPath, "mimetype"), { name: "mimetype" }); + archive.file(path.resolve(bookPath, "mimetype"), { name: "mimetype", store: true }); archive.directory(contentPath, "OEBPS", { name: "OEBPS" }); archive.directory(path.resolve(bookPath, "META-INF"), "META-INF", { name: "META-INF" }); From 848b090b0d82fc02d830c4643a18e4d9521ae14a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 31 Dec 2020 14:21:31 -0500 Subject: [PATCH 165/186] Fix bad XHTML in Ward Sundown 17.6 Closes #22. --- lib/substitutions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/substitutions.json b/lib/substitutions.json index 4c4c2fe..932f3f3 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -7785,7 +7785,7 @@ }, { "before": "you proved my sister right? Tired,", - "after": "you proved my sister right? Tired," + "after": "you proved my sister right? Tired," }, { "before": "boundary,” He whispered", From 66f7856a0f1a17453f5c9fc5a695003cb54434d3 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 31 Dec 2020 14:22:50 -0500 Subject: [PATCH 166/186] 4.11.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 37549cd..78808da 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.10.0", + "version": "4.11.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index eb17054..ad1bcc0 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.10.0", + "version": "4.11.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From ab226686ae040af0ae9d8f0011c3b914cc937622 Mon Sep 17 00:00:00 2001 From: Elaina Martineau Date: Fri, 1 Jan 2021 00:19:31 -0700 Subject: [PATCH 167/186] Spot fixes for all of Worm --- lib/substitutions.json | 101 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 99 insertions(+), 2 deletions(-) diff --git a/lib/substitutions.json b/lib/substitutions.json index 932f3f3..d4093a0 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -861,6 +861,10 @@ } ], "https://parahumans.wordpress.com/2012/03/08/interlude-7%C2%BD-bonus/": [ + { + "before": "Get Ready!", + "after": "Get ready!" + }, { "before": "‘boyfriend’; Not", "after": "‘boyfriend’; not" @@ -1817,12 +1821,12 @@ { "before": "see the Doctor", "after": "see the doctor", - "comment": "Unlike the Cauldron Doctor, this is not used as a proper noun" + "_comment": "Unlike the Cauldron Doctor, this is not used as a proper noun" }, { "before": "the Doctor spoke", "after": "the doctor spoke", - "comment": "Unlike the Cauldron Doctor, this is not used as a proper noun" + "_comment": "Unlike the Cauldron Doctor, this is not used as a proper noun" }, { "before": "asinine confession again, “It’s", @@ -2130,6 +2134,10 @@ } ], "https://parahumans.wordpress.com/2012/07/26/interlude-12%C2%BD/": [ + { + "before": "implode, it has created a powerful vacuum in someone’s mouth, that", + "after": "implode, and it has created a powerful vacuum in someone’s mouth that" + }, { "before": "doesn’t,” Madcap said. “But", "after": "doesn’t,” Madcap said, “but" @@ -2419,6 +2427,10 @@ { "before": "Once dad and the sibs realized", "after": "Once Dad and the sibs realized" + }, + { + "before": "scott free", + "after": "scot-free" } ], "https://parahumans.wordpress.com/2012/11/24/monarch-16-1/": [ @@ -2426,6 +2438,10 @@ "before": "; Nobody", "after": "; nobody" }, + { + "before": "version on", + "after": "version of" + }, { "before": "is,” Tattletale said. “They’ve", "after": "is,” Tattletale said, “they’ve" @@ -2753,6 +2769,11 @@ { "before": "stranger class", "after": "stranger-class" + }, + { + "before": "real ly", + "after": "really", + "comment": "There's an empty em element in the middle of this word that gets converted to a space" } ], "https://parahumans.wordpress.com/2013/02/05/monarch-18-6/": [ @@ -3174,6 +3195,19 @@ { "before": "to,” I said. “Is", "after": "to,” I said, “is" + }, + { + "before": "are sorry your", + "after": "are sorry your", + "_comment": "All the other 'sorry's are emphasized in this paragraph" + }, + { + "before": "sorry that", + "after": "sorry that" + }, + { + "before": "scott-free", + "after": "scot-free" } ], "https://parahumans.wordpress.com/2013/04/25/imago-21-7/": [ @@ -3184,6 +3218,10 @@ { "before": "Ironic,” she mumbled. “Coming", "after": "Ironic,” she mumbled, “coming" + }, + { + "before": "to looked around", + "after": "to look around" } ], "https://parahumans.wordpress.com/2013/04/27/interlude-21-donation-bonus-1/": [ @@ -3309,6 +3347,10 @@ { "before": "their ears

    ", "after": "their ears.

    " + }, + { + "before": "it’s import", + "after": "its import" } ], "https://parahumans.wordpress.com/2013/05/25/drone-23-1/": [ @@ -3368,6 +3410,10 @@ { "before": "it,” Imp said. “She’s", "after": "it,” Imp said, “she’s" + }, + { + "before": "electorcuted", + "after": "electrocuted" } ], "https://parahumans.wordpress.com/2013/06/06/interlude-23/": [ @@ -3390,6 +3436,12 @@ "after": "And,” I said, “we" } ], + "https://parahumans.wordpress.com/2013/06/11/crushed-24-2/": [ + { + "before": "They destroying", + "after": "They were destroying" + } + ], "https://parahumans.wordpress.com/2013/06/15/crushed-24-3/": [ { "before": "Phir Sē echoed me. “", @@ -3467,6 +3519,10 @@ { "before": "said. Except without", "after": "said. “Except without" + }, + { + "before": "line, t had", + "after": "line, it had" } ], "https://parahumans.wordpress.com/2013/07/06/scarab-25-3/": [ @@ -3615,6 +3671,27 @@ { "before": "—break up the fog!", "after": "—break up the fog!" + }, + { + "before": "The Nyx were women", + "after": "The Nyxes were women" + }, + { + "before": "Psychosomas were men,", + "after": "Psychosomas were men:", + "_comment": "This is a strange sentence, but these changes make it flow better" + }, + { + "before": "Night hags", + "after": "Night Hags" + }, + { + "before": "Mannequin changed tacks", + "after": "Mannequin changed tack" + }, + { + "before": "Rachel had changed tacks", + "after": "Rachel had changed tack" } ], "https://parahumans.wordpress.com/2013/08/06/interlude-26a/": [ @@ -4031,6 +4108,10 @@ { "before": "coordinating two teams
    .", "after": "coordinating two teams.
    " + }, + { + "before": "undecision", + "after": "indecision" } ], "https://parahumans.wordpress.com/2013/10/22/speck-30-4/": [ @@ -4143,6 +4224,10 @@ { "before": "I revoked my control over her, leaving in in the middle", "after": "I revoked my control over her, leaving her in the middle" + }, + { + "before": "suffered for", + "after": "suffered from" } ], "https://parahumans.wordpress.com/2013/10/26/speck-30-6/": [ @@ -4289,6 +4374,14 @@ { "before": "minutes passed. the chance rose", "after": "minutes passed. The chance rose" + }, + { + "before": "Collin", + "after": "Colin" + }, + { + "before": "systems teacher had", + "after": "systems Teacher had" } ], "https://parahumans.wordpress.com/2013/11/12/teneral-e-4/": [ @@ -4329,6 +4422,10 @@ { "before": "boyfriends are my ex-boyfriends", "after": "boyfriends are my ex-boyfriends" + }, + { + "before": "that ‘because I can’t isn’t an", + "after": "that ‘because I can’t’ isn’t an" } ], "https://parahumans.wordpress.com/2013/11/19/interlude-end/": [ From 0efaf3817066290a6107c0f32982ce044a4578bc Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 1 Jan 2021 15:26:01 -0500 Subject: [PATCH 168/186] Fix more "scot-free" misspellings --- lib/convert-worker.js | 3 +++ lib/substitutions.json | 8 -------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 2432474..df92ea6 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -633,6 +633,9 @@ function fixMispellings(xml) { // All dictionaries agree this is capitalized. xml = xml.replace(/u-turn/g, "U-turn"); + // https://www.dictionary.com/browse/scot-free + xml = xml.replace(/scott(?: |-)free/g, "scot-free"); + return xml; } diff --git a/lib/substitutions.json b/lib/substitutions.json index d4093a0..9ab6333 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2427,10 +2427,6 @@ { "before": "Once dad and the sibs realized", "after": "Once Dad and the sibs realized" - }, - { - "before": "scott free", - "after": "scot-free" } ], "https://parahumans.wordpress.com/2012/11/24/monarch-16-1/": [ @@ -3204,10 +3200,6 @@ { "before": "sorry that", "after": "sorry that" - }, - { - "before": "scott-free", - "after": "scot-free" } ], "https://parahumans.wordpress.com/2013/04/25/imago-21-7/": [ From a405adf6b7616238074e947ca1e707a518bf673b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 1 Jan 2021 15:28:39 -0500 Subject: [PATCH 169/186] Fix more "changed tack" misspellings --- lib/convert-worker.js | 3 +++ lib/substitutions.json | 8 -------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index df92ea6..f46312a 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -636,6 +636,9 @@ function fixMispellings(xml) { // https://www.dictionary.com/browse/scot-free xml = xml.replace(/scott(?: |-)free/g, "scot-free"); + // https://grammarist.com/idiom/change-tack/ + xml = xml.replace(/changed tacks/g, "changed tack"); + return xml; } diff --git a/lib/substitutions.json b/lib/substitutions.json index 9ab6333..38aa1c0 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -3676,14 +3676,6 @@ { "before": "Night hags", "after": "Night Hags" - }, - { - "before": "Mannequin changed tacks", - "after": "Mannequin changed tack" - }, - { - "before": "Rachel had changed tacks", - "after": "Rachel had changed tack" } ], "https://parahumans.wordpress.com/2013/08/06/interlude-26a/": [ From ba387d3555c7a9ec3ace14bacf7e4667462b1268 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 1 Jan 2021 16:24:33 -0500 Subject: [PATCH 170/186] Improve deletion of empty-ish elements The previous heuristic of replacing them with a space character caused spaces to be inserted in the middle of words. Also, various cases were missed. This should help. --- lib/convert-worker.js | 26 +++++++++++++++++++------- lib/substitutions.json | 41 +++++++++-------------------------------- 2 files changed, 28 insertions(+), 39 deletions(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index f46312a..19a0cd4 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -77,13 +77,21 @@ function getBodyXML(chapter, book, contentEl) { } } - // Remove empty s and s - // Remove style attributes from them, as they're always messed up. - for (const em of contentEl.querySelectorAll("em, i")) { - if (em.textContent.trim() === "") { - em.replaceWith(contentEl.ownerDocument.createTextNode(" ")); + // Remove empty inline elements. + // Remove style attributes from inline elements, as they're always messed up. + for (const el of contentEl.querySelectorAll("em, i, strong, b")) { + const { textContent } = el; + + if (textContent === "") { + el.remove(); + } else if (textContent.trim() === "") { + if (el.childElementCount === 0) { + el.replaceWith(" "); + } else if (el.childElementCount === 1 && el.children[0].localName === "br") { + el.outerHTML = "
    \n"; + } } else { - em.removeAttribute("style"); + el.removeAttribute("style"); } } @@ -221,9 +229,13 @@ function getBodyXML(chapter, book, contentEl) { xml = xml.replace(/(\s*)<\/strong>/g, "$1"); xml = xml.replace(/>(.*)<\/strong>:$1:<"); - // No need for line breaks before paragraph ends + // No need for line breaks before paragraph ends or after paragraph starts // These often occur with the
    s inside /// fixed above. xml = xml.replace(/
    \s*<\/p>/g, "

    "); + xml = xml.replace(/


    \s*/g, "

    "); + + // This is another quote fix but it needs to happen after the line break deletion... so entangled, ugh. + xml = xml.replace(/<\/em>\s*“\s*<\/p>/g, "

    "); // Fix missing spaces after commas xml = xml.replace(/([a-zA-Z]+),([a-zA-Z]+)/g, "$1, $2"); diff --git a/lib/substitutions.json b/lib/substitutions.json index 38aa1c0..30f027e 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -1713,12 +1713,6 @@ "after": "Dinah being kidnapped, and leaving" } ], - "https://parahumans.wordpress.com/2012/05/22/infestation-11-2/": [ - { - "before": "attentio n", - "after": "attention" - } - ], "https://parahumans.wordpress.com/2012/05/26/infestation-11-3/": [ { "before": "intimidating: A sea", @@ -1943,7 +1937,7 @@ "after": "

    Crazed, kooky, cracked, crazy,
    \nMental, dotty, whacked, loopy…

    " }, { - "before": "

    Crazed, kooky, cracked, crazy,
    \nNutty, screwy, mentally diseased…
    \n
    She ", + "before": "

    Crazed, kooky, cracked, crazy,
    \nNutty, screwy, mentally diseased…
    \n
    \n
    She ", "after": "

    Crazed, kooky, cracked, crazy,
    \nNutty, screwy, mentally diseased…

    \n

    She " }, { @@ -2765,11 +2759,6 @@ { "before": "stranger class", "after": "stranger-class" - }, - { - "before": "real ly", - "after": "really", - "comment": "There's an empty em element in the middle of this word that gets converted to a space" } ], "https://parahumans.wordpress.com/2013/02/05/monarch-18-6/": [ @@ -3284,10 +3273,6 @@ { "before": "in,” I said. “Could", "after": "in,” I said, “could" - }, - { - "before": " “ We’re", - "after": "“We’re" } ], "https://parahumans.wordpress.com/2013/05/16/cell-22-6/": [ @@ -3317,10 +3302,6 @@ "before": "it,” he said. “She", "after": "it,” he said, “she" }, - { - "before": "“ I don’t", - "after": "“I don’t" - }, { "before": "confirmed okay", "after": "confirmed ok", @@ -3579,6 +3560,10 @@ { "before": "avoided-", "after": "avoided" + }, + { + "before": "Lord Walston", + "after": "Lord Walston" } ], "https://parahumans.wordpress.com/2013/07/18/sting-26-1/": [ @@ -3649,8 +3634,8 @@ ], "https://parahumans.wordpress.com/2013/07/30/sting-26-5/": [ { - "before": " Wait…", - "after": " Wait…" + "before": " Wait…“

    ", + "after": " Wait…”

    " }, { "before": "This,” Imp said. “Is", @@ -3758,10 +3743,6 @@ { "before": "shift position

    ", "after": "shift position.

    " - }, - { - "before": "“ Convenient.", - "after": "“Convenient." } ], "https://parahumans.wordpress.com/2013/08/20/extinction-27-3/": [ @@ -3770,8 +3751,8 @@ "after": "guess,” Sophia said, “you" }, { - "before": "said “ But", - "after": "said. “But" + "before": "“Maybe,” I said “But", + "after": "“Maybe,” I said. “But" } ], "https://parahumans.wordpress.com/2013/08/24/extinction-27-5/": [ @@ -3954,10 +3935,6 @@ { "before": "Once the bead was in place, every bullet hit.", "after": "Once the bead was in place, every bullet hit." - }, - { - "before": "I ‘m", - "after": "I’m" } ], "https://parahumans.wordpress.com/2013/09/24/venom-29-3/": [ From b94c33ea6fc0fc5e748cf0f511416daac7138ebf Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 1 Jan 2021 16:27:03 -0500 Subject: [PATCH 171/186] 4.12.0 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 78808da..b65ca19 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.11.0", + "version": "4.12.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ad1bcc0..877f787 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.11.0", + "version": "4.12.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From 48400e6f96d92a4fcb225d5b5e85c4255233385a Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 1 Jan 2021 17:48:41 -0500 Subject: [PATCH 172/186] Run EPUBCheck on CI This should help detect any issues such as those seen in #22. --- .github/workflows/test.yml | 50 ++++++++++++++++++++++++++++++++++++++ .travis.yml | 6 ----- 2 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/test.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..4948cc4 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,50 @@ +name: Test +on: + pull_request: + branches: + - master + push: + branches: + - master +jobs: + test: + name: Test + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v1 + with: + node-version: 14 + + - run: npm install + + - run: npm run lint + + # CI would take too long if we did the download every time too. So, we cache it. This does mean we're vulnerable to + # source changes exposing problems in our code, but those are pretty infrequent. If they occur, we need to bump the + # cache key. + - uses: actions/cache@v2 + with: + key: worm-ward-cache-2020-12-31 + path: ./cache + + - run: node ./lib/worm-scraper.js --book=worm + + - run: node ./lib/worm-scraper.js --book=ward + + - uses: actions/setup-java@v1 + with: + java-version: 15 + java-package: jre + + - name: Get EPUBCheck + run: | + curl https://github.com/w3c/epubcheck/releases/download/v4.2.4/epubcheck-4.2.4.zip --location --output epubcheck.zip + unzip epubcheck.zip + + - name: Check Worm.epub + run: java -jar epubcheck-4.2.4/epubcheck.jar --failonwarnings Worm.epub + + - name: Check Ward.epub + run: java -jar epubcheck-4.2.4/epubcheck.jar --failonwarnings Ward.epub diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index de4a137..0000000 --- a/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - 10 - - stable -script: - npm run lint From bfdb9eaddebd06ca0c767480411388b9cfdd98e5 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 17 Jan 2021 16:02:59 -0500 Subject: [PATCH 173/186] Follow redirects during downloads Fixes #25. --- .eslintrc.json | 2 +- lib/download.js | 46 +++++++++++++++++++++++++++--------------- lib/substitutions.json | 4 ++-- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 886d1ff..373b63a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -204,7 +204,7 @@ "object-curly-newline": ["error", { "multiline": true }], "object-curly-spacing": ["error", "always"], "object-property-newline": "off", - "one-var": ["error", "never"], + "one-var": ["error", { "initialized": "never" }], "one-var-declaration-per-line": ["error", "initializations"], "operator-assignment": ["error", "always"], "operator-linebreak": ["error", "after"], diff --git a/lib/download.js b/lib/download.js index edc7591..8317c23 100644 --- a/lib/download.js +++ b/lib/download.js @@ -41,23 +41,13 @@ async function downloadAllChapters(manifest, startChapterURL, cachePath, manifes process.stdout.write(`Downloading ${currentChapter}... `); - const response = await downloadChapter(currentChapter); - const contents = await response.text(); - const rawChapterJSDOM = new JSDOM(contents, { url: currentChapter }); + const { contents, dom, url } = await downloadChapter(currentChapter); + const title = getChapterTitle(dom.window.document); + currentChapter = getNextChapterURL(dom.window.document); - const chapterURLToSave = currentChapter; - const chapterTitle = getChapterTitle(rawChapterJSDOM.window.document); - currentChapter = getNextChapterURL(rawChapterJSDOM.window.document); - - // TODO: this should probably not be necessary... jsdom bug I guess!? - rawChapterJSDOM.window.close(); - - manifest.push({ - url: chapterURLToSave, - title: chapterTitle, - filename - }); + dom.window.close(); + manifest.push({ url, title, filename }); await fs.writeFile(path.resolve(cachePath, filename), contents); // Incrementally update the manifest after every successful download, instead of waiting until the end. @@ -103,7 +93,31 @@ function retry(times, fn) { }); } -function downloadChapter(url) { +async function downloadChapter(startingURL) { + let urlToFollow = startingURL; + + let url, contents, dom; + while (urlToFollow !== null) { + const response = await downloadWithRetry(urlToFollow); + + url = urlToFollow; + contents = await response.text(); + dom = new JSDOM(contents, { url }); + + const refreshMeta = dom.window.document.querySelector("meta[http-equiv=refresh]"); + if (refreshMeta) { + [, urlToFollow] = /\d+;url=(.*)/i.exec(refreshMeta.content); + process.stdout.write(`\n Redirected to ${urlToFollow}... `); + dom.window.close(); + } else { + urlToFollow = null; + } + } + + return { url, contents, dom }; +} + +function downloadWithRetry(url) { return retry(3, async () => { const response = await request(url).redirects(10); if (response.status !== 200) { diff --git a/lib/substitutions.json b/lib/substitutions.json index 30f027e..6cc8d57 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -7544,7 +7544,7 @@ "after": "—don’t shoot it!" } ], - "https://www.parahumans.net/2019/09/15/from-within-16-10/": [ + "https://www.parahumans.net/2019/09/14/from-within-16-10/": [ { "before": "carried on. out of", "after": "carried on, out of" @@ -8927,7 +8927,7 @@ "after": "the entities" } ], - "https://www.parahumans.net/2020/03/25/last-20-9/": [ + "https://www.parahumans.net/2020/03/24/last-20-9/": [ { "before": "you could help miss—help Antares", "after": "you could help Miss—help Antares" From 96e3e837e6e5eec1e23406ce32d7506329d081dd Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 17 Jan 2021 16:08:47 -0500 Subject: [PATCH 174/186] Fix broken Ward last chapter downloading It's not clear when this started happening, but the "Next Chapter" link in Last 20.e6 no longer works. --- lib/download.js | 11 +++++++++-- lib/substitutions.json | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/download.js b/lib/download.js index 8317c23..268cadf 100644 --- a/lib/download.js +++ b/lib/download.js @@ -65,14 +65,21 @@ function getNextChapterURL(rawChapterDoc) { // - https://parahumans.wordpress.com/2012/04/21/sentinel-9-6/ // So instead search for the first
    within the main content area starting with "Next", trimmed. + let result = null; const aEls = rawChapterDoc.querySelectorAll(".entry-content a"); for (let i = 0; i < aEls.length; ++i) { if (aEls[i].textContent.trim().startsWith("Next")) { - return aEls[i].href; + result = aEls[i].href; + break; } } - return null; + // Except, this doesn't always work, because the "Next Chapter" link in + // https://www.parahumans.net/2020/04/28/last-20-e6/ is just broken for some reason. We hard-code that. + if (result === "https://www.parahumans.net/?p=3365&preview=true") { + return "https://www.parahumans.net/2020/05/02/last-20-end/"; + } + return result; } function getChapterTitle(rawChapterDoc) { diff --git a/lib/substitutions.json b/lib/substitutions.json index 6cc8d57..95d577f 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -9128,7 +9128,7 @@ "after": "cross the ocean" } ], - "https://www.parahumans.net/?p=3365&preview=true": [ + "https://www.parahumans.net/2020/05/02/last-20-end/": [ { "before": "saying dad had custody", "after": "saying Dad had custody" From ed070daf9fdd532da734041e6bd38a94d609ef37 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 17 Jan 2021 16:13:52 -0500 Subject: [PATCH 175/186] Fix Ward substitutions for source updates URLs seem to be relative now. --- lib/substitutions.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/substitutions.json b/lib/substitutions.json index 95d577f..bf514bd 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -5061,7 +5061,7 @@ ], "https://www.parahumans.net/2018/05/26/torch-7-4/": [ { - "before": "

    ", + "before": "

    ", "after": "", "_comment": "This appears to be intentional, but it just duplicates the Next Chapter link (i.e. turning the page in the eBook), so we remove it" }, @@ -6674,7 +6674,7 @@ "after": "morning breath—more than morning breath—but there" }, { - "before": "

    Previous Chapter                                                                               Next Chapter

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    ", + "before": "

    Previous Chapter                                                                               Next Chapter

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    \n

    ", "after": "
     
    \n
     
    ", "_comment": "This is the best way I can think of to emulate the end of chapter 'fake out' in an ebook format" }, @@ -6701,7 +6701,7 @@ ], "https://www.parahumans.net/2019/04/02/black-13-1/": [ { - "before": "

    \n

    Previous Chapter                                                                               Next Chapter

    \n", + "before": "

    \n

    Previous Chapter                                                                               Next Chapter

    \n", "after": "", "_comment": "Our usual heuristics of removing the first paragraph to remove the previous/next chapter links are broken here because of the 'go back and look at the fake out' comment at the top" }, From 32c76a59a5c0d4f53f595bcd59c7fa0b606013d1 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 17 Jan 2021 16:49:30 -0500 Subject: [PATCH 176/186] Update CI cache key for source updates --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4948cc4..ca341da 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,7 @@ jobs: # cache key. - uses: actions/cache@v2 with: - key: worm-ward-cache-2020-12-31 + key: worm-ward-cache-2021-01-17 path: ./cache - run: node ./lib/worm-scraper.js --book=worm From f3893e2f3f67f67991d2336d3c772249da2603e1 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sun, 17 Jan 2021 17:04:56 -0500 Subject: [PATCH 177/186] 4.12.1 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index b65ca19..74408d3 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "worm-scraper", - "version": "4.12.0", + "version": "4.12.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 877f787..e9a7a39 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.12.0", + "version": "4.12.1", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From 360f108c1c469589c56f0d50846776ee3678687e Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 15 Feb 2021 21:10:20 -0500 Subject: [PATCH 178/186] Use @domenic/eslint-config --- .eslintrc.json | 255 +----------------- lib/convert-worker.js | 578 +++++++++++++++++++++-------------------- lib/convert.js | 4 +- lib/download.js | 4 +- lib/substitutions.json | 4 - lib/worm-scraper.js | 15 +- npm-shrinkwrap.json | 82 ++++-- package.json | 3 +- 8 files changed, 373 insertions(+), 572 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 373b63a..b7348b0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,259 +1,10 @@ { "root": true, + "extends": "@domenic", "env": { - "node": true, - "es6": true - }, - "parserOptions": { - "ecmaVersion": 2019 + "node": true }, "rules": { - // Possible errors - "no-await-in-loop": "off", - "comma-dangle": ["error", "never"], - "no-cond-assign": ["error", "except-parens"], - "no-console": "off", - "no-constant-condition": "error", - "no-control-regex": "error", - "no-debugger": "error", - "no-dupe-args": "error", - "no-dupe-keys": "error", - "no-duplicate-case": "error", - "no-empty": "error", - "no-empty-character-class": "error", - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-extra-parens": ["error", "all", { "conditionalAssign": false, "nestedBinaryExpressions": false }], - "no-extra-semi": "error", - "no-func-assign": "error", - "no-inner-declarations": "off", - "no-invalid-regexp": "error", - "no-irregular-whitespace": "error", - "no-obj-calls": "error", - "no-prototype-builtins": "error", - "no-regex-spaces": "error", - "no-sparse-arrays": "error", - "no-template-curly-in-string": "error", - "no-unexpected-multiline": "error", - "no-unreachable": "error", - "no-unsafe-finally": "off", - "no-unsafe-negation": "error", - "use-isnan": "error", - "valid-jsdoc": "off", - "valid-typeof": "error", - - // Best practices - "accessor-pairs": "error", - "array-callback-return": "error", - "block-scoped-var": "off", - "class-methods-use-this": "error", - "complexity": "off", - "consistent-return": "error", - "curly": ["error", "all"], - "default-case": "off", - "dot-location": ["error", "property"], - "dot-notation": "error", - "eqeqeq": "error", - "guard-for-in": "off", - "no-alert": "error", - "no-caller": "error", - "no-case-declarations": "error", - "no-div-regex": "off", - "no-else-return": "error", - "no-empty-function": "error", - "no-empty-pattern": "error", - "no-eq-null": "error", - "no-eval": "error", - "no-extend-native": "error", - "no-extra-bind": "error", - "no-extra-label": "error", - "no-fallthrough": "error", - "no-floating-decimal": "error", - "no-global-assign": "error", - "no-implicit-coercion": "error", - "no-implicit-globals": "error", - "no-implied-eval": "off", - "no-invalid-this": "error", - "no-iterator": "error", - "no-labels": ["error", { "allowLoop": true }], - "no-lone-blocks": "error", - "no-loop-func": "off", - "no-magic-numbers": "off", - "no-multi-spaces": "error", - "no-multi-str": "error", - "no-new": "error", - "no-new-func": "error", - "no-new-wrappers": "error", - "no-octal": "error", - "no-octal-escape": "error", - "no-param-reassign": "off", - "no-process-env": "error", - "no-proto": "error", - "no-redeclare": "error", - "no-restricted-properties": "off", - "no-return-assign": ["error", "except-parens"], - "no-return-await": "error", - "no-script-url": "off", - "no-self-assign": "error", - "no-self-compare": "error", - "no-sequences": "error", - "no-throw-literal": "error", - "no-unmodified-loop-condition": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-useless-call": "error", - "no-useless-concat": "error", - "no-useless-escape": "error", - "no-useless-return": "error", - "no-void": "error", - "no-warning-comments": "off", - "no-with": "error", - "radix": ["error", "as-needed"], - "require-await": "error", - "vars-on-top": "off", - "wrap-iife": ["error", "outside"], - "yoda": ["error", "never"], - - // Strict Mode - "strict": ["error", "global"], - - // Variables - "init-declarations": "off", - "no-catch-shadow": "error", - "no-delete-var": "error", - "no-label-var": "error", - "no-restricted-globals": "off", - "no-shadow": "error", - "no-shadow-restricted-names": "error", - "no-undef": "error", - "no-undef-init": "error", - "no-undefined": "off", - "no-unused-vars": "error", - "no-use-before-define": ["error", "nofunc"], - - // Node.js and CommonJS - "callback-return": "off", - "global-require": "error", - "handle-callback-err": "error", - "no-mixed-requires": ["error", true], - "no-new-require": "error", - "no-path-concat": "error", - "no-process-exit": "error", - "no-restricted-imports": "off", - "no-restricted-modules": "off", - "no-sync": "off", - - // Stylistic Issues - "array-bracket-spacing": ["error", "never"], - "block-spacing": ["error", "always"], - "brace-style": ["error", "1tbs", { "allowSingleLine": false }], - "camelcase": ["error", { "properties": "always" }], - "capitalized-comments": ["error", "always", { "ignoreConsecutiveComments": true }], - "comma-spacing": ["error", { "before": false, "after": true }], - "comma-style": ["error", "last"], - "computed-property-spacing": ["error", "never"], - "consistent-this": "off", - "eol-last": "error", - "func-call-spacing": ["error", "never"], - "func-name-matching": ["error", "always"], - "func-names": ["error", "never"], - "func-style": ["error", "declaration"], - "id-blacklist": "off", - "id-length": "off", - "id-match": "off", - "indent": ["error", 2, { "SwitchCase": 1 }], - "jsx-quotes": "off", - "key-spacing": ["error", { "beforeColon": false, "afterColon": true, "mode": "strict" }], - "keyword-spacing": ["error", { "before": true, "after": true }], - "line-comment-position": "off", - "linebreak-style": ["error", "unix"], - "lines-around-comment": "off", - "lines-around-directive": "off", - "max-depth": "off", - "max-len": ["error", 120, { "ignoreUrls": true }], - "max-lines": "off", - "max-nested-callbacks": "off", - "max-params": "off", - "max-statements": "off", - "max-statements-per-line": ["error", { "max": 1 }], - "multiline-ternary": "off", - "new-cap": "error", - "new-parens": "error", - "newline-after-var": "off", - "newline-before-return": "off", - "newline-per-chained-call": "off", - "no-array-constructor": "error", - "no-bitwise": "off", - "no-continue": "off", - "no-inline-comments": "off", - "no-lonely-if": "error", - "no-mixed-operators": "error", - "no-mixed-spaces-and-tabs": "error", - "no-multiple-empty-lines": "error", - "no-negated-condition": "off", - "no-nested-ternary": "error", - "no-new-object": "error", - "no-plusplus": "off", - "no-restricted-syntax": "off", - "no-tabs": "error", - "no-ternary": "off", - "no-trailing-spaces": "error", - "no-underscore-dangle": "off", - "no-unneeded-ternary": "error", - "no-whitespace-before-property": "error", - "object-curly-newline": ["error", { "multiline": true }], - "object-curly-spacing": ["error", "always"], - "object-property-newline": "off", - "one-var": ["error", { "initialized": "never" }], - "one-var-declaration-per-line": ["error", "initializations"], - "operator-assignment": ["error", "always"], - "operator-linebreak": ["error", "after"], - "padded-blocks": ["error", "never"], - "quote-props": ["error", "as-needed"], - "quotes": ["error", "double", { "avoidEscape": true, "allowTemplateLiterals": true }], - "require-jsdoc": "off", - "semi": ["error", "always"], - "semi-spacing": "error", - "sort-keys": "off", - "sort-vars": "off", - "space-before-blocks": ["error", "always"], - "space-before-function-paren": ["error", { "anonymous": "always", "named": "never" }], - "space-in-parens": ["error", "never"], - "space-infix-ops": "error", - "space-unary-ops": ["error", { "words": true, "nonwords": false }], - "spaced-comment": ["error", "always", { "markers": ["///"] }], - "unicode-bom": ["error", "never"], - "wrap-regex": "off", - - // ECMAScript 6 - "arrow-body-style": "off", // meh - "arrow-parens": ["error", "as-needed"], - "arrow-spacing": "error", - "constructor-super": "error", - "generator-star-spacing": ["error", "after"], - "no-class-assign": "error", - "no-confusing-arrow": "off", - "no-const-assign": "error", - "no-dupe-class-members": "error", - "no-duplicate-imports": "error", - "no-new-symbol": "error", - "no-this-before-super": "error", - "no-useless-computed-key": "error", - "no-useless-constructor": "error", - "no-useless-rename": "error", - "no-var": "error", - "object-shorthand": "error", - "prefer-arrow-callback": "error", - "prefer-const": "error", - "prefer-numeric-literals": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "prefer-template": "off", - "require-yield": "error", - "rest-spread-spacing": ["error", "never"], - "sort-imports": "off", - "symbol-description": "error", - "template-curly-spacing": ["error", "never"], - "yield-star-spacing": ["error", "after"] + "no-console": "off" } } diff --git a/lib/convert-worker.js b/lib/convert-worker.js index 19a0cd4..dede819 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -142,124 +142,125 @@ function getBodyXML(chapter, book, contentEl) { let xml = xmlSerializer.serializeToString(bodyEl); // Fix recurring strange pattern of extra
    in

    ......
    \n

    - xml = xml.replace(/
    \s*<\/em><\/p>/g, "

    "); + xml = xml.replace(/
    \s*<\/em><\/p>/ug, "

    "); // Replace single-word s with s. Other s are probably erroneous too, but these are known-bad. - xml = xml.replace(/([^ ]+)<\/i>/g, "$1"); - xml = xml.replace(/([^ ]+)( +)<\/i>/g, "$1$2"); + xml = xml.replace(/([^ ]+)<\/i>/ug, "$1"); + xml = xml.replace(/([^ ]+)( +)<\/i>/ug, "$1$2"); // There are way too many nonbreaking spaces where they don't belong. If they show up three in a row, then let them // live; they're maybe being used for alignment or something. Otherwise, they die. // // Also, normalize spaces after a period/quote mark to two (normal) spaces. The second one is invisible when // rendered, but it helps future heuristics detect end of sentences. - xml = xml.replace(/\xA0{1,2}(?!\x20\xA0)/g, " "); - xml = xml.replace(/([.”])\x20*\xA0[\xA0\x20]*/g, "$1 "); - xml = xml.replace(/([.”])\x20{3,}/g, "$1 "); + xml = xml.replace(/\xA0{1,2}(?!\x20\xA0)/ug, " "); + xml = xml.replace(/([.”])\x20*\xA0[\xA0\x20]*/ug, "$1 "); + xml = xml.replace(/([.”])\x20{3,}/ug, "$1 "); function fixEms() { // Fix recurring broken-up or erroneous s - xml = xml.replace(/<\/em>‘s/g, "’s"); - xml = xml.replace(/<\/em>/g, ""); - xml = xml.replace(/<\/em>/g, ""); - xml = xml.replace(/(\s?\s?[^A-Za-z]\s?\s?)<\/em>/g, "$1"); - xml = xml.replace(/<\/em>(\s?\s?[^A-Za-z]\s?\s?)/g, "$1"); - xml = xml.replace(/“([^>]+)<\/em>(!|\?|\.)”/g, "“$1$2”"); - xml = xml.replace(/

    ([^>]+)<\/em>(!|\?|\.)<\/p>/g, "

    $1$2

    "); - xml = xml.replace(/(!|\?|\.)\s{2}<\/em><\/p>/g, "$1

    "); - xml = xml.replace(/([a-z]+)(\?|\.)<\/em>/g, "$1$2"); - xml = xml.replace(/([^>]+?)( +)<\/em>/g, "$1$2"); - xml = xml.replace(/ ([a-zA-Z]+)<\/em>/g, " $1"); - xml = xml.replace(/‘\s*([^<]+)\s*’<\/em>/g, "‘$1’"); - xml = xml.replace(/‘\s*([^<]+)\s*<\/em>\s*’/g, "‘$1’"); - xml = xml.replace(/‘\s*\s*([^<]+)\s*’<\/em>/g, "‘$1’"); - xml = xml.replace(/“\s*([^<”]+)\s*”<\/em>/g, "“$1”"); - xml = xml.replace(/“\s*([^<”]+)\s*<\/em>\s*”/g, "“$1”"); - xml = xml.replace(/“\s*\s*([^<”]+)\s*”<\/em>/g, "“$1”"); - xml = xml.replace(/([^\n>]) ?/g, "$1 "); - xml = xml.replace(/ ?<\/em>/g, " "); - xml = xml.replace(/]+)> /g, ""); - xml = xml.replace(/<\/em> <\/p>/g, "

    "); - xml = xml.replace(/([a-z]+),<\/em>/g, "$1,"); + xml = xml.replace(/<\/em>‘s/ug, "’s"); + xml = xml.replace(/<\/em>/ug, ""); + xml = xml.replace(/<\/em>/ug, ""); + xml = xml.replace(/(\s?\s?[^A-Za-z]\s?\s?)<\/em>/ug, "$1"); + xml = xml.replace(/<\/em>(\s?\s?[^A-Za-z]\s?\s?)/ug, "$1"); + xml = xml.replace(/“([^>]+)<\/em>(!|\?|\.)”/ug, "“$1$2”"); + xml = xml.replace(/

    ([^>]+)<\/em>(!|\?|\.)<\/p>/ug, "

    $1$2

    "); + xml = xml.replace(/(!|\?|\.)\s{2}<\/em><\/p>/ug, "$1

    "); + xml = xml.replace(/([a-z]+)(\?|\.)<\/em>/ug, "$1$2"); + xml = xml.replace(/([^>]+?)( +)<\/em>/ug, "$1$2"); + xml = xml.replace(/ ([a-zA-Z]+)<\/em>/ug, " $1"); + xml = xml.replace(/‘\s*([^<]+)\s*’<\/em>/ug, "‘$1’"); + xml = xml.replace(/‘\s*([^<]+)\s*<\/em>\s*’/ug, "‘$1’"); + xml = xml.replace(/‘\s*\s*([^<]+)\s*’<\/em>/ug, "‘$1’"); + xml = xml.replace(/“\s*([^<”]+)\s*”<\/em>/ug, "“$1”"); + xml = xml.replace(/“\s*([^<”]+)\s*<\/em>\s*”/ug, "“$1”"); + xml = xml.replace(/“\s*\s*([^<”]+)\s*”<\/em>/ug, "“$1”"); + xml = xml.replace(/([^\n>]) ?/ug, "$1 "); + xml = xml.replace(/ ?<\/em>/ug, " "); + xml = xml.replace(/]+)> /ug, ""); + xml = xml.replace(/<\/em> <\/p>/ug, "

    "); + xml = xml.replace(/([a-z]+),<\/em>/ug, "$1,"); } // These quote/apostrophe/em fixes interact with each other. TODO: try to disentangle so we don't repeat all of // fixEms. - xml = xml.replace(/,” <\/em>/g, ",” "); + xml = xml.replace(/,” <\/em>/ug, "
    ,” "); fixEms(); - xml = xml.replace(/

    ”/g, "

    “"); - xml = xml.replace(/“\s*<\/p>/g, "”

    "); - xml = xml.replace(/“\s*<\/em><\/p>/g, "”

    "); - xml = xml.replace(/‘\s*<\/p>/g, "’

    "); - xml = xml.replace(/‘\s*<\/em><\/p>/g, "’

    "); - xml = xml.replace(/,” <\/em>/g, ",” "); - xml = xml.replace(/′/g, "’"); - xml = xml.replace(/″/g, "”"); - xml = xml.replace(/([A-Za-z])‘s(\s?)/g, "$1’s$2"); - xml = xml.replace(/I‘m/g, "I’m"); - xml = xml.replace(/

    “\s+/g, "

    “"); - xml = xml.replace(/\s+”/g, "”"); - xml = xml.replace(/'/g, "’"); - xml = xml.replace(/’([A-Za-z]+)’/g, "‘$1’"); - xml = xml.replace(/([a-z])”<\/p>/g, "$1.”

    "); + xml = xml.replace(/

    ”/ug, "

    “"); + xml = xml.replace(/“\s*<\/p>/ug, "”

    "); + xml = xml.replace(/“\s*<\/em><\/p>/ug, "”

    "); + xml = xml.replace(/‘\s*<\/p>/ug, "’

    "); + xml = xml.replace(/‘\s*<\/em><\/p>/ug, "’

    "); + xml = xml.replace(/,” <\/em>/ug, ",” "); + xml = xml.replace(/′/ug, "’"); + xml = xml.replace(/″/ug, "”"); + xml = xml.replace(/([A-Za-z])‘s(\s?)/ug, "$1’s$2"); + xml = xml.replace(/I‘m/ug, "I’m"); + xml = xml.replace(/

    “\s+/ug, "

    “"); + xml = xml.replace(/\s+”/ug, "”"); + xml = xml.replace(/'/ug, "’"); + xml = xml.replace(/’([A-Za-z]+)’/ug, "‘$1’"); + xml = xml.replace(/([a-z])”<\/p>/ug, "$1.”

    "); fixEms(); - xml = xml.replace(/‘([^<]+)<\/em>‘/g, "‘$1’"); - xml = xml.replace(/([a-z]+)!<\/em>/g, "$1!"); - xml = xml.replace(/(?([\w ’]+)([!.?])”<\/em>/g, "$1$2”"); - xml = xml.replace(/([\w ’]+[!.?])”<\/em>/g, "$1”"); - xml = xml.replace(/I”(m|ll)/g, "I’$1"); - xml = xml.replace(/””<\/p>/g, "”

    "); - xml = xml.replace(/^([^“]+?) ?”(?![ —<])/gm, "$1 “"); - xml = xml.replace(/(?([A-Za-z]+),<\/em>(?!”| +[A-Za-z]+ thought)/, "$1,"); - xml = xml.replace(/‘([Kk])ay(?!’)/g, "’$1ay"); - xml = xml.replace(/(Why|What|Who|How|Where|When)<\/em>\?/g, "$1?"); - xml = xml.replace(/,<\/em>/g, ","); - xml = xml.replace(/,”<\/p>/g, ".”

    "); - xml = xml.replace(/

    (.*),<\/p>/g, "

    $1.

    "); - xml = xml.replace(/‘(\w+)‘(\w+)’/g, "‘$1’$2’"); - xml = xml.replace(/([a-z]+), ([a-z]+)<\/em>/g, "$1, $2"); + xml = xml.replace(/‘([^<]+)<\/em>‘/ug, "‘$1’"); + xml = xml.replace(/([a-z]+)!<\/em>/ug, "$1!"); + xml = xml.replace(/(?([\w ’]+)([!.?])”<\/em>/ug, "$1$2”"); + xml = xml.replace(/([\w ’]+[!.?])”<\/em>/ug, "$1”"); + xml = xml.replace(/I”(m|ll)/ug, "I’$1"); + xml = xml.replace(/””<\/p>/ug, "”

    "); + xml = xml.replace(/^([^“]+?) ?”(?![ —<])/ugm, "$1 “"); + xml = xml.replace(/(?([A-Za-z]+),<\/em>(?!”| +[A-Za-z]+ thought)/u, "$1,"); + xml = xml.replace(/‘([Kk])ay(?!’)/ug, "’$1ay"); + xml = xml.replace(/(Why|What|Who|How|Where|When)<\/em>\?/ug, "$1?"); + xml = xml.replace(/,<\/em>/ug, ","); + xml = xml.replace(/,”<\/p>/ug, ".”

    "); + xml = xml.replace(/

    (.*),<\/p>/ug, "

    $1.

    "); + xml = xml.replace(/‘(\w+)‘(\w+)’/ug, "‘$1’$2’"); + xml = xml.replace(/([a-z]+), ([a-z]+)<\/em>/ug, "$1, $2"); // Similar problems occur in Ward with and as do in Worm with s - xml = xml.replace(//g, ""); - xml = xml.replace(/(\s*
    \s*)<\/b>/g, "$1"); - xml = xml.replace(/(\s*
    \s*)<\/strong>/g, "$1"); - xml = xml.replace(/<\/strong>(\s*)/g, "$1"); - xml = xml.replace(/@<\/strong>/g, "@"); - xml = xml.replace(/
    (\s*)<\/strong>/g, "

    $1"); - xml = xml.replace(/(\s*)<\/strong>/g, "
    $1"); - xml = xml.replace(/>(.*)<\/strong>:$1:<"); + xml = xml.replace(//ug, ""); + xml = xml.replace(/(\s*
    \s*)<\/b>/ug, "$1"); + xml = xml.replace(/(\s*
    \s*)<\/strong>/ug, "$1"); + xml = xml.replace(/<\/strong>(\s*)/ug, "$1"); + xml = xml.replace(/@<\/strong>/ug, "@"); + xml = xml.replace(/
    (\s*)<\/strong>/ug, "

    $1"); + xml = xml.replace(/(\s*)<\/strong>/ug, "
    $1"); + xml = xml.replace(/>(.*)<\/strong>:$1:<"); // No need for line breaks before paragraph ends or after paragraph starts // These often occur with the
    s inside /// fixed above. - xml = xml.replace(/
    \s*<\/p>/g, "

    "); - xml = xml.replace(/


    \s*/g, "

    "); + xml = xml.replace(/
    \s*<\/p>/ug, "

    "); + xml = xml.replace(/


    \s*/ug, "

    "); // This is another quote fix but it needs to happen after the line break deletion... so entangled, ugh. - xml = xml.replace(/<\/em>\s*“\s*<\/p>/g, "

    "); + xml = xml.replace(/<\/em>\s*“\s*<\/p>/ug, "

    "); // Fix missing spaces after commas - xml = xml.replace(/([a-zA-Z]+),([a-zA-Z]+)/g, "$1, $2"); + xml = xml.replace(/([a-zA-Z]+),([a-zA-Z]+)/ug, "$1, $2"); // Fix bad periods and spacing/markup surrounding them - xml = xml.replace(/\.\.<\/p>/g, ".

    "); - xml = xml.replace(/\.\.”<\/p>/g, ".”

    "); - xml = xml.replace(/ \. /g, ". "); - xml = xml.replace(/ \.<\/p>/g, ".

    "); - xml = xml.replace(/\.\.\./g, "…"); - xml = xml.replace(/\.\. {2}/g, ". "); - xml = xml.replace(/\.\./g, "…"); - xml = xml.replace(/(?/ug, ".

    "); + xml = xml.replace(/\.\.”<\/p>/ug, ".”

    "); + xml = xml.replace(/ \. /ug, ". "); + xml = xml.replace(/ \.<\/p>/ug, ".

    "); + xml = xml.replace(/\.\.\./ug, "…"); + xml = xml.replace(/\.\. {2}/ug, ". "); + xml = xml.replace(/\.\./ug, "…"); + xml = xml.replace(/(?/g, "

    "); - xml = xml.replace(/([a-z]) ,/g, "$1,"); + xml = xml.replace(/ ? <\/p>/ug, "

    "); + xml = xml.replace(/([a-z]) ,/ug, "$1,"); // Use actual emojis instead of images xml = xml.replace( // eslint-disable-next-line max-len - /O_o/g, - "🤨"); + /O_o/ug, + "🤨" + ); xml = fixTruncatedWords(xml); xml = fixDialogueTags(xml); @@ -288,9 +289,9 @@ function getBodyXML(chapter, book, contentEl) { `Update substitutions.json for a more precise substitution.`); } - xml = xml.replace(new RegExp(escapeRegExp(substitution.before)), substitution.after); + xml = xml.replace(new RegExp(escapeRegExp(substitution.before), "u"), substitution.after); } else if (substitution.regExp) { - xml = xml.replace(new RegExp(substitution.regExp, "g"), substitution.replacement); + xml = xml.replace(new RegExp(substitution.regExp, "ug"), substitution.replacement); } else { warnings.push(`Invalid substitution specified for ${chapter.url}`); } @@ -299,30 +300,31 @@ function getBodyXML(chapter, book, contentEl) { // Serializer inserts extra xmlns for us since it doesn't know we're going to put this into a . // Use this opportunity to insert a comment pointing to the original URL, for reference. xml = xml.replace( - //, - `\n\n`); + //u, + `\n\n` + ); return { xml, warnings }; } function fixTruncatedWords(xml) { - xml = xml.replace(/‘Sup/g, "’Sup"); - xml = xml.replace(/‘cuz/g, "’cuz"); + xml = xml.replace(/‘Sup/ug, "’Sup"); + xml = xml.replace(/‘cuz/ug, "’cuz"); // Short for "Sidepeace" - xml = xml.replace(/[‘’][Pp]iece(?![a-z])/g, "’Piece"); + xml = xml.replace(/[‘’][Pp]iece(?![a-z])/ug, "’Piece"); // Short for "Disjoint" - xml = xml.replace(/[‘’][Jj]oint(?![a-z])/g, "’Joint"); + xml = xml.replace(/[‘’][Jj]oint(?![a-z])/ug, "’Joint"); // Short for "Contender" - xml = xml.replace(/[‘’][Tt]end(?![a-z])/g, "’Tend"); + xml = xml.replace(/[‘’][Tt]end(?![a-z])/ug, "’Tend"); // Short for "Anelace" - xml = xml.replace(/[‘’][Ll]ace(?![a-z])/g, "’Lace"); + xml = xml.replace(/[‘’][Ll]ace(?![a-z])/ug, "’Lace"); // Short for "Birdcage" - xml = xml.replace(/[‘’][Cc]age(?![a-z])/g, "’Cage"); + xml = xml.replace(/[‘’][Cc]age(?![a-z])/ug, "’Cage"); // We can't do "’Clear" (short for Crystalclear) here because it appears too much as a normal word preceded by an // open quote, so we do that in substitutions.json. @@ -332,8 +334,8 @@ function fixTruncatedWords(xml) { function fixDialogueTags(xml) { // Fix recurring miscapitalization with questions - xml = xml.replace(/\?”\s\s?She asked/g, "?” she asked"); - xml = xml.replace(/\?”\s\s?He asked/g, "?” he asked"); + xml = xml.replace(/\?”\s\s?She asked/ug, "?” she asked"); + xml = xml.replace(/\?”\s\s?He asked/ug, "?” he asked"); // The author often fails to terminate a sentence, instead using a comma after a dialogue tag. For example, // > “I didn’t get much done,” Greg said, “I got distracted by... @@ -349,105 +351,105 @@ function fixDialogueTags(xml) { // This applies to ~800 instances, so although we have to correct back in substitutions.json a decent number of // times, it definitely pays for itself. Most of the instances we have to correct back we also need to fix the // capitalization anyway, and that's harder to do automatically, since proper names/"I"/etc. stay capitalized. - xml = xml.replace(/,” ([A-Za-z]+ [A-Za-z]+), “([A-Z])/g, ",” $1. “$2"); + xml = xml.replace(/,” ([A-Za-z]+ [A-Za-z]+), “([A-Z])/ug, ",” $1. “$2"); return xml; } function fixForeignNames(xml) { // This is consistently missing diacritics - xml = xml.replace(/Yangban/g, "Yàngbǎn"); + xml = xml.replace(/Yangban/ug, "Yàngbǎn"); // These are usually not italicized, but sometimes are. Other foreign-language names (like Yàngbǎn) are not // italicized, so we go in the direction of removing the italics. - xml = xml.replace(/Garama<\/em>/g, "Garama"); - xml = xml.replace(/Thanda<\/em>/g, "Thanda"); - xml = xml.replace(/Sifara([^<]*)<\/em>/g, "Sifara$1"); - xml = xml.replace(/Moord Nag([^<]*)<\/em>/g, "Moord Nag$1"); - xml = xml.replace(/Califa de Perro([^<]*)<\/em>/g, "Califa de Perro$1"); - xml = xml.replace(/Turanta([^<]*)<\/em>/g, "Turanta$1"); + xml = xml.replace(/Garama<\/em>/ug, "Garama"); + xml = xml.replace(/Thanda<\/em>/ug, "Thanda"); + xml = xml.replace(/Sifara([^<]*)<\/em>/ug, "Sifara$1"); + xml = xml.replace(/Moord Nag([^<]*)<\/em>/ug, "Moord Nag$1"); + xml = xml.replace(/Califa de Perro([^<]*)<\/em>/ug, "Califa de Perro$1"); + xml = xml.replace(/Turanta([^<]*)<\/em>/ug, "Turanta$1"); return xml; } function standardizeNames(xml) { // 197 instances of "Mrs." to 21 of "Ms." - xml = xml.replace(/Ms\. Yamada/g, "Mrs. Yamada"); + xml = xml.replace(/Ms\. Yamada/ug, "Mrs. Yamada"); // 25 instances of "Amias" to 3 of "Amais" - xml = xml.replace(/Amais/g, "Amias"); + xml = xml.replace(/Amais/ug, "Amias"); // 185 instances of Juliette to 4 of Juliet - xml = xml.replace(/Juliet(?=\b)/g, "Juliette"); + xml = xml.replace(/Juliet(?=\b)/ug, "Juliette"); // Earlier chapters have a space; later ones do not. They're separate words, so side with the earlier chapters. // One location is missing the "k". - xml = xml.replace(/Crock? o[‘’]Shit/g, "Crock o’ Shit"); + xml = xml.replace(/Crock? o[‘’]Shit/ug, "Crock o’ Shit"); // 5 instances of "Jotun" to 2 of "Jotunn" - xml = xml.replace(/Jotunn/g, "Jotun"); + xml = xml.replace(/Jotunn/ug, "Jotun"); // 13 instances of Elman to 1 of Elmann - xml = xml.replace(/Elmann/g, "Elman"); + xml = xml.replace(/Elmann/ug, "Elman"); // Thousands of instances of Tattletale to 4 instances of Tatteltale - xml = xml.replace(/Tatteltale/g, "Tattletale"); + xml = xml.replace(/Tatteltale/ug, "Tattletale"); return xml; } function fixEmDashes(xml) { - xml = xml.replace(/ – /g, "—"); - xml = xml.replace(/“((?:)?)-/g, "“$1—"); - xml = xml.replace(/-[,.]?”/g, "—”"); - xml = xml.replace(/-(!|\?)”/g, "—$1”"); - xml = xml.replace(/-[,.]?<\/([a-z]+)>”/g, "—”"); - xml = xml.replace(/-“/g, "—”"); - xml = xml.replace(/

    -/g, "

    —"); - xml = xml.replace(/-<\/p>/g, "—

    "); - xml = xml.replace(/-
    /g, "—
    "); - xml = xml.replace(/-<\/([a-z]+)><\/p>/g, "—

    "); - xml = xml.replace(/\s?\s?–\s?\s?/g, "—"); - xml = xml.replace(/-\s\s?/g, "—"); - xml = xml.replace(/\s?\s-/g, "—"); - xml = xml.replace(/\s+—”/g, "—”"); - xml = xml.replace(/I-I/g, "I—I"); - xml = xml.replace(/I-uh/g, "I—uh"); - xml = xml.replace(/-\?/g, "—?"); + xml = xml.replace(/ – /ug, "—"); + xml = xml.replace(/“((?:)?)-/ug, "“$1—"); + xml = xml.replace(/-[,.]?”/ug, "—”"); + xml = xml.replace(/-(!|\?)”/ug, "—$1”"); + xml = xml.replace(/-[,.]?<\/([a-z]+)>”/ug, "—”"); + xml = xml.replace(/-“/ug, "—”"); + xml = xml.replace(/

    -/ug, "

    —"); + xml = xml.replace(/-<\/p>/ug, "—

    "); + xml = xml.replace(/-
    /ug, "—
    "); + xml = xml.replace(/-<\/([a-z]+)><\/p>/ug, "—

    "); + xml = xml.replace(/\s?\s?–\s?\s?/ug, "—"); + xml = xml.replace(/-\s\s?/ug, "—"); + xml = xml.replace(/\s?\s-/ug, "—"); + xml = xml.replace(/\s+—”/ug, "—”"); + xml = xml.replace(/I-I/ug, "I—I"); + xml = xml.replace(/I-uh/ug, "I—uh"); + xml = xml.replace(/-\?/ug, "—?"); return xml; } function enDashJointNames(xml) { // Joint names should use en dashes - xml = xml.replace(/Dallon-Pelham/g, "Dallon–Pelham"); - xml = xml.replace(/Bet-Gimel/g, "Bet–Gimel"); - xml = xml.replace(/Cheit-Gimel/g, "Bet–Gimel"); - xml = xml.replace(/Tristan-Capricorn/g, "Tristan–Capricorn"); - xml = xml.replace(/Capricorn-Byron/g, "Capricorn–Byron"); - xml = xml.replace(/Tristan-Byron/g, "Tristan–Byron"); - xml = xml.replace(/Gimel-Europe/g, "Gimel–Europe"); - xml = xml.replace(/G-N/g, "G–N"); - xml = xml.replace(/Imp-Damsel/g, "Imp–Damsel"); - xml = xml.replace(/Damsel-Ashley/g, "Damsel–Ashley"); - xml = xml.replace(/Antares-Anelace/g, "Antares–Anelace"); - xml = xml.replace(/Challenger-Gallant/g, "Challenger–Gallant"); - xml = xml.replace(/Undersider(s?)-(Breakthrough|Ambassador)/g, "Undersider$1–$2"); - xml = xml.replace(/Norwalk-Fairfield/g, "Norwalk–Fairfield"); - xml = xml.replace(/East-West/g, "east–west"); - xml = xml.replace(/Creutzfeldt-Jakob/g, "Creutzfeldt–Jakob"); - xml = xml.replace(/Astaroth-Nidhug/g, "Astaroth–Nidhug"); - xml = xml.replace(/Capulet-Montague/g, "Capulet–Montague"); - xml = xml.replace(/Weaver-Clockblocker/g, "Weaver–Clockblocker"); - xml = xml.replace(/Alexandria-Pretender/g, "Alexandria–Pretender"); - xml = xml.replace(/Night Hag-Nyx/g, "Night Hag–Nyx"); - xml = xml.replace(/Crawler-Breed/g, "Crawler–Breed"); - xml = xml.replace(/Simurgh-Myrddin-plant/g, "Simurgh–Myrddin–plant"); - xml = xml.replace(/Armsmaster-Defiant/g, "Armsmaster–Defiant"); - xml = xml.replace(/Matryoshka-Valentin/g, "Matryoshka–Valentin"); - xml = xml.replace(/Gaea-Eden/g, "Gaea–Eden"); - xml = xml.replace(/([Aa])gent-parahuman/g, "$1gent–parahuman"); - xml = xml.replace(/([Pp])arahuman-agent/g, "$1arahuman–agent"); + xml = xml.replace(/Dallon-Pelham/ug, "Dallon–Pelham"); + xml = xml.replace(/Bet-Gimel/ug, "Bet–Gimel"); + xml = xml.replace(/Cheit-Gimel/ug, "Bet–Gimel"); + xml = xml.replace(/Tristan-Capricorn/ug, "Tristan–Capricorn"); + xml = xml.replace(/Capricorn-Byron/ug, "Capricorn–Byron"); + xml = xml.replace(/Tristan-Byron/ug, "Tristan–Byron"); + xml = xml.replace(/Gimel-Europe/ug, "Gimel–Europe"); + xml = xml.replace(/G-N/ug, "G–N"); + xml = xml.replace(/Imp-Damsel/ug, "Imp–Damsel"); + xml = xml.replace(/Damsel-Ashley/ug, "Damsel–Ashley"); + xml = xml.replace(/Antares-Anelace/ug, "Antares–Anelace"); + xml = xml.replace(/Challenger-Gallant/ug, "Challenger–Gallant"); + xml = xml.replace(/Undersider(s?)-(Breakthrough|Ambassador)/ug, "Undersider$1–$2"); + xml = xml.replace(/Norwalk-Fairfield/ug, "Norwalk–Fairfield"); + xml = xml.replace(/East-West/ug, "east–west"); + xml = xml.replace(/Creutzfeldt-Jakob/ug, "Creutzfeldt–Jakob"); + xml = xml.replace(/Astaroth-Nidhug/ug, "Astaroth–Nidhug"); + xml = xml.replace(/Capulet-Montague/ug, "Capulet–Montague"); + xml = xml.replace(/Weaver-Clockblocker/ug, "Weaver–Clockblocker"); + xml = xml.replace(/Alexandria-Pretender/ug, "Alexandria–Pretender"); + xml = xml.replace(/Night Hag-Nyx/ug, "Night Hag–Nyx"); + xml = xml.replace(/Crawler-Breed/ug, "Crawler–Breed"); + xml = xml.replace(/Simurgh-Myrddin-plant/ug, "Simurgh–Myrddin–plant"); + xml = xml.replace(/Armsmaster-Defiant/ug, "Armsmaster–Defiant"); + xml = xml.replace(/Matryoshka-Valentin/ug, "Matryoshka–Valentin"); + xml = xml.replace(/Gaea-Eden/ug, "Gaea–Eden"); + xml = xml.replace(/([Aa])gent-parahuman/ug, "$1gent–parahuman"); + xml = xml.replace(/([Pp])arahuman-agent/ug, "$1arahuman–agent"); return xml; } @@ -456,15 +458,15 @@ function fixPossessives(xml) { // Fix possessive of names ending in "s". xml = xml.replace( // eslint-disable-next-line max-len - /(? would be more semantically appropriate, but loses the author's intent. This is // especially the case in Ward, which uses a variety of different scene breaks. - xml = xml.replace(/]*)>■<\/p>/g, `

    `); + xml = xml.replace(/]*)>■<\/p>/ug, `

    `); - xml = xml.replace(/

    ⊙<\/strong><\/p>/g, `

    `); - xml = xml.replace(/

    ⊙<\/strong><\/em><\/p>/g, - `

    `); - xml = xml.replace(/

    ⊙⊙<\/strong><\/p>/g, - `

    `); + xml = xml.replace( + /

    ⊙<\/strong><\/p>/ug, + `

    ` + ); + xml = xml.replace( + /

    ⊙<\/strong><\/em><\/p>/ug, + `

    ` + ); + xml = xml.replace( + /

    ⊙⊙<\/strong><\/p>/ug, + `

    ` + ); - xml = xml.replace(/

    ⊙ *⊙ *⊙ *⊙ *⊙<\/strong><\/p>/g, - `

    ⊙ ⊙ ⊙ ⊙ ⊙

    `); + xml = xml.replace( + /

    ⊙ *⊙ *⊙ *⊙ *⊙<\/strong><\/p>/ug, + `

    ⊙ ⊙ ⊙ ⊙ ⊙

    ` + ); return xml; } @@ -491,57 +502,59 @@ function fixCapitalization(xml, book) { // This occurs enough times it's better to do here than in one-off fixes. We correct the single instance where // it's incorrect to capitalize in the one-off fixes. // Note that Ward contains much talk of "the clairvoyants", so we don't want to capitalize plurals. - xml = xml.replace(/([Tt])he clairvoyant(?!s)/g, "$1he Clairvoyant"); + xml = xml.replace(/([Tt])he clairvoyant(?!s)/ug, "$1he Clairvoyant"); // ReSound's name is sometimes miscapitalized. The word is never used in a non-name context. - xml = xml.replace(/Resound/g, "ReSound"); + xml = xml.replace(/Resound/ug, "ReSound"); // The Speedrunners team name is missing its capitalization a couple times. - xml = xml.replace(/speedrunners/g, "Speedrunners"); + xml = xml.replace(/speedrunners/ug, "Speedrunners"); // The Machine Army is missing its capitalization a couple times. - xml = xml.replace(/machine army/g, "Machine Army"); + xml = xml.replace(/machine army/ug, "Machine Army"); // "patrol block" is capitalized three different ways: "patrol block", "Patrol block", and "Patrol Block". "patrol // group" is always lowercased. It seems like "Patrol" is a proper name, and is used as a capitalized modifier in // other contexts (e.g. Patrol leader). So let's standardize on "Patrol ". - xml = xml.replace(/patrol (block|group|leader|guard|student|uniform|squad|soldier|officer|crew|girl|bus|training)/ig, - (_, $1) => `Patrol ${$1.toLowerCase()}`); + xml = xml.replace( + /patrol (block|group|leader|guard|student|uniform|squad|soldier|officer|crew|girl|bus|training)/uig, + (_, $1) => `Patrol ${$1.toLowerCase()}` + ); // This usually works in Ward (some instances corrected back in substitutions.json), and has a few false positives in // Worm, where it is never needed: if (book === "ward") { - xml = xml.replace(/the patrol(?!s|ling)/g, "the Patrol"); + xml = xml.replace(/the patrol(?!s|ling)/ug, "the Patrol"); } // This is sometimes missing its capitalization. - xml = xml.replace(/the birdcage/g, "the Birdcage"); + xml = xml.replace(/the birdcage/ug, "the Birdcage"); // There's no reason why these should be capitalized. - xml = xml.replace(/(?)Halberd/g, "halberd"); - xml = xml.replace(/(?)Loft/g, "loft"); + xml = xml.replace(/(?)Halberd/ug, "halberd"); + xml = xml.replace(/(?)Loft/ug, "loft"); // These are treated as common nouns and not traditionally capitalized. "Krav Maga" remains capitalized, // interestingly (according to dictionaries and Wikipedia). - xml = xml.replace(/(?)Judo/g, "judo"); - xml = xml.replace(/(?)Aikido/g, "aikido"); - xml = xml.replace(/(?)Karate/g, "karate"); - xml = xml.replace(/(?)Tae Kwon Do/g, "tae kwon do"); + xml = xml.replace(/(?)Judo/ug, "judo"); + xml = xml.replace(/(?)Aikido/ug, "aikido"); + xml = xml.replace(/(?)Karate/ug, "karate"); + xml = xml.replace(/(?)Tae Kwon Do/ug, "tae kwon do"); // There's no reason why university should be capitalized in most contexts, although sometimes it's used as part of // a compound noun or at the beginning of a sentence. - xml = xml.replace(/(?|Cornell |Nilles )University(?! Road)/, "university"); + xml = xml.replace(/(?|Cornell |Nilles )University(?! Road)/ug, "university"); // Organ names (e.g. brain, arm) or scientific names are not capitalized, so the "corona pollentia" and friends should // not be either. The books are inconsistent. - xml = xml.replace(/(?|-)Corona/g, "corona"); - xml = xml.replace(/Pollentia/g, "pollentia"); - xml = xml.replace(/Radiata/g, "radiata"); - xml = xml.replace(/Gemma/g, "gemma"); + xml = xml.replace(/(?|-)Corona/ug, "corona"); + xml = xml.replace(/Pollentia/ug, "pollentia"); + xml = xml.replace(/Radiata/ug, "radiata"); + xml = xml.replace(/Gemma/ug, "gemma"); // We de-capitalize Valkyrie's "flock", since most uses are de-capitalized (e.g. the many instances in Gleaming // Interlude 9, or Dying 15.z). This is a bit surprising; it seems like an organization name. But I guess it's // informal. - xml = xml.replace(/(?)Flock/g, "flock"); + xml = xml.replace(/(?)Flock/ug, "flock"); // Especially early in Worm, PRT designations are capitalized; they should not be. This fixes the cases where we // can be reasonably sure they don't start a sentence, although more specific instances are done in @@ -553,64 +566,64 @@ function fixCapitalization(xml, book) { // This also over-de-capitalizes "The Stranger" in Ward (a titan name). Those also get fixed in substitutions.json. xml = xml.replace( // eslint-disable-next-line max-len - /(?|\n|: )(Mover|Shaker|Brute|Breaker|Tinker|Blaster|Thinker|Striker|Changer|Trump|Stranger|Shifter|Shaper)(?! [A-Z])/g, + /(?|\n|: )(Mover|Shaker|Brute|Breaker|Tinker|Blaster|Thinker|Striker|Changer|Trump|Stranger|Shifter|Shaper)(?! [A-Z])/ug, (_, designation) => designation.toLowerCase() ); xml = xml.replace( - /(mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)-(\d+)/gi, + /(mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)-(\d+)/ugi, "$1 $2" ); xml = xml.replace( // eslint-disable-next-line max-len - /(mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)[ -/](mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)/gi, + /(mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)[ -/](mover|shaker|brute|breaker|tinker|blaster|thinker|master|striker|changer|trump|stranger|shifter|shaper)/ugi, "$1–$2" ); // Capitalization is inconsistent, but shard names seems to usually be capitalized. - xml = xml.replace(/Grasping self/g, "Grasping Self"); - xml = xml.replace(/Cloven stranger/g, "Cloven Stranger"); - xml = xml.replace(/Princess shaper/g, "Princess Shaper"); - xml = xml.replace(/Fragile one/g, "Fragile One"); + xml = xml.replace(/Grasping self/ug, "Grasping Self"); + xml = xml.replace(/Cloven stranger/ug, "Cloven Stranger"); + xml = xml.replace(/Princess shaper/ug, "Princess Shaper"); + xml = xml.replace(/Fragile one/ug, "Fragile One"); // Place names need to always be capitalized - xml = xml.replace(/North end/g, "North End"); - xml = xml.replace(/(Stonemast|Shale) avenue/g, "$1 Avenue"); - xml = xml.replace(/(Lord|Slater) street/g, "$1 Street"); - xml = xml.replace(/(Hollow|Cedar) point/g, "$1 Point"); - xml = xml.replace(/(Norwalk|Fenway|Stratford) station/g, "$1 Station"); - xml = xml.replace(/the megalopolis/g, "the Megalopolis"); - xml = xml.replace(/earths(?![a-z])/g, "Earths"); + xml = xml.replace(/North end/ug, "North End"); + xml = xml.replace(/(Stonemast|Shale) avenue/ug, "$1 Avenue"); + xml = xml.replace(/(Lord|Slater) street/ug, "$1 Street"); + xml = xml.replace(/(Hollow|Cedar) point/ug, "$1 Point"); + xml = xml.replace(/(Norwalk|Fenway|Stratford) station/ug, "$1 Station"); + xml = xml.replace(/the megalopolis/ug, "the Megalopolis"); + xml = xml.replace(/earths(?![a-z])/ug, "Earths"); if (book === "ward") { - xml = xml.replace(/the bunker/g, "the Bunker"); - xml = xml.replace(/‘bunker’/g, "‘Bunker’"); + xml = xml.replace(/the bunker/ug, "the Bunker"); + xml = xml.replace(/‘bunker’/ug, "‘Bunker’"); } // "Mom" and "Dad" should be capitalized when used as a proper name. These regexps are tuned to catch a good amount of // instances, without over-correcting for non-proper-name-like cases. Many other instances are handled in // substitutions.json. - xml = xml.replace(/(?)Giants/g, "giants"); + xml = xml.replace(/(?<=Mathers |Goddess )giant/ug, "Giant"); + xml = xml.replace(/mother giant/uig, "Mother Giant"); + xml = xml.replace(/(?)Giants/ug, "giants"); return xml; } function fixMispellings(xml) { // This is commonly misspelled. - xml = xml.replace(/([Ss])houlderblade/g, "$1houlder blade"); + xml = xml.replace(/([Ss])houlderblade/ug, "$1houlder blade"); // All dictionaries agree this is capitalized. - xml = xml.replace(/u-turn/g, "U-turn"); + xml = xml.replace(/u-turn/ug, "U-turn"); // https://www.dictionary.com/browse/scot-free - xml = xml.replace(/scott(?: |-)free/g, "scot-free"); + xml = xml.replace(/scott(?: |-)free/ug, "scot-free"); - // https://grammarist.com/idiom/change-tack/ - xml = xml.replace(/changed tacks/g, "changed tack"); + // https://ugrammarist.com/idiom/change-tack/ + xml = xml.replace(/changed tacks/ug, "changed tack"); return xml; } @@ -657,110 +670,111 @@ function fixMispellings(xml) { function fixHyphens(xml) { // "X-year-old" should use hyphens; all grammar guides agree. The books are very inconsistent but most often omit // them. - xml = xml.replace(/(\w+)[ -]year[ -]old(s?)(?!\w)/g, "$1-year-old$2"); - xml = xml.replace(/(\w+) or (\w+)-year-old/g, "$1- or $2-year-old"); + xml = xml.replace(/(\w+)[ -]year[ -]old(s?)(?!\w)/ug, "$1-year-old$2"); + xml = xml.replace(/(\w+) or (\w+)-year-old/ug, "$1- or $2-year-old"); // Compound numbers from 11 through 99 must be hyphenated, but others should not be. xml = xml.replace( - /(? "Case " + caseNumber[0].toUpperCase() + caseNumber.substring(1)); + xml = xml.replace( + /(? `Case ${caseNumber[0].toUpperCase()}${caseNumber.substring(1)}` + ); return xml; } @@ -799,7 +815,7 @@ function isEmptyOrGarbage(el) { } function escapeRegExp(str) { - return str.replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&"); + return str.replace(/[[\]/{}()*+?.\\^$|]/ug, "\\$&"); } function decodeCloudFlareEmail(hash) { diff --git a/lib/convert.js b/lib/convert.js index 0f35b62..3a7ff9c 100644 --- a/lib/convert.js +++ b/lib/convert.js @@ -34,8 +34,8 @@ module.exports = async (cachePath, manifestPath, contentPath, book, concurrentJo warnings.push(...await pool.exec("convertChapter", [chapter, book, inputPath, outputPath])); - const time = String(Math.round((performance.now() - start) / 1000)).padStart(3) + " s"; - progress.increment({ time }); + const seconds = String(Math.round((performance.now() - start) / 1000)).padStart(3); + progress.increment({ time: `${seconds} s` }); })); pool.terminate(); diff --git a/lib/download.js b/lib/download.js index 268cadf..d835180 100644 --- a/lib/download.js +++ b/lib/download.js @@ -87,7 +87,7 @@ function getChapterTitle(rawChapterDoc) { // issues down the line where we remove spaces around em dashes during conversion.) In the future it might be nice to // have proper chapter titles, e.g. sections per arc with title pages and then just "1" or similar for the chapter. // Until then this is reasonable and uniform. - return rawChapterDoc.querySelector("h1.entry-title").textContent.replace(/ – /, " "); + return rawChapterDoc.querySelector("h1.entry-title").textContent.replace(/ – /u, " "); } function retry(times, fn) { @@ -113,7 +113,7 @@ async function downloadChapter(startingURL) { const refreshMeta = dom.window.document.querySelector("meta[http-equiv=refresh]"); if (refreshMeta) { - [, urlToFollow] = /\d+;url=(.*)/i.exec(refreshMeta.content); + [, urlToFollow] = /\d+;url=(.*)/ui.exec(refreshMeta.content); process.stdout.write(`\n Redirected to ${urlToFollow}... `); dom.window.close(); } else { diff --git a/lib/substitutions.json b/lib/substitutions.json index bf514bd..620dd47 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -2407,10 +2407,6 @@ { "before": "better pictures of mom", "after": "better pictures of Mom" - }, - { - "before": "five-hundred percent", - "after": "five hundred percent" } ], "https://parahumans.wordpress.com/2012/11/20/interlude-15/": [ diff --git a/lib/worm-scraper.js b/lib/worm-scraper.js index 4a63eef..c9579ab 100644 --- a/lib/worm-scraper.js +++ b/lib/worm-scraper.js @@ -14,7 +14,7 @@ const zip = require("./zip.js"); const OUTPUT_DEFAULT = "(Book name).epub"; -const argv = yargs +const { argv } = yargs .usage(`${packageJson.description}\n\n${packageJson.name} [ [ [ ...]]]\n\n` + "Each command will fail if the previously-listed one has not yet been run (with matching options).\n\n" + "Running with no commands is equivalent to running download convert scaffold zip.") @@ -61,8 +61,7 @@ const argv = yargs }) .recommendCommands() .help() - .version() - .argv; + .version(); const outputFilename = argv.out === OUTPUT_DEFAULT ? `${books[argv.book].title}.epub` : argv.out; @@ -82,7 +81,7 @@ if (argv._.length === 0) { } if (argv._.includes("download")) { - const startURL = books[argv.book].startURL; + const { startURL } = books[argv.book]; commands.push(() => download(startURL, cachePath, manifestPath)); } @@ -97,7 +96,13 @@ if (argv._.includes("convert")) { if (argv._.includes("scaffold")) { const bookInfo = books[argv.book]; commands.push(() => scaffold( - scaffoldingPath, coverPath, stagingPath, contentPath, chaptersPath, manifestPath, bookInfo + scaffoldingPath, + coverPath, + stagingPath, + contentPath, + chaptersPath, + manifestPath, + bookInfo )); } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 74408d3..722a5f7 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -20,12 +20,12 @@ "dev": true }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -67,10 +67,16 @@ } } }, + "@domenic/eslint-config": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@domenic/eslint-config/-/eslint-config-1.0.0.tgz", + "integrity": "sha512-dvvZlLdxkf2wv62z6c86FdWSr8nZOW2qkrD/PshGUNwad5k1la8grDV3XUwKZFSvmZcHT/+MEpw9gizSvnLc5g==", + "dev": true + }, "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -80,7 +86,7 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" } @@ -601,13 +607,13 @@ } }, "eslint": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz", - "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.2", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -618,7 +624,7 @@ "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", - "esquery": "^1.2.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", @@ -631,7 +637,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -744,9 +750,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -848,9 +854,9 @@ } }, "flatted": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "forever-agent": { @@ -1548,6 +1554,12 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "requisition": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/requisition/-/requisition-1.7.0.tgz", @@ -1735,15 +1747,35 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "table": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", - "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "dev": true, "requires": { - "ajv": "^6.12.4", + "ajv": "^7.0.2", "lodash": "^4.17.20", "slice-ansi": "^4.0.0", "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.0.tgz", + "integrity": "sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } } }, "tar-stream": { diff --git a/package.json b/package.json index e9a7a39..0d14658 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,8 @@ "yargs": "^16.2.0" }, "devDependencies": { - "eslint": "^7.16.0" + "eslint": "^7.20.0", + "@domenic/eslint-config": "^1.0.0" }, "engines": { "node": ">=12.10.0" From c860873d7811f423a01365ac6fba677e9a628570 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Mon, 15 Feb 2021 21:12:43 -0500 Subject: [PATCH 179/186] Update dependencies --- .github/workflows/test.yml | 2 +- npm-shrinkwrap.json | 36 ++++++++++++++++++------------------ package.json | 6 +++--- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ca341da..681c722 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v2 with: node-version: 14 diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 722a5f7..5be8f85 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -157,9 +157,9 @@ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "archiver": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.1.0.tgz", - "integrity": "sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz", + "integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==", "requires": { "archiver-utils": "^2.1.0", "async": "^3.2.0", @@ -270,9 +270,9 @@ } }, "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -346,9 +346,9 @@ } }, "cli-progress": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.8.2.tgz", - "integrity": "sha512-qRwBxLldMSfxB+YGFgNRaj5vyyHe1yMpVeDL79c+7puGujdKJHQHydgqXDcrkvQgJ5U/d3lpf6vffSoVVUftVQ==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", + "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", "requires": { "colors": "^1.1.2", "string-width": "^4.2.0" @@ -437,9 +437,9 @@ } }, "crc32-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz", - "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "requires": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -1779,9 +1779,9 @@ } }, "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -1969,9 +1969,9 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "workerpool": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.3.tgz", - "integrity": "sha512-meU8ZzO+ipcx/njxtKUcbu2K95085q5WYDo8fR6PMW3hCY4driteIsNsEowYV7dzOtvq0HotUKsReJkK8gKXgg==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" }, "wrap-ansi": { "version": "7.0.0", diff --git a/package.json b/package.json index 0d14658..4119b1f 100644 --- a/package.json +++ b/package.json @@ -23,12 +23,12 @@ "lint": "eslint lib" }, "dependencies": { - "archiver": "^5.1.0", - "cli-progress": "^3.8.2", + "archiver": "^5.2.0", + "cli-progress": "^3.9.0", "cpr": "^3.0.1", "jsdom": "^16.4.0", "requisition": "^1.5.0", - "workerpool": "^6.0.3", + "workerpool": "^6.1.0", "yargs": "^16.2.0" }, "devDependencies": { From 12394da3346dfd68ff295ad6206b6125e6b4a57e Mon Sep 17 00:00:00 2001 From: Evan Young Date: Sat, 22 Jan 2022 13:39:12 -0500 Subject: [PATCH 180/186] Fix failure on convert in modern Node.js Closes #30. --- lib/worm-scraper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/worm-scraper.js b/lib/worm-scraper.js index c9579ab..5f34617 100644 --- a/lib/worm-scraper.js +++ b/lib/worm-scraper.js @@ -87,7 +87,7 @@ if (argv._.includes("download")) { if (argv._.includes("convert")) { commands.push(() => { - return fs.rmdir(chaptersPath, { recursive: true, maxRetries: 3 }) + return fs.rm(chaptersPath, { force: true, recursive: true, maxRetries: 3 }) .then(() => fs.mkdir(chaptersPath, { recursive: true })) .then(() => convert(cachePath, manifestPath, chaptersPath, argv.book, argv.jobs)); }); From ac56d1c4c73fb71001732310ee43b712f4f2364d Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 22 Jan 2022 14:01:50 -0500 Subject: [PATCH 181/186] Update dependencies and minimum Node --- .github/workflows/test.yml | 2 +- README.md | 2 +- npm-shrinkwrap.json | 3541 +++++++++++++++++++++++++++--------- package.json | 16 +- 4 files changed, 2666 insertions(+), 895 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 681c722..a801689 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/setup-node@v2 with: - node-version: 14 + node-version: 16 - run: npm install diff --git a/README.md b/README.md index ce27d97..56aff60 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Scrapes the web serial [_Worm_](https://parahumans.wordpress.com/) and its seque ## How to use -First you'll need a modern version of [Node.js](https://nodejs.org/en/). Install whatever is current (not LTS); at least v12.10.0 is necessary. +First you'll need a modern version of [Node.js](https://nodejs.org/en/). At least v16.13.2 is necessary. Then, open a terminal ([Mac documentation](http://blog.teamtreehouse.com/introduction-to-the-mac-os-x-command-line), [Windows documentation](http://www.howtogeek.com/235101/10-ways-to-open-the-command-prompt-in-windows-10/)) and install the program by typing diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 5be8f85..03105f7 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,105 +1,2254 @@ { "name": "worm-scraper", "version": "4.12.1", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" + "packages": { + "": { + "name": "worm-scraper", + "version": "4.12.1", + "license": "WTFPL", + "dependencies": { + "archiver": "^5.3.0", + "cli-progress": "^3.10.0", + "cpr": "^3.0.1", + "jsdom": "^19.0.0", + "requisition": "^1.5.0", + "workerpool": "^6.2.0", + "yargs": "^17.3.1" + }, + "bin": { + "worm-scraper": "lib/worm-scraper.js" + }, + "devDependencies": { + "@domenic/eslint-config": "^2.0.0", + "eslint": "^8.7.0" + }, + "engines": { + "node": ">=12.10.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "node_modules/@domenic/eslint-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@domenic/eslint-config/-/eslint-config-2.0.0.tgz", + "integrity": "sha512-8y5OfzEbMLPqKxku8itEDxJOi7HrRzP1vhgJs7+XpjJOpiyHLGZ2vhpyA9ZmYwVak04er72PpPSSYvd8TUF09Q==", + "dev": true, + "peerDependencies": { + "eslint": "^8.7.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "@babel/highlight": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", - "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "node_modules/archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "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" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "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" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-progress": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", + "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/cookie": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.2.4.tgz", + "integrity": "sha1-qMFVqnubLPLE0y68e5oKoojMxr0=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cpr": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cpr/-/cpr-3.0.1.tgz", + "integrity": "sha1-uaVQOLfNgaNcF7l2GJW9hJau8eU=", + "dependencies": { + "graceful-fs": "^4.1.5", + "minimist": "^1.2.0", + "mkdirp": "~0.5.1", + "rimraf": "^2.5.4" + }, + "bin": { + "cpr": "bin/cpr" + } + }, + "node_modules/crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/data-urls": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz", + "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", + "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-cp": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/fs-cp/-/fs-cp-1.4.0.tgz", + "integrity": "sha1-XbGvWtPw3AyBhXblLdKUEeitDGU=", + "dependencies": { + "any-promise": "^1.1.0", + "destroy": "^1.0.0", + "mkdirp-then": "^1.0.0", + "mz": "^2.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memorizer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/memorizer/-/memorizer-1.0.1.tgz", + "integrity": "sha1-/yGCKzCTlbqhzHqCTOGaE1zBFEc=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-then": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mkdirp-then/-/mkdirp-then-1.2.0.tgz", + "integrity": "sha1-pJLIecpNhz9e5FAI+PVf0BUN48U=", + "dependencies": { + "any-promise": "^1.1.0", + "mkdirp": "^0.5.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-link-header": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-0.4.1.tgz", + "integrity": "sha1-9r1hXcZxP9QJNc6XlF5NP1Iu3xQ=", + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requisition": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/requisition/-/requisition-1.7.0.tgz", + "integrity": "sha1-P5n7S0W9e2JiGMeKF2MFGrWTow0=", + "dependencies": { + "any-promise": "^1.1.0", + "cookie": "^0.2.3", + "destroy": "^1.0.3", + "fs-cp": "^1.2.0", + "http-errors": "^1.2.7", + "media-typer": "^0.3.0", + "memorizer": "^1.0.0", + "methods": "^1.1.0", + "mime-types": "^2.0.2", + "mz": "^2.1.0", + "parse-link-header": "^0.4.1", + "statuses": "^1.2.0", + "stream-to-array": "^2.0.2", + "temp-path": "^1.0.0", + "type-is": "^1.5.2" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", + "dependencies": { + "any-promise": "^1.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", + "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + }, + "dependencies": { + "@domenic/eslint-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@domenic/eslint-config/-/eslint-config-2.0.0.tgz", + "integrity": "sha512-8y5OfzEbMLPqKxku8itEDxJOi7HrRzP1vhgJs7+XpjJOpiyHLGZ2vhpyA9ZmYwVak04er72PpPSSYvd8TUF09Q==", + "dev": true, + "requires": {} + }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true } } }, - "@domenic/eslint-config": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@domenic/eslint-config/-/eslint-config-1.0.0.tgz", - "integrity": "sha512-dvvZlLdxkf2wv62z6c86FdWSr8nZOW2qkrD/PshGUNwad5k1la8grDV3XUwKZFSvmZcHT/+MEpw9gizSvnLc5g==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", - "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", "dev": true, "requires": { - "ajv": "^6.12.4", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "minimatch": "^3.0.4" } }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, "acorn-globals": { "version": "6.0.0", @@ -108,23 +2257,40 @@ "requires": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } } }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -132,16 +2298,10 @@ "uri-js": "^4.2.2" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -157,17 +2317,17 @@ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "archiver": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz", - "integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", "requires": { "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.1.4", - "zip-stream": "^4.0.4" + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" } }, "archiver-utils": { @@ -200,75 +2360,48 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -313,44 +2446,21 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "cli-progress": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", - "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", + "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", "requires": { - "colors": "^1.1.2", "string-width": "^4.2.0" } }, @@ -377,11 +2487,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -391,12 +2496,12 @@ } }, "compress-commons": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz", - "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "requires": { "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.1", + "crc32-stream": "^4.0.2", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" } @@ -412,9 +2517,9 @@ "integrity": "sha1-qMFVqnubLPLE0y68e5oKoojMxr0=" }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cpr": { "version": "3.0.1", @@ -457,9 +2562,9 @@ } }, "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" }, "cssstyle": { "version": "2.3.0", @@ -476,42 +2581,33 @@ } } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz", + "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==", "requires": { "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0" } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } }, "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "delayed-stream": { "version": "1.0.0", @@ -538,27 +2634,11 @@ } }, "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "webidl-conversions": "^7.0.0" } }, "emoji-regex": { @@ -574,174 +2654,151 @@ "once": "^1.4.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "requires": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" - } - }, - "eslint": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", - "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.3.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" }, "dependencies": { "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" } }, "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { - "prelude-ls": "^1.2.1" + "prelude-ls": "~1.1.2" } } } }, + "eslint": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", + "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", "dev": true, "requires": { - "acorn": "^7.4.0", + "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "eslint-visitor-keys": "^3.1.0" } }, "esprima": { @@ -756,14 +2813,6 @@ "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } } }, "esrecurse": { @@ -773,20 +2822,12 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "esutils": { "version": "2.0.3", @@ -798,25 +2839,17 @@ "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -824,9 +2857,9 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" @@ -854,23 +2887,18 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, @@ -906,18 +2934,10 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -928,84 +2948,79 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "requires": { - "whatwg-encoding": "^1.0.5" + "whatwg-encoding": "^2.0.0" } }, "http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "requires": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" } }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "ieee754": { @@ -1014,9 +3029,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { @@ -1049,11 +3064,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1066,23 +3076,18 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, "isarray": { "version": "1.0.0", @@ -1095,74 +3100,54 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", + "abab": "^2.0.5", + "acorn": "^8.5.0", "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", + "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" } }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -1170,26 +3155,10 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "requires": { "readable-stream": "^2.0.5" }, @@ -1207,23 +3176,32 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -1244,25 +3222,17 @@ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1279,16 +3249,16 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.51.0" } }, "minimatch": { @@ -1324,8 +3294,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mz": { "version": "2.7.0", @@ -1353,11 +3322,6 @@ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1372,16 +3336,17 @@ } }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, "parent-module": { @@ -1402,9 +3367,9 @@ } }, "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "path-is-absolute": { "version": "1.0.1", @@ -1417,15 +3382,11 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true }, "printj": { "version": "1.1.2", @@ -1437,12 +3398,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -1453,11 +3408,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -1477,89 +3427,16 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, "requisition": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/requisition/-/requisition-1.7.0.tgz", @@ -1597,9 +3474,9 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -1614,15 +3491,6 @@ "xmlchars": "^2.2.0" } }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -1643,55 +3511,17 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, "stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -1700,30 +3530,30 @@ "any-promise": "^1.1.0" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-json-comments": { @@ -1733,12 +3563,12 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "symbol-tree": { @@ -1746,38 +3576,6 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, - "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", - "dev": true, - "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ajv": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.0.tgz", - "integrity": "sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, "tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", @@ -1818,53 +3616,41 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" } }, "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "requires": { "punycode": "^2.1.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { @@ -1876,10 +3662,16 @@ "mime-types": "~2.1.24" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -1889,27 +3681,12 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -1919,39 +3696,38 @@ } }, "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", "requires": { - "xml-name-validator": "^3.0.0" + "xml-name-validator": "^4.0.0" } }, "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" }, "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "requires": { - "iconv-lite": "0.4.24" + "iconv-lite": "0.6.3" } }, "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" }, "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" } }, "which": { @@ -1969,9 +3745,9 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" }, "wrap-ansi": { "version": "7.0.0", @@ -1989,14 +3765,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", - "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "requires": {} }, "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==" }, "xmlchars": { "version": "2.2.0", @@ -2009,42 +3786,36 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" }, "zip-stream": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz", - "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "requires": { "archiver-utils": "^2.1.0", - "compress-commons": "^4.0.2", + "compress-commons": "^4.1.0", "readable-stream": "^3.6.0" } } diff --git a/package.json b/package.json index 4119b1f..547e704 100644 --- a/package.json +++ b/package.json @@ -23,19 +23,19 @@ "lint": "eslint lib" }, "dependencies": { - "archiver": "^5.2.0", - "cli-progress": "^3.9.0", + "archiver": "^5.3.0", + "cli-progress": "^3.10.0", "cpr": "^3.0.1", - "jsdom": "^16.4.0", + "jsdom": "^19.0.0", "requisition": "^1.5.0", - "workerpool": "^6.1.0", - "yargs": "^16.2.0" + "workerpool": "^6.2.0", + "yargs": "^17.3.1" }, "devDependencies": { - "eslint": "^7.20.0", - "@domenic/eslint-config": "^1.0.0" + "eslint": "^8.7.0", + "@domenic/eslint-config": "^2.0.0" }, "engines": { - "node": ">=12.10.0" + "node": ">=16.13.2" } } From 7c9d96578b65755f428f9980fa8b1282c9cc33bb Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 22 Jan 2022 18:40:35 -0500 Subject: [PATCH 182/186] Use minipass-fetch instead of requisition Requisition appears to be unmaintained and causes security alerts upon installation. --- lib/download.js | 4 +- npm-shrinkwrap.json | 491 +++++++++++--------------------------------- package.json | 6 +- 3 files changed, 121 insertions(+), 380 deletions(-) diff --git a/lib/download.js b/lib/download.js index d835180..da438bc 100644 --- a/lib/download.js +++ b/lib/download.js @@ -1,7 +1,7 @@ "use strict"; const path = require("path"); const fs = require("fs").promises; -const request = require("requisition"); +const fetch = require("minipass-fetch"); const { JSDOM } = require("jsdom"); const FILENAME_PREFIX = "chapter"; @@ -126,7 +126,7 @@ async function downloadChapter(startingURL) { function downloadWithRetry(url) { return retry(3, async () => { - const response = await request(url).redirects(10); + const response = await fetch(url); if (response.status !== 200) { throw new Error(`Response status for ${url} was ${response.status}`); } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 03105f7..b876a16 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -13,7 +13,7 @@ "cli-progress": "^3.10.0", "cpr": "^3.0.1", "jsdom": "^19.0.0", - "requisition": "^1.5.0", + "minipass-fetch": "^1.4.1", "workerpool": "^6.2.0", "yargs": "^17.3.1" }, @@ -25,7 +25,7 @@ "eslint": "^8.7.0" }, "engines": { - "node": ">=12.10.0" + "node": ">=16.13.2" } }, "node_modules/@domenic/eslint-config": { @@ -196,11 +196,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, "node_modules/archiver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", @@ -452,14 +447,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/cookie": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.2.4.tgz", - "integrity": "sha1-qMFVqnubLPLE0y68e5oKoojMxr0=", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -588,19 +575,6 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -629,6 +603,15 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -981,17 +964,6 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, - "node_modules/fs-cp": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/fs-cp/-/fs-cp-1.4.0.tgz", - "integrity": "sha1-XbGvWtPw3AyBhXblLdKUEeitDGU=", - "dependencies": { - "any-promise": "^1.1.0", - "destroy": "^1.0.0", - "mkdirp-then": "^1.0.0", - "mz": "^2.0.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1082,21 +1054,6 @@ "node": ">=12" } }, - "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -1396,27 +1353,6 @@ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memorizer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/memorizer/-/memorizer-1.0.1.tgz", - "integrity": "sha1-/yGCKzCTlbqhzHqCTOGaE1zBFEc=" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", @@ -1452,6 +1388,56 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -1463,30 +1449,11 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp-then": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mkdirp-then/-/mkdirp-then-1.2.0.tgz", - "integrity": "sha1-pJLIecpNhz9e5FAI+PVf0BUN48U=", - "dependencies": { - "any-promise": "^1.1.0", - "mkdirp": "^0.5.0" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -1506,14 +1473,6 @@ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1551,14 +1510,6 @@ "node": ">=6" } }, - "node_modules/parse-link-header": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-0.4.1.tgz", - "integrity": "sha1-9r1hXcZxP9QJNc6XlF5NP1Iu3xQ=", - "dependencies": { - "xtend": "~4.0.0" - } - }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -1660,28 +1611,6 @@ "node": ">=0.10.0" } }, - "node_modules/requisition": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/requisition/-/requisition-1.7.0.tgz", - "integrity": "sha1-P5n7S0W9e2JiGMeKF2MFGrWTow0=", - "dependencies": { - "any-promise": "^1.1.0", - "cookie": "^0.2.3", - "destroy": "^1.0.3", - "fs-cp": "^1.2.0", - "http-errors": "^1.2.7", - "media-typer": "^0.3.0", - "memorizer": "^1.0.0", - "methods": "^1.1.0", - "mime-types": "^2.0.2", - "mz": "^2.1.0", - "parse-link-header": "^0.4.1", - "statuses": "^1.2.0", - "stream-to-array": "^2.0.2", - "temp-path": "^1.0.0", - "type-is": "^1.5.2" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -1737,11 +1666,6 @@ "node": ">=10" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -1772,22 +1696,6 @@ "node": ">=0.10.0" } }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-to-array": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", - "dependencies": { - "any-promise": "^1.1.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -1864,44 +1772,12 @@ "node": ">=6" } }, - "node_modules/temp-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", - "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=" - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -1950,18 +1826,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -2130,14 +1994,6 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -2146,6 +2002,11 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/yargs": { "version": "17.3.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", @@ -2311,11 +2172,6 @@ "color-convert": "^2.0.1" } }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, "archiver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", @@ -2511,11 +2367,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "cookie": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.2.4.tgz", - "integrity": "sha1-qMFVqnubLPLE0y68e5oKoojMxr0=" - }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -2614,16 +2465,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2646,6 +2487,15 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2907,17 +2757,6 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, - "fs-cp": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/fs-cp/-/fs-cp-1.4.0.tgz", - "integrity": "sha1-XbGvWtPw3AyBhXblLdKUEeitDGU=", - "requires": { - "any-promise": "^1.1.0", - "destroy": "^1.0.0", - "mkdirp-then": "^1.0.0", - "mz": "^2.0.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2984,18 +2823,6 @@ "whatwg-encoding": "^2.0.0" } }, - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - } - }, "http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -3233,21 +3060,6 @@ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memorizer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/memorizer/-/memorizer-1.0.1.tgz", - "integrity": "sha1-/yGCKzCTlbqhzHqCTOGaE1zBFEc=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", @@ -3274,6 +3086,42 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -3282,30 +3130,11 @@ "minimist": "^1.2.5" } }, - "mkdirp-then": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mkdirp-then/-/mkdirp-then-1.2.0.tgz", - "integrity": "sha1-pJLIecpNhz9e5FAI+PVf0BUN48U=", - "requires": { - "any-promise": "^1.1.0", - "mkdirp": "^0.5.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -3322,11 +3151,6 @@ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3358,14 +3182,6 @@ "callsites": "^3.0.0" } }, - "parse-link-header": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-0.4.1.tgz", - "integrity": "sha1-9r1hXcZxP9QJNc6XlF5NP1Iu3xQ=", - "requires": { - "xtend": "~4.0.0" - } - }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -3437,28 +3253,6 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "requisition": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/requisition/-/requisition-1.7.0.tgz", - "integrity": "sha1-P5n7S0W9e2JiGMeKF2MFGrWTow0=", - "requires": { - "any-promise": "^1.1.0", - "cookie": "^0.2.3", - "destroy": "^1.0.3", - "fs-cp": "^1.2.0", - "http-errors": "^1.2.7", - "media-typer": "^0.3.0", - "memorizer": "^1.0.0", - "methods": "^1.1.0", - "mime-types": "^2.0.2", - "mz": "^2.1.0", - "parse-link-header": "^0.4.1", - "statuses": "^1.2.0", - "stream-to-array": "^2.0.2", - "temp-path": "^1.0.0", - "type-is": "^1.5.2" - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3491,11 +3285,6 @@ "xmlchars": "^2.2.0" } }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3517,19 +3306,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stream-to-array": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", - "requires": { - "any-promise": "^1.1.0" - } - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -3588,38 +3364,12 @@ "readable-stream": "^3.1.1" } }, - "temp-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", - "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=" - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, "tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -3653,15 +3403,6 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -3780,16 +3521,16 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "yargs": { "version": "17.3.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", diff --git a/package.json b/package.json index 547e704..98febd1 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,13 @@ "cli-progress": "^3.10.0", "cpr": "^3.0.1", "jsdom": "^19.0.0", - "requisition": "^1.5.0", + "minipass-fetch": "^1.4.1", "workerpool": "^6.2.0", "yargs": "^17.3.1" }, "devDependencies": { - "eslint": "^8.7.0", - "@domenic/eslint-config": "^2.0.0" + "@domenic/eslint-config": "^2.0.0", + "eslint": "^8.7.0" }, "engines": { "node": ">=16.13.2" From 43a80d5dd9cb56921e4c37e3d23d0d0624338f4f Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 22 Jan 2022 18:50:33 -0500 Subject: [PATCH 183/186] 5.0.0 --- npm-shrinkwrap.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index b876a16..27ed442 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { "name": "worm-scraper", - "version": "4.12.1", + "version": "5.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "worm-scraper", - "version": "4.12.1", + "version": "5.0.0", "license": "WTFPL", "dependencies": { "archiver": "^5.3.0", diff --git a/package.json b/package.json index 98febd1..8a1e3cd 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "4.12.1", + "version": "5.0.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper", From 752c4c39167e1645c665ffd37dffa7b57adf6db8 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 28 May 2022 15:19:24 -0400 Subject: [PATCH 184/186] Update dependencies --- npm-shrinkwrap.json | 551 +++++++++++++++++++++----------------------- package.json | 12 +- 2 files changed, 266 insertions(+), 297 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 27ed442..c26681d 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -9,20 +9,20 @@ "version": "5.0.0", "license": "WTFPL", "dependencies": { - "archiver": "^5.3.0", - "cli-progress": "^3.10.0", + "archiver": "^5.3.1", + "cli-progress": "^3.11.1", "cpr": "^3.0.1", "jsdom": "^19.0.0", - "minipass-fetch": "^1.4.1", - "workerpool": "^6.2.0", - "yargs": "^17.3.1" + "minipass-fetch": "^2.1.0", + "workerpool": "^6.2.1", + "yargs": "^17.5.1" }, "bin": { "worm-scraper": "lib/worm-scraper.js" }, "devDependencies": { "@domenic/eslint-config": "^2.0.0", - "eslint": "^8.7.0" + "eslint": "^8.16.0" }, "engines": { "node": ">=16.13.2" @@ -38,38 +38,29 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -95,14 +86,14 @@ } }, "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "bin": { "acorn": "bin/acorn" }, @@ -197,12 +188,12 @@ } }, "node_modules/archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", "dependencies": { "archiver-utils": "^2.1.0", - "async": "^3.2.0", + "async": "^3.2.3", "buffer-crc32": "^0.2.1", "readable-stream": "^3.6.0", "readdir-glob": "^1.0.0", @@ -274,7 +265,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/balanced-match": { "version": "1.0.2", @@ -350,7 +341,7 @@ "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "engines": { "node": "*" } @@ -381,11 +372,11 @@ } }, "node_modules/cli-progress": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", - "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.11.1.tgz", + "integrity": "sha512-TTMA2LHrYaZeNMcgZGO10oYqj9hvd03pltNtVbu4ddeyDTHlYV7gWxsFiuvaQlgwMBFCv1TukcjiODWFlb16tQ==", "dependencies": { - "string-width": "^4.2.0" + "string-width": "^4.2.3" }, "engines": { "node": ">=4" @@ -445,7 +436,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/core-util-is": { "version": "1.0.3", @@ -455,7 +446,7 @@ "node_modules/cpr": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cpr/-/cpr-3.0.1.tgz", - "integrity": "sha1-uaVQOLfNgaNcF7l2GJW9hJau8eU=", + "integrity": "sha512-Xch4PXQ/KC8lJ+KfJ9JI6eG/nmppLrPPWg5Q+vh65Qr9EjuJEubxh/H/Le1TmCZ7+Xv7iJuNRqapyOFZB+wsxA==", "dependencies": { "graceful-fs": "^4.1.5", "minimist": "^1.2.0", @@ -467,13 +458,9 @@ } }, "node_modules/crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - }, + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "bin": { "crc32": "bin/crc32.njs" }, @@ -529,22 +516,34 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "node_modules/data-urls": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz", - "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dependencies": { - "abab": "^2.0.3", + "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^10.0.0" + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { "node": ">=12" } }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -570,7 +569,7 @@ "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } @@ -709,12 +708,12 @@ } }, "node_modules/eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz", + "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -722,17 +721,17 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -741,7 +740,7 @@ "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", @@ -761,9 +760,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -801,23 +800,23 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -875,14 +874,6 @@ "node": ">=0.10.0" } }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -898,7 +889,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/file-entry-cache": { "version": "6.0.1", @@ -941,9 +932,9 @@ } }, "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "node_modules/form-data": { @@ -967,12 +958,12 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "node_modules/get-caller-file": { @@ -984,14 +975,14 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -1015,9 +1006,9 @@ } }, "node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1030,9 +1021,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/has-flag": { "version": "4.0.0", @@ -1068,9 +1059,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { "agent-base": "6", "debug": "4" @@ -1354,28 +1345,28 @@ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1384,9 +1375,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minipass": { "version": "3.1.6", @@ -1400,19 +1391,19 @@ } }, "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dependencies": { - "minipass": "^3.1.0", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" } }, "node_modules/minipass-sized": { @@ -1439,11 +1430,11 @@ } }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -1541,17 +1532,6 @@ "node": ">= 0.8.0" } }, - "node_modules/printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "bin": { - "printj": "bin/printj.njs" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1936,9 +1916,9 @@ } }, "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -1962,9 +1942,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "engines": { "node": ">=10.0.0" }, @@ -2008,9 +1988,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -2025,9 +2005,9 @@ } }, "node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "engines": { "node": ">=12" } @@ -2055,34 +2035,26 @@ "requires": {} }, "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } } }, "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -2102,14 +2074,14 @@ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" }, "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" }, "acorn-globals": { "version": "6.0.0", @@ -2173,12 +2145,12 @@ } }, "archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", "requires": { "archiver-utils": "^2.1.0", - "async": "^3.2.0", + "async": "^3.2.3", "buffer-crc32": "^0.2.1", "readable-stream": "^3.6.0", "readdir-glob": "^1.0.0", @@ -2246,7 +2218,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "balanced-match": { "version": "1.0.2", @@ -2294,7 +2266,7 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" }, "callsites": { "version": "3.1.0", @@ -2313,11 +2285,11 @@ } }, "cli-progress": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", - "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.11.1.tgz", + "integrity": "sha512-TTMA2LHrYaZeNMcgZGO10oYqj9hvd03pltNtVbu4ddeyDTHlYV7gWxsFiuvaQlgwMBFCv1TukcjiODWFlb16tQ==", "requires": { - "string-width": "^4.2.0" + "string-width": "^4.2.3" } }, "cliui": { @@ -2365,7 +2337,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "core-util-is": { "version": "1.0.3", @@ -2375,7 +2347,7 @@ "cpr": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cpr/-/cpr-3.0.1.tgz", - "integrity": "sha1-uaVQOLfNgaNcF7l2GJW9hJau8eU=", + "integrity": "sha512-Xch4PXQ/KC8lJ+KfJ9JI6eG/nmppLrPPWg5Q+vh65Qr9EjuJEubxh/H/Le1TmCZ7+Xv7iJuNRqapyOFZB+wsxA==", "requires": { "graceful-fs": "^4.1.5", "minimist": "^1.2.0", @@ -2384,13 +2356,9 @@ } }, "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" }, "crc32-stream": { "version": "4.0.2", @@ -2433,19 +2401,30 @@ } }, "data-urls": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz", - "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "requires": { - "abab": "^2.0.3", + "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^10.0.0" + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -2463,7 +2442,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "doctrine": { "version": "3.0.0", @@ -2565,12 +2544,12 @@ } }, "eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz", + "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -2578,17 +2557,17 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -2597,7 +2576,7 @@ "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", @@ -2608,9 +2587,9 @@ } }, "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -2635,20 +2614,20 @@ } }, "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" } }, "esprima": { @@ -2684,11 +2663,6 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2704,7 +2678,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "file-entry-cache": { "version": "6.0.1", @@ -2737,9 +2711,9 @@ } }, "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "form-data": { @@ -2760,12 +2734,12 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "get-caller-file": { @@ -2774,14 +2748,14 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -2796,18 +2770,18 @@ } }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "has-flag": { "version": "4.0.0", @@ -2834,9 +2808,9 @@ } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "requires": { "agent-base": "6", "debug": "4" @@ -3061,30 +3035,30 @@ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { "version": "3.1.6", @@ -3095,14 +3069,14 @@ } }, "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", + "encoding": "^0.1.13", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" } }, "minipass-sized": { @@ -3123,11 +3097,11 @@ } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "ms": { @@ -3204,11 +3178,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -3486,9 +3455,9 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" }, "wrap-ansi": { "version": "7.0.0", @@ -3506,9 +3475,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "requires": {} }, "xml-name-validator": { @@ -3532,9 +3501,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -3546,9 +3515,9 @@ } }, "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" }, "zip-stream": { "version": "4.1.0", diff --git a/package.json b/package.json index 8a1e3cd..b0be3a5 100644 --- a/package.json +++ b/package.json @@ -23,17 +23,17 @@ "lint": "eslint lib" }, "dependencies": { - "archiver": "^5.3.0", - "cli-progress": "^3.10.0", + "archiver": "^5.3.1", + "cli-progress": "^3.11.1", "cpr": "^3.0.1", "jsdom": "^19.0.0", - "minipass-fetch": "^1.4.1", - "workerpool": "^6.2.0", - "yargs": "^17.3.1" + "minipass-fetch": "^2.1.0", + "workerpool": "^6.2.1", + "yargs": "^17.5.1" }, "devDependencies": { "@domenic/eslint-config": "^2.0.0", - "eslint": "^8.7.0" + "eslint": "^8.16.0" }, "engines": { "node": ">=16.13.2" From b25a0d3a65e56a3dcf6d2fdc058fd0a55bf1f39f Mon Sep 17 00:00:00 2001 From: Santiago Arambillete Date: Sat, 28 May 2022 19:02:34 -0300 Subject: [PATCH 185/186] Add some fixes for Worm --- lib/convert-worker.js | 3 ++ lib/substitutions.json | 99 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 101 insertions(+), 1 deletion(-) diff --git a/lib/convert-worker.js b/lib/convert-worker.js index dede819..f9f2b5f 100644 --- a/lib/convert-worker.js +++ b/lib/convert-worker.js @@ -395,6 +395,9 @@ function standardizeNames(xml) { // Thousands of instances of Tattletale to 4 instances of Tatteltale xml = xml.replace(/Tatteltale/ug, "Tattletale"); + // 73 instances of Über to 2 of Uber + xml = xml.replace(/Uber/ug, "Über"); + return xml; } diff --git a/lib/substitutions.json b/lib/substitutions.json index 620dd47..b73f8c2 100644 --- a/lib/substitutions.json +++ b/lib/substitutions.json @@ -101,6 +101,10 @@ "before": "I felt painfully conspicuous", "after": "I felt painfully conspicuous." }, + { + "before": "Justin Beiber", + "after": "Justin Bieber" + }, { "before": "Lisa said. “Entire", "after": "Lisa said, “entire" @@ -861,6 +865,10 @@ } ], "https://parahumans.wordpress.com/2012/03/08/interlude-7%C2%BD-bonus/": [ + { + "before": "she been blossoming", + "after": "she had been blossoming" + }, { "before": "Get Ready!", "after": "Get ready!" @@ -1808,6 +1816,10 @@ "before": "Charlotte,” I frowned. “Look", "after": "Charlotte,” I frowned, “look" }, + { + "before": "non-sequitor", + "after": "non-sequitur" + }, { "before": "Did they… was he", "after": "Did they… Was he" @@ -2177,6 +2189,11 @@ { "before": "Grue,” Trickster said. “Get", "after": "Grue,” Trickster said, “get" + }, + { + "before": "Nothing she can’t do outside the bubble", + "after": "Nothing she can do outside the bubble", + "_comment": "This doesn't make sense logically with 'can’t'." } ], "https://parahumans.wordpress.com/2012/08/18/snare-13-7/": [ @@ -2308,6 +2325,11 @@ } ], "https://parahumans.wordpress.com/2012/10/20/colony-15-2/": [ + { + "before": "turned something", + "after": "taken something", + "_comment": "'turned' is repeated later in the sentence." + }, { "before": "on,” Tattletale said. “Let’s", "after": "on,” Tattletale said, “let’s" @@ -2318,6 +2340,11 @@ } ], "https://parahumans.wordpress.com/2012/10/23/colony-15-3/": [ + { + "before": "whether or not I agreed or not", + "after": "whether I agreed or not", + "_comment": "Alternatively, the second 'or not' could be deleted instead of the first." + }, { "before": "Woah,” Regent said. “Relax", "after": "Woah,” Regent said, “relax" @@ -2329,6 +2356,11 @@ { "before": "the street

    ", "after": "the street.

    " + }, + { + "before": "dishonest members", + "after": "dishonest member", + "_comment": "He's talking only about Skitter here." } ], "https://parahumans.wordpress.com/2012/10/27/colony-15-4/": [ @@ -2485,6 +2517,11 @@ { "before": "decisions: Holding back", "after": "decisions: holding back" + }, + { + "before": "their positioning, they had planned this", + "after": "their positioning… They had planned this", + "_comment": "A comma seems like the wrong choice here." } ], "https://parahumans.wordpress.com/2012/12/22/monarch-16-9/": [ @@ -2593,6 +2630,11 @@ { "before": "GWER-.

    ", "after": "GWER—.

    " + }, + { + "before": "the Birdcage", + "after": "the birdcage", + "_comment": "A literal birdcage, not the parahuman prison." } ], "https://parahumans.wordpress.com/2013/01/12/migration-17-5/": [ @@ -2758,6 +2800,10 @@ } ], "https://parahumans.wordpress.com/2013/02/05/monarch-18-6/": [ + { + "before": "he encouragement", + "after": "the encouragement" + }, { "before": "‘okay’", "after": "‘OK’", @@ -3032,6 +3078,10 @@ } ], "https://parahumans.wordpress.com/2013/03/23/chrysalis-20-2/": [ + { + "before": "something together something", + "after": "something together" + }, { "before": "of anxiety
    .", "after": "of anxiety.
    " @@ -3305,6 +3355,10 @@ } ], "https://parahumans.wordpress.com/2013/05/21/interlude-22-donation-bonus-1/": [ + { + "before": "Sumimasen deshita", + "after": "Sumimasen deshita" + }, { "before": "“is it reassuring", "after": "“Is it reassuring" @@ -3337,6 +3391,10 @@ "before": "of the ship. It’s", "after": "of the ship.’ It’s" }, + { + "before": "supervillain-turned hero", + "after": "supervillain-turned-hero" + }, { "before": "Las Vegas Rogue", "after": "Las Vegas rogue" @@ -3359,6 +3417,10 @@ } ], "https://parahumans.wordpress.com/2013/05/30/drone-23-3/": [ + { + "before": "nerf", + "after": "Nerf" + }, { "before": "Nine,” Glenn said. “I", "after": "Nine,” Glenn said, “I" @@ -3370,6 +3432,10 @@ } ], "https://parahumans.wordpress.com/2013/06/01/drone-23-4/": [ + { + "before": "FIrst", + "after": "First" + }, { "before": "said. Someone", "after": "said. “Someone" @@ -3386,6 +3452,10 @@ } ], "https://parahumans.wordpress.com/2013/06/06/interlude-23/": [ + { + "before": "one—or two-word", + "after": "one- or two-word" + }, { "before": "her mouth: A click", "after": "her mouth: a click" @@ -3485,6 +3555,15 @@ } ], "https://parahumans.wordpress.com/2013/07/02/scarab-25-2/": [ + { + "before": "Enough or three", + "after": "Enough for three" + }, + { + "before": "—3", + "after": "-3", + "_comment": "This is a computer display and thus probably uses a regular hyphen for the minus sign." + }, { "before": "said. Except without", "after": "said. “Except without" @@ -3560,6 +3639,11 @@ { "before": "Lord Walston", "after": "Lord Walston" + }, + { + "before": "—16", + "after": "-16", + "_comment": "This is a computer display and thus probably uses a regular hyphen for the minus sign." } ], "https://parahumans.wordpress.com/2013/07/18/sting-26-1/": [ @@ -3577,6 +3661,11 @@ } ], "https://parahumans.wordpress.com/2013/07/20/sting-26-2/": [ + { + "before": "It didn’t hurt that", + "after": "It didn’t help that", + "_comment": "This makes more sense with 'help'" + }, { "before": "And gauntlet
    , to reply to the last one", "after": "And gauntlet, to reply to the last one" @@ -3788,6 +3877,10 @@ } ], "https://parahumans.wordpress.com/2013/08/31/cockroaches-28-1/": [ + { + "before": "“No, I said.", + "after": "“No,” I said." + }, { "before": "could save issue", "after": "could say issue" @@ -3856,6 +3949,10 @@ "before": "I’m not? Fuck. There’s", "after": "I’m not? Fuck. There’s" }, + { + "before": "‘I don’t know,”", + "after": "“I don’t know,”" + }, { "before": "I suspect It’s a", "after": "I suspect it’s a" @@ -4382,7 +4479,7 @@ }, { "before": "that ‘because I can’t isn’t an", - "after": "that ‘because I can’t’ isn’t an" + "after": "that ‘because I can’ isn’t an" } ], "https://parahumans.wordpress.com/2013/11/19/interlude-end/": [ From 8f73d57a5aee38665c679a678ff124913ff7f2fa Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Sat, 28 May 2022 18:05:25 -0400 Subject: [PATCH 186/186] 5.1.0 --- npm-shrinkwrap.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index c26681d..e99c2ae 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { "name": "worm-scraper", - "version": "5.0.0", + "version": "5.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "worm-scraper", - "version": "5.0.0", + "version": "5.1.0", "license": "WTFPL", "dependencies": { "archiver": "^5.3.1", diff --git a/package.json b/package.json index b0be3a5..7939d64 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "parahuman", "scraper" ], - "version": "5.0.0", + "version": "5.1.0", "author": "Domenic Denicola (https://domenic.me/)", "license": "WTFPL", "repository": "domenic/worm-scraper",