It's coming together, but we just have a whole bunch of errors to work through.

pull/1/head
Starbeamrainbowlabs 2021-08-09 01:49:18 +01:00
parent d5160904ad
commit 8a863d7b0d
No known key found for this signature in database
GPG Key ID: 1BE5172E637709C2
14 changed files with 6772 additions and 6087 deletions

12
feeds.json Normal file
View File

@ -0,0 +1,12 @@
[
{
"author_name": "Starbeamrainbowlabs",
"github_username": "sbrl",
"feed_uri": "https://starbeamrainbowlabs.com/blog/feed.php"
},
{
"author_name": "Edward Charles",
"github_username": "closebracket",
"feed_uri": "https://love.edwardcharl.es/rss/"
}
]

379
package-lock.json generated
View File

@ -9,7 +9,14 @@
"license": "Apache-2.0",
"dependencies": {
"@11ty/eleventy": "^0.12.1",
"feedme": "^2.0.2"
"dateformat": "^4.5.1",
"feedme": "^2.0.2",
"file-type": "^16.5.3",
"html-entities": "^2.3.2",
"p-reflect": "^2.1.0",
"phin": "^3.6.0",
"sha3": "^2.1.4",
"striptags": "^3.2.0"
}
},
"node_modules/@11ty/dependency-tree": {
@ -129,6 +136,11 @@
"node": ">= 8"
}
},
"node_modules/@tokenizer/token": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
"integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
},
"node_modules/@types/minimatch": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
@ -311,6 +323,25 @@
"node": ">= 0.6.0"
}
},
"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/base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
@ -455,6 +486,29 @@
"resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz",
"integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU="
},
"node_modules/buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"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.2.1"
}
},
"node_modules/bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
@ -483,6 +537,11 @@
"node": ">=6"
}
},
"node_modules/centra": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/centra/-/centra-2.5.0.tgz",
"integrity": "sha512-CnSF1HD8vOOgNbE4P2fZEhdhfAohvpcF3DSdSvEcSHDAZvr+Xfw73isT8SXJJc3VMBqSwjXhr29/ikHUgFcypg=="
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@ -683,6 +742,14 @@
"node": ">=0.10.0"
}
},
"node_modules/dateformat": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.5.1.tgz",
"integrity": "sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q==",
"engines": {
"node": "*"
}
},
"node_modules/debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
@ -1018,6 +1085,22 @@
"node": ">=10"
}
},
"node_modules/file-type": {
"version": "16.5.3",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz",
"integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==",
"dependencies": {
"readable-web-to-node-stream": "^3.0.0",
"strtok3": "^6.2.4",
"token-types": "^4.1.1"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/file-type?sponsor=1"
}
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@ -1348,6 +1431,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/html-entities": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
"integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ=="
},
"node_modules/http-errors": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
@ -1395,6 +1483,25 @@
"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/immutable": {
"version": "3.8.2",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
@ -2163,6 +2270,14 @@
"node": ">=8"
}
},
"node_modules/p-reflect": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz",
"integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==",
"engines": {
"node": ">=8"
}
},
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@ -2255,6 +2370,29 @@
"node": ">=0.10.0"
}
},
"node_modules/peek-readable": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.0.1.tgz",
"integrity": "sha512-7qmhptnR0WMSpxT5rMHG9bW/mYSR1uqaPFj2MHvT+y/aOUu6msJijpKt5SkTDKySwg65OWG2JwTMBlgcbwMHrQ==",
"engines": {
"node": ">=8"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Borewit"
}
},
"node_modules/phin": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/phin/-/phin-3.6.0.tgz",
"integrity": "sha512-nYY4Qh/yGCoxcwOAS2UfCM8+nVJcbI4f9NC4M4zPAsuswnIIS2aB14uYAbvdxP/4DqzXfrpadT2WQOx9mLDyTA==",
"dependencies": {
"centra": "^2.4.2"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/picomatch": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
@ -2525,6 +2663,34 @@
"node": ">= 0.8"
}
},
"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/readable-web-to-node-stream": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
"integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
"dependencies": {
"readable-stream": "^3.6.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Borewit"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@ -2665,6 +2831,25 @@
"npm": ">=2.0.0"
}
},
"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",
@ -2881,6 +3066,14 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"node_modules/sha3": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz",
"integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==",
"dependencies": {
"buffer": "6.0.3"
}
},
"node_modules/sigmund": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
@ -3035,6 +3228,14 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
"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.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
@ -3067,6 +3268,27 @@
"node": ">=0.10.0"
}
},
"node_modules/striptags": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz",
"integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw=="
},
"node_modules/strtok3": {
"version": "6.2.4",
"resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.2.4.tgz",
"integrity": "sha512-GO8IcFF9GmFDvqduIspUBwCzCbqzegyVKIsSymcMgiZKeCfrN9SowtUoi8+b59WZMAjIzVZic/Ft97+pynR3Iw==",
"dependencies": {
"@tokenizer/token": "^0.3.0",
"peek-readable": "^4.0.1"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Borewit"
}
},
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@ -3233,6 +3455,22 @@
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
},
"node_modules/token-types": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz",
"integrity": "sha512-hD+QyuUAyI2spzsI0B7gf/jJ2ggR4RjkAo37j3StuePhApJUwcWDjnHDOFdIWYSwNR28H14hpwm4EI+V1Ted1w==",
"dependencies": {
"@tokenizer/token": "^0.3.0",
"ieee754": "^1.2.1"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Borewit"
}
},
"node_modules/ua-parser-js": {
"version": "0.7.28",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
@ -3292,6 +3530,11 @@
"node": ">= 0.8"
}
},
"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/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@ -3519,6 +3762,11 @@
"fastq": "^1.6.0"
}
},
"@tokenizer/token": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
"integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
},
"@types/minimatch": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
@ -3659,6 +3907,11 @@
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
"integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
@ -3787,6 +4040,15 @@
"resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz",
"integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU="
},
"buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
}
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
@ -3806,6 +4068,11 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"centra": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/centra/-/centra-2.5.0.tgz",
"integrity": "sha512-CnSF1HD8vOOgNbE4P2fZEhdhfAohvpcF3DSdSvEcSHDAZvr+Xfw73isT8SXJJc3VMBqSwjXhr29/ikHUgFcypg=="
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@ -3970,6 +4237,11 @@
"resolved": "https://registry.npmjs.org/date-time/-/date-time-0.1.1.tgz",
"integrity": "sha1-7S9tk9l5DOL9ZtW1/z7dW7y/Owc="
},
"dateformat": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.5.1.tgz",
"integrity": "sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q=="
},
"debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
@ -4234,6 +4506,16 @@
"sax": "^1.2.4"
}
},
"file-type": {
"version": "16.5.3",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz",
"integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==",
"requires": {
"readable-web-to-node-stream": "^3.0.0",
"strtok3": "^6.2.4",
"token-types": "^4.1.1"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@ -4472,6 +4754,11 @@
"has-symbols": "^1.0.2"
}
},
"html-entities": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
"integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ=="
},
"http-errors": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
@ -4509,6 +4796,11 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"immutable": {
"version": "3.8.2",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
@ -5077,6 +5369,11 @@
"p-limit": "^2.2.0"
}
},
"p-reflect": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz",
"integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg=="
},
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@ -5145,6 +5442,19 @@
"resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
"integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
},
"peek-readable": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.0.1.tgz",
"integrity": "sha512-7qmhptnR0WMSpxT5rMHG9bW/mYSR1uqaPFj2MHvT+y/aOUu6msJijpKt5SkTDKySwg65OWG2JwTMBlgcbwMHrQ=="
},
"phin": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/phin/-/phin-3.6.0.tgz",
"integrity": "sha512-nYY4Qh/yGCoxcwOAS2UfCM8+nVJcbI4f9NC4M4zPAsuswnIIS2aB14uYAbvdxP/4DqzXfrpadT2WQOx9mLDyTA==",
"requires": {
"centra": "^2.4.2"
}
},
"picomatch": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
@ -5364,6 +5674,24 @@
"unpipe": "1.0.0"
}
},
"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==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"readable-web-to-node-stream": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
"integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
"requires": {
"readable-stream": "^3.6.0"
}
},
"readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@ -5470,6 +5798,11 @@
"symbol-observable": "1.0.1"
}
},
"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=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@ -5659,6 +5992,14 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"sha3": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz",
"integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==",
"requires": {
"buffer": "6.0.3"
}
},
"sigmund": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
@ -5801,6 +6142,14 @@
}
}
},
"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.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
@ -5824,6 +6173,20 @@
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
"integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI="
},
"striptags": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz",
"integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw=="
},
"strtok3": {
"version": "6.2.4",
"resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.2.4.tgz",
"integrity": "sha512-GO8IcFF9GmFDvqduIspUBwCzCbqzegyVKIsSymcMgiZKeCfrN9SowtUoi8+b59WZMAjIzVZic/Ft97+pynR3Iw==",
"requires": {
"@tokenizer/token": "^0.3.0",
"peek-readable": "^4.0.1"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@ -5949,6 +6312,15 @@
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
},
"token-types": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz",
"integrity": "sha512-hD+QyuUAyI2spzsI0B7gf/jJ2ggR4RjkAo37j3StuePhApJUwcWDjnHDOFdIWYSwNR28H14hpwm4EI+V1Ted1w==",
"requires": {
"@tokenizer/token": "^0.3.0",
"ieee754": "^1.2.1"
}
},
"ua-parser-js": {
"version": "0.7.28",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
@ -5980,6 +6352,11 @@
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",

View File

@ -22,6 +22,13 @@
"license": "Apache-2.0",
"dependencies": {
"@11ty/eleventy": "^0.12.1",
"feedme": "^2.0.2"
"dateformat": "^4.5.1",
"feedme": "^2.0.2",
"file-type": "^16.5.3",
"html-entities": "^2.3.2",
"p-reflect": "^2.1.0",
"phin": "^3.6.0",
"sha3": "^2.1.4",
"striptags": "^3.2.0"
}
}

View File

@ -2,7 +2,53 @@ const os = require("os");
const fs = require("fs");
const path = require("path");
const striptags = require("striptags");
const htmlentities = require("html-entities");
const { SHA3 } = require("sha3");
const filetype = require("file-type");
const fetch = require("./lib/fetch.js");
function hash(str) {
const hash = new SHA3(128);
hash.update(str);
return hash.digest("base64")
.replaceAll("/", "-")
.replaceAll("+", "_");
}
async function filter_asset(src) {
let target_dir = `./_site/img`;
if(!fs.existsSync(target_dir))
await fs.promises.mkdir(target_dir, { recursive: true });
let filename = path.basename(src);
if(src.search(/https?/)) {
let content = await fetch(src, "none");
let type = await filetype.fromBuffer(content);
// It's a URL - download it
filename = `${hash(src)}.${type.ext}`;
await fs.promises.writeFile(
path.join(target_dir, filename),
content
);
}
else {
// Generally speaking we optimise PNGs *very* well with oxipng/Zopfli,
// and the Image plugin doesn't respect this
await fs.promises.copyFile(src, path.join(target_dir, filename));
}
return `/img/${filename}`;
}
module.exports = function(eleventyConfig) {
eleventyConfig.addFilter("striphtml", (value) => striptags(value));
eleventyConfig.addFilter("htmlentities", (value) => htmlentities.encode(value));
eleventyConfig.addFilter("asset", filter_asset);
eleventyConfig.addAsyncShortcode("asset", filter_asset);
eleventyConfig.addNunjucksAsyncShortcode("asset", filter_asset);
// eleventyConfig.addAsyncShortcode("fetch", fetch);
//
@ -15,4 +61,8 @@ module.exports = function(eleventyConfig) {
// eleventyConfig.addAsyncShortcode("image_urlpass", shortcode_image_urlpass);
// eleventyConfig.addNunjucksAsyncShortcode("image_urlpass", shortcode_image_urlpass);
// eleventyConfig.addPairedShortcode("gallerybox", shortcode_gallerybox);
return {
htmlTemplateEngine: "njk"
};
}

1
src/.eleventyignore Normal file
View File

@ -0,0 +1 @@
css/

57
src/_includes/main.njk Normal file
View File

@ -0,0 +1,57 @@
---
site_name: Hull Blogs
root_url: https://hullblogs.com
description: "Description of hullblogs.com website here"
---
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title>{{ title }} • {{ site_name }}</title>
<link rel="stylesheet" href="/theme.css" />
<link rel="icon" href="{% asset './favicon-64.png' %}" type="image/png" sizes="64x64" />
<link rel="icon" href="{% asset './favicon.png' %}" type="image/png" sizes="540x540" />
<meta name="theme-color" content="#61b4f4" />
<!-- OpenGraph -->
<meta property="og:title" content="{{ site_name }}" />
<meta property="og:type" content="website" />
<meta property="og:url" content="{{ root_url }}/" />
<meta property="og:image" content="{{ root_url }}{% asset 'images/banner-main.jpeg' %}" />
<meta property="og:description" content="{{ description }}" />
<!-- Twitter Cards -->
<meta property="twitter:card" content="summary" />
<meta property="twitter:site" content="@SBRLabs" />
<meta property="twitter:title" content="{{ site_name }}" />
<meta property="twitter:description" content="{{ description }}" />
<meta property="twitter:image" content="{{ root_url }}/{% asset '../favicon.png' %}" />
</head>
<body>
<nav class="shadow-bottom">
<h1><a href="/" class="invisilink">
{{ site_name }}
</a></h1>
<ul>
{% for navitem in collections.navigable %}
<li {% if page.url == navitem.url %}aria-current="page"{% endif %}>
<a href="{{ navitem.url }}" class="nav">{{ navitem.data.title }}</a>
</li>
{% endfor %}
<li><a href="https://github.com/sbrl/Minetest-WorldEditAdditions/" class="nav image"><img src="{% asset 'images/github.svg' %}" alt="GitHub" title="GitHub" /></a></li>
</ul>
</nav>
{{ content | safe }}
<footer class="shadow-top">
<p>hullblogs.com built with ❤️ by <a href="https://starbeamrainbowlabs.com/"><img src="{% asset 'https://starbeamrainbowlabs.com/images/sbrl/SBRL-Small-200.png' %}" alt="Starbeamrainbowlabs' logo" aria-hidden="true" />Starbeamrainbowlabs</p>
<p>Tech: <a href="https://www.11ty.dev/">Eleventy</a> (this website), <a href="https://www.heropatterns.com/">Hero Patterns</a> (background patterns), <a href="https://github.com/shssoichiro/oxipng">Oxipng</a> (PNG image compression), <a href="https://www.npmjs.com/package/feedme"><code>feedme</code></a> (for prsing feeds)</p>
<p>Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache Licence 2.0</a> (<a href="https://tldrlegal.com/license/apache-license-2.0-(apache-2.0)">tldr</a>)</p>
</footer>
</body>
</html>

0
src/css/smallscreens.css Normal file
View File

0
src/css/theme.css Normal file
View File

64
src/index.11tydata.js Normal file
View File

@ -0,0 +1,64 @@
const fs = require("fs");
const path = require("path");
const pReflect = require("p-reflect");
const dateformat = require("dateformat");
const striptags = require("striptags");
const fetch_feed = require("./lib/fetch_feed.js");
// The length of auto-generated descriptions if one isn't provided.
const DESCRIPTION_LENGTH = 200;
module.exports = async function() {
const feeds = JSON.parse(await fs.promises.readFile("../feeds.json", "utf-8"));
const feed_data = await Promise.all(feeds.map(async (feed) => { return {
author_name: feed.author_name,
author_image: `https://avatars.githubusercontent.com/${encodeURIComponent(feed.github_username)}`,
data: await pReflect(fetch_feed(feed.feed_uri))
} }));
const feed_data_ok = feed_data.filter(el => {
return el.data.isFulfilled
})
.map((feed) => {
feed.data = feed.data.value;
return feed;
});
const feed_authors_error = feed_data.filter(el => el.data.isRejected)
.map(el => el.author_name);
const feed_items = [].concat(...feed_data_ok.map(feed => feed.data.items.map(item => {
// console.log(`FEED ITEM`, item);
item.author_name = feed.author_name;
item.parent = feed.data;
if(!item.content) item.content = item["content:encoded"] || "";
if(!item.description) item.description = striptags(item.content)
.substr(0, DESCRIPTION_LENGTH);
if(!item.pubdate) item.pubdate = item.published
|| item.updated
|| new Date("1970-01-01");
item.pubdate_iso = new Date(item.pubdate).toISOString();
item.pubdate_display = dateformat(
new Date(item.pubdate),
"ddd dS mmmm yyyy h:MM:ss TT Z"
);
return item;
})));
return {
layout: "main.njk",
title: "Posts",
tags: "navigable",
date: "2000-01-01", // For sorting in the navigation bar
feed_items: feed_items,
feeds_errored: feed_authors_error,
pagination: {
data: "feed_items",
size: 15
}
};
}

View File

@ -0,0 +1,33 @@
<section class="posts">
{% for post in pagination.items %}
<article class="post">
<h2><a href="{{ post.link }}">{{ post.title | striphtml | htmlentities }}</a></h2>
<div class="post-extract">
{{ post.description | striphtml | htmlentities }}
</div>
<div>
<span><a href="{{ post.parent.data.link | htmlentities }}"><img src="{{ post.parent.author_image }}" alt="{{ post.parent.author_name | htmlentities }} avatar" aria-hidden="true" /> {{ post.parent.author_name | htmlentities }}</a></span>
<span><time datetime="{{ post.pubdate_iso }}">{{ post.pubdate_display | htmlentities }}</time></span>
</div>
</article>
{% endfor %}
</section>
<nav>
<span>{% if page.url != pagination.href.first %}<a href="{{ pagination.href.first }}">First</a>{% else %}First{% endif %}</span>
<span>{% if pagination.href.previous %}<a href="{{ pagination.href.previous }}">Previous</a>{% else %}Previous{% endif %}</span>
{% for pageKey in pagination.pages %}
<a href="{{ pagination.hrefs[ loop.index0 ] }}"{% if pagination.hrefs[ loop.index0 ] == page.url %} aria-current="page"{% endif %}>{{ loop.index }}</a>
{% endfor %}
<span>{% if pagination.href.next %}<a href="{{ pagination.href.next }}">Next</a>{% else %}Next{% endif %}</span>
<span>{% if page.url != pagination.href.last %}<a href="{{ pagination.href.last }}">Last</a>{% else %}Last{% endif %}</span>
</nav>

23
src/lib/fetch.js Normal file
View File

@ -0,0 +1,23 @@
const fs = require("fs");
const path = require("path");
const os = require("os");
const phin = require("phin");
async function fetch(url, format = "string") {
let package = JSON.parse(await fs.promises.readFile(
path.join(path.dirname(path.dirname(__dirname)), "package.json"), "utf8"
));
return (await phin({
url,
headers: {
"user-agent": `HullBlogsStaticBuilder/${package.version} (Node.js/${process.version}; ${os.platform()} ${os.arch()}) eleventy/${package.dependencies["@11ty/eleventy"].replace(/\^/, "")}`
},
followRedirects: true,
parse: format
})).body;
}
module.exports = fetch;

27
src/lib/fetch_feed.js Normal file
View File

@ -0,0 +1,27 @@
const fetch_stream = require("./fetch_stream.js");
const FeedMe = require("feedme");
const events = require("events");
function do_parse(stream) {
return new Promise(function(resolve, reject) {
const parser = new FeedMe(true);
parser.once("error", reject);
stream.pipe(parser);
events.once(parser, "end").then(() => {
parser.off("error", reject);
resolve(parser.done());
})
});
}
async function fetch_feed(url) {
let start = new Date();
let result = await do_parse(
await fetch_stream(url)
);
console.log(`FETCH ${new Date() - start}ms ${url}`);
return result;
}
module.exports = fetch_feed;

23
src/lib/fetch_stream.js Normal file
View File

@ -0,0 +1,23 @@
const fs = require("fs");
const path = require("path");
const os = require("os");
const phin = require("phin");
async function fetch_stream(url) {
let package = JSON.parse(await fs.promises.readFile(
path.join(path.dirname(path.dirname(__dirname)), "package.json"), "utf8"
));
return (await phin({
url,
headers: {
"user-agent": `HullBlogsStaticBuilder/${package.version} (Node.js/${process.version}; ${os.platform()} ${os.arch()}) eleventy/${package.dependencies["@11ty/eleventy"].replace(/\^/, "")}`
},
followRedirects: true,
stream: true
}));
}
module.exports = fetch_stream;

11
src/theme.njk Normal file
View File

@ -0,0 +1,11 @@
---
permalink: theme.css
---
{% include "css/theme.css" %}
{% include "css/smallscreens.css" %}
{# {% fetch "https://unpkg.com/prismjs/themes/prism-okaidia.css" %} #}
{# {% fetch "https://raw.githubusercontent.com/PrismJS/prism-themes/master/themes/prism-shades-of-purple.css" %} #}
{# {% fetch "https://raw.githubusercontent.com/PrismJS/prism-themes/master/themes/prism-material-light.css" %} #}