fix: use frontmatter format for metadata in storage
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -24,7 +24,7 @@ test: ## Run code linting tests | |||||||
| 	pug-lint server/views && jest | 	pug-lint server/views && jest | ||||||
|  |  | ||||||
| docker-dev-up: ## Run dockerized dev environment | docker-dev-up: ## Run dockerized dev environment | ||||||
| 	docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . up -d | 	docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . up -d --remove-orphans | ||||||
| 	docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec wiki yarn dev | 	docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec wiki yarn dev | ||||||
|  |  | ||||||
| docker-dev-down: ## Shutdown dockerized dev environment | docker-dev-down: ## Shutdown dockerized dev environment | ||||||
|   | |||||||
| @@ -114,6 +114,27 @@ module.exports = class Page extends Model { | |||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Inject page metadata into contents | ||||||
|  |    */ | ||||||
|  |   injectMetadata () { | ||||||
|  |     let meta = [ | ||||||
|  |       ['title', this.title], | ||||||
|  |       ['description', this.description], | ||||||
|  |       ['published', this.isPublished.toString()], | ||||||
|  |       ['date', this.updatedAt], | ||||||
|  |       ['tags', ''] | ||||||
|  |     ] | ||||||
|  |     switch (this.contentType) { | ||||||
|  |       case 'markdown': | ||||||
|  |         return '---\n' + meta.map(mt => `${mt[0]}: ${mt[1]}`).join('\n') + '\n---\n\n' + this.content | ||||||
|  |       case 'html': | ||||||
|  |         return '<!--\n' + meta.map(mt => `${mt[0]}: ${mt[1]}`).join('\n') + '\n-->\n\n' + this.content | ||||||
|  |       default: | ||||||
|  |         return this.content | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   static async createPage(opts) { |   static async createPage(opts) { | ||||||
|     await WIKI.models.pages.query().insert({ |     await WIKI.models.pages.query().insert({ | ||||||
|       authorId: opts.authorId, |       authorId: opts.authorId, | ||||||
|   | |||||||
| @@ -15,29 +15,6 @@ const getFileExtension = (contentType) => { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Inject page metadata into contents |  | ||||||
|  */ |  | ||||||
| const injectMetadata = (page) => { |  | ||||||
|   let meta = [ |  | ||||||
|     ['title', page.title], |  | ||||||
|     ['description', page.description] |  | ||||||
|   ] |  | ||||||
|   let metaFormatted = '' |  | ||||||
|   switch (page.contentType) { |  | ||||||
|     case 'markdown': |  | ||||||
|       metaFormatted = meta.map(mt => `[//]: # ${mt[0]}: ${mt[1]}`).join('\n') |  | ||||||
|       break |  | ||||||
|     case 'html': |  | ||||||
|       metaFormatted = meta.map(mt => `<!-- ${mt[0]}: ${mt[1]} -->`).join('\n') |  | ||||||
|       break |  | ||||||
|     default: |  | ||||||
|       metaFormatted = meta.map(mt => `#WIKI ${mt[0]}: ${mt[1]}`).join('\n') |  | ||||||
|       break |  | ||||||
|   } |  | ||||||
|   return `${metaFormatted}\n\n${page.content}` |  | ||||||
| } |  | ||||||
|  |  | ||||||
| module.exports = { | module.exports = { | ||||||
|   async activated() { |   async activated() { | ||||||
|     // not used |     // not used | ||||||
| @@ -56,12 +33,12 @@ module.exports = { | |||||||
|   async created(page) { |   async created(page) { | ||||||
|     WIKI.logger.info(`(STORAGE/DISK) Creating file ${page.path}...`) |     WIKI.logger.info(`(STORAGE/DISK) Creating file ${page.path}...`) | ||||||
|     const filePath = path.join(this.config.path, `${page.path}.${getFileExtension(page.contentType)}`) |     const filePath = path.join(this.config.path, `${page.path}.${getFileExtension(page.contentType)}`) | ||||||
|     await fs.outputFile(filePath, injectMetadata(page), 'utf8') |     await fs.outputFile(filePath, page.injectMetadata(), 'utf8') | ||||||
|   }, |   }, | ||||||
|   async updated(page) { |   async updated(page) { | ||||||
|     WIKI.logger.info(`(STORAGE/DISK) Updating file ${page.path}...`) |     WIKI.logger.info(`(STORAGE/DISK) Updating file ${page.path}...`) | ||||||
|     const filePath = path.join(this.config.path, `${page.path}.${getFileExtension(page.contentType)}`) |     const filePath = path.join(this.config.path, `${page.path}.${getFileExtension(page.contentType)}`) | ||||||
|     await fs.outputFile(filePath, injectMetadata(page), 'utf8') |     await fs.outputFile(filePath, page.injectMetadata(), 'utf8') | ||||||
|   }, |   }, | ||||||
|   async deleted(page) { |   async deleted(page) { | ||||||
|     WIKI.logger.info(`(STORAGE/DISK) Deleting file ${page.path}...`) |     WIKI.logger.info(`(STORAGE/DISK) Deleting file ${page.path}...`) | ||||||
|   | |||||||
| @@ -17,29 +17,6 @@ const getFileExtension = (contentType) => { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Inject page metadata into contents |  | ||||||
|  */ |  | ||||||
| const injectMetadata = (page) => { |  | ||||||
|   let meta = [ |  | ||||||
|     ['title', page.title], |  | ||||||
|     ['description', page.description] |  | ||||||
|   ] |  | ||||||
|   let metaFormatted = '' |  | ||||||
|   switch (page.contentType) { |  | ||||||
|     case 'markdown': |  | ||||||
|       metaFormatted = meta.map(mt => `[//]: # ${mt[0]}: ${mt[1]}`).join('\n') |  | ||||||
|       break |  | ||||||
|     case 'html': |  | ||||||
|       metaFormatted = meta.map(mt => `<!-- ${mt[0]}: ${mt[1]} -->`).join('\n') |  | ||||||
|       break |  | ||||||
|     default: |  | ||||||
|       metaFormatted = meta.map(mt => `#WIKI ${mt[0]}: ${mt[1]}`).join('\n') |  | ||||||
|       break |  | ||||||
|   } |  | ||||||
|   return `${metaFormatted}\n\n${page.content}` |  | ||||||
| } |  | ||||||
|  |  | ||||||
| module.exports = { | module.exports = { | ||||||
|   git: null, |   git: null, | ||||||
|   repoPath: path.join(process.cwd(), 'data/repo'), |   repoPath: path.join(process.cwd(), 'data/repo'), | ||||||
| @@ -131,7 +108,7 @@ module.exports = { | |||||||
|     WIKI.logger.info(`(STORAGE/GIT) Committing new file ${page.path}...`) |     WIKI.logger.info(`(STORAGE/GIT) Committing new file ${page.path}...`) | ||||||
|     const fileName = `${page.path}.${getFileExtension(page.contentType)}` |     const fileName = `${page.path}.${getFileExtension(page.contentType)}` | ||||||
|     const filePath = path.join(this.repoPath, fileName) |     const filePath = path.join(this.repoPath, fileName) | ||||||
|     await fs.outputFile(filePath, injectMetadata(page), 'utf8') |     await fs.outputFile(filePath, page.injectMetadata(), 'utf8') | ||||||
|  |  | ||||||
|     await this.git.add(`./${fileName}`) |     await this.git.add(`./${fileName}`) | ||||||
|     await this.git.commit(`docs: create ${page.path}`, fileName, { |     await this.git.commit(`docs: create ${page.path}`, fileName, { | ||||||
| @@ -142,7 +119,7 @@ module.exports = { | |||||||
|     WIKI.logger.info(`(STORAGE/GIT) Committing updated file ${page.path}...`) |     WIKI.logger.info(`(STORAGE/GIT) Committing updated file ${page.path}...`) | ||||||
|     const fileName = `${page.path}.${getFileExtension(page.contentType)}` |     const fileName = `${page.path}.${getFileExtension(page.contentType)}` | ||||||
|     const filePath = path.join(this.repoPath, fileName) |     const filePath = path.join(this.repoPath, fileName) | ||||||
|     await fs.outputFile(filePath, injectMetadata(page), 'utf8') |     await fs.outputFile(filePath, page.injectMetadata(), 'utf8') | ||||||
|  |  | ||||||
|     await this.git.add(`./${fileName}`) |     await this.git.add(`./${fileName}`) | ||||||
|     await this.git.commit(`docs: update ${page.path}`, fileName, { |     await this.git.commit(`docs: update ${page.path}`, fileName, { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user