6const SAMPLE_STORIES_KEY = "hn_sample_stories";
7
8async function initializeSampleStories() {
9 const existingStories = await blob.getJSON(SAMPLE_STORIES_KEY);
10 if (!existingStories) {
12}
13
14export default async function main(req: Request): Promise<Response> {
15 const { method, url } = req;
16 const { pathname, searchParams } = new URL(url);
56}
57
58// Helper function to generate sample stories
59function generateSampleStories(): Story[] {
60 const sampleStories: Story[] = [];
61 for (let i = 1; i <= 30; i++) {
17
18// Store initial sample stories if they don't exist
19async function initializeStories() {
20 const stories = await blob.getJSON(storiesKey);
21 if (!stories) {
25
26// Fetch all stored stories
27async function getStories() {
28 return (await blob.getJSON(storiesKey)) || [];
29}
30
31// Save stories
32async function saveStories(stories) {
33 await blob.setJSON(storiesKey, stories);
34}
64});
65
66export default async function main(req: Request): Promise<Response> {
67 await initializeStories();
68 return app.fetch(req);
15
16// Add 30 fake sample stories
17async function initializeStories() {
18 let stories: Story[] = [];
19 for (let i = 1; i <= 30; i++) {
7
8// Generate some sample stories to start with
9async function initStories() {
10 const stories = [];
11 for (let i = 1; i <= INITIAL_STORIES; i++) {
26const STORIES_KEY = "hn_clone_stories";
27
28async function getStories(): Promise<Story[]> {
29 return (await blob.getJSON(STORIES_KEY)) ?? DEFAULT_STORIES;
30}
31
32async function saveStories(stories: Story[]): Promise<void> {
33 await blob.setJSON(STORIES_KEY, stories);
34}
1import { blob } from "https://esm.town/v/std/blob";
2
3// Function to initialize the stories in blob storage
4const initializeStories = async () => {
5 const initialStories = Array.from({ length: 30 }, (_, i) => ({
13};
14
15// Function to get all stories
16const getAllStories = async () => {
17 return await blob.getJSON("stories");
18};
19
20// Function to submit a new story
21const submitNewStory = async (newStory) => {
22 const stories = await getAllStories();
30};
31
32// Function to upvote a story
33const upvoteStory = async (storyId) => {
34 const stories = await getAllStories();
48initializeStories();
49
50export default async function main(req: Request): Promise<Response> {
51 const url = new URL(req.url);
52
5await blob.setJSON("stories", []);
6
7// Function to get all stories
8const getAllStories = async () => {
9 const stories = await blob.getJSON("stories");
11};
12
13// Function to add a new story
14const addStory = async (title, author) => {
15 const newStory = {
27};
28
29// Function to upvote a story
30const upvoteStory = async (id) => {
31 const stories = await getAllStories();
42};
43
44// Export the functions for use in the HTTP server
45
46export default async function main(req: Request): Promise<Response> {
47 const url = new URL(req.url);
48 const path = url.pathname;
3
4// Fetch all stories or initialize an empty array if no data exists yet
5export default async function main(req: Request): Promise<Response> {
6 let stories = await blob.getJSON("hackerNewsStories") || [];
7
9];
10
11// Main function to handle HTTP requests
12export default async function(req: Request): Promise<Response> {
13 if (req.method === "GET") {
14 return getStories(req);
22}
23
24// Function to get the list of stories
25async function getStories(req: Request): Promise<Response> {
26 let existingStories = await blob.getJSON("hacker-news-stories");
27 return new Response(JSON.stringify(existingStories), { headers: { "Content-Type": "application/json" } });
28}
29
30// Function to submit a new story
31async function submitStory(req: Request): Promise<Response> {
32 const data = await req.json();
33 const newStory = { id: stories.length + 1, title: data.title, votes: 0 };
37}
38
39// Function to upvote a story
40async function upvoteStory(req: Request): Promise<Response> {
41 const data = await req.json();
42 const storyId = data.id;
A helper function to build a file's email
Simple functional CSS library for Val Town
import { OpenAI } from "https://esm.town/v/std/openai";
export default async function(req: Request): Promise<Response> {
if (req.method === "OPTIONS") {
return new Response(null, {
headers: {
"Access-Control-Allow-Origin": "*",
LangChain (https://langchain.com) Ambassador, KubeSphere (https://kubesphere.io) Ambassador, CNCF OpenFunction (https://openfunction.dev) TOC Member.