| 1142 | migrate_slot_usage(node, path, state); |
| 1143 | }, |
| 1144 | SvelteComponent(node, { state, next, path }) { |
| 1145 | next(); |
| 1146 | |
| 1147 | migrate_slot_usage(node, path, state); |
| 1148 | |
| 1149 | let expression = state.str |
| 1150 | .snip( |
| 1151 | /** @type {number} */ (node.expression.start), |
| 1152 | /** @type {number} */ (node.expression.end) |
| 1153 | ) |
| 1154 | .toString(); |
| 1155 | |
| 1156 | if ( |
| 1157 | (node.expression.type !== 'Identifier' && node.expression.type !== 'MemberExpression') || |
| 1158 | !regex_valid_component_name.test(expression) |
| 1159 | ) { |
| 1160 | let current_expression = expression; |
| 1161 | expression = state.scope.generate('SvelteComponent'); |
| 1162 | let needs_derived = true; |
| 1163 | for (let i = path.length - 1; i >= 0; i--) { |
| 1164 | const part = path[i]; |
| 1165 | if ( |
| 1166 | part.type === 'EachBlock' || |
| 1167 | part.type === 'AwaitBlock' || |
| 1168 | part.type === 'IfBlock' || |
| 1169 | part.type === 'SnippetBlock' || |
| 1170 | part.type === 'Component' || |
| 1171 | part.type === 'SvelteComponent' |
| 1172 | ) { |
| 1173 | let position = node.start; |
| 1174 | if (i !== path.length - 1) { |
| 1175 | for (let modifier = 1; modifier < path.length - i; modifier++) { |
| 1176 | const path_part = path[i + modifier]; |
| 1177 | if ('start' in path_part) { |
| 1178 | position = /** @type {number} */ (path_part.start); |
| 1179 | break; |
| 1180 | } |
| 1181 | } |
| 1182 | } |
| 1183 | const indent = state.str.original.substring( |
| 1184 | state.str.original.lastIndexOf('\n', position) + 1, |
| 1185 | position |
| 1186 | ); |
| 1187 | state.str.appendRight( |
| 1188 | position, |
| 1189 | `{@const ${expression} = ${current_expression}}\n${indent}` |
| 1190 | ); |
| 1191 | needs_derived = false; |
| 1192 | break; |
| 1193 | } |
| 1194 | } |
| 1195 | if (needs_derived) { |
| 1196 | if (state.derived_components.has(current_expression)) { |
| 1197 | expression = /** @type {string} */ (state.derived_components.get(current_expression)); |
| 1198 | } else { |
| 1199 | state.derived_components.set(current_expression, expression); |
| 1200 | } |
| 1201 | } |