mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	Merge pull request #874 from pano9000/refactor_sanitizeAttributeName
refactor(sanitizeAttributeName): simplify function and export
This commit is contained in:
		
							
								
								
									
										43
									
								
								spec-es6/sanitize_attribute_name.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								spec-es6/sanitize_attribute_name.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | import sanitizeAttributeName from "../src/services/sanitize_attribute_name" | ||||||
|  | import { describe, it, execute, expect } from "./mini_test"; | ||||||
|  |  | ||||||
|  | // fn value, expected value | ||||||
|  | const testCases: [fnValue: string, expectedValue: string][] = [ | ||||||
|  |   ["testName", "testName"], | ||||||
|  |   ["test_name", "test_name"], | ||||||
|  |   ["test with space", "test_with_space"], | ||||||
|  |   ["test:with:colon", "test:with:colon"], | ||||||
|  |  | ||||||
|  |   // numbers | ||||||
|  |   ["123456", "123456"], | ||||||
|  |   ["123:456", "123:456"], | ||||||
|  |   ["123456 abc", "123456_abc"], | ||||||
|  |  | ||||||
|  |   // non-latin characters | ||||||
|  |   ["ε", "ε"], | ||||||
|  |   ["attribute ε", "attribute_ε"], | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   // special characters | ||||||
|  |   ["test/name", "test_name"], | ||||||
|  |   ["test%name", "test_name"], | ||||||
|  |   ["\/", "_"], | ||||||
|  |  | ||||||
|  |   // empty string | ||||||
|  |   ["", "unnamed"], | ||||||
|  | ] | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | describe("sanitizeAttributeName unit tests", () => { | ||||||
|  |  | ||||||
|  |   testCases.forEach(testCase => { | ||||||
|  |     return it(`'${testCase[0]}' should return '${testCase[1]}'`, () => { | ||||||
|  |       const [value, expected] = testCase; | ||||||
|  |       const actual = sanitizeAttributeName(value); | ||||||
|  |       expect(actual).toEqual(expected); | ||||||
|  |     }) | ||||||
|  |   }) | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | execute() | ||||||
| @@ -174,7 +174,7 @@ class BAttribute extends AbstractBeccaEntity<BAttribute> { | |||||||
|             this.validate(); |             this.validate(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         this.name = sanitizeAttributeName.sanitizeAttributeName(this.name); |         this.name = sanitizeAttributeName(this.name); | ||||||
|  |  | ||||||
|         if (!this.value) { |         if (!this.value) { | ||||||
|             // null value isn't allowed |             // null value isn't allowed | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
| import imageType from "image-type"; | import imageType from "image-type"; | ||||||
| import imageService from "../../services/image.js"; | import imageService from "../../services/image.js"; | ||||||
| import noteService from "../../services/notes.js"; | import noteService from "../../services/notes.js"; | ||||||
| import sanitize_attribute_name from "../../services/sanitize_attribute_name.js"; | import sanitizeAttributeName from "../../services/sanitize_attribute_name.js"; | ||||||
| import specialNotesService from "../../services/special_notes.js"; | import specialNotesService from "../../services/special_notes.js"; | ||||||
| import { Request } from 'express'; | import { Request } from 'express'; | ||||||
|  |  | ||||||
| @@ -44,7 +44,7 @@ async function uploadImage(req: Request) { | |||||||
|         const labels = JSON.parse(labelsStr); |         const labels = JSON.parse(labelsStr); | ||||||
|  |  | ||||||
|         for (const { name, value } of labels) { |         for (const { name, value } of labels) { | ||||||
|             note.setLabel(sanitize_attribute_name.sanitizeAttributeName(name), value); |             note.setLabel(sanitizeAttributeName(name), value); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -73,7 +73,7 @@ function saveNote(req: Request) { | |||||||
|  |  | ||||||
|     if (req.body.labels) { |     if (req.body.labels) { | ||||||
|         for (const { name, value } of req.body.labels) { |         for (const { name, value } of req.body.labels) { | ||||||
|             note.setLabel(sanitize_attribute_name.sanitizeAttributeName(name), value); |             note.setLabel(sanitizeAttributeName(name), value); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -754,7 +754,7 @@ class ConsistencyChecks { | |||||||
|         const attrNames = sql.getColumn<string>(`SELECT DISTINCT name FROM attributes`); |         const attrNames = sql.getColumn<string>(`SELECT DISTINCT name FROM attributes`); | ||||||
|  |  | ||||||
|         for (const origName of attrNames) { |         for (const origName of attrNames) { | ||||||
|             const fixedName = sanitizeAttributeName.sanitizeAttributeName(origName); |             const fixedName = sanitizeAttributeName(origName); | ||||||
|  |  | ||||||
|             if (fixedName !== origName) { |             if (fixedName !== origName) { | ||||||
|                 if (this.autoFix) { |                 if (this.autoFix) { | ||||||
|   | |||||||
| @@ -151,7 +151,7 @@ function importEnex(taskContext: TaskContext, file: File, parentNote: BNote): Pr | |||||||
|                 labelName = 'pageUrl'; |                 labelName = 'pageUrl'; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             labelName = sanitizeAttributeName.sanitizeAttributeName(labelName || ""); |             labelName = sanitizeAttributeName(labelName || ""); | ||||||
|  |  | ||||||
|             if (note.attributes) { |             if (note.attributes) { | ||||||
|                 note.attributes.push({ |                 note.attributes.push({ | ||||||
| @@ -202,7 +202,7 @@ function importEnex(taskContext: TaskContext, file: File, parentNote: BNote): Pr | |||||||
|             } else if (currentTag === 'tag' && note.attributes) { |             } else if (currentTag === 'tag' && note.attributes) { | ||||||
|                 note.attributes.push({ |                 note.attributes.push({ | ||||||
|                     type: 'label', |                     type: 'label', | ||||||
|                     name: sanitizeAttributeName.sanitizeAttributeName(text), |                     name: sanitizeAttributeName(text), | ||||||
|                     value: '' |                     value: '' | ||||||
|                 }) |                 }) | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -1,18 +1,8 @@ | |||||||
| function sanitizeAttributeName(origName: string) { | export default function sanitizeAttributeName(origName: string) { | ||||||
|     let fixedName: string; |     const fixedName = (origName === '') | ||||||
|  |         ? "unnamed" | ||||||
|     if (origName === '') { |         : origName.replace(/[^\p{L}\p{N}_:]/ug, "_"); | ||||||
|         fixedName = "unnamed"; |  | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|         // any not allowed character should be replaced with underscore |         // any not allowed character should be replaced with underscore | ||||||
|         fixedName = origName.replace(/[^\p{L}\p{N}_:]/ug, "_"); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return fixedName; |     return fixedName; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| export default { |  | ||||||
|     sanitizeAttributeName |  | ||||||
| }; |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user