| 
									
										
										
										
											2024-07-18 21:35:17 +03:00
										 |  |  | import BNote from "../../src/becca/entities/bnote.js"; | 
					
						
							|  |  |  | import BBranch from "../../src/becca/entities/bbranch.js"; | 
					
						
							|  |  |  | import BAttribute from "../../src/becca/entities/battribute.js"; | 
					
						
							|  |  |  | import becca from "../../src/becca/becca.js"; | 
					
						
							| 
									
										
										
										
											2024-07-18 21:37:45 +03:00
										 |  |  | import randtoken from "rand-token"; | 
					
						
							| 
									
										
										
										
											2024-07-18 21:35:17 +03:00
										 |  |  | import SearchResult from "../../src/services/search/search_result.js"; | 
					
						
							| 
									
										
										
										
											2024-07-24 20:19:27 +03:00
										 |  |  | import { NoteType } from "../../src/becca/entities/rows.js"; | 
					
						
							| 
									
										
										
										
											2024-05-08 23:59:11 +02:00
										 |  |  | randtoken.generator({ source: "crypto" }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function findNoteByTitle( | 
					
						
							|  |  |  |   searchResults: Array<SearchResult>, | 
					
						
							|  |  |  |   title: string | 
					
						
							|  |  |  | ): BNote | undefined { | 
					
						
							|  |  |  |   return searchResults | 
					
						
							|  |  |  |     .map((sr) => becca.notes[sr.noteId]) | 
					
						
							|  |  |  |     .find((note) => note.title === title); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NoteBuilder { | 
					
						
							|  |  |  |   note: BNote; | 
					
						
							|  |  |  |   constructor(note: BNote) { | 
					
						
							|  |  |  |     this.note = note; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   label(name: string, value = "", isInheritable = false) { | 
					
						
							|  |  |  |     new BAttribute({ | 
					
						
							|  |  |  |       attributeId: id(), | 
					
						
							|  |  |  |       noteId: this.note.noteId, | 
					
						
							|  |  |  |       type: "label", | 
					
						
							|  |  |  |       isInheritable, | 
					
						
							|  |  |  |       name, | 
					
						
							|  |  |  |       value, | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return this; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   relation(name: string, targetNote: BNote) { | 
					
						
							|  |  |  |     new BAttribute({ | 
					
						
							|  |  |  |       attributeId: id(), | 
					
						
							|  |  |  |       noteId: this.note.noteId, | 
					
						
							|  |  |  |       type: "relation", | 
					
						
							|  |  |  |       name, | 
					
						
							|  |  |  |       value: targetNote.noteId, | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return this; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   child(childNoteBuilder: NoteBuilder, prefix = "") { | 
					
						
							|  |  |  |     new BBranch({ | 
					
						
							|  |  |  |       branchId: id(), | 
					
						
							|  |  |  |       noteId: childNoteBuilder.note.noteId, | 
					
						
							|  |  |  |       parentNoteId: this.note.noteId, | 
					
						
							|  |  |  |       prefix, | 
					
						
							|  |  |  |       notePosition: 10, | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return this; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function id() { | 
					
						
							|  |  |  |   return randtoken.generate(10); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function note(title: string, extraParams = {}) { | 
					
						
							|  |  |  |   const row = Object.assign( | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       noteId: id(), | 
					
						
							|  |  |  |       title: title, | 
					
						
							|  |  |  |       type: "text" as NoteType, | 
					
						
							|  |  |  |       mime: "text/html", | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     extraParams | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const note = new BNote(row); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return new NoteBuilder(note); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-18 21:47:30 +03:00
										 |  |  | export default { | 
					
						
							| 
									
										
										
										
											2024-05-08 23:59:11 +02:00
										 |  |  |   NoteBuilder, | 
					
						
							|  |  |  |   findNoteByTitle, | 
					
						
							|  |  |  |   note, | 
					
						
							|  |  |  | }; |