├── .data └── static │ ├── robots.txt │ └── style.css ├── .gitignore ├── README.md ├── functions ├── deploy-succeeded.js └── refresh.js ├── netlify.toml ├── package-lock.json ├── package.json ├── refresh.js ├── shadow-cljs.edn ├── src └── main │ └── blog │ └── ssg │ └── app.cljs └── views ├── index.html ├── post.html └── rss.xml /.data/static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: CCBot 2 | Disallow: / 3 | 4 | User-agent: ChatGPT-User 5 | Disallow: / 6 | 7 | User-agent: GPTBot 8 | Disallow: / 9 | 10 | User-agent: Google-Extended 11 | Disallow: / 12 | 13 | User-agent: Omgilibot 14 | Disallow: / 15 | 16 | User-Agent: FacebookBot 17 | Disallow: / 18 | -------------------------------------------------------------------------------- /.data/static/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --primary: #3c3cff; 3 | --primary-secondary: #424242; 4 | --secondary: white; 5 | --secondary-tertiary: #28286d; 6 | --tertiary: #222; 7 | --primary-font:'IBM Plex Sans', sans-serif; 8 | --secondary-font: Astloch, cursive; 9 | } 10 | 11 | body { 12 | font-family: var(--primary-font); 13 | margin:auto; 14 | font-size: 18px; 15 | padding: 0.7em; 16 | overflow-x: hidden; 17 | } 18 | 19 | p { 20 | line-height: 1.5; 21 | } 22 | 23 | .index { 24 | text-align: center; 25 | background-color: var(--tertiary); 26 | text-transform: lowercase; 27 | } 28 | 29 | .post { 30 | max-width: 36em; 31 | } 32 | 33 | h1 { 34 | font-weight: 400; 35 | line-height: 1.7em; 36 | } 37 | 38 | h1 a { 39 | position: relative; 40 | } 41 | 42 | h1 a:hover:visited { 43 | color: var(--secondary); 44 | } 45 | 46 | h1 a:hover .deco { 47 | display:none; 48 | } 49 | 50 | h1 a:visited { 51 | color: var(--primary-secondary); 52 | } 53 | 54 | h1 a:visited .deco { 55 | color: var(--secondary-tertiary); 56 | } 57 | 58 | .deco { 59 | position: absolute; 60 | top: 5px; 61 | left: 0; 62 | width: 100%; 63 | color: var(--primary); 64 | font-family: var(--secondary-font); 65 | text-transform: none; 66 | } 67 | 68 | .post h1 { 69 | color: var(--primary); 70 | position:relative; 71 | text-align: center; 72 | margin: 1.7em 0; 73 | cursor: pointer; 74 | text-transform: lowercase; 75 | } 76 | 77 | .post h1:after { 78 | content: attr(content); 79 | position: absolute; 80 | top: 0.3em; 81 | left: 0; 82 | width: 100%; 83 | color: var(--tertiary); 84 | font-family: var(--secondary-font); 85 | text-transform: none; 86 | opacity: 0.8; 87 | text-transform: none; 88 | } 89 | 90 | .post h1:hover:after { 91 | content: "click to go back"; 92 | font-size: 0.3em; 93 | top: -3em; 94 | font-family: var(--primary-font); 95 | } 96 | 97 | h1 a { 98 | color: white; 99 | text-decoration: none; 100 | } 101 | 102 | article { 103 | margin-bottom: 3em; 104 | } 105 | 106 | blockquote { 107 | border-left: 3px var(--primary) solid; 108 | padding-left: 1em; 109 | margin: 2em 0; 110 | } 111 | 112 | @media (min-height: 680px){ 113 | .index { 114 | padding-top: 4em; 115 | } 116 | 117 | h1 { 118 | font-size: 3em; 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .cache 2 | node_modules 3 | .data/out 4 | .data/static/*.html 5 | .data/static/*.xml 6 | .env 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Are.na Channel -> Blog 2 | 3 | Still WIP, expect some shuffling with folders and functions still. 4 | 5 | ### Features: 6 | - [x] Static site generator with Are.na as content backend. 7 | - [x] Generate index + post pages from text blocks. 8 | - [x] Netlify ready. 9 | - [x] Youtube (and Bandcamp) embeds render (use `{{{:youtube NeWhd3dcplM}}}`). 10 | - [X] RSS feed generator. 11 | - [x] Support image blocks. 12 | 13 | ### Demo 14 | This is being used by my personal blog [jelle.io](https://jelle.io) based on my ["Words" Are.na channel](https://www.are.na/jelle-ack/words-e6vp8lael4m). 15 | 16 | ### Install 17 | - Click `Use this template` in Github. 18 | - Point Netlify to your new repo. 19 | - Set `ARENA_CHANNEL_SLUG` in .env and Netlify env variables 20 | - Tweaks css and variables to your need 21 | -------------------------------------------------------------------------------- /functions/deploy-succeeded.js: -------------------------------------------------------------------------------- 1 | const request = require('request'); 2 | 3 | exports.handler = function(event, context, callback) { 4 | var e = JSON.parse(event.body); 5 | if (e.payload.context == "production") { 6 | console.log(`[superfeedr] preparing to ping ${SUPERFEEDR_USERNAME}.superfeedr.com`) 7 | request.post( 8 | `http://${SUPERFEEDR_USERNAME}.superfeedr.com/?hub.mode=publish&hub.url=${e.payload.url}/*`, 9 | function (error, response, body){ 10 | if (!error && response.statusCode == 204) { 11 | console.log("[superfeedr] ping successful"); 12 | callback(null, {statusCode: 204}); 13 | } else { 14 | console.log("[superfeedr] ping failed:", error); 15 | callback(error, {statusCode: response.statusCode}); 16 | } 17 | } 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /functions/refresh.js: -------------------------------------------------------------------------------- 1 | var https = require('https'); 2 | 3 | exports.handler = (event, context, callback) => { 4 | console.log("make request") 5 | var req = https.request({ 6 | hostname: "api.netlify.com", 7 | port: 443, 8 | path: '/build_hooks/5de1cce41738f68985b9c3b1', 9 | headers: {"Content-Type":"text/plain; charset=utf-8"}, 10 | method: 'POST' 11 | }, function (res) { 12 | console.log('statusCode:', res.statusCode); 13 | console.log('headers:', res.headers); 14 | var body=""; 15 | res.on("data", (res) => 16 | body+=res) 17 | res.on('end', () => 18 | callback(null, {statusCode: res.statusCode, body: res.statusCode == 200 ? "refresh requested, changes should be visible in 30 seconds" : "error!"})) 19 | }) 20 | req.on("error", (e) => 21 | callback(null, {statusCode: 500, body: "oops"})) 22 | req.end() 23 | } 24 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "npm run prestart" 3 | functions = "functions" 4 | publish = ".data/static" 5 | 6 | [build.processing] 7 | skip_processing = false 8 | [build.processing.css] 9 | bundle = true 10 | minify = true 11 | [build.processing.html] 12 | pretty_urls = true 13 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "arena-ssg", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ajv": { 8 | "version": "6.11.0", 9 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", 10 | "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", 11 | "requires": { 12 | "fast-deep-equal": "^3.1.1", 13 | "fast-json-stable-stringify": "^2.0.0", 14 | "json-schema-traverse": "^0.4.1", 15 | "uri-js": "^4.2.2" 16 | } 17 | }, 18 | "argparse": { 19 | "version": "1.0.10", 20 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 21 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 22 | "requires": { 23 | "sprintf-js": "~1.0.2" 24 | } 25 | }, 26 | "asn1": { 27 | "version": "0.2.4", 28 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 29 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 30 | "requires": { 31 | "safer-buffer": "~2.1.0" 32 | } 33 | }, 34 | "asn1.js": { 35 | "version": "4.10.1", 36 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", 37 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", 38 | "requires": { 39 | "bn.js": "^4.0.0", 40 | "inherits": "^2.0.1", 41 | "minimalistic-assert": "^1.0.0" 42 | } 43 | }, 44 | "assert": { 45 | "version": "1.5.0", 46 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", 47 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", 48 | "requires": { 49 | "object-assign": "^4.1.1", 50 | "util": "0.10.3" 51 | }, 52 | "dependencies": { 53 | "inherits": { 54 | "version": "2.0.1", 55 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 56 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" 57 | }, 58 | "util": { 59 | "version": "0.10.3", 60 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 61 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 62 | "requires": { 63 | "inherits": "2.0.1" 64 | } 65 | } 66 | } 67 | }, 68 | "assert-plus": { 69 | "version": "1.0.0", 70 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 71 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 72 | }, 73 | "async-limiter": { 74 | "version": "1.0.1", 75 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 76 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 77 | }, 78 | "asynckit": { 79 | "version": "0.4.0", 80 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 81 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 82 | }, 83 | "autolinker": { 84 | "version": "0.28.1", 85 | "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", 86 | "integrity": "sha1-BlK0kYgYefB3XazgzcoyM5QqTkc=", 87 | "requires": { 88 | "gulp-header": "^1.7.1" 89 | } 90 | }, 91 | "aws-sign2": { 92 | "version": "0.7.0", 93 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 94 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 95 | }, 96 | "aws4": { 97 | "version": "1.9.1", 98 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", 99 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" 100 | }, 101 | "base64-js": { 102 | "version": "1.3.1", 103 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 104 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 105 | }, 106 | "bcrypt-pbkdf": { 107 | "version": "1.0.2", 108 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 109 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 110 | "requires": { 111 | "tweetnacl": "^0.14.3" 112 | } 113 | }, 114 | "bn.js": { 115 | "version": "4.11.8", 116 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 117 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" 118 | }, 119 | "brorand": { 120 | "version": "1.1.0", 121 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 122 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 123 | }, 124 | "browserify-aes": { 125 | "version": "1.2.0", 126 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 127 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 128 | "requires": { 129 | "buffer-xor": "^1.0.3", 130 | "cipher-base": "^1.0.0", 131 | "create-hash": "^1.1.0", 132 | "evp_bytestokey": "^1.0.3", 133 | "inherits": "^2.0.1", 134 | "safe-buffer": "^5.0.1" 135 | } 136 | }, 137 | "browserify-cipher": { 138 | "version": "1.0.1", 139 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 140 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 141 | "requires": { 142 | "browserify-aes": "^1.0.4", 143 | "browserify-des": "^1.0.0", 144 | "evp_bytestokey": "^1.0.0" 145 | } 146 | }, 147 | "browserify-des": { 148 | "version": "1.0.2", 149 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 150 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 151 | "requires": { 152 | "cipher-base": "^1.0.1", 153 | "des.js": "^1.0.0", 154 | "inherits": "^2.0.1", 155 | "safe-buffer": "^5.1.2" 156 | } 157 | }, 158 | "browserify-rsa": { 159 | "version": "4.0.1", 160 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 161 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 162 | "requires": { 163 | "bn.js": "^4.1.0", 164 | "randombytes": "^2.0.1" 165 | } 166 | }, 167 | "browserify-sign": { 168 | "version": "4.0.4", 169 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 170 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 171 | "requires": { 172 | "bn.js": "^4.1.1", 173 | "browserify-rsa": "^4.0.0", 174 | "create-hash": "^1.1.0", 175 | "create-hmac": "^1.1.2", 176 | "elliptic": "^6.0.0", 177 | "inherits": "^2.0.1", 178 | "parse-asn1": "^5.0.0" 179 | } 180 | }, 181 | "browserify-zlib": { 182 | "version": "0.2.0", 183 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 184 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 185 | "requires": { 186 | "pako": "~1.0.5" 187 | } 188 | }, 189 | "buffer": { 190 | "version": "4.9.2", 191 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 192 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 193 | "requires": { 194 | "base64-js": "^1.0.2", 195 | "ieee754": "^1.1.4", 196 | "isarray": "^1.0.0" 197 | } 198 | }, 199 | "buffer-xor": { 200 | "version": "1.0.3", 201 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 202 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" 203 | }, 204 | "builtin-status-codes": { 205 | "version": "3.0.0", 206 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 207 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" 208 | }, 209 | "caseless": { 210 | "version": "0.12.0", 211 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 212 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 213 | }, 214 | "cipher-base": { 215 | "version": "1.0.4", 216 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 217 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 218 | "requires": { 219 | "inherits": "^2.0.1", 220 | "safe-buffer": "^5.0.1" 221 | } 222 | }, 223 | "combined-stream": { 224 | "version": "1.0.8", 225 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 226 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 227 | "requires": { 228 | "delayed-stream": "~1.0.0" 229 | } 230 | }, 231 | "commander": { 232 | "version": "2.20.3", 233 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 234 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 235 | "optional": true 236 | }, 237 | "concat-with-sourcemaps": { 238 | "version": "1.1.0", 239 | "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", 240 | "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", 241 | "requires": { 242 | "source-map": "^0.6.1" 243 | } 244 | }, 245 | "console-browserify": { 246 | "version": "1.2.0", 247 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", 248 | "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" 249 | }, 250 | "constants-browserify": { 251 | "version": "1.0.0", 252 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 253 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" 254 | }, 255 | "core-util-is": { 256 | "version": "1.0.2", 257 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 258 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 259 | }, 260 | "create-ecdh": { 261 | "version": "4.0.3", 262 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", 263 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", 264 | "requires": { 265 | "bn.js": "^4.1.0", 266 | "elliptic": "^6.0.0" 267 | } 268 | }, 269 | "create-hash": { 270 | "version": "1.2.0", 271 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 272 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 273 | "requires": { 274 | "cipher-base": "^1.0.1", 275 | "inherits": "^2.0.1", 276 | "md5.js": "^1.3.4", 277 | "ripemd160": "^2.0.1", 278 | "sha.js": "^2.4.0" 279 | } 280 | }, 281 | "create-hmac": { 282 | "version": "1.1.7", 283 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 284 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 285 | "requires": { 286 | "cipher-base": "^1.0.3", 287 | "create-hash": "^1.1.0", 288 | "inherits": "^2.0.1", 289 | "ripemd160": "^2.0.0", 290 | "safe-buffer": "^5.0.1", 291 | "sha.js": "^2.4.8" 292 | } 293 | }, 294 | "crypto-browserify": { 295 | "version": "3.12.0", 296 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 297 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 298 | "requires": { 299 | "browserify-cipher": "^1.0.0", 300 | "browserify-sign": "^4.0.0", 301 | "create-ecdh": "^4.0.0", 302 | "create-hash": "^1.1.0", 303 | "create-hmac": "^1.1.0", 304 | "diffie-hellman": "^5.0.0", 305 | "inherits": "^2.0.1", 306 | "pbkdf2": "^3.0.3", 307 | "public-encrypt": "^4.0.0", 308 | "randombytes": "^2.0.0", 309 | "randomfill": "^1.0.3" 310 | } 311 | }, 312 | "dashdash": { 313 | "version": "1.14.1", 314 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 315 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 316 | "requires": { 317 | "assert-plus": "^1.0.0" 318 | } 319 | }, 320 | "delayed-stream": { 321 | "version": "1.0.0", 322 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 323 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 324 | }, 325 | "des.js": { 326 | "version": "1.0.1", 327 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", 328 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", 329 | "requires": { 330 | "inherits": "^2.0.1", 331 | "minimalistic-assert": "^1.0.0" 332 | } 333 | }, 334 | "diffie-hellman": { 335 | "version": "5.0.3", 336 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 337 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 338 | "requires": { 339 | "bn.js": "^4.1.0", 340 | "miller-rabin": "^4.0.0", 341 | "randombytes": "^2.0.0" 342 | } 343 | }, 344 | "domain-browser": { 345 | "version": "1.2.0", 346 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 347 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" 348 | }, 349 | "dotenv": { 350 | "version": "8.2.0", 351 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 352 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" 353 | }, 354 | "ecc-jsbn": { 355 | "version": "0.1.2", 356 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 357 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 358 | "requires": { 359 | "jsbn": "~0.1.0", 360 | "safer-buffer": "^2.1.0" 361 | } 362 | }, 363 | "elliptic": { 364 | "version": "6.5.2", 365 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", 366 | "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", 367 | "requires": { 368 | "bn.js": "^4.4.0", 369 | "brorand": "^1.0.1", 370 | "hash.js": "^1.0.0", 371 | "hmac-drbg": "^1.0.0", 372 | "inherits": "^2.0.1", 373 | "minimalistic-assert": "^1.0.0", 374 | "minimalistic-crypto-utils": "^1.0.0" 375 | } 376 | }, 377 | "events": { 378 | "version": "3.0.0", 379 | "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", 380 | "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" 381 | }, 382 | "evp_bytestokey": { 383 | "version": "1.0.3", 384 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 385 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 386 | "requires": { 387 | "md5.js": "^1.3.4", 388 | "safe-buffer": "^5.1.1" 389 | } 390 | }, 391 | "extend": { 392 | "version": "3.0.2", 393 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 394 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 395 | }, 396 | "extsprintf": { 397 | "version": "1.3.0", 398 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 399 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 400 | }, 401 | "fast-deep-equal": { 402 | "version": "3.1.1", 403 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 404 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" 405 | }, 406 | "fast-json-stable-stringify": { 407 | "version": "2.1.0", 408 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 409 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 410 | }, 411 | "forever-agent": { 412 | "version": "0.6.1", 413 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 414 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 415 | }, 416 | "form-data": { 417 | "version": "2.3.3", 418 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 419 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 420 | "requires": { 421 | "asynckit": "^0.4.0", 422 | "combined-stream": "^1.0.6", 423 | "mime-types": "^2.1.12" 424 | } 425 | }, 426 | "getpass": { 427 | "version": "0.1.7", 428 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 429 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 430 | "requires": { 431 | "assert-plus": "^1.0.0" 432 | } 433 | }, 434 | "gulp-header": { 435 | "version": "1.8.12", 436 | "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", 437 | "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==", 438 | "requires": { 439 | "concat-with-sourcemaps": "*", 440 | "lodash.template": "^4.4.0", 441 | "through2": "^2.0.0" 442 | } 443 | }, 444 | "handlebars": { 445 | "version": "4.5.3", 446 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", 447 | "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", 448 | "requires": { 449 | "neo-async": "^2.6.0", 450 | "optimist": "^0.6.1", 451 | "source-map": "^0.6.1", 452 | "uglify-js": "^3.1.4" 453 | } 454 | }, 455 | "handlebars-utils": { 456 | "version": "1.0.6", 457 | "resolved": "https://registry.npmjs.org/handlebars-utils/-/handlebars-utils-1.0.6.tgz", 458 | "integrity": "sha512-d5mmoQXdeEqSKMtQQZ9WkiUcO1E3tPbWxluCK9hVgIDPzQa9WsKo3Lbe/sGflTe7TomHEeZaOgwIkyIr1kfzkw==", 459 | "requires": { 460 | "kind-of": "^6.0.0", 461 | "typeof-article": "^0.1.1" 462 | } 463 | }, 464 | "har-schema": { 465 | "version": "2.0.0", 466 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 467 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 468 | }, 469 | "har-validator": { 470 | "version": "5.1.3", 471 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 472 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 473 | "requires": { 474 | "ajv": "^6.5.5", 475 | "har-schema": "^2.0.0" 476 | } 477 | }, 478 | "hash-base": { 479 | "version": "3.0.4", 480 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 481 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 482 | "requires": { 483 | "inherits": "^2.0.1", 484 | "safe-buffer": "^5.0.1" 485 | } 486 | }, 487 | "hash.js": { 488 | "version": "1.1.7", 489 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 490 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 491 | "requires": { 492 | "inherits": "^2.0.3", 493 | "minimalistic-assert": "^1.0.1" 494 | } 495 | }, 496 | "helper-markdown": { 497 | "version": "1.0.0", 498 | "resolved": "https://registry.npmjs.org/helper-markdown/-/helper-markdown-1.0.0.tgz", 499 | "integrity": "sha512-AnDqMS4ejkQK0MXze7pA9TM3pu01ZY+XXsES6gEE0RmCGk5/NIfvTn0NmItfyDOjRAzyo9z6X7YHbHX4PzIvOA==", 500 | "requires": { 501 | "handlebars-utils": "^1.0.2", 502 | "highlight.js": "^9.12.0", 503 | "remarkable": "^1.7.1" 504 | } 505 | }, 506 | "highlight.js": { 507 | "version": "9.16.2", 508 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.16.2.tgz", 509 | "integrity": "sha512-feMUrVLZvjy0oC7FVJQcSQRqbBq9kwqnYE4+Kj9ZjbHh3g+BisiPgF49NyQbVLNdrL/qqZr3Ca9yOKwgn2i/tw==" 510 | }, 511 | "hmac-drbg": { 512 | "version": "1.0.1", 513 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 514 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 515 | "requires": { 516 | "hash.js": "^1.0.3", 517 | "minimalistic-assert": "^1.0.0", 518 | "minimalistic-crypto-utils": "^1.0.1" 519 | } 520 | }, 521 | "http-signature": { 522 | "version": "1.2.0", 523 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 524 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 525 | "requires": { 526 | "assert-plus": "^1.0.0", 527 | "jsprim": "^1.2.2", 528 | "sshpk": "^1.7.0" 529 | } 530 | }, 531 | "https-browserify": { 532 | "version": "1.0.0", 533 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 534 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" 535 | }, 536 | "ieee754": { 537 | "version": "1.1.13", 538 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 539 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 540 | }, 541 | "inherits": { 542 | "version": "2.0.3", 543 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 544 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 545 | }, 546 | "is-buffer": { 547 | "version": "1.1.6", 548 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 549 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 550 | }, 551 | "is-typedarray": { 552 | "version": "1.0.0", 553 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 554 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 555 | }, 556 | "isarray": { 557 | "version": "1.0.0", 558 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 559 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 560 | }, 561 | "isexe": { 562 | "version": "2.0.0", 563 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 564 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 565 | }, 566 | "isstream": { 567 | "version": "0.1.2", 568 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 569 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 570 | }, 571 | "jsbn": { 572 | "version": "0.1.1", 573 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 574 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 575 | }, 576 | "json-schema": { 577 | "version": "0.2.3", 578 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 579 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 580 | }, 581 | "json-schema-traverse": { 582 | "version": "0.4.1", 583 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 584 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 585 | }, 586 | "json-stringify-safe": { 587 | "version": "5.0.1", 588 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 589 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 590 | }, 591 | "jsprim": { 592 | "version": "1.4.1", 593 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 594 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 595 | "requires": { 596 | "assert-plus": "1.0.0", 597 | "extsprintf": "1.3.0", 598 | "json-schema": "0.2.3", 599 | "verror": "1.10.0" 600 | } 601 | }, 602 | "kind-of": { 603 | "version": "6.0.2", 604 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 605 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" 606 | }, 607 | "lodash._reinterpolate": { 608 | "version": "3.0.0", 609 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", 610 | "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" 611 | }, 612 | "lodash.template": { 613 | "version": "4.5.0", 614 | "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", 615 | "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", 616 | "requires": { 617 | "lodash._reinterpolate": "^3.0.0", 618 | "lodash.templatesettings": "^4.0.0" 619 | } 620 | }, 621 | "lodash.templatesettings": { 622 | "version": "4.2.0", 623 | "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", 624 | "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", 625 | "requires": { 626 | "lodash._reinterpolate": "^3.0.0" 627 | } 628 | }, 629 | "md5.js": { 630 | "version": "1.3.5", 631 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 632 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 633 | "requires": { 634 | "hash-base": "^3.0.0", 635 | "inherits": "^2.0.1", 636 | "safe-buffer": "^5.1.2" 637 | } 638 | }, 639 | "miller-rabin": { 640 | "version": "4.0.1", 641 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 642 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 643 | "requires": { 644 | "bn.js": "^4.0.0", 645 | "brorand": "^1.0.1" 646 | } 647 | }, 648 | "mime-db": { 649 | "version": "1.43.0", 650 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", 651 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" 652 | }, 653 | "mime-types": { 654 | "version": "2.1.26", 655 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", 656 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", 657 | "requires": { 658 | "mime-db": "1.43.0" 659 | } 660 | }, 661 | "minimalistic-assert": { 662 | "version": "1.0.1", 663 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 664 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 665 | }, 666 | "minimalistic-crypto-utils": { 667 | "version": "1.0.1", 668 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 669 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 670 | }, 671 | "minimist": { 672 | "version": "0.0.10", 673 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 674 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" 675 | }, 676 | "mkdirp": { 677 | "version": "0.5.1", 678 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 679 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 680 | "requires": { 681 | "minimist": "0.0.8" 682 | }, 683 | "dependencies": { 684 | "minimist": { 685 | "version": "0.0.8", 686 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 687 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 688 | } 689 | } 690 | }, 691 | "neo-async": { 692 | "version": "2.6.1", 693 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", 694 | "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" 695 | }, 696 | "node-fetch": { 697 | "version": "2.6.0", 698 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", 699 | "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" 700 | }, 701 | "node-libs-browser": { 702 | "version": "2.2.1", 703 | "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", 704 | "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", 705 | "requires": { 706 | "assert": "^1.1.1", 707 | "browserify-zlib": "^0.2.0", 708 | "buffer": "^4.3.0", 709 | "console-browserify": "^1.1.0", 710 | "constants-browserify": "^1.0.0", 711 | "crypto-browserify": "^3.11.0", 712 | "domain-browser": "^1.1.1", 713 | "events": "^3.0.0", 714 | "https-browserify": "^1.0.0", 715 | "os-browserify": "^0.3.0", 716 | "path-browserify": "0.0.1", 717 | "process": "^0.11.10", 718 | "punycode": "^1.2.4", 719 | "querystring-es3": "^0.2.0", 720 | "readable-stream": "^2.3.3", 721 | "stream-browserify": "^2.0.1", 722 | "stream-http": "^2.7.2", 723 | "string_decoder": "^1.0.0", 724 | "timers-browserify": "^2.0.4", 725 | "tty-browserify": "0.0.0", 726 | "url": "^0.11.0", 727 | "util": "^0.11.0", 728 | "vm-browserify": "^1.0.1" 729 | } 730 | }, 731 | "oauth-sign": { 732 | "version": "0.9.0", 733 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 734 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 735 | }, 736 | "object-assign": { 737 | "version": "4.1.1", 738 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 739 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 740 | }, 741 | "optimist": { 742 | "version": "0.6.1", 743 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 744 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 745 | "requires": { 746 | "minimist": "~0.0.1", 747 | "wordwrap": "~0.0.2" 748 | } 749 | }, 750 | "os-browserify": { 751 | "version": "0.3.0", 752 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 753 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" 754 | }, 755 | "pako": { 756 | "version": "1.0.10", 757 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", 758 | "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" 759 | }, 760 | "parse-asn1": { 761 | "version": "5.1.5", 762 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", 763 | "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", 764 | "requires": { 765 | "asn1.js": "^4.0.0", 766 | "browserify-aes": "^1.0.0", 767 | "create-hash": "^1.1.0", 768 | "evp_bytestokey": "^1.0.0", 769 | "pbkdf2": "^3.0.3", 770 | "safe-buffer": "^5.1.1" 771 | } 772 | }, 773 | "path-browserify": { 774 | "version": "0.0.1", 775 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 776 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" 777 | }, 778 | "pbkdf2": { 779 | "version": "3.0.17", 780 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 781 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 782 | "requires": { 783 | "create-hash": "^1.1.2", 784 | "create-hmac": "^1.1.4", 785 | "ripemd160": "^2.0.1", 786 | "safe-buffer": "^5.0.1", 787 | "sha.js": "^2.4.8" 788 | } 789 | }, 790 | "performance-now": { 791 | "version": "2.1.0", 792 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 793 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 794 | }, 795 | "process": { 796 | "version": "0.11.10", 797 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 798 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" 799 | }, 800 | "process-nextick-args": { 801 | "version": "2.0.1", 802 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 803 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 804 | }, 805 | "psl": { 806 | "version": "1.7.0", 807 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", 808 | "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" 809 | }, 810 | "public-encrypt": { 811 | "version": "4.0.3", 812 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 813 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 814 | "requires": { 815 | "bn.js": "^4.1.0", 816 | "browserify-rsa": "^4.0.0", 817 | "create-hash": "^1.1.0", 818 | "parse-asn1": "^5.0.0", 819 | "randombytes": "^2.0.1", 820 | "safe-buffer": "^5.1.2" 821 | } 822 | }, 823 | "punycode": { 824 | "version": "1.4.1", 825 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 826 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 827 | }, 828 | "qs": { 829 | "version": "6.5.2", 830 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 831 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 832 | }, 833 | "querystring": { 834 | "version": "0.2.0", 835 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 836 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" 837 | }, 838 | "querystring-es3": { 839 | "version": "0.2.1", 840 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 841 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" 842 | }, 843 | "randombytes": { 844 | "version": "2.1.0", 845 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 846 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 847 | "requires": { 848 | "safe-buffer": "^5.1.0" 849 | } 850 | }, 851 | "randomfill": { 852 | "version": "1.0.4", 853 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 854 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 855 | "requires": { 856 | "randombytes": "^2.0.5", 857 | "safe-buffer": "^5.1.0" 858 | } 859 | }, 860 | "readable-stream": { 861 | "version": "2.3.6", 862 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 863 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 864 | "requires": { 865 | "core-util-is": "~1.0.0", 866 | "inherits": "~2.0.3", 867 | "isarray": "~1.0.0", 868 | "process-nextick-args": "~2.0.0", 869 | "safe-buffer": "~5.1.1", 870 | "string_decoder": "~1.1.1", 871 | "util-deprecate": "~1.0.1" 872 | }, 873 | "dependencies": { 874 | "string_decoder": { 875 | "version": "1.1.1", 876 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 877 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 878 | "requires": { 879 | "safe-buffer": "~5.1.0" 880 | } 881 | } 882 | } 883 | }, 884 | "readline-sync": { 885 | "version": "1.4.10", 886 | "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", 887 | "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==" 888 | }, 889 | "remarkable": { 890 | "version": "1.7.4", 891 | "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", 892 | "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", 893 | "requires": { 894 | "argparse": "^1.0.10", 895 | "autolinker": "~0.28.0" 896 | } 897 | }, 898 | "request": { 899 | "version": "2.88.0", 900 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 901 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 902 | "requires": { 903 | "aws-sign2": "~0.7.0", 904 | "aws4": "^1.8.0", 905 | "caseless": "~0.12.0", 906 | "combined-stream": "~1.0.6", 907 | "extend": "~3.0.2", 908 | "forever-agent": "~0.6.1", 909 | "form-data": "~2.3.2", 910 | "har-validator": "~5.1.0", 911 | "http-signature": "~1.2.0", 912 | "is-typedarray": "~1.0.0", 913 | "isstream": "~0.1.2", 914 | "json-stringify-safe": "~5.0.1", 915 | "mime-types": "~2.1.19", 916 | "oauth-sign": "~0.9.0", 917 | "performance-now": "^2.1.0", 918 | "qs": "~6.5.2", 919 | "safe-buffer": "^5.1.2", 920 | "tough-cookie": "~2.4.3", 921 | "tunnel-agent": "^0.6.0", 922 | "uuid": "^3.3.2" 923 | } 924 | }, 925 | "ripemd160": { 926 | "version": "2.0.2", 927 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 928 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 929 | "requires": { 930 | "hash-base": "^3.0.0", 931 | "inherits": "^2.0.1" 932 | } 933 | }, 934 | "safe-buffer": { 935 | "version": "5.1.2", 936 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 937 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 938 | }, 939 | "safer-buffer": { 940 | "version": "2.1.2", 941 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 942 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 943 | }, 944 | "setimmediate": { 945 | "version": "1.0.5", 946 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 947 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 948 | }, 949 | "sha.js": { 950 | "version": "2.4.11", 951 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 952 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 953 | "requires": { 954 | "inherits": "^2.0.1", 955 | "safe-buffer": "^5.0.1" 956 | } 957 | }, 958 | "shadow-cljs": { 959 | "version": "2.8.76", 960 | "resolved": "https://registry.npmjs.org/shadow-cljs/-/shadow-cljs-2.8.76.tgz", 961 | "integrity": "sha512-xh2KwuvUhzlQHuL/y0h5zxVmCMalLg9rMiaYW7LwhDJ0x6QAzbuMIsRNVsoPneXVl7Z81FARi2ie3wzizWbzWA==", 962 | "requires": { 963 | "mkdirp": "^0.5.1", 964 | "node-libs-browser": "^2.0.0", 965 | "readline-sync": "^1.4.7", 966 | "shadow-cljs-jar": "1.3.1", 967 | "source-map-support": "^0.4.15", 968 | "which": "^1.3.1", 969 | "ws": "^3.0.0" 970 | } 971 | }, 972 | "shadow-cljs-jar": { 973 | "version": "1.3.1", 974 | "resolved": "https://registry.npmjs.org/shadow-cljs-jar/-/shadow-cljs-jar-1.3.1.tgz", 975 | "integrity": "sha512-IJSm4Gfu/wWDsOQ0wNrSxuaGdjzsd78us+3bop3cpWsoO2Igdu6VIBItYrZHRRBKl5LIZKXfnSh/2eWG3C1EFw==" 976 | }, 977 | "slugify": { 978 | "version": "1.3.6", 979 | "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.6.tgz", 980 | "integrity": "sha512-wA9XS475ZmGNlEnYYLPReSfuz/c3VQsEMoU43mi6OnKMCdbnFXd4/Yg7J0lBv8jkPolacMpOrWEaoYxuE1+hoQ==" 981 | }, 982 | "source-map": { 983 | "version": "0.6.1", 984 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 985 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 986 | }, 987 | "source-map-support": { 988 | "version": "0.4.18", 989 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 990 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 991 | "requires": { 992 | "source-map": "^0.5.6" 993 | }, 994 | "dependencies": { 995 | "source-map": { 996 | "version": "0.5.7", 997 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 998 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 999 | } 1000 | } 1001 | }, 1002 | "sprintf-js": { 1003 | "version": "1.0.3", 1004 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1005 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 1006 | }, 1007 | "sshpk": { 1008 | "version": "1.16.1", 1009 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1010 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1011 | "requires": { 1012 | "asn1": "~0.2.3", 1013 | "assert-plus": "^1.0.0", 1014 | "bcrypt-pbkdf": "^1.0.0", 1015 | "dashdash": "^1.12.0", 1016 | "ecc-jsbn": "~0.1.1", 1017 | "getpass": "^0.1.1", 1018 | "jsbn": "~0.1.0", 1019 | "safer-buffer": "^2.0.2", 1020 | "tweetnacl": "~0.14.0" 1021 | } 1022 | }, 1023 | "stream-browserify": { 1024 | "version": "2.0.2", 1025 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 1026 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", 1027 | "requires": { 1028 | "inherits": "~2.0.1", 1029 | "readable-stream": "^2.0.2" 1030 | } 1031 | }, 1032 | "stream-http": { 1033 | "version": "2.8.3", 1034 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", 1035 | "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", 1036 | "requires": { 1037 | "builtin-status-codes": "^3.0.0", 1038 | "inherits": "^2.0.1", 1039 | "readable-stream": "^2.3.6", 1040 | "to-arraybuffer": "^1.0.0", 1041 | "xtend": "^4.0.0" 1042 | } 1043 | }, 1044 | "string_decoder": { 1045 | "version": "1.3.0", 1046 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1047 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1048 | "requires": { 1049 | "safe-buffer": "~5.2.0" 1050 | }, 1051 | "dependencies": { 1052 | "safe-buffer": { 1053 | "version": "5.2.0", 1054 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1055 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 1056 | } 1057 | } 1058 | }, 1059 | "through2": { 1060 | "version": "2.0.5", 1061 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1062 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1063 | "requires": { 1064 | "readable-stream": "~2.3.6", 1065 | "xtend": "~4.0.1" 1066 | } 1067 | }, 1068 | "timers-browserify": { 1069 | "version": "2.0.11", 1070 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", 1071 | "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", 1072 | "requires": { 1073 | "setimmediate": "^1.0.4" 1074 | } 1075 | }, 1076 | "to-arraybuffer": { 1077 | "version": "1.0.1", 1078 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", 1079 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" 1080 | }, 1081 | "tough-cookie": { 1082 | "version": "2.4.3", 1083 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 1084 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 1085 | "requires": { 1086 | "psl": "^1.1.24", 1087 | "punycode": "^1.4.1" 1088 | } 1089 | }, 1090 | "tty-browserify": { 1091 | "version": "0.0.0", 1092 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", 1093 | "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" 1094 | }, 1095 | "tunnel-agent": { 1096 | "version": "0.6.0", 1097 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1098 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1099 | "requires": { 1100 | "safe-buffer": "^5.0.1" 1101 | } 1102 | }, 1103 | "tweetnacl": { 1104 | "version": "0.14.5", 1105 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1106 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 1107 | }, 1108 | "typeof-article": { 1109 | "version": "0.1.1", 1110 | "resolved": "https://registry.npmjs.org/typeof-article/-/typeof-article-0.1.1.tgz", 1111 | "integrity": "sha1-nwfnM8P7tkb/qeYcCN66zUYOBq8=", 1112 | "requires": { 1113 | "kind-of": "^3.1.0" 1114 | }, 1115 | "dependencies": { 1116 | "kind-of": { 1117 | "version": "3.2.2", 1118 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1119 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1120 | "requires": { 1121 | "is-buffer": "^1.1.5" 1122 | } 1123 | } 1124 | } 1125 | }, 1126 | "uglify-js": { 1127 | "version": "3.7.0", 1128 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.0.tgz", 1129 | "integrity": "sha512-PC/ee458NEMITe1OufAjal65i6lB58R1HWMRcxwvdz1UopW0DYqlRL3xdu3IcTvTXsB02CRHykidkTRL+A3hQA==", 1130 | "optional": true, 1131 | "requires": { 1132 | "commander": "~2.20.3", 1133 | "source-map": "~0.6.1" 1134 | } 1135 | }, 1136 | "ultron": { 1137 | "version": "1.1.1", 1138 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", 1139 | "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" 1140 | }, 1141 | "uri-js": { 1142 | "version": "4.2.2", 1143 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1144 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1145 | "requires": { 1146 | "punycode": "^2.1.0" 1147 | }, 1148 | "dependencies": { 1149 | "punycode": { 1150 | "version": "2.1.1", 1151 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1152 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1153 | } 1154 | } 1155 | }, 1156 | "url": { 1157 | "version": "0.11.0", 1158 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 1159 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 1160 | "requires": { 1161 | "punycode": "1.3.2", 1162 | "querystring": "0.2.0" 1163 | }, 1164 | "dependencies": { 1165 | "punycode": { 1166 | "version": "1.3.2", 1167 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1168 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 1169 | } 1170 | } 1171 | }, 1172 | "util": { 1173 | "version": "0.11.1", 1174 | "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", 1175 | "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", 1176 | "requires": { 1177 | "inherits": "2.0.3" 1178 | } 1179 | }, 1180 | "util-deprecate": { 1181 | "version": "1.0.2", 1182 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1183 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1184 | }, 1185 | "uuid": { 1186 | "version": "3.4.0", 1187 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1188 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 1189 | }, 1190 | "verror": { 1191 | "version": "1.10.0", 1192 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1193 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1194 | "requires": { 1195 | "assert-plus": "^1.0.0", 1196 | "core-util-is": "1.0.2", 1197 | "extsprintf": "^1.2.0" 1198 | } 1199 | }, 1200 | "vm-browserify": { 1201 | "version": "1.1.2", 1202 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", 1203 | "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" 1204 | }, 1205 | "which": { 1206 | "version": "1.3.1", 1207 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1208 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1209 | "requires": { 1210 | "isexe": "^2.0.0" 1211 | } 1212 | }, 1213 | "wordwrap": { 1214 | "version": "0.0.3", 1215 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 1216 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 1217 | }, 1218 | "ws": { 1219 | "version": "3.3.3", 1220 | "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", 1221 | "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", 1222 | "requires": { 1223 | "async-limiter": "~1.0.0", 1224 | "safe-buffer": "~5.1.0", 1225 | "ultron": "~1.1.0" 1226 | } 1227 | }, 1228 | "xtend": { 1229 | "version": "4.0.2", 1230 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1231 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 1232 | } 1233 | } 1234 | } 1235 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "arena-ssg", 3 | "version": "0.0.1", 4 | "description": "SSG for Are.na", 5 | "scripts": { 6 | "prestart": "npx shadow-cljs compile ssg && node ./.data/out/ssg.js" 7 | }, 8 | "dependencies": { 9 | "dotenv": "8.2.0", 10 | "handlebars": "^4.5.3", 11 | "helper-markdown": "^1.0.0", 12 | "node-fetch": "2.6.0", 13 | "request": "2.88.0", 14 | "shadow-cljs": "2.8.76", 15 | "slugify": "^1.3.6" 16 | }, 17 | "engines": { 18 | "node": "12" 19 | }, 20 | "repository": { 21 | "url": "https://glitch.com/edit/#!/hello-express" 22 | }, 23 | "license": "MIT", 24 | "keywords": [ 25 | "node", 26 | "glitch", 27 | "express" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /refresh.js: -------------------------------------------------------------------------------- 1 | var https = require('https'); 2 | 3 | exports.handler = (event, context, callback) => { 4 | console.log("make request") 5 | var req = https.request({ 6 | hostname: "api.netlify.com", 7 | port: 443, 8 | path: '/build_hooks/5de1cce41738f68985b9c3b1', 9 | headers: {"Content-Type":"text/plain; charset=utf-8"}, 10 | method: 'POST' 11 | }, function (res) { 12 | console.log('statusCode:', res.statusCode); 13 | console.log('headers:', res.headers); 14 | var body=""; 15 | res.on("data", (res) => 16 | body+=res) 17 | res.on('end', () => 18 | callback(null, {statusCode: res.statusCode, body: res.statusCode == 200 ? "refresh requested, changes should be visible in 30 seconds" : "error!"})) 19 | }) 20 | req.on("error", (e) => 21 | callback(null, {statusCode: 500, body: "oops"})) 22 | req.end() 23 | } 24 | -------------------------------------------------------------------------------- /shadow-cljs.edn: -------------------------------------------------------------------------------- 1 | ;; shadow-cljs configuration 2 | {:source-paths 3 | ["src/dev" 4 | "src/main" 5 | "src/test"] 6 | 7 | :dependencies [] 8 | :cache-root ".cache" 9 | 10 | :builds 11 | {:ssg 12 | {:target :node-script 13 | :main blog.ssg.app/main 14 | :output-to ".data/out/ssg.js" 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/blog/ssg/app.cljs: -------------------------------------------------------------------------------- 1 | (ns blog.ssg.app 2 | (:require [clojure.string :as string] 3 | [cljs.reader :as reader])) 4 | 5 | (def hrstart (js/process.hrtime)) 6 | 7 | (def dotenv (.config (js/require "dotenv"))) 8 | (def fetch (js/require "node-fetch")) 9 | (def hb (js/require "handlebars")) 10 | (def fs (js/require "fs")) 11 | (def slugify (js/require "slugify")) 12 | 13 | (def token js/process.env.ARENA_ACCESS_TOKEN) 14 | (def channel-slug js/process.env.ARENA_CHANNEL_SLUG) 15 | 16 | (assert channel-slug "You need to set the channel as a environment variable named ARENA_CHANNEL_SLUG. For example: words-e6vp8lael4m") 17 | 18 | (defn parse-edn [s] 19 | (-> (string/replace-all s #"<.+>(.+)<.+>" (fn [m i] i)) ;; strip html tags around urls, because of are.na :( 20 | (reader/read-string))) 21 | 22 | (def media-embed-codes 23 | {":image" (fn [edn] 24 | (let [{:keys [url align style class]} (parse-edn (str edn "}"))] 25 | (str ""))) 26 | ":bandcamp" (fn [id] (str "")) 27 | ":youtube" (fn [id] (str ""))}) 28 | 29 | (defn media-embed [_match source id] 30 | (let [embed-code (get media-embed-codes source)] 31 | (embed-code id))) 32 | 33 | (defn media-parser [item] 34 | (update item :content_html string/replace-all #"

\{{3}(\S+) (.+?)\}{3}" media-embed)) 35 | 36 | (defn gen-index [items] 37 | (let [template (fs.readFileSync "./views/index.html" #js {"encoding" "utf8"}) 38 | html ((hb.compile template) (clj->js {:items items}))] 39 | (fs.writeFileSync "./.data/static/index.html" html)) 40 | items) 41 | 42 | (defn gen-rss [items] 43 | (let [template (fs.readFileSync "./views/rss.xml" #js {"encoding" "utf8"}) 44 | xml ((hb.compile template) (clj->js {:items items}))] 45 | (fs.writeFileSync "./.data/static/rss.xml" xml)) 46 | items) 47 | 48 | (def post-template (-> "./views/post.html" 49 | (fs.readFileSync #js {"encoding" "utf8"}) 50 | (hb.compile))) 51 | 52 | (defn gen-post [{:keys [slug] :as post}] 53 | (let [html (post-template (clj->js post))] 54 | (fs.writeFileSync (str "./.data/static/" slug ".html") html))) 55 | 56 | (defn item->slug [{:keys [generated_title id] :as item}] 57 | (let [slug (slugify (str (.toLowerCase generated_title) " " id))] 58 | (assoc item :slug slug))) 59 | 60 | (defn gen-site [] 61 | (-> (fetch (str "https://api.are.na/v2/channels/" channel-slug) 62 | #js {"headers" #js {"Authorization" (str "Bearer " token)}}) 63 | (.then (fn [res] (.json res))) 64 | (.then (fn [json] (js->clj json :keywordize-keys true))) 65 | (.then (fn [data] (->> data 66 | :contents 67 | (filter #(= "Text" (-> % :class))) 68 | (reverse) 69 | (map #(-> % (select-keys [:generated_title :content :content_html :id :updated_at :created_at]))) 70 | (map #(assoc % :created_at_rfc822 (-> (:created_at %) (js/Date.) (.toUTCString)))) 71 | (map media-parser) 72 | (map item->slug)))) 73 | (.then (fn [items] (doall (map gen-post items)) items)) 74 | (.then gen-index) 75 | (.then gen-rss) 76 | (.then (fn [items] 77 | (let [[s ms] (js/process.hrtime hrstart)] 78 | (js/console.info "Succesfully generated blog in %ds %dms" s, (/ ms 1000000))) 79 | (js/process.exit))))) 80 | 81 | (defn main [& cli-args] 82 | (gen-site)) 83 | -------------------------------------------------------------------------------- /views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Jelle's 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {{#items}} 15 |

{{generated_title}}{{generated_title}}

16 | {{/items}} 17 | 18 | 19 | -------------------------------------------------------------------------------- /views/post.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{generated_title}} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | {{{content_html}}} 15 |

Published at {{{created_at_rfc822}}}

16 |
17 |

Leave a comment on Are.na

18 |

← back

19 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /views/rss.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | Jelle's Blog 6 | https://jelle.io/ 7 | Here are some of my words, without fact checking, but with typos. 8 | 9 | en-uk 10 | 11 | {{#each items}} 12 | 13 | {{generated_title}} 14 | https://jelle.io/{{slug}} 15 | {{created_at_rfc822}} 16 | https://jelle.io/{{slug}} 17 | {{content}} 18 | 19 | 20 | {{/each}} 21 | 22 | 23 | 24 | --------------------------------------------------------------------------------