@@ -14,22 +14,32 @@ export class Helper {
14
14
for ( let i = 0 ; i < line . length ; i ++ ) {
15
15
const char = line [ i ] ;
16
16
17
- if ( char === '"' && ( i === 0 || line [ i - 1 ] !== '\\' ) ) {
18
- inQuotes = ! inQuotes ;
19
- } else if ( char === '(' && ! inQuotes ) {
17
+ if ( char === '(' ) {
20
18
bracketCount ++ ;
21
- } else if ( char === ')' && ! inQuotes ) {
19
+ } else if ( char === ')' ) {
22
20
bracketCount -- ;
23
21
}
24
22
23
+ if ( char === '"' && ( i === 0 || line [ i - 1 ] !== '\\' ) ) {
24
+ inQuotes = ! inQuotes ;
25
+ currentToken += char ;
26
+ continue ;
27
+ }
28
+
25
29
if ( char === ',' && ! inQuotes && bracketCount === 0 ) {
26
- tokens . push ( currentToken . trim ( ) ) ;
27
- currentToken = '' ;
30
+ if ( currentToken ) {
31
+ tokens . push ( currentToken . trim ( ) ) ;
32
+ currentToken = '' ;
33
+ }
28
34
} else {
29
35
currentToken += char ;
30
36
}
31
37
}
32
38
39
+ if ( bracketCount !== 0 ) {
40
+ throw new Error ( `Unmatched brackets in policy line: ${ line } ` ) ;
41
+ }
42
+
33
43
if ( currentToken ) {
34
44
tokens . push ( currentToken . trim ( ) ) ;
35
45
}
@@ -38,7 +48,11 @@ export class Helper {
38
48
return ;
39
49
}
40
50
41
- const key = tokens [ 0 ] ;
51
+ let key = tokens [ 0 ] . trim ( ) ;
52
+ if ( key . startsWith ( '"' ) && key . endsWith ( '"' ) ) {
53
+ key = key . slice ( 1 , - 1 ) ;
54
+ }
55
+
42
56
const sec = key . substring ( 0 , 1 ) ;
43
57
const item = model . model . get ( sec ) ;
44
58
if ( ! item ) {
@@ -51,10 +65,11 @@ export class Helper {
51
65
}
52
66
53
67
const values = tokens . slice ( 1 ) . map ( ( v ) => {
68
+ v = v . trim ( ) ;
54
69
if ( v . startsWith ( '"' ) && v . endsWith ( '"' ) ) {
55
70
v = v . slice ( 1 , - 1 ) ;
56
71
}
57
- return v . replace ( / " " / g, '"' ) ;
72
+ return v . replace ( / " " / g, '"' ) . trim ( ) ;
58
73
} ) ;
59
74
60
75
policy . policy . push ( values ) ;
0 commit comments