@@ -3,41 +3,39 @@ import type { UserscriptMetaHeaderConfig } from "~/config/schema";
33const headerStart = "// ==UserScript==" as const ;
44const headerEnd = "// ==/UserScript==" as const ;
55
6- type HeaderLine = `// @${string } `;
7-
8- function getHeaderLine ( key : string , val : string | boolean ) : HeaderLine {
6+ function getHeaderLine (
7+ key : string ,
8+ val : string | boolean | readonly [ string , string ] ,
9+ ) {
910 if ( typeof val === "boolean" ) return `// @${ key } ` ;
1011 const paddedKey = key . padEnd ( 16 ) ;
11- return `// @${ paddedKey } ${ val } ` ;
12+ if ( typeof val === "string" ) return `// @${ paddedKey } ${ val } ` ;
13+ const paddedSubKey = val [ 0 ] . padEnd ( 8 ) ;
14+ return `// @${ paddedKey } ${ paddedSubKey } ${ val [ 1 ] } ` ;
1215}
1316
1417function getHeaderLines (
1518 key : string ,
16- val : string | string [ ] | boolean ,
17- ) : HeaderLine [ ] {
19+ val : string | string [ ] | boolean | Record < string , string > ,
20+ ) {
1821 if ( Array . isArray ( val ) ) return val . map ( ( v ) => getHeaderLine ( key , v ) ) ;
1922 if ( typeof val === "string" ) return [ getHeaderLine ( key , val ) ] ;
2023 if ( typeof val === "boolean" ) return [ getHeaderLine ( key , val ) ] ;
24+ if ( typeof val === "object" ) {
25+ return Object . entries ( val ) . map ( ( v ) => getHeaderLine ( key , v ) ) ;
26+ }
2127 throw new Error ( `Unknown header value type: ${ typeof val } ` ) ;
2228}
2329
24- type SerializeMetaHeader = `// ==UserScript==
25- ${string }
26- // ==/UserScript==`;
27-
28- interface SerializeMetaHeaderResult {
29- serializedHeader : SerializeMetaHeader ;
30- }
31-
3230export function serializeMetaHeader (
3331 headerConfig : UserscriptMetaHeaderConfig ,
34- ) : SerializeMetaHeaderResult {
32+ ) : string {
3533 const headerConfigEntries = Object . entries ( headerConfig ) ;
36- const headerLines = headerConfigEntries . flatMap ( ( [ key , val ] ) =>
37- getHeaderLines ( key , val ) ,
34+ const headerLines = headerConfigEntries . flatMap ( ( [ kwy , val ] ) =>
35+ getHeaderLines ( kwy , val ) ,
3836 ) ;
3937 const serializedHeaderLines = headerLines . join ( "\n" ) ;
4038 const serializedHeader =
4139 `${ headerStart } \n${ serializedHeaderLines } \n${ headerEnd } ` as const ;
42- return { serializedHeader } ;
40+ return serializedHeader ;
4341}
0 commit comments