mirror of
https://github.com/miniflux/v2.git
synced 2025-08-01 17:38:37 +00:00
Refactor assets bundler and split Javascript files
This commit is contained in:
parent
e1c56b2e53
commit
53deb0b8cd
49 changed files with 2837 additions and 2000 deletions
67
vendor/github.com/tdewolff/parse/js/lex.go
generated
vendored
67
vendor/github.com/tdewolff/parse/js/lex.go
generated
vendored
|
@ -23,7 +23,8 @@ const (
|
|||
UnknownToken // extra token when no token can be matched
|
||||
WhitespaceToken // space \t \v \f
|
||||
LineTerminatorToken // \r \n \r\n
|
||||
CommentToken
|
||||
SingleLineCommentToken
|
||||
MultiLineCommentToken // token for comments with line terminators (not just any /*block*/)
|
||||
IdentifierToken
|
||||
PunctuatorToken /* { } ( ) [ ] . ; , < > <= >= == != === !== + - * % ++ -- << >>
|
||||
>>> & | ^ ! ~ && || ? : = += -= *= %= <<= >>= >>>= &= |= ^= / /= >= */
|
||||
|
@ -68,8 +69,10 @@ func (tt TokenType) String() string {
|
|||
return "Whitespace"
|
||||
case LineTerminatorToken:
|
||||
return "LineTerminator"
|
||||
case CommentToken:
|
||||
return "Comment"
|
||||
case SingleLineCommentToken:
|
||||
return "SingleLineComment"
|
||||
case MultiLineCommentToken:
|
||||
return "MultiLineComment"
|
||||
case IdentifierToken:
|
||||
return "Identifier"
|
||||
case PunctuatorToken:
|
||||
|
@ -174,15 +177,15 @@ func (l *Lexer) Next() (TokenType, []byte) {
|
|||
l.r.Move(1)
|
||||
tt = PunctuatorToken
|
||||
case '<', '>', '=', '!', '+', '-', '*', '%', '&', '|', '^':
|
||||
if (c == '<' || (l.emptyLine && c == '-')) && l.consumeCommentToken() {
|
||||
return CommentToken, l.r.Shift()
|
||||
if l.consumeHTMLLikeCommentToken() {
|
||||
return SingleLineCommentToken, l.r.Shift()
|
||||
} else if l.consumeLongPunctuatorToken() {
|
||||
l.state = ExprState
|
||||
tt = PunctuatorToken
|
||||
}
|
||||
case '/':
|
||||
if l.consumeCommentToken() {
|
||||
return CommentToken, l.r.Shift()
|
||||
if tt = l.consumeCommentToken(); tt != UnknownToken {
|
||||
return tt, l.r.Shift()
|
||||
} else if l.state == ExprState && l.consumeRegexpToken() {
|
||||
l.state = SubscriptState
|
||||
tt = RegexpToken
|
||||
|
@ -374,46 +377,54 @@ func (l *Lexer) consumeSingleLineComment() {
|
|||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
func (l *Lexer) consumeCommentToken() bool {
|
||||
func (l *Lexer) consumeHTMLLikeCommentToken() bool {
|
||||
c := l.r.Peek(0)
|
||||
if c == '<' && l.r.Peek(1) == '!' && l.r.Peek(2) == '-' && l.r.Peek(3) == '-' {
|
||||
// opening HTML-style single line comment
|
||||
l.r.Move(4)
|
||||
l.consumeSingleLineComment()
|
||||
return true
|
||||
} else if l.emptyLine && c == '-' && l.r.Peek(1) == '-' && l.r.Peek(2) == '>' {
|
||||
// closing HTML-style single line comment
|
||||
// (only if current line didn't contain any meaningful tokens)
|
||||
l.r.Move(3)
|
||||
l.consumeSingleLineComment()
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (l *Lexer) consumeCommentToken() TokenType {
|
||||
c := l.r.Peek(0)
|
||||
if c == '/' {
|
||||
c = l.r.Peek(1)
|
||||
if c == '/' {
|
||||
// single line
|
||||
// single line comment
|
||||
l.r.Move(2)
|
||||
l.consumeSingleLineComment()
|
||||
return SingleLineCommentToken
|
||||
} else if c == '*' {
|
||||
// multi line
|
||||
// block comment (potentially multiline)
|
||||
tt := SingleLineCommentToken
|
||||
l.r.Move(2)
|
||||
for {
|
||||
c := l.r.Peek(0)
|
||||
if c == '*' && l.r.Peek(1) == '/' {
|
||||
l.r.Move(2)
|
||||
return true
|
||||
break
|
||||
} else if c == 0 {
|
||||
break
|
||||
} else if l.consumeLineTerminator() {
|
||||
tt = MultiLineCommentToken
|
||||
l.emptyLine = true
|
||||
} else {
|
||||
l.r.Move(1)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
return tt
|
||||
}
|
||||
} else if c == '<' && l.r.Peek(1) == '!' && l.r.Peek(2) == '-' && l.r.Peek(3) == '-' {
|
||||
// opening HTML-style single line comment
|
||||
l.r.Move(4)
|
||||
l.consumeSingleLineComment()
|
||||
} else if c == '-' && l.r.Peek(1) == '-' && l.r.Peek(2) == '>' {
|
||||
// closing HTML-style single line comment
|
||||
// (only if current line didn't contain any meaningful tokens)
|
||||
l.r.Move(3)
|
||||
l.consumeSingleLineComment()
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
return UnknownToken
|
||||
}
|
||||
|
||||
func (l *Lexer) consumeLongPunctuatorToken() bool {
|
||||
|
@ -643,6 +654,12 @@ func (l *Lexer) consumeTemplateToken() bool {
|
|||
l.state = ExprState
|
||||
l.r.Move(2)
|
||||
return true
|
||||
} else if c == '\\' {
|
||||
l.r.Move(1)
|
||||
if c := l.r.Peek(0); c != 0 {
|
||||
l.r.Move(1)
|
||||
}
|
||||
continue
|
||||
} else if c == 0 {
|
||||
l.r.Rewind(mark)
|
||||
return false
|
||||
|
|
15
vendor/github.com/tdewolff/parse/js/lex_test.go
generated
vendored
15
vendor/github.com/tdewolff/parse/js/lex_test.go
generated
vendored
|
@ -20,7 +20,7 @@ func TestTokens(t *testing.T) {
|
|||
{"\n\r\r\n\u2028\u2029", TTs{LineTerminatorToken}},
|
||||
{"5.2 .04 0x0F 5e99", TTs{NumericToken, NumericToken, NumericToken, NumericToken}},
|
||||
{"a = 'string'", TTs{IdentifierToken, PunctuatorToken, StringToken}},
|
||||
{"/*comment*/ //comment", TTs{CommentToken, CommentToken}},
|
||||
{"/*comment*/ //comment", TTs{SingleLineCommentToken, SingleLineCommentToken}},
|
||||
{"{ } ( ) [ ]", TTs{PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken}},
|
||||
{". ; , < > <=", TTs{PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken}},
|
||||
{">= == != === !==", TTs{PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken}},
|
||||
|
@ -31,12 +31,12 @@ func TestTokens(t *testing.T) {
|
|||
{">>= >>>= &= |= ^= =>", TTs{PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken}},
|
||||
{"a = /.*/g;", TTs{IdentifierToken, PunctuatorToken, RegexpToken, PunctuatorToken}},
|
||||
|
||||
{"/*co\nm\u2028m/*ent*/ //co//mment\u2029//comment", TTs{CommentToken, CommentToken, LineTerminatorToken, CommentToken}},
|
||||
{"/*co\nm\u2028m/*ent*/ //co//mment\u2029//comment", TTs{MultiLineCommentToken, SingleLineCommentToken, LineTerminatorToken, SingleLineCommentToken}},
|
||||
{"<!-", TTs{PunctuatorToken, PunctuatorToken, PunctuatorToken}},
|
||||
{"1<!--2\n", TTs{NumericToken, CommentToken, LineTerminatorToken}},
|
||||
{"1<!--2\n", TTs{NumericToken, SingleLineCommentToken, LineTerminatorToken}},
|
||||
{"x=y-->10\n", TTs{IdentifierToken, PunctuatorToken, IdentifierToken, PunctuatorToken, PunctuatorToken, NumericToken, LineTerminatorToken}},
|
||||
{" /*comment*/ -->nothing\n", TTs{CommentToken, CommentToken, LineTerminatorToken}},
|
||||
{"1 /*comment\nmultiline*/ -->nothing\n", TTs{NumericToken, CommentToken, CommentToken, LineTerminatorToken}},
|
||||
{" /*comment*/ -->nothing\n", TTs{SingleLineCommentToken, SingleLineCommentToken, LineTerminatorToken}},
|
||||
{"1 /*comment\nmultiline*/ -->nothing\n", TTs{NumericToken, MultiLineCommentToken, SingleLineCommentToken, LineTerminatorToken}},
|
||||
{"$ _\u200C \\u2000 \u200C", TTs{IdentifierToken, IdentifierToken, IdentifierToken, UnknownToken}},
|
||||
{">>>=>>>>=", TTs{PunctuatorToken, PunctuatorToken, PunctuatorToken}},
|
||||
{"1/", TTs{NumericToken, PunctuatorToken}},
|
||||
|
@ -63,7 +63,7 @@ func TestTokens(t *testing.T) {
|
|||
{"'\n '\u2028", TTs{UnknownToken, LineTerminatorToken, UnknownToken, LineTerminatorToken}},
|
||||
{"'str\\\U00100000ing\\0'", TTs{StringToken}},
|
||||
{"'strin\\00g'", TTs{StringToken}},
|
||||
{"/*comment", TTs{CommentToken}},
|
||||
{"/*comment", TTs{SingleLineCommentToken}},
|
||||
{"a=/regexp", TTs{IdentifierToken, PunctuatorToken, RegexpToken}},
|
||||
{"\\u002", TTs{UnknownToken, IdentifierToken}},
|
||||
|
||||
|
@ -97,6 +97,9 @@ func TestTokens(t *testing.T) {
|
|||
{"function f(){}/1/g", TTs{IdentifierToken, IdentifierToken, PunctuatorToken, PunctuatorToken, PunctuatorToken, PunctuatorToken, RegexpToken}},
|
||||
{"this.return/1/g", TTs{IdentifierToken, PunctuatorToken, IdentifierToken, PunctuatorToken, NumericToken, PunctuatorToken, IdentifierToken}},
|
||||
{"(a+b)/1/g", TTs{PunctuatorToken, IdentifierToken, PunctuatorToken, IdentifierToken, PunctuatorToken, PunctuatorToken, NumericToken, PunctuatorToken, IdentifierToken}},
|
||||
{"`\\``", TTs{TemplateToken}},
|
||||
{"`\\${ 1 }`", TTs{TemplateToken}},
|
||||
{"`\\\r\n`", TTs{TemplateToken}},
|
||||
|
||||
// go fuzz
|
||||
{"`", TTs{UnknownToken}},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue