diff --git a/cache.js b/cache.js
index 2b00351..3a77e32 100644
--- a/cache.js
+++ b/cache.js
@@ -1,13 +1,22 @@
-function createCache() {
+function createCache(maxEntries = 100) {
const store = new Map();
return {
get(key) {
return store.get(key);
},
set(key, value) {
+ if (maxEntries > 0 && store.size >= maxEntries) {
+ const oldest = store.keys().next().value;
+ store.delete(oldest);
+ }
store.set(key, value);
},
+ size() {
+ return store.size;
+ },
};
}
-module.exports = { createCache };
+const legacyFetchUser = (id) => require("./users.js").fetchUser(id);
+
+module.exports = { createCache, legacyFetchUser };
diff --git a/cache.test.js b/cache.test.js
new file mode 100644
index 0000000..5452028
--- /dev/null
+++ b/cache.test.js
@@ -0,0 +1,9 @@
+const test = require("node:test");
+const assert = require("node:assert");
+const { createCache } = require("./cache.js");
+
+test("cache stores and returns values", () => {
+ const cache = createCache();
+ cache.set("a", 1);
+ assert.equal(cache.get("a"), 1);
+});
diff --git a/users.js b/users.js
index 8c1fcc3..f6779e1 100644
--- a/users.js
+++ b/users.js
@@ -1,3 +1,10 @@
+async function loadUser(id) {
+ return { id, name: "user" + id };
+}
+
+/**
+ * Deprecated: use loadUser instead. Kept for backwards compatibility.
+ */
function fetchUser(id) {
return { id, name: "user" + id };
}
@@ -6,4 +13,4 @@ function decorate(user) {
return Object.assign({ active: true }, user);
}
-module.exports = { fetchUser, decorate };
+module.exports = { loadUser, decorate, fetchUser };
diff --git a/users.test.js b/users.test.js
new file mode 100644
index 0000000..6d61a4e
--- /dev/null
+++ b/users.test.js
@@ -0,0 +1,12 @@
+const test = require("node:test");
+const assert = require("node:assert");
+const { loadUser, decorate } = require("./users.js");
+
+test("loadUser returns a user object", async () => {
+ const user = await loadUser(7);
+ assert.equal(user.id, 7);
+});
+
+test("decorate marks user active", () => {
+ assert.equal(decorate({ id: 1 }).active, true);
+});