@@ -6,15 +6,23 @@ import { isCorrectType } from "../src/utils/objectUtils";
66import { raise } from "../src/utils/raise" ;
77import { reverseSlugify , slugify } from "../src/utils/slugify" ;
88
9- let errored = false ;
10-
119const crlfRegex = / \r \n / gm;
1210const propertyRegex = / ^ \s + ( [ a - z A - Z ] + ) : \s * ( .+ ) / ;
1311const headerEndCodeStartRegex = / ^ \s * - - - \s * ` ` ` .* \n / ;
1412const codeRegex = / ^ ( .+ ) ` ` ` / s;
15- function parseSnippet ( snippetPath , name , text ) {
13+
14+ let errored = false ;
15+
16+ function parseSnippet ( {
17+ snippetPath,
18+ name,
19+ text,
20+ } : {
21+ snippetPath : string ;
22+ name : string ;
23+ text : string ;
24+ } ) : SnippetType | null {
1625 if ( crlfRegex . exec ( text ) !== null ) {
17- errored = true ;
1826 return raise (
1927 "Found CRLF line endings instead of LF line endings" ,
2028 snippetPath
@@ -25,7 +33,6 @@ function parseSnippet(snippetPath, name, text) {
2533 const fromCursor = ( ) => text . substring ( cursor ) ;
2634
2735 if ( ! fromCursor ( ) . trim ( ) . startsWith ( "---" ) ) {
28- errored = true ;
2936 return raise ( "Missing header start delimiter '---'" , snippetPath ) ;
3037 }
3138 cursor += 3 ;
@@ -46,12 +53,10 @@ function parseSnippet(snippetPath, name, text) {
4653 "tags" ,
4754 ] )
4855 ) {
49- errored = true ;
5056 return raise ( "Invalid properties" , snippetPath ) ;
5157 }
5258
5359 if ( slugify ( properties . title ) !== name ) {
54- errored = true ;
5560 return raise (
5661 `slugifyed 'title' property doesn't match snippet file name` ,
5762 snippetPath
@@ -60,14 +65,12 @@ function parseSnippet(snippetPath, name, text) {
6065
6166 match = headerEndCodeStartRegex . exec ( fromCursor ( ) ) ;
6267 if ( match === null ) {
63- errored = true ;
6468 return raise ( "Missing header end '---' or code start '```'" , snippetPath ) ;
6569 }
6670 cursor += match [ 0 ] . length ;
6771
6872 match = codeRegex . exec ( fromCursor ( ) ) ;
6973 if ( match === null ) {
70- errored = true ;
7174 return raise ( "Missing code block end '```'" , snippetPath ) ;
7275 }
7376 const code : string = match [ 1 ] ;
@@ -103,24 +106,29 @@ export function parseAllSnippets() {
103106 }
104107
105108 const categories : CategoryType [ ] = [ ] ;
109+
106110 for ( const category of readdirSync ( languagePath ) ) {
107111 if ( category === "icon.svg" ) continue ;
108- const categoryPath = join ( languagePath , category ) ;
109112
113+ const categoryPath = join ( languagePath , category ) ;
110114 const categorySnippets : SnippetType [ ] = [ ] ;
115+
111116 for ( const snippet of readdirSync ( categoryPath ) ) {
112117 const snippetPath = join ( categoryPath , snippet ) ;
113118 const snippetContent = readFileSync ( snippetPath ) . toString ( ) ;
114119 const snippetFileName = snippet . slice ( 0 , - 3 ) ;
115-
116- const snippetData = parseSnippet (
120+ const snippetData = parseSnippet ( {
117121 snippetPath,
118- snippetFileName ,
119- snippetContent
120- ) ;
121- if ( ! snippetData ) continue ;
122+ name : snippetFileName ,
123+ text : snippetContent ,
124+ } ) ;
125+ if ( snippetData === null ) {
126+ errored = true ;
127+ continue ;
128+ }
122129 categorySnippets . push ( snippetData ) ;
123130 }
131+
124132 categories . push ( {
125133 categoryName : reverseSlugify ( category ) ,
126134 snippets : categorySnippets ,
0 commit comments