Skip to content

Commit 5844ace

Browse files
authored
feat(KVStore): Expose the KV Store from create app (#24)
1 parent b900e2b commit 5844ace

File tree

4 files changed

+29
-14
lines changed

4 files changed

+29
-14
lines changed

app/__tests__/server_spec.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,19 @@ describe("server", () => {
5151
.get("/some-route")
5252
.expect(200, "127.0.0.1");
5353
});
54+
55+
it("creates stores and passes it to the worker", async () => {
56+
const app = createApp(
57+
'addEventListener("fetch", (e) => e.respondWith(MYSTORE.get("key").then(v => new Response(v))))',
58+
{
59+
kvStores: ["MYSTORE"]
60+
}
61+
);
62+
63+
await app.stores.MYSTORE.put("key", "value");
64+
65+
await supertest(app)
66+
.get("/some-route")
67+
.expect(200, "value");
68+
});
5469
});

app/__tests__/worker_spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ describe("Workers", () => {
188188
const worker = new Worker(
189189
"foo.com",
190190
`addEventListener("fetch", (e) => {e.respondWith(new Response("foo")); e.waitUntil(MYSTORE.put("foo", "bar"))})`,
191-
{ kvStores: ["MYSTORE"], kvStoreFactory: kvStoreFactory }
191+
{ kvStores: { MYSTORE: kvStoreFactory.getClient("MYSTORE") } }
192192
);
193193

194194
const response = await worker.executeFetchEvent(`http://foo.com/blah`);

app/server.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,22 @@ async function callWorker(worker, req, res) {
2121
res.end(Buffer.from(data), "binary");
2222
}
2323

24-
function createApp(workerContent, opts) {
24+
function buildKVStores(kvStoreFactory, kvStores) {
25+
return kvStores.reduce((acc, name) => {
26+
acc[name] = kvStoreFactory.getClient(name);
27+
return acc;
28+
}, {});
29+
}
30+
31+
function createApp(workerContent, opts = {}) {
2532
let workersByOrigin = {};
26-
const kvStoreFactory = new InMemoryKVStore();
33+
const kvStores = buildKVStores(new InMemoryKVStore(), opts.kvStores || []);
2734
const app = express();
2835
app.use(bodyParser.raw({ type: "*/*" }));
2936
app.use(async (req, res) => {
3037
try {
3138
const origin = req.headers.host;
32-
workersByOrigin[origin] =
33-
workersByOrigin[origin] || new Worker(origin, workerContent, { kvStoreFactory, ...opts });
39+
workersByOrigin[origin] = workersByOrigin[origin] || new Worker(origin, workerContent, { ...opts, kvStores });
3440
const worker = workersByOrigin[origin];
3541
await callWorker(worker, req, res);
3642
} catch (e) {
@@ -47,6 +53,7 @@ function createApp(workerContent, opts) {
4753
opts = Object.assign({}, opts, newOpts);
4854
workersByOrigin = {};
4955
};
56+
app.stores = kvStores;
5057

5158
return app;
5259
}

app/worker.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,6 @@ const btoa = require("btoa");
77
const crypto = new (require("node-webcrypto-ossl"))();
88
const { TextDecoder, TextEncoder } = require("util");
99

10-
function buildKVStores(kvStoreFactory, kvStores) {
11-
return kvStores.reduce((acc, name) => {
12-
acc[name] = kvStoreFactory.getClient(name);
13-
return acc;
14-
}, {});
15-
}
16-
1710
function chomp(str) {
1811
return str.substr(0, str.length - 1);
1912
}
@@ -40,14 +33,14 @@ function buildRequest(url, opts) {
4033

4134
class Worker {
4235
constructor(origin, workerContents, opts = {}) {
43-
const { upstreamHost, kvStores = [], kvStoreFactory = require("./in-memory-kv-store") } = opts;
36+
const { upstreamHost, kvStores = {} } = opts;
4437
this.listeners = {
4538
fetch: e => e.respondWith(this.fetchUpstream(e.request))
4639
};
4740
this.upstreamHost = upstreamHost;
4841
this.origin = origin;
4942

50-
this.evaluateWorkerContents(workerContents, buildKVStores(kvStoreFactory, kvStores));
43+
this.evaluateWorkerContents(workerContents, kvStores);
5144
}
5245

5346
evaluateWorkerContents(workerContents, kvStores) {

0 commit comments

Comments
 (0)