@stanlemon/server-with-auth 0.2.0 → 0.2.1

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.
package/app.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { createAppServer, asyncJsonHandler as handler } from "./src/index.js";
2
- import LowDBUserDao from "./src/data/lowdb-user-dao.js";
2
+ import LowDBUserDao, { createDb } from "./src/data/lowdb-user-dao.js";
3
3
 
4
- const dao = new LowDBUserDao();
4
+ const db = createDb();
5
+ const dao = new LowDBUserDao(db);
5
6
 
6
7
  const app = createAppServer({
7
8
  port: 3003,
@@ -24,5 +25,5 @@ app.get(
24
25
  // Secure endpoint
25
26
  app.get(
26
27
  "/api/users",
27
- handler(() => ({ users: dao.getDB().data.users }))
28
+ handler(() => ({ users: db.data.users }))
28
29
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stanlemon/server-with-auth",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "A basic express web server setup with authentication baked in.",
5
5
  "author": "Stan Lemon <stanlemon@users.noreply.github.com>",
6
6
  "license": "MIT",
@@ -4,27 +4,40 @@ import { v4 as uuidv4 } from "uuid";
4
4
  import bcrypt from "bcryptjs";
5
5
  import UserDao from "./user-dao.js";
6
6
 
7
- const DEFAULT_ADAPTER =
8
- process.env.NODE_ENV === "test"
9
- ? new MemorySync()
10
- : new JSONFileSync("./db.json");
7
+ export function createInMemoryDb() {
8
+ return new LowSync(new MemorySync(), {});
9
+ }
10
+
11
+ export function createJsonFileDb(filename = "./db.json") {
12
+ return new LowSync(new JSONFileSync(filename), {});
13
+ }
14
+
15
+ /**
16
+ * Create a database based on the environment.
17
+ * Test environment (NODE_ENV=test) will use {MemorySync}.
18
+ * @returns {LowSync} Database
19
+ */
20
+ export function createDb() {
21
+ return process.env.NODE_ENV === "test"
22
+ ? createInMemoryDb()
23
+ : createJsonFileDb();
24
+ }
11
25
 
12
26
  export default class LowDBUserDao extends UserDao {
13
27
  #db;
14
28
 
15
- constructor(seeds = [], adapter = DEFAULT_ADAPTER) {
29
+ constructor(db = createDb()) {
16
30
  super();
17
31
 
18
- this.#db = new LowSync(adapter, { users: [] });
19
- this.#db.read();
20
-
21
- if (seeds.length > 0) {
22
- seeds.forEach((user) => this.createUser(user));
32
+ if (!(db instanceof LowSync)) {
33
+ throw new Error("The db object must be of type LowSync.");
23
34
  }
24
- }
25
35
 
26
- getDB() {
27
- return this.#db;
36
+ this.#db = db;
37
+ this.#db.read();
38
+
39
+ // Default data, ensure that users is an array if it is not already
40
+ this.#db.data.users = db.data.users || [];
28
41
  }
29
42
 
30
43
  /** @inheritdoc */
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * @jest-environment node
3
3
  */
4
- import { MemorySync } from "lowdb";
5
- import LowDBUserDao from "./lowdb-user-dao.js";
4
+ import LowDBUserDao, { createInMemoryDb } from "./lowdb-user-dao.js";
6
5
 
7
6
  describe("lowdb-user-dao", () => {
8
7
  // This is a user that we will reuse in our tests
@@ -11,12 +10,15 @@ describe("lowdb-user-dao", () => {
11
10
  password: "password",
12
11
  };
13
12
 
13
+ /** @type {LowSync} */
14
+ let db;
14
15
  /** @type {LowDBUserDao} */
15
16
  let dao;
16
17
 
17
18
  beforeEach(() => {
18
19
  // Before each test reset our users database
19
- dao = new LowDBUserDao([], new MemorySync());
20
+ db = createInMemoryDb();
21
+ dao = new LowDBUserDao(db);
20
22
  });
21
23
 
22
24
  it("creates a user", async () => {
@@ -97,13 +99,13 @@ describe("lowdb-user-dao", () => {
97
99
  it("deletes a user by id", async () => {
98
100
  const user = await dao.createUser(data);
99
101
 
100
- expect(dao.getDB().data.users).toHaveLength(1);
102
+ expect(db.data.users).toHaveLength(1);
101
103
 
102
104
  const deleted = dao.deleteUser(user.id);
103
105
 
104
106
  expect(deleted).toBe(true);
105
107
  expect(dao.getUserById(user.id)).toBeUndefined();
106
108
 
107
- expect(dao.getDB().data.users).toHaveLength(0);
109
+ expect(db.data.users).toHaveLength(0);
108
110
  });
109
111
  });
package/src/index.js CHANGED
@@ -13,4 +13,9 @@ export { default as checkAuth } from "./checkAuth.js";
13
13
  export { default as createAppServer } from "./createAppServer.js";
14
14
  export { default as schema } from "./schema/user.js";
15
15
  export { default as SimpleUsersDao } from "./data/simple-users-dao.js";
16
- export { default as LowDBUserDao } from "./data/lowdb-user-dao.js";
16
+ export {
17
+ default as LowDBUserDao,
18
+ createDb,
19
+ createInMemoryDb,
20
+ createJsonFileDb,
21
+ } from "./data/lowdb-user-dao.js";
@@ -2,14 +2,13 @@
2
2
  * @jest-environment node
3
3
  */
4
4
  import request from "supertest";
5
- import { MemorySync } from "lowdb";
6
5
  import createAppServer from "../createAppServer";
7
- import LowDBUserDao from "../data/lowdb-user-dao.js";
6
+ import LowDBUserDao, { createInMemoryDb } from "../data/lowdb-user-dao.js";
8
7
 
9
8
  // This suppresses a warning we don't need in tests
10
9
  process.env.JWT_SECRET = "SECRET";
11
10
 
12
- let dao = new LowDBUserDao([], new MemorySync());
11
+ let dao = new LowDBUserDao(createInMemoryDb());
13
12
 
14
13
  // We want to explicitly test functionality we disable during testing
15
14
  process.env.NODE_ENV = "override";