@leadertechie/personal-site-kit 0.0.0 → 0.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/__tests__/info.test.d.ts +2 -0
- package/dist/api/__tests__/info.test.d.ts.map +1 -0
- package/dist/api/__tests__/utils.test.d.ts +2 -0
- package/dist/api/__tests__/utils.test.d.ts.map +1 -0
- package/dist/api/content-utils.d.ts +27 -0
- package/dist/api/content-utils.d.ts.map +1 -0
- package/dist/api/handlers/{aboutme.d.ts → about-me.d.ts} +1 -1
- package/dist/api/handlers/about-me.d.ts.map +1 -0
- package/dist/api/handlers/auth-handler.d.ts +2 -0
- package/dist/api/handlers/auth-handler.d.ts.map +1 -0
- package/dist/api/handlers/auth.d.ts +23 -0
- package/dist/api/handlers/auth.d.ts.map +1 -0
- package/dist/api/handlers/content-api.d.ts +0 -1
- package/dist/api/handlers/content-api.d.ts.map +1 -1
- package/dist/api/handlers/content.d.ts.map +1 -1
- package/dist/api/handlers/home.d.ts.map +1 -1
- package/dist/api/handlers/{staticdetails.d.ts → static-details.d.ts} +1 -1
- package/dist/api/handlers/static-details.d.ts.map +1 -0
- package/dist/api/index.d.ts +7 -8
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/website-api.d.ts +10 -0
- package/dist/api/website-api.d.ts.map +1 -0
- package/dist/api.d.ts +2 -0
- package/dist/api.js +19 -589
- package/dist/assets/logo-placeholder.svg +21 -0
- package/dist/chunks/index-CGvOrVf8.js +213 -0
- package/dist/chunks/index-_AMi6ort.js +2690 -0
- package/dist/chunks/site-store-Vqmjjz9c.js +86 -0
- package/dist/chunks/template-C1tMqlPY.js +597 -0
- package/dist/chunks/website-api-CuyeBej-.js +920 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -352
- package/dist/prerender/__tests__/page-content.test.d.ts +2 -0
- package/dist/prerender/__tests__/page-content.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/template.test.d.ts +2 -0
- package/dist/prerender/__tests__/template.test.d.ts.map +1 -0
- package/dist/prerender/data-fetcher.d.ts +19 -0
- package/dist/prerender/data-fetcher.d.ts.map +1 -0
- package/dist/prerender/index.d.ts +5 -4
- package/dist/prerender/index.d.ts.map +1 -1
- package/dist/prerender/{pageContent.d.ts → page-content.d.ts} +1 -1
- package/dist/prerender/page-content.d.ts.map +1 -0
- package/dist/prerender/page-generators/about.d.ts +16 -0
- package/dist/prerender/page-generators/about.d.ts.map +1 -0
- package/dist/prerender/page-generators/base.d.ts +26 -0
- package/dist/prerender/page-generators/base.d.ts.map +1 -0
- package/dist/prerender/page-generators/blog-detail.d.ts +15 -0
- package/dist/prerender/page-generators/blog-detail.d.ts.map +1 -0
- package/dist/prerender/page-generators/blogs-list.d.ts +17 -0
- package/dist/prerender/page-generators/blogs-list.d.ts.map +1 -0
- package/dist/prerender/page-generators/home.d.ts +19 -0
- package/dist/prerender/page-generators/home.d.ts.map +1 -0
- package/dist/prerender/page-generators/index.d.ts +9 -0
- package/dist/prerender/page-generators/index.d.ts.map +1 -0
- package/dist/prerender/page-generators/not-found.d.ts +14 -0
- package/dist/prerender/page-generators/not-found.d.ts.map +1 -0
- package/dist/prerender/page-generators/stories-list.d.ts +17 -0
- package/dist/prerender/page-generators/stories-list.d.ts.map +1 -0
- package/dist/prerender/page-generators/story-detail.d.ts +15 -0
- package/dist/prerender/page-generators/story-detail.d.ts.map +1 -0
- package/dist/prerender/website-prerender.d.ts +22 -0
- package/dist/prerender/website-prerender.d.ts.map +1 -0
- package/dist/prerender.d.ts +2 -0
- package/dist/prerender.js +163 -151
- package/dist/shared/config/index.d.ts +1 -0
- package/dist/shared/config/index.d.ts.map +1 -1
- package/dist/shared/core/__tests__/theme-toggle.test.d.ts +2 -0
- package/dist/shared/core/__tests__/theme-toggle.test.d.ts.map +1 -0
- package/dist/shared/core/site-store.d.ts +1 -0
- package/dist/shared/core/site-store.d.ts.map +1 -1
- package/dist/shared/index.d.ts +5 -3
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/interfaces/{iFooterLink.d.ts → ifooter-link.d.ts} +1 -1
- package/dist/shared/interfaces/ifooter-link.d.ts.map +1 -0
- package/dist/shared/interfaces/{iRoute.d.ts → iroute.d.ts} +1 -1
- package/dist/shared/interfaces/iroute.d.ts.map +1 -0
- package/dist/shared/{pageContent.d.ts → page-content.d.ts} +4 -3
- package/dist/shared/page-content.d.ts.map +1 -0
- package/dist/shared/router.d.ts +23 -0
- package/dist/shared/router.d.ts.map +1 -0
- package/dist/shared/runtime.d.ts +6 -6
- package/dist/shared/runtime.d.ts.map +1 -1
- package/dist/shared/website-ui.d.ts +32 -0
- package/dist/shared/website-ui.d.ts.map +1 -0
- package/dist/shared.js +13 -8
- package/dist/ui/about-me/api.d.ts.map +1 -0
- package/dist/ui/{aboutme → about-me}/index.d.ts +2 -10
- package/dist/ui/about-me/index.d.ts.map +1 -0
- package/dist/ui/about-me/styles.d.ts.map +1 -0
- package/dist/ui/admin/api.d.ts +16 -0
- package/dist/ui/admin/api.d.ts.map +1 -0
- package/dist/ui/admin/components/AboutMeSection.d.ts +7 -0
- package/dist/ui/admin/components/AboutMeSection.d.ts.map +1 -0
- package/dist/ui/admin/components/AdminSection.d.ts +13 -0
- package/dist/ui/admin/components/AdminSection.d.ts.map +1 -0
- package/dist/ui/admin/components/BlogsSection.d.ts +7 -0
- package/dist/ui/admin/components/BlogsSection.d.ts.map +1 -0
- package/dist/ui/admin/components/HomeSection.d.ts +7 -0
- package/dist/ui/admin/components/HomeSection.d.ts.map +1 -0
- package/dist/ui/admin/components/ImagesSection.d.ts +7 -0
- package/dist/ui/admin/components/ImagesSection.d.ts.map +1 -0
- package/dist/ui/admin/components/LoginForm.d.ts +9 -0
- package/dist/ui/admin/components/LoginForm.d.ts.map +1 -0
- package/dist/ui/admin/components/LogoSection.d.ts +7 -0
- package/dist/ui/admin/components/LogoSection.d.ts.map +1 -0
- package/dist/ui/admin/components/ProfileSection.d.ts +7 -0
- package/dist/ui/admin/components/ProfileSection.d.ts.map +1 -0
- package/dist/ui/admin/components/StaticSection.d.ts +9 -0
- package/dist/ui/admin/components/StaticSection.d.ts.map +1 -0
- package/dist/ui/admin/components/StoriesSection.d.ts +7 -0
- package/dist/ui/admin/components/StoriesSection.d.ts.map +1 -0
- package/dist/ui/admin/components/index.d.ts +11 -0
- package/dist/ui/admin/components/index.d.ts.map +1 -0
- package/dist/ui/admin/index.d.ts +27 -26
- package/dist/ui/admin/index.d.ts.map +1 -1
- package/dist/ui/admin/styles.d.ts.map +1 -1
- package/dist/ui/admin/types.d.ts +24 -0
- package/dist/ui/admin/types.d.ts.map +1 -0
- package/dist/ui/banner/styles.d.ts.map +1 -1
- package/dist/ui/blog-viewer/__tests__/blogviewer.test.d.ts +2 -0
- package/dist/ui/blog-viewer/__tests__/blogviewer.test.d.ts.map +1 -0
- package/dist/ui/blog-viewer/index.d.ts +25 -0
- package/dist/ui/blog-viewer/index.d.ts.map +1 -0
- package/dist/ui/blog-viewer/styles.d.ts +2 -0
- package/dist/ui/blog-viewer/styles.d.ts.map +1 -0
- package/dist/ui/footer/index.d.ts +1 -1
- package/dist/ui/footer/index.d.ts.map +1 -1
- package/dist/ui/footer/styles.d.ts.map +1 -1
- package/dist/ui/index.d.ts +7 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/story-viewer/__tests__/storyviewer.test.d.ts +2 -0
- package/dist/ui/story-viewer/__tests__/storyviewer.test.d.ts.map +1 -0
- package/dist/ui/story-viewer/index.d.ts +25 -0
- package/dist/ui/story-viewer/index.d.ts.map +1 -0
- package/dist/ui/story-viewer/styles.d.ts +2 -0
- package/dist/ui/story-viewer/styles.d.ts.map +1 -0
- package/dist/ui.d.ts +1 -1
- package/dist/ui.js +17 -818
- package/package.json +35 -12
- package/public/assets/logo-placeholder.svg +21 -0
- package/dist/api/handlers/aboutme.d.ts.map +0 -1
- package/dist/api/handlers/staticdetails.d.ts.map +0 -1
- package/dist/prerender/pageContent.d.ts.map +0 -1
- package/dist/shared/interfaces/iFooterLink.d.ts.map +0 -1
- package/dist/shared/interfaces/iRoute.d.ts.map +0 -1
- package/dist/shared/pageContent.d.ts.map +0 -1
- package/dist/ui/aboutme/api.d.ts.map +0 -1
- package/dist/ui/aboutme/index.d.ts.map +0 -1
- package/dist/ui/aboutme/renderer.d.ts +0 -5
- package/dist/ui/aboutme/renderer.d.ts.map +0 -1
- package/dist/ui/aboutme/styles.d.ts.map +0 -1
- package/src/api/__tests__/info.test.ts +0 -44
- package/src/api/__tests__/utils.test.ts +0 -78
- package/src/api/handlers/aboutme.ts +0 -99
- package/src/api/handlers/content-api.ts +0 -268
- package/src/api/handlers/content.ts +0 -72
- package/src/api/handlers/home.ts +0 -79
- package/src/api/handlers/info.ts +0 -12
- package/src/api/handlers/logo.ts +0 -55
- package/src/api/handlers/staticdetails.ts +0 -48
- package/src/api/index.ts +0 -125
- package/src/api/utils.ts +0 -16
- package/src/prerender/__tests__/pageContent.test.ts +0 -54
- package/src/prerender/__tests__/template.test.ts +0 -54
- package/src/prerender/index.ts +0 -138
- package/src/prerender/pageContent.ts +0 -263
- package/src/prerender/prerender.ts +0 -25
- package/src/prerender/template.ts +0 -65
- package/src/shared/config/api.ts +0 -16
- package/src/shared/config/index.ts +0 -41
- package/src/shared/config/types.ts +0 -16
- package/src/shared/core/__tests__/theme-toggle.test.ts +0 -204
- package/src/shared/core/site-store.ts +0 -38
- package/src/shared/core/theme-toggle.ts +0 -118
- package/src/shared/index.ts +0 -15
- package/src/shared/interfaces/iFooterLink.ts +0 -4
- package/src/shared/interfaces/iRoute.ts +0 -4
- package/src/shared/models/theme-variables.css +0 -25
- package/src/shared/pageContent.ts +0 -209
- package/src/shared/runtime.ts +0 -11
- package/src/shared/template.ts +0 -35
- package/src/styles/markdown.css +0 -129
- package/src/ui/aboutme/api.ts +0 -12
- package/src/ui/aboutme/index.ts +0 -155
- package/src/ui/aboutme/renderer.ts +0 -7
- package/src/ui/aboutme/styles.ts +0 -10
- package/src/ui/admin/index.ts +0 -492
- package/src/ui/admin/styles.ts +0 -317
- package/src/ui/banner/index.ts +0 -38
- package/src/ui/banner/styles.ts +0 -10
- package/src/ui/footer/index.ts +0 -37
- package/src/ui/footer/styles.ts +0 -9
- /package/{src/shared → dist}/styles/markdown.css +0 -0
- /package/{src → dist}/styles/theme.css +0 -0
- /package/dist/ui/{aboutme → about-me}/api.d.ts +0 -0
- /package/dist/ui/{aboutme → about-me}/styles.d.ts +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,354 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
const DEFAULT_STATIC = {
|
|
7
|
-
siteTitle: "My Personal Website",
|
|
8
|
-
siteDescription: "My Personal Website",
|
|
9
|
-
copyright: "2026 My Personal Website",
|
|
10
|
-
linkedin: "https://linkedin.com/in/yourname",
|
|
11
|
-
github: "https://github.com/yourname",
|
|
12
|
-
email: "yourname@domain.com"
|
|
13
|
-
};
|
|
14
|
-
let activeConfig = { ...DEFAULT_INFRA, ...DEFAULT_STATIC };
|
|
15
|
-
async function initializeConfig(infra) {
|
|
16
|
-
if (infra) {
|
|
17
|
-
activeConfig = { ...activeConfig, ...infra };
|
|
18
|
-
}
|
|
19
|
-
try {
|
|
20
|
-
const res = await fetch(`${activeConfig.apiUrl}/api/static`);
|
|
21
|
-
if (res.ok) {
|
|
22
|
-
const remoteStatic = await res.json();
|
|
23
|
-
activeConfig = { ...activeConfig, ...remoteStatic };
|
|
24
|
-
}
|
|
25
|
-
} catch (e) {
|
|
26
|
-
console.warn("Failed to load static details from R2, using defaults.");
|
|
27
|
-
}
|
|
28
|
-
return activeConfig;
|
|
29
|
-
}
|
|
30
|
-
function getConfig() {
|
|
31
|
-
return activeConfig;
|
|
32
|
-
}
|
|
33
|
-
class SiteStore {
|
|
34
|
-
constructor() {
|
|
35
|
-
this.config = null;
|
|
36
|
-
this.listeners = /* @__PURE__ */ new Set();
|
|
37
|
-
}
|
|
38
|
-
static getInstance() {
|
|
39
|
-
if (!SiteStore.instance) {
|
|
40
|
-
SiteStore.instance = new SiteStore();
|
|
41
|
-
}
|
|
42
|
-
return SiteStore.instance;
|
|
43
|
-
}
|
|
44
|
-
async init(infra) {
|
|
45
|
-
this.config = await initializeConfig(infra);
|
|
46
|
-
this.notify();
|
|
47
|
-
return this.config;
|
|
48
|
-
}
|
|
49
|
-
subscribe(listener) {
|
|
50
|
-
this.listeners.add(listener);
|
|
51
|
-
if (this.config) listener(this.config);
|
|
52
|
-
return () => this.listeners.delete(listener);
|
|
53
|
-
}
|
|
54
|
-
notify() {
|
|
55
|
-
if (this.config) {
|
|
56
|
-
this.listeners.forEach((l) => l(this.config));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
getConfig() {
|
|
60
|
-
return this.config || getConfig();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
class ThemeToggle extends HTMLElement {
|
|
64
|
-
constructor() {
|
|
65
|
-
super();
|
|
66
|
-
this.toggleTheme = () => {
|
|
67
|
-
const currentTheme = document.documentElement.getAttribute("data-theme");
|
|
68
|
-
const newTheme = currentTheme === "dark" ? "light" : "dark";
|
|
69
|
-
document.documentElement.setAttribute("data-theme", newTheme);
|
|
70
|
-
localStorage.setItem("theme", newTheme);
|
|
71
|
-
this.updateToggleButton(newTheme);
|
|
72
|
-
this.dispatchThemeChangeEvent(newTheme);
|
|
73
|
-
};
|
|
74
|
-
this.attachShadow({ mode: "open" });
|
|
75
|
-
this.render();
|
|
76
|
-
this.applyThemeFromLocalStorage();
|
|
77
|
-
}
|
|
78
|
-
connectedCallback() {
|
|
79
|
-
this.shadowRoot?.querySelector("button")?.addEventListener("click", this.toggleTheme);
|
|
80
|
-
}
|
|
81
|
-
disconnectedCallback() {
|
|
82
|
-
this.shadowRoot?.querySelector("button")?.removeEventListener("click", this.toggleTheme);
|
|
83
|
-
}
|
|
84
|
-
render() {
|
|
85
|
-
if (this.shadowRoot) {
|
|
86
|
-
this.shadowRoot.innerHTML = `
|
|
87
|
-
<style>
|
|
88
|
-
:host {
|
|
89
|
-
display: inline-block;
|
|
90
|
-
}
|
|
91
|
-
button {
|
|
92
|
-
background: none;
|
|
93
|
-
border: none;
|
|
94
|
-
cursor: pointer;
|
|
95
|
-
font-size: 1.5rem;
|
|
96
|
-
padding: 0.5rem;
|
|
97
|
-
color: var(--text-color, #213547); /* Default for light mode */
|
|
98
|
-
transition: color 0.3s ease;
|
|
99
|
-
}
|
|
100
|
-
button:hover {
|
|
101
|
-
color: var(--primary-color, #747bff); /* Hover color */
|
|
102
|
-
}
|
|
103
|
-
/* Dark mode specific styles for the button */
|
|
104
|
-
html[data-theme='dark'] button {
|
|
105
|
-
color: var(--dark-mode-text-color, rgba(255, 255, 255, 0.87));
|
|
106
|
-
}
|
|
107
|
-
html[data-theme='dark'] button:hover {
|
|
108
|
-
color: var(--dark-mode-primary-color, #646cff);
|
|
109
|
-
}
|
|
110
|
-
</style>
|
|
111
|
-
<button id="theme-toggle" aria-label="Toggle theme">
|
|
112
|
-
<span class="icon">${this.getSunIcon()}</span> <!-- Default to sun for light mode -->
|
|
113
|
-
</button>
|
|
114
|
-
`;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
applyThemeFromLocalStorage() {
|
|
118
|
-
const savedTheme = localStorage.getItem("theme");
|
|
119
|
-
if (savedTheme) {
|
|
120
|
-
document.documentElement.setAttribute("data-theme", savedTheme);
|
|
121
|
-
this.updateToggleButton(savedTheme);
|
|
122
|
-
} else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
|
|
123
|
-
document.documentElement.setAttribute("data-theme", "dark");
|
|
124
|
-
this.updateToggleButton("dark");
|
|
125
|
-
} else {
|
|
126
|
-
document.documentElement.setAttribute("data-theme", "light");
|
|
127
|
-
this.updateToggleButton("light");
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
updateToggleButton(theme) {
|
|
131
|
-
const button = this.shadowRoot?.querySelector("#theme-toggle");
|
|
132
|
-
if (button) {
|
|
133
|
-
const iconSpan = button.querySelector(".icon");
|
|
134
|
-
if (iconSpan) {
|
|
135
|
-
iconSpan.innerHTML = theme === "dark" ? this.getMoonIcon() : this.getSunIcon();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
getSunIcon() {
|
|
140
|
-
return `
|
|
141
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
142
|
-
<circle cx="12" cy="12" r="5"/>
|
|
143
|
-
<line x1="12" y1="1" x2="12" y2="3"/>
|
|
144
|
-
<line x1="12" y1="21" x2="12" y2="23"/>
|
|
145
|
-
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/>
|
|
146
|
-
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/>
|
|
147
|
-
<line x1="1" y1="12" x2="3" y2="12"/>
|
|
148
|
-
<line x1="21" y1="12" x2="23" y2="12"/>
|
|
149
|
-
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/>
|
|
150
|
-
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
|
|
151
|
-
</svg>
|
|
152
|
-
`;
|
|
153
|
-
}
|
|
154
|
-
getMoonIcon() {
|
|
155
|
-
return `
|
|
156
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
157
|
-
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>
|
|
158
|
-
</svg>
|
|
159
|
-
`;
|
|
160
|
-
}
|
|
161
|
-
dispatchThemeChangeEvent(theme) {
|
|
162
|
-
const event = new CustomEvent("theme-changed", {
|
|
163
|
-
detail: { theme },
|
|
164
|
-
bubbles: true,
|
|
165
|
-
composed: true
|
|
166
|
-
});
|
|
167
|
-
this.dispatchEvent(event);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
customElements.define("theme-toggle", ThemeToggle);
|
|
171
|
-
const createHtmlTemplate = ({
|
|
172
|
-
title,
|
|
173
|
-
description,
|
|
174
|
-
canonicalUrl,
|
|
175
|
-
content
|
|
176
|
-
}) => {
|
|
177
|
-
return `<!doctype html>
|
|
178
|
-
<html lang="en" data-theme="light">
|
|
179
|
-
<head>
|
|
180
|
-
<meta charset="UTF-8" />
|
|
181
|
-
<link rel="icon" type="image/svg+xml" href="/api/logo" />
|
|
182
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
183
|
-
<title>${title}</title>
|
|
184
|
-
<meta name="description" content="${description}" />
|
|
185
|
-
<meta property="og:title" content="${title}" />
|
|
186
|
-
<meta property="og:description" content="${description}" />
|
|
187
|
-
<meta property="og:url" content="${canonicalUrl}" />
|
|
188
|
-
<link rel="canonical" href="${canonicalUrl}" />
|
|
189
|
-
<link rel="stylesheet" href="/src/styles.css" />
|
|
190
|
-
<script type="module" src="/src/index.ts"><\/script>
|
|
191
|
-
</head>
|
|
192
|
-
<body>
|
|
193
|
-
<div id="app">
|
|
194
|
-
${content}
|
|
195
|
-
</div>
|
|
196
|
-
</body>
|
|
197
|
-
</html>`;
|
|
198
|
-
};
|
|
199
|
-
const pipeline = new MarkdownPipeline({
|
|
200
|
-
imagePathPrefix: "images/",
|
|
201
|
-
styleOptions: {
|
|
202
|
-
classPrefix: "md-",
|
|
203
|
-
addHeadingIds: true
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
const renderMarkdown = (content) => {
|
|
207
|
-
if (!content) return "";
|
|
208
|
-
return pipeline.renderMarkdown(content);
|
|
209
|
-
};
|
|
210
|
-
const generatePageContent = (pathname, routes, footerLinks, data) => {
|
|
211
|
-
const logo = "/api/logo";
|
|
212
|
-
const siteTitle = data?.siteTitle || "My Personal Website";
|
|
213
|
-
const siteDescription = data?.siteDescription || "Welcome to my professional portfolio and blog.";
|
|
214
|
-
const copyright = data?.copyright || "2026 All Rights Reserved";
|
|
215
|
-
const baseUrl = data?.baseUrl || "";
|
|
216
|
-
const canonicalUrl = baseUrl ? new URL(pathname, baseUrl).toString() : pathname;
|
|
217
|
-
const navLinks = routes.map(
|
|
218
|
-
(route) => `<a href="${route.link}" class="nav-link" data-route="${route.link === "/" ? "home" : route.text.toLowerCase()}">${route.text}</a>`
|
|
219
|
-
).join("");
|
|
220
|
-
const bannerTemplate = `
|
|
221
|
-
<my-banner header="${siteTitle}" logo="${logo}">
|
|
222
|
-
<theme-toggle slot="theme-switcher"></theme-toggle>
|
|
223
|
-
<nav slot="nav-links">
|
|
224
|
-
${navLinks}
|
|
225
|
-
</nav>
|
|
226
|
-
</my-banner>`;
|
|
227
|
-
const footerTemplate = `
|
|
228
|
-
<my-footer
|
|
229
|
-
copyright="${copyright}"
|
|
230
|
-
footerlinks=\\'\${JSON.stringify(footerLinks)}\\''>
|
|
231
|
-
</my-footer>`;
|
|
232
|
-
const renderContentGists = (items = [], title, type) => {
|
|
233
|
-
const listHtml = items.length > 0 ? items.map((item) => `
|
|
234
|
-
<div class="gist-card">
|
|
235
|
-
<a href="${type}/${item.slug}" data-route="${type}-${item.slug}"><h4>${item.title}</h4></a>
|
|
236
|
-
<p>${item.summary || item.description || ""}</p>
|
|
237
|
-
<small>${new Date(item.date).toLocaleDateString()}</small>
|
|
238
|
-
</div>
|
|
239
|
-
`).join("") : `<p>No ${type} available yet.</p>`;
|
|
240
|
-
return `
|
|
241
|
-
<div class="recent-content-section ${title.includes("Stories") ? "mt-2" : ""}">
|
|
242
|
-
<h3 class="border-bottom pb-05">${title}</h3>
|
|
243
|
-
${listHtml}
|
|
244
|
-
</div>
|
|
245
|
-
`;
|
|
246
|
-
};
|
|
247
|
-
if (pathname === "/" || pathname === "") {
|
|
248
|
-
const homeHtml = data?.content || `<h1>Welcome to ${siteTitle}</h1><p>Start by configuring your content in the admin portal.</p>`;
|
|
249
|
-
const mainContent = `
|
|
250
|
-
${bannerTemplate}
|
|
251
|
-
<main class="container container-wide column-layout row-layout">
|
|
252
|
-
<div class="home-main-content main-column text-left">
|
|
253
|
-
${homeHtml}
|
|
254
|
-
</div>
|
|
255
|
-
<aside class="home-side-content sidebar-column">
|
|
256
|
-
${renderContentGists(data?.blogs, "Recent Blogs", "blogs")}
|
|
257
|
-
${renderContentGists(data?.stories, "Recent Stories", "stories")}
|
|
258
|
-
</aside>
|
|
259
|
-
</main>
|
|
260
|
-
${footerTemplate}`;
|
|
261
|
-
return {
|
|
262
|
-
title: `${siteTitle} - Home`,
|
|
263
|
-
description: siteDescription,
|
|
264
|
-
canonicalUrl,
|
|
265
|
-
content: mainContent
|
|
266
|
-
};
|
|
267
|
-
} else if (pathname === "/blogs" || pathname === "/stories" || pathname.startsWith("/blogs/") || pathname.startsWith("/stories/")) {
|
|
268
|
-
const isBlog = pathname.includes("blogs");
|
|
269
|
-
const type = isBlog ? "blogs" : "stories";
|
|
270
|
-
const items = isBlog ? data?.blogs : data?.stories;
|
|
271
|
-
const title = type.charAt(0).toUpperCase() + type.slice(1);
|
|
272
|
-
const currentSlug = data?.slug;
|
|
273
|
-
const mainContent = `
|
|
274
|
-
${bannerTemplate}
|
|
275
|
-
<main class="container container-wide">
|
|
276
|
-
<div class="mb-2">
|
|
277
|
-
<input type="text" id="content-search" placeholder="Search ${type}..." class="search-input search-input-lg">
|
|
278
|
-
</div>
|
|
279
|
-
<div class="column-layout">
|
|
280
|
-
<aside class="sidebar-nav sidebar-column">
|
|
281
|
-
<div id="content-list">
|
|
282
|
-
${items?.map((item) => {
|
|
283
|
-
const searchTerms = [
|
|
284
|
-
item.title,
|
|
285
|
-
...item.tags || [],
|
|
286
|
-
item.summary || item.description || "",
|
|
287
|
-
item.slug
|
|
288
|
-
].join(" ").toLowerCase();
|
|
289
|
-
return `
|
|
290
|
-
<div class="list-item sidebar-item ${item.slug === currentSlug ? "active" : ""}"
|
|
291
|
-
data-search="${searchTerms}">
|
|
292
|
-
<a href="/${type}/${item.slug}" data-route="${type}-${item.slug}" class="sidebar-item sidebar-item-link">
|
|
293
|
-
<h4>${item.title}</h4>
|
|
294
|
-
<small>${new Date(item.date).toLocaleDateString()}</small>
|
|
295
|
-
</a>
|
|
296
|
-
</div>
|
|
297
|
-
`;
|
|
298
|
-
}).join("") || `<p>No ${type} available yet.</p>`}
|
|
299
|
-
</div>
|
|
300
|
-
</aside>
|
|
301
|
-
<div class="wide-main-column text-left">
|
|
302
|
-
<div id="content-viewer">
|
|
303
|
-
${currentSlug ? isBlog ? `<my-blog-viewer slug="${currentSlug}"></my-blog-viewer>` : `<my-story-viewer slug="${currentSlug}"></my-story-viewer>` : items && items.length > 0 ? `<p>Select a ${type.slice(0, -1)} to read.</p>` : ""}
|
|
304
|
-
</div>
|
|
305
|
-
</div>
|
|
306
|
-
</div>
|
|
307
|
-
</main>
|
|
308
|
-
${footerTemplate}`;
|
|
309
|
-
return {
|
|
310
|
-
title: `${title} - ${siteTitle}`,
|
|
311
|
-
description: `Read the latest ${type} from ${siteTitle}.`,
|
|
312
|
-
canonicalUrl,
|
|
313
|
-
content: mainContent
|
|
314
|
-
};
|
|
315
|
-
} else if (pathname === "/about-me") {
|
|
316
|
-
const apiBaseUrl = data?.apiUrl || "";
|
|
317
|
-
const mainContent = `
|
|
318
|
-
${bannerTemplate}
|
|
319
|
-
<main class="container container-narrow">
|
|
320
|
-
<my-aboutme base-url="${apiBaseUrl}"></my-aboutme>
|
|
321
|
-
</main>
|
|
322
|
-
${footerTemplate}`;
|
|
323
|
-
return {
|
|
324
|
-
title: `About - ${siteTitle}`,
|
|
325
|
-
description: `Learn more about ${siteTitle}.`,
|
|
326
|
-
canonicalUrl,
|
|
327
|
-
content: mainContent
|
|
328
|
-
};
|
|
329
|
-
} else {
|
|
330
|
-
const mainContent = `
|
|
331
|
-
${bannerTemplate}
|
|
332
|
-
<main class="container container-narrow text-center page-content">
|
|
333
|
-
<h1 class="page-title">Page Not Found</h1>
|
|
334
|
-
<p>The page you\\'re looking for doesn\\'t exist.</p>
|
|
335
|
-
<p><a href="/">Return to home</a></p>
|
|
336
|
-
</main>
|
|
337
|
-
${footerTemplate}`;
|
|
338
|
-
return {
|
|
339
|
-
title: `404 Not Found - ${siteTitle}`,
|
|
340
|
-
description: "The page you requested could not be found.",
|
|
341
|
-
canonicalUrl,
|
|
342
|
-
content: mainContent
|
|
343
|
-
};
|
|
344
|
-
}
|
|
345
|
-
};
|
|
1
|
+
import { A, B, M, R, W, c, a, g, b, d, h, e, r, s, v } from "./chunks/website-api-CuyeBej-.js";
|
|
2
|
+
import { WebsitePrerender } from "./prerender.js";
|
|
3
|
+
import { A as A2, a as a2, b as b2, c as c2, d as d2, e as e2, f, g as g2, h as h2, i, B as B2, F, M as M2, j, S, k } from "./chunks/index-_AMi6ort.js";
|
|
4
|
+
import { S as S2, g as g3, i as i2, r as r2 } from "./chunks/site-store-Vqmjjz9c.js";
|
|
5
|
+
import { R as R2, T, W as W2, b as b3, c as c3, g as g4, r as r3 } from "./chunks/template-C1tMqlPY.js";
|
|
346
6
|
export {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
7
|
+
A as AUTH_KV,
|
|
8
|
+
A2 as AdminAboutMeSection,
|
|
9
|
+
a2 as AdminBlogsSection,
|
|
10
|
+
b2 as AdminHomeSection,
|
|
11
|
+
c2 as AdminImagesSection,
|
|
12
|
+
d2 as AdminLoginForm,
|
|
13
|
+
e2 as AdminLogoSection,
|
|
14
|
+
f as AdminPortal,
|
|
15
|
+
g2 as AdminProfileSection,
|
|
16
|
+
h2 as AdminStaticSection,
|
|
17
|
+
i as AdminStoriesSection,
|
|
18
|
+
B as BASE_DELAY_MS,
|
|
19
|
+
B2 as BlogViewer,
|
|
20
|
+
F as FooterComponent,
|
|
21
|
+
M as MAX_ATTEMPTS,
|
|
22
|
+
M2 as MyAboutme,
|
|
23
|
+
j as MyBanner,
|
|
24
|
+
R as RATE_LIMIT_KV,
|
|
25
|
+
R2 as Router,
|
|
26
|
+
S2 as SiteStore,
|
|
27
|
+
S as StoryViewer,
|
|
28
|
+
T as ThemeToggle,
|
|
29
|
+
W as WebsiteAPI,
|
|
30
|
+
WebsitePrerender,
|
|
31
|
+
W2 as WebsiteUI,
|
|
32
|
+
k as adminLoaded,
|
|
33
|
+
b3 as bootstrap,
|
|
34
|
+
c as checkRateLimit,
|
|
35
|
+
a as clearRateLimit,
|
|
36
|
+
c3 as createHtmlTemplate,
|
|
37
|
+
g4 as generatePageContent,
|
|
38
|
+
g as generateSalt,
|
|
39
|
+
b as getAuthStore,
|
|
40
|
+
d as getClientIP,
|
|
41
|
+
g3 as getConfig,
|
|
42
|
+
h as handleAuth,
|
|
43
|
+
e as hashPassword,
|
|
44
|
+
i2 as initializeConfig,
|
|
45
|
+
r as recordFailedAttempt,
|
|
46
|
+
r2 as refreshConfig,
|
|
47
|
+
r3 as renderMarkdown,
|
|
48
|
+
s as setupAuth,
|
|
49
|
+
v as verifyCredentials
|
|
354
50
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-content.test.d.ts","sourceRoot":"","sources":["../../../src/prerender/__tests__/page-content.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.test.d.ts","sourceRoot":"","sources":["../../../src/prerender/__tests__/template.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface Profile {
|
|
2
|
+
name: string;
|
|
3
|
+
title: string;
|
|
4
|
+
experience: string;
|
|
5
|
+
profileImageUrl: string;
|
|
6
|
+
}
|
|
7
|
+
export interface BlogMeta {
|
|
8
|
+
slug: string;
|
|
9
|
+
title: string;
|
|
10
|
+
summary: string;
|
|
11
|
+
tags: string[];
|
|
12
|
+
date: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function fetchProfile(env: any): Promise<Profile | null>;
|
|
15
|
+
export declare function fetchAboutMe(env: any): Promise<string>;
|
|
16
|
+
export declare function fetchHome(env: any): Promise<string>;
|
|
17
|
+
export declare function fetchLatestBlogSummaries(env: any, count?: number): Promise<BlogMeta[]>;
|
|
18
|
+
export declare function fetchLatestStorySummaries(env: any, count?: number): Promise<BlogMeta[]>;
|
|
19
|
+
//# sourceMappingURL=data-fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-fetcher.d.ts","sourceRoot":"","sources":["../../src/prerender/data-fetcher.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAeD,wBAAsB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAQpE;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5D;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAOzD;AAED,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAgB/F;AAED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAgBhG"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
};
|
|
4
|
-
|
|
1
|
+
import { WebsitePrerender } from './website-prerender';
|
|
2
|
+
export { WebsitePrerender };
|
|
3
|
+
export type { PrerenderOptions } from './website-prerender';
|
|
4
|
+
declare const defaultPrerender: WebsitePrerender;
|
|
5
|
+
export default defaultPrerender;
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prerender/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prerender/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,QAAA,MAAM,gBAAgB,kBAAyB,CAAC;AAChD,eAAe,gBAAgB,CAAC"}
|
|
@@ -13,4 +13,4 @@ export interface PageContent {
|
|
|
13
13
|
content: string;
|
|
14
14
|
}
|
|
15
15
|
export declare const generatePageContent: (pathname: string, routes: IRoute[], footerLinks: IFooterLink[], env?: any) => Promise<PageContent>;
|
|
16
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=page-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-content.d.ts","sourceRoot":"","sources":["../../src/prerender/page-content.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAuFD,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,EAChB,QAAQ,MAAM,EAAE,EAChB,aAAa,WAAW,EAAE,EAC1B,MAAM,GAAG,KACR,OAAO,CAAC,WAAW,CAqJrB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BasePageGenerator, StaticDetails } from './base';
|
|
2
|
+
import { IRoute, IFooterLink, PageContent } from '../page-content';
|
|
3
|
+
import { Profile } from '../data-fetcher';
|
|
4
|
+
export interface AboutPageData {
|
|
5
|
+
routes: IRoute[];
|
|
6
|
+
footerLinks: IFooterLink[];
|
|
7
|
+
staticDetails: StaticDetails;
|
|
8
|
+
apiUrl: string;
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
pathname: string;
|
|
11
|
+
profile: Profile | null;
|
|
12
|
+
}
|
|
13
|
+
export declare class AboutPageGenerator extends BasePageGenerator {
|
|
14
|
+
generate(data: AboutPageData): PageContent;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=about.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"about.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/about.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,qBAAa,kBAAmB,SAAQ,iBAAiB;IAChD,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW;CAsBlD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { IRoute, IFooterLink, PageContent } from '../page-content';
|
|
2
|
+
export interface StaticDetails {
|
|
3
|
+
siteTitle?: string;
|
|
4
|
+
copyright?: string;
|
|
5
|
+
linkedin?: string;
|
|
6
|
+
github?: string;
|
|
7
|
+
email?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface BasePageData {
|
|
10
|
+
routes: IRoute[];
|
|
11
|
+
footerLinks: IFooterLink[];
|
|
12
|
+
staticDetails: StaticDetails;
|
|
13
|
+
apiUrl: string;
|
|
14
|
+
baseUrl: string;
|
|
15
|
+
pathname: string;
|
|
16
|
+
name?: string;
|
|
17
|
+
title?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class BasePageGenerator {
|
|
20
|
+
protected generateBanner(routes: IRoute[], siteTitle: string, logo: string): string;
|
|
21
|
+
protected generateFooter(footerLinks: IFooterLink[], copyright: string): string;
|
|
22
|
+
protected generateMeta(title: string, description: string, canonicalUrl: string): void;
|
|
23
|
+
protected wrapContent(banner: string, mainContent: string, footer: string): string;
|
|
24
|
+
generatePage(pathname: string, routes: IRoute[], footerLinks: IFooterLink[], staticDetails: StaticDetails, apiUrl: string, baseUrl: string, mainContent: string, title: string, description: string): PageContent;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAiB;IAC5B,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAcnF,SAAS,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAQ/E,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAItF,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAI3E,YAAY,CACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,WAAW,EAAE,EAC1B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,WAAW;CAcf"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BasePageGenerator, StaticDetails } from './base';
|
|
2
|
+
import { IRoute, IFooterLink, PageContent } from '../page-content';
|
|
3
|
+
export interface BlogDetailPageData {
|
|
4
|
+
routes: IRoute[];
|
|
5
|
+
footerLinks: IFooterLink[];
|
|
6
|
+
staticDetails: StaticDetails;
|
|
7
|
+
apiUrl: string;
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
pathname: string;
|
|
10
|
+
slug: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class BlogDetailPageGenerator extends BasePageGenerator {
|
|
13
|
+
generate(data: BlogDetailPageData): PageContent;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=blog-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-detail.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/blog-detail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,uBAAwB,SAAQ,iBAAiB;IACrD,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW;CAoBvD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BasePageGenerator, StaticDetails } from './base';
|
|
2
|
+
import { IRoute, IFooterLink, PageContent } from '../page-content';
|
|
3
|
+
import { BlogMeta } from '../data-fetcher';
|
|
4
|
+
export interface BlogsListPageData {
|
|
5
|
+
routes: IRoute[];
|
|
6
|
+
footerLinks: IFooterLink[];
|
|
7
|
+
staticDetails: StaticDetails;
|
|
8
|
+
apiUrl: string;
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
pathname: string;
|
|
11
|
+
latestBlogs: BlogMeta[];
|
|
12
|
+
name: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class BlogsListPageGenerator extends BasePageGenerator {
|
|
15
|
+
generate(data: BlogsListPageData): PageContent;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=blogs-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blogs-list.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/blogs-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,QAAQ,EAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,sBAAuB,SAAQ,iBAAiB;IACpD,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW;CA0BtD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BasePageGenerator, StaticDetails } from './base';
|
|
2
|
+
import { IRoute, IFooterLink, PageContent } from '../page-content';
|
|
3
|
+
import { Profile, BlogMeta } from '../data-fetcher';
|
|
4
|
+
export interface HomePageData {
|
|
5
|
+
routes: IRoute[];
|
|
6
|
+
footerLinks: IFooterLink[];
|
|
7
|
+
staticDetails: StaticDetails;
|
|
8
|
+
apiUrl: string;
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
pathname: string;
|
|
11
|
+
profile: Profile | null;
|
|
12
|
+
homeContent: string;
|
|
13
|
+
latestBlogs: BlogMeta[];
|
|
14
|
+
latestStories: BlogMeta[];
|
|
15
|
+
}
|
|
16
|
+
export declare class HomePageGenerator extends BasePageGenerator {
|
|
17
|
+
generate(data: HomePageData): PageContent;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=home.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,QAAQ,EAAE,CAAC;IACxB,aAAa,EAAE,QAAQ,EAAE,CAAC;CAC3B;AAED,qBAAa,iBAAkB,SAAQ,iBAAiB;IAC/C,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW;CAmCjD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './base';
|
|
2
|
+
export * from './home';
|
|
3
|
+
export * from './about';
|
|
4
|
+
export * from './blogs-list';
|
|
5
|
+
export * from './stories-list';
|
|
6
|
+
export * from './blog-detail';
|
|
7
|
+
export * from './story-detail';
|
|
8
|
+
export * from './not-found';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BasePageGenerator, StaticDetails } from './base';
|
|
2
|
+
import { IRoute, IFooterLink, PageContent } from '../page-content';
|
|
3
|
+
export interface NotFoundPageData {
|
|
4
|
+
routes: IRoute[];
|
|
5
|
+
footerLinks: IFooterLink[];
|
|
6
|
+
staticDetails: StaticDetails;
|
|
7
|
+
apiUrl: string;
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
pathname: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class NotFoundPageGenerator extends BasePageGenerator {
|
|
12
|
+
generate(data: NotFoundPageData): PageContent;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=not-found.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not-found.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/not-found.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,qBAAsB,SAAQ,iBAAiB;IACnD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW;CAsBrD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BasePageGenerator, StaticDetails } from './base';
|
|
2
|
+
import { IRoute, IFooterLink, PageContent } from '../page-content';
|
|
3
|
+
import { BlogMeta } from '../data-fetcher';
|
|
4
|
+
export interface StoriesListPageData {
|
|
5
|
+
routes: IRoute[];
|
|
6
|
+
footerLinks: IFooterLink[];
|
|
7
|
+
staticDetails: StaticDetails;
|
|
8
|
+
apiUrl: string;
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
pathname: string;
|
|
11
|
+
latestStories: BlogMeta[];
|
|
12
|
+
name: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class StoriesListPageGenerator extends BasePageGenerator {
|
|
15
|
+
generate(data: StoriesListPageData): PageContent;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=stories-list.d.ts.map
|