@leadertechie/personal-site-kit 0.1.0-alpha.7 → 0.1.0-alpha.8

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.
Files changed (107) hide show
  1. package/dist/api/handlers/about-me.d.ts.map +1 -1
  2. package/dist/api/website-api.d.ts.map +1 -1
  3. package/dist/api.js +2 -2
  4. package/dist/chunks/index-CGvOrVf8.js +213 -0
  5. package/dist/chunks/{index-Bq8WDk9L.js → index-CYd_Pe2U.js} +1321 -473
  6. package/dist/chunks/{template-Boh_MKY5.js → template-D1uGvdWZ.js} +8 -7
  7. package/dist/chunks/{website-api-XoeLwo_N.js → website-api-FLejlWxJ.js} +47 -25
  8. package/dist/index.js +19 -9
  9. package/dist/prerender/data-fetcher.d.ts +19 -0
  10. package/dist/prerender/data-fetcher.d.ts.map +1 -0
  11. package/dist/prerender/page-content.d.ts.map +1 -1
  12. package/dist/prerender/page-generators/about.d.ts +16 -0
  13. package/dist/prerender/page-generators/about.d.ts.map +1 -0
  14. package/dist/prerender/page-generators/base.d.ts +26 -0
  15. package/dist/prerender/page-generators/base.d.ts.map +1 -0
  16. package/dist/prerender/page-generators/blog-detail.d.ts +15 -0
  17. package/dist/prerender/page-generators/blog-detail.d.ts.map +1 -0
  18. package/dist/prerender/page-generators/blogs-list.d.ts +17 -0
  19. package/dist/prerender/page-generators/blogs-list.d.ts.map +1 -0
  20. package/dist/prerender/page-generators/home.d.ts +19 -0
  21. package/dist/prerender/page-generators/home.d.ts.map +1 -0
  22. package/dist/prerender/page-generators/index.d.ts +9 -0
  23. package/dist/prerender/page-generators/index.d.ts.map +1 -0
  24. package/dist/prerender/page-generators/not-found.d.ts +14 -0
  25. package/dist/prerender/page-generators/not-found.d.ts.map +1 -0
  26. package/dist/prerender/page-generators/stories-list.d.ts +17 -0
  27. package/dist/prerender/page-generators/stories-list.d.ts.map +1 -0
  28. package/dist/prerender/page-generators/story-detail.d.ts +15 -0
  29. package/dist/prerender/page-generators/story-detail.d.ts.map +1 -0
  30. package/dist/prerender.js +109 -102
  31. package/dist/shared.js +1 -1
  32. package/dist/ui/about-me/index.d.ts +2 -10
  33. package/dist/ui/about-me/index.d.ts.map +1 -1
  34. package/dist/ui/admin/api.d.ts +16 -0
  35. package/dist/ui/admin/api.d.ts.map +1 -0
  36. package/dist/ui/admin/components/AboutMeSection.d.ts +7 -0
  37. package/dist/ui/admin/components/AboutMeSection.d.ts.map +1 -0
  38. package/dist/ui/admin/components/AdminSection.d.ts +13 -0
  39. package/dist/ui/admin/components/AdminSection.d.ts.map +1 -0
  40. package/dist/ui/admin/components/BlogsSection.d.ts +7 -0
  41. package/dist/ui/admin/components/BlogsSection.d.ts.map +1 -0
  42. package/dist/ui/admin/components/HomeSection.d.ts +7 -0
  43. package/dist/ui/admin/components/HomeSection.d.ts.map +1 -0
  44. package/dist/ui/admin/components/ImagesSection.d.ts +7 -0
  45. package/dist/ui/admin/components/ImagesSection.d.ts.map +1 -0
  46. package/dist/ui/admin/components/LoginForm.d.ts +9 -0
  47. package/dist/ui/admin/components/LoginForm.d.ts.map +1 -0
  48. package/dist/ui/admin/components/LogoSection.d.ts +7 -0
  49. package/dist/ui/admin/components/LogoSection.d.ts.map +1 -0
  50. package/dist/ui/admin/components/ProfileSection.d.ts +7 -0
  51. package/dist/ui/admin/components/ProfileSection.d.ts.map +1 -0
  52. package/dist/ui/admin/components/StaticSection.d.ts +13 -0
  53. package/dist/ui/admin/components/StaticSection.d.ts.map +1 -0
  54. package/dist/ui/admin/components/StoriesSection.d.ts +7 -0
  55. package/dist/ui/admin/components/StoriesSection.d.ts.map +1 -0
  56. package/dist/ui/admin/components/index.d.ts +11 -0
  57. package/dist/ui/admin/components/index.d.ts.map +1 -0
  58. package/dist/ui/admin/index.d.ts +10 -26
  59. package/dist/ui/admin/index.d.ts.map +1 -1
  60. package/dist/ui/admin/types.d.ts +24 -0
  61. package/dist/ui/admin/types.d.ts.map +1 -0
  62. package/dist/ui/blog-viewer/index.d.ts.map +1 -1
  63. package/dist/ui/index.d.ts.map +1 -1
  64. package/dist/ui/story-viewer/index.d.ts.map +1 -1
  65. package/dist/ui.js +14 -4
  66. package/package.json +1 -1
  67. package/src/api/handlers/about-me.ts +19 -9
  68. package/src/api/handlers/auth-handler.ts +18 -8
  69. package/src/api/handlers/content.ts +1 -1
  70. package/src/api/handlers/home.ts +2 -2
  71. package/src/api/website-api.ts +11 -7
  72. package/src/prerender/__tests__/page-content.test.ts +1 -11
  73. package/src/prerender/data-fetcher.ts +93 -0
  74. package/src/prerender/page-content.ts +109 -106
  75. package/src/prerender/page-generators/about.ts +38 -0
  76. package/src/prerender/page-generators/base.ts +77 -0
  77. package/src/prerender/page-generators/blog-detail.ts +35 -0
  78. package/src/prerender/page-generators/blogs-list.ts +43 -0
  79. package/src/prerender/page-generators/home.ts +54 -0
  80. package/src/prerender/page-generators/index.ts +8 -0
  81. package/src/prerender/page-generators/not-found.ts +36 -0
  82. package/src/prerender/page-generators/stories-list.ts +43 -0
  83. package/src/prerender/page-generators/story-detail.ts +35 -0
  84. package/src/shared/config/index.ts +1 -1
  85. package/src/shared/page-content.ts +1 -1
  86. package/src/shared/router.ts +5 -5
  87. package/src/ui/about-me/index.ts +14 -57
  88. package/src/ui/admin/api.ts +93 -0
  89. package/src/ui/admin/components/AboutMeSection.ts +47 -0
  90. package/src/ui/admin/components/AdminSection.ts +134 -0
  91. package/src/ui/admin/components/BlogsSection.ts +62 -0
  92. package/src/ui/admin/components/HomeSection.ts +47 -0
  93. package/src/ui/admin/components/ImagesSection.ts +54 -0
  94. package/src/ui/admin/components/LoginForm.ts +116 -0
  95. package/src/ui/admin/components/LogoSection.ts +51 -0
  96. package/src/ui/admin/components/ProfileSection.ts +47 -0
  97. package/src/ui/admin/components/StaticSection.ts +67 -0
  98. package/src/ui/admin/components/StoriesSection.ts +62 -0
  99. package/src/ui/admin/components/index.ts +10 -0
  100. package/src/ui/admin/index.ts +192 -434
  101. package/src/ui/admin/types.ts +26 -0
  102. package/src/ui/blog-viewer/index.ts +4 -1
  103. package/src/ui/index.ts +7 -0
  104. package/src/ui/story-viewer/index.ts +4 -1
  105. package/dist/ui/about-me/renderer.d.ts +0 -6
  106. package/dist/ui/about-me/renderer.d.ts.map +0 -1
  107. package/src/ui/about-me/renderer.ts +0 -23
@@ -1,7 +1,8 @@
1
1
  import { MarkdownPipeline } from "@leadertechie/md2html";
2
+ const __vite_import_meta_env__ = {};
2
3
  const DEFAULT_INFRA = {
3
4
  baseUrl: typeof window !== "undefined" ? window.location.origin : "http://localhost:5173",
4
- apiUrl: typeof window !== "undefined" && window.__VITE_API_URL__ || "http://localhost:8787"
5
+ apiUrl: typeof window !== "undefined" && (window.__VITE_API_URL__ || __vite_import_meta_env__?.VITE_API_URL) || "http://localhost:8788"
5
6
  };
6
7
  const DEFAULT_STATIC = {
7
8
  siteTitle: "My Personal Website",
@@ -92,7 +93,7 @@ const generatePageContent = (pathname, routes, footerLinks, data) => {
92
93
  const footerTemplate = `
93
94
  <my-footer
94
95
  copyright="${copyright}"
95
- footerlinks='\${JSON.stringify(footerLinks)}'>
96
+ footerLinks='${JSON.stringify(footerLinks)}'>
96
97
  </my-footer>`;
97
98
  const renderContentGists = (items = [], title, type) => {
98
99
  const listHtml = items.length > 0 ? items.map((item) => `
@@ -231,10 +232,10 @@ class Router {
231
232
  return url;
232
233
  };
233
234
  this.footerLinks = [
234
- { text: "LinkedIn", link: normalizeUrl(config.linkedin) },
235
- { text: "GitHub", link: normalizeUrl(config.github) },
236
- { text: "Email", link: config.email ? `mailto:${config.email}` : "" }
237
- ].filter((link) => link.link !== "");
235
+ { text: "LinkedIn", link: normalizeUrl(config.linkedin) || "https://linkedin.com" },
236
+ { text: "GitHub", link: normalizeUrl(config.github) || "https://github.com" },
237
+ { text: "Email", link: config.email ? `mailto:${config.email}` : "mailto:hello@example.com" }
238
+ ];
238
239
  }
239
240
  init(appElementId = "app") {
240
241
  this.appElement = document.getElementById(appElementId);
@@ -426,7 +427,7 @@ class Router {
426
427
  <main class="container container-medium">
427
428
  <admin-portal></admin-portal>
428
429
  </main>
429
- <my-footer copyright="${this.copyright}" footerlinks='[]'></my-footer>
430
+ <my-footer copyright="${this.copyright}" footerLinks='[]'></my-footer>
430
431
  `;
431
432
  }
432
433
  }
@@ -52,20 +52,30 @@ async function handleAboutMe(env) {
52
52
  });
53
53
  }
54
54
  console.log("handleAboutMe: r2 created, fetching data");
55
- const [profileObj, astResult] = await Promise.all([
55
+ const [profileObj, rendered] = await Promise.all([
56
56
  r2.getObject("profile.json"),
57
- r2.getWithAST("about-me.md")
57
+ r2.getRendered("about-me.md")
58
58
  ]);
59
- console.log("handleAboutMe: profileObj =", !!profileObj, "astResult =", !!astResult);
60
- if (!profileObj || !astResult) {
61
- throw new Error("Content not found in R2");
59
+ if (!rendered) {
60
+ return new Response(JSON.stringify({ error: "About-me content not found. Please run seed." }), {
61
+ status: 404,
62
+ headers: { "Content-Type": "application/json" }
63
+ });
64
+ }
65
+ let profile = {
66
+ name: "Your Name",
67
+ title: "Professional",
68
+ experience: "Experienced",
69
+ profileImageUrl: ""
70
+ };
71
+ if (profileObj) {
72
+ profile = await profileObj.json();
62
73
  }
63
- const profile = await profileObj.json();
64
74
  console.log("handleAboutMe: profile loaded:", profile.name);
65
75
  const responseData = {
66
76
  profile,
67
- contentNodes: astResult.contentNodes,
68
- processedMarkdown: ""
77
+ contentNodes: [],
78
+ processedMarkdown: rendered.content
69
79
  };
70
80
  return new Response(JSON.stringify(responseData), {
71
81
  headers: { "Content-Type": "application/json" }
@@ -109,8 +119,8 @@ async function handleHome(env) {
109
119
  }
110
120
  const r2 = getLoader(env);
111
121
  const [astResult, renderedResult] = await Promise.all([
112
- r2.getWithAST("home.md"),
113
- r2.getRendered("home.md")
122
+ r2.getWithAST("pages/home.md"),
123
+ r2.getRendered("pages/home.md")
114
124
  ]);
115
125
  if (!astResult || !renderedResult) {
116
126
  return new Response(JSON.stringify({
@@ -281,7 +291,7 @@ async function handleContent(request, env, subpath) {
281
291
  }
282
292
  return createErrorResponse("Admin not configured. Use POST /auth/setup to configure.", 401);
283
293
  }
284
- const sessionToken = getSessionToken(request);
294
+ const sessionToken = getSessionToken(request) || request.headers.get("X-Session-Token");
285
295
  let isAuthenticated = false;
286
296
  if (sessionToken) {
287
297
  const session = await env.KV.get(`session:${sessionToken}`, "json");
@@ -403,32 +413,40 @@ async function handleAuth(request, env, subpath) {
403
413
  }
404
414
  }
405
415
  async function handleSetup(request, env, clientIP, origin) {
416
+ console.log("handleSetup: starting setup, env.KV exists:", !!env.KV);
406
417
  if (request.method !== "POST") {
407
418
  return createErrorResponse("Method not allowed", 405);
408
419
  }
409
- const existing = await getAuthStore(env);
410
- if (existing) {
411
- return createErrorResponse("Admin already configured. Use /auth/login to login.", 400);
412
- }
413
420
  try {
421
+ const existing = await getAuthStore(env);
422
+ console.log("handleSetup: existing store check:", !!existing);
423
+ if (existing) {
424
+ return createErrorResponse("Admin already configured. Use /auth/login to login.", 400);
425
+ }
414
426
  const body = await request.json();
415
427
  const { username, password } = body;
428
+ console.log("handleSetup: body parsed, username:", username);
416
429
  if (!username || !password) {
417
430
  return createErrorResponse("Username and password required", 400);
418
431
  }
419
432
  if (username.length < 3 || password.length < 8) {
420
433
  return createErrorResponse("Username must be 3+ chars, password must be 8+ chars", 400);
421
434
  }
435
+ console.log("handleSetup: calling setupAuth");
422
436
  await setupAuth(env, username, password);
437
+ console.log("handleSetup: setupAuth successful");
423
438
  await clearRateLimit(env, clientIP);
424
439
  const token = crypto.randomUUID();
440
+ console.log("handleSetup: session token generated");
425
441
  await env.KV.put(`session:${token}`, JSON.stringify({
426
442
  createdAt: Date.now(),
427
443
  expiresAt: Date.now() + 7 * 24 * 60 * 60 * 1e3
428
444
  }), { expirationTtl: 7 * 24 * 60 * 60 });
445
+ console.log("handleSetup: session stored in KV");
429
446
  const headers = {
430
447
  "Content-Type": "application/json",
431
- "Set-Cookie": createSessionCookie(token, origin)
448
+ "Set-Cookie": createSessionCookie(token, origin),
449
+ "X-Session-Token": token
432
450
  };
433
451
  return new Response(JSON.stringify({
434
452
  success: true,
@@ -438,7 +456,8 @@ async function handleSetup(request, env, clientIP, origin) {
438
456
  headers
439
457
  });
440
458
  } catch (e) {
441
- return createErrorResponse("Invalid request body", 400);
459
+ console.error("handleSetup: error occurred:", e);
460
+ return createErrorResponse("Internal server error: " + e.message, 500);
442
461
  }
443
462
  }
444
463
  async function handleStatus(env) {
@@ -471,7 +490,8 @@ async function handleLogin(request, env, clientIP, origin) {
471
490
  }), { expirationTtl: 7 * 24 * 60 * 60 });
472
491
  const headers = {
473
492
  "Content-Type": "application/json",
474
- "Set-Cookie": createSessionCookie(token, origin)
493
+ "Set-Cookie": createSessionCookie(token, origin),
494
+ "X-Session-Token": token
475
495
  };
476
496
  return new Response(JSON.stringify({
477
497
  success: true,
@@ -808,25 +828,25 @@ class WebsiteAPI {
808
828
  addCORSHeaders(response) {
809
829
  response.headers.set("Access-Control-Allow-Origin", "*");
810
830
  response.headers.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
811
- response.headers.set("Access-Control-Allow-Headers", "Content-Type, Authorization");
831
+ response.headers.set("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Session-Token");
812
832
  return response;
813
833
  }
814
834
  addAdminCORSHeaders(response, origin) {
815
- const allowOrigin = origin.includes("localhost") || origin.includes("127.0.0.1") ? origin : "same-origin";
835
+ const allowOrigin = origin && (origin.includes("localhost") || origin.includes("127.0.0.1")) ? origin : "same-origin";
816
836
  response.headers.set("Access-Control-Allow-Origin", allowOrigin);
817
837
  response.headers.set("Access-Control-Allow-Credentials", "true");
818
838
  response.headers.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
819
- response.headers.set("Access-Control-Allow-Headers", "Content-Type, Authorization");
839
+ response.headers.set("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Session-Token");
820
840
  return response;
821
841
  }
822
842
  handleCORS(origin) {
823
- const allowOrigin = origin.includes("localhost") || origin.includes("127.0.0.1") ? origin : "*";
843
+ const allowOrigin = origin && (origin.includes("localhost") || origin.includes("127.0.0.1")) ? origin : "*";
824
844
  return new Response(null, {
825
845
  status: 200,
826
846
  headers: {
827
847
  "Access-Control-Allow-Origin": allowOrigin,
828
848
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
829
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
849
+ "Access-Control-Allow-Headers": "Content-Type, Authorization, X-Session-Token",
830
850
  "Access-Control-Allow-Credentials": "true",
831
851
  "Access-Control-Max-Age": "86400"
832
852
  }
@@ -849,6 +869,10 @@ class WebsiteAPI {
849
869
  const subpath = route.replace(/^content\/?/, "");
850
870
  return this.addAdminCORSHeaders(await handleContent(request, env, subpath), origin);
851
871
  }
872
+ if (route === "auth" || route.startsWith("auth/")) {
873
+ const subpath = route.replace(/^auth\/?/, "");
874
+ return this.addAdminCORSHeaders(await handleAuth(request, env, subpath || "/"), origin);
875
+ }
852
876
  switch (route) {
853
877
  case "info":
854
878
  return this.addCORSHeaders(await handleInfo());
@@ -869,8 +893,6 @@ class WebsiteAPI {
869
893
  return this.addCORSHeaders(await handleLogo(env));
870
894
  case "static":
871
895
  return this.addCORSHeaders(await handleStaticDetails(env));
872
- case "auth":
873
- return this.addAdminCORSHeaders(await handleAuth(request, env, "/auth"), origin);
874
896
  case "blogs":
875
897
  return this.addCORSHeaders(await handleBlogs(env));
876
898
  case "blogs/latest":
package/dist/index.js CHANGED
@@ -1,16 +1,25 @@
1
- import { A, B, M, R, W, c, a, g, b, d, h, e, r, s, v } from "./chunks/website-api-XoeLwo_N.js";
1
+ import { A, B, M, R, W, c, a, g, b, d, h, e, r, s, v } from "./chunks/website-api-FLejlWxJ.js";
2
2
  import { WebsitePrerender } from "./prerender.js";
3
- import { A as A2, B as B2, F, M as M2, a as a2, S } from "./chunks/index-Bq8WDk9L.js";
4
- import { R as R2, S as S2, T, W as W2, b as b2, c as c2, g as g2, a as a3, i, r as r2 } from "./chunks/template-Boh_MKY5.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-CYd_Pe2U.js";
4
+ import { R as R2, S as S2, T, W as W2, b as b3, c as c3, g as g3, a as a3, i as i2, r as r2 } from "./chunks/template-D1uGvdWZ.js";
5
5
  export {
6
6
  A as AUTH_KV,
7
- A2 as AdminPortal,
7
+ A2 as AdminAboutMeSection,
8
+ a2 as AdminBlogsSection,
9
+ b2 as AdminHomeSection,
10
+ c2 as AdminImagesSection,
11
+ d2 as AdminLoginForm,
12
+ e2 as AdminLogoSection,
13
+ f as AdminPortal,
14
+ g2 as AdminProfileSection,
15
+ h2 as AdminStaticSection,
16
+ i as AdminStoriesSection,
8
17
  B as BASE_DELAY_MS,
9
18
  B2 as BlogViewer,
10
19
  F as FooterComponent,
11
20
  M as MAX_ATTEMPTS,
12
21
  M2 as MyAboutme,
13
- a2 as MyBanner,
22
+ j as MyBanner,
14
23
  R as RATE_LIMIT_KV,
15
24
  R2 as Router,
16
25
  S2 as SiteStore,
@@ -19,18 +28,19 @@ export {
19
28
  W as WebsiteAPI,
20
29
  WebsitePrerender,
21
30
  W2 as WebsiteUI,
22
- b2 as bootstrap,
31
+ k as adminLoaded,
32
+ b3 as bootstrap,
23
33
  c as checkRateLimit,
24
34
  a as clearRateLimit,
25
- c2 as createHtmlTemplate,
26
- g2 as generatePageContent,
35
+ c3 as createHtmlTemplate,
36
+ g3 as generatePageContent,
27
37
  g as generateSalt,
28
38
  b as getAuthStore,
29
39
  d as getClientIP,
30
40
  a3 as getConfig,
31
41
  h as handleAuth,
32
42
  e as hashPassword,
33
- i as initializeConfig,
43
+ i2 as initializeConfig,
34
44
  r as recordFailedAttempt,
35
45
  r2 as renderMarkdown,
36
46
  s as setupAuth,
@@ -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 +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,CAkJrB,CAAC"}
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stories-list.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/stories-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,mBAAmB;IAClC,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,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,wBAAyB,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW;CA0BxD"}
@@ -0,0 +1,15 @@
1
+ import { BasePageGenerator, StaticDetails } from './base';
2
+ import { IRoute, IFooterLink, PageContent } from '../page-content';
3
+ export interface StoryDetailPageData {
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 StoryDetailPageGenerator extends BasePageGenerator {
13
+ generate(data: StoryDetailPageData): PageContent;
14
+ }
15
+ //# sourceMappingURL=story-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story-detail.d.ts","sourceRoot":"","sources":["../../../src/prerender/page-generators/story-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,mBAAmB;IAClC,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,wBAAyB,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,WAAW;CAoBxD"}