WIP! A BB-style forum, on the ATmosphere! We're still working... we'll be back soon when we have something to show off!
node typescript hono htmx atproto

fix: address PR review comments

- Add @types/node and typescript to lexicon package devDependencies
- Add missing columns to schema tests (cid, description, indexedAt on all AT Proto record tables)
- Replace defensive if with explicit toBeDefined() in modAction test

+26 -7
+13 -1
packages/db/src/__tests__/schema.test.ts
··· 43 expect(cols).toHaveProperty("id"); 44 expect(cols).toHaveProperty("did"); 45 expect(cols).toHaveProperty("rkey"); 46 expect(cols).toHaveProperty("name"); 47 expect(cols).toHaveProperty("slug"); 48 expect(cols).toHaveProperty("sortOrder"); 49 expect(cols).toHaveProperty("forumId"); ··· 78 expect(cols).toHaveProperty("id"); 79 expect(cols).toHaveProperty("did"); 80 expect(cols).toHaveProperty("rkey"); 81 expect(cols).toHaveProperty("forumId"); 82 expect(cols).toHaveProperty("forumUri"); 83 expect(cols).toHaveProperty("role"); 84 expect(cols).toHaveProperty("roleUri"); 85 expect(cols).toHaveProperty("joinedAt"); 86 expect(cols).toHaveProperty("createdAt"); 87 }); 88 89 it("has did and forumUri as not-null", () => { ··· 103 expect(cols).toHaveProperty("id"); 104 expect(cols).toHaveProperty("did"); 105 expect(cols).toHaveProperty("rkey"); 106 expect(cols).toHaveProperty("text"); 107 expect(cols).toHaveProperty("rootPostId"); 108 expect(cols).toHaveProperty("parentPostId"); 109 expect(cols).toHaveProperty("rootUri"); 110 expect(cols).toHaveProperty("parentUri"); 111 - expect(cols).toHaveProperty("deleted"); 112 expect(cols).toHaveProperty("createdAt"); 113 }); 114 115 it("has text as not-null", () => { ··· 139 const cols = getTableColumns(modActions); 140 expect(cols).toHaveProperty("id"); 141 expect(cols).toHaveProperty("did"); 142 expect(cols).toHaveProperty("action"); 143 expect(cols).toHaveProperty("subjectDid"); 144 expect(cols).toHaveProperty("subjectPostUri"); 145 expect(cols).toHaveProperty("reason"); 146 expect(cols).toHaveProperty("createdBy"); 147 expect(cols).toHaveProperty("expiresAt"); 148 }); 149 150 it("has action and createdBy as not-null", () => {
··· 43 expect(cols).toHaveProperty("id"); 44 expect(cols).toHaveProperty("did"); 45 expect(cols).toHaveProperty("rkey"); 46 + expect(cols).toHaveProperty("cid"); 47 expect(cols).toHaveProperty("name"); 48 + expect(cols).toHaveProperty("description"); 49 expect(cols).toHaveProperty("slug"); 50 expect(cols).toHaveProperty("sortOrder"); 51 expect(cols).toHaveProperty("forumId"); ··· 80 expect(cols).toHaveProperty("id"); 81 expect(cols).toHaveProperty("did"); 82 expect(cols).toHaveProperty("rkey"); 83 + expect(cols).toHaveProperty("cid"); 84 expect(cols).toHaveProperty("forumId"); 85 expect(cols).toHaveProperty("forumUri"); 86 expect(cols).toHaveProperty("role"); 87 expect(cols).toHaveProperty("roleUri"); 88 expect(cols).toHaveProperty("joinedAt"); 89 expect(cols).toHaveProperty("createdAt"); 90 + expect(cols).toHaveProperty("indexedAt"); 91 }); 92 93 it("has did and forumUri as not-null", () => { ··· 107 expect(cols).toHaveProperty("id"); 108 expect(cols).toHaveProperty("did"); 109 expect(cols).toHaveProperty("rkey"); 110 + expect(cols).toHaveProperty("cid"); 111 expect(cols).toHaveProperty("text"); 112 + expect(cols).toHaveProperty("forumUri"); 113 expect(cols).toHaveProperty("rootPostId"); 114 expect(cols).toHaveProperty("parentPostId"); 115 expect(cols).toHaveProperty("rootUri"); 116 expect(cols).toHaveProperty("parentUri"); 117 expect(cols).toHaveProperty("createdAt"); 118 + expect(cols).toHaveProperty("indexedAt"); 119 + expect(cols).toHaveProperty("deleted"); 120 }); 121 122 it("has text as not-null", () => { ··· 146 const cols = getTableColumns(modActions); 147 expect(cols).toHaveProperty("id"); 148 expect(cols).toHaveProperty("did"); 149 + expect(cols).toHaveProperty("rkey"); 150 + expect(cols).toHaveProperty("cid"); 151 expect(cols).toHaveProperty("action"); 152 expect(cols).toHaveProperty("subjectDid"); 153 expect(cols).toHaveProperty("subjectPostUri"); 154 + expect(cols).toHaveProperty("forumId"); 155 expect(cols).toHaveProperty("reason"); 156 expect(cols).toHaveProperty("createdBy"); 157 expect(cols).toHaveProperty("expiresAt"); 158 + expect(cols).toHaveProperty("createdAt"); 159 + expect(cols).toHaveProperty("indexedAt"); 160 }); 161 162 it("has action and createdBy as not-null", () => {
+3 -4
packages/lexicon/__tests__/lexicons.test.ts
··· 75 const parsed = parseYaml(content); 76 const actionField = 77 parsed.defs.main.record?.properties?.action; 78 - if (actionField) { 79 - expect(actionField).not.toHaveProperty("enum"); 80 - expect(actionField).toHaveProperty("knownValues"); 81 - } 82 }); 83 }); 84
··· 75 const parsed = parseYaml(content); 76 const actionField = 77 parsed.defs.main.record?.properties?.action; 78 + expect(actionField).toBeDefined(); 79 + expect(actionField).not.toHaveProperty("enum"); 80 + expect(actionField).toHaveProperty("knownValues"); 81 }); 82 }); 83
+4 -2
packages/lexicon/package.json
··· 18 }, 19 "devDependencies": { 20 "@atproto/lex-cli": "^0.5.0", 21 "tsx": "^4.0.0", 22 - "yaml": "^2.7.0", 23 - "glob": "^11.0.0" 24 } 25 }
··· 18 }, 19 "devDependencies": { 20 "@atproto/lex-cli": "^0.5.0", 21 + "@types/node": "^22.0.0", 22 + "glob": "^11.0.0", 23 "tsx": "^4.0.0", 24 + "typescript": "^5.7.0", 25 + "yaml": "^2.7.0" 26 } 27 }
+6
pnpm-lock.yaml
··· 95 '@atproto/lex-cli': 96 specifier: ^0.5.0 97 version: 0.5.7 98 glob: 99 specifier: ^11.0.0 100 version: 11.1.0 101 tsx: 102 specifier: ^4.0.0 103 version: 4.21.0 104 yaml: 105 specifier: ^2.7.0 106 version: 2.8.2
··· 95 '@atproto/lex-cli': 96 specifier: ^0.5.0 97 version: 0.5.7 98 + '@types/node': 99 + specifier: ^22.0.0 100 + version: 22.19.9 101 glob: 102 specifier: ^11.0.0 103 version: 11.1.0 104 tsx: 105 specifier: ^4.0.0 106 version: 4.21.0 107 + typescript: 108 + specifier: ^5.7.0 109 + version: 5.9.3 110 yaml: 111 specifier: ^2.7.0 112 version: 2.8.2