expression.js — svelte Source File
Architecture documentation for expression.js, a javascript file in the svelte codebase. 7 imports, 2 dependents.
Entity Profile
Dependency Diagram
graph LR 8b705104_0cb9_c5c8_5bed_6dcfe73592d3["expression.js"] 2627a38d_1d02_8fc1_b764_b2aaf06f372b["acorn.js"] 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 --> 2627a38d_1d02_8fc1_b764_b2aaf06f372b bb0eb4c2_ab75_feac_3814_01d1e4346bb8["parse_expression_at"] 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 --> bb0eb4c2_ab75_feac_3814_01d1e4346bb8 ce051dbd_4cf1_f117_d66e_12cfa122de37["patterns.js"] 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 --> ce051dbd_4cf1_f117_d66e_12cfa122de37 495501a4_a342_6a4d_ac11_e3e2fee8b218["errors.js"] 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 --> 495501a4_a342_6a4d_ac11_e3e2fee8b218 a146f6ac_0088_8736_b6ce_318f9f115170["e"] 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 --> a146f6ac_0088_8736_b6ce_318f9f115170 0d221a90_b1cc_5826_235e_98f5216d6400["bracket.js"] 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 --> 0d221a90_b1cc_5826_235e_98f5216d6400 b3551700_3c95_8e19_dbb3_fb1e46ccae14["find_matching_bracket"] 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 --> b3551700_3c95_8e19_dbb3_fb1e46ccae14 206889ff_1f9f_b6c1_d530_059d001e1cf4["element.js"] 206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 367a364a_2912_a1aa_b2e1_d97a82783c38["tag.js"] 367a364a_2912_a1aa_b2e1_d97a82783c38 --> 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 style 8b705104_0cb9_c5c8_5bed_6dcfe73592d3 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
/** @import { Expression } from 'estree' */
/** @import { Parser } from '../index.js' */
import { parse_expression_at } from '../acorn.js';
import { regex_whitespace } from '../../patterns.js';
import * as e from '../../../errors.js';
import { find_matching_bracket } from '../utils/bracket.js';
/**
* @param {Parser} parser
* @param {string} [opening_token]
* @returns {Expression | undefined}
*/
export function get_loose_identifier(parser, opening_token) {
// Find the next } and treat it as the end of the expression
const end = find_matching_bracket(parser.template, parser.index, opening_token ?? '{');
if (end) {
const start = parser.index;
parser.index = end;
// We don't know what the expression is and signal this by returning an empty identifier
return {
type: 'Identifier',
start,
end,
name: ''
};
}
}
/**
* @param {Parser} parser
* @param {string} [opening_token]
* @param {boolean} [disallow_loose]
* @returns {Expression}
*/
export default function read_expression(parser, opening_token, disallow_loose) {
try {
let comment_index = parser.root.comments.length;
const node = parse_expression_at(
parser.template,
parser.root.comments,
parser.ts,
parser.index
);
let num_parens = 0;
let i = parser.root.comments.length;
while (i-- > comment_index) {
const comment = parser.root.comments[i];
if (comment.end < node.start) {
parser.index = comment.end;
break;
}
}
for (let i = parser.index; i < /** @type {number} */ (node.start); i += 1) {
if (parser.template[i] === '(') num_parens += 1;
}
let index = /** @type {number} */ (node.end);
const last_comment = parser.root.comments.at(-1);
if (last_comment && last_comment.end > index) index = last_comment.end;
while (num_parens > 0) {
const char = parser.template[index];
if (char === ')') {
num_parens -= 1;
} else if (!regex_whitespace.test(char)) {
e.expected_token(index, ')');
}
index += 1;
}
parser.index = index;
return /** @type {Expression} */ (node);
} catch (err) {
// 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
if (parser.loose && !disallow_loose) {
const expression = get_loose_identifier(parser, opening_token);
if (expression) {
return expression;
}
}
parser.acorn_error(err);
}
}
Domain
Subdomains
Functions
Imported By
Source
Frequently Asked Questions
What does expression.js do?
expression.js is a source file in the svelte codebase, written in javascript. It belongs to the Compiler domain, Transformer subdomain.
What functions are defined in expression.js?
expression.js defines 2 function(s): get_loose_identifier, read_expression.
What does expression.js depend on?
expression.js imports 7 module(s): acorn.js, bracket.js, e, errors.js, find_matching_bracket, parse_expression_at, patterns.js.
What files import expression.js?
expression.js is imported by 2 file(s): element.js, tag.js.
Where is expression.js in the architecture?
expression.js is located at packages/svelte/src/compiler/phases/1-parse/read/expression.js (domain: Compiler, subdomain: Transformer, directory: packages/svelte/src/compiler/phases/1-parse/read).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free