Skip to content
File

Blob: samples/web-streams/worker.js

javascript50 lines
1// Copyright (c) 2017-2024 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4 
5import {
6 createSyncLoremStream,
7 createAsyncLoremStream,
8 createSyncLoremByteStream,
9 createAsyncLoremByteStream,
10 createSyncUppercaseTransform,
11 createAsyncUppercaseTransform
12} from "streams-util";
13 
14export default {
15 async fetch(request) {
16 const url = new URL(request.url);
17 
18 // Byte stream variants (no transform, returned directly)
19 if (url.pathname === "/bytes/sync") {
20 return new Response(createSyncLoremByteStream(20), {
21 headers: { "Content-Type": "text/plain; charset=utf-8" }
22 });
23 }
24 if (url.pathname === "/bytes/async") {
25 return new Response(createAsyncLoremByteStream(20), {
26 headers: { "Content-Type": "text/plain; charset=utf-8" }
27 });
28 }
29 
30 // Default stream variants with uppercase transform
31 let loremStream;
32 let transform;
33 if (url.pathname === "/sync") {
34 loremStream = createSyncLoremStream(20);
35 transform = createSyncUppercaseTransform();
36 } else if (url.pathname === "/async") {
37 loremStream = createAsyncLoremStream(20);
38 transform = createAsyncUppercaseTransform();
39 } else {
40 return new Response("Use /sync, /async, /bytes/sync, or /bytes/async\n", { status: 404 });
41 }
42 
43 const transformedStream = loremStream.pipeThrough(transform);
44 
45 return new Response(transformedStream, {
46 headers: { "Content-Type": "text/plain; charset=utf-8" }
47 });
48 }
49};