diff --git a/.gitignore b/.gitignore index f7efa48..0f357d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store *.sublime-workspace docs/ -resources/_gen/ \ No newline at end of file +resources/_gen/ +node_modules/ \ No newline at end of file diff --git a/content/articles/animalcrossing-newhorizons.md b/content/articles/animalcrossing-newhorizons.md index 753aa63..7099675 100644 --- a/content/articles/animalcrossing-newhorizons.md +++ b/content/articles/animalcrossing-newhorizons.md @@ -1,16 +1,22 @@ -+++ -imageActive = "gif/acnh.gif" -image = "gif/acnh_still.gif" -date = "2020-04-05" -title = "Animal Crossing: New Horizons Adventure Blog" -tags = ['Animal Crossing', 'feature'] -game_name = 'Animal Crossing: New Horizons' -description = 'It is a fresh breeze indeed as the Island unfolds, buildings appear, and I sweat my ass off trying to collect enough lumber and clay to satisfy even the most grumpy of Tom Nooks. Welcome to the latest installment of Animal Crossing!' -game_platform = 'switch' -game_genre = 'Life sim' -game_release_year = '2020' -game_developer = 'Nintendo' -+++ +--- +imageActive: "gif/acnh.gif" +image: "gif/acnh_still.gif" +date: "2020-04-05" +title: "Animal Crossing: New Horizons Adventure Blog" +tags: + - 'Animal Crossing New Horizons' + - 'blog' + - 'Animal Crossing' + - 'feature' +howlongtobeat_id: 68240 +howlongtobeat_hrs: 60.5 +game_name: 'Animal Crossing: New Horizons' +description: 'It is a fresh breeze indeed as the Island unfolds, buildings appear, and I sweat my ass off trying to collect enough lumber and clay to satisfy even the most grumpy of Tom Nooks. Welcome to the latest installment of Animal Crossing!' +game_platform: 'switch' +game_genre: 'Life sim' +game_release_year: '2020' +game_developer: 'Nintendo' +--- Remember the [Animal Crossing: Wild World Adventure Blog post](/articles/animalcrossing-wildworld/)? Well, after a _very_ long wait, the newest installment of Animal Crossing, called New Horizons, finally arrived on the Nintendo Switch. For the first time since the original installment on the Gamecube, it has come back to home consoles! It only seemed appropriate to continue the **AC adventure blog**, from way back in 2006, to see what kind of trouble my character would get himself into while trying to build a community in the new Island. diff --git a/content/articles/bg1-ee.md b/content/articles/bg1-ee.md index a752b1d..bba28ce 100644 --- a/content/articles/bg1-ee.md +++ b/content/articles/bg1-ee.md @@ -1,10 +1,25 @@ -+++ -image = "/img/games/BaldursGate1/portrait.png" -date = "2019-07-31" -title = "Experiencing the Enhanced Baldur's Gate" -tags = ['Baldurs Gate 1', 'Baldurs Gate 2', 'feature'] -keywords = ['Baldurs Gate 2', 'Baldurs Gate', 'bg1', 'bgee', 'bg1ee'] -+++ +--- +image: "/img/games/BaldursGate1/portrait.png" +date: "2019-07-31" +title: "Experiencing the Enhanced Baldur's Gate" +tags: + - 'Baldurs Gate 1' + - 'Baldurs Gate 2' + - 'feature' +keywords: + - 'Baldurs Gate 2' + - 'Baldurs Gate' + - 'bg1' + - 'bgee' + - 'bg1ee' +game_platform: 'PC' +game_genre: 'RPG' +howlongtobeat_id: 814 +howlongtobeat_hrs: 30 +game_name: 'Baldurs Gate Enhanced Edition' +game_release_year: '2012' +game_developer: 'Beamdog' +--- We move from one tree to the other, carefully glancing towards the ever so black fog of war. Imoen investigates things for us, while we prepare for the inevitable. Then, a sudden scream. Our friend is in sudden need of help! To battle! Or, as the more evil aligned main protagonist would say, 'Oh well. Imoen had it coming. At least she can stop saying "good on you if you save the day" now. Let's go guys. Now, where do I recruit another thief, that doesn't mind a good backstab or two?' diff --git a/content/articles/retrospectives/castlevania-aria-of-sorrow.md b/content/articles/retrospectives/castlevania-aria-of-sorrow.md index 4b9382a..40c0add 100644 --- a/content/articles/retrospectives/castlevania-aria-of-sorrow.md +++ b/content/articles/retrospectives/castlevania-aria-of-sorrow.md @@ -1,15 +1,25 @@ -+++ -image = "gif/aria-of-sorrow_still.gif" -imageActive = "/gif/aria-of-sorrow.gif" -date = "2018-07-31" -title = "Castlevania Aria of Sorrow: a retrospective" -aliases = ['/articles/aria-of-sorrow-retrospective/'] -tags = ['Castlevania aria of sorrow', 'Castlevania', 'Castlevania gba', 'Aria of sorrow', 'Castlevania aos', 'retrospective'] -game_platform = 'gba' -game_genre = 'Metroidvania' -game_release_year = '2002' -game_developer = 'Nintendo' -+++ +--- +image: "gif/aria-of-sorrow_still.gif" +imageActive: "/gif/aria-of-sorrow.gif" +date: "2018-07-31" +title: "Castlevania Aria of Sorrow: a retrospective" +aliases: + - '/articles/aria-of-sorrow-retrospective/' +tags: + - 'Castlevania aria of sorrow' + - 'Castlevania' + - 'Castlevania gba' + - 'Aria of sorrow' + - 'Castlevania aos' + - 'retrospective' +game_platform: 'gba' +howlongtobeat_id: 1576 +howlongtobeat_hrs: 7 +game_name: 'Castlevania aria of sorrow' +game_genre: 'Metroidvania' +game_release_year: '2002' +game_developer: 'Konami' +--- Calling Aria of Sorrow the best handheld Castlevania is quite a bold statement: they're all great in their own way. But after replaying this again (and again...) I've made up my mind: it is **the best** Castlevania - period. It's the second best Gameboy Advance title of all times according to IGN. Yes, I am insinuating it's better than Symphony of the night. And yes, I know of the inverted castle's greatness and the rip-off in Harmony of Dissonance. Soma's gameplay mechanics: the soul system, is simply more engaging to me. diff --git a/content/articles/retrospectives/castlevania-circle-of-the-moon.md b/content/articles/retrospectives/castlevania-circle-of-the-moon.md index 0127c96..76de6b1 100644 --- a/content/articles/retrospectives/castlevania-circle-of-the-moon.md +++ b/content/articles/retrospectives/castlevania-circle-of-the-moon.md @@ -1,15 +1,25 @@ -+++ -image = "/img/articles/cotm_boss.jpg" -imageActive = "/img/articles/cotm_boss.jpg" -aliases = ['/articles/circle-of-the-moon-retrospective/'] -date = "2018-09-09" -title = "Castlevania Circle of the Moon: a retrospective" -tags = ['Castlevania Circle of the Moon', 'Castlevania', 'Castlevania gba', 'Circle of the Moon', 'Castlevania cotm', 'retrospective'] -game_platform = 'gba' -game_genre = 'Metroidvania' -game_release_year = '2001' -game_developer = 'Nintendo' -+++ +--- +image: "/img/articles/cotm_boss.jpg" +imageActive: "/img/articles/cotm_boss.jpg" +aliases: + - '/articles/circle-of-the-moon-retrospective/' +date: "2018-09-09" +title: "Castlevania Circle of the Moon: a retrospective" +tags: + - 'Castlevania Circle of the Moon' + - 'Castlevania' + - 'Castlevania gba' + - 'Circle of the Moon' + - 'Castlevania cotm' + - 'retrospective' +game_platform: 'gba' +howlongtobeat_id: 1578 +howlongtobeat_hrs: 10 +game_name: 'Castlevania circle of the moon' +game_genre: 'Metroidvania' +game_release_year: '2001' +game_developer: 'Konami' +--- As the hunt continues, from [Aria of Sorrow](/articles/aria-of-sorrow-retrospective) to the beginning of Castlevania's appearance on the GBA, Circle of the Moon, I have the uneasy feeling that my whip offers less solace in this scarier version of the castle. The encounter with an _earth demon_ in the very first minutes acts as a warning for the rest of the game: _be prepared to see YOU DIED a lot!_ Nathan Graves has to free his master from the clutches of - you guessed it - Dracula and partners, on the way avoiding the increasingly jealous Hugh Baldwin, the son of his master. diff --git a/content/articles/retrospectives/raven-shield-17-years-later.md b/content/articles/retrospectives/raven-shield-17-years-later.md index e59c6c3..48028fa 100644 --- a/content/articles/retrospectives/raven-shield-17-years-later.md +++ b/content/articles/retrospectives/raven-shield-17-years-later.md @@ -8,6 +8,9 @@ tags: - 'retrospective' game_platform: 'pc' played_on: 'winxp' +howlongtobeat_id: 10448 +howlongtobeat_hrs: 11 +game_name: 'rainbow six raven shield' game_genre: 'Tactical Shooter' game_release_year: '2003' game_developer: 'Red Storm Entertainment' diff --git a/content/articles/reviews/arcanum.md b/content/articles/reviews/arcanum.md index 9c89ad5..628d1a8 100644 --- a/content/articles/reviews/arcanum.md +++ b/content/articles/reviews/arcanum.md @@ -1,14 +1,19 @@ -+++ -image = "/img/games/Arcanum/logo.jpg" -date = "2007-03-30" -title = "Arcanum: the Review" -tags = ['Arcanum', 'review'] -game_name = 'Arcanum' -game_genre = 'PC RPG' -game_release_year = '2001' -aliases = ['/articles/arcanum-review/'] -game_developer = 'Troika Games' -+++ +--- +image: "/img/games/Arcanum/logo.jpg" +date: "2007-03-30" +title: "Arcanum: the Review" +tags: + - 'Arcanum' + - 'review' +howlongtobeat_id: 557 +howlongtobeat_hrs: 33.5 +game_name: 'Arcanum' +game_genre: 'PC RPG' +game_release_year: '2001' +aliases: + - '/articles/arcanum-review/' +game_developer: 'Troika Games' +--- diff --git a/content/articles/reviews/bloodstained-ritual-of-the-night.md b/content/articles/reviews/bloodstained-ritual-of-the-night.md index a623c58..51d3f11 100644 --- a/content/articles/reviews/bloodstained-ritual-of-the-night.md +++ b/content/articles/reviews/bloodstained-ritual-of-the-night.md @@ -9,6 +9,9 @@ tags: - 'review' description: "One year later, Ritual of the Night is still unplayable on the Nintendo Switch. Numerous patches later, the game still stutters and crashes, with its most popular screen being the loading one. We're off to a great start here... " game_platform: 'switch' +howlongtobeat_id: 26266 +howlongtobeat_hrs: 13.5 +game_name: "Bloodstained ritual of the night" game_genre: 'Metroidvania' game_release_year: '2019' game_developer: 'ArtPlay' diff --git a/content/articles/reviews/dungeon-siege.md b/content/articles/reviews/dungeon-siege.md index 410c0c5..e644ff8 100644 --- a/content/articles/reviews/dungeon-siege.md +++ b/content/articles/reviews/dungeon-siege.md @@ -8,6 +8,9 @@ tags: - 'diablo' - 'review' game_platform: 'pc' +howlongtobeat_id: 2956 +howlongtobeat_hrs: 29 +game_name: 'Dungeon Siege' played_on: 'win98' description: "Next in line after finishing Sacred: whacking my way through endless hordes of Krugs, skeletons, crystal shards, and goblins. How does the original Dungeon Siege hold up compared to the hack & slash king Diablo 2? " game_genre: 'Hack and Slash' diff --git a/content/articles/reviews/ion-fury.md b/content/articles/reviews/ion-fury.md index 8efee53..f4c05af 100644 --- a/content/articles/reviews/ion-fury.md +++ b/content/articles/reviews/ion-fury.md @@ -8,6 +8,8 @@ tags: - 'Apogee' - 'Ion Fury' - 'review' +howlongtobeat_id: 49534 +howlongtobeat_hrs: 9.5 game_name: 'Ion Fury' aliases: - /articles/ion-fury/ diff --git a/content/articles/reviews/nox.md b/content/articles/reviews/nox.md index bcb743f..40fa3d4 100644 --- a/content/articles/reviews/nox.md +++ b/content/articles/reviews/nox.md @@ -8,6 +8,9 @@ tags: - 'diablo' - 'review' game_platform: 'pc' +howlongtobeat_id: 6678 +howlongtobeat_hrs: 14 +game_name: 'nox' played_on: 'win98' description: "Ideated in the 1995 college years of Michael Booth, this intended to be multiplayer focused fast-paced wizard combat game ultimately would wound up to be compared to Diablo II, which was released five months later. Yet, a lot of the likable charm, quickness and quirkiness remained. Is this really a traditional hack & slash game?" game_genre: 'Hack and Slash' diff --git a/content/articles/reviews/sacred.md b/content/articles/reviews/sacred.md index 68406b2..761167e 100644 --- a/content/articles/reviews/sacred.md +++ b/content/articles/reviews/sacred.md @@ -8,6 +8,9 @@ tags: - 'diablo' - 'review' game_platform: 'pc' +howlongtobeat_id: 8049 +howlongtobeat_hrs: 25 +game_name: 'sacred' played_on: 'winxp' description: "Sixteen years after its initial release, I finally managed to take the time to thoroughly inspect Sacred (the Gold release). I've always been a big fan of hack & slash games, so let's take this opportunity to compare mechanics of Sacred VS the undisputed king: Diablo 2." game_genre: 'Hack and Slash' diff --git a/howlongtobeat.js b/howlongtobeat.js new file mode 100644 index 0000000..d0ff065 --- /dev/null +++ b/howlongtobeat.js @@ -0,0 +1,74 @@ +const hltb = require('howlongtobeat') +const hltbService = new hltb.HowLongToBeatService() + +const fs = require('fs').promises; +const { resolve } = require('path'); + +const {promisify} = require('util'); +const frontMatterParser = require('parser-front-matter'); + +const parse = promisify(frontMatterParser.parse.bind(frontMatterParser)); + +// see brainbaking stuff +async function getFiles(dir) { + const dirents = await fs.readdir(dir, { withFileTypes: true }); + const files = await Promise.all(dirents.map((dirent) => { + const res = resolve(dir, dirent.name); + return dirent.isDirectory() ? getFiles(res) : res; + })); + return Array.prototype.concat(...files); +} + +// see brainbaking stuff +async function loadPostsWithFrontMatter(postsDirectoryPath) { + const postNames = await getFiles(postsDirectoryPath); + const posts = await Promise.all( + // could be .DS_Store stuff found using recursive function above... + postNames.filter(name => name.endsWith('.md')).map(async fileName => { + const fileContent = await fs.readFile(fileName, 'utf8'); + const {content, data} = await parse(fileContent); + return { + game: data.game_name, + howlongtobeat_id: data.howlongtobeat_id, + file: fileName + } + }) + ); + return posts; +} + +async function fillInHowLongToBeat(posts) { + for(post of posts) { + const results = await hltbService.search(post.game) + + if(results.length > 0) { + post.howlongtobeat = results[0].gameplayMain + post.howlongtobeat_id = results[0].id + } + } +} + +async function run() { + console.log("-- SCANNING not yet processed articles for game_name --") + let posts = await loadPostsWithFrontMatter(`${__dirname}/content/articles/`) + posts = posts.filter(post => post.game && !post.howlongtobeat_id) + await fillInHowLongToBeat(posts) + + for(post of posts) { + let data = await fs.readFile(post.file, 'utf8') + data = data.replace(/game_name:/, `howlongtobeat_id: ${post.howlongtobeat_id}\nhowlongtobeat_hrs: ${post.howlongtobeat}\ngame_name:`) + console.log(`Found game ${post.game}, how long filling in: ${post.howlongtobeat} (id #${post.howlongtobeat_id})`) + await fs.writeFile(post.file, data, 'utf8') + } + + console.log("-- DONE modifying files --") +} + +run() + +/* +async function d() { + const x = await hltbService.search('dungeon siege') + console.log(x) +} +*/ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ffbbd2d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,763 @@ +{ + "name": "jefklakscodex", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "14.14.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.11.tgz", + "integrity": "sha512-BJ97wAUuU3NUiUCp44xzUFquQEvnk1wu7q4CMEUYKJWjdkr0YWYDsm4RFtAvxYsNjLsKcrFt6RvK8r+mnzMbEQ==", + "dev": true + }, + "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" + } + }, + "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==", + "dev": true, + "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=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "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=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "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=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "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 + }, + "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 + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "file-is-binary": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-is-binary/-/file-is-binary-1.0.0.tgz", + "integrity": "sha1-XkGAbRvK5FjI/sMv484SLbu8Q1Y=", + "dev": true, + "requires": { + "is-binary-buffer": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gray-matter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-3.1.1.tgz", + "integrity": "sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "js-yaml": "^3.10.0", + "kind-of": "^5.0.2", + "strip-bom-string": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "howlongtobeat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/howlongtobeat/-/howlongtobeat-1.2.1.tgz", + "integrity": "sha512-6KTd0b8yCZVuUtPkrsRI4PPlk0e4tfMGOfcH/1bUqyp4Z3QLz2+pLOggE8ofsUqKuMWoEKBhyAMcoLKePnHetA==", + "dev": true, + "requires": { + "cheerio": "^1.0.0-rc.2", + "fast-levenshtein": "^2.0.6", + "request": "^2.88.0" + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-binary-buffer/-/is-binary-buffer-1.0.0.tgz", + "integrity": "sha1-vGAxKQtly/eZudlQK1D9U3VSQAc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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=", + "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==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "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 + }, + "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=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "dev": true, + "requires": { + "set-getter": "^0.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "parser-front-matter": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/parser-front-matter/-/parser-front-matter-1.6.4.tgz", + "integrity": "sha512-eqtUnI5+COkf1CQOYo8FmykN5Zs+5Yr60f/7GcPgQDZEEjdE/VZ4WMaMo9g37foof8h64t/TH2Uvk2Sq0fDy/g==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "file-is-binary": "^1.0.0", + "gray-matter": "^3.0.2", + "isobject": "^3.0.1", + "lazy-cache": "^2.0.2", + "mixin-deep": "^1.2.0", + "trim-leading-lines": "^0.1.1" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "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" + } + }, + "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==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "set-getter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "dev": true, + "requires": { + "to-object-path": "^0.3.0" + } + }, + "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==", + "dev": true, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-leading-lines": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/trim-leading-lines/-/trim-leading-lines-0.1.1.tgz", + "integrity": "sha1-DnysPoMELc+Vp07TaWbxd0TVwWk=", + "dev": true, + "requires": { + "is-whitespace": "^0.3.0" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "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=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..50e1202 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "jefklakscodex", + "version": "1.0.0", + "description": "", + "main": "howlongtobeat.js", + "directories": { + "doc": "docs" + }, + "dependencies": {}, + "devDependencies": { + "howlongtobeat": "^1.2.1", + "parser-front-matter": "^1.6.4" + }, + "scripts": { + "build": "/usr/local/bin/hugo", + "install": "node howlongtobeat.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/wgroeneveld/jefklakscodex.git" + }, + "author": "", + "license": "", + "bugs": { + "url": "https://github.com/wgroeneveld/jefklakscodex/issues" + }, + "homepage": "https://github.com/wgroeneveld/jefklakscodex#readme" +} diff --git a/themes/jefklak-creative-portfolio/layouts/partials/sidebar.html b/themes/jefklak-creative-portfolio/layouts/partials/sidebar.html index 4525410..40ed832 100644 --- a/themes/jefklak-creative-portfolio/layouts/partials/sidebar.html +++ b/themes/jefklak-creative-portfolio/layouts/partials/sidebar.html @@ -37,6 +37,12 @@ {{ with .Params.game_developer }}  Developer: {{ . }}
{{ end }} + {{ with .Params.howlongtobeat_id }} +  How long to beat + {{ end }} + {{ with .Params.howlongtobeat_hrs }} + : {{ . }} hours
+ {{ end }}

{{ end }}