tangled
alpha
login
or
join now
slices.network
/
slices
137
fork
atom
Highly ambitious ATProtocol AppView service and sdks
137
fork
atom
overview
issues
10
pulls
3
pipelines
update cli to support more templates
chadtmiller.com
5 months ago
1e63b049
19d96b40
+112
-32
3 changed files
expand all
collapse all
unified
split
packages
cli
scripts
embed-templates.ts
src
commands
init.ts
templates
embedded.ts
+42
-14
packages/cli/scripts/embed-templates.ts
···
4
4
import { relative, join } from "@std/path";
5
5
import { encodeBase64 } from "@std/encoding/base64";
6
6
7
7
-
const TEMPLATE_DIR = join(import.meta.dirname!, "..", "src", "templates", "deno-ssr");
7
7
+
const TEMPLATES_BASE_DIR = join(import.meta.dirname!, "..", "src", "templates");
8
8
const OUTPUT_FILE = join(import.meta.dirname!, "..", "src", "templates", "embedded.ts");
9
9
+
10
10
+
const TEMPLATE_NAMES = ["deno-ssr"];
9
11
10
12
interface TemplateFile {
13
13
+
template: string; // Template name (e.g., "deno-ssr", "deno-graphql")
11
14
path: string;
12
15
content: string;
13
16
}
14
17
15
18
async function embedTemplates() {
16
16
-
console.log("Embedding templates from:", TEMPLATE_DIR);
19
19
+
console.log("Embedding templates from:", TEMPLATES_BASE_DIR);
17
20
18
21
const templates: TemplateFile[] = [];
19
22
20
20
-
// Walk through all files in the template directory
21
21
-
for await (const entry of walk(TEMPLATE_DIR, { includeFiles: true, includeDirs: false })) {
22
22
-
const relativePath = relative(TEMPLATE_DIR, entry.path);
23
23
-
const content = await Deno.readFile(entry.path);
24
24
-
const base64Content = encodeBase64(content);
23
23
+
// Walk through each template directory
24
24
+
for (const templateName of TEMPLATE_NAMES) {
25
25
+
const templateDir = join(TEMPLATES_BASE_DIR, templateName);
26
26
+
console.log(`\nProcessing template: ${templateName}`);
25
27
26
26
-
templates.push({
27
27
-
path: relativePath,
28
28
-
content: base64Content,
29
29
-
});
28
28
+
// Walk through all files in the template directory
29
29
+
for await (const entry of walk(templateDir, { includeFiles: true, includeDirs: false })) {
30
30
+
const relativePath = relative(templateDir, entry.path);
31
31
+
const content = await Deno.readFile(entry.path);
32
32
+
const base64Content = encodeBase64(content);
30
33
31
31
-
console.log(` Embedded: ${relativePath}`);
34
34
+
templates.push({
35
35
+
template: templateName,
36
36
+
path: relativePath,
37
37
+
content: base64Content,
38
38
+
});
39
39
+
40
40
+
console.log(` Embedded: ${relativePath}`);
41
41
+
}
32
42
}
33
43
34
44
// Generate TypeScript file with embedded templates
···
36
46
// Generated by scripts/embed-templates.ts
37
47
38
48
export interface EmbeddedTemplate {
49
49
+
template: string; // Template name (e.g., "deno-ssr", "deno-graphql")
39
50
path: string;
40
51
content: string; // Base64 encoded
41
52
}
42
53
43
54
export const EMBEDDED_TEMPLATES: EmbeddedTemplate[] = ${JSON.stringify(templates, null, 2)};
44
55
45
45
-
export function getTemplateContent(path: string): Uint8Array | undefined {
46
46
-
const template = EMBEDDED_TEMPLATES.find(t => t.path === path);
56
56
+
export const AVAILABLE_TEMPLATES = ${JSON.stringify(TEMPLATE_NAMES)};
57
57
+
58
58
+
export function getTemplateContent(templateName: string, path: string): Uint8Array | undefined {
59
59
+
const template = EMBEDDED_TEMPLATES.find(t => t.template === templateName && t.path === path);
47
60
if (!template) return undefined;
48
61
49
62
const binaryString = atob(template.content);
···
57
70
export function getAllTemplates(): Map<string, Uint8Array> {
58
71
const result = new Map<string, Uint8Array>();
59
72
for (const template of EMBEDDED_TEMPLATES) {
73
73
+
const binaryString = atob(template.content);
74
74
+
const bytes = new Uint8Array(binaryString.length);
75
75
+
for (let i = 0; i < binaryString.length; i++) {
76
76
+
bytes[i] = binaryString.charCodeAt(i);
77
77
+
}
78
78
+
result.set(template.path, bytes);
79
79
+
}
80
80
+
return result;
81
81
+
}
82
82
+
83
83
+
export function getTemplatesForName(templateName: string): Map<string, Uint8Array> {
84
84
+
const result = new Map<string, Uint8Array>();
85
85
+
for (const template of EMBEDDED_TEMPLATES) {
86
86
+
if (template.template !== templateName) continue;
87
87
+
60
88
const binaryString = atob(template.content);
61
89
const bytes = new Uint8Array(binaryString.length);
62
90
for (let i = 0; i < binaryString.length; i++) {
+31
-16
packages/cli/src/commands/init.ts
···
3
3
import { ensureDir } from "@std/fs";
4
4
import { cyan, green, bold, dim } from "@std/fmt/colors";
5
5
import { logger } from "../utils/logger.ts";
6
6
-
import { getAllTemplates } from "../templates/embedded.ts";
6
6
+
import { getTemplatesForName, AVAILABLE_TEMPLATES } from "../templates/embedded.ts";
7
7
import { generateSliceName, generateDomain } from "../utils/name_generator.ts";
8
8
import { createAuthenticatedClient } from "../utils/client.ts";
9
9
import { ConfigManager } from "../auth/config.ts";
···
20
20
21
21
export async function initCommand(args: string[], _globalArgs: unknown) {
22
22
const parsed = parseArgs(args, {
23
23
-
string: ["name"],
23
23
+
string: ["name", "template"],
24
24
boolean: ["help"],
25
25
alias: {
26
26
n: "name",
27
27
h: "help",
28
28
+
t: "template",
29
29
+
},
30
30
+
default: {
31
31
+
template: "deno-ssr",
28
32
},
29
33
});
30
34
···
33
37
return;
34
38
}
35
39
40
40
+
// Validate template name
41
41
+
const templateName = parsed.template as string;
42
42
+
if (!AVAILABLE_TEMPLATES.includes(templateName)) {
43
43
+
logger.error(`Invalid template: ${templateName}`);
44
44
+
logger.info(`Available templates: ${AVAILABLE_TEMPLATES.join(", ")}`);
45
45
+
Deno.exit(1);
46
46
+
}
47
47
+
36
48
// Check if we're inside an existing project
37
49
const currentDir = Deno.cwd();
38
50
const projectIndicators = ["deno.json", "slices.json", ".git"];
···
241
253
await ensureDir(targetDir);
242
254
243
255
// Extract embedded templates
244
244
-
await extractEmbeddedTemplates(targetDir, projectName);
256
256
+
await extractEmbeddedTemplates(targetDir, projectName, templateName);
245
257
246
258
// Update .env.example with slice URI if we created one
247
259
if (sliceUri) {
···
421
433
422
434
async function extractEmbeddedTemplates(
423
435
targetDir: string,
424
424
-
projectName: string
436
436
+
projectName: string,
437
437
+
templateName: string
425
438
) {
426
439
try {
427
427
-
const templates = getAllTemplates();
440
440
+
const templates = getTemplatesForName(templateName);
428
441
429
442
if (templates.size === 0) {
430
430
-
throw new Error("No embedded templates found");
443
443
+
throw new Error(`No templates found for: ${templateName}`);
431
444
}
432
445
433
446
for (const [relativePath, content] of templates.entries()) {
···
444
457
// Process template files for variable replacement
445
458
await processTemplateFiles(targetDir, projectName);
446
459
447
447
-
logger.info("Template files extracted and processed");
460
460
+
logger.info(`Template files extracted and processed (${templateName})`);
448
461
} catch (error) {
449
462
const err = error as Error;
450
463
logger.error("Failed to extract templates:", err.message);
···
471
484
472
485
function showInitHelp() {
473
486
console.log(`
474
474
-
Initialize a new Deno SSR project with OAuth authentication
487
487
+
Initialize a new Deno project with OAuth authentication
475
488
476
489
USAGE:
477
477
-
slices init <project-name> Create project with specified name
478
478
-
slices init Create project with random generated name
479
479
-
slices init --name <name> Create project with specified name
490
490
+
slices init <project-name> Create project with specified name
491
491
+
slices init Create project with random generated name
492
492
+
slices init --name <name> Create project with specified name
493
493
+
slices init --template <template-name> Specify template to use
480
494
481
495
ARGUMENTS:
482
496
<project-name> Name of the project to create (optional)
483
497
484
498
OPTIONS:
485
485
-
-n, --name <name> Project name
486
486
-
-h, --help Show this help message
499
499
+
-n, --name <name> Project name
500
500
+
-t, --template <name> Template to use (default: deno-ssr)
501
501
+
Available: ${AVAILABLE_TEMPLATES.join(", ")}
502
502
+
-h, --help Show this help message
487
503
488
504
EXAMPLES:
489
489
-
slices init my-app Creates "my-app" project and slice
490
490
-
slices init Creates project with random name like "stellar-wave"
491
491
-
slices init --name my-project
505
505
+
slices init my-app Creates "my-app" project with deno-ssr template
506
506
+
slices init Creates project with random name
492
507
493
508
FEATURES:
494
509
• Automatically creates a matching slice (if authenticated)
+39
-2
packages/cli/src/templates/embedded.ts
···
2
2
// Generated by scripts/embed-templates.ts
3
3
4
4
export interface EmbeddedTemplate {
5
5
+
template: string; // Template name (e.g., "deno-ssr", "deno-graphql")
5
6
path: string;
6
7
content: string; // Base64 encoded
7
8
}
8
9
9
10
export const EMBEDDED_TEMPLATES: EmbeddedTemplate[] = [
10
11
{
12
12
+
"template": "deno-ssr",
11
13
"path": "deno.json",
12
14
"content": "ewogICJ0YXNrcyI6IHsKICAgICJzdGFydCI6ICJkZW5vIHJ1biAtQSAtLWVudi1maWxlPS5lbnYgc3JjL21haW4udHMiLAogICAgImRldiI6ICJkZW5vIHJ1biAtQSAtLWVudi1maWxlPS5lbnYgLS13YXRjaCBzcmMvbWFpbi50cyIKICB9LAogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAianN4IjogInByZWNvbXBpbGUiLAogICAgImpzeEltcG9ydFNvdXJjZSI6ICJwcmVhY3QiCiAgfSwKICAiaW1wb3J0cyI6IHsKICAgICJAc2xpY2VzL2NsaWVudCI6ICJqc3I6QHNsaWNlcy9jbGllbnRAXjAuMS4wLWFscGhhLjQiLAogICAgIkBzbGljZXMvb2F1dGgiOiAianNyOkBzbGljZXMvb2F1dGhAXjAuNi4wIiwKICAgICJAc2xpY2VzL3Nlc3Npb24iOiAianNyOkBzbGljZXMvc2Vzc2lvbkBeMC4zLjAiLAogICAgIkBzdGQvYXNzZXJ0IjogImpzcjpAc3RkL2Fzc2VydEBeMS4wLjE0IiwKICAgICJAc3RkL2ZtdCI6ICJqc3I6QHN0ZC9mbXRAXjEuMC44IiwKICAgICJwcmVhY3QiOiAibnBtOnByZWFjdEBeMTAuMjcuMSIsCiAgICAicHJlYWN0LXJlbmRlci10by1zdHJpbmciOiAibnBtOnByZWFjdC1yZW5kZXItdG8tc3RyaW5nQF42LjUuMTMiLAogICAgInR5cGVkLWh0bXgiOiAibnBtOnR5cGVkLWh0bXhAXjAuMy4xIiwKICAgICJAc3RkL2h0dHAiOiAianNyOkBzdGQvaHR0cEBeMS4wLjIwIiwKICAgICJjbHN4IjogIm5wbTpjbHN4QF4yLjEuMSIsCiAgICAidGFpbHdpbmQtbWVyZ2UiOiAibnBtOnRhaWx3aW5kLW1lcmdlQF4yLjUuNSIsCiAgICAibHVjaWRlLXByZWFjdCI6ICJucG06bHVjaWRlLXByZWFjdEBeMC41NDQuMCIKICB9LAogICJub2RlTW9kdWxlc0RpciI6ICJhdXRvIgp9Cg=="
13
15
},
14
16
{
17
17
+
"template": "deno-ssr",
15
18
"path": "README.md",
16
19
"content": "IyB7e1BST0pFQ1RfTkFNRX19CgpBIERlbm8gU1NSIHdlYiBhcHBsaWNhdGlvbiB3aXRoIEFUIFByb3RvY29sIGludGVncmF0aW9uLCBidWlsdCB3aXRoIFByZWFjdCwKSFRNWCwgYW5kIE9BdXRoIGF1dGhlbnRpY2F0aW9uLgoKIyMgUXVpY2sgU3RhcnQKCmBgYGJhc2gKIyBTdGFydCB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyCmRlbm8gdGFzayBkZXYKYGBgCgpWaXNpdCB5b3VyIGFwcCBhdCBodHRwOi8vbG9jYWxob3N0OjgwODAKCj4gKipOb3RlOioqIFlvdXIgc2xpY2UgYW5kIE9BdXRoIGNyZWRlbnRpYWxzIHdlcmUgYXV0b21hdGljYWxseSBjb25maWd1cmVkCj4gZHVyaW5nIHByb2plY3QgY3JlYXRpb24uIFRoZSBgLmVudmAgZmlsZSBpcyBhbHJlYWR5IHNldCB1cCB3aXRoIHlvdXIKPiBjcmVkZW50aWFscy4KCiMjIEZlYXR1cmVzCgotIPCflJAgKipPQXV0aCBBdXRoZW50aWNhdGlvbioqIHdpdGggUEtDRSBmbG93Ci0g4pqhICoqU2VydmVyLVNpZGUgUmVuZGVyaW5nKiogd2l0aCBQcmVhY3QKLSDwn46vICoqSW50ZXJhY3RpdmUgVUkqKiB3aXRoIEhUTVgKLSDwn46oICoqU3R5bGluZyoqIHdpdGggVGFpbHdpbmQgQ1NTCi0g8J+XhO+4jyAqKlNlc3Npb24gTWFuYWdlbWVudCoqIHdpdGggU1FMaXRlCi0g8J+UhCAqKkF1dG8gVG9rZW4gUmVmcmVzaCoqCi0g8J+Pl++4jyAqKkZlYXR1cmUtQmFzZWQgQXJjaGl0ZWN0dXJlKioKCiMjIERldmVsb3BtZW50CgpgYGBiYXNoCiMgU3RhcnQgZGV2ZWxvcG1lbnQgc2VydmVyIHdpdGggaG90IHJlbG9hZApkZW5vIHRhc2sgZGV2CgojIFN0YXJ0IHByb2R1Y3Rpb24gc2VydmVyCmRlbm8gdGFzayBzdGFydAoKIyBGb3JtYXQgY29kZQpkZW5vIGZtdAoKIyBDaGVjayB0eXBlcwpkZW5vIGNoZWNrIHNyYy8qKi8qLnRzIHNyYy8qKi8qLnRzeApgYGAKCiMjIFByb2plY3QgU3RydWN0dXJlCgpgYGAKc2xpY2VzLmpzb24gICAgICAgICAgICAgICMgU2xpY2VzIGNvbmZpZ3VyYXRpb24gZmlsZQpsZXhpY29ucy8gICAgICAgICAgICAgICAgIyBBVCBQcm90b2NvbCBsZXhpY29uIGRlZmluaXRpb25zCnNyYy8K4pSc4pSA4pSAIG1haW4udHMgICAgICAgICAgICAgICMgU2VydmVyIGVudHJ5IHBvaW50CuKUnOKUgOKUgCBjb25maWcudHMgICAgICAgICAgICAjIE9BdXRoICYgc2Vzc2lvbiBjb25maWd1cmF0aW9uCuKUnOKUgOKUgCBnZW5lcmF0ZWRfY2xpZW50LnRzICAjIEdlbmVyYXRlZCBUeXBlU2NyaXB0IGNsaWVudCBmcm9tIGxleGljb25zCuKUnOKUgOKUgCByb3V0ZXMvICAgICAgICAgICAgICAjIFJvdXRlIGRlZmluaXRpb25zCuKUnOKUgOKUgCBmZWF0dXJlcy8gICAgICAgICAgICAjIEZlYXR1cmUgbW9kdWxlcwrilIIgICDilJTilIDilIAgYXV0aC8gICAgICAgICAgICMgQXV0aGVudGljYXRpb24K4pSc4pSA4pSAIHNoYXJlZC9mcmFnbWVudHMvICAgICMgUmV1c2FibGUgVUkgY29tcG9uZW50cwrilJTilIDilIAgdXRpbHMvICAgICAgICAgICAgICAjIFV0aWxpdHkgZnVuY3Rpb25zCmBgYAoKIyMgT0F1dGggU2V0dXAKCllvdXIgT0F1dGggYXBwbGljYXRpb24gd2FzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBkdXJpbmcgcHJvamVjdCBpbml0aWFsaXphdGlvbgp3aXRoOgoKLSAqKkNsaWVudCBJRCAmIFNlY3JldCoqOiBBbHJlYWR5IGNvbmZpZ3VyZWQgaW4gYC5lbnZgCi0gKipSZWRpcmVjdCBVUkkqKjogYGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9vYXV0aC9jYWxsYmFja2AKLSAqKlNsaWNlKio6IEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBhbmQgbGlua2VkCgpUbyBtYW5hZ2UgeW91ciBPQXV0aCBjbGllbnRzIG9yIGNyZWF0ZSBhZGRpdGlvbmFsIG9uZXM6CgoxLiBWaXNpdCBbU2xpY2VzIE5ldHdvcmtdKGh0dHBzOi8vc2xpY2VzLm5ldHdvcmspCjIuIFVzZSB0aGUgYHNsaWNlcyBsb2dpbmAgQ0xJIGNvbW1hbmQKCiMjIERvY3VtZW50YXRpb24KCi0gYENMQVVERS5tZGAgLSBBcmNoaXRlY3R1cmUgZ3VpZGUgZm9yIEFJIGFzc2lzdGFuY2UKLSBGZWF0dXJlIGRpcmVjdG9yaWVzIGNvbnRhaW4gaGFuZGxlcnMgYW5kIHRlbXBsYXRlcwotIENvbXBvbmVudHMgdXNlIFByZWFjdCB3aXRoIHNlcnZlci1zaWRlIHJlbmRlcmluZwotIEhUTVggcHJvdmlkZXMgaW50ZXJhY3RpdmUgYmVoYXZpb3Igd2l0aG91dCBwYWdlIHJlbG9hZHMKCiMjIExpY2Vuc2UKCk1JVAo="
17
20
},
18
21
{
22
22
+
"template": "deno-ssr",
19
23
"path": ".gitignore",
20
24
"content": "LmVudioKbm9kZV9tb2R1bGVzCiouZGIqCg=="
21
25
},
22
26
{
27
27
+
"template": "deno-ssr",
23
28
"path": ".env.example",
24
29
"content": "IyBPQXV0aCBDb25maWd1cmF0aW9uIChyZXF1aXJlZCkKT0FVVEhfQ0xJRU5UX0lEPXlvdXJfb2F1dGhfY2xpZW50X2lkCk9BVVRIX0NMSUVOVF9TRUNSRVQ9eW91cl9vYXV0aF9jbGllbnRfc2VjcmV0Ck9BVVRIX1JFRElSRUNUX1VSST1odHRwOi8vbG9jYWxob3N0OjgwODAvb2F1dGgvY2FsbGJhY2sKT0FVVEhfQUlQX0JBU0VfVVJMPWh0dHBzOi8vYXV0aC5zbGljZXMubmV0d29yawoKIyBBUEkgQ29uZmlndXJhdGlvbiAocmVxdWlyZWQpCkFQSV9VUkw9aHR0cHM6Ly9hcGkuc2xpY2VzLm5ldHdvcmsKU0xJQ0VfVVJJPWF0Oi8vZGlkOnBsYzpiY2dsdHpxYXp3NXRiNmsyZzN0dGVuYmovbmV0d29yay5zbGljZXMuc2xpY2UvM2x6Ynp1bWNtdm8yegoKIyBEYXRhYmFzZSAob3B0aW9uYWwsIGRlZmF1bHRzIHRvIHNsaWNlcy5kYikKREFUQUJBU0VfVVJMPXNsaWNlcy5kYgoKIyBFbnZpcm9ubWVudCAob3B0aW9uYWwsIGFmZmVjdHMgY29va2llIHNlY3VyaXR5KQpERU5PX0VOVj1kZXZlbG9wbWVudAoKIyBTZXJ2ZXIgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byA4MDgwKQpQT1JUPTgwODA="
25
30
},
26
31
{
32
32
+
"template": "deno-ssr",
27
33
"path": "CLAUDE.md",
28
34
"content": "IyBDTEFVREUubWQKClRoaXMgZmlsZSBwcm92aWRlcyBndWlkYW5jZSB0byBDbGF1ZGUgQ29kZSAoY2xhdWRlLmFpL2NvZGUpIHdoZW4gd29ya2luZyB3aXRoCmNvZGUgaW4gdGhpcyByZXBvc2l0b3J5LgoKIyMgRGV2ZWxvcG1lbnQgQ29tbWFuZHMKCmBgYGJhc2gKIyBTdGFydCBkZXZlbG9wbWVudCBzZXJ2ZXIgd2l0aCBob3QgcmVsb2FkCmRlbm8gdGFzayBkZXYKCiMgU3RhcnQgcHJvZHVjdGlvbiBzZXJ2ZXIKZGVubyB0YXNrIHN0YXJ0CgojIEZvcm1hdCBjb2RlCmRlbm8gZm10CgojIENoZWNrIHR5cGVzCmRlbm8gY2hlY2sgc3JjLyoqLyoudHMgc3JjLyoqLyoudHN4CmBgYAoKIyMgQXJjaGl0ZWN0dXJlIE92ZXJ2aWV3CgpUaGlzIGlzIGEgRGVuby1iYXNlZCB3ZWIgYXBwbGljYXRpb24gYnVpbHQgd2l0aCB0aGUgU2xpY2VzIENMSS4gSXQgcHJvdmlkZXMKc2VydmVyLXNpZGUgcmVuZGVyaW5nIHdpdGggUHJlYWN0LCBPQXV0aCBhdXRoZW50aWNhdGlvbiwgYW5kIEFUIFByb3RvY29sCmludGVncmF0aW9uIGZvciBidWlsZGluZyBhcHBsaWNhdGlvbnMgb24gdGhlIGRlY2VudHJhbGl6ZWQgd2ViLgoKIyMjIFRlY2hub2xvZ3kgU3RhY2sKCi0gKipSdW50aW1lKio6IERlbm8gd2l0aCBUeXBlU2NyaXB0Ci0gKipGcm9udGVuZCoqOiBQcmVhY3Qgd2l0aCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcKLSAqKlN0eWxpbmcqKjogVGFpbHdpbmQgQ1NTICh2aWEgQ0ROKQotICoqSW50ZXJhY3Rpdml0eSoqOiBIVE1YICsgSHlwZXJzY3JpcHQKLSAqKlJvdXRpbmcqKjogRGVubydzIHN0YW5kYXJkIEhUVFAgcm91dGluZwotICoqQXV0aGVudGljYXRpb24qKjogT0F1dGggd2l0aCBQS0NFIGZsb3cgdXNpbmcgYEBzbGljZXMvb2F1dGhgCi0gKipTZXNzaW9ucyoqOiBTUUxpdGUtYmFzZWQgd2l0aCBgQHNsaWNlcy9zZXNzaW9uYAotICoqRGF0YWJhc2UqKjogU1FMaXRlIHZpYSBPQXV0aCBhbmQgc2Vzc2lvbiBsaWJyYXJpZXMKCiMjIyBDb3JlIEFyY2hpdGVjdHVyZSBQYXR0ZXJucwoKIyMjIyBGZWF0dXJlLUJhc2VkIE9yZ2FuaXphdGlvbgoKVGhlIGNvZGViYXNlIGlzIG9yZ2FuaXplZCBieSBmZWF0dXJlcyByYXRoZXIgdGhhbiB0ZWNobmljYWwgbGF5ZXJzOgoKYGBgCnNyYy8K4pSc4pSA4pSAIGZlYXR1cmVzLyAgICAgICAgICAgIyBGZWF0dXJlIG1vZHVsZXMK4pSCICAg4pSU4pSA4pSAIGF1dGgvICAgICAgICAgICMgQXV0aGVudGljYXRpb24gKGxvZ2luL2xvZ291dCkK4pSc4pSA4pSAIHNoYXJlZC8gICAgICAgICAgICAjIFNoYXJlZCBVSSBjb21wb25lbnRzCuKUnOKUgOKUgCByb3V0ZXMvICAgICAgICAgICAgIyBSb3V0ZSBkZWZpbml0aW9ucyBhbmQgbWlkZGxld2FyZQrilJzilIDilIAgdXRpbHMvICAgICAgICAgICAgICMgVXRpbGl0eSBmdW5jdGlvbnMK4pSU4pSA4pSAIGNvbmZpZy50cyAgICAgICAgICAjIENvcmUgY29uZmlndXJhdGlvbgpgYGAKCiMjIyMgSGFuZGxlciBQYXR0ZXJuCgpFYWNoIGZlYXR1cmUgZm9sbG93cyBhIGNvbnNpc3RlbnQgcGF0dGVybjoKCi0gYGhhbmRsZXJzLnRzeGAgLSBSb3V0ZSBoYW5kbGVycyB0aGF0IHJldHVybiBSZXNwb25zZSBvYmplY3RzCi0gYHRlbXBsYXRlcy9gIC0gUHJlYWN0IGNvbXBvbmVudHMgZm9yIHJlbmRlcmluZwotIGB0ZW1wbGF0ZXMvZnJhZ21lbnRzL2AgLSBSZXVzYWJsZSBVSSBjb21wb25lbnRzCgojIyMjIEF1dGhlbnRpY2F0aW9uICYgU2Vzc2lvbnMKCi0gT0F1dGggaW50ZWdyYXRpb24gd2l0aCBBVCBQcm90b2NvbCB1c2luZyBgQHNsaWNlcy9vYXV0aGAKLSBQS0NFIGZsb3cgZm9yIHNlY3VyZSBhdXRoZW50aWNhdGlvbgotIFNlc3Npb24gbWFuYWdlbWVudCB3aXRoIGBAc2xpY2VzL3Nlc3Npb25gCi0gU1FMaXRlIHN0b3JhZ2UgZm9yIE9BdXRoIHN0YXRlIGFuZCBzZXNzaW9ucwotIEF1dG9tYXRpYyB0b2tlbiByZWZyZXNoIGNhcGFiaWxpdGllcwoKIyMjIEtleSBDb21wb25lbnRzCgojIyMjIFJvdXRlIFN5c3RlbQoKLSBBbGwgcm91dGVzIGRlZmluZWQgaW4gYHNyYy9yb3V0ZXMvbW9kLnRzYAotIEZlYXR1cmUgcm91dGVzIGV4cG9ydGVkIGZyb20gYHNyYy9mZWF0dXJlcy8qL2hhbmRsZXJzLnRzeGAKLSBNaWRkbGV3YXJlIGluIGBzcmMvcm91dGVzL21pZGRsZXdhcmUudHNgIGhhbmRsZXMgYXV0aCBzdGF0ZQoKIyMjIyBPQXV0aCBJbnRlZ3JhdGlvbgoKLSBgc3JjL2NvbmZpZy50c2AgLSBPQXV0aCBjbGllbnQgYW5kIHNlc3Npb24gc3RvcmUgc2V0dXAKLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgcmVxdWlyZWQ6IGBPQVVUSF9DTElFTlRfSURgLCBgT0FVVEhfQ0xJRU5UX1NFQ1JFVGAsCiAgYE9BVVRIX1JFRElSRUNUX1VSSWAsIGBPQVVUSF9BSVBfQkFTRV9VUkxgLCBgQVBJX1VSTGAsIGBTTElDRV9VUklgCi0gUEtDRSBmbG93IGltcGxlbWVudGF0aW9uIGluIGF1dGggaGFuZGxlcnMKLSBTUUxpdGUgc3RvcmFnZSBmb3IgT0F1dGggc3RhdGUgYW5kIHRva2VucwoKIyMjIyBSZW5kZXJpbmcgU3lzdGVtCgotIGBzcmMvdXRpbHMvcmVuZGVyLnRzeGAgLSBVbmlmaWVkIEhUTUwgcmVuZGVyaW5nIHdpdGggcHJvcGVyIGhlYWRlcnMKLSBTZXJ2ZXItc2lkZSByZW5kZXJpbmcgd2l0aCBQcmVhY3QKLSBIVE1YIGZvciBkeW5hbWljIGludGVyYWN0aW9ucyB3aXRob3V0IHBhZ2UgcmVsb2FkcwotIFNoYXJlZCBgTGF5b3V0YCBjb21wb25lbnQgaW4gYHNyYy9zaGFyZWQvZnJhZ21lbnRzL0xheW91dC50c3hgCgojIyMgRGV2ZWxvcG1lbnQgR3VpZGVsaW5lcwoKIyMjIyBDb21wb25lbnQgQ29udmVudGlvbnMKCi0gVXNlIGAudHN4YCBleHRlbnNpb24gZm9yIGNvbXBvbmVudHMgd2l0aCBKU1gKLSBQcmVhY3QgY29tcG9uZW50cyBmb3IgYWxsIFVJIHJlbmRlcmluZwotIEhUTVggYXR0cmlidXRlcyBmb3IgaW50ZXJhY3RpdmUgYmVoYXZpb3IKLSBUYWlsd2luZCBjbGFzc2VzIGZvciBzdHlsaW5nCgojIyMjIEZlYXR1cmUgRGV2ZWxvcG1lbnQKCldoZW4gYWRkaW5nIG5ldyBmZWF0dXJlczoKCjEuIENyZWF0ZSBmZWF0dXJlIGRpcmVjdG9yeSB1bmRlciBgc3JjL2ZlYXR1cmVzL2AKMi4gQWRkIGBoYW5kbGVycy50c3hgIHdpdGggcm91dGUgZGVmaW5pdGlvbnMKMy4gQ3JlYXRlIGB0ZW1wbGF0ZXMvYCBkaXJlY3Rvcnkgd2l0aCBQcmVhY3QgY29tcG9uZW50cwo0LiBFeHBvcnQgcm91dGVzIGZyb20gZmVhdHVyZSBhbmQgYWRkIHRvIGBzcmMvcm91dGVzL21vZC50c2AKNS4gRm9sbG93IGV4aXN0aW5nIGF1dGhlbnRpY2F0aW9uIHBhdHRlcm5zIHVzaW5nIGF1dGggbWlkZGxld2FyZQoKIyMjIyBFbnZpcm9ubWVudCBTZXR1cAoKVGhlIGFwcGxpY2F0aW9uIHJlcXVpcmVzIGEgYC5lbnZgIGZpbGUgd2l0aCBPQXV0aCBhbmQgQVBJIGNvbmZpZ3VyYXRpb24uCkNvcHkgYC5lbnYuZXhhbXBsZWAgYW5kIGZpbGwgaW4geW91ciB2YWx1ZXMuIE1pc3NpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCndpbGwgY2F1c2Ugc3RhcnR1cCBmYWlsdXJlcyB3aXRoIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2VzLgoKIyMjIFJlcXVlc3QvUmVzcG9uc2UgRmxvdwoKMS4gUmVxdWVzdCBoaXRzIG1haW4gc2VydmVyIGluIGBzcmMvbWFpbi50c2AKMi4gUm91dGVzIHByb2Nlc3NlZCB0aHJvdWdoIGBzcmMvcm91dGVzL21vZC50c2AKMy4gQXV0aGVudGljYXRpb24gbWlkZGxld2FyZSBhcHBsaWVzIHNlc3Npb24gc3RhdGUKNC4gRmVhdHVyZSBoYW5kbGVycyBwcm9jZXNzIHJlcXVlc3RzIGFuZCByZXR1cm4gcmVuZGVyZWQgSFRNTAo1LiBIVE1YIGhhbmRsZXMgcGFydGlhbCBwYWdlIHVwZGF0ZXMgb24gY2xpZW50LXNpZGUgaW50ZXJhY3Rpb25zCgojIyMgT0F1dGggRmxvdwoKMS4gVXNlciBpbml0aWF0ZXMgbG9naW4gd2l0aCBoYW5kbGUvaWRlbnRpZmllcgoyLiBPQXV0aCBjbGllbnQgZ2VuZXJhdGVzIFBLQ0UgY2hhbGxlbmdlIGFuZCByZWRpcmVjdHMgdG8gYXV0aCBzZXJ2ZXIKMy4gVXNlciBhdXRoZW50aWNhdGVzIGFuZCBpcyByZWRpcmVjdGVkIGJhY2sgd2l0aCBhdXRob3JpemF0aW9uIGNvZGUKNC4gQ2xpZW50IGV4Y2hhbmdlcyBjb2RlIGZvciB0b2tlbnMgdXNpbmcgUEtDRSB2ZXJpZmllcgo1LiBTZXNzaW9uIGNyZWF0ZWQgd2l0aCBhdXRvbWF0aWMgdG9rZW4gcmVmcmVzaAo2LiBQcm90ZWN0ZWQgcm91dGVzIGFjY2VzcyB1c2VyIGRhdGEgdGhyb3VnaCBhdXRoZW50aWNhdGVkIGNsaWVudAoKIyMjIEFkZGluZyBOZXcgRmVhdHVyZXMKClRvIGFkZCBhIG5ldyBmZWF0dXJlOgoKMS4gQ3JlYXRlIGBzcmMvZmVhdHVyZXMvZmVhdHVyZS1uYW1lL2AKMi4gQWRkIGBoYW5kbGVycy50c3hgIHdpdGggcm91dGUgaGFuZGxlcnMKMy4gQ3JlYXRlIGB0ZW1wbGF0ZXMvYCBkaXJlY3RvcnkgZm9yIFVJIGNvbXBvbmVudHMKNC4gRXhwb3J0IHJvdXRlcyBhbmQgYWRkIHRvIG1haW4gcm91dGVyCjUuIFVzZSBleGlzdGluZyBwYXR0ZXJucyBmb3IgYXV0aGVudGljYXRpb24gYW5kIHJlbmRlcmluZw=="
29
35
},
30
36
{
37
37
+
"template": "deno-ssr",
31
38
"path": "src/main.ts",
32
39
"content": "aW1wb3J0IHsgcm91dGUgfSBmcm9tICJAc3RkL2h0dHAvdW5zdGFibGUtcm91dGUiOwppbXBvcnQgeyBhbGxSb3V0ZXMgfSBmcm9tICIuL3JvdXRlcy9tb2QudHMiOwppbXBvcnQgeyBjcmVhdGVMb2dnaW5nSGFuZGxlciB9IGZyb20gIi4vdXRpbHMvbG9nZ2luZy50cyI7CgpmdW5jdGlvbiBkZWZhdWx0SGFuZGxlcihyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShSZXNwb25zZS5yZWRpcmVjdChuZXcgVVJMKCIvIiwgcmVxLnVybCksIDMwMikpOwp9Cgpjb25zdCBoYW5kbGVyID0gY3JlYXRlTG9nZ2luZ0hhbmRsZXIocm91dGUoYWxsUm91dGVzLCBkZWZhdWx0SGFuZGxlcikpOwoKRGVuby5zZXJ2ZSgKICB7CiAgICBwb3J0OiBwYXJzZUludChEZW5vLmVudi5nZXQoIlBPUlQiKSB8fCAiODA4MCIpLAogICAgaG9zdG5hbWU6ICIwLjAuMC4wIiwKICAgIG9uTGlzdGVuOiAoeyBwb3J0LCBob3N0bmFtZSB9KSA9PgogICAgICBjb25zb2xlLmxvZyhg8J+agCBTZXJ2ZXIgcnVubmluZyBvbiBodHRwOi8vJHtob3N0bmFtZX06JHtwb3J0fWApLAogIH0sCiAgaGFuZGxlciwKKTs="
33
40
},
34
41
{
42
42
+
"template": "deno-ssr",
35
43
"path": "src/features/auth/templates/LoginPage.tsx",
36
44
"content": "aW1wb3J0IHsgTGF5b3V0IH0gZnJvbSAiLi4vLi4vLi4vc2hhcmVkL2ZyYWdtZW50cy9MYXlvdXQudHN4IjsKaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAiLi4vLi4vLi4vc2hhcmVkL2ZyYWdtZW50cy9CdXR0b24udHN4IjsKaW1wb3J0IHsgSW5wdXQgfSBmcm9tICIuLi8uLi8uLi9zaGFyZWQvZnJhZ21lbnRzL0lucHV0LnRzeCI7CgppbnRlcmZhY2UgTG9naW5QYWdlUHJvcHMgewogIGVycm9yPzogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gTG9naW5QYWdlKHsgZXJyb3IgfTogTG9naW5QYWdlUHJvcHMpIHsKICByZXR1cm4gKAogICAgPExheW91dCB0aXRsZT0iTG9naW4iPgogICAgICA8ZGl2IGNsYXNzTmFtZT0ibWluLWgtc2NyZWVuIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWdyYXktNTAiPgogICAgICAgIDxkaXYgY2xhc3NOYW1lPSJtYXgtdy1tZCB3LWZ1bGwgc3BhY2UteS04Ij4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9Im10LTYgdGV4dC1jZW50ZXIgdGV4dC0zeGwgZm9udC1leHRyYWJvbGQgdGV4dC1ncmF5LTkwMCI+CiAgICAgICAgICAgICAgU2lnbiBpbiB0byB5b3VyIGFjY291bnQKICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJtdC0yIHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1ncmF5LTYwMCI+CiAgICAgICAgICAgICAgVXNlIHlvdXIgQVQgUHJvdG9jb2wgaGFuZGxlIG9yIERJRAogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICB7ZXJyb3IgJiYgKAogICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iYmctcmVkLTUwIGJvcmRlciBib3JkZXItcmVkLTIwMCB0ZXh0LXJlZC03MDAgcHgtNCBweS0zIHJvdW5kZWQiPgogICAgICAgICAgICAgIHtlcnJvciA9PT0gIk9BdXRoIGluaXRpYWxpemF0aW9uIGZhaWxlZCIgJiYgIkZhaWxlZCB0byBzdGFydCBhdXRoZW50aWNhdGlvbiJ9CiAgICAgICAgICAgICAge2Vycm9yID09PSAiSW52YWxpZCBPQXV0aCBjYWxsYmFjayIgJiYgIkF1dGhlbnRpY2F0aW9uIGNhbGxiYWNrIGZhaWxlZCJ9CiAgICAgICAgICAgICAge2Vycm9yID09PSAiQXV0aGVudGljYXRpb24gZmFpbGVkIiAmJiAiQXV0aGVudGljYXRpb24gZmFpbGVkIn0KICAgICAgICAgICAgICB7ZXJyb3IgPT09ICJGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24iICYmICJGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24ifQogICAgICAgICAgICAgIHshWyJPQXV0aCBpbml0aWFsaXphdGlvbiBmYWlsZWQiLCAiSW52YWxpZCBPQXV0aCBjYWxsYmFjayIsICJBdXRoZW50aWNhdGlvbiBmYWlsZWQiLCAiRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uIl0uaW5jbHVkZXMoZXJyb3IpICYmIGVycm9yfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICl9CgogICAgICAgICAgPGZvcm0gY2xhc3NOYW1lPSJtdC04IHNwYWNlLXktNiIgYWN0aW9uPSIvb2F1dGgvYXV0aG9yaXplIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPSJsb2dpbkhpbnQiIGNsYXNzTmFtZT0iYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj4KICAgICAgICAgICAgICAgIEhhbmRsZSBvciBESUQKICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgIDxJbnB1dAogICAgICAgICAgICAgICAgaWQ9ImxvZ2luSGludCIKICAgICAgICAgICAgICAgIG5hbWU9ImxvZ2luSGludCIKICAgICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9ImFsaWNlLmJza3kuc29jaWFsIG9yIGRpZDpwbGM6Li4uIgogICAgICAgICAgICAgICAgY2xhc3NOYW1lPSJtdC0xIgogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzTmFtZT0idy1mdWxsIj4KICAgICAgICAgICAgICBTaWduIGluCiAgICAgICAgICAgIDwvQnV0dG9uPgogICAgICAgICAgPC9mb3JtPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvTGF5b3V0PgogICk7Cn0="
37
45
},
38
46
{
47
47
+
"template": "deno-ssr",
39
48
"path": "src/features/auth/handlers.tsx",
40
49
"content": "aW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gIkBzdGQvaHR0cC91bnN0YWJsZS1yb3V0ZSI7CmltcG9ydCB7IHdpdGhBdXRoIH0gZnJvbSAiLi4vLi4vcm91dGVzL21pZGRsZXdhcmUudHMiOwppbXBvcnQgeyBPQXV0aENsaWVudCB9IGZyb20gIkBzbGljZXMvb2F1dGgiOwppbXBvcnQgewogIGNyZWF0ZU9BdXRoQ2xpZW50LAogIGNyZWF0ZVNlc3Npb25DbGllbnQsCiAgb2F1dGhDb25maWcsCiAgb2F1dGhTdG9yYWdlLAogIG9hdXRoU2Vzc2lvbnMsCiAgc2Vzc2lvblN0b3JlLAp9IGZyb20gIi4uLy4uL2NvbmZpZy50cyI7CmltcG9ydCB7IHJlbmRlckhUTUwgfSBmcm9tICIuLi8uLi91dGlscy9yZW5kZXIudHN4IjsKaW1wb3J0IHsgTG9naW5QYWdlIH0gZnJvbSAiLi90ZW1wbGF0ZXMvTG9naW5QYWdlLnRzeCI7Cgphc3luYyBmdW5jdGlvbiBoYW5kbGVMb2dpblBhZ2UocmVxOiBSZXF1ZXN0KTogUHJvbWlzZTxSZXNwb25zZT4gewogIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB3aXRoQXV0aChyZXEpOwogIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7CgogIC8vIFJlZGlyZWN0IGlmIGFscmVhZHkgbG9nZ2VkIGluCiAgaWYgKGNvbnRleHQuY3VycmVudFVzZXIpIHsKICAgIHJldHVybiBSZXNwb25zZS5yZWRpcmVjdChuZXcgVVJMKCIvZGFzaGJvYXJkIiwgcmVxLnVybCksIDMwMik7CiAgfQoKICBjb25zdCBlcnJvciA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpOwogIHJldHVybiByZW5kZXJIVE1MKDxMb2dpblBhZ2UgZXJyb3I9e2Vycm9yIHx8IHVuZGVmaW5lZH0gLz4pOwp9Cgphc3luYyBmdW5jdGlvbiBoYW5kbGVPQXV0aEF1dGhvcml6ZShyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7CiAgdHJ5IHsKICAgIGNvbnN0IGZvcm1EYXRhID0gYXdhaXQgcmVxLmZvcm1EYXRhKCk7CiAgICBjb25zdCBsb2dpbkhpbnQgPSBmb3JtRGF0YS5nZXQoImxvZ2luSGludCIpIGFzIHN0cmluZzsKCiAgICBpZiAoIWxvZ2luSGludCkgewogICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCJNaXNzaW5nIGxvZ2luIGhpbnQiLCB7IHN0YXR1czogNDAwIH0pOwogICAgfQoKICAgIGNvbnN0IHRlbXBPQXV0aENsaWVudCA9IG5ldyBPQXV0aENsaWVudCgKICAgICAgb2F1dGhDb25maWcsCiAgICAgIG9hdXRoU3RvcmFnZSwKICAgICAgbG9naW5IaW50CiAgICApOwogICAgY29uc3QgYXV0aFJlc3VsdCA9IGF3YWl0IHRlbXBPQXV0aENsaWVudC5hdXRob3JpemUoewogICAgICBsb2dpbkhpbnQsCiAgICB9KTsKCiAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QoYXV0aFJlc3VsdC5hdXRob3JpemF0aW9uVXJsLCAzMDIpOwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICBjb25zb2xlLmVycm9yKCJPQXV0aCBhdXRob3JpemUgZXJyb3I6IiwgZXJyb3IpOwoKICAgIHJldHVybiBSZXNwb25zZS5yZWRpcmVjdCgKICAgICAgbmV3IFVSTCgKICAgICAgICAiL2xvZ2luP2Vycm9yPSIgKwogICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KCJQbGVhc2UgY2hlY2sgeW91ciBoYW5kbGUgYW5kIHRyeSBhZ2Fpbi4iKSwKICAgICAgICByZXEudXJsCiAgICAgICksCiAgICAgIDMwMgogICAgKTsKICB9Cn0KCmFzeW5jIGZ1bmN0aW9uIGhhbmRsZU9BdXRoQ2FsbGJhY2socmVxOiBSZXF1ZXN0KTogUHJvbWlzZTxSZXNwb25zZT4gewogIHRyeSB7CiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpOwogICAgY29uc3QgY29kZSA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCJjb2RlIik7CiAgICBjb25zdCBzdGF0ZSA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpOwoKICAgIGlmICghY29kZSB8fCAhc3RhdGUpIHsKICAgICAgcmV0dXJuIFJlc3BvbnNlLnJlZGlyZWN0KAogICAgICAgIG5ldyBVUkwoCiAgICAgICAgICAiL2xvZ2luP2Vycm9yPSIgKyBlbmNvZGVVUklDb21wb25lbnQoIkludmFsaWQgT0F1dGggY2FsbGJhY2siKSwKICAgICAgICAgIHJlcS51cmwKICAgICAgICApLAogICAgICAgIDMwMgogICAgICApOwogICAgfQoKICAgIGNvbnN0IHRlbXBPQXV0aENsaWVudCA9IG5ldyBPQXV0aENsaWVudChvYXV0aENvbmZpZywgb2F1dGhTdG9yYWdlLCAidGVtcCIpOwogICAgY29uc3QgdG9rZW5zID0gYXdhaXQgdGVtcE9BdXRoQ2xpZW50LmhhbmRsZUNhbGxiYWNrKHsgY29kZSwgc3RhdGUgfSk7CiAgICBjb25zdCBzZXNzaW9uSWQgPSBhd2FpdCBvYXV0aFNlc3Npb25zLmNyZWF0ZU9BdXRoU2Vzc2lvbih0b2tlbnMpOwoKICAgIGlmICghc2Vzc2lvbklkKSB7CiAgICAgIHJldHVybiBSZXNwb25zZS5yZWRpcmVjdCgKICAgICAgICBuZXcgVVJMKAogICAgICAgICAgIi9sb2dpbj9lcnJvcj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCJGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24iKSwKICAgICAgICAgIHJlcS51cmwKICAgICAgICApLAogICAgICAgIDMwMgogICAgICApOwogICAgfQoKICAgIGNvbnN0IHNlc3Npb25Db29raWUgPSBzZXNzaW9uU3RvcmUuY3JlYXRlU2Vzc2lvbkNvb2tpZShzZXNzaW9uSWQpOwoKICAgIGxldCB1c2VySW5mbzsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHNlc3Npb25PQXV0aENsaWVudCA9IGNyZWF0ZU9BdXRoQ2xpZW50KHNlc3Npb25JZCk7CiAgICAgIHVzZXJJbmZvID0gYXdhaXQgc2Vzc2lvbk9BdXRoQ2xpZW50LmdldFVzZXJJbmZvKCk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZ2V0IHVzZXIgaW5mbzoiLCBlcnJvcik7CiAgICB9CgogICAgaWYgKHVzZXJJbmZvPy5zdWIpIHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB1c2VyQ2xpZW50ID0gY3JlYXRlU2Vzc2lvbkNsaWVudChzZXNzaW9uSWQpOwogICAgICAgIGF3YWl0IHVzZXJDbGllbnQuc3luY1VzZXJDb2xsZWN0aW9ucygpOwogICAgICAgIGNvbnNvbGUubG9nKCJTeW5jZWQgQmx1ZXNreSBwcm9maWxlIGZvciIsIHVzZXJJbmZvLnN1Yik7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3Igc3luY2luZyBCbHVlc2t5IHByb2ZpbGU6IiwgZXJyb3IpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7CiAgICAgIHN0YXR1czogMzAyLAogICAgICBoZWFkZXJzOiB7CiAgICAgICAgTG9jYXRpb246IG5ldyBVUkwoIi9kYXNoYm9hcmQiLCByZXEudXJsKS50b1N0cmluZygpLAogICAgICAgICJTZXQtQ29va2llIjogc2Vzc2lvbkNvb2tpZSwKICAgICAgfSwKICAgIH0pOwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICBjb25zb2xlLmVycm9yKCJPQXV0aCBjYWxsYmFjayBlcnJvcjoiLCBlcnJvcik7CiAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QoCiAgICAgIG5ldyBVUkwoCiAgICAgICAgIi9sb2dpbj9lcnJvcj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCJBdXRoZW50aWNhdGlvbiBmYWlsZWQiKSwKICAgICAgICByZXEudXJsCiAgICAgICksCiAgICAgIDMwMgogICAgKTsKICB9Cn0KCmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUxvZ291dChyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7CiAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHNlc3Npb25TdG9yZS5nZXRTZXNzaW9uRnJvbVJlcXVlc3QocmVxKTsKCiAgaWYgKHNlc3Npb24pIHsKICAgIGF3YWl0IG9hdXRoU2Vzc2lvbnMubG9nb3V0KHNlc3Npb24uc2Vzc2lvbklkKTsKICB9CgogIGNvbnN0IGNsZWFyQ29va2llID0gc2Vzc2lvblN0b3JlLmNyZWF0ZUxvZ291dENvb2tpZSgpOwoKICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsKICAgIHN0YXR1czogMzAyLAogICAgaGVhZGVyczogewogICAgICBMb2NhdGlvbjogbmV3IFVSTCgiL2xvZ2luIiwgcmVxLnVybCkudG9TdHJpbmcoKSwKICAgICAgIlNldC1Db29raWUiOiBjbGVhckNvb2tpZSwKICAgIH0sCiAgfSk7Cn0KCmV4cG9ydCBjb25zdCBhdXRoUm91dGVzOiBSb3V0ZVtdID0gWwogIHsKICAgIG1ldGhvZDogIkdFVCIsCiAgICBwYXR0ZXJuOiBuZXcgVVJMUGF0dGVybih7IHBhdGhuYW1lOiAiL2xvZ2luIiB9KSwKICAgIGhhbmRsZXI6IGhhbmRsZUxvZ2luUGFnZSwKICB9LAogIHsKICAgIG1ldGhvZDogIlBPU1QiLAogICAgcGF0dGVybjogbmV3IFVSTFBhdHRlcm4oeyBwYXRobmFtZTogIi9vYXV0aC9hdXRob3JpemUiIH0pLAogICAgaGFuZGxlcjogaGFuZGxlT0F1dGhBdXRob3JpemUsCiAgfSwKICB7CiAgICBtZXRob2Q6ICJHRVQiLAogICAgcGF0dGVybjogbmV3IFVSTFBhdHRlcm4oeyBwYXRobmFtZTogIi9vYXV0aC9jYWxsYmFjayIgfSksCiAgICBoYW5kbGVyOiBoYW5kbGVPQXV0aENhbGxiYWNrLAogIH0sCiAgewogICAgbWV0aG9kOiAiUE9TVCIsCiAgICBwYXR0ZXJuOiBuZXcgVVJMUGF0dGVybih7IHBhdGhuYW1lOiAiL2xvZ291dCIgfSksCiAgICBoYW5kbGVyOiBoYW5kbGVMb2dvdXQsCiAgfSwKXTsK"
41
50
},
42
51
{
52
52
+
"template": "deno-ssr",
43
53
"path": "src/features/dashboard/templates/DashboardPage.tsx",
44
54
"content": "aW1wb3J0IHsgTGF5b3V0IH0gZnJvbSAiLi4vLi4vLi4vc2hhcmVkL2ZyYWdtZW50cy9MYXlvdXQudHN4IjsKaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAiLi4vLi4vLi4vc2hhcmVkL2ZyYWdtZW50cy9CdXR0b24udHN4IjsKaW1wb3J0IHR5cGUgeyBBcHBCc2t5QWN0b3JQcm9maWxlIH0gZnJvbSAiLi4vLi4vLi4vZ2VuZXJhdGVkX2NsaWVudC50cyI7CgppbnRlcmZhY2UgRGFzaGJvYXJkUGFnZVByb3BzIHsKICBjdXJyZW50VXNlcjogewogICAgbmFtZT86IHN0cmluZzsKICAgIHN1Yjogc3RyaW5nOwogIH07CiAgcHJvZmlsZT86IEFwcEJza3lBY3RvclByb2ZpbGU7CiAgYXZhdGFyVXJsPzogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gRGFzaGJvYXJkUGFnZSh7CiAgY3VycmVudFVzZXIsCiAgcHJvZmlsZSwKICBhdmF0YXJVcmwsCn06IERhc2hib2FyZFBhZ2VQcm9wcykgewogIHJldHVybiAoCiAgICA8TGF5b3V0IHRpdGxlPSJEYXNoYm9hcmQiPgogICAgICA8ZGl2IGNsYXNzTmFtZT0ibWluLWgtc2NyZWVuIGJnLWdyYXktNTAgcC04Ij4KICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ibWF4LXctMnhsIG14LWF1dG8iPgogICAgICAgICAgPGRpdiBjbGFzc05hbWU9ImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93IHAtNiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNiI+CiAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT0idGV4dC0yeGwgZm9udC1ib2xkIj5EYXNoYm9hcmQ8L2gxPgogICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIvbG9nb3V0Ij4KICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT0ic3VibWl0IiB2YXJpYW50PSJzZWNvbmRhcnkiPgogICAgICAgICAgICAgICAgICBMb2dvdXQKICAgICAgICAgICAgICAgIDwvQnV0dG9uPgogICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ibWItNiI+CiAgICAgICAgICAgICAge2F2YXRhclVybCAmJiAoCiAgICAgICAgICAgICAgICA8aW1nCiAgICAgICAgICAgICAgICAgIHNyYz17YXZhdGFyVXJsfQogICAgICAgICAgICAgICAgICBhbHQ9IlByb2ZpbGUiCiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0idy0yMCBoLTIwIHJvdW5kZWQtZnVsbCBtYi00IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICApfQogICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9InRleHQteGwgZm9udC1zZW1pYm9sZCBtYi0yIj4KICAgICAgICAgICAgICAgIHtwcm9maWxlPy5kaXNwbGF5TmFtZSB8fCBjdXJyZW50VXNlci5uYW1lIHx8IGN1cnJlbnRVc2VyLnN1Yn0KICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgIHtjdXJyZW50VXNlci5uYW1lICYmICgKICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1ncmF5LTYwMCBtYi0yIj5Ae2N1cnJlbnRVc2VyLm5hbWV9PC9wPgogICAgICAgICAgICAgICl9CiAgICAgICAgICAgICAge3Byb2ZpbGU/LmRlc2NyaXB0aW9uICYmICgKICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0idGV4dC1ncmF5LTcwMCBtdC0yIj57cHJvZmlsZS5kZXNjcmlwdGlvbn08L3A+CiAgICAgICAgICAgICAgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L0xheW91dD4KICApOwp9Cg=="
45
55
},
46
56
{
57
57
+
"template": "deno-ssr",
47
58
"path": "src/features/dashboard/handlers.tsx",
48
59
"content": "aW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gIkBzdGQvaHR0cC91bnN0YWJsZS1yb3V0ZSI7CmltcG9ydCB7IHdpdGhBdXRoIH0gZnJvbSAiLi4vLi4vcm91dGVzL21pZGRsZXdhcmUudHMiOwppbXBvcnQgeyByZW5kZXJIVE1MIH0gZnJvbSAiLi4vLi4vdXRpbHMvcmVuZGVyLnRzeCI7CmltcG9ydCB7IERhc2hib2FyZFBhZ2UgfSBmcm9tICIuL3RlbXBsYXRlcy9EYXNoYm9hcmRQYWdlLnRzeCI7CmltcG9ydCB7IHB1YmxpY0NsaWVudCB9IGZyb20gIi4uLy4uL2NvbmZpZy50cyI7CmltcG9ydCB7IHJlY29yZEJsb2JUb0NkblVybCB9IGZyb20gIkBzbGljZXMvY2xpZW50IjsKaW1wb3J0IHsgQXBwQnNreUFjdG9yUHJvZmlsZSB9IGZyb20gIi4uLy4uL2dlbmVyYXRlZF9jbGllbnQudHMiOwoKYXN5bmMgZnVuY3Rpb24gaGFuZGxlRGFzaGJvYXJkKHJlcTogUmVxdWVzdCk6IFByb21pc2U8UmVzcG9uc2U+IHsKICBjb25zdCBjb250ZXh0ID0gYXdhaXQgd2l0aEF1dGgocmVxKTsKCiAgaWYgKCFjb250ZXh0LmN1cnJlbnRVc2VyKSB7CiAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QobmV3IFVSTCgiL2xvZ2luIiwgcmVxLnVybCksIDMwMik7CiAgfQoKICBsZXQgcHJvZmlsZTogQXBwQnNreUFjdG9yUHJvZmlsZSB8IHVuZGVmaW5lZDsKICBsZXQgYXZhdGFyVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgdHJ5IHsKICAgIGNvbnN0IHByb2ZpbGVSZXN1bHQgPSBhd2FpdCBwdWJsaWNDbGllbnQuYXBwLmJza3kuYWN0b3IucHJvZmlsZS5nZXRSZWNvcmQoewogICAgICB1cmk6IGBhdDovLyR7Y29udGV4dC5jdXJyZW50VXNlci5zdWJ9L2FwcC5ic2t5LmFjdG9yLnByb2ZpbGUvc2VsZmAsCiAgICB9KTsKCiAgICBpZiAocHJvZmlsZVJlc3VsdCkgewogICAgICBwcm9maWxlID0gcHJvZmlsZVJlc3VsdC52YWx1ZTsKCiAgICAgIGlmIChwcm9maWxlLmF2YXRhcikgewogICAgICAgIGF2YXRhclVybCA9IHJlY29yZEJsb2JUb0NkblVybChwcm9maWxlUmVzdWx0LCBwcm9maWxlLmF2YXRhciwgImF2YXRhciIpOwogICAgICB9CiAgICB9CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGZldGNoaW5nIHByb2ZpbGU6IiwgZXJyb3IpOwogIH0KCiAgcmV0dXJuIHJlbmRlckhUTUwoCiAgICA8RGFzaGJvYXJkUGFnZQogICAgICBjdXJyZW50VXNlcj17Y29udGV4dC5jdXJyZW50VXNlcn0KICAgICAgcHJvZmlsZT17cHJvZmlsZX0KICAgICAgYXZhdGFyVXJsPXthdmF0YXJVcmx9CiAgICAvPgogICk7Cn0KCmV4cG9ydCBjb25zdCBkYXNoYm9hcmRSb3V0ZXM6IFJvdXRlW10gPSBbCiAgewogICAgbWV0aG9kOiAiR0VUIiwKICAgIHBhdHRlcm46IG5ldyBVUkxQYXR0ZXJuKHsgcGF0aG5hbWU6ICIvZGFzaGJvYXJkIiB9KSwKICAgIGhhbmRsZXI6IGhhbmRsZURhc2hib2FyZCwKICB9LApdOwo="
49
60
},
50
61
{
62
62
+
"template": "deno-ssr",
51
63
"path": "src/utils/cn.ts",
52
64
"content": "aW1wb3J0IHsgdHlwZSBDbGFzc1ZhbHVlLCBjbHN4IH0gZnJvbSAiY2xzeCI7CmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICJ0YWlsd2luZC1tZXJnZSI7CgpleHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pOiBzdHJpbmcgewogIHJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSk7Cn0="
53
65
},
54
66
{
67
67
+
"template": "deno-ssr",
55
68
"path": "src/utils/logging.ts",
56
69
"content": "aW1wb3J0IHsgY3lhbiwgZ3JlZW4sIHJlZCwgeWVsbG93LCBib2xkLCBkaW0gfSBmcm9tICJAc3RkL2ZtdC9jb2xvcnMiOwoKZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvZ2dpbmdIYW5kbGVyKAogIGhhbmRsZXI6IChyZXE6IFJlcXVlc3QpID0+IFJlc3BvbnNlIHwgUHJvbWlzZTxSZXNwb25zZT4KKSB7CiAgcmV0dXJuIGFzeW5jIChyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7CiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7CiAgICBjb25zdCBtZXRob2QgPSByZXEubWV0aG9kOwogICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTsKCiAgICB0cnkgewogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShoYW5kbGVyKHJlcSkpOwogICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydDsKCiAgICAgIGNvbnN0IG1ldGhvZENvbG9yID0gY3lhbihib2xkKG1ldGhvZCkpOwogICAgICBjb25zdCBzdGF0dXNDb2xvciA9CiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDAKICAgICAgICAgID8gZ3JlZW4oU3RyaW5nKHJlc3BvbnNlLnN0YXR1cykpCiAgICAgICAgICA6IHJlc3BvbnNlLnN0YXR1cyA+PSAzMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgNDAwCiAgICAgICAgICA/IHllbGxvdyhTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKSkKICAgICAgICAgIDogcmVzcG9uc2Uuc3RhdHVzID49IDQwMAogICAgICAgICAgPyByZWQoU3RyaW5nKHJlc3BvbnNlLnN0YXR1cykpCiAgICAgICAgICA6IFN0cmluZyhyZXNwb25zZS5zdGF0dXMpOwogICAgICBjb25zdCBkdXJhdGlvblRleHQgPSBkaW0oYCgke2R1cmF0aW9ufW1zKWApOwoKICAgICAgY29uc29sZS5sb2coCiAgICAgICAgYCR7bWV0aG9kQ29sb3J9ICR7dXJsLnBhdGhuYW1lfSAtICR7c3RhdHVzQ29sb3J9ICR7ZHVyYXRpb25UZXh0fWAKICAgICAgKTsKICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7CiAgICAgIGNvbnN0IG1ldGhvZENvbG9yID0gY3lhbihib2xkKG1ldGhvZCkpOwogICAgICBjb25zdCBlcnJvclRleHQgPSByZWQoYm9sZCgiRVJST1IiKSk7CiAgICAgIGNvbnN0IGR1cmF0aW9uVGV4dCA9IGRpbShgKCR7ZHVyYXRpb259bXMpYCk7CgogICAgICBjb25zb2xlLmVycm9yKAogICAgICAgIGAke21ldGhvZENvbG9yfSAke3VybC5wYXRobmFtZX0gLSAke2Vycm9yVGV4dH0gJHtkdXJhdGlvblRleHR9OmAsCiAgICAgICAgZXJyb3IKICAgICAgKTsKICAgICAgdGhyb3cgZXJyb3I7CiAgICB9CiAgfTsKfQo="
57
70
},
58
71
{
72
72
+
"template": "deno-ssr",
59
73
"path": "src/utils/render.tsx",
60
74
"content": "aW1wb3J0IHsgcmVuZGVyVG9TdHJpbmcgfSBmcm9tICJwcmVhY3QtcmVuZGVyLXRvLXN0cmluZyI7CmltcG9ydCB7IFZOb2RlIH0gZnJvbSAicHJlYWN0IjsKCmV4cG9ydCBmdW5jdGlvbiByZW5kZXJIVE1MKGVsZW1lbnQ6IFZOb2RlKTogUmVzcG9uc2UgewogIGNvbnN0IGh0bWwgPSByZW5kZXJUb1N0cmluZyhlbGVtZW50KTsKCiAgcmV0dXJuIG5ldyBSZXNwb25zZShodG1sLCB7CiAgICBoZWFkZXJzOiB7CiAgICAgICJDb250ZW50LVR5cGUiOiAidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiwKICAgIH0sCiAgfSk7Cn0="
61
75
},
62
76
{
77
77
+
"template": "deno-ssr",
63
78
"path": "src/shared/fragments/Layout.tsx",
64
79
"content": "aW1wb3J0IHsgQ29tcG9uZW50Q2hpbGRyZW4gfSBmcm9tICJwcmVhY3QiOwoKaW50ZXJmYWNlIExheW91dFByb3BzIHsKICB0aXRsZT86IHN0cmluZzsKICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47Cn0KCmV4cG9ydCBmdW5jdGlvbiBMYXlvdXQoeyB0aXRsZSA9ICJBcHAiLCBjaGlsZHJlbiB9OiBMYXlvdXRQcm9wcykgewogIHJldHVybiAoCiAgICA8aHRtbCBsYW5nPSJlbiI+CiAgICAgIDxoZWFkPgogICAgICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogICAgICAgIDx0aXRsZT57dGl0bGV9PC90aXRsZT4KICAgICAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4udGFpbHdpbmRjc3MuY29tIj48L3NjcmlwdD4KICAgICAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly91bnBrZy5jb20vaHRteC5vcmdAMS45LjEwIj48L3NjcmlwdD4KICAgICAgPC9oZWFkPgogICAgICA8Ym9keT4KICAgICAgICB7Y2hpbGRyZW59CiAgICAgIDwvYm9keT4KICAgIDwvaHRtbD4KICApOwp9"
65
80
},
66
81
{
82
82
+
"template": "deno-ssr",
67
83
"path": "src/shared/fragments/Button.tsx",
68
84
"content": "aW1wb3J0IHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gInByZWFjdCI7CmltcG9ydCB7IGNuIH0gZnJvbSAiLi4vLi4vdXRpbHMvY24udHMiOwoKaW50ZXJmYWNlIEJ1dHRvblByb3BzIGV4dGVuZHMgT21pdDxKU1guSW50cmluc2ljRWxlbWVudHNbJ2J1dHRvbiddLCAic2l6ZSI+IHsKICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47CiAgdmFyaWFudD86ICJwcmltYXJ5IiB8ICJzZWNvbmRhcnkiIHwgImRhbmdlciI7CiAgc2l6ZT86ICJzbSIgfCAibWQiIHwgImxnIjsKfQoKZXhwb3J0IGZ1bmN0aW9uIEJ1dHRvbih7CiAgY2hpbGRyZW4sCiAgdHlwZSA9ICJidXR0b24iLAogIHZhcmlhbnQgPSAicHJpbWFyeSIsCiAgc2l6ZSA9ICJtZCIsCiAgY2xhc3NOYW1lLAogIGRpc2FibGVkLAogIC4uLnByb3BzCn06IEJ1dHRvblByb3BzKSB7CiAgY29uc3QgYmFzZUNsYXNzZXMgPQogICAgImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmb250LW1lZGl1bSByb3VuZGVkLW1kIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCI7CgogIGNvbnN0IHZhcmlhbnRDbGFzc2VzID0gewogICAgcHJpbWFyeTogImJnLWJsdWUtNjAwIGhvdmVyOmJnLWJsdWUtNzAwIHRleHQtd2hpdGUgZm9jdXM6cmluZy1ibHVlLTUwMCIsCiAgICBzZWNvbmRhcnk6CiAgICAgICJiZy1ncmF5LTIwMCBob3ZlcjpiZy1ncmF5LTMwMCB0ZXh0LWdyYXktOTAwIGZvY3VzOnJpbmctZ3JheS01MDAiLAogICAgZGFuZ2VyOiAiYmctcmVkLTYwMCBob3ZlcjpiZy1yZWQtNzAwIHRleHQtd2hpdGUgZm9jdXM6cmluZy1yZWQtNTAwIiwKICB9OwoKICBjb25zdCBzaXplQ2xhc3NlcyA9IHsKICAgIHNtOiAicHgtMyBweS0xLjUgdGV4dC1zbSIsCiAgICBtZDogInB4LTQgcHktMiB0ZXh0LXNtIiwKICAgIGxnOiAicHgtNiBweS0zIHRleHQtYmFzZSIsCiAgfTsKCiAgcmV0dXJuICgKICAgIDxidXR0b24KICAgICAgdHlwZT17dHlwZX0KICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfQogICAgICBjbGFzc05hbWU9e2NuKAogICAgICAgIGJhc2VDbGFzc2VzLAogICAgICAgIHZhcmlhbnRDbGFzc2VzW3ZhcmlhbnRdLAogICAgICAgIHNpemVDbGFzc2VzW3NpemVdLAogICAgICAgIGNsYXNzTmFtZQogICAgICApfQogICAgICB7Li4ucHJvcHN9CiAgICA+CiAgICAgIHtjaGlsZHJlbn0KICAgIDwvYnV0dG9uPgogICk7Cn0K"
69
85
},
70
86
{
87
87
+
"template": "deno-ssr",
71
88
"path": "src/shared/fragments/Input.tsx",
72
89
"content": "aW1wb3J0IHsgSlNYIH0gZnJvbSAicHJlYWN0IjsKaW1wb3J0IHsgY24gfSBmcm9tICIuLi8uLi91dGlscy9jbi50cyI7Cgp0eXBlIElucHV0UHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ2lucHV0J107CgpleHBvcnQgZnVuY3Rpb24gSW5wdXQoewogIHR5cGUgPSAidGV4dCIsCiAgY2xhc3NOYW1lLAogIC4uLnByb3BzCn06IElucHV0UHJvcHMpIHsKICByZXR1cm4gKAogICAgPGlucHV0CiAgICAgIHR5cGU9e3R5cGV9CiAgICAgIGNsYXNzTmFtZT17Y24oCiAgICAgICAgImJsb2NrIHctZnVsbCBweC0zIHB5LTIgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLW1kIHNoYWRvdy1zbSIsCiAgICAgICAgImZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLWJsdWUtNTAwIGZvY3VzOmJvcmRlci1ibHVlLTUwMCIsCiAgICAgICAgImRpc2FibGVkOmJnLWdyYXktNTAgZGlzYWJsZWQ6dGV4dC1ncmF5LTUwMCIsCiAgICAgICAgY2xhc3NOYW1lCiAgICAgICl9CiAgICAgIHsuLi5wcm9wc30KICAgIC8+CiAgKTsKfQ=="
73
90
},
74
91
{
92
92
+
"template": "deno-ssr",
75
93
"path": "src/config.ts",
76
94
"content": "aW1wb3J0IHsgT0F1dGhDbGllbnQsIFNRTGl0ZU9BdXRoU3RvcmFnZSB9IGZyb20gIkBzbGljZXMvb2F1dGgiOwppbXBvcnQgeyBTZXNzaW9uU3RvcmUsIFNRTGl0ZUFkYXB0ZXIsIHdpdGhPQXV0aFNlc3Npb24gfSBmcm9tICJAc2xpY2VzL3Nlc3Npb24iOwppbXBvcnQgeyBBdFByb3RvQ2xpZW50IH0gZnJvbSAiLi9nZW5lcmF0ZWRfY2xpZW50LnRzIjsKCmNvbnN0IE9BVVRIX0NMSUVOVF9JRCA9IERlbm8uZW52LmdldCgiT0FVVEhfQ0xJRU5UX0lEIik7CmNvbnN0IE9BVVRIX0NMSUVOVF9TRUNSRVQgPSBEZW5vLmVudi5nZXQoIk9BVVRIX0NMSUVOVF9TRUNSRVQiKTsKY29uc3QgT0FVVEhfUkVESVJFQ1RfVVJJID0gRGVuby5lbnYuZ2V0KCJPQVVUSF9SRURJUkVDVF9VUkkiKTsKY29uc3QgT0FVVEhfQUlQX0JBU0VfVVJMID0gRGVuby5lbnYuZ2V0KCJPQVVUSF9BSVBfQkFTRV9VUkwiKTsKY29uc3QgQVBJX1VSTCA9IERlbm8uZW52LmdldCgiQVBJX1VSTCIpOwpleHBvcnQgY29uc3QgU0xJQ0VfVVJJID0gRGVuby5lbnYuZ2V0KCJTTElDRV9VUkkiKTsKCmlmICgKICAhT0FVVEhfQ0xJRU5UX0lEIHx8CiAgIU9BVVRIX0NMSUVOVF9TRUNSRVQgfHwKICAhT0FVVEhfUkVESVJFQ1RfVVJJIHx8CiAgIU9BVVRIX0FJUF9CQVNFX1VSTCB8fAogICFBUElfVVJMIHx8CiAgIVNMSUNFX1VSSQopIHsKICB0aHJvdyBuZXcgRXJyb3IoCiAgICAiTWlzc2luZyBPQXV0aCBjb25maWd1cmF0aW9uLiBQbGVhc2UgZW5zdXJlIC5lbnYgZmlsZSBjb250YWluczpcbiIgKwogICAgICAiT0FVVEhfQ0xJRU5UX0lELCBPQVVUSF9DTElFTlRfU0VDUkVULCBPQVVUSF9SRURJUkVDVF9VUkksIE9BVVRIX0FJUF9CQVNFX1VSTCwgQVBJX1VSTCwgU0xJQ0VfVVJJIgogICk7Cn0KCmNvbnN0IERBVEFCQVNFX1VSTCA9IERlbm8uZW52LmdldCgiREFUQUJBU0VfVVJMIikgfHwgInNsaWNlcy5kYiI7CgovLyBPQXV0aCBzZXR1cApjb25zdCBvYXV0aFN0b3JhZ2UgPSBuZXcgU1FMaXRlT0F1dGhTdG9yYWdlKERBVEFCQVNFX1VSTCk7CmNvbnN0IG9hdXRoQ29uZmlnID0gewogIGNsaWVudElkOiBPQVVUSF9DTElFTlRfSUQsCiAgY2xpZW50U2VjcmV0OiBPQVVUSF9DTElFTlRfU0VDUkVULAogIGF1dGhCYXNlVXJsOiBPQVVUSF9BSVBfQkFTRV9VUkwsCiAgcmVkaXJlY3RVcmk6IE9BVVRIX1JFRElSRUNUX1VSSSwKICBzY29wZXM6IFsiYXRwcm90byIsICJvcGVuaWQiLCAicHJvZmlsZSIsICJ0cmFuc2l0aW9uOmdlbmVyaWMiXSwKfTsKCi8vIEV4cG9ydCBjb25maWcgYW5kIHN0b3JhZ2UgZm9yIGNyZWF0aW5nIHVzZXItc2NvcGVkIGNsaWVudHMKZXhwb3J0IHsgb2F1dGhDb25maWcsIG9hdXRoU3RvcmFnZSB9OwoKLy8gU2Vzc2lvbiBzZXR1cCAoc2hhcmVkIGRhdGFiYXNlKQpleHBvcnQgY29uc3Qgc2Vzc2lvblN0b3JlID0gbmV3IFNlc3Npb25TdG9yZSh7CiAgYWRhcHRlcjogbmV3IFNRTGl0ZUFkYXB0ZXIoREFUQUJBU0VfVVJMKSwKICBjb29raWVOYW1lOiAie3tQUk9KRUNUX05BTUV9fS1zZXNzaW9uIiwKICBjb29raWVPcHRpb25zOiB7CiAgICBodHRwT25seTogdHJ1ZSwKICAgIHNlY3VyZTogRGVuby5lbnYuZ2V0KCJERU5PX0VOViIpID09PSAicHJvZHVjdGlvbiIsCiAgICBzYW1lU2l0ZTogImxheCIsCiAgICBwYXRoOiAiLyIsCiAgfSwKfSk7CgovLyBPQXV0aCArIFNlc3Npb24gaW50ZWdyYXRpb24KZXhwb3J0IGNvbnN0IG9hdXRoU2Vzc2lvbnMgPSB3aXRoT0F1dGhTZXNzaW9uKAogIHNlc3Npb25TdG9yZSwKICBvYXV0aENvbmZpZywKICBvYXV0aFN0b3JhZ2UsCiAgewogICAgYXV0b1JlZnJlc2g6IHRydWUsCiAgfQopOwoKLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSB1c2VyLXNjb3BlZCBPQXV0aCBjbGllbnQKZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9BdXRoQ2xpZW50KHNlc3Npb25JZDogc3RyaW5nKTogT0F1dGhDbGllbnQgewogIHJldHVybiBuZXcgT0F1dGhDbGllbnQob2F1dGhDb25maWcsIG9hdXRoU3RvcmFnZSwgc2Vzc2lvbklkKTsKfQoKLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhdXRoZW50aWNhdGVkIEF0UHJvdG8gY2xpZW50IGZvciBhIHVzZXIKZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25DbGllbnQoc2Vzc2lvbklkOiBzdHJpbmcpOiBBdFByb3RvQ2xpZW50IHsKICBjb25zdCB1c2VyT0F1dGhDbGllbnQgPSBjcmVhdGVPQXV0aENsaWVudChzZXNzaW9uSWQpOwogIHJldHVybiBuZXcgQXRQcm90b0NsaWVudChBUElfVVJMISwgU0xJQ0VfVVJJISwgdXNlck9BdXRoQ2xpZW50KTsKfQoKLy8gUHVibGljIGNsaWVudCBmb3IgdW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzCmV4cG9ydCBjb25zdCBwdWJsaWNDbGllbnQgPSBuZXcgQXRQcm90b0NsaWVudChBUElfVVJMLCBTTElDRV9VUkkpOwo="
77
95
},
78
96
{
97
97
+
"template": "deno-ssr",
79
98
"path": "src/routes/middleware.ts",
80
99
"content": "aW1wb3J0IHsgc2Vzc2lvblN0b3JlLCBjcmVhdGVPQXV0aENsaWVudCB9IGZyb20gIi4uL2NvbmZpZy50cyI7CgpleHBvcnQgaW50ZXJmYWNlIEF1dGhDb250ZXh0IHsKICBjdXJyZW50VXNlcjogewogICAgc3ViOiBzdHJpbmc7CiAgICBuYW1lPzogc3RyaW5nOwogICAgZW1haWw/OiBzdHJpbmc7CiAgfSB8IG51bGw7CiAgc2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsOwp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aEF1dGgocmVxOiBSZXF1ZXN0KTogUHJvbWlzZTxBdXRoQ29udGV4dD4gewogIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBzZXNzaW9uU3RvcmUuZ2V0U2Vzc2lvbkZyb21SZXF1ZXN0KHJlcSk7CgogIGlmICghc2Vzc2lvbikgewogICAgcmV0dXJuIHsgY3VycmVudFVzZXI6IG51bGwsIHNlc3Npb25JZDogbnVsbCB9OwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IHNlc3Npb25PQXV0aENsaWVudCA9IGNyZWF0ZU9BdXRoQ2xpZW50KHNlc3Npb24uc2Vzc2lvbklkKTsKICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgc2Vzc2lvbk9BdXRoQ2xpZW50LmdldFVzZXJJbmZvKCk7CiAgICByZXR1cm4gewogICAgICBjdXJyZW50VXNlcjogdXNlckluZm8gfHwgbnVsbCwKICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uLnNlc3Npb25JZCwKICAgIH07CiAgfSBjYXRjaCB7CiAgICByZXR1cm4geyBjdXJyZW50VXNlcjogbnVsbCwgc2Vzc2lvbklkOiBzZXNzaW9uLnNlc3Npb25JZCB9OwogIH0KfQoKZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBdXRoKAogIGhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIGNvbnRleHQ6IEF1dGhDb250ZXh0KSA9PiBQcm9taXNlPFJlc3BvbnNlPgopIHsKICByZXR1cm4gYXN5bmMgKHJlcTogUmVxdWVzdCk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHsKICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB3aXRoQXV0aChyZXEpOwoKICAgIGlmICghY29udGV4dC5jdXJyZW50VXNlcikgewogICAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QobmV3IFVSTCgiL2xvZ2luIiwgcmVxLnVybCksIDMwMik7CiAgICB9CgogICAgcmV0dXJuIGhhbmRsZXIocmVxLCBjb250ZXh0KTsKICB9Owp9Cg=="
81
100
},
82
101
{
102
102
+
"template": "deno-ssr",
83
103
"path": "src/routes/mod.ts",
84
104
"content": "aW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gIkBzdGQvaHR0cC91bnN0YWJsZS1yb3V0ZSI7CmltcG9ydCB7IGF1dGhSb3V0ZXMgfSBmcm9tICIuLi9mZWF0dXJlcy9hdXRoL2hhbmRsZXJzLnRzeCI7CmltcG9ydCB7IGRhc2hib2FyZFJvdXRlcyB9IGZyb20gIi4uL2ZlYXR1cmVzL2Rhc2hib2FyZC9oYW5kbGVycy50c3giOwoKZXhwb3J0IGNvbnN0IGFsbFJvdXRlczogUm91dGVbXSA9IFsKICAvLyBSb290IHJlZGlyZWN0IHRvIGxvZ2luIGZvciBub3cKICB7CiAgICBtZXRob2Q6ICJHRVQiLAogICAgcGF0dGVybjogbmV3IFVSTFBhdHRlcm4oeyBwYXRobmFtZTogIi8iIH0pLAogICAgaGFuZGxlcjogKHJlcSkgPT4gUmVzcG9uc2UucmVkaXJlY3QobmV3IFVSTCgiL2xvZ2luIiwgcmVxLnVybCksIDMwMiksCiAgfSwKCiAgLy8gQXV0aCByb3V0ZXMKICAuLi5hdXRoUm91dGVzLAoKICAvLyBEYXNoYm9hcmQgcm91dGVzCiAgLi4uZGFzaGJvYXJkUm91dGVzLApdOw=="
85
105
}
86
106
];
87
107
88
88
-
export function getTemplateContent(path: string): Uint8Array | undefined {
89
89
-
const template = EMBEDDED_TEMPLATES.find(t => t.path === path);
108
108
+
export const AVAILABLE_TEMPLATES = ["deno-ssr"];
109
109
+
110
110
+
export function getTemplateContent(templateName: string, path: string): Uint8Array | undefined {
111
111
+
const template = EMBEDDED_TEMPLATES.find(t => t.template === templateName && t.path === path);
90
112
if (!template) return undefined;
91
113
92
114
const binaryString = atob(template.content);
···
109
131
}
110
132
return result;
111
133
}
134
134
+
135
135
+
export function getTemplatesForName(templateName: string): Map<string, Uint8Array> {
136
136
+
const result = new Map<string, Uint8Array>();
137
137
+
for (const template of EMBEDDED_TEMPLATES) {
138
138
+
if (template.template !== templateName) continue;
139
139
+
140
140
+
const binaryString = atob(template.content);
141
141
+
const bytes = new Uint8Array(binaryString.length);
142
142
+
for (let i = 0; i < binaryString.length; i++) {
143
143
+
bytes[i] = binaryString.charCodeAt(i);
144
144
+
}
145
145
+
result.set(template.path, bytes);
146
146
+
}
147
147
+
return result;
148
148
+
}