feat: interactive cli to generate post
This commit is contained in:
		
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							| @@ -132,17 +132,9 @@ images: ['/static/images/canada/mountains.jpg', '/static/images/canada/toronto.j | ||||
|  | ||||
| ### Compose | ||||
|  | ||||
| `scripts/compose.js` can be used to easily generate a post with pre-filled front matter. | ||||
| Run `node ./scripts/compose.js` to bootstrap a new post. | ||||
|  | ||||
| The first argument is the name of the post and the second optional argument is the extension (default to .mdx) | ||||
|  | ||||
| Example code to generate the post called "My First Post" in markdown format | ||||
|  | ||||
| ``` | ||||
| node ./scripts/compose.js "My First Post" .md | ||||
| ``` | ||||
|  | ||||
| This will generate `./data/blog/my-first-post.md` with pre-filled front matter. | ||||
| Follow the interactive prompt to generate a post with pre-filled front matter. | ||||
|  | ||||
| ## Deploy | ||||
|  | ||||
|   | ||||
| @@ -137,17 +137,9 @@ images: ['/static/images/canada/mountains.jpg', '/static/images/canada/toronto.j | ||||
|  | ||||
| ### Compose | ||||
|  | ||||
| `scripts/compose.js` can be used to easily generate a post with pre-filled front matter. | ||||
| Run `node ./scripts/compose.js` to bootstrap a new post. | ||||
|  | ||||
| The first argument is the name of the post and the second optional argument is the extension (default to .mdx) | ||||
|  | ||||
| Example code to generate the post called "My First Post" in markdown format | ||||
|  | ||||
| ``` | ||||
| node ./scripts/compose.js "My First Post" .md | ||||
| ``` | ||||
|  | ||||
| This will generate `./data/blog/my-first-post.md` with pre-filled front matter. | ||||
| Follow the interactive prompt to generate a post with pre-filled front matter. | ||||
|  | ||||
| ## Deploy | ||||
|  | ||||
|   | ||||
							
								
								
									
										258
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										258
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -2477,6 +2477,17 @@ | ||||
|       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", | ||||
|       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" | ||||
|     }, | ||||
|     "bl": { | ||||
|       "version": "4.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", | ||||
|       "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "buffer": "^5.5.0", | ||||
|         "inherits": "^2.0.4", | ||||
|         "readable-stream": "^3.4.0" | ||||
|       } | ||||
|     }, | ||||
|     "bn.js": { | ||||
|       "version": "5.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", | ||||
| @@ -2739,6 +2750,12 @@ | ||||
|       "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", | ||||
|       "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" | ||||
|     }, | ||||
|     "chardet": { | ||||
|       "version": "0.7.0", | ||||
|       "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", | ||||
|       "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "chokidar": { | ||||
|       "version": "3.5.1", | ||||
|       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", | ||||
| @@ -2783,6 +2800,12 @@ | ||||
|         "restore-cursor": "^3.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "cli-spinners": { | ||||
|       "version": "2.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", | ||||
|       "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "cli-truncate": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", | ||||
| @@ -2830,6 +2853,12 @@ | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "cli-width": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", | ||||
|       "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "clipboard": { | ||||
|       "version": "2.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", | ||||
| @@ -2841,6 +2870,12 @@ | ||||
|         "tiny-emitter": "^2.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "clone": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", | ||||
|       "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "coa": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", | ||||
| @@ -3236,6 +3271,15 @@ | ||||
|       "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "defaults": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", | ||||
|       "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "clone": "^1.0.2" | ||||
|       } | ||||
|     }, | ||||
|     "define-properties": { | ||||
|       "version": "1.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", | ||||
| @@ -4182,6 +4226,37 @@ | ||||
|         "is-extendable": "^0.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "external-editor": { | ||||
|       "version": "3.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", | ||||
|       "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "chardet": "^0.7.0", | ||||
|         "iconv-lite": "^0.4.24", | ||||
|         "tmp": "^0.0.33" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "iconv-lite": { | ||||
|           "version": "0.4.24", | ||||
|           "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", | ||||
|           "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "safer-buffer": ">= 2.1.2 < 3" | ||||
|           } | ||||
|         }, | ||||
|         "tmp": { | ||||
|           "version": "0.0.33", | ||||
|           "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", | ||||
|           "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "os-tmpdir": "~1.0.2" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "fast-deep-equal": { | ||||
|       "version": "3.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", | ||||
| @@ -4236,6 +4311,15 @@ | ||||
|         "format": "^0.2.0" | ||||
|       } | ||||
|     }, | ||||
|     "figures": { | ||||
|       "version": "3.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", | ||||
|       "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "escape-string-regexp": "^1.0.5" | ||||
|       } | ||||
|     }, | ||||
|     "file-entry-cache": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", | ||||
| @@ -4840,6 +4924,79 @@ | ||||
|       "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", | ||||
|       "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" | ||||
|     }, | ||||
|     "inquirer": { | ||||
|       "version": "8.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", | ||||
|       "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "ansi-escapes": "^4.2.1", | ||||
|         "chalk": "^4.1.1", | ||||
|         "cli-cursor": "^3.1.0", | ||||
|         "cli-width": "^3.0.0", | ||||
|         "external-editor": "^3.0.3", | ||||
|         "figures": "^3.0.0", | ||||
|         "lodash": "^4.17.21", | ||||
|         "mute-stream": "0.0.8", | ||||
|         "ora": "^5.3.0", | ||||
|         "run-async": "^2.4.0", | ||||
|         "rxjs": "^6.6.6", | ||||
|         "string-width": "^4.1.0", | ||||
|         "strip-ansi": "^6.0.0", | ||||
|         "through": "^2.3.6" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "ansi-styles": { | ||||
|           "version": "4.3.0", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", | ||||
|           "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "color-convert": "^2.0.1" | ||||
|           } | ||||
|         }, | ||||
|         "chalk": { | ||||
|           "version": "4.1.1", | ||||
|           "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", | ||||
|           "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ansi-styles": "^4.1.0", | ||||
|             "supports-color": "^7.1.0" | ||||
|           } | ||||
|         }, | ||||
|         "color-convert": { | ||||
|           "version": "2.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", | ||||
|           "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "color-name": "~1.1.4" | ||||
|           } | ||||
|         }, | ||||
|         "color-name": { | ||||
|           "version": "1.1.4", | ||||
|           "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | ||||
|           "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "has-flag": { | ||||
|           "version": "4.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", | ||||
|           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "supports-color": { | ||||
|           "version": "7.2.0", | ||||
|           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", | ||||
|           "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "has-flag": "^4.0.0" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "internal-slot": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", | ||||
| @@ -4967,6 +5124,12 @@ | ||||
|       "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", | ||||
|       "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" | ||||
|     }, | ||||
|     "is-interactive": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", | ||||
|       "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "is-nan": { | ||||
|       "version": "1.3.2", | ||||
|       "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", | ||||
| @@ -5841,6 +6004,12 @@ | ||||
|       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | ||||
|       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | ||||
|     }, | ||||
|     "mute-stream": { | ||||
|       "version": "0.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", | ||||
|       "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "nanoid": { | ||||
|       "version": "3.1.23", | ||||
|       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", | ||||
| @@ -6427,11 +6596,85 @@ | ||||
|         "word-wrap": "^1.2.3" | ||||
|       } | ||||
|     }, | ||||
|     "ora": { | ||||
|       "version": "5.4.1", | ||||
|       "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", | ||||
|       "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "bl": "^4.1.0", | ||||
|         "chalk": "^4.1.0", | ||||
|         "cli-cursor": "^3.1.0", | ||||
|         "cli-spinners": "^2.5.0", | ||||
|         "is-interactive": "^1.0.0", | ||||
|         "is-unicode-supported": "^0.1.0", | ||||
|         "log-symbols": "^4.1.0", | ||||
|         "strip-ansi": "^6.0.0", | ||||
|         "wcwidth": "^1.0.1" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "ansi-styles": { | ||||
|           "version": "4.3.0", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", | ||||
|           "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "color-convert": "^2.0.1" | ||||
|           } | ||||
|         }, | ||||
|         "chalk": { | ||||
|           "version": "4.1.1", | ||||
|           "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", | ||||
|           "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ansi-styles": "^4.1.0", | ||||
|             "supports-color": "^7.1.0" | ||||
|           } | ||||
|         }, | ||||
|         "color-convert": { | ||||
|           "version": "2.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", | ||||
|           "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "color-name": "~1.1.4" | ||||
|           } | ||||
|         }, | ||||
|         "color-name": { | ||||
|           "version": "1.1.4", | ||||
|           "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | ||||
|           "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "has-flag": { | ||||
|           "version": "4.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", | ||||
|           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "supports-color": { | ||||
|           "version": "7.2.0", | ||||
|           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", | ||||
|           "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "has-flag": "^4.0.0" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "os-browserify": { | ||||
|       "version": "0.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", | ||||
|       "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" | ||||
|     }, | ||||
|     "os-tmpdir": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", | ||||
|       "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "p-limit": { | ||||
|       "version": "3.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", | ||||
| @@ -7457,6 +7700,12 @@ | ||||
|         "inherits": "^2.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "run-async": { | ||||
|       "version": "2.4.1", | ||||
|       "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", | ||||
|       "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "run-parallel": { | ||||
|       "version": "1.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", | ||||
| @@ -8563,6 +8812,15 @@ | ||||
|         "graceful-fs": "^4.1.2" | ||||
|       } | ||||
|     }, | ||||
|     "wcwidth": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", | ||||
|       "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "defaults": "^1.0.3" | ||||
|       } | ||||
|     }, | ||||
|     "web-namespaces": { | ||||
|       "version": "1.1.4", | ||||
|       "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", | ||||
|   | ||||
| @@ -39,6 +39,7 @@ | ||||
|     "@next/bundle-analyzer": "11.0.1", | ||||
|     "@svgr/webpack": "^5.5.0", | ||||
|     "cross-env": "^7.0.3", | ||||
|     "dedent": "^0.7.0", | ||||
|     "eslint": "^7.29.0", | ||||
|     "eslint-config-next": "11.0.1", | ||||
|     "eslint-config-prettier": "^8.3.0", | ||||
| @@ -47,6 +48,7 @@ | ||||
|     "file-loader": "^6.0.0", | ||||
|     "globby": "11.0.3", | ||||
|     "husky": "^6.0.0", | ||||
|     "inquirer": "^8.1.1", | ||||
|     "lint-staged": "^11.0.0", | ||||
|     "next-remote-watch": "^1.0.0", | ||||
|     "prettier": "2.2.1", | ||||
|   | ||||
| @@ -1,31 +1,82 @@ | ||||
| const fs = require('fs') | ||||
| const inquirer = require('inquirer') | ||||
| const dedent = require('dedent') | ||||
|  | ||||
| const args = process.argv.slice(2) | ||||
| const title = args[0] | ||||
| const ext = typeof args[1] !== 'undefined' ? args[1] : 'mdx' | ||||
| // Remove special characters and replace space with - | ||||
| const fileName = title | ||||
|   .toLowerCase() | ||||
|   .replace(/[^a-zA-Z0-9 ]/g, '') | ||||
|   .replace(/ /g, '-') | ||||
|   .replace(/-+/g, '-') | ||||
| let d = new Date() | ||||
| const date = [ | ||||
|   d.getFullYear(), | ||||
|   ('0' + (d.getMonth() + 1)).slice(-2), | ||||
|   ('0' + d.getDate()).slice(-2), | ||||
| ].join('-') | ||||
| const genFrontMatter = (answers) => { | ||||
|   let d = new Date() | ||||
|   const date = [ | ||||
|     d.getFullYear(), | ||||
|     ('0' + (d.getMonth() + 1)).slice(-2), | ||||
|     ('0' + d.getDate()).slice(-2), | ||||
|   ].join('-') | ||||
|   var tagArray = answers.tags.split(',') | ||||
|   tagArray.forEach((tag, index) => (tagArray[index] = tag.trim())) | ||||
|   const tags = "'" + tagArray.join("','") + "'" | ||||
|   const frontMatter = dedent`--- | ||||
|   title: ${answers.title ? answers.title : 'Untitled'} | ||||
|   date: '${date}' | ||||
|   tags: [${answers.tags ? tags : ''}] | ||||
|   draft: ${answers.draft === 'yes' ? true : false} | ||||
|   summary: ${answers.summary ? answers.summary : ' '} | ||||
|   images: [] | ||||
|   --- | ||||
|   ` | ||||
|   return frontMatter | ||||
| } | ||||
|  | ||||
| const frontMatter = `--- | ||||
| title: ${title} | ||||
| date: '${date}' | ||||
| tags: [] | ||||
| draft: true | ||||
| summary:  | ||||
| images: [] | ||||
| --- | ||||
| ` | ||||
|  | ||||
| fs.writeFile(`data/blog/${fileName}.${ext}`, frontMatter, (err) => { | ||||
|   if (err) throw err | ||||
| }) | ||||
| inquirer | ||||
|   .prompt([ | ||||
|     { | ||||
|       name: 'title', | ||||
|       message: 'Enter post title:', | ||||
|       type: 'input', | ||||
|     }, | ||||
|     { | ||||
|       name: 'extention', | ||||
|       message: 'Choose post extension:', | ||||
|       type: 'list', | ||||
|       choices: ['mdx', 'md'], | ||||
|     }, | ||||
|     { | ||||
|       name: 'summary', | ||||
|       message: 'Enter post summary:', | ||||
|       type: 'input', | ||||
|     }, | ||||
|     { | ||||
|       name: 'draft', | ||||
|       message: 'Set post as draft?', | ||||
|       type: 'list', | ||||
|       choices: ['yes', 'no'], | ||||
|     }, | ||||
|     { | ||||
|       name: 'tags', | ||||
|       message: 'Any Tags? Separate them with , or leave empty if no tags.', | ||||
|       type: 'input', | ||||
|     }, | ||||
|   ]) | ||||
|   .then((answers) => { | ||||
|     // Remove special characters and replace space with - | ||||
|     const fileName = answers.title | ||||
|       .toLowerCase() | ||||
|       .replace(/[^a-zA-Z0-9 ]/g, '') | ||||
|       .replace(/ /g, '-') | ||||
|       .replace(/-+/g, '-') | ||||
|     const frontMatter = genFrontMatter(answers) | ||||
|     const filePath = `data/blog/${fileName ? fileName : 'untitled'}.${ | ||||
|       answers.extention ? answers.extention : 'md' | ||||
|     }` | ||||
|     fs.writeFile(filePath, frontMatter, { flag: 'wx' }, (err) => { | ||||
|       if (err) { | ||||
|         throw err | ||||
|       } else { | ||||
|         console.log(`Blog post generated successfully at ${filePath}`) | ||||
|       } | ||||
|     }) | ||||
|   }) | ||||
|   .catch((error) => { | ||||
|     if (error.isTtyError) { | ||||
|       console.log("Prompt couldn't be rendered in the current environment") | ||||
|     } else { | ||||
|       console.log('Something went wrong, sorry!') | ||||
|     } | ||||
|   }) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user