@ -33,11 +33,8 @@ export function get_loose_identifier(parser, opening_token) {
* @ returns { Expression }
* @ returns { Expression }
* /
* /
export default function read _expression ( parser , opening _token , disallow _loose ) {
export default function read _expression ( parser , opening _token , disallow _loose ) {
/** @type {ReturnType<typeof parse_expression_at>} */
let node ;
try {
try {
node = parse _expression _at ( parser , parser . template , parser . index ) ;
const node = parse _expression _at ( parser , parser . template , parser . index ) ;
let index = /** @type {number} */ ( node . end ) ;
let index = /** @type {number} */ ( node . end ) ;
@ -45,6 +42,24 @@ export default function read_expression(parser, opening_token, disallow_loose) {
if ( last _comment && last _comment . end > index ) index = last _comment . end ;
if ( last _comment && last _comment . end > index ) index = last _comment . end ;
parser . index = index ;
parser . index = index ;
if ( ! parser . ts ) {
let j = parser . index ;
while ( j < parser . template . length && regex _whitespace . test ( parser . template [ j ] ) ) j ++ ;
const remaining = parser . template . slice ( j ) ;
if (
remaining [ 0 ] === ':' ||
/^satisfies[\s(]/ . test ( remaining ) ||
( remaining [ 0 ] === '!' && remaining [ 1 ] !== '=' ) ||
( /^as[\s(]/ . test ( remaining ) && ! disallow _loose )
) {
e . js _parse _error ( j , ` Unexpected token (did you forget to add \` lang="ts" \` ?) ` ) ;
}
}
return /** @type {Expression} */ ( remove _parens ( node ) ) ;
} catch ( err ) {
} catch ( err ) {
// If we are in an each loop we need the error to be thrown in cases like
// If we are in an each loop we need the error to be thrown in cases like
// `as { y = z }` so we still throw and handle the error there
// `as { y = z }` so we still throw and handle the error there
@ -57,22 +72,4 @@ export default function read_expression(parser, opening_token, disallow_loose) {
throw err ;
throw err ;
}
}
if ( ! parser . ts ) {
let j = parser . index ;
while ( j < parser . template . length && regex _whitespace . test ( parser . template [ j ] ) ) j ++ ;
const remaining = parser . template . slice ( j ) ;
if (
remaining [ 0 ] === ':' ||
/^satisfies[\s(]/ . test ( remaining ) ||
( remaining [ 0 ] === '!' && remaining [ 1 ] !== '=' ) ||
( /^as[\s(]/ . test ( remaining ) && ! disallow _loose )
) {
e . js _parse _error ( j , ` Unexpected token (did you forget to add \` lang="ts" \` ?) ` ) ;
}
}
return /** @type {Expression} */ ( remove _parens ( node ) ) ;
}
}