Published at {{{created_at_rfc822}}}
16 |├── .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 |Published at {{{created_at_rfc822}}}
16 |Leave a comment on Are.na
18 | 19 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /views/rss.xml: -------------------------------------------------------------------------------- 1 | 2 |