@@ -5,115 +5,127 @@ import axios from 'axios';
55import { ScriptUrlInfo } from '../msg-center/structs' ;
66import { Subscribe } from '@App/model/do/subscribe' ;
77
8+ export function getMetadataStr ( code : string ) : string | null {
9+ const start = code . indexOf ( '==UserScript==' ) ;
10+ const end = code . indexOf ( '==/UserScript==' ) ;
11+ if ( start === - 1 || end === - 1 ) {
12+ return null ;
13+ }
14+ return '// ' + code . substring ( start , end + 14 ) ;
15+ }
16+
817export function parseMetadata ( code : string ) : Metadata | null {
9- let issub = false ;
10- let regex = / \/ \/ \s * = = U s e r S c r i p t = = ( [ \s \S ] + ?) \/ \/ \s * = = \/ U s e r S c r i p t = = / m;
11- let header = regex . exec ( code )
12- if ( ! header ) {
13- regex = / \/ \/ \s * = = U s e r S u b s c r i b e = = ( [ \s \S ] + ?) \/ \/ \s * = = \/ U s e r S u b s c r i b e = = / m;
14- header = regex . exec ( code )
15- if ( ! header ) {
16- return null ;
17- }
18- issub = true
19- }
20- regex = / \/ \/ \s * @ ( [ \S ] + ) ( ( .+ ?) $ | $ ) / gm;
21- const ret : Metadata = { } ;
22- let meta : RegExpExecArray | null ;
23- while ( meta = regex . exec ( header [ 1 ] ) ) {
24- const [ key , val ] = [ meta [ 1 ] . toLowerCase ( ) . trim ( ) , meta [ 2 ] . trim ( ) ] ;
25- let values = ret [ key ]
26- if ( values == null ) {
27- values = [ ] ;
28- }
29- values . push ( val ) ;
30- ret [ key ] = values ;
31- }
32- if ( ret [ 'name' ] == undefined ) {
33- return null ;
34- }
35- if ( issub ) {
36- ret [ 'usersubscribe' ] = [ ] ;
37- }
38- return ret ;
18+ let issub = false ;
19+ let regex = / \/ \/ \s * = = U s e r S c r i p t = = ( [ \s \S ] + ?) \/ \/ \s * = = \/ U s e r S c r i p t = = / m;
20+ let header = regex . exec ( code ) ;
21+ if ( ! header ) {
22+ regex = / \/ \/ \s * = = U s e r S u b s c r i b e = = ( [ \s \S ] + ?) \/ \/ \s * = = \/ U s e r S u b s c r i b e = = / m;
23+ header = regex . exec ( code ) ;
24+ if ( ! header ) {
25+ return null ;
26+ }
27+ issub = true ;
28+ }
29+ regex = / \/ \/ \s * @ ( [ \S ] + ) ( ( .+ ?) $ | $ ) / gm;
30+ const ret : Metadata = { } ;
31+ let meta : RegExpExecArray | null ;
32+ while ( ( meta = regex . exec ( header [ 1 ] ) ) ) {
33+ const [ key , val ] = [ meta [ 1 ] . toLowerCase ( ) . trim ( ) , meta [ 2 ] . trim ( ) ] ;
34+ let values = ret [ key ] ;
35+ if ( values == null ) {
36+ values = [ ] ;
37+ }
38+ values . push ( val ) ;
39+ ret [ key ] = values ;
40+ }
41+ if ( ret [ 'name' ] == undefined ) {
42+ return null ;
43+ }
44+ if ( issub ) {
45+ ret [ 'usersubscribe' ] = [ ] ;
46+ }
47+ return ret ;
3948}
4049
4150export function parseUserConfig ( code : string ) : UserConfig | undefined {
42- const regex = / \/ \* \s * = = U s e r C o n f i g = = ( [ \s \S ] + ?) \s * = = \/ U s e r C o n f i g = = \s * \* \/ / m;
43- const config = regex . exec ( code )
44- if ( ! config ) {
45- return undefined ;
46- }
47- const configs = config [ 1 ] . trim ( ) . split ( / [ - ] { 3 , } / ) ;
48- const ret : UserConfig = { } ;
49- configs . forEach ( val => {
50- const obj = YAML . parse ( val ) ;
51- for ( const key in obj ) {
52- ret [ key ] = obj [ key ] ;
53- }
54- } ) ;
55- return ret ;
51+ const regex = / \/ \* \s * = = U s e r C o n f i g = = ( [ \s \S ] + ?) \s * = = \/ U s e r C o n f i g = = \s * \* \/ / m;
52+ const config = regex . exec ( code ) ;
53+ if ( ! config ) {
54+ return undefined ;
55+ }
56+ const configs = config [ 1 ] . trim ( ) . split ( / [ - ] { 3 , } / ) ;
57+ const ret : UserConfig = { } ;
58+ configs . forEach ( ( val ) => {
59+ const obj = YAML . parse ( val ) ;
60+ for ( const key in obj ) {
61+ ret [ key ] = obj [ key ] ;
62+ }
63+ } ) ;
64+ return ret ;
5665}
5766
5867export function validMetadata ( metadata : Metadata | null ) : Metadata | null {
59- if ( metadata == null ) {
60- return null ;
61- }
68+ if ( metadata == null ) {
69+ return null ;
70+ }
6271
63- return metadata ;
72+ return metadata ;
6473}
6574
6675export function loadScriptByUrl ( url : string ) : Promise < ScriptUrlInfo | undefined > {
67- return new Promise ( resolve => {
68- axios . get ( url , {
69- headers : {
70- 'Cache-Control' : 'no-cache'
71- }
72- } ) . then ( ( response ) : ScriptUrlInfo | undefined => {
73- if ( response . status != 200 ) {
74- return undefined ;
75- }
76- const ok = parseMetadata ( response . data ) ;
77- if ( ! ok ) {
78- return undefined ;
79- }
80- const uuid = uuidv5 ( url , uuidv5 . URL ) ;
81- const ret = {
82- url : url ,
83- code : response . data ,
84- uuid : uuid ,
85- issub : false ,
86- } ;
87- if ( ok [ 'usersubscribe' ] ) {
88- ret . issub = true ;
89- }
90- resolve ( ret ) ;
91- } ) . catch ( ( e ) => {
92- resolve ( undefined ) ;
93- } ) ;
94- } ) ;
76+ return new Promise ( ( resolve ) => {
77+ axios
78+ . get ( url , {
79+ headers : {
80+ 'Cache-Control' : 'no-cache' ,
81+ } ,
82+ } )
83+ . then ( ( response ) : ScriptUrlInfo | undefined => {
84+ if ( response . status != 200 ) {
85+ return undefined ;
86+ }
87+ const ok = parseMetadata ( response . data ) ;
88+ if ( ! ok ) {
89+ return undefined ;
90+ }
91+ const uuid = uuidv5 ( url , uuidv5 . URL ) ;
92+ const ret = {
93+ url : url ,
94+ code : response . data ,
95+ uuid : uuid ,
96+ issub : false ,
97+ } ;
98+ if ( ok [ 'usersubscribe' ] ) {
99+ ret . issub = true ;
100+ }
101+ resolve ( ret ) ;
102+ } )
103+ . catch ( ( e ) => {
104+ resolve ( undefined ) ;
105+ } ) ;
106+ } ) ;
95107}
96108
97109export function copyScript ( script : Script , old : Script ) {
98- script . id = old . id ;
99- script . uuid = old . uuid ;
100- script . createtime = old . createtime ;
101- script . checktime = old . checktime ;
102- script . lastruntime = old . lastruntime ;
103- script . delayruntime = old . delayruntime ;
104- script . error = old . error ;
105- script . sort = old . sort ;
106- if ( ! script . selfMetadata ) {
107- script . selfMetadata = old . selfMetadata || { } ;
108- }
109- script . subscribeUrl = old . subscribeUrl ;
110- script . status = old . status ;
110+ script . id = old . id ;
111+ script . uuid = old . uuid ;
112+ script . createtime = old . createtime ;
113+ script . checktime = old . checktime ;
114+ script . lastruntime = old . lastruntime ;
115+ script . delayruntime = old . delayruntime ;
116+ script . error = old . error ;
117+ script . sort = old . sort ;
118+ if ( ! script . selfMetadata ) {
119+ script . selfMetadata = old . selfMetadata || { } ;
120+ }
121+ script . subscribeUrl = old . subscribeUrl ;
122+ script . status = old . status ;
111123}
112124
113125export function copySubscribe ( sub : Subscribe , old : Subscribe ) {
114- sub . id = old . id ;
115- sub . createtime = old . createtime ;
116- sub . status = old . status ;
117- sub . checktime = old . checktime ;
118- sub . error = old . error ;
119- }
126+ sub . id = old . id ;
127+ sub . createtime = old . createtime ;
128+ sub . status = old . status ;
129+ sub . checktime = old . checktime ;
130+ sub . error = old . error ;
131+ }
0 commit comments