-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
574 lines (462 loc) · 52.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Fullstack JavaScript Lessons | Introspective Code</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta property="og:url" content="https://introspective-code.github.io/" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Fullstack JavaScript Lessons" />
<meta
property="og:description"
content="A collection of full-stack JavaScript projects for learning modern js fundamentals."
/>
<meta
property="og:image"
content="https://introspective-code.github.io/fullstack-js-lessons/opengraph-image.png"
/>
<meta
name="description"
content="A collection of full-stack JavaScript projects for learning modern js fundamentals."
/>
<link href="https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono&display=swap" rel="stylesheet">
<link rel="icon" type="image/png" sizes="16x16" href="https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/apple/237/open-book_1f4d6.png">
<link rel="stylesheet"
href="//cdn.jsdelivr.net/gh/highlightjs/[email protected]/build/styles/tomorrow-night-bright.min.css">
<script src="//cdn.jsdelivr.net/gh/highlightjs/[email protected]/build/highlight.min.js"></script>
<style>
body {
background-color: #0a3d62;
color: #82ccdd;
font-family: 'Quicksand', sans-serif;
font-size: 1em;
padding: 2rem;
}
.title {
font-size: 3em;
margin-bottom: 1rem;
}
.highlight {
color: #38ada9;
text-decoration: underline;
}
.bold {
font-weight: 800;
}
.thin {
font-weight: 100;
}
.row {
display: flex;
justify-content: center;
}
.column {
padding: 2vw;
width: 100%;
}
@media only screen and (min-width: 1300px) {
.column {
width: 60%;
}
}
.lessons {
display: flex;
flex-wrap: wrap;
}
.lesson {
margin: 0.5rem;
padding: 0.5rem;
border: 1px solid #82ccdd;
border-radius: 0.5rem;
color: #82ccdd;
font-size: 1.15rem;
transition: 200ms ease-in-out all;
}
.lesson:hover {
border: 1px solid #f6b93b;
color: #f6b93b;
}
.lesson-name {
font-weight: 800;
cursor: pointer;
}
.lesson-topics {
font-size: 1rem;
}
.topics {
display: flex;
flex-wrap: wrap;
color: #f6b93b;
padding: 0.5rem;
cursor: pointer;
}
.topic {
padding: 0.25rem;
text-decoration: underline;
}
.header {
font-size: 1.4rem;
font-weight: 100;
color: #3c6382;
}
.footer {
text-align: center;
color: #3c6382;
font-size: 1rem;
}
a {
color: inherit;
}
.topic-selected, .lesson-selected {
color: #e55039;
}
.lesson-selected {
border-color: #e55039;
}
.topic-unselected {
color: #3c6382;
}
.lesson-unselected {
opacity: 0.25;
}
.desc {
margin-bottom: 1rem;
}
.file-preview-content {
}
.lesson-file-previews {
display: flex;
}
.file-preview-path {
font-size: 0.75rem;
border: 1px solid #3c6382;
color: #3c6382;
margin: 0.5rem 0.5rem 0 0;
padding: 0.25rem;
border-radius: 0.5rem;
cursor: pointer;
}
.file-preview-path:hover {
border: 1px solid #78e08f;
color: #78e08f;
}
#modal {
position: absolute;
visibility: hidden;
top: 50%;
left: 50%;
margin-right: -50%;
transform: translate(-50%, -50%);
background-color: #000000e8;
width: 80vw;
height: 80vh;
border-radius: 0.5rem;
padding: 2rem;
z-index: 1;
}
.hljs {
background-color: transparent;
}
#modal-filename {
margin-bottom: 1rem;
}
.modal-container {
overflow-y: scroll;
max-height: 85%;
}
pre {
font-size: 1rem;
}
/* width */
::-webkit-scrollbar {
width: 10px;
}
/* Track */
::-webkit-scrollbar-track {
background: #0a3d62;
}
/* Handle */
::-webkit-scrollbar-thumb {
background: #3c6382;
}
/* Handle on hover */
::-webkit-scrollbar-thumb:hover {
background: #3c6382;
}
code {
font-family: 'Roboto Mono', monospace;
}
.project-name {
color: #f6b93b;
}
.project-filename {
color: #38ada9;
font-weight: bolder;
}
.modal-close {
text-align: right;
cursor: pointer;
transition: 200ms ease-in-out color;
}
.modal-close:hover {
color: #eb2f06;
}
.modal-close:active {
opacity: 0.5;
}
.contributors {
display: flex;
flex-wrap: wrap;
color: #f6b93b;
padding: 0.5rem;
}
.contributor {
padding: 0.25rem;
color: #079992;
}
</style>
</head>
<body>
<div id="modal">
<div onclick="closeModal();" class="modal-close">Close</div>
<div id="modal-filename"></div>
<div class="modal-container">
<pre><code id="modal-content"></code></pre>
</div>
</div>
<div class="row">
<div class="column">
<div class="title thin">Fullstack <span class="highlight">JavaScript Lessons</span></div>
<div class="desc">A collection of full-stack JavaScript projects for learning modern js fundamentals.</div>
<div class="header">Topics:</div>
<div class="topics">
<div class="topic" data-topic="static sites" onclick="handleTopicSelection('static sites')">static sites</div>
<div class="topic" data-topic="express.js" onclick="handleTopicSelection('express.js')">express.js</div>
<div class="topic" data-topic="api" onclick="handleTopicSelection('api')">api</div>
<div class="topic" data-topic="crud" onclick="handleTopicSelection('crud')">crud</div>
<div class="topic" data-topic="nedb" onclick="handleTopicSelection('nedb')">nedb</div>
<div class="topic" data-topic="validation" onclick="handleTopicSelection('validation')">validation</div>
<div class="topic" data-topic="joi schema" onclick="handleTopicSelection('joi schema')">joi schema</div>
<div class="topic" data-topic="promises" onclick="handleTopicSelection('promises')">promises</div>
<div class="topic" data-topic="async/await" onclick="handleTopicSelection('async/await')">async/await</div>
<div class="topic" data-topic="http" onclick="handleTopicSelection('http')">http</div>
<div class="topic" data-topic="axios" onclick="handleTopicSelection('axios')">axios</div>
<div class="topic" data-topic="destructuring" onclick="handleTopicSelection('destructuring')">destructuring</div>
<div class="topic" data-topic="collection" onclick="handleTopicSelection('collection')">collection</div>
<div class="topic" data-topic="json" onclick="handleTopicSelection('json')">json</div>
<div class="topic" data-topic="cli" onclick="handleTopicSelection('cli')">cli</div>
<div class="topic" data-topic="interactive" onclick="handleTopicSelection('interactive')">interactive</div>
<div class="topic" data-topic="arg" onclick="handleTopicSelection('arg')">arg</div>
<div class="topic" data-topic="inquirer" onclick="handleTopicSelection('inquirer')">inquirer</div>
<div class="topic" data-topic="esm" onclick="handleTopicSelection('esm')">esm</div>
<div class="topic" data-topic="dotenv" onclick="handleTopicSelection('dotenv')">dotenv</div>
<div class="topic" data-topic="env" onclick="handleTopicSelection('env')">env</div>
<div class="topic" data-topic="config" onclick="handleTopicSelection('config')">config</div>
<div class="topic" data-topic="client" onclick="handleTopicSelection('client')">client</div>
<div class="topic" data-topic="fetch" onclick="handleTopicSelection('fetch')">fetch</div>
<div class="topic" data-topic="design" onclick="handleTopicSelection('design')">design</div>
<div class="topic" data-topic="css" onclick="handleTopicSelection('css')">css</div>
<div class="topic" data-topic="ui" onclick="handleTopicSelection('ui')">ui</div>
</div>
<div class="header">Example Projects:</div>
<div class="lessons">
<div class="lesson" data-topics="static sites,express.js">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-express-static-site'">Serving Static Websites Using Express</div>
<div class="lesson-topics">static sites, express.js</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-express-static-site/index.js')" class="file-preview-path">index.js</div>
<div onclick="openModal('/lesson-express-static-site/package.json')" class="file-preview-path">package.json</div>
<div onclick="openModal('/lesson-express-static-site/public/index.html')" class="file-preview-path">public/index.html</div>
</div>
</div>
<div class="lesson" data-topics="api,crud,nedb,express.js">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-nedb-crud-api'">CRUD API Built with NeDB and Express</div>
<div class="lesson-topics">api, crud, nedb, express.js</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-nedb-crud-api/data.db')" class="file-preview-path">data.db</div>
<div onclick="openModal('/lesson-nedb-crud-api/index.js')" class="file-preview-path">index.js</div>
<div onclick="openModal('/lesson-nedb-crud-api/package.json')" class="file-preview-path">package.json</div>
</div>
</div>
<div class="lesson" data-topics="api,crud,nedb,express.js,validation,joi schema,promises,async/await">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-nedb-crud-api-async-validation'">CRUD API with NeDB, JOI Validation and Promises</div>
<div class="lesson-topics">api, crud, nedb, express.js, validation, joi schema, promises, async/await</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-nedb-crud-api-async-validation/data.db')" class="file-preview-path">data.db</div>
<div onclick="openModal('/lesson-nedb-crud-api-async-validation/index.js')" class="file-preview-path">index.js</div>
<div onclick="openModal('/lesson-nedb-crud-api-async-validation/package.json')" class="file-preview-path">package.json</div>
</div>
</div>
<div class="lesson" data-topics="static sites,express.js,promises,async/await">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-promises-async-await'">Promises and Async/Await</div>
<div class="lesson-topics">static sites, express.js, promises, async/await</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-promises-async-await/index.js')" class="file-preview-path">index.js</div>
<div onclick="openModal('/lesson-promises-async-await/package.json')" class="file-preview-path">package.json</div>
</div>
</div>
<div class="lesson" data-topics="static sites,express.js">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-generate-static-site'">Generate Static Site Using Node</div>
<div class="lesson-topics">static sites, express.js</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-generate-static-site/index.js')" class="file-preview-path">index.js</div>
<div onclick="openModal('/lesson-generate-static-site/package.json')" class="file-preview-path">package.json</div>
<div onclick="openModal('/lesson-generate-static-site/src/main.md')" class="file-preview-path">src/main.md</div>
</div>
</div>
<div class="lesson" data-topics="api,http,axios,async/await,promises">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-make-http-request'">Make HTTP Requests Using Node</div>
<div class="lesson-topics">api, http, axios, async/await, promises</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-make-http-request/index.js')" class="file-preview-path">index.js</div>
<div onclick="openModal('/lesson-make-http-request/package.json')" class="file-preview-path">package.json</div>
</div>
</div>
<div class="lesson" data-topics="destructuring,collection,json">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-destructuring-examples'">Destructuring Examples</div>
<div class="lesson-topics">destructuring, collection, json</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-destructuring-examples/data.json')" class="file-preview-path">data.json</div>
<div onclick="openModal('/lesson-destructuring-examples/index.js')" class="file-preview-path">index.js</div>
</div>
</div>
<div class="lesson" data-topics="cli,interactive,arg,inquirer,esm">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-cli'">Basic CLI Built with Arg, Inquirer and ESM</div>
<div class="lesson-topics">cli, interactive, arg, inquirer, esm</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-cli/package.json')" class="file-preview-path">package.json</div>
<div onclick="openModal('/lesson-cli/src/index.js')" class="file-preview-path">src/index.js</div>
</div>
</div>
<div class="lesson" data-topics="dotenv,env,config">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-env-config'">Environment Configuration Using Dotenv</div>
<div class="lesson-topics">dotenv, env, config</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-env-config/.example-env')" class="file-preview-path">.example-env</div>
<div onclick="openModal('/lesson-env-config/.gitignore')" class="file-preview-path">.gitignore</div>
<div onclick="openModal('/lesson-env-config/index.js')" class="file-preview-path">index.js</div>
<div onclick="openModal('/lesson-env-config/package.json')" class="file-preview-path">package.json</div>
</div>
</div>
<div class="lesson" data-topics="api,http,client,fetch">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-make-api-request-from-client'">Make API Request From Client</div>
<div class="lesson-topics">api, http, client, fetch</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-make-api-request-from-client/index.html')" class="file-preview-path">index.html</div>
</div>
</div>
<div class="lesson" data-topics="design,css,ui">
<div class="lesson-name" onclick="window.location.href='https://github.com/introspective-code/fullstack-js-lessons/tree/master/lesson-design-basics'">Design Basics for Non-Designers</div>
<div class="lesson-topics">design, css, ui</div>
<div class="lesson-file-previews">
<div onclick="openModal('/lesson-design-basics/index.html')" class="file-preview-path">index.html</div>
</div>
</div>
</div>
<div class="header">Contributors:</div>
<div class="contributors">
<a href="https://github.com/nafeu" class="contributor">nafeu</a>
<a href="https://github.com/szikaria961" class="contributor">szikaria961</a>
</div>
</div>
</div>
<div class="footer">
Made in Toronto with ❤️  from <a href="https://github.com/introspective-code">Introspective Code.</a>
</div>
<script>
var modalOpen = false;
var selectedTopics = [];
var lessons = document.getElementsByClassName("lesson");
var topics = document.getElementsByClassName("topic");
var allContent = Object.values({"lesson-cli":[{"project":"lesson-cli","pathToProcess":"/lesson-cli/package.json","content":"ewogICJuYW1lIjogImxlc3Nvbi1jbGkiLAogICJ2ZXJzaW9uIjogIjEuMC4wIiwKICAiZGVzY3JpcHRpb24iOiAiY2xpIHdpdGggYXJnIGFuZCBpbnF1aXJlciIsCiAgIm1haW4iOiAic3JjL2luZGV4LmpzIiwKICAic2NyaXB0cyI6IHsKICAgICJ0ZXN0IjogImVjaG8gXCJFcnJvcjogbm8gdGVzdCBzcGVjaWZpZWRcIiAmJiBleGl0IDEiLAogICAgImF0dGFjaCI6ICJucG0gbGluayIKICB9LAogICJiaW4iOiB7CiAgICAiQGludHJvc3BlY3RpdmUtY29kZS9sZXNzb24tY2xpIjogImJpbi9sZXNzb24tY2xpIiwKICAgICJsZXNzb24tY2xpIjogImJpbi9sZXNzb24tY2xpIgogIH0sCiAgImtleXdvcmRzIjogWwogICAgImNsaSIsCiAgICAiYXJnIiwKICAgICJpbnF1aXJlciIKICBdLAogICJhdXRob3IiOiAiTmFmZXUgTmFzaXIgPG5hZmV1Lm5hc2lyQGdtYWlsLmNvbT4gKGh0dHA6Ly9uYWZldS5jb20vKSIsCiAgImxpY2Vuc2UiOiAiTUlUIiwKICAiZGVwZW5kZW5jaWVzIjogewogICAgImFyZyI6ICI1LjAuMCIsCiAgICAiZXNtIjogIjMuMi4yNSIsCiAgICAiaW5xdWlyZXIiOiAiNy4zLjMiCiAgfQp9Cg==","extension":"json"},{"project":"lesson-cli","pathToProcess":"/lesson-cli/src/index.js","content":"aW1wb3J0IGFyZyBmcm9tICJhcmciOwppbXBvcnQgaW5xdWlyZXIgZnJvbSAiaW5xdWlyZXIiOwoKZnVuY3Rpb24gcGFyc2VBcmd1bWVudHNJbnRvT3B0aW9ucyhyYXdBcmdzKSB7CiAgY29uc3QgYXJncyA9IGFyZygKICAgIHsKICAgICAgIi0taW5wdXRBIjogTnVtYmVyLAogICAgICAiLS1pbnB1dEIiOiBOdW1iZXIsCiAgICAgICItLW9wZXJhdG9yIjogU3RyaW5nLAogICAgICAiLWEiOiAiLS1pbnB1dEEiLAogICAgICAiLWIiOiAiLS1pbnB1dEIiLAogICAgICAiLW8iOiAiLS1vcGVyYXRvciIKICAgIH0sCiAgICB7CiAgICAgIGFyZ3Y6IHJhd0FyZ3Muc2xpY2UoMiksCiAgICB9CiAgKTsKICByZXR1cm4gewogICAgaW5wdXRBOiBhcmdzWyctLWlucHV0QSddLAogICAgaW5wdXRCOiBhcmdzWyctLWlucHV0QiddLAogICAgb3BlcmF0b3I6IGFyZ3NbJy0tb3BlcmF0b3InXQogIH07Cn0KCmFzeW5jIGZ1bmN0aW9uIHByb21wdEZvck1pc3NpbmdPcHRpb25zKG9wdGlvbnMpIHsKICBjb25zdCBxdWVzdGlvbnMgPSBbXTsKCiAgaWYgKCFvcHRpb25zLmlucHV0QSB8fCBpc05hTihvcHRpb25zLmlucHV0QSkpIHsKICAgIHF1ZXN0aW9ucy5wdXNoKHsKICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgIG5hbWU6ICJpbnB1dEEiLAogICAgICBtZXNzYWdlOiAiUGxlYXNlIGVudGVyIGEgbnVtYmVyLiIsCiAgICAgIGRlZmF1bHQ6IDEsCiAgICB9KTsKICB9CgogIGlmICghb3B0aW9ucy5pbnB1dEIgfHwgaXNOYU4ob3B0aW9ucy5pbnB1dEIpKSB7CiAgICBxdWVzdGlvbnMucHVzaCh7CiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBuYW1lOiAiaW5wdXRCIiwKICAgICAgbWVzc2FnZTogIlBsZWFzZSBlbnRlciBhIG51bWJlci4iLAogICAgICBkZWZhdWx0OiAxLAogICAgfSk7CiAgfQoKICBpZiAoIW9wdGlvbnMub3BlcmF0b3IpIHsKICAgIHF1ZXN0aW9ucy5wdXNoKHsKICAgICAgdHlwZTogImxpc3QiLAogICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICBtZXNzYWdlOiAiUGxlYXNlIHBpY2sgYW4gb3BlcmF0b3IuIiwKICAgICAgY2hvaWNlczogWycrJywgJy0nLCAnLycsICd4J10sCiAgICAgIGRlZmF1bHQ6ICcrJywKICAgIH0pOwogIH0KCiAgaWYgKCFvcHRpb25zLm9wZXJhdG9yKSB7CiAgICBxdWVzdGlvbnMucHVzaCh7CiAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgbmFtZTogIm9wZXJhdG9yIiwKICAgICAgbWVzc2FnZTogIlBsZWFzZSBwaWNrIGFuIG9wZXJhdG9yLiIsCiAgICAgIGNob2ljZXM6IFsnKycsICctJywgJy8nLCAneCddLAogICAgICBkZWZhdWx0OiAnKycsCiAgICB9KTsKICB9CgogIGxldCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KHF1ZXN0aW9ucyk7CgogIHdoaWxlIChpc05hTihhbnN3ZXJzLmlucHV0QSkgfHwgaXNOYU4oYW5zd2Vycy5pbnB1dEIpKSB7CiAgICBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KHF1ZXN0aW9ucyk7CiAgfQoKICByZXR1cm4gewogICAgLi4ub3B0aW9ucywKICAgIGlucHV0QTogb3B0aW9ucy5pbnB1dEEgfHwgYW5zd2Vycy5pbnB1dEEsCiAgICBpbnB1dEI6IG9wdGlvbnMuaW5wdXRCIHx8IGFuc3dlcnMuaW5wdXRCLAogICAgb3BlcmF0b3I6IG9wdGlvbnMub3BlcmF0b3IgfHwgYW5zd2Vycy5vcGVyYXRvciwKICB9Owp9CgpleHBvcnQgZnVuY3Rpb24gaGFuZGxlT3B0aW9ucyhvcHRpb25zKSB7CiAgY29uc3QgeyBpbnB1dEEsIGlucHV0Qiwgb3BlcmF0b3IgfSA9IG9wdGlvbnM7CiAgbGV0IHJlc3VsdDsKCiAgc3dpdGNoIChvcGVyYXRvcikgewogICAgY2FzZSAnLSc6CiAgICAgIHJlc3VsdCA9IGlucHV0QSAtIGlucHV0QjsKICAgICAgYnJlYWs7CiAgICBjYXNlICcvJzoKICAgICAgcmVzdWx0ID0gaW5wdXRBIC8gaW5wdXRCOwogICAgICBicmVhazsKICAgIGNhc2UgJ3gnOgogICAgICByZXN1bHQgPSBpbnB1dEEgKiBpbnB1dEI7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcmVzdWx0ID0gaW5wdXRBICsgaW5wdXRCCiAgICAgIGJyZWFrOwogIH0KCiAgY29uc29sZS5sb2coYCR7aW5wdXRBfSAke29wZXJhdG9yfSAke2lucHV0Qn0gPSAke3Jlc3VsdH1gKTsKfQoKZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsaShhcmdzKSB7CiAgbGV0IG9wdGlvbnMgPSBwYXJzZUFyZ3VtZW50c0ludG9PcHRpb25zKGFyZ3MpOwogIG9wdGlvbnMgPSBhd2FpdCBwcm9tcHRGb3JNaXNzaW5nT3B0aW9ucyhvcHRpb25zKTsKICBoYW5kbGVPcHRpb25zKG9wdGlvbnMpOwp9","extension":"js"}],"lesson-design-basics":[{"project":"lesson-design-basics","pathToProcess":"/lesson-design-basics/index.html","content":"PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICA8dGl0bGU+RGVzaWduIEJhc2ljczwvdGl0bGU+CiAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIj4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Sb2JvdG8rTW9ubzp3Z2h0QDEwMDs0MDA7NzAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8c3R5bGU+CiAgICAuaGVhZGVyIHsKICAgICAgZm9udC1zaXplOiAxLjVlbTsKICAgICAgcGFkZGluZzogMWVtOwogICAgfQoKICAgIC50ZXh0IHsKICAgICAgZm9udC1zaXplOiAxLjVlbTsKICAgICAgY29sb3I6IHJlZDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgcmVkOwogICAgfQoKICAgICNmbGV4LWNzcy1ncmlkLWV4YW1wbGUsCiAgICAjcGFkZGluZy1tYXJnaW4tZXhhbXBsZSwKICAgICNmb250LWV4YW1wbGUgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxNXZoOwogICAgfQoKICAgIC5mbGV4LWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKICAgIH0KCiAgICAuZmxleC1kaXYgewogICAgICBoZWlnaHQ6IDE1dmg7CiAgICAgIHdpZHRoOiA4MCU7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsdWU7CiAgICB9CgogICAgLmJveCB7CiAgICAgIHdpZHRoOiAyNSU7CiAgICAgIGZvbnQtc2l6ZTogMi41ZW07CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAud2l0aC1wYWRkaW5nIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogcGluazsKICAgICAgcGFkZGluZzogMWVtIDFlbSAxZW0gMWVtOwogICAgICAvKnBhZGRpbmctdG9wOiAxZW07Ki8KICAgICAgLypwYWRkaW5nLXJpZ2h0OiAxZW07Ki8KICAgICAgLypwYWRkaW5nLWJvdHRvbTogMWVtOyovCiAgICAgIC8qcGFkZGluZy1sZWZ0OiAxZW07Ki8KICAgIH0KCiAgICAud2l0aC1tYXJnaW4gewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBvcmFuZ2U7CiAgICAgIG1hcmdpbjogMWVtIDFlbSAxZW0gMWVtOwogICAgICAvKm1hcmdpbi10b3A6IDFlbTsqLwogICAgICAvKm1hcmdpbi1yaWdodDogMWVtOyovCiAgICAgIC8qbWFyZ2luLWJvdHRvbTogMWVtOyovCiAgICAgIC8qbWFyZ2luLWxlZnQ6IDFlbTsqLwogICAgfQoKICAgIC5jbGVhbi10ZXh0IHsKICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgZm9udC1zaXplOiAxLjVlbTsKICAgICAgbWFyZ2luOiAydnc7CiAgICB9CgogICAgLnRoaW4gewogICAgICBmb250LXdlaWdodDogMTAwOwogICAgfQoKICAgIC5ib2xkIHsKICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIH0KCiAgICAuY29sb3ItYm94IHsKICAgICAgaGVpZ2h0OiAxMHZoOwogICAgICB3aWR0aDogMTB2aDsKICAgIH0KCiAgICAvKiBQaWNrIGEgcGFsZXR0ZSBmcm9tIGEgdHJ1c3RlZCBjb2xvciBwYWxldHRlIHNvdXJjZTogaHR0cHM6Ly9mbGF0dWljb2xvcnMuY29tLyovCgogICAgLmNvbG9yQSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMGI4OTQ7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgIH0KICAgIC5jb2xvckIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDk4NGUzOwogICAgICBjb2xvcjogd2hpdGU7CiAgICB9CiAgICAuY29sb3JDIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Q2MzAzMTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogICAgLmNvbG9yRCB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMTcwNTU7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgIH0KICAgIC5jb2xvckUgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmQzNDM2OwogICAgICBjb2xvcjogd2hpdGU7CiAgICB9CgogIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgPGRpdiBjbGFzcz0iaGVhZGVyIj5HcmlkIFN5c3RlbXMgKEZsZXgpPC9kaXY+CgogIDxkaXYgaWQ9ImZsZXgtY3NzLWdyaWQtZXhhbXBsZSI+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImZsZXgtZGl2Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0Ij5UaGlzIGlzIGluc2lkZSB0aGUgYmx1ZSBib3g8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iaGVhZGVyIj5QYWRkaW5nICYgTWFyZ2luPC9kaXY+CgogIDxkaXYgaWQ9InBhZGRpbmctbWFyZ2luLWV4YW1wbGUiPgogICAgPGRpdiBjbGFzcz0iZmxleC1jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJib3ggd2l0aC1wYWRkaW5nIj5wYWRkaW5nPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImJveCB3aXRoLW1hcmdpbiI+bWFyZ2luPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iaGVhZGVyIj5Gb250PC9kaXY+CgogIDxkaXYgaWQ9ImZvbnQtZXhhbXBsZSI+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImNsZWFuLXRleHQiPgogICAgICAgIDxzdHJvbmc+UGljayBhIGdvb2QgZm9udDwvc3Ryb25nPiBiZWNhdXNlIGl0IGRyYXN0aWNhbGx5IGltcHJvdmVzIHRoZSBwb2xpc2ggYW5kIHF1YWxpdHkgb2YgeW91ciBVSS4gVmFyeSBiZXR3ZWVuIDxzcGFuIGNsYXNzPSJ0aGluIj50aGluPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImJvbGQiPmJvbGQ8L3NwYW4+IGFzIG5lZWRlZC4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iaGVhZGVyIj5Db2xvcjwvZGl2PgoKICA8ZGl2IGlkPSJjb2xvci1leGFtcGxlIj4KICAgIDxkaXYgY2xhc3M9ImZsZXgtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sb3ItYm94IGNvbG9yQSI+IzAwYjg5NDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb2xvci1ib3ggY29sb3JCIj4jMDk4NGUzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWJveCBjb2xvckMiPiNkNjMwMzE8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29sb3ItYm94IGNvbG9yRCI+I2UxNzA1NTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb2xvci1ib3ggY29sb3JFIj4jMmQzNDM2PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCjwvYm9keT4KPC9odG1sPg==","extension":"html"}],"lesson-destructuring-examples":[{"project":"lesson-destructuring-examples","pathToProcess":"/lesson-destructuring-examples/data.json","content":"ewogICJkZXZpY2VPU01hcCI6IHsKICAgICJwYyI6ICJ3aW5kb3dzIiwKICAgICJtYWMiOiAib3N4IiwKICAgICJpcGhvbmUiOiAiaW9zIiwKICAgICJwaXhlbCI6ICJhbmRyb2lkIiwKICAgICJnYWxheHkiOiAiYW5kcm9pZCIKICB9LAogICJmdXJuaXR1cmVDYXRhbG9ndWUiOiBbCiAgICB7CiAgICAgICJuYW1lIjogImJlZGZyYW1lIiwKICAgICAgInByaWNlIjogNTk5Ljk5LAogICAgICAiY29sb3IiOiAiYmxhY2siLAogICAgICAiZGltZW5zaW9ucyI6IFsxMDAsIDEwMF0sCiAgICAgICJwaWVjZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiYm94IGZyYW1lIiwKICAgICAgICAgICJkaW1lbnNpb25zIjogWzkwLCA5MF0sCiAgICAgICAgICAicXVhbnRpdHkiOiAxCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJoZWFkYm9hcmQiLAogICAgICAgICAgImRpbWVuc2lvbnMiOiBbMTAsIDkwXSwKICAgICAgICAgICJxdWFudGl0eSI6IDEKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIm9mZmljZSBkZXNrIiwKICAgICAgInByaWNlIjogMTQ5Ljk5LAogICAgICAiY29sb3IiOiAiZ3JleSIsCiAgICAgICJkaW1lbnNpb25zIjogWzIwLCA4MF0sCiAgICAgICJwaWVjZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAiZGVzayIsCiAgICAgICAgICAiZGltZW5zaW9ucyI6IFsyMCwgODBdLAogICAgICAgICAgInF1YW50aXR5IjogMQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIm5hbWUiOiAicGVncyIsCiAgICAgICAgICAiZGltZW5zaW9ucyI6IFsyLCAyXSwKICAgICAgICAgICJxdWFudGl0eSI6IDUKICAgICAgICB9CiAgICAgIF0KICAgIH0KICBdCn0=","extension":"json"},{"project":"lesson-destructuring-examples","pathToProcess":"/lesson-destructuring-examples/index.js","content":"Y29uc3QgeyBmdXJuaXR1cmVDYXRhbG9ndWUsIGRldmljZU9TTWFwIH0gPSByZXF1aXJlKCcuL2RhdGEuanNvbicpOwoKLyoKClRoZSBHaXN0OgoKYGBgCmNvbnN0IHggPSB7IGE6IDEsIGI6IDIgfTsKY29uc3QgeyBhLCBiIH0gPSB4Owpjb25zb2xlLmxvZyhhICsgYik7CmBgYAoKSXMgZXF1aXZhbGVudCB0bzoKCmBgYApjb25zdCB4ID0geyBhOiAxLCBiOiAyIH07CmNvbnN0IGEgPSB4LmE7CmNvbnN0IGIgPSB4LmI7CmNvbnNvbGUubG9nKGEgKyBiKQpgYGAKCiovCgpjb25zb2xlLmxvZygiXG4tLS0gRGV2aWNlIE9wZXJhdGluZyBTeXN0ZW1zIFdJVEhPVVQgZGVzdHJ1Y3R1cmluZyAtLS0iKTsKCmNvbnNvbGUubG9nKGBBcHBsZSBNYWNib29rIFBybzogJHtkZXZpY2VPU01hcC5tYWN9YCk7CmNvbnNvbGUubG9nKGBHb29nbGUgUGl4ZWwgNTogJHtkZXZpY2VPU01hcC5waXhlbH1gKTsKY29uc29sZS5sb2coYFNhbXN1bmcgR2FsYXh5IFM4OiAke2RldmljZU9TTWFwLmdhbGF4eX1gKTsKY29uc29sZS5sb2coYEFwcGxlIGlQaG9uZSAxMjogJHtkZXZpY2VPU01hcC5pcGhvbmV9YCk7CmNvbnNvbGUubG9nKGBNU0kgUmFpZGVyIExhcHRvcDogJHtkZXZpY2VPU01hcC5wY31gKTsKCmNvbnNvbGUubG9nKCJcbi0tLSBEZXZpY2UgT3BlcmF0aW5nIFN5c3RlbXMgV0lUSCBkZXN0cnVjdHVyaW5nIC0tLSIpOwoKY29uc3QgeyBtYWMsIHBpeGVsLCBnYWxheHksIGlwaG9uZSwgcGMgfSA9IGRldmljZU9TTWFwOwoKY29uc29sZS5sb2coYEFwcGxlIE1hY2Jvb2sgUHJvOiAke21hY31gKTsKY29uc29sZS5sb2coYEdvb2dsZSBQaXhlbCA1OiAke3BpeGVsfWApOwpjb25zb2xlLmxvZyhgU2Ftc3VuZyBHYWxheHkgUzg6ICR7Z2FsYXh5fWApOwpjb25zb2xlLmxvZyhgQXBwbGUgaVBob25lIDEyOiAke2lwaG9uZX1gKTsKY29uc29sZS5sb2coYE1TSSBSYWlkZXIgTGFwdG9wOiAke3BjfWApOwoKLyoKCkV4cGVjdGVkIE91dHB1dDoKCkFwcGxlIE1hY2Jvb2sgUHJvOiBvc3gKR29vZ2xlIFBpeGVsIDU6IGFuZHJvaWQKU2Ftc3VuZyBHYWxheHkgUzg6IGFuZHJvaWQKQXBwbGUgaVBob25lIDEyOiBpb3MKTVNJIFJhaWRlciBMYXB0b3A6IHdpbmRvd3MKCiovCgpjb25zb2xlLmxvZygiXG4tLS0gRm9ybWF0dGVkIGZ1cm5pdHVyZSBjYXRhbG9ndWUgV0lUSE9VVCBkZXN0cnVjdHVyaW5nIC0tLSIpOwoKZnVybml0dXJlQ2F0YWxvZ3VlLmZvckVhY2goKGl0ZW0pID0+IHsKICBjb25zb2xlLmxvZygKICAgIGAke2l0ZW0ubmFtZX0gKCR7aXRlbS5jb2xvcn0pIC0gJCR7aXRlbS5wcmljZX0gOiAke2l0ZW0uZGltZW5zaW9uc1swXX14JHtpdGVtLmRpbWVuc2lvbnNbMV19YAogICk7CiAgaXRlbS5waWVjZXMuZm9yRWFjaCgocGllY2UpID0+IHsKICAgIGNvbnNvbGUubG9nKAogICAgICBgICAke3BpZWNlLm5hbWV9IC0gJHtwaWVjZS5xdWFudGl0eX0gOiAke3BpZWNlLmRpbWVuc2lvbnNbMF19eCR7cGllY2UuZGltZW5zaW9uc1swXX1gCiAgICApOwogIH0pOwp9KTsKCmNvbnNvbGUubG9nKCJcbi0tLSBGb3JtYXR0ZWQgZnVybml0dXJlIGNhdGFsb2d1ZSBXSVRIIGRlc3RydWN0dXJpbmcgLS0tIik7CgpmdXJuaXR1cmVDYXRhbG9ndWUuZm9yRWFjaCgoeyBuYW1lLCBjb2xvciwgcHJpY2UsIGRpbWVuc2lvbnMsIHBpZWNlcyB9KSA9PiB7CiAgY29uc3QgW2xlbmd0aCwgd2lkdGhdID0gZGltZW5zaW9uczsKICBjb25zb2xlLmxvZyhgJHtuYW1lfSAoJHtjb2xvcn0pIC0gJCR7cHJpY2V9IDogJHtsZW5ndGh9eCR7d2lkdGh9YCk7CiAgcGllY2VzLmZvckVhY2goCiAgICAoeyBuYW1lOiBwaWVjZU5hbWUsIHF1YW50aXR5LCBkaW1lbnNpb25zOiBwaWVjZURpbWVuc2lvbnMgfSkgPT4gewogICAgICBjb25zdCBbcGllY2VMZW5ndGgsIHBpZWNlV2lkdGhdID0gcGllY2VEaW1lbnNpb25zOwogICAgICBjb25zb2xlLmxvZygKICAgICAgICBgICAke3BpZWNlTmFtZX0gLSAke3F1YW50aXR5fSA6ICR7cGllY2VMZW5ndGh9eCR7cGllY2VXaWR0aH1gCiAgICAgICk7CiAgICB9CiAgKTsKfSk7CgovKgoKRXhwZWN0ZWQgT3V0cHV0OgoKYmVkZnJhbWUgKGJsYWNrKSAtICQ1OTkuOTkgOiAxMDB4MTAwCiAgYm94IGZyYW1lIC0gMSA6IDkweDkwCiAgaGVhZGJvYXJkIC0gMSA6IDEweDkwCm9mZmljZSBkZXNrIChncmV5KSAtICQxNDkuOTkgOiAyMHg4MAogIGRlc2sgLSAxIDogMjB4ODAKICBwZWdzIC0gNSA6IDJ4MgoKKi8=","extension":"js"}],"lesson-env-config":[{"project":"lesson-env-config","pathToProcess":"/lesson-env-config/.example-env","content":"QVBJX0tFWT0KUE9SVD0=","extension":""},{"project":"lesson-env-config","pathToProcess":"/lesson-env-config/.gitignore","content":"LmVudg==","extension":""},{"project":"lesson-env-config","pathToProcess":"/lesson-env-config/index.js","content":"Y29uc3QgZXhwcmVzcyA9IHJlcXVpcmUoJ2V4cHJlc3MnKTsKcmVxdWlyZSgnZG90ZW52JykuY29uZmlnKCk7Cgpjb25zdCBhcHAgPSBleHByZXNzKCk7Cgpjb25zdCBBUElfS0VZID0gcHJvY2Vzcy5lbnYuQVBJX0tFWTsKY29uc3QgUE9SVCA9IHByb2Nlc3MuZW52LlBPUlQgfHwgMzAwMDsKCmFwcC5saXN0ZW4oUE9SVCwgKCkgPT4gewogIGNvbnNvbGUubG9nKGBMaXN0ZW5pbmcgb24gcG9ydCAke1BPUlR9YCk7Cn0pOwoKYXBwLmdldCgnLycsIChyZXEsIHJlcykgPT4gewogIHJlcy5zZW5kKGBUaGlzIGlzIG15IEFQSSBLRVk6ICR7QVBJX0tFWX1gKTsKfSk7Cg==","extension":"js"},{"project":"lesson-env-config","pathToProcess":"/lesson-env-config/package.json","content":"ewogICJuYW1lIjogImxlc3Nvbi1lbnYtY29uZmlnIiwKICAidmVyc2lvbiI6ICIxLjAuMCIsCiAgImRlc2NyaXB0aW9uIjogImVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gZXhhbXBsZSIsCiAgIm1haW4iOiAiaW5kZXguanMiLAogICJzY3JpcHRzIjogewogICAgInRlc3QiOiAiZWNobyBcIkVycm9yOiBubyB0ZXN0IHNwZWNpZmllZFwiICYmIGV4aXQgMSIsCiAgICAic3RhcnQiOiAibm9kZSBpbmRleC5qcyIKICB9LAogICJrZXl3b3JkcyI6IFsKICAgICJkb3RlbnYiLAogICAgImVudiIsCiAgICAiY29uZmlnIgogIF0sCiAgImF1dGhvciI6ICJTYWJhIFppa2FyaWEiLAogICJsaWNlbnNlIjogIk1JVCIsCiAgImRlcGVuZGVuY2llcyI6IHsKICAgICJkb3RlbnYiOiAiXjguMi4wIiwKICAgICJleHByZXNzIjogIl40LjE3LjEiCiAgfQp9Cg==","extension":"json"}],"lesson-express-static-site":[{"project":"lesson-express-static-site","pathToProcess":"/lesson-express-static-site/index.js","content":"Y29uc3QgZXhwcmVzcyA9IHJlcXVpcmUoJ2V4cHJlc3MnKTsKY29uc3QgYXBwID0gZXhwcmVzcygpOwoKY29uc3QgUE9SVCA9IHByb2Nlc3MuZW52LlBPUlQgfHwgODAwMDsKCmFwcC51c2UoZXhwcmVzcy5zdGF0aWMoX19kaXJuYW1lICsgJy9wdWJsaWMnKSk7CgphcHAubGlzdGVuKFBPUlQsICgpID0+IHsKICBjb25zb2xlLmxvZyhgWyBpbmRleC5qcyBdIFNlcnZpbmcgc3RhdGljIHNpdGUgYXQgaHR0cDovL2xvY2FsaG9zdDoke1BPUlR9YCk7Cn0pOwo=","extension":"js"},{"project":"lesson-express-static-site","pathToProcess":"/lesson-express-static-site/package.json","content":"ewogICJuYW1lIjogImxlc3Nvbi1leHByZXNzLXN0YXRpYy1zaXRlIiwKICAidmVyc2lvbiI6ICIxLjAuMCIsCiAgImRlc2NyaXB0aW9uIjogImV4YW1wbGUgZXhwcmVzcyBzdGF0aWMgc2l0ZSIsCiAgIm1haW4iOiAiaW5kZXguanMiLAogICJzY3JpcHRzIjogewogICAgInN0YXJ0IjogIm5vZGUgaW5kZXguanMiLAogICAgInRlc3QiOiAiZWNobyBcIkVycm9yOiBubyB0ZXN0IHNwZWNpZmllZFwiICYmIGV4aXQgMSIKICB9LAogICJrZXl3b3JkcyI6IFsKICAgICJleHByZXNzIiwKICAgICJzdGF0aWMiLAogICAgInNpdGUiCiAgXSwKICAiYXV0aG9yIjogIk5hZmV1IE5hc2lyIDxuYWZldS5uYXNpckBnbWFpbC5jb20+IChodHRwOi8vbmFmZXUuY29tLykiLAogICJsaWNlbnNlIjogIk1JVCIsCiAgImRlcGVuZGVuY2llcyI6IHsKICAgICJleHByZXNzIjogIjQuMTcuMSIKICB9Cn0K","extension":"json"},{"project":"lesson-express-static-site","pathToProcess":"/lesson-express-static-site/public/index.html","content":"PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICA8dGl0bGU+RXhwcmVzcyBTdGF0aWMgU2l0ZTwvdGl0bGU+CjwvaGVhZD4KPGJvZHk+CiAgPGgxPkhlbGxvIFdvcmxkITwvaDE+CiAgPGgzPlRoZSB3ZWJzZXJ2ZXIgc2VydmluZyB0aGlzIHN0YXRpYyBzaXRlIGlzIGJ1aWx0IG9uIDxzdHJvbmc+ZXhwcmVzcy5qczwvc3Ryb25nPi48L2gzPgogIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9pbnRyb3NwZWN0aXZlLWNvZGUvZnVsbHN0YWNrLWpzLWxlc3NvbnMiPkNsaWNrIGhlcmUgZm9yIG1vcmUgZXhhbXBsZSBjb2RlLjwvYT4KPC9ib2R5Pgo8L2h0bWw+","extension":"html"}],"lesson-generate-static-site":[{"project":"lesson-generate-static-site","pathToProcess":"/lesson-generate-static-site/index.js","content":"Y29uc3QgZnMgPSByZXF1aXJlKCJmcyIpOwpjb25zdCBleHByZXNzID0gcmVxdWlyZSgiZXhwcmVzcyIpOwpjb25zdCBzaG93ZG93biA9IHJlcXVpcmUoInNob3dkb3duIik7Cgpjb25zdCBhcHAgPSBleHByZXNzKCk7CmNvbnN0IGNvbnZlcnRlciA9IG5ldyBzaG93ZG93bi5Db252ZXJ0ZXIoKTsKCmNvbnN0IFBPUlQgPSBwcm9jZXNzLmVudi5QT1JUIHx8IDgwMDA7CmNvbnN0IE1BUktET1dOX0RFTElNSVRFUiA9ICIrKysiOwoKYXBwLnVzZShleHByZXNzLnN0YXRpYyhfX2Rpcm5hbWUgKyAiL2Rpc3QiKSk7Cgpjb25zdCBzb3VyY2UgPSBmcy5yZWFkRmlsZVN5bmMoIi4vc3JjL21haW4ubWQiLCAidXRmOCIpOwoKY29uc3QgW3RpdGxlLCBjc3MsIHNjcmlwdCwgbWFya2Rvd25dID0gc291cmNlLnNwbGl0KE1BUktET1dOX0RFTElNSVRFUik7CmNvbnN0IGJvZHkgPSBjb252ZXJ0ZXIubWFrZUh0bWwobWFya2Rvd24pOwoKY29uc3QgdGVtcGxhdGUgPSBgCjwhRE9DVFlQRSBodG1sPgo8aHRtbD4KICA8aGVhZD4KICAgIDx0aXRsZT4ke3RpdGxlfTwvdGl0bGU+CiAgICA8c3R5bGU+JHtjc3N9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICAke2JvZHl9CiAgICA8c2NyaXB0PiR7c2NyaXB0fTwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgpgOwoKZnMud3JpdGVGaWxlU3luYygiLi9kaXN0L2luZGV4Lmh0bWwiLCB0ZW1wbGF0ZSwgInV0ZjgiKTsKCmFwcC5saXN0ZW4oUE9SVCwgKCkgPT4gewogIGNvbnNvbGUubG9nKGBbIGluZGV4LmpzIF0gTGlzdGVuaW5nIG9uIHBvcnQgJHtQT1JUfWApOwp9KTsK","extension":"js"},{"project":"lesson-generate-static-site","pathToProcess":"/lesson-generate-static-site/package.json","content":"ewogICAgIm5hbWUiOiAibGVzc29uLWdlbmVyYXRlLXN0YXRpYy1zaXRlIiwKICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKICAgICJkZXNjcmlwdGlvbiI6ICJnZW5lcmF0ZSBzdGF0aWMgc2l0ZSIsCiAgICAibWFpbiI6ICJpbmRleC5qcyIsCiAgICAic2NyaXB0cyI6IHsKICAgICAgICAic3RhcnQiOiAibm9kZSBpbmRleC5qcyIsCiAgICAgICAgInRlc3QiOiAiZWNobyBcIkVycm9yOiBubyB0ZXN0IHNwZWNpZmllZFwiICYmIGV4aXQgMSIKICAgIH0sCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgIm5vZGUiLAogICAgICAgICJtYXJrZG93biIsCiAgICAgICAgInN0YXRpYyIKICAgIF0sCiAgICAiYXV0aG9yIjogIk5hZmV1IE5hc2lyIDxuYWZldS5uYXNpckBnbWFpbC5jb20+IChodHRwOi8vbmFmZXUuY29tLykiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJkZXZEZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgImVzbGludCI6ICI3LjkuMCIKICAgIH0sCiAgICAiZGVwZW5kZW5jaWVzIjogewogICAgICAgICJleHByZXNzIjogIjQuMTcuMSIsCiAgICAgICAgInNob3dkb3duIjogIjEuOS4xIgogICAgfQp9Cg==","extension":"json"},{"project":"lesson-generate-static-site","pathToProcess":"/lesson-generate-static-site/src/main.md","content":"R2VuZXJhdGVkIFN0YXRpYyBTaXRlCisrKwpAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1LdW1iaCtTYW5zOndnaHRAMzAwOzcwMCZkaXNwbGF5PXN3YXAnKTsKCmJvZHkgewogIGJhY2tncm91bmQtY29sb3I6ICMzNDQ5NWU7CiAgY29sb3I6IHdoaXRlOwogIGZvbnQtZmFtaWx5OiAnS3VtYmggU2FucycsIHNhbnMtc2VyaWY7CiAgcGFkZGluZzogMTB2aCAxMHZ3IDEwdmggMTB2dzsKICBmb250LXNpemU6IDEuNWVtOwogIHRyYW5zaXRpb246IDJzIGVhc2UtaW4tb3V0IGJhY2tncm91bmQtY29sb3I7Cn0KCmNvZGUgewogIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOwogIHBhZGRpbmc6IDBweCAycHggMHB4IDJweDsKICBjb2xvcjogI2YxYzQwZjsKfQoKKysrCnZhciBjb2xvcnMgPSBbJyMzNDQ5NWUnLCAnIzE2YTA4NScsICcjZDM1NDAwJywgJyNjMDM5MmInLCAnI2YzOWMxMiddOwpzZXRJbnRlcnZhbChmdW5jdGlvbigpewogIHZhciBjb2xvciA9IGNvbG9yc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjb2xvcnMubGVuZ3RoKV07CiAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5zdHlsZSA9ICdiYWNrZ3JvdW5kLWNvbG9yOicgKyBjb2xvcjsKfSwgNTAwMCk7CgorKysKIyBIZWxsbyBXb3JsZAoKV2VsY29tZSB0byB5b3VyIGdlbmVyYXRlZCBzdGF0aWMgc2l0ZS4KCiMjIyBIb3cgaXMgaXQgZG9uZT8KCi0gV3JpdGUgdGl0bGUsIGNzcywgc2NyaXB0cyBhbmQgbWFya2Rvd24gaW4gYHNyYy9tYWluLm1kYCBmaWxlCi0gVXNlIG5vZGUgc2NyaXB0IGFuZCBgc2hvd2Rvd25gIHRvIGNvbnZlcnQgYC5tZGAgaW50byAqKmh0bWwqKiB0ZW1wbGF0ZQotIFdyaXRlIGdlbmVyYXRlZCB0ZW1wbGF0ZSBpbnRvIGBkaXN0L2luZGV4Lmh0bWxgIHBhdGggdXNpbmcgbm9kZSBzY3JpcHQKLSBTZXJ2ZSBgZGlzdGAgZm9sZGVyIGFzIHN0YXRpYyBjb250ZW50IHRocm91Z2ggZXhwcmVzcyBhcHAK","extension":"md"}],"lesson-make-api-request-from-client":[{"project":"lesson-make-api-request-from-client","pathToProcess":"/lesson-make-api-request-from-client/index.html","content":"PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICA8dGl0bGU+TWFrZSBBUEkgUmVxdWVzdCBGcm9tIENsaWVudDwvdGl0bGU+CjwvaGVhZD4KPGJvZHk+CiAgPGgxIGlkPSJsb2FkaW5nLW1lc3NhZ2UiPkxvYWRpbmcgZG9nLi4uPC9oMT4KICA8aW1nIHNyYz0iIiBpZD0iZG9nIi8+CgogIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIGNvbnN0IEFQSV9VUkwgPSAnaHR0cHM6Ly9kb2cuY2VvL2FwaS9icmVlZHMvaW1hZ2UvcmFuZG9tJzsKICAgIGNvbnN0IFJFUVVFU1RfT1BUSU9OUyA9IHsKICAgICAgbWV0aG9kOiAnR0VUJwogICAgfTsKCiAgICBjb25zdCBpbWdFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvZycpOwogICAgY29uc3QgbG9hZGluZ01lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGluZy1tZXNzYWdlJyk7CgogICAgZmV0Y2goQVBJX1VSTCwgUkVRVUVTVF9PUFRJT05TKQogICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkgLyogRm9ybWF0IHJlc3BvbnNlIHRvIEpTT04gKi8pCiAgICAgIC50aGVuKGpzb24gPT4gewogICAgICAgIGNvbnN0IHsgbWVzc2FnZTogZG9nSW1hZ2VVcmwgfSA9IGpzb247CiAgICAgICAgaW1nRWxlbWVudC5zcmMgPSBkb2dJbWFnZVVybDsKICAgICAgICBsb2FkaW5nTWVzc2FnZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICB9KTsKICA8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+","extension":"html"}],"lesson-make-http-request":[{"project":"lesson-make-http-request","pathToProcess":"/lesson-make-http-request/index.js","content":"Y29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpOwoKY29uc3QgQVBJX1VSTCA9IHByb2Nlc3MuZW52LkFQSV9VUkwgfHwgImh0dHBzOi8vZG9nLmNlby9hcGkvYnJlZWRzL2ltYWdlL3JhbmRvbSI7Cgphc3luYyBmdW5jdGlvbiBtYWluKCkgewogIHRyeSB7CiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGF4aW9zLmdldChBUElfVVJMKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICBjb25zb2xlLmxvZyhlcnJvcik7CiAgICBwcm9jZXNzLmV4aXQoMSk7CiAgfQp9CgptYWluKCk7Cg==","extension":"js"},{"project":"lesson-make-http-request","pathToProcess":"/lesson-make-http-request/package.json","content":"ewogICJuYW1lIjogImxlc3Nvbi1tYWtlLWh0dHAtcmVxdWVzdCIsCiAgInZlcnNpb24iOiAiMS4wLjAiLAogICJkZXNjcmlwdGlvbiI6ICJtYWtlIGh0dHAgcmVxdWVzdCBpbiBub2RlIiwKICAibWFpbiI6ICJpbmRleC5qcyIsCiAgInNjcmlwdHMiOiB7CiAgICAidGVzdCI6ICJlY2hvIFwiRXJyb3I6IG5vIHRlc3Qgc3BlY2lmaWVkXCIgJiYgZXhpdCAxIgogIH0sCiAgImtleXdvcmRzIjogWwogICAgIm5vZGUiLAogICAgImh0dHAiLAogICAgInJlcXVlc3QiLAogICAgImFwaSIKICBdLAogICJhdXRob3IiOiAiTmFmZXUgTmFzaXIgPG5hZmV1Lm5hc2lyQGdtYWlsLmNvbT4gKGh0dHA6Ly9uYWZldS5jb20vKSIsCiAgImxpY2Vuc2UiOiAiTUlUIiwKICAiZGVwZW5kZW5jaWVzIjogewogICAgImF4aW9zIjogIjAuMjEuMCIKICB9Cn0K","extension":"json"}],"lesson-nedb-crud-api":[{"project":"lesson-nedb-crud-api","pathToProcess":"/lesson-nedb-crud-api/data.db","content":"eyJ0eXBlIjoicGFudHMiLCJxdWFsaXR5IjoibmV3IiwiY29sb3IiOiJ5ZWxsb3ciLCJfaWQiOiJRTWNOeHBMYVRpNmY1cFBpIn0KeyJ0eXBlIjoiamFja2V0IiwicXVhbGl0eSI6Im9sZCIsImNvbG9yIjoiYmxhY2siLCJfaWQiOiJlbWVYWGJFQjVlaEVNQkZrIn0KeyJ0eXBlIjoic29ja3MiLCJxdWFsaXR5IjoibmV3IiwiY29sb3IiOiJncmV5IiwiX2lkIjoiaUlOQVN2NTNGZlhoODN6MyJ9Cg==","extension":"db"},{"project":"lesson-nedb-crud-api","pathToProcess":"/lesson-nedb-crud-api/index.js","content":"Y29uc3QgZXhwcmVzcyA9IHJlcXVpcmUoJ2V4cHJlc3MnKTsKY29uc3QgbmVkYiA9IHJlcXVpcmUoJ25lZGInKTsKCmNvbnN0IFBPUlQgPSBwcm9jZXNzLmVudi5QT1JUIHx8IDgwMDA7CmNvbnN0IERCX1BBVEggPSBwcm9jZXNzLmVudi5EQl9QQVRIIHx8ICdkYXRhLmRiJzsKCmNvbnN0IGRiID0gbmV3IG5lZGIoeyBmaWxlbmFtZTogREJfUEFUSCwgYXV0b2xvYWQ6IHRydWUgfSk7CmNvbnN0IGFwcCA9IGV4cHJlc3MoKTsKCmFwcC51c2UoZXhwcmVzcy5qc29uKCkpOwphcHAudXNlKGV4cHJlc3MudXJsZW5jb2RlZCh7IGV4dGVuZGVkOiB0cnVlIH0pKTsKCi8vIENyZWF0ZQphcHAucG9zdCgnL2FwaS9pbnZlbnRvcnknLCAocmVxLCByZXMpID0+IHsKICBjb25zdCB7IHR5cGUsIHF1YWxpdHksIGNvbG9yIH0gPSByZXEuYm9keTsKCiAgY29uc3QgaXRlbSA9IHsKICAgIHR5cGUsCiAgICBxdWFsaXR5LAogICAgY29sb3IKICB9OwoKICBkYi5pbnNlcnQoaXRlbSwgKGVyciwgcmVzdWx0KSA9PiB7CiAgICBpZiAoZXJyKSB7CiAgICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJyk7CiAgICB9IGVsc2UgewogICAgICByZXMuanNvbihyZXN1bHQpOwogICAgfQogIH0pOwp9KTsKCi8vIFJlYWQgKEFsbCkKYXBwLmdldCgnL2FwaS9pbnZlbnRvcnknLCAocmVxLCByZXMpID0+IHsKICBkYi5maW5kKHt9LCAoZXJyLCByZXN1bHRzKSA9PiB7CiAgICBpZiAoZXJyKSB7CiAgICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJyk7CiAgICB9IGVsc2UgewogICAgICByZXMuanNvbihyZXN1bHRzKTsKICAgIH0KICB9KTsKfSk7CgovLyBSZWFkCmFwcC5nZXQoJy9hcGkvaW52ZW50b3J5LzppZCcsIChyZXEsIHJlcykgPT4gewogIGNvbnN0IHF1ZXJ5ID0gewogICAgX2lkOiByZXEucGFyYW1zLmlkCiAgfTsKCiAgZGIuZmluZE9uZShxdWVyeSwgKGVyciwgcmVzdWx0KSA9PiB7CiAgICBpZiAoZXJyKSB7CiAgICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJyk7CiAgICB9IGVsc2UgewogICAgICByZXMuanNvbihyZXN1bHQpOwogICAgfQogIH0pOwp9KTsKCi8vIFVwZGF0ZQphcHAucGF0Y2goJy9hcGkvaW52ZW50b3J5LzppZCcsIChyZXEsIHJlcykgPT4gewogIGNvbnN0IHF1ZXJ5ID0gewogICAgX2lkOiByZXEucGFyYW1zLmlkCiAgfTsKCiAgY29uc3Qgc2V0ID0ge307CgogIGNvbnN0IHsgdHlwZSwgcXVhbGl0eSwgY29sb3IgfSA9IHJlcS5ib2R5OwoKICBpZiAodHlwZSkgewogICAgc2V0LnR5cGUgPSB0eXBlOwogIH0KCiAgaWYgKHF1YWxpdHkpIHsKICAgIHNldC5xdWFsaXR5ID0gcXVhbGl0eTsKICB9CgogIGlmIChjb2xvcikgewogICAgc2V0LmNvbG9yID0gY29sb3I7CiAgfQoKICBjb25zdCB1cGRhdGUgPSB7CiAgICAkc2V0OiBzZXQKICB9OwoKICBjb25zdCBvcHRpb25zID0ge307CgogIGRiLnVwZGF0ZShxdWVyeSwgdXBkYXRlLCBvcHRpb25zLCAoZXJyLCByZXN1bHQpID0+IHsKICAgIGlmIChlcnIpIHsKICAgICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoJ0ludGVybmFsIHNlcnZlciBlcnJvci4nKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlcy5qc29uKHJlc3VsdCk7CiAgICB9CiAgfSk7Cn0pOwoKLy8gRGVzdHJveQphcHAuZGVsZXRlKCcvYXBpL2ludmVudG9yeS86aWQnLCAocmVxLCByZXMpID0+IHsKICBjb25zdCBxdWVyeSA9IHsKICAgIF9pZDogcmVxLnBhcmFtcy5pZAogIH07CgogIGNvbnN0IG9wdGlvbnMgPSB7fTsKCiAgZGIucmVtb3ZlKHF1ZXJ5LCBvcHRpb25zLCAoZXJyLCByZXN1bHQpID0+IHsKICAgIGlmIChlcnIpIHsKICAgICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoJ0ludGVybmFsIHNlcnZlciBlcnJvci4nKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlcy5qc29uKHJlc3VsdCk7CiAgICB9CiAgfSk7Cn0pOwoKYXBwLmxpc3RlbihQT1JULCAoKSA9PiB7CiAgY29uc29sZS5sb2coYFsgaW5kZXguanMgXSBMaXN0ZW5pbmcgb24gcG9ydCAke1BPUlR9YCk7Cn0pOwo=","extension":"js"},{"project":"lesson-nedb-crud-api","pathToProcess":"/lesson-nedb-crud-api/package.json","content":"ewogICJuYW1lIjogImxlc3Nvbi1uZWRiLWNydWQtYXBpIiwKICAidmVyc2lvbiI6ICIxLjAuMCIsCiAgImRlc2NyaXB0aW9uIjogIm5lZGIgaW52ZW50b3J5IGNydWQgYXBwIiwKICAibWFpbiI6ICJpbmRleC5qcyIsCiAgInNjcmlwdHMiOiB7CiAgICAic3RhcnQiOiAibm9kZSBpbmRleC5qcyIsCiAgICAidGVzdCI6ICJlY2hvIFwiRXJyb3I6IG5vIHRlc3Qgc3BlY2lmaWVkXCIgJiYgZXhpdCAxIgogIH0sCiAgImtleXdvcmRzIjogWwogICAgIm5lZGIiLAogICAgImZsYXRmaWxlIiwKICAgICJub2RlIgogIF0sCiAgImF1dGhvciI6ICJOYWZldSBOYXNpciA8bmFmZXUubmFzaXJAZ21haWwuY29tPiAoaHR0cDovL25hZmV1LmNvbS8pIiwKICAibGljZW5zZSI6ICJNSVQiLAogICJkZXBlbmRlbmNpZXMiOiB7CiAgICAiZXhwcmVzcyI6ICI0LjE3LjEiLAogICAgIm5lZGIiOiAiMS44LjAiCiAgfQp9Cg==","extension":"json"}],"lesson-nedb-crud-api-async-validation":[{"project":"lesson-nedb-crud-api-async-validation","pathToProcess":"/lesson-nedb-crud-api-async-validation/data.db","content":"eyJ0eXBlIjoic29ja3MiLCJxdWFsaXR5IjoibmV3IiwiY29sb3IiOiJibGFjayIsIl9pZCI6IkgzSFJlMEx1TmV6Mk9Qd1cifQp7InR5cGUiOiJzd2VhdGVyIiwicXVhbGl0eSI6Indvcm4iLCJjb2xvciI6ImJsdWUiLCJfaWQiOiJVRm1HZmFQb2I4UWdHNm9YIn0KeyJ0eXBlIjoic3dlYXRlciIsInF1YWxpdHkiOiJ3b3JuIiwiY29sb3IiOiJyZWQiLCJfaWQiOiJzdWFjMldkM2hyR1l3UUowIn0K","extension":"db"},{"project":"lesson-nedb-crud-api-async-validation","pathToProcess":"/lesson-nedb-crud-api-async-validation/index.js","content":"Y29uc3QgSm9pID0gcmVxdWlyZSgiam9pIik7CmNvbnN0IGV4cHJlc3MgPSByZXF1aXJlKCJleHByZXNzIik7CmNvbnN0IG5lZGIgPSByZXF1aXJlKCJuZWRiLWFzeW5jIikuQXN5bmNOZWRiOwpjb25zdCBtb3JnYW4gPSByZXF1aXJlKCJtb3JnYW4iKTsKCmNvbnN0IFBPUlQgPSBwcm9jZXNzLmVudi5QT1JUIHx8IDgwMDA7CmNvbnN0IERCX1BBVEggPSBwcm9jZXNzLmVudi5EQl9QQVRIIHx8ICJkYXRhLmRiIjsKCmNvbnN0IGRiID0gbmV3IG5lZGIoeyBmaWxlbmFtZTogREJfUEFUSCwgYXV0b2xvYWQ6IHRydWUgfSk7CmNvbnN0IGFwcCA9IGV4cHJlc3MoKTsKCmFwcC51c2UoZXhwcmVzcy5qc29uKCkpOwphcHAudXNlKGV4cHJlc3MudXJsZW5jb2RlZCh7IGV4dGVuZGVkOiB0cnVlIH0pKTsKCm1vcmdhbi50b2tlbigiYm9keSIsIChyZXEsIHJlcykgPT4gSlNPTi5zdHJpbmdpZnkocmVxLmJvZHkpKTsKYXBwLnVzZSgKICBtb3JnYW4oCiAgICAiOm1ldGhvZCA6dXJsIDpzdGF0dXMgOnJlc3BvbnNlLXRpbWUgbXMgLSA6cmVzW2NvbnRlbnQtbGVuZ3RoXSA6Ym9keSAtIDpyZXFbY29udGVudC1sZW5ndGhdIgogICkKKTsKCmNvbnN0IHBvc3RTY2hlbWEgPSBKb2kub2JqZWN0KHsKICB0eXBlOiBKb2kuc3RyaW5nKCkKICAgIC52YWxpZCgic2hpcnQiLCAicGFudHMiLCAic3dlYXRlciIsICJqYWNrZXQiLCAic29ja3MiLCAic2NhcmYiKQogICAgLnJlcXVpcmVkKCksCiAgcXVhbGl0eTogSm9pLnN0cmluZygpLnZhbGlkKCJuZXciLCAib2xkIiwgIndvcm4iKS5yZXF1aXJlZCgpLAogIGNvbG9yOiBKb2kuc3RyaW5nKCksCn0pOwoKY29uc3QgcGF0Y2hTY2hlbWEgPSBKb2kub2JqZWN0KHsKICB0eXBlOiBKb2kuc3RyaW5nKCkudmFsaWQoCiAgICAic2hpcnQiLAogICAgInBhbnRzIiwKICAgICJzd2VhdGVyIiwKICAgICJqYWNrZXQiLAogICAgInNvY2tzIiwKICAgICJzY2FyZiIKICApLAogIHF1YWxpdHk6IEpvaS5zdHJpbmcoKS52YWxpZCgibmV3IiwgIm9sZCIsICJ3b3JuIiksCiAgY29sb3I6IEpvaS5zdHJpbmcoKSwKfSk7Cgpjb25zdCBxdWVyeVNjaGVtYSA9IEpvaS5vYmplY3QoewogIF9pZDogSm9pLnN0cmluZygpLnJlcXVpcmVkKCksCn0pOwoKYXBwLmxpc3RlbihQT1JULCAoKSA9PiB7CiAgY29uc29sZS5sb2coYFsgaW5kZXguanMgXSBMaXN0ZW5pbmcgb24gcG9ydCAke1BPUlR9YCk7Cn0pOwoKLy8gQ3JlYXRlCmFwcC5wb3N0KCIvYXBpL2ludmVudG9yeSIsIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4gewogIHRyeSB7CiAgICBjb25zdCB7IHR5cGUsIHF1YWxpdHksIGNvbG9yIH0gPSByZXEuYm9keTsKCiAgICBjb25zdCBpbnB1dCA9IHsgdHlwZSwgcXVhbGl0eSwgY29sb3IgfTsKCiAgICBhd2FpdCBwb3N0U2NoZW1hLnZhbGlkYXRlQXN5bmMoaW5wdXQpOwogICAgY29uc3QgZGF0YSA9IGF3YWl0IGRiLmFzeW5jSW5zZXJ0KGlucHV0KTsKICAgIHJlcy5qc29uKGRhdGEpOwogIH0gY2F0Y2ggKGVycikgewogICAgbmV4dChlcnIpOwogIH0KfSk7CgovLyBSZWFkIChBbGwpCmFwcC5nZXQoIi9hcGkvaW52ZW50b3J5IiwgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7CiAgdHJ5IHsKICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBkYi5hc3luY0ZpbmQoe30pOwogICAgcmVzLmpzb24oZGF0YSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICBuZXh0KGVycik7CiAgfQp9KTsKCi8vIFJlYWQKYXBwLmdldCgiL2FwaS9pbnZlbnRvcnkvOmlkIiwgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7CiAgY29uc3QgaW5wdXQgPSB7CiAgICBfaWQ6IHJlcS5wYXJhbXMuaWQsCiAgfTsKCiAgdHJ5IHsKICAgIGF3YWl0IHF1ZXJ5U2NoZW1hLnZhbGlkYXRlQXN5bmMoaW5wdXQpOwogICAgY29uc3QgZGF0YSA9IGF3YWl0IGRiLmFzeW5jRmluZE9uZShpbnB1dCk7CiAgICByZXMuanNvbihkYXRhKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIG5leHQoZXJyKTsKICB9Cn0pOwoKLy8gVXBkYXRlCmFwcC5wYXRjaCgiL2FwaS9pbnZlbnRvcnkvOmlkIiwgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7CiAgY29uc3QgcXVlcnkgPSB7CiAgICBfaWQ6IHJlcS5wYXJhbXMuaWQsCiAgfTsKCiAgdHJ5IHsKICAgIGNvbnN0IGlucHV0ID0gcmVxLmJvZHk7CgogICAgY29uc3QgdXBkYXRlID0gewogICAgICAkc2V0OiBpbnB1dCwKICAgIH07CgogICAgY29uc3Qgb3B0aW9ucyA9IHt9OwoKICAgIGF3YWl0IHF1ZXJ5U2NoZW1hLnZhbGlkYXRlQXN5bmMocXVlcnkpOwogICAgYXdhaXQgcGF0Y2hTY2hlbWEudmFsaWRhdGVBc3luYyhpbnB1dCk7CiAgICBjb25zdCBjb3VudCA9IGF3YWl0IGRiLmFzeW5jVXBkYXRlKHF1ZXJ5LCB1cGRhdGUsIG9wdGlvbnMpOwogICAgcmVzLmpzb24oeyB1cGRhdGVkOiBjb3VudCB9KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIG5leHQoZXJyKTsKICB9Cn0pOwoKLy8gRGVzdHJveQphcHAuZGVsZXRlKCIvYXBpL2ludmVudG9yeS86aWQiLCBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHsKICBjb25zdCBxdWVyeSA9IHsKICAgIF9pZDogcmVxLnBhcmFtcy5pZCwKICB9OwoKICBjb25zdCBvcHRpb25zID0ge307CgogIHRyeSB7CiAgICBhd2FpdCBxdWVyeVNjaGVtYS52YWxpZGF0ZUFzeW5jKHF1ZXJ5KTsKICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgZGIuYXN5bmNSZW1vdmUocXVlcnksIG9wdGlvbnMpOwogICAgcmVzLmpzb24oeyByZW1vdmVkOiBjb3VudCB9KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIG5leHQoZXJyKTsKICB9Cn0pOwo=","extension":"js"},{"project":"lesson-nedb-crud-api-async-validation","pathToProcess":"/lesson-nedb-crud-api-async-validation/package.json","content":"ewogICJuYW1lIjogImxlc3Nvbi1uZWRiLWNydWQtYXBpLWFzeW5jLXZhbGlkYXRpb24iLAogICJ2ZXJzaW9uIjogIjEuMC4wIiwKICAiZGVzY3JpcHRpb24iOiAibmVkYiBjcnVkIGFwaSB3aXRoIGFzeW5jL2F3YWl0IHZhbGlkYXRpb24iLAogICJtYWluIjogImluZGV4LmpzIiwKICAic2NyaXB0cyI6IHsKICAgICJzdGFydCI6ICJub2RlIGluZGV4LmpzIiwKICAgICJ0ZXN0IjogImVjaG8gXCJFcnJvcjogbm8gdGVzdCBzcGVjaWZpZWRcIiAmJiBleGl0IDEiCiAgfSwKICAia2V5d29yZHMiOiBbCiAgICAibm9kZSIsCiAgICAic2NoZW1hIiwKICAgICJqb2kiLAogICAgImNydWQiCiAgXSwKICAiYXV0aG9yIjogIk5hZmV1IE5hc2lyIDxuYWZldS5uYXNpckBnbWFpbC5jb20+IChodHRwOi8vbmFmZXUuY29tLykiLAogICJsaWNlbnNlIjogIk1JVCIsCiAgImRlcGVuZGVuY2llcyI6IHsKICAgICJleHByZXNzIjogIjQuMTcuMSIsCiAgICAiam9pIjogIjE3LjIuMSIsCiAgICAibW9yZ2FuIjogIjEuMTAuMCIsCiAgICAibmVkYiI6ICIxLjguMCIsCiAgICAibmVkYi1hc3luYyI6ICIwLjEuMyIKICB9Cn0K","extension":"json"}],"lesson-promises-async-await":[{"project":"lesson-promises-async-await","pathToProcess":"/lesson-promises-async-await/index.js","content":"Y29uc3QgT05FX1NFQ09ORCA9IDEwMDA7CmNvbnN0IFRXT19TRUNPTkRTID0gMjAwMDsKY29uc3QgVEhSRUVfU0VDT05EUyA9IDMwMDA7Cgpjb25zdCBDUkVBVEVfRVJST1IgPSBwcm9jZXNzLmVudi5DUkVBVEVfRVJST1IgPT0gInRydWUiOwoKY29uc3QgZGVsYXlMb2cxID0gKCkgPT4gewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY29uc29sZS5sb2coIjEgLSBhZnRlciB0aHJlZSBzZWNvbmRzIik7CiAgICAgIHJlc29sdmUoKTsKICAgIH0sIFRIUkVFX1NFQ09ORFMpOwogIH0pOwp9OwoKY29uc3QgZGVsYXlMb2cyID0gKCkgPT4gewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY29uc29sZS5sb2coIjIgLSBhZnRlciB0d28gc2Vjb25kcyIpOwogICAgICBpZiAoQ1JFQVRFX0VSUk9SKSB7CiAgICAgICAgcmVqZWN0KEVycm9yKCJhcmJpdHJhcnkgaXNzdWUiKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzb2x2ZSgpOwogICAgICB9CiAgICB9LCBUV09fU0VDT05EUyk7CiAgfSk7Cn07Cgpjb25zdCBkZWxheUxvZzMgPSAoKSA9PiB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiMyAtIGFmdGVyIG9uZSBzZWNvbmRzIik7CiAgICAgIHJlc29sdmUoKTsKICAgIH0sIE9ORV9TRUNPTkQpOwogIH0pOwp9OwoKY29uc3QgaW52b2tlV2l0aG91dEFzeW5jQXdhaXQgPSAoKSA9PiB7CiAgZGVsYXlMb2cxKCkudGhlbigKICAgIChyZXN1bHQpID0+IHsKICAgICAgZGVsYXlMb2cyKCkudGhlbigKICAgICAgICAocmVzdWx0KSA9PiB7CiAgICAgICAgICBkZWxheUxvZzMoKS50aGVuKAogICAgICAgICAgICAocmVzdWx0KSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coIkZpbmlzaGVkIGludm9raW5nIHdpdGhvdXQgYXN5bmMvYXdhaXQuIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIChlcnJvcikgPT4gewogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCItLS0gRVJST1IgaW4gUFJPTUlTRTogMyAtLS0iKTsKICAgICAgICAgICAgfQogICAgICAgICAgKTsKICAgICAgICB9LAogICAgICAgIChlcnJvcikgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIi0tLSBFUlJPUiBpbiBQUk9NSVNFOiAyIC0tLSIpOwogICAgICAgIH0KICAgICAgKTsKICAgIH0sCiAgICAoZXJyb3IpID0+IHsKICAgICAgY29uc29sZS5sb2coIi0tLSBFUlJPUiBpbiBQUk9NSVNFOiAxIC0tLSIpOwogICAgfQogICk7Cn07Cgpjb25zdCBpbnZva2VXaXRoQXN5bmNBd2FpdCA9IGFzeW5jICgpID0+IHsKICB0cnkgewogICAgYXdhaXQgZGVsYXlMb2cxKCk7CiAgICBhd2FpdCBkZWxheUxvZzIoKTsKICAgIGF3YWl0IGRlbGF5TG9nMygpOwogICAgY29uc29sZS5sb2coIkZpbmlzaGVkIGludm9raW5nIHdpdGggYXN5bmMvYXdhaXQuIik7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICBjb25zb2xlLmxvZygiLS0tIEVSUk9SIGluIEFTWU5DL0FXQUlUIC0tLSIpOwogIH0KfTsKCmludm9rZVdpdGhvdXRBc3luY0F3YWl0KCk7Cmludm9rZVdpdGhBc3luY0F3YWl0KCk7Cg==","extension":"js"},{"project":"lesson-promises-async-await","pathToProcess":"/lesson-promises-async-await/package.json","content":"ewogICJuYW1lIjogImxlc3Nvbi1wcm9taXNlcy1hc3luYy1hd2FpdCIsCiAgInZlcnNpb24iOiAiMS4wLjAiLAogICJkZXNjcmlwdGlvbiI6ICJleGFtcGxlcyBmb3IgcHJvbWlzZXMgYW5kIGFzeW5jL2F3YWl0IiwKICAibWFpbiI6ICJpbmRleC5qcyIsCiAgInNjcmlwdHMiOiB7CiAgICAic3RhcnQiOiAibm9kZSBpbmRleC5qcyIsCiAgICAidGVzdCI6ICJlY2hvIFwiRXJyb3I6IG5vIHRlc3Qgc3BlY2lmaWVkXCIgJiYgZXhpdCAxIgogIH0sCiAgImtleXdvcmRzIjogWwogICAgInByb21pc2VzIiwKICAgICJhc3luYyIsCiAgICAiYXdhaXQiCiAgXSwKICAiYXV0aG9yIjogIk5hZmV1IE5hc2lyIDxuYWZldS5uYXNpckBnbWFpbC5jb20+IChodHRwOi8vbmFmZXUuY29tLykiLAogICJsaWNlbnNlIjogIk1JVCIKfQo=","extension":"json"}]}).flat();
allContent = allContent.reduce(function(obj, item){
obj[item.pathToProcess] = { project: item.project, content: window.atob(item.content), extension: item.extension };
return obj;
}, {});
function handleTopicSelection(topic) {
if (selectedTopics.indexOf(topic) < 0) {
selectedTopics.push(topic);
} else {
selectedTopics = selectedTopics.filter(function(item){ return item !== topic });
}
for (var i = 0; i < topics.length; i++) {
topics[i].classList.remove('topic-selected');
topics[i].classList.remove('topic-unselected');
}
for (var i = 0; i < lessons.length; i++) {
lessons[i].classList.remove('lesson-selected');
lessons[i].classList.remove('lesson-unselected');
}
if (selectedTopics.length > 0) {
selectedTopics.forEach(function(selectedTopic){
for (var i = 0; i < topics.length; i++) {
if (topics[i].dataset.topic === selectedTopic) {
topics[i].classList.add('topic-selected');
}
}
for (var i = 0; i < lessons.length; i++) {
if (lessons[i].dataset.topics.includes(selectedTopic)) {
lessons[i].classList.add('lesson-selected');
}
}
});
for (var i = 0; i < topics.length; i++) {
if (!topics[i].classList.contains('topic-selected')) {
topics[i].classList.add('topic-unselected');
}
}
for (var i = 0; i < lessons.length; i++) {
if (!lessons[i].classList.contains('lesson-selected')) {
lessons[i].classList.add('lesson-unselected');
}
}
}
}
function isMatchingTopicForLessons(dataString, selectedTopics) {
var output = true;
for (var i = 0; i < selectedTopics.length; i++) {
if (!dataString.includes(selectedTopics[i])) {
output = false;
break;
}
}
return output;
}
function isMatchingTopicForTopics(dataString, selectedTopics) {
var output = false;
for (var i = 0; i < selectedTopics.length; i++) {
if (selectedTopics[i] === dataString) {
output = true;
break;
}
}
return output;
}
function openModal(path) {
var modal = document.getElementById('modal');
var modalContent = document.getElementById('modal-content');
var modalFilename = document.getElementById('modal-filename');
modal.style.visibility = 'visible';
modalContent.innerHTML = allContent[path].content.replace(/</g, '<').replace(/>/g, '>');
modalContent.className = "language-" + allContent[path].extension;
hljs.highlightBlock(modalContent);
modalFilename.innerHTML = '<span class="project-name">' + allContent[path].project + '</span> / <span class="project-filename">' + path.split('/').slice(2).join('/') + '</span>';
setTimeout(function(){
modalOpen = true
}, 200);
}
function closeModal() {
modalOpen = false;
modal.style.visibility = 'hidden';
}
window.addEventListener('click', function(e){
if (!document.getElementById('modal').contains(e.target) && modalOpen === true) {
document.getElementById('modal').style.visibility = 'hidden';
modalOpen = false;
}
});
</script>
</body>
</html>