@mostfeatured/dbi 0.2.27 → 0.2.29-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"svelteParser.d.ts","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"svelteParser.d.ts","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteParser.ts"],"names":[],"mappings":"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"}
@@ -975,24 +975,30 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
975
975
 
976
976
  // Actual render execution
977
977
  async function __executeRender__() {
978
+ console.log("[DBI-Svelte DEBUG] __executeRender__ called");
978
979
  // Run pre-render callbacks (async, awaited)
979
980
  await __runPreRender__();
980
981
 
982
+ console.log("[DBI-Svelte DEBUG] Calling toJSON with data:", JSON.stringify(__data__).substring(0, 200));
981
983
  var components = await __component__.toJSON({ data: __data__ });
984
+ console.log("[DBI-Svelte DEBUG] toJSON returned", components ? "components" : "null");
982
985
  var result;
983
986
 
984
987
  // Try to use current interaction if available
985
988
  if (__ctx__ && __ctx__.interaction) {
986
989
  try {
987
990
  var i = __ctx__.interaction;
991
+ console.log("[DBI-Svelte DEBUG] interaction available, replied:", i.replied, "deferred:", i.deferred, "__interactionDeferred__:", __interactionDeferred__);
988
992
 
989
993
  // Update last message reference
990
994
  if (i.message) {
991
995
  __lastMessage__ = i.message;
992
996
  }
993
997
 
994
- if (i.replied || i.deferred) {
995
- // Already replied, use message.edit with rate limit handling
998
+ // Check if interaction was deferred (our flag) or Discord.js flags
999
+ if (i.replied || i.deferred || __interactionDeferred__) {
1000
+ console.log("[DBI-Svelte DEBUG] Using message.edit (deferred path)");
1001
+ // Already replied/deferred, use message.edit with rate limit handling
996
1002
  result = await __safeEdit__(function() {
997
1003
  return i.message.edit({
998
1004
  components: components,
@@ -1000,6 +1006,7 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
1000
1006
  });
1001
1007
  });
1002
1008
  } else {
1009
+ console.log("[DBI-Svelte DEBUG] Using interaction.update");
1003
1010
  // Not replied yet, use update with rate limit handling
1004
1011
  result = await __safeEdit__(function() {
1005
1012
  return i.update({
@@ -1124,6 +1131,9 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
1124
1131
  // Track if an async interaction method was called
1125
1132
  var __asyncInteractionCalled__ = false;
1126
1133
 
1134
+ // Track if interaction was deferred (deferUpdate/deferReply)
1135
+ var __interactionDeferred__ = false;
1136
+
1127
1137
  // Wrap interaction methods to auto-render after completion
1128
1138
  var interaction = null;
1129
1139
  var ctx = null;
@@ -1146,17 +1156,24 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
1146
1156
  // Mark that async interaction was called - this prevents sync flush at handler end
1147
1157
  __asyncInteractionCalled__ = true;
1148
1158
 
1159
+ // Mark as deferred for deferUpdate/deferReply
1160
+ if (prop === 'deferUpdate' || prop === 'deferReply') {
1161
+ __interactionDeferred__ = true;
1162
+ }
1163
+
1149
1164
  var result = value.apply(target, arguments);
1150
1165
  // After the reply completes, flush any pending renders using throttled render
1151
1166
  if (result && typeof result.then === 'function') {
1152
1167
  result.then(function() {
1168
+ console.log("[DBI-Svelte DEBUG] " + prop + " completed, hasDataChanges:", __hasDataChanges__, "autoRenderEnabled:", __autoRenderEnabled__);
1153
1169
  if (__hasDataChanges__ && __autoRenderEnabled__) {
1154
1170
  __hasDataChanges__ = false;
1171
+ console.log("[DBI-Svelte DEBUG] Triggering render after " + prop);
1155
1172
  // Use throttled render which handles rate limits
1156
1173
  __throttledRender__(false);
1157
1174
  }
1158
1175
  }).catch(function(err) {
1159
- // Silently fail
1176
+ console.error("[DBI-Svelte] Render after " + prop + " failed:", err);
1160
1177
  });
1161
1178
  }
1162
1179
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"svelteParser.js","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteParser.ts"],"names":[],"mappings":"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","sourcesContent":["import * as stuffs from \"stuffs\";\r\n\r\n// Lazy imports to avoid issues with package managers that don't properly hoist dependencies\r\nlet _parse: typeof import(\"svelte/compiler\").parse;\r\n\r\nasync function ensureImports() {\r\n if (!_parse) {\r\n const svelteCompiler = await import(\"svelte/compiler\");\r\n _parse = svelteCompiler.parse;\r\n }\r\n}\r\n\r\n/**\r\n * Simple AST walker for Svelte AST nodes\r\n */\r\nfunction walkSvelteAst(node: any, callback: (node: any) => void) {\r\n if (!node || typeof node !== 'object') return;\r\n\r\n callback(node);\r\n\r\n // Walk children based on node type\r\n if (node.children && Array.isArray(node.children)) {\r\n for (const child of node.children) {\r\n walkSvelteAst(child, callback);\r\n }\r\n }\r\n if (node.fragment && node.fragment.nodes) {\r\n for (const child of node.fragment.nodes) {\r\n walkSvelteAst(child, callback);\r\n }\r\n }\r\n if (node.nodes && Array.isArray(node.nodes)) {\r\n for (const child of node.nodes) {\r\n walkSvelteAst(child, callback);\r\n }\r\n }\r\n // Handle other potential child properties\r\n if (node.else) {\r\n walkSvelteAst(node.else, callback);\r\n }\r\n if (node.consequent) {\r\n walkSvelteAst(node.consequent, callback);\r\n }\r\n if (node.alternate) {\r\n walkSvelteAst(node.alternate, callback);\r\n }\r\n if (node.then) {\r\n walkSvelteAst(node.then, callback);\r\n }\r\n if (node.catch) {\r\n walkSvelteAst(node.catch, callback);\r\n }\r\n if (node.body) {\r\n if (Array.isArray(node.body)) {\r\n for (const child of node.body) {\r\n walkSvelteAst(child, callback);\r\n }\r\n } else {\r\n walkSvelteAst(node.body, callback);\r\n }\r\n }\r\n}\r\n\r\nexport interface SvelteHandlerInfo {\r\n name: string;\r\n handlerName: string;\r\n eventType: string; // onclick, onchange, onsubmit, etc.\r\n element: string; // button, string-select, components (for modal), etc.\r\n /** If this is an inline handler, contains the extracted source code */\r\n inlineCode?: string;\r\n /** Whether this handler is an inline arrow function or function expression */\r\n isInline?: boolean;\r\n}\r\n\r\nexport interface ModalHandlerInfo {\r\n modalId: string;\r\n onsubmitHandler?: string; // Handler function name for onsubmit\r\n}\r\n\r\nexport interface SvelteValidationWarning {\r\n type: 'missing-data' | 'unused-data' | 'undefined-handler' | 'syntax-error' | 'runtime-error';\r\n message: string;\r\n details?: string;\r\n}\r\n\r\nexport interface SvelteComponentInfo {\r\n handlers: Map<string, SvelteHandlerInfo>;\r\n /** Modal onsubmit handlers keyed by modal id */\r\n modalHandlers: Map<string, ModalHandlerInfo>;\r\n scriptContent: string;\r\n processedSource: string; // Source with auto-generated names injected\r\n /** Props extracted from $props() destructuring */\r\n declaredProps: string[];\r\n /** Props that have default values (don't require data) */\r\n propsWithDefaults: string[];\r\n /** Function names declared in the script */\r\n declaredFunctions: string[];\r\n /** Inline handler code extracted from template (keyed by generated handler name) */\r\n inlineHandlers: Map<string, string>;\r\n}\r\n\r\n/**\r\n * Parse a Svelte component and extract event handlers\r\n * Also injects auto-generated names into elements that have handlers but no name\r\n */\r\nexport async function parseSvelteComponent(source: string, data?: Record<string, any>): Promise<SvelteComponentInfo> {\r\n await ensureImports();\r\n\r\n let ast;\r\n try {\r\n ast = _parse(source);\r\n } catch (parseError: any) {\r\n // Format Svelte parse error with helpful details\r\n const errorMessage = parseError.message || 'Unknown parse error';\r\n const location = parseError.start || parseError.loc;\r\n let details = errorMessage;\r\n\r\n if (location) {\r\n const lines = source.split('\\n');\r\n const lineNum = location.line || 1;\r\n const column = location.column || 0;\r\n const errorLine = lines[lineNum - 1] || '';\r\n const prevLine = lines[lineNum - 2] || '';\r\n const nextLine = lines[lineNum] || '';\r\n\r\n details = `\r\nSvelte Parse Error at line ${lineNum}, column ${column}:\r\n${errorMessage}\r\n\r\n${lineNum > 1 ? `${lineNum - 1} | ${prevLine}\\n` : ''}${lineNum} | ${errorLine}\r\n${' '.repeat(String(lineNum).length + 3 + column)}^\r\n${nextLine ? `${lineNum + 1} | ${nextLine}` : ''}\r\n`.trim();\r\n }\r\n\r\n const enhancedError = new Error(`[DBI-Svelte] Failed to parse Svelte component:\\n${details}`);\r\n (enhancedError as any).originalError = parseError;\r\n (enhancedError as any).type = 'svelte-parse-error';\r\n throw enhancedError;\r\n }\r\n\r\n const handlers = new Map<string, SvelteHandlerInfo>();\r\n const modalHandlers = new Map<string, ModalHandlerInfo>();\r\n let scriptContent = \"\";\r\n\r\n // Extract script content\r\n if (ast.instance) {\r\n scriptContent = source.substring(ast.instance.content.start, ast.instance.content.end);\r\n }\r\n\r\n // Track elements that need auto-generated names (node -> name mapping)\r\n // We'll inject these into the source after the walk\r\n const elementsNeedingNames: Array<{ node: any; name: string; handlerName: string; eventType: string; element: string }> = [];\r\n let autoNameCounter = 0;\r\n\r\n // Track inline handlers (arrow functions or function expressions in event attributes)\r\n const inlineHandlers = new Map<string, string>();\r\n let inlineHandlerCounter = 0;\r\n\r\n // Walk through HTML nodes to find event handlers\r\n walkSvelteAst(ast.html || ast.fragment, (node: any) => {\r\n if (node.type === \"Element\" || node.type === \"InlineComponent\" || node.type === \"RegularElement\" || node.type === \"Component\") {\r\n const attributes = node.attributes || [];\r\n const nodeName = node.name.toLowerCase();\r\n\r\n // Special handling for <components type=\"modal\"> elements\r\n if (nodeName === \"components\") {\r\n const typeAttr = attributes.find((attr: any) =>\r\n attr.type === \"Attribute\" && attr.name === \"type\"\r\n );\r\n const typeValue = typeAttr ? getAttributeValue(typeAttr) : null;\r\n\r\n if (typeValue === \"modal\") {\r\n // This is a modal definition - extract id and onsubmit handler\r\n const idAttr = attributes.find((attr: any) =>\r\n attr.type === \"Attribute\" && attr.name === \"id\"\r\n );\r\n const modalId = idAttr ? getAttributeValue(idAttr) : null;\r\n\r\n if (modalId) {\r\n const modalInfo: ModalHandlerInfo = { modalId };\r\n\r\n // Find onsubmit handler\r\n for (const attr of attributes) {\r\n const isOnSubmit = (attr.type === \"Attribute\" && attr.name === \"onsubmit\") ||\r\n (attr.type === \"EventHandler\" && attr.name === \"submit\");\r\n\r\n if (isOnSubmit) {\r\n let handlerName = \"\";\r\n\r\n if (attr.type === \"Attribute\" && Array.isArray(attr.value)) {\r\n const exprValue = attr.value.find((v: any) => v.type === \"ExpressionTag\" || v.type === \"MustacheTag\");\r\n if (exprValue && exprValue.expression) {\r\n if (exprValue.expression.type === \"Identifier\") {\r\n handlerName = exprValue.expression.name;\r\n } else if (exprValue.expression.type === \"CallExpression\" && exprValue.expression.callee) {\r\n handlerName = exprValue.expression.callee.name;\r\n }\r\n }\r\n } else if (attr.expression) {\r\n if (attr.expression.type === \"Identifier\") {\r\n handlerName = attr.expression.name;\r\n } else if (attr.expression.type === \"CallExpression\" && attr.expression.callee) {\r\n handlerName = attr.expression.callee.name;\r\n }\r\n }\r\n\r\n if (handlerName) {\r\n modalInfo.onsubmitHandler = handlerName;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n modalHandlers.set(modalId, modalInfo);\r\n }\r\n }\r\n return; // Don't process <components> as regular elements\r\n }\r\n\r\n // Find name attribute\r\n const nameAttr = attributes.find((attr: any) =>\r\n attr.type === \"Attribute\" && attr.name === \"name\"\r\n );\r\n\r\n // Check if element has an onclick/onchange/handler and get the handler info\r\n let foundHandler: { eventType: string; handlerName: string; inlineCode?: string; isInline?: boolean } | null = null;\r\n\r\n for (const attr of attributes) {\r\n const isEventHandler = attr.type === \"EventHandler\";\r\n const isOnAttribute = attr.type === \"Attribute\" && attr.name && attr.name.startsWith(\"on\");\r\n const isHandlerAttribute = attr.type === \"Attribute\" && attr.name === \"handler\";\r\n\r\n if (isEventHandler || isOnAttribute || isHandlerAttribute) {\r\n // For \"handler\" attribute, use the element type to determine eventType\r\n // button -> onclick, select -> onchange\r\n let eventType = attr.name;\r\n if (isHandlerAttribute) {\r\n const elementName = node.name.toLowerCase();\r\n if (elementName === \"button\") {\r\n eventType = \"onclick\";\r\n } else if (elementName.includes(\"select\")) {\r\n eventType = \"onchange\";\r\n } else {\r\n eventType = \"handler\"; // fallback\r\n }\r\n }\r\n let handlerName = \"\";\r\n let inlineCode: string | undefined;\r\n let isInline = false;\r\n\r\n if (attr.type === \"Attribute\" && Array.isArray(attr.value)) {\r\n const exprValue = attr.value.find((v: any) => v.type === \"ExpressionTag\" || v.type === \"MustacheTag\");\r\n if (exprValue && exprValue.expression) {\r\n if (exprValue.expression.type === \"Identifier\") {\r\n handlerName = exprValue.expression.name;\r\n } else if (exprValue.expression.type === \"CallExpression\" && exprValue.expression.callee) {\r\n handlerName = exprValue.expression.callee.name;\r\n } else if (exprValue.expression.type === \"ArrowFunctionExpression\" || exprValue.expression.type === \"FunctionExpression\") {\r\n // Inline arrow function or function expression - extract the code\r\n isInline = true;\r\n handlerName = `__inline_handler_${inlineHandlerCounter++}`;\r\n // Extract the source code from the expression\r\n const expr = exprValue.expression;\r\n if (expr.start !== undefined && expr.end !== undefined) {\r\n inlineCode = source.substring(expr.start, expr.end);\r\n }\r\n }\r\n }\r\n } else if (attr.expression) {\r\n if (attr.expression.type === \"Identifier\") {\r\n handlerName = attr.expression.name;\r\n } else if (attr.expression.type === \"CallExpression\" && attr.expression.callee) {\r\n handlerName = attr.expression.callee.name;\r\n } else if (attr.expression.type === \"MemberExpression\") {\r\n handlerName = extractMemberExpressionName(attr.expression);\r\n } else if (attr.expression.type === \"ArrowFunctionExpression\" || attr.expression.type === \"FunctionExpression\") {\r\n // Inline arrow function or function expression - extract the code\r\n isInline = true;\r\n handlerName = `__inline_handler_${inlineHandlerCounter++}`;\r\n // Extract the source code from the expression\r\n const expr = attr.expression;\r\n if (expr.start !== undefined && expr.end !== undefined) {\r\n inlineCode = source.substring(expr.start, expr.end);\r\n }\r\n }\r\n }\r\n\r\n if (handlerName) {\r\n foundHandler = { eventType, handlerName, inlineCode, isInline };\r\n // If it's an inline handler, store the code\r\n if (isInline && inlineCode) {\r\n inlineHandlers.set(handlerName, inlineCode);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!foundHandler) return; // No handler found, skip\r\n\r\n let componentName: string;\r\n if (nameAttr) {\r\n componentName = getAttributeValue(nameAttr);\r\n } else {\r\n // No name attribute - generate a deterministic one based on position\r\n // Use the handler name and counter for deterministic naming\r\n const positionKey = `${node.name.toLowerCase()}_${autoNameCounter++}`;\r\n\r\n // If data is provided, use/store in $autoNames for persistence across re-renders\r\n if (data) {\r\n if (!data.$autoNames) {\r\n data.$autoNames = {};\r\n }\r\n if (!data.$autoNames[positionKey]) {\r\n data.$autoNames[positionKey] = `__auto_${positionKey}`;\r\n }\r\n componentName = data.$autoNames[positionKey];\r\n } else {\r\n // No data - use deterministic name based on position\r\n componentName = `__auto_${positionKey}`;\r\n }\r\n\r\n // Track this element for source injection\r\n elementsNeedingNames.push({\r\n node,\r\n name: componentName,\r\n handlerName: foundHandler.handlerName,\r\n eventType: foundHandler.eventType,\r\n element: node.name.toLowerCase()\r\n });\r\n }\r\n\r\n // Add to handlers map\r\n handlers.set(componentName, {\r\n name: componentName,\r\n handlerName: foundHandler.handlerName,\r\n eventType: foundHandler.eventType,\r\n element: node.name.toLowerCase(),\r\n inlineCode: foundHandler.inlineCode,\r\n isInline: foundHandler.isInline,\r\n });\r\n }\r\n });\r\n\r\n // Inject auto-generated names into the source\r\n // Sort by position descending so we don't mess up offsets\r\n let processedSource = source;\r\n const sortedElements = [...elementsNeedingNames].sort((a, b) => b.node.start - a.node.start);\r\n\r\n for (const { node, name } of sortedElements) {\r\n // Find the position right after the opening tag name\r\n // e.g., <button ...> -> insert after \"button\"\r\n const tagEnd = node.start + 1 + node.name.length; // +1 for '<'\r\n processedSource = processedSource.slice(0, tagEnd) + ` name=\"${name}\"` + processedSource.slice(tagEnd);\r\n }\r\n\r\n // Extract declared props from $props() destructuring\r\n const declaredProps: string[] = [];\r\n const propsWithDefaults: string[] = [];\r\n const propsMatch = scriptContent.match(/(?:const|let)\\s+\\{([\\s\\S]*?)\\}\\s*=\\s*\\$props\\(\\)/);\r\n if (propsMatch) {\r\n const propsContent = propsMatch[1];\r\n // Remove comments first\r\n const cleanedContent = propsContent\r\n .replace(/\\/\\/.*$/gm, '')\r\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\r\n const props = parsePropsContent(cleanedContent);\r\n for (const prop of props) {\r\n if (prop.name) {\r\n declaredProps.push(prop.name);\r\n if (prop.defaultValue !== undefined) {\r\n propsWithDefaults.push(prop.name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Extract declared function names\r\n const declaredFunctions: string[] = [];\r\n const funcRegex = /(?:async\\s+)?function\\s+(\\w+)\\s*\\(/g;\r\n let funcMatch;\r\n while ((funcMatch = funcRegex.exec(scriptContent)) !== null) {\r\n declaredFunctions.push(funcMatch[1]);\r\n }\r\n // Also match arrow functions assigned to variables: const/let/var name = (async) () =>\r\n const arrowRegex = /(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s*)?\\([^)]*\\)\\s*=>/g;\r\n while ((funcMatch = arrowRegex.exec(scriptContent)) !== null) {\r\n declaredFunctions.push(funcMatch[1]);\r\n }\r\n\r\n return {\r\n handlers,\r\n modalHandlers,\r\n scriptContent,\r\n processedSource,\r\n declaredProps,\r\n propsWithDefaults,\r\n declaredFunctions,\r\n inlineHandlers\r\n };\r\n}\r\n\r\n/**\r\n * Extract the full name from a MemberExpression (e.g., obj.method)\r\n */\r\nfunction extractMemberExpressionName(expr: any): string {\r\n if (expr.type === \"Identifier\") {\r\n return expr.name;\r\n }\r\n if (expr.type === \"MemberExpression\") {\r\n const object = extractMemberExpressionName(expr.object);\r\n const property = expr.property.name || expr.property.value;\r\n return `${object}.${property}`;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Get the value from an attribute\r\n */\r\nfunction getAttributeValue(attr: any): string {\r\n if (!attr.value) return \"\";\r\n\r\n if (Array.isArray(attr.value)) {\r\n // Static text value\r\n if (attr.value[0]?.type === \"Text\") {\r\n return attr.value[0].data;\r\n }\r\n // Expression value\r\n if (attr.value[0]?.expression) {\r\n return extractExpressionValue(attr.value[0].expression);\r\n }\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Extract value from an expression\r\n */\r\nfunction extractExpressionValue(expr: any): string {\r\n if (expr.type === \"Identifier\") {\r\n return expr.name;\r\n }\r\n if (expr.type === \"Literal\") {\r\n return String(expr.value);\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Parse $props() destructuring content with proper brace/bracket counting\r\n * Handles nested objects like: { name, options = { a: 1, b: [1, 2] }, count = 0 }\r\n */\r\nfunction parsePropsContent(content: string): Array<{ name: string; defaultValue?: string }> {\r\n const props: Array<{ name: string; defaultValue?: string }> = [];\r\n let current = '';\r\n let braceCount = 0;\r\n let bracketCount = 0;\r\n let parenCount = 0;\r\n let inString: string | null = null;\r\n\r\n for (let i = 0; i <= content.length; i++) {\r\n const char = content[i];\r\n const prevChar = i > 0 ? content[i - 1] : '';\r\n\r\n // Handle string boundaries\r\n if ((char === '\"' || char === \"'\" || char === '`') && prevChar !== '\\\\') {\r\n if (inString === char) {\r\n inString = null;\r\n } else if (!inString) {\r\n inString = char;\r\n }\r\n }\r\n\r\n // Only process structural characters when not in a string\r\n if (!inString) {\r\n if (char === '{') braceCount++;\r\n else if (char === '}') braceCount--;\r\n else if (char === '[') bracketCount++;\r\n else if (char === ']') bracketCount--;\r\n else if (char === '(') parenCount++;\r\n else if (char === ')') parenCount--;\r\n\r\n // Split on comma only when at top level (no nested braces/brackets/parens)\r\n if ((char === ',' || i === content.length) && braceCount === 0 && bracketCount === 0 && parenCount === 0) {\r\n const trimmed = current.trim();\r\n if (trimmed) {\r\n // Parse \"name = defaultValue\" or just \"name\"\r\n const equalsIndex = trimmed.indexOf('=');\r\n if (equalsIndex > 0) {\r\n const name = trimmed.substring(0, equalsIndex).trim();\r\n const defaultValue = trimmed.substring(equalsIndex + 1).trim();\r\n props.push({ name, defaultValue });\r\n } else {\r\n props.push({ name: trimmed });\r\n }\r\n }\r\n current = '';\r\n continue;\r\n }\r\n }\r\n\r\n if (i < content.length) {\r\n current += char;\r\n }\r\n }\r\n\r\n return props;\r\n}\r\n\r\n/**\r\n * Validate a Svelte component and return warnings\r\n * Call this during development/registration to catch potential issues early\r\n */\r\nexport function validateSvelteComponent(\r\n componentInfo: SvelteComponentInfo,\r\n data: Record<string, any> = {},\r\n componentName: string = 'unknown'\r\n): SvelteValidationWarning[] {\r\n const warnings: SvelteValidationWarning[] = [];\r\n\r\n // Skip internal props/data keys (used by the framework)\r\n const internalKeys = ['$ref', '$unRef', '__unRefWrapped__', '$autoNames', 'data'];\r\n\r\n // 1. Check for props declared but not provided in data (missing required data)\r\n // Skip props that have default values - they don't require data\r\n for (const prop of componentInfo.declaredProps) {\r\n if (internalKeys.includes(prop)) continue;\r\n if (componentInfo.propsWithDefaults.includes(prop)) continue; // Has default, not required\r\n if (!(prop in data)) {\r\n warnings.push({\r\n type: 'missing-data',\r\n message: `[${componentName}] Prop \"${prop}\" is declared in $props() without a default value but not provided in data`,\r\n details: `Add \"${prop}\" to your data object or provide a default value in $props()`\r\n });\r\n }\r\n }\r\n\r\n // 2. Check for data provided but not declared in props (potential typo or unused)\r\n for (const key of Object.keys(data)) {\r\n if (internalKeys.includes(key)) continue;\r\n if (key.startsWith('$')) continue; // Skip all $-prefixed internal keys\r\n if (!componentInfo.declaredProps.includes(key)) {\r\n warnings.push({\r\n type: 'unused-data',\r\n message: `[${componentName}] Data key \"${key}\" is provided but not declared in $props()`,\r\n details: `This data won't be accessible in the component. Add it to $props() destructuring.`\r\n });\r\n }\r\n }\r\n\r\n // 3. Check for undefined handlers referenced in elements\r\n // Skip inline handlers (they are extracted from template, not defined in script)\r\n for (const [elementName, handlerInfo] of componentInfo.handlers) {\r\n // Skip inline handlers - they are defined in the template, not the script\r\n if (handlerInfo.isInline) continue;\r\n if (!componentInfo.declaredFunctions.includes(handlerInfo.handlerName)) {\r\n warnings.push({\r\n type: 'undefined-handler',\r\n message: `[${componentName}] Handler \"${handlerInfo.handlerName}\" referenced by <${handlerInfo.element} name=\"${elementName}\"> is not defined`,\r\n details: `Make sure to define \"function ${handlerInfo.handlerName}(ctx) { ... }\" in your script`\r\n });\r\n }\r\n }\r\n\r\n // 4. Check for undefined modal submit handlers\r\n for (const [modalId, modalInfo] of componentInfo.modalHandlers) {\r\n if (modalInfo.onsubmitHandler && !componentInfo.declaredFunctions.includes(modalInfo.onsubmitHandler)) {\r\n warnings.push({\r\n type: 'undefined-handler',\r\n message: `[${componentName}] Modal submit handler \"${modalInfo.onsubmitHandler}\" for modal \"${modalId}\" is not defined`,\r\n details: `Make sure to define \"function ${modalInfo.onsubmitHandler}(ctx, fields) { ... }\" in your script`\r\n });\r\n }\r\n }\r\n\r\n // 5. Check for modal handler signatures (ctx parameter is optional for regular handlers)\r\n // Only modal handlers MUST have fields parameter to access submitted data\r\n const handlerFunctionRegex = /(?:async\\s+)?function\\s+(\\w+)\\s*\\(\\s*(\\w*)\\s*(?:,\\s*(\\w+))?\\s*\\)/g;\r\n let match;\r\n const scriptContent = componentInfo.scriptContent;\r\n\r\n while ((match = handlerFunctionRegex.exec(scriptContent)) !== null) {\r\n const funcName = match[1];\r\n const firstParam = match[2];\r\n const secondParam = match[3];\r\n\r\n // Only check modal handlers - they need 'fields' param to access form data\r\n const isModalHandler = Array.from(componentInfo.modalHandlers.values()).some(m => m.onsubmitHandler === funcName);\r\n\r\n if (isModalHandler && !secondParam) {\r\n warnings.push({\r\n type: 'syntax-error',\r\n message: `[${componentName}] Modal handler \"${funcName}\" should have \"ctx\" and \"fields\" parameters`,\r\n details: `Change to \"function ${funcName}(ctx, fields) { ... }\" to receive submitted form data`\r\n });\r\n }\r\n }\r\n\r\n // 6. Check for common template mistakes\r\n const templateContent = componentInfo.processedSource;\r\n\r\n // Check for onclick= without braces (common mistake)\r\n const badOnClickRegex = /onclick\\s*=\\s*[\"']([^\"']+)[\"']/gi;\r\n while ((match = badOnClickRegex.exec(templateContent)) !== null) {\r\n if (!match[1].startsWith('{')) {\r\n warnings.push({\r\n type: 'syntax-error',\r\n message: `[${componentName}] onclick handler should use curly braces: onclick={${match[1]}}`,\r\n details: `String values are not valid for event handlers. Use onclick={handlerName} syntax.`\r\n });\r\n }\r\n }\r\n\r\n // Check for undefined variables in {expression} blocks (basic check)\r\n const expressionRegex = /\\{([^}]+)\\}/g;\r\n const knownIdentifiers = new Set([\r\n ...componentInfo.declaredProps,\r\n ...componentInfo.declaredFunctions,\r\n // Common Svelte/JS globals\r\n 'true', 'false', 'null', 'undefined', 'console', 'Math', 'JSON', 'Array', 'Object',\r\n 'Date', 'Number', 'String', 'Boolean', 'Promise', 'Map', 'Set',\r\n // Common Svelte constructs\r\n '#if', '/if', '#each', '/each', '#await', '/await', ':else', ':then', ':catch',\r\n '@html', '@debug', '@const'\r\n ]);\r\n\r\n // Add variables from script (let, const, var declarations)\r\n const varDeclRegex = /(?:let|const|var)\\s+(\\w+)/g;\r\n while ((match = varDeclRegex.exec(scriptContent)) !== null) {\r\n knownIdentifiers.add(match[1]);\r\n }\r\n\r\n return warnings;\r\n}\r\n\r\n/**\r\n * Log validation warnings to console with colors\r\n */\r\nexport function logValidationWarnings(warnings: SvelteValidationWarning[]): void {\r\n if (warnings.length === 0) return;\r\n\r\n console.warn(`\\n⚠️ Svelte Component Validation Warnings (${warnings.length}):`);\r\n\r\n for (const warning of warnings) {\r\n const icon = warning.type === 'missing-data' ? '❌' :\r\n warning.type === 'unused-data' ? '⚠️' :\r\n warning.type === 'undefined-handler' ? '🔗' :\r\n warning.type === 'syntax-error' ? '💥' : '⚡';\r\n\r\n console.warn(` ${icon} ${warning.message}`);\r\n if (warning.details) {\r\n console.warn(` └─ ${warning.details}`);\r\n }\r\n }\r\n console.warn('');\r\n}\r\n\r\nexport interface HandlerContextResult {\r\n handlers: Record<string, Function>;\r\n effects: Function[];\r\n runEffects: () => void;\r\n hasPendingRender: () => boolean;\r\n flushRender: () => Promise<void>;\r\n wrappedCtx: any; // Proxy-wrapped ctx for passing to handlers\r\n // Lifecycle hooks\r\n mountCallbacks: Function[];\r\n destroyCallbacks: Function[];\r\n preRenderCallbacks: Function[];\r\n afterRenderCallbacks: Function[];\r\n runMount: () => void;\r\n runDestroy: () => void;\r\n runPreRender: () => Promise<void>;\r\n runAfterRender: () => void;\r\n // Handler execution tracking\r\n setInHandler: (value: boolean) => void;\r\n // Manual render function\r\n render: (immediate?: boolean) => Promise<void>;\r\n}\r\n\r\n/**\r\n * Parse import statements from script and extract module info\r\n */\r\ninterface ImportInfo {\r\n moduleName: string;\r\n imports: { name: string; alias?: string }[];\r\n isDefault: boolean;\r\n defaultName?: string;\r\n}\r\n\r\nfunction parseImports(script: string): { imports: ImportInfo[]; cleanedScript: string } {\r\n const imports: ImportInfo[] = [];\r\n\r\n // Match: import { a, b as c } from \"module\"\r\n // Match: import name from \"module\"\r\n // Match: import * as name from \"module\"\r\n const importRegex = /import\\s+(?:(\\w+)\\s*,?\\s*)?(?:\\{\\s*([^}]+)\\s*\\})?(?:\\*\\s+as\\s+(\\w+))?\\s+from\\s+[\"']([^\"']+)[\"'];?/g;\r\n\r\n let cleanedScript = script;\r\n let match;\r\n\r\n while ((match = importRegex.exec(script)) !== null) {\r\n const [fullMatch, defaultImport, namedImports, namespaceImport, moduleName] = match;\r\n\r\n // Skip svelte internal imports - we provide these ourselves\r\n if (moduleName === 'svelte' || moduleName.startsWith('svelte/')) {\r\n cleanedScript = cleanedScript.replace(fullMatch, '');\r\n continue;\r\n }\r\n\r\n const importInfo: ImportInfo = {\r\n moduleName,\r\n imports: [],\r\n isDefault: false\r\n };\r\n\r\n // Default import: import name from \"module\"\r\n if (defaultImport) {\r\n importInfo.isDefault = true;\r\n importInfo.defaultName = defaultImport;\r\n }\r\n\r\n // Namespace import: import * as name from \"module\"\r\n if (namespaceImport) {\r\n importInfo.isDefault = true;\r\n importInfo.defaultName = namespaceImport;\r\n }\r\n\r\n // Named imports: import { a, b as c } from \"module\"\r\n if (namedImports) {\r\n const parts = namedImports.split(',').map(s => s.trim()).filter(Boolean);\r\n for (const part of parts) {\r\n const aliasMatch = part.match(/^(\\w+)\\s+as\\s+(\\w+)$/);\r\n if (aliasMatch) {\r\n importInfo.imports.push({ name: aliasMatch[1], alias: aliasMatch[2] });\r\n } else {\r\n importInfo.imports.push({ name: part });\r\n }\r\n }\r\n }\r\n\r\n imports.push(importInfo);\r\n cleanedScript = cleanedScript.replace(fullMatch, '');\r\n }\r\n\r\n return { imports, cleanedScript };\r\n}\r\n\r\n/**\r\n * Load modules and create injection variables\r\n */\r\nfunction loadModules(imports: ImportInfo[], sourceDir?: string): { modules: Record<string, any>; varDeclarations: string } {\r\n const modules: Record<string, any> = {};\r\n const declarations: string[] = [];\r\n const path = require(\"path\");\r\n\r\n for (const importInfo of imports) {\r\n try {\r\n // Resolve relative paths from source file directory\r\n const resolvedPath = importInfo.moduleName.startsWith('.') && sourceDir\r\n ? path.resolve(sourceDir, importInfo.moduleName)\r\n : importInfo.moduleName;\r\n // Try to require the module\r\n const mod = require(resolvedPath);\r\n\r\n if (importInfo.isDefault && importInfo.defaultName) {\r\n // Default or namespace import\r\n modules[importInfo.defaultName] = mod.default || mod;\r\n declarations.push(`var ${importInfo.defaultName} = __modules__[\"${importInfo.defaultName}\"];`);\r\n }\r\n\r\n // Named imports\r\n for (const imp of importInfo.imports) {\r\n const varName = imp.alias || imp.name;\r\n modules[varName] = mod[imp.name];\r\n declarations.push(`var ${varName} = __modules__[\"${varName}\"];`);\r\n }\r\n } catch (err) {\r\n // Module import failed\r\n }\r\n }\r\n\r\n return { modules, varDeclarations: declarations.join('\\n') };\r\n}\r\n\r\n/**\r\n * Create a handler context from script content\r\n * This evaluates the Svelte script and returns the handler functions and effects\r\n * @param sourceDir - The directory of the source file (used for resolving relative imports)\r\n * @param inlineHandlers - Map of inline handler names to their source code (extracted from template)\r\n */\r\nexport function createHandlerContext(scriptContent: string, initialData: Record<string, any> = {}, component?: any, ctx?: any, sourceDir?: string, inlineHandlers?: Map<string, string>): HandlerContextResult {\r\n const handlers: Record<string, Function> = {};\r\n const effects: Function[] = [];\r\n\r\n try {\r\n // Parse and extract imports first\r\n const { imports, cleanedScript } = parseImports(scriptContent);\r\n const { modules, varDeclarations } = loadModules(imports, sourceDir);\r\n\r\n // Extract only function declarations from the script\r\n const functionNames = extractFunctionNames(cleanedScript);\r\n\r\n // Extract $effect calls and convert them to collectable functions\r\n const effectBodies = extractEffectBodies(cleanedScript);\r\n\r\n // Process script to be safe for evaluation:\r\n // 1. Remove reactive declarations (let x = $state(...))\r\n // 2. Remove $props destructuring\r\n // 3. Convert $effect to __registerEffect__\r\n // 4. Keep only function declarations\r\n\r\n // First, remove comments from the script to avoid regex issues with braces in comments\r\n let scriptWithoutComments = cleanedScript\r\n // Remove single-line comments (but preserve the newline)\r\n .replace(/\\/\\/.*$/gm, '')\r\n // Remove multi-line comments\r\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\r\n\r\n let processedScript = scriptWithoutComments\r\n // Remove $state declarations completely or make them var\r\n .replace(/(?:const|let)\\s+(\\w+)\\s*=\\s*\\$state\\(([^)]*)\\);?/g, 'var $1 = $2;')\r\n // Remove $derived declarations but keep the value\r\n .replace(/(?:const|let)\\s+(\\w+)\\s*=\\s*\\$derived\\(([^)]+)\\);?/g, 'var $1 = $2;')\r\n // Convert $effect calls to __registerEffect__ calls\r\n .replace(/\\$effect\\s*\\(\\s*((?:function\\s*\\([^)]*\\)|\\([^)]*\\)\\s*=>|\\(\\)\\s*=>)[^}]*\\{[\\s\\S]*?\\}\\s*)\\);?/g, '__registerEffect__($1);')\r\n // Simpler $effect pattern: $effect(() => { ... })\r\n .replace(/\\$effect\\s*\\(\\s*\\(\\)\\s*=>\\s*\\{([\\s\\S]*?)\\}\\s*\\);?/g, '__registerEffect__(function() {$1});');\r\n\r\n // Handle $props destructuring with proper brace counting (supports nested objects like { options = { a: 1 } })\r\n processedScript = processedScript.replace(/(?:const|let)\\s+\\{([\\s\\S]*?)\\}\\s*=\\s*\\$props\\(\\);?/g, (match) => {\r\n // Find the opening brace after 'const' or 'let'\r\n const letIndex = match.indexOf('{');\r\n if (letIndex === -1) return match;\r\n\r\n // Use brace counting to find the matching closing brace\r\n let braceCount = 0;\r\n let startIndex = letIndex;\r\n let endIndex = -1;\r\n\r\n for (let i = startIndex; i < match.length; i++) {\r\n if (match[i] === '{') braceCount++;\r\n else if (match[i] === '}') {\r\n braceCount--;\r\n if (braceCount === 0) {\r\n endIndex = i;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (endIndex === -1) return match;\r\n\r\n // Extract the content between braces\r\n const content = match.substring(startIndex + 1, endIndex);\r\n\r\n // Parse props with proper handling of nested braces\r\n const props = parsePropsContent(content);\r\n\r\n return props.map(prop => {\r\n if (!prop.name || prop.name === 'data') return '';\r\n if (prop.defaultValue !== undefined) {\r\n return `var ${prop.name} = data.${prop.name} ?? ${prop.defaultValue};`;\r\n }\r\n return `var ${prop.name} = data.${prop.name};`;\r\n }).filter(Boolean).join('\\n');\r\n });\r\n\r\n // Add module variable declarations at the beginning of processed script\r\n if (varDeclarations) {\r\n processedScript = varDeclarations + '\\n\\n' + processedScript;\r\n }\r\n\r\n // Wrap everything in an IIFE that takes data and component as parameters\r\n // This ensures data and 'this' are always available in the function scope\r\n // Also provides helper functions: render(), update() and rerender()\r\n // Data is wrapped in a Proxy for automatic reactivity\r\n // Interaction methods (reply, followUp, deferReply) are wrapped to auto-render after completion\r\n const wrappedScript = `\r\n return function(__data__, __component__, __ctx__, __modules__) {\r\n __modules__ = __modules__ || {};\r\n var self = __component__;\r\n var __effects__ = [];\r\n var __renderPending__ = false;\r\n var __autoRenderEnabled__ = true;\r\n var __hasDataChanges__ = false;\r\n \r\n // Lifecycle callbacks\r\n var __mountCallbacks__ = [];\r\n var __destroyCallbacks__ = [];\r\n var __preRenderCallbacks__ = [];\r\n var __afterRenderCallbacks__ = [];\r\n var __isMounted__ = false;\r\n \r\n // Store last message reference for background updates (intervals, timeouts)\r\n var __lastMessage__ = __ctx__?.interaction?.message || null;\r\n \r\n // Throttle configuration\r\n var __throttleMinInterval__ = 250; // Minimum ms between renders\r\n var __lastRenderTime__ = 0;\r\n var __pendingRenderTimeout__ = null;\r\n var __isRateLimited__ = false;\r\n var __rateLimitEndTime__ = 0;\r\n \r\n function __registerEffect__(fn) {\r\n __effects__.push(fn);\r\n }\r\n \r\n // Lifecycle: onMount - called when component is first rendered\r\n // If callback returns a function, that function is called on destroy\r\n function onMount(fn) {\r\n __mountCallbacks__.push(fn);\r\n }\r\n \r\n // Lifecycle: onDestroy - called when ref is cleaned up\r\n function onDestroy(fn) {\r\n __destroyCallbacks__.push(fn);\r\n }\r\n \r\n // Lifecycle: onPreRender - called before each render (async, awaited)\r\n function onPreRender(fn) {\r\n __preRenderCallbacks__.push(fn);\r\n }\r\n \r\n // Lifecycle: onAfterRender - called after each render completes\r\n function onAfterRender(fn) {\r\n __afterRenderCallbacks__.push(fn);\r\n }\r\n \r\n // Run all pre-render callbacks (async)\r\n async function __runPreRender__() {\r\n for (var i = 0; i < __preRenderCallbacks__.length; i++) {\r\n try {\r\n await __preRenderCallbacks__[i]();\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] Pre-render callback failed:\", err);\r\n throw err;\r\n }\r\n }\r\n }\r\n \r\n // Run all after-render callbacks\r\n function __runAfterRender__() {\r\n for (var i = 0; i < __afterRenderCallbacks__.length; i++) {\r\n try {\r\n __afterRenderCallbacks__[i]();\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] After-render callback failed:\", err);\r\n throw err;\r\n }\r\n }\r\n }\r\n \r\n // Modal store - stores rendered modal definitions\r\n var __modals__ = new Map();\r\n \r\n // Register a modal (called internally when modals are parsed)\r\n function __registerModal__(modalId, modalDef) {\r\n __modals__.set(modalId, modalDef);\r\n }\r\n \r\n // Show a modal by ID and return a Promise that resolves with the submitted fields\r\n // Modal definitions are rendered from <components type=\"modal\" id=\"xxx\">\r\n // Usage: \r\n // await showModal(\"edit-product\"); // Just show, use onsubmit handler\r\n // const { fields, interaction } = await showModal(\"edit-product\"); // Get response\r\n // await showModal(\"edit-product\", { timeout: 60000 }); // 60 second timeout\r\n // await showModal(\"edit-product\", { timeout: 0 }); // No timeout (unlimited)\r\n function showModal(modalId, options) {\r\n if (!__ctx__ || !__ctx__.interaction) {\r\n return Promise.reject(new Error(\"showModal requires an interaction context\"));\r\n }\r\n \r\n // Default timeout: 10 minutes (600000ms), 0 = no timeout\r\n var timeout = (options && typeof options.timeout === 'number') ? options.timeout : 600000;\r\n \r\n // Disable auto-render IMMEDIATELY since we're showing a modal\r\n // This prevents flushRender from trying to update after modal is shown\r\n __autoRenderEnabled__ = false;\r\n __asyncInteractionCalled__ = true;\r\n \r\n // Create a promise that will be resolved when modal is submitted\r\n return new Promise(async function(resolve, reject) {\r\n var timeoutId = null;\r\n var modal = null;\r\n \r\n try {\r\n // Re-render to get latest modal definitions (reactive)\r\n var renderResult = await __component__.toJSON({ data: __data__ });\r\n \r\n // Get modals from the render result stored on component\r\n var modals = __component__.__lastRenderModals__;\r\n if (!modals) {\r\n reject(new Error(\"No modals defined in this component. Use <components type=\\\\\"modal\\\\\" id=\\\\\"...\\\\\">\")); \r\n return;\r\n }\r\n \r\n modal = modals.get(modalId);\r\n if (!modal) {\r\n reject(new Error(\"Modal '\" + modalId + \"' not found. Available modals: \" + Array.from(modals.keys()).join(\", \")));\r\n return;\r\n }\r\n \r\n // Wrapped resolve/reject to clear timeout\r\n var wrappedResolve = function(result) {\r\n if (timeoutId) clearTimeout(timeoutId);\r\n resolve(result);\r\n };\r\n var wrappedReject = function(error) {\r\n if (timeoutId) clearTimeout(timeoutId);\r\n reject(error);\r\n };\r\n \r\n // Store the promise resolver in component's pending modals map\r\n // This will be resolved when modal submit interaction is received\r\n __component__._pendingModals.set(modal.customId, { resolve: wrappedResolve, reject: wrappedReject });\r\n \r\n // Set up timeout if enabled (timeout > 0)\r\n if (timeout > 0) {\r\n timeoutId = setTimeout(function() {\r\n // Clean up pending modal\r\n __component__._pendingModals.delete(modal.customId);\r\n reject(new Error(\"Modal '\" + modalId + \"' timed out after \" + timeout + \"ms\"));\r\n }, timeout);\r\n }\r\n \r\n // Show the modal using the interaction\r\n var i = __ctx__.interaction;\r\n \r\n // Modal must be shown immediately - no deferral allowed\r\n await i.showModal({\r\n title: modal.title,\r\n customId: modal.customId,\r\n components: modal.components\r\n });\r\n \r\n // Note: Promise resolves later when modal is submitted\r\n // If you don't await for the response, the promise just hangs (which is fine)\r\n } catch (err) {\r\n // Clean up pending modal and timeout if show failed\r\n if (timeoutId) clearTimeout(timeoutId);\r\n if (modal && modal.customId) {\r\n __component__._pendingModals.delete(modal.customId);\r\n }\r\n reject(new Error(\"Failed to show modal: \" + (err.message || err)));\r\n }\r\n });\r\n }\r\n \r\n // Rate-limit aware edit function with retry\r\n function __safeEdit__(editFn, retryCount) {\r\n retryCount = retryCount || 0;\r\n var maxRetries = 3;\r\n \r\n return editFn().catch(function(err) {\r\n // Check for rate limit (429)\r\n if (err.status === 429 || (err.message && err.message.includes('rate limit'))) {\r\n var retryAfter = err.retry_after || err.retryAfter || 1;\r\n __isRateLimited__ = true;\r\n __rateLimitEndTime__ = Date.now() + (retryAfter * 1000);\r\n \r\n return new Promise(function(resolve) {\r\n setTimeout(function() {\r\n __isRateLimited__ = false;\r\n if (retryCount < maxRetries) {\r\n resolve(__safeEdit__(editFn, retryCount + 1));\r\n } else {\r\n resolve();\r\n }\r\n }, retryAfter * 1000);\r\n });\r\n }\r\n return Promise.resolve();\r\n });\r\n }\r\n \r\n // Throttled render - ensures minimum interval between renders\r\n function __throttledRender__(immediate) {\r\n var now = Date.now();\r\n var timeSinceLastRender = now - __lastRenderTime__;\r\n var waitTime = 0;\r\n \r\n // If rate limited, calculate wait time\r\n if (__isRateLimited__ && __rateLimitEndTime__ > now) {\r\n waitTime = Math.max(waitTime, __rateLimitEndTime__ - now);\r\n }\r\n \r\n // If within throttle interval, schedule for later\r\n if (!immediate && timeSinceLastRender < __throttleMinInterval__) {\r\n waitTime = Math.max(waitTime, __throttleMinInterval__ - timeSinceLastRender);\r\n }\r\n \r\n // Clear any pending render\r\n if (__pendingRenderTimeout__) {\r\n clearTimeout(__pendingRenderTimeout__);\r\n __pendingRenderTimeout__ = null;\r\n }\r\n \r\n if (waitTime > 0) {\r\n return new Promise(function(resolve) {\r\n __pendingRenderTimeout__ = setTimeout(function() {\r\n __pendingRenderTimeout__ = null;\r\n __lastRenderTime__ = Date.now();\r\n resolve(__executeRender__());\r\n }, waitTime);\r\n });\r\n }\r\n \r\n __lastRenderTime__ = now;\r\n return __executeRender__();\r\n }\r\n \r\n // Actual render execution\r\n async function __executeRender__() {\r\n // Run pre-render callbacks (async, awaited)\r\n await __runPreRender__();\r\n \r\n var components = await __component__.toJSON({ data: __data__ });\r\n var result;\r\n \r\n // Try to use current interaction if available\r\n if (__ctx__ && __ctx__.interaction) {\r\n try {\r\n var i = __ctx__.interaction;\r\n \r\n // Update last message reference\r\n if (i.message) {\r\n __lastMessage__ = i.message;\r\n }\r\n \r\n if (i.replied || i.deferred) {\r\n // Already replied, use message.edit with rate limit handling\r\n result = await __safeEdit__(function() {\r\n return i.message.edit({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n } else {\r\n // Not replied yet, use update with rate limit handling\r\n result = await __safeEdit__(function() {\r\n return i.update({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n }\r\n \r\n // Run after-render callbacks\r\n __runAfterRender__();\r\n return result;\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] Render failed:\", err);\r\n throw err;\r\n }\r\n }\r\n \r\n // Fallback: Use last message reference (for intervals/timeouts outside interaction)\r\n if (__lastMessage__) {\r\n result = await __safeEdit__(function() {\r\n return __lastMessage__.edit({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n \r\n // Run after-render callbacks\r\n __runAfterRender__();\r\n return result;\r\n }\r\n \r\n return Promise.resolve();\r\n }\r\n \r\n // Helper: Auto-detect whether to use update() or rerender()\r\n // If interaction was already replied/deferred, use message.edit\r\n // Otherwise use interaction.update\r\n function render(immediate) {\r\n return __throttledRender__(immediate);\r\n }\r\n \r\n // Track if we're inside a handler execution\r\n var __inHandlerExecution__ = false;\r\n \r\n // Track pending low-priority updates (from intervals/timeouts)\r\n var __pendingLowPriorityRender__ = false;\r\n \r\n // Mark that we have pending data changes\r\n function __markDataChanged__() {\r\n __hasDataChanges__ = true;\r\n \r\n // If we're NOT inside a handler (e.g., interval/timeout), trigger render immediately\r\n // The throttle will prevent too many renders\r\n if (!__inHandlerExecution__ && __autoRenderEnabled__ && __lastMessage__) {\r\n __hasDataChanges__ = false;\r\n __throttledRender__(false);\r\n }\r\n }\r\n \r\n // Low-priority update - used for background tasks like intervals\r\n // If a handler is currently running, skip this update (the handler's update will include our changes)\r\n function lowPriorityUpdate(callback) {\r\n if (__inHandlerExecution__) {\r\n // Handler is running - just update data, skip render\r\n // The handler will render when it finishes\r\n if (callback) callback();\r\n return;\r\n }\r\n \r\n // No handler running - proceed with update\r\n if (callback) callback();\r\n }\r\n \r\n // Flush pending render (called after interaction methods complete)\r\n function __flushRender__() {\r\n if (__hasDataChanges__ && __autoRenderEnabled__) {\r\n __hasDataChanges__ = false;\r\n render();\r\n }\r\n }\r\n \r\n // Create reactive proxy for data\r\n // Also properly forwards Object.keys/values/entries operations\r\n function __createReactiveProxy__(target, path) {\r\n if (typeof target !== 'object' || target === null) return target;\r\n \r\n return new Proxy(target, {\r\n get: function(obj, prop) {\r\n var value = obj[prop];\r\n // Wrap nested objects in proxy too\r\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\r\n return __createReactiveProxy__(value, path + '.' + String(prop));\r\n }\r\n return value;\r\n },\r\n set: function(obj, prop, value) {\r\n var oldValue = obj[prop];\r\n obj[prop] = value;\r\n // Only mark as changed if value actually changed\r\n if (oldValue !== value) {\r\n __markDataChanged__();\r\n }\r\n return true;\r\n },\r\n // Forward Object.keys/values/entries operations\r\n ownKeys: function(target) {\r\n return Reflect.ownKeys(target);\r\n },\r\n getOwnPropertyDescriptor: function(target, prop) {\r\n return Reflect.getOwnPropertyDescriptor(target, prop);\r\n },\r\n has: function(target, prop) {\r\n return Reflect.has(target, prop);\r\n }\r\n });\r\n }\r\n \r\n // Wrap data in reactive proxy\r\n var data = __createReactiveProxy__(__data__, 'data');\r\n \r\n // Track if an async interaction method was called\r\n var __asyncInteractionCalled__ = false;\r\n \r\n // Wrap interaction methods to auto-render after completion\r\n var interaction = null;\r\n var ctx = null;\r\n \r\n if (__ctx__ && __ctx__.interaction) {\r\n var originalInteraction = __ctx__.interaction;\r\n \r\n // Create a proxy for interaction that wraps reply/followUp/deferReply\r\n // Also properly forwards Object.keys/values/entries operations\r\n // Uses Reflect.get to properly handle getters with correct 'this' binding\r\n interaction = new Proxy(originalInteraction, {\r\n get: function(target, prop, receiver) {\r\n // Use Reflect.get to properly handle getters (like 'roles', 'users', etc.)\r\n // This ensures 'this' context is correct for Discord.js Collection getters\r\n var value = Reflect.get(target, prop, target);\r\n \r\n // Wrap methods that \"consume\" the interaction (reply, followUp, defer)\r\n if (prop === 'reply' || prop === 'followUp' || prop === 'deferReply' || prop === 'deferUpdate') {\r\n return function() {\r\n // Mark that async interaction was called - this prevents sync flush at handler end\r\n __asyncInteractionCalled__ = true;\r\n \r\n var result = value.apply(target, arguments);\r\n // After the reply completes, flush any pending renders using throttled render\r\n if (result && typeof result.then === 'function') {\r\n result.then(function() {\r\n if (__hasDataChanges__ && __autoRenderEnabled__) {\r\n __hasDataChanges__ = false;\r\n // Use throttled render which handles rate limits\r\n __throttledRender__(false);\r\n }\r\n }).catch(function(err) {\r\n // Silently fail\r\n });\r\n }\r\n return result;\r\n };\r\n }\r\n \r\n // Wrap update method - this one renders directly, no need to flush after\r\n if (prop === 'update') {\r\n return function() {\r\n __autoRenderEnabled__ = false; // Disable auto since we're doing manual update\r\n __asyncInteractionCalled__ = true;\r\n return value.apply(target, arguments);\r\n };\r\n }\r\n \r\n // Bind functions to original target\r\n if (typeof value === 'function') {\r\n return value.bind(target);\r\n }\r\n \r\n return value;\r\n },\r\n // Forward Object.keys/values/entries operations\r\n ownKeys: function(target) {\r\n return Reflect.ownKeys(target);\r\n },\r\n getOwnPropertyDescriptor: function(target, prop) {\r\n return Reflect.getOwnPropertyDescriptor(target, prop);\r\n },\r\n has: function(target, prop) {\r\n return Reflect.has(target, prop);\r\n }\r\n });\r\n \r\n // Create wrapped ctx with the proxied interaction\r\n // Also properly forwards Object.keys/values/entries operations\r\n ctx = new Proxy(__ctx__, {\r\n get: function(target, prop, receiver) {\r\n if (prop === 'interaction') {\r\n return interaction;\r\n }\r\n // Use Reflect.get for proper getter handling\r\n return Reflect.get(target, prop, target);\r\n },\r\n // Forward Object.keys/values/entries operations\r\n ownKeys: function(target) {\r\n return Reflect.ownKeys(target);\r\n },\r\n getOwnPropertyDescriptor: function(target, prop) {\r\n return Reflect.getOwnPropertyDescriptor(target, prop);\r\n },\r\n has: function(target, prop) {\r\n return Reflect.has(target, prop);\r\n }\r\n });\r\n }\r\n \r\n // Helper: Force update message using interaction.update (for button clicks without reply)\r\n // Helper: Force update message using interaction.update (for button clicks without reply)\r\n async function update() {\r\n if (!__ctx__ || !__ctx__.interaction) {\r\n return Promise.resolve();\r\n }\r\n __autoRenderEnabled__ = false; // Disable auto-render since manual update called\r\n var components = await __component__.toJSON({ data: __data__ });\r\n return __safeEdit__(function() {\r\n return __ctx__.interaction.update({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n }\r\n \r\n // Helper: Force re-render message using message.edit (after reply/followUp)\r\n async function rerender() {\r\n if (!__ctx__ || !__ctx__.interaction || !__ctx__.interaction.message) {\r\n return Promise.resolve();\r\n }\r\n __autoRenderEnabled__ = false; // Disable auto-render since manual rerender called\r\n var components = await __component__.toJSON({ data: __data__ });\r\n return __safeEdit__(function() {\r\n return __ctx__.interaction.message.edit({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n }\r\n \r\n // Helper: Disable auto-render (for handlers that don't need UI update)\r\n function noRender() {\r\n __autoRenderEnabled__ = false;\r\n }\r\n \r\n // Helper: Set throttle interval (minimum ms between renders)\r\n function setThrottle(ms) {\r\n __throttleMinInterval__ = ms;\r\n }\r\n \r\n // Helper: Destroy this component instance (clears intervals, timers, removes ref)\r\n // Call this when you want to clean up the component manually\r\n function destroy() {\r\n // Run all destroy callbacks (clears intervals, timers, etc.)\r\n __runDestroy__();\r\n \r\n // Clear the ref from DBI store if available\r\n if (__data__ && __data__.$ref && __component__ && __component__.dbi) {\r\n __component__.dbi.data.refs.delete(__data__.$ref);\r\n }\r\n \r\n // Disable further auto-renders\r\n __autoRenderEnabled__ = false;\r\n }\r\n \r\n // Check if there are pending data changes that need SYNC render\r\n // Returns false if async interaction was called (reply/followUp will handle render)\r\n function __hasPendingRender__() {\r\n return __hasDataChanges__ && __autoRenderEnabled__ && !__asyncInteractionCalled__;\r\n }\r\n \r\n // Synchronous flush for when handler completes without async interaction\r\n // Only called when no reply/followUp was made - uses throttled render\r\n function __syncFlushRender__() {\r\n if (__hasDataChanges__ && __autoRenderEnabled__ && !__asyncInteractionCalled__) {\r\n __hasDataChanges__ = false;\r\n return __throttledRender__(true); // immediate=true for sync flush\r\n }\r\n return Promise.resolve();\r\n }\r\n \r\n // Run all mount callbacks, if callback returns a function add it to destroy callbacks\r\n function __runMount__() {\r\n if (__isMounted__) return;\r\n __isMounted__ = true;\r\n for (var i = 0; i < __mountCallbacks__.length; i++) {\r\n try {\r\n var result = __mountCallbacks__[i]();\r\n // If mount callback returns a function, add it to destroy callbacks\r\n if (typeof result === 'function') {\r\n __destroyCallbacks__.push(result);\r\n }\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] onMount callback failed:\", err);\r\n throw err;\r\n }\r\n }\r\n }\r\n \r\n // Run all destroy callbacks\r\n function __runDestroy__() {\r\n for (var i = 0; i < __destroyCallbacks__.length; i++) {\r\n try {\r\n __destroyCallbacks__[i]();\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] onDestroy callback failed:\", err);\r\n throw err;\r\n }\r\n }\r\n // Clear pending timeouts\r\n if (__pendingRenderTimeout__) {\r\n clearTimeout(__pendingRenderTimeout__);\r\n __pendingRenderTimeout__ = null;\r\n }\r\n }\r\n \r\n // Set handler execution flag\r\n function __setInHandler__(value) {\r\n __inHandlerExecution__ = value;\r\n }\r\n \r\n ${processedScript}\r\n \r\n // Inline handlers from template (extracted arrow functions/function expressions)\r\n ${Array.from(inlineHandlers || new Map()).map(([name, code]) => {\r\n // Wrap the inline code as a named function\r\n // If it's an arrow function, convert to regular function for proper 'this' binding\r\n if (code.trim().startsWith('async')) {\r\n // async arrow function or async function\r\n if (code.includes('=>')) {\r\n // async arrow function: async (ctx) => { ... } or async () => { ... }\r\n return `var ${name} = ${code};`;\r\n } else {\r\n // async function expression: async function(ctx) { ... }\r\n return `var ${name} = ${code};`;\r\n }\r\n } else if (code.includes('=>')) {\r\n // Regular arrow function: (ctx) => { ... } or () => { ... }\r\n return `var ${name} = ${code};`;\r\n } else {\r\n // Regular function expression: function(ctx) { ... }\r\n return `var ${name} = ${code};`;\r\n }\r\n }).join('\\n')}\r\n \r\n return { \r\n handlers: { ${[...functionNames, ...Array.from(inlineHandlers || new Map()).map(([name]) => name)].filter(Boolean).join(\", \")} },\r\n effects: __effects__,\r\n hasPendingRender: __hasPendingRender__,\r\n flushRender: __syncFlushRender__,\r\n wrappedCtx: ctx,\r\n mountCallbacks: __mountCallbacks__,\r\n destroyCallbacks: __destroyCallbacks__,\r\n preRenderCallbacks: __preRenderCallbacks__,\r\n afterRenderCallbacks: __afterRenderCallbacks__,\r\n runMount: __runMount__,\r\n runDestroy: __runDestroy__,\r\n runPreRender: __runPreRender__,\r\n runAfterRender: __runAfterRender__,\r\n setInHandler: __setInHandler__,\r\n render: render\r\n };\r\n };\r\n `;\r\n\r\n // Create the factory function\r\n const factoryFunc = new Function('console', wrappedScript);\r\n const createHandlers = factoryFunc(console);\r\n\r\n // Execute with the actual data, component, ctx, and imported modules to get handlers with proper closure\r\n let result;\r\n try {\r\n result = createHandlers(initialData, component, ctx, modules);\r\n } catch (execError) {\r\n throw execError;\r\n }\r\n\r\n Object.assign(handlers, result.handlers || {});\r\n effects.push(...(result.effects || []));\r\n\r\n // Return full result including render helpers\r\n // Function to run all effects\r\n const runEffects = () => {\r\n for (const effect of effects) {\r\n try {\r\n effect();\r\n } catch (error) {\r\n // Effect failed\r\n }\r\n }\r\n };\r\n\r\n return {\r\n handlers,\r\n effects,\r\n runEffects,\r\n hasPendingRender: result.hasPendingRender || (() => false),\r\n flushRender: result.flushRender || (() => Promise.resolve()),\r\n wrappedCtx: result.wrappedCtx || ctx,\r\n mountCallbacks: result.mountCallbacks || [],\r\n destroyCallbacks: result.destroyCallbacks || [],\r\n preRenderCallbacks: result.preRenderCallbacks || [],\r\n afterRenderCallbacks: result.afterRenderCallbacks || [],\r\n runMount: result.runMount || (() => { }),\r\n runDestroy: result.runDestroy || (() => { }),\r\n runPreRender: result.runPreRender || (async () => { }),\r\n runAfterRender: result.runAfterRender || (() => { }),\r\n setInHandler: result.setInHandler || (() => { }),\r\n render: result.render || (() => Promise.resolve())\r\n };\r\n } catch (error) {\r\n // Re-throw the error so it's visible to the developer\r\n console.error(\"[DBI-Svelte] createHandlerContext failed:\", error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Extract $effect callback bodies from script content\r\n */\r\nfunction extractEffectBodies(script: string): string[] {\r\n const bodies: string[] = [];\r\n // Match $effect(() => { ... }) or $effect(function() { ... })\r\n const effectRegex = /\\$effect\\s*\\(\\s*(?:(?:function\\s*\\([^)]*\\)|\\([^)]*\\)\\s*=>|\\(\\)\\s*=>)\\s*\\{([\\s\\S]*?)\\})\\s*\\)/g;\r\n let match;\r\n while ((match = effectRegex.exec(script)) !== null) {\r\n bodies.push(match[1]);\r\n }\r\n return bodies;\r\n}\r\n\r\n/**\r\n * Extract function names from script content (excluding effect callbacks)\r\n */\r\nfunction extractFunctionNames(script: string): string[] {\r\n const names: string[] = [];\r\n\r\n // Match function declarations: function name() {}\r\n const functionDeclRegex = /function\\s+(\\w+)\\s*\\(/g;\r\n let match;\r\n while ((match = functionDeclRegex.exec(script)) !== null) {\r\n names.push(match[1]);\r\n }\r\n\r\n // Match function expressions: const name = function() {}\r\n const functionExprRegex = /(?:const|let|var)\\s+(\\w+)\\s*=\\s*function\\s*\\(/g;\r\n while ((match = functionExprRegex.exec(script)) !== null) {\r\n names.push(match[1]);\r\n }\r\n\r\n // Match arrow functions: const name = () => {}\r\n const arrowFunctionRegex = /(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s*)?\\([^)]*\\)\\s*=>/g;\r\n while ((match = arrowFunctionRegex.exec(script)) !== null) {\r\n names.push(match[1]);\r\n }\r\n\r\n // Match arrow functions without parentheses: const name = x => {}\r\n const simpleArrowRegex = /(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s*)?\\w+\\s*=>/g;\r\n while ((match = simpleArrowRegex.exec(script)) !== null) {\r\n names.push(match[1]);\r\n }\r\n\r\n return [...new Set(names)]; // Remove duplicates\r\n}\r\n"]}
1
+ {"version":3,"file":"svelteParser.js","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteParser.ts"],"names":[],"mappings":"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","sourcesContent":["import * as stuffs from \"stuffs\";\r\n\r\n// Lazy imports to avoid issues with package managers that don't properly hoist dependencies\r\nlet _parse: typeof import(\"svelte/compiler\").parse;\r\n\r\nasync function ensureImports() {\r\n if (!_parse) {\r\n const svelteCompiler = await import(\"svelte/compiler\");\r\n _parse = svelteCompiler.parse;\r\n }\r\n}\r\n\r\n/**\r\n * Simple AST walker for Svelte AST nodes\r\n */\r\nfunction walkSvelteAst(node: any, callback: (node: any) => void) {\r\n if (!node || typeof node !== 'object') return;\r\n\r\n callback(node);\r\n\r\n // Walk children based on node type\r\n if (node.children && Array.isArray(node.children)) {\r\n for (const child of node.children) {\r\n walkSvelteAst(child, callback);\r\n }\r\n }\r\n if (node.fragment && node.fragment.nodes) {\r\n for (const child of node.fragment.nodes) {\r\n walkSvelteAst(child, callback);\r\n }\r\n }\r\n if (node.nodes && Array.isArray(node.nodes)) {\r\n for (const child of node.nodes) {\r\n walkSvelteAst(child, callback);\r\n }\r\n }\r\n // Handle other potential child properties\r\n if (node.else) {\r\n walkSvelteAst(node.else, callback);\r\n }\r\n if (node.consequent) {\r\n walkSvelteAst(node.consequent, callback);\r\n }\r\n if (node.alternate) {\r\n walkSvelteAst(node.alternate, callback);\r\n }\r\n if (node.then) {\r\n walkSvelteAst(node.then, callback);\r\n }\r\n if (node.catch) {\r\n walkSvelteAst(node.catch, callback);\r\n }\r\n if (node.body) {\r\n if (Array.isArray(node.body)) {\r\n for (const child of node.body) {\r\n walkSvelteAst(child, callback);\r\n }\r\n } else {\r\n walkSvelteAst(node.body, callback);\r\n }\r\n }\r\n}\r\n\r\nexport interface SvelteHandlerInfo {\r\n name: string;\r\n handlerName: string;\r\n eventType: string; // onclick, onchange, onsubmit, etc.\r\n element: string; // button, string-select, components (for modal), etc.\r\n /** If this is an inline handler, contains the extracted source code */\r\n inlineCode?: string;\r\n /** Whether this handler is an inline arrow function or function expression */\r\n isInline?: boolean;\r\n}\r\n\r\nexport interface ModalHandlerInfo {\r\n modalId: string;\r\n onsubmitHandler?: string; // Handler function name for onsubmit\r\n}\r\n\r\nexport interface SvelteValidationWarning {\r\n type: 'missing-data' | 'unused-data' | 'undefined-handler' | 'syntax-error' | 'runtime-error';\r\n message: string;\r\n details?: string;\r\n}\r\n\r\nexport interface SvelteComponentInfo {\r\n handlers: Map<string, SvelteHandlerInfo>;\r\n /** Modal onsubmit handlers keyed by modal id */\r\n modalHandlers: Map<string, ModalHandlerInfo>;\r\n scriptContent: string;\r\n processedSource: string; // Source with auto-generated names injected\r\n /** Props extracted from $props() destructuring */\r\n declaredProps: string[];\r\n /** Props that have default values (don't require data) */\r\n propsWithDefaults: string[];\r\n /** Function names declared in the script */\r\n declaredFunctions: string[];\r\n /** Inline handler code extracted from template (keyed by generated handler name) */\r\n inlineHandlers: Map<string, string>;\r\n}\r\n\r\n/**\r\n * Parse a Svelte component and extract event handlers\r\n * Also injects auto-generated names into elements that have handlers but no name\r\n */\r\nexport async function parseSvelteComponent(source: string, data?: Record<string, any>): Promise<SvelteComponentInfo> {\r\n await ensureImports();\r\n\r\n let ast;\r\n try {\r\n ast = _parse(source);\r\n } catch (parseError: any) {\r\n // Format Svelte parse error with helpful details\r\n const errorMessage = parseError.message || 'Unknown parse error';\r\n const location = parseError.start || parseError.loc;\r\n let details = errorMessage;\r\n\r\n if (location) {\r\n const lines = source.split('\\n');\r\n const lineNum = location.line || 1;\r\n const column = location.column || 0;\r\n const errorLine = lines[lineNum - 1] || '';\r\n const prevLine = lines[lineNum - 2] || '';\r\n const nextLine = lines[lineNum] || '';\r\n\r\n details = `\r\nSvelte Parse Error at line ${lineNum}, column ${column}:\r\n${errorMessage}\r\n\r\n${lineNum > 1 ? `${lineNum - 1} | ${prevLine}\\n` : ''}${lineNum} | ${errorLine}\r\n${' '.repeat(String(lineNum).length + 3 + column)}^\r\n${nextLine ? `${lineNum + 1} | ${nextLine}` : ''}\r\n`.trim();\r\n }\r\n\r\n const enhancedError = new Error(`[DBI-Svelte] Failed to parse Svelte component:\\n${details}`);\r\n (enhancedError as any).originalError = parseError;\r\n (enhancedError as any).type = 'svelte-parse-error';\r\n throw enhancedError;\r\n }\r\n\r\n const handlers = new Map<string, SvelteHandlerInfo>();\r\n const modalHandlers = new Map<string, ModalHandlerInfo>();\r\n let scriptContent = \"\";\r\n\r\n // Extract script content\r\n if (ast.instance) {\r\n scriptContent = source.substring(ast.instance.content.start, ast.instance.content.end);\r\n }\r\n\r\n // Track elements that need auto-generated names (node -> name mapping)\r\n // We'll inject these into the source after the walk\r\n const elementsNeedingNames: Array<{ node: any; name: string; handlerName: string; eventType: string; element: string }> = [];\r\n let autoNameCounter = 0;\r\n\r\n // Track inline handlers (arrow functions or function expressions in event attributes)\r\n const inlineHandlers = new Map<string, string>();\r\n let inlineHandlerCounter = 0;\r\n\r\n // Walk through HTML nodes to find event handlers\r\n walkSvelteAst(ast.html || ast.fragment, (node: any) => {\r\n if (node.type === \"Element\" || node.type === \"InlineComponent\" || node.type === \"RegularElement\" || node.type === \"Component\") {\r\n const attributes = node.attributes || [];\r\n const nodeName = node.name.toLowerCase();\r\n\r\n // Special handling for <components type=\"modal\"> elements\r\n if (nodeName === \"components\") {\r\n const typeAttr = attributes.find((attr: any) =>\r\n attr.type === \"Attribute\" && attr.name === \"type\"\r\n );\r\n const typeValue = typeAttr ? getAttributeValue(typeAttr) : null;\r\n\r\n if (typeValue === \"modal\") {\r\n // This is a modal definition - extract id and onsubmit handler\r\n const idAttr = attributes.find((attr: any) =>\r\n attr.type === \"Attribute\" && attr.name === \"id\"\r\n );\r\n const modalId = idAttr ? getAttributeValue(idAttr) : null;\r\n\r\n if (modalId) {\r\n const modalInfo: ModalHandlerInfo = { modalId };\r\n\r\n // Find onsubmit handler\r\n for (const attr of attributes) {\r\n const isOnSubmit = (attr.type === \"Attribute\" && attr.name === \"onsubmit\") ||\r\n (attr.type === \"EventHandler\" && attr.name === \"submit\");\r\n\r\n if (isOnSubmit) {\r\n let handlerName = \"\";\r\n\r\n if (attr.type === \"Attribute\" && Array.isArray(attr.value)) {\r\n const exprValue = attr.value.find((v: any) => v.type === \"ExpressionTag\" || v.type === \"MustacheTag\");\r\n if (exprValue && exprValue.expression) {\r\n if (exprValue.expression.type === \"Identifier\") {\r\n handlerName = exprValue.expression.name;\r\n } else if (exprValue.expression.type === \"CallExpression\" && exprValue.expression.callee) {\r\n handlerName = exprValue.expression.callee.name;\r\n }\r\n }\r\n } else if (attr.expression) {\r\n if (attr.expression.type === \"Identifier\") {\r\n handlerName = attr.expression.name;\r\n } else if (attr.expression.type === \"CallExpression\" && attr.expression.callee) {\r\n handlerName = attr.expression.callee.name;\r\n }\r\n }\r\n\r\n if (handlerName) {\r\n modalInfo.onsubmitHandler = handlerName;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n modalHandlers.set(modalId, modalInfo);\r\n }\r\n }\r\n return; // Don't process <components> as regular elements\r\n }\r\n\r\n // Find name attribute\r\n const nameAttr = attributes.find((attr: any) =>\r\n attr.type === \"Attribute\" && attr.name === \"name\"\r\n );\r\n\r\n // Check if element has an onclick/onchange/handler and get the handler info\r\n let foundHandler: { eventType: string; handlerName: string; inlineCode?: string; isInline?: boolean } | null = null;\r\n\r\n for (const attr of attributes) {\r\n const isEventHandler = attr.type === \"EventHandler\";\r\n const isOnAttribute = attr.type === \"Attribute\" && attr.name && attr.name.startsWith(\"on\");\r\n const isHandlerAttribute = attr.type === \"Attribute\" && attr.name === \"handler\";\r\n\r\n if (isEventHandler || isOnAttribute || isHandlerAttribute) {\r\n // For \"handler\" attribute, use the element type to determine eventType\r\n // button -> onclick, select -> onchange\r\n let eventType = attr.name;\r\n if (isHandlerAttribute) {\r\n const elementName = node.name.toLowerCase();\r\n if (elementName === \"button\") {\r\n eventType = \"onclick\";\r\n } else if (elementName.includes(\"select\")) {\r\n eventType = \"onchange\";\r\n } else {\r\n eventType = \"handler\"; // fallback\r\n }\r\n }\r\n let handlerName = \"\";\r\n let inlineCode: string | undefined;\r\n let isInline = false;\r\n\r\n if (attr.type === \"Attribute\" && Array.isArray(attr.value)) {\r\n const exprValue = attr.value.find((v: any) => v.type === \"ExpressionTag\" || v.type === \"MustacheTag\");\r\n if (exprValue && exprValue.expression) {\r\n if (exprValue.expression.type === \"Identifier\") {\r\n handlerName = exprValue.expression.name;\r\n } else if (exprValue.expression.type === \"CallExpression\" && exprValue.expression.callee) {\r\n handlerName = exprValue.expression.callee.name;\r\n } else if (exprValue.expression.type === \"ArrowFunctionExpression\" || exprValue.expression.type === \"FunctionExpression\") {\r\n // Inline arrow function or function expression - extract the code\r\n isInline = true;\r\n handlerName = `__inline_handler_${inlineHandlerCounter++}`;\r\n // Extract the source code from the expression\r\n const expr = exprValue.expression;\r\n if (expr.start !== undefined && expr.end !== undefined) {\r\n inlineCode = source.substring(expr.start, expr.end);\r\n }\r\n }\r\n }\r\n } else if (attr.expression) {\r\n if (attr.expression.type === \"Identifier\") {\r\n handlerName = attr.expression.name;\r\n } else if (attr.expression.type === \"CallExpression\" && attr.expression.callee) {\r\n handlerName = attr.expression.callee.name;\r\n } else if (attr.expression.type === \"MemberExpression\") {\r\n handlerName = extractMemberExpressionName(attr.expression);\r\n } else if (attr.expression.type === \"ArrowFunctionExpression\" || attr.expression.type === \"FunctionExpression\") {\r\n // Inline arrow function or function expression - extract the code\r\n isInline = true;\r\n handlerName = `__inline_handler_${inlineHandlerCounter++}`;\r\n // Extract the source code from the expression\r\n const expr = attr.expression;\r\n if (expr.start !== undefined && expr.end !== undefined) {\r\n inlineCode = source.substring(expr.start, expr.end);\r\n }\r\n }\r\n }\r\n\r\n if (handlerName) {\r\n foundHandler = { eventType, handlerName, inlineCode, isInline };\r\n // If it's an inline handler, store the code\r\n if (isInline && inlineCode) {\r\n inlineHandlers.set(handlerName, inlineCode);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!foundHandler) return; // No handler found, skip\r\n\r\n let componentName: string;\r\n if (nameAttr) {\r\n componentName = getAttributeValue(nameAttr);\r\n } else {\r\n // No name attribute - generate a deterministic one based on position\r\n // Use the handler name and counter for deterministic naming\r\n const positionKey = `${node.name.toLowerCase()}_${autoNameCounter++}`;\r\n\r\n // If data is provided, use/store in $autoNames for persistence across re-renders\r\n if (data) {\r\n if (!data.$autoNames) {\r\n data.$autoNames = {};\r\n }\r\n if (!data.$autoNames[positionKey]) {\r\n data.$autoNames[positionKey] = `__auto_${positionKey}`;\r\n }\r\n componentName = data.$autoNames[positionKey];\r\n } else {\r\n // No data - use deterministic name based on position\r\n componentName = `__auto_${positionKey}`;\r\n }\r\n\r\n // Track this element for source injection\r\n elementsNeedingNames.push({\r\n node,\r\n name: componentName,\r\n handlerName: foundHandler.handlerName,\r\n eventType: foundHandler.eventType,\r\n element: node.name.toLowerCase()\r\n });\r\n }\r\n\r\n // Add to handlers map\r\n handlers.set(componentName, {\r\n name: componentName,\r\n handlerName: foundHandler.handlerName,\r\n eventType: foundHandler.eventType,\r\n element: node.name.toLowerCase(),\r\n inlineCode: foundHandler.inlineCode,\r\n isInline: foundHandler.isInline,\r\n });\r\n }\r\n });\r\n\r\n // Inject auto-generated names into the source\r\n // Sort by position descending so we don't mess up offsets\r\n let processedSource = source;\r\n const sortedElements = [...elementsNeedingNames].sort((a, b) => b.node.start - a.node.start);\r\n\r\n for (const { node, name } of sortedElements) {\r\n // Find the position right after the opening tag name\r\n // e.g., <button ...> -> insert after \"button\"\r\n const tagEnd = node.start + 1 + node.name.length; // +1 for '<'\r\n processedSource = processedSource.slice(0, tagEnd) + ` name=\"${name}\"` + processedSource.slice(tagEnd);\r\n }\r\n\r\n // Extract declared props from $props() destructuring\r\n const declaredProps: string[] = [];\r\n const propsWithDefaults: string[] = [];\r\n const propsMatch = scriptContent.match(/(?:const|let)\\s+\\{([\\s\\S]*?)\\}\\s*=\\s*\\$props\\(\\)/);\r\n if (propsMatch) {\r\n const propsContent = propsMatch[1];\r\n // Remove comments first\r\n const cleanedContent = propsContent\r\n .replace(/\\/\\/.*$/gm, '')\r\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\r\n const props = parsePropsContent(cleanedContent);\r\n for (const prop of props) {\r\n if (prop.name) {\r\n declaredProps.push(prop.name);\r\n if (prop.defaultValue !== undefined) {\r\n propsWithDefaults.push(prop.name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Extract declared function names\r\n const declaredFunctions: string[] = [];\r\n const funcRegex = /(?:async\\s+)?function\\s+(\\w+)\\s*\\(/g;\r\n let funcMatch;\r\n while ((funcMatch = funcRegex.exec(scriptContent)) !== null) {\r\n declaredFunctions.push(funcMatch[1]);\r\n }\r\n // Also match arrow functions assigned to variables: const/let/var name = (async) () =>\r\n const arrowRegex = /(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s*)?\\([^)]*\\)\\s*=>/g;\r\n while ((funcMatch = arrowRegex.exec(scriptContent)) !== null) {\r\n declaredFunctions.push(funcMatch[1]);\r\n }\r\n\r\n return {\r\n handlers,\r\n modalHandlers,\r\n scriptContent,\r\n processedSource,\r\n declaredProps,\r\n propsWithDefaults,\r\n declaredFunctions,\r\n inlineHandlers\r\n };\r\n}\r\n\r\n/**\r\n * Extract the full name from a MemberExpression (e.g., obj.method)\r\n */\r\nfunction extractMemberExpressionName(expr: any): string {\r\n if (expr.type === \"Identifier\") {\r\n return expr.name;\r\n }\r\n if (expr.type === \"MemberExpression\") {\r\n const object = extractMemberExpressionName(expr.object);\r\n const property = expr.property.name || expr.property.value;\r\n return `${object}.${property}`;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Get the value from an attribute\r\n */\r\nfunction getAttributeValue(attr: any): string {\r\n if (!attr.value) return \"\";\r\n\r\n if (Array.isArray(attr.value)) {\r\n // Static text value\r\n if (attr.value[0]?.type === \"Text\") {\r\n return attr.value[0].data;\r\n }\r\n // Expression value\r\n if (attr.value[0]?.expression) {\r\n return extractExpressionValue(attr.value[0].expression);\r\n }\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Extract value from an expression\r\n */\r\nfunction extractExpressionValue(expr: any): string {\r\n if (expr.type === \"Identifier\") {\r\n return expr.name;\r\n }\r\n if (expr.type === \"Literal\") {\r\n return String(expr.value);\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Parse $props() destructuring content with proper brace/bracket counting\r\n * Handles nested objects like: { name, options = { a: 1, b: [1, 2] }, count = 0 }\r\n */\r\nfunction parsePropsContent(content: string): Array<{ name: string; defaultValue?: string }> {\r\n const props: Array<{ name: string; defaultValue?: string }> = [];\r\n let current = '';\r\n let braceCount = 0;\r\n let bracketCount = 0;\r\n let parenCount = 0;\r\n let inString: string | null = null;\r\n\r\n for (let i = 0; i <= content.length; i++) {\r\n const char = content[i];\r\n const prevChar = i > 0 ? content[i - 1] : '';\r\n\r\n // Handle string boundaries\r\n if ((char === '\"' || char === \"'\" || char === '`') && prevChar !== '\\\\') {\r\n if (inString === char) {\r\n inString = null;\r\n } else if (!inString) {\r\n inString = char;\r\n }\r\n }\r\n\r\n // Only process structural characters when not in a string\r\n if (!inString) {\r\n if (char === '{') braceCount++;\r\n else if (char === '}') braceCount--;\r\n else if (char === '[') bracketCount++;\r\n else if (char === ']') bracketCount--;\r\n else if (char === '(') parenCount++;\r\n else if (char === ')') parenCount--;\r\n\r\n // Split on comma only when at top level (no nested braces/brackets/parens)\r\n if ((char === ',' || i === content.length) && braceCount === 0 && bracketCount === 0 && parenCount === 0) {\r\n const trimmed = current.trim();\r\n if (trimmed) {\r\n // Parse \"name = defaultValue\" or just \"name\"\r\n const equalsIndex = trimmed.indexOf('=');\r\n if (equalsIndex > 0) {\r\n const name = trimmed.substring(0, equalsIndex).trim();\r\n const defaultValue = trimmed.substring(equalsIndex + 1).trim();\r\n props.push({ name, defaultValue });\r\n } else {\r\n props.push({ name: trimmed });\r\n }\r\n }\r\n current = '';\r\n continue;\r\n }\r\n }\r\n\r\n if (i < content.length) {\r\n current += char;\r\n }\r\n }\r\n\r\n return props;\r\n}\r\n\r\n/**\r\n * Validate a Svelte component and return warnings\r\n * Call this during development/registration to catch potential issues early\r\n */\r\nexport function validateSvelteComponent(\r\n componentInfo: SvelteComponentInfo,\r\n data: Record<string, any> = {},\r\n componentName: string = 'unknown'\r\n): SvelteValidationWarning[] {\r\n const warnings: SvelteValidationWarning[] = [];\r\n\r\n // Skip internal props/data keys (used by the framework)\r\n const internalKeys = ['$ref', '$unRef', '__unRefWrapped__', '$autoNames', 'data'];\r\n\r\n // 1. Check for props declared but not provided in data (missing required data)\r\n // Skip props that have default values - they don't require data\r\n for (const prop of componentInfo.declaredProps) {\r\n if (internalKeys.includes(prop)) continue;\r\n if (componentInfo.propsWithDefaults.includes(prop)) continue; // Has default, not required\r\n if (!(prop in data)) {\r\n warnings.push({\r\n type: 'missing-data',\r\n message: `[${componentName}] Prop \"${prop}\" is declared in $props() without a default value but not provided in data`,\r\n details: `Add \"${prop}\" to your data object or provide a default value in $props()`\r\n });\r\n }\r\n }\r\n\r\n // 2. Check for data provided but not declared in props (potential typo or unused)\r\n for (const key of Object.keys(data)) {\r\n if (internalKeys.includes(key)) continue;\r\n if (key.startsWith('$')) continue; // Skip all $-prefixed internal keys\r\n if (!componentInfo.declaredProps.includes(key)) {\r\n warnings.push({\r\n type: 'unused-data',\r\n message: `[${componentName}] Data key \"${key}\" is provided but not declared in $props()`,\r\n details: `This data won't be accessible in the component. Add it to $props() destructuring.`\r\n });\r\n }\r\n }\r\n\r\n // 3. Check for undefined handlers referenced in elements\r\n // Skip inline handlers (they are extracted from template, not defined in script)\r\n for (const [elementName, handlerInfo] of componentInfo.handlers) {\r\n // Skip inline handlers - they are defined in the template, not the script\r\n if (handlerInfo.isInline) continue;\r\n if (!componentInfo.declaredFunctions.includes(handlerInfo.handlerName)) {\r\n warnings.push({\r\n type: 'undefined-handler',\r\n message: `[${componentName}] Handler \"${handlerInfo.handlerName}\" referenced by <${handlerInfo.element} name=\"${elementName}\"> is not defined`,\r\n details: `Make sure to define \"function ${handlerInfo.handlerName}(ctx) { ... }\" in your script`\r\n });\r\n }\r\n }\r\n\r\n // 4. Check for undefined modal submit handlers\r\n for (const [modalId, modalInfo] of componentInfo.modalHandlers) {\r\n if (modalInfo.onsubmitHandler && !componentInfo.declaredFunctions.includes(modalInfo.onsubmitHandler)) {\r\n warnings.push({\r\n type: 'undefined-handler',\r\n message: `[${componentName}] Modal submit handler \"${modalInfo.onsubmitHandler}\" for modal \"${modalId}\" is not defined`,\r\n details: `Make sure to define \"function ${modalInfo.onsubmitHandler}(ctx, fields) { ... }\" in your script`\r\n });\r\n }\r\n }\r\n\r\n // 5. Check for modal handler signatures (ctx parameter is optional for regular handlers)\r\n // Only modal handlers MUST have fields parameter to access submitted data\r\n const handlerFunctionRegex = /(?:async\\s+)?function\\s+(\\w+)\\s*\\(\\s*(\\w*)\\s*(?:,\\s*(\\w+))?\\s*\\)/g;\r\n let match;\r\n const scriptContent = componentInfo.scriptContent;\r\n\r\n while ((match = handlerFunctionRegex.exec(scriptContent)) !== null) {\r\n const funcName = match[1];\r\n const firstParam = match[2];\r\n const secondParam = match[3];\r\n\r\n // Only check modal handlers - they need 'fields' param to access form data\r\n const isModalHandler = Array.from(componentInfo.modalHandlers.values()).some(m => m.onsubmitHandler === funcName);\r\n\r\n if (isModalHandler && !secondParam) {\r\n warnings.push({\r\n type: 'syntax-error',\r\n message: `[${componentName}] Modal handler \"${funcName}\" should have \"ctx\" and \"fields\" parameters`,\r\n details: `Change to \"function ${funcName}(ctx, fields) { ... }\" to receive submitted form data`\r\n });\r\n }\r\n }\r\n\r\n // 6. Check for common template mistakes\r\n const templateContent = componentInfo.processedSource;\r\n\r\n // Check for onclick= without braces (common mistake)\r\n const badOnClickRegex = /onclick\\s*=\\s*[\"']([^\"']+)[\"']/gi;\r\n while ((match = badOnClickRegex.exec(templateContent)) !== null) {\r\n if (!match[1].startsWith('{')) {\r\n warnings.push({\r\n type: 'syntax-error',\r\n message: `[${componentName}] onclick handler should use curly braces: onclick={${match[1]}}`,\r\n details: `String values are not valid for event handlers. Use onclick={handlerName} syntax.`\r\n });\r\n }\r\n }\r\n\r\n // Check for undefined variables in {expression} blocks (basic check)\r\n const expressionRegex = /\\{([^}]+)\\}/g;\r\n const knownIdentifiers = new Set([\r\n ...componentInfo.declaredProps,\r\n ...componentInfo.declaredFunctions,\r\n // Common Svelte/JS globals\r\n 'true', 'false', 'null', 'undefined', 'console', 'Math', 'JSON', 'Array', 'Object',\r\n 'Date', 'Number', 'String', 'Boolean', 'Promise', 'Map', 'Set',\r\n // Common Svelte constructs\r\n '#if', '/if', '#each', '/each', '#await', '/await', ':else', ':then', ':catch',\r\n '@html', '@debug', '@const'\r\n ]);\r\n\r\n // Add variables from script (let, const, var declarations)\r\n const varDeclRegex = /(?:let|const|var)\\s+(\\w+)/g;\r\n while ((match = varDeclRegex.exec(scriptContent)) !== null) {\r\n knownIdentifiers.add(match[1]);\r\n }\r\n\r\n return warnings;\r\n}\r\n\r\n/**\r\n * Log validation warnings to console with colors\r\n */\r\nexport function logValidationWarnings(warnings: SvelteValidationWarning[]): void {\r\n if (warnings.length === 0) return;\r\n\r\n console.warn(`\\n⚠️ Svelte Component Validation Warnings (${warnings.length}):`);\r\n\r\n for (const warning of warnings) {\r\n const icon = warning.type === 'missing-data' ? '❌' :\r\n warning.type === 'unused-data' ? '⚠️' :\r\n warning.type === 'undefined-handler' ? '🔗' :\r\n warning.type === 'syntax-error' ? '💥' : '⚡';\r\n\r\n console.warn(` ${icon} ${warning.message}`);\r\n if (warning.details) {\r\n console.warn(` └─ ${warning.details}`);\r\n }\r\n }\r\n console.warn('');\r\n}\r\n\r\nexport interface HandlerContextResult {\r\n handlers: Record<string, Function>;\r\n effects: Function[];\r\n runEffects: () => void;\r\n hasPendingRender: () => boolean;\r\n flushRender: () => Promise<void>;\r\n wrappedCtx: any; // Proxy-wrapped ctx for passing to handlers\r\n // Lifecycle hooks\r\n mountCallbacks: Function[];\r\n destroyCallbacks: Function[];\r\n preRenderCallbacks: Function[];\r\n afterRenderCallbacks: Function[];\r\n runMount: () => void;\r\n runDestroy: () => void;\r\n runPreRender: () => Promise<void>;\r\n runAfterRender: () => void;\r\n // Handler execution tracking\r\n setInHandler: (value: boolean) => void;\r\n // Manual render function\r\n render: (immediate?: boolean) => Promise<void>;\r\n}\r\n\r\n/**\r\n * Parse import statements from script and extract module info\r\n */\r\ninterface ImportInfo {\r\n moduleName: string;\r\n imports: { name: string; alias?: string }[];\r\n isDefault: boolean;\r\n defaultName?: string;\r\n}\r\n\r\nfunction parseImports(script: string): { imports: ImportInfo[]; cleanedScript: string } {\r\n const imports: ImportInfo[] = [];\r\n\r\n // Match: import { a, b as c } from \"module\"\r\n // Match: import name from \"module\"\r\n // Match: import * as name from \"module\"\r\n const importRegex = /import\\s+(?:(\\w+)\\s*,?\\s*)?(?:\\{\\s*([^}]+)\\s*\\})?(?:\\*\\s+as\\s+(\\w+))?\\s+from\\s+[\"']([^\"']+)[\"'];?/g;\r\n\r\n let cleanedScript = script;\r\n let match;\r\n\r\n while ((match = importRegex.exec(script)) !== null) {\r\n const [fullMatch, defaultImport, namedImports, namespaceImport, moduleName] = match;\r\n\r\n // Skip svelte internal imports - we provide these ourselves\r\n if (moduleName === 'svelte' || moduleName.startsWith('svelte/')) {\r\n cleanedScript = cleanedScript.replace(fullMatch, '');\r\n continue;\r\n }\r\n\r\n const importInfo: ImportInfo = {\r\n moduleName,\r\n imports: [],\r\n isDefault: false\r\n };\r\n\r\n // Default import: import name from \"module\"\r\n if (defaultImport) {\r\n importInfo.isDefault = true;\r\n importInfo.defaultName = defaultImport;\r\n }\r\n\r\n // Namespace import: import * as name from \"module\"\r\n if (namespaceImport) {\r\n importInfo.isDefault = true;\r\n importInfo.defaultName = namespaceImport;\r\n }\r\n\r\n // Named imports: import { a, b as c } from \"module\"\r\n if (namedImports) {\r\n const parts = namedImports.split(',').map(s => s.trim()).filter(Boolean);\r\n for (const part of parts) {\r\n const aliasMatch = part.match(/^(\\w+)\\s+as\\s+(\\w+)$/);\r\n if (aliasMatch) {\r\n importInfo.imports.push({ name: aliasMatch[1], alias: aliasMatch[2] });\r\n } else {\r\n importInfo.imports.push({ name: part });\r\n }\r\n }\r\n }\r\n\r\n imports.push(importInfo);\r\n cleanedScript = cleanedScript.replace(fullMatch, '');\r\n }\r\n\r\n return { imports, cleanedScript };\r\n}\r\n\r\n/**\r\n * Load modules and create injection variables\r\n */\r\nfunction loadModules(imports: ImportInfo[], sourceDir?: string): { modules: Record<string, any>; varDeclarations: string } {\r\n const modules: Record<string, any> = {};\r\n const declarations: string[] = [];\r\n const path = require(\"path\");\r\n\r\n for (const importInfo of imports) {\r\n try {\r\n // Resolve relative paths from source file directory\r\n const resolvedPath = importInfo.moduleName.startsWith('.') && sourceDir\r\n ? path.resolve(sourceDir, importInfo.moduleName)\r\n : importInfo.moduleName;\r\n // Try to require the module\r\n const mod = require(resolvedPath);\r\n\r\n if (importInfo.isDefault && importInfo.defaultName) {\r\n // Default or namespace import\r\n modules[importInfo.defaultName] = mod.default || mod;\r\n declarations.push(`var ${importInfo.defaultName} = __modules__[\"${importInfo.defaultName}\"];`);\r\n }\r\n\r\n // Named imports\r\n for (const imp of importInfo.imports) {\r\n const varName = imp.alias || imp.name;\r\n modules[varName] = mod[imp.name];\r\n declarations.push(`var ${varName} = __modules__[\"${varName}\"];`);\r\n }\r\n } catch (err) {\r\n // Module import failed\r\n }\r\n }\r\n\r\n return { modules, varDeclarations: declarations.join('\\n') };\r\n}\r\n\r\n/**\r\n * Create a handler context from script content\r\n * This evaluates the Svelte script and returns the handler functions and effects\r\n * @param sourceDir - The directory of the source file (used for resolving relative imports)\r\n * @param inlineHandlers - Map of inline handler names to their source code (extracted from template)\r\n */\r\nexport function createHandlerContext(scriptContent: string, initialData: Record<string, any> = {}, component?: any, ctx?: any, sourceDir?: string, inlineHandlers?: Map<string, string>): HandlerContextResult {\r\n const handlers: Record<string, Function> = {};\r\n const effects: Function[] = [];\r\n\r\n try {\r\n // Parse and extract imports first\r\n const { imports, cleanedScript } = parseImports(scriptContent);\r\n const { modules, varDeclarations } = loadModules(imports, sourceDir);\r\n\r\n // Extract only function declarations from the script\r\n const functionNames = extractFunctionNames(cleanedScript);\r\n\r\n // Extract $effect calls and convert them to collectable functions\r\n const effectBodies = extractEffectBodies(cleanedScript);\r\n\r\n // Process script to be safe for evaluation:\r\n // 1. Remove reactive declarations (let x = $state(...))\r\n // 2. Remove $props destructuring\r\n // 3. Convert $effect to __registerEffect__\r\n // 4. Keep only function declarations\r\n\r\n // First, remove comments from the script to avoid regex issues with braces in comments\r\n let scriptWithoutComments = cleanedScript\r\n // Remove single-line comments (but preserve the newline)\r\n .replace(/\\/\\/.*$/gm, '')\r\n // Remove multi-line comments\r\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\r\n\r\n let processedScript = scriptWithoutComments\r\n // Remove $state declarations completely or make them var\r\n .replace(/(?:const|let)\\s+(\\w+)\\s*=\\s*\\$state\\(([^)]*)\\);?/g, 'var $1 = $2;')\r\n // Remove $derived declarations but keep the value\r\n .replace(/(?:const|let)\\s+(\\w+)\\s*=\\s*\\$derived\\(([^)]+)\\);?/g, 'var $1 = $2;')\r\n // Convert $effect calls to __registerEffect__ calls\r\n .replace(/\\$effect\\s*\\(\\s*((?:function\\s*\\([^)]*\\)|\\([^)]*\\)\\s*=>|\\(\\)\\s*=>)[^}]*\\{[\\s\\S]*?\\}\\s*)\\);?/g, '__registerEffect__($1);')\r\n // Simpler $effect pattern: $effect(() => { ... })\r\n .replace(/\\$effect\\s*\\(\\s*\\(\\)\\s*=>\\s*\\{([\\s\\S]*?)\\}\\s*\\);?/g, '__registerEffect__(function() {$1});');\r\n\r\n // Handle $props destructuring with proper brace counting (supports nested objects like { options = { a: 1 } })\r\n processedScript = processedScript.replace(/(?:const|let)\\s+\\{([\\s\\S]*?)\\}\\s*=\\s*\\$props\\(\\);?/g, (match) => {\r\n // Find the opening brace after 'const' or 'let'\r\n const letIndex = match.indexOf('{');\r\n if (letIndex === -1) return match;\r\n\r\n // Use brace counting to find the matching closing brace\r\n let braceCount = 0;\r\n let startIndex = letIndex;\r\n let endIndex = -1;\r\n\r\n for (let i = startIndex; i < match.length; i++) {\r\n if (match[i] === '{') braceCount++;\r\n else if (match[i] === '}') {\r\n braceCount--;\r\n if (braceCount === 0) {\r\n endIndex = i;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (endIndex === -1) return match;\r\n\r\n // Extract the content between braces\r\n const content = match.substring(startIndex + 1, endIndex);\r\n\r\n // Parse props with proper handling of nested braces\r\n const props = parsePropsContent(content);\r\n\r\n return props.map(prop => {\r\n if (!prop.name || prop.name === 'data') return '';\r\n if (prop.defaultValue !== undefined) {\r\n return `var ${prop.name} = data.${prop.name} ?? ${prop.defaultValue};`;\r\n }\r\n return `var ${prop.name} = data.${prop.name};`;\r\n }).filter(Boolean).join('\\n');\r\n });\r\n\r\n // Add module variable declarations at the beginning of processed script\r\n if (varDeclarations) {\r\n processedScript = varDeclarations + '\\n\\n' + processedScript;\r\n }\r\n\r\n // Wrap everything in an IIFE that takes data and component as parameters\r\n // This ensures data and 'this' are always available in the function scope\r\n // Also provides helper functions: render(), update() and rerender()\r\n // Data is wrapped in a Proxy for automatic reactivity\r\n // Interaction methods (reply, followUp, deferReply) are wrapped to auto-render after completion\r\n const wrappedScript = `\r\n return function(__data__, __component__, __ctx__, __modules__) {\r\n __modules__ = __modules__ || {};\r\n var self = __component__;\r\n var __effects__ = [];\r\n var __renderPending__ = false;\r\n var __autoRenderEnabled__ = true;\r\n var __hasDataChanges__ = false;\r\n \r\n // Lifecycle callbacks\r\n var __mountCallbacks__ = [];\r\n var __destroyCallbacks__ = [];\r\n var __preRenderCallbacks__ = [];\r\n var __afterRenderCallbacks__ = [];\r\n var __isMounted__ = false;\r\n \r\n // Store last message reference for background updates (intervals, timeouts)\r\n var __lastMessage__ = __ctx__?.interaction?.message || null;\r\n \r\n // Throttle configuration\r\n var __throttleMinInterval__ = 250; // Minimum ms between renders\r\n var __lastRenderTime__ = 0;\r\n var __pendingRenderTimeout__ = null;\r\n var __isRateLimited__ = false;\r\n var __rateLimitEndTime__ = 0;\r\n \r\n function __registerEffect__(fn) {\r\n __effects__.push(fn);\r\n }\r\n \r\n // Lifecycle: onMount - called when component is first rendered\r\n // If callback returns a function, that function is called on destroy\r\n function onMount(fn) {\r\n __mountCallbacks__.push(fn);\r\n }\r\n \r\n // Lifecycle: onDestroy - called when ref is cleaned up\r\n function onDestroy(fn) {\r\n __destroyCallbacks__.push(fn);\r\n }\r\n \r\n // Lifecycle: onPreRender - called before each render (async, awaited)\r\n function onPreRender(fn) {\r\n __preRenderCallbacks__.push(fn);\r\n }\r\n \r\n // Lifecycle: onAfterRender - called after each render completes\r\n function onAfterRender(fn) {\r\n __afterRenderCallbacks__.push(fn);\r\n }\r\n \r\n // Run all pre-render callbacks (async)\r\n async function __runPreRender__() {\r\n for (var i = 0; i < __preRenderCallbacks__.length; i++) {\r\n try {\r\n await __preRenderCallbacks__[i]();\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] Pre-render callback failed:\", err);\r\n throw err;\r\n }\r\n }\r\n }\r\n \r\n // Run all after-render callbacks\r\n function __runAfterRender__() {\r\n for (var i = 0; i < __afterRenderCallbacks__.length; i++) {\r\n try {\r\n __afterRenderCallbacks__[i]();\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] After-render callback failed:\", err);\r\n throw err;\r\n }\r\n }\r\n }\r\n \r\n // Modal store - stores rendered modal definitions\r\n var __modals__ = new Map();\r\n \r\n // Register a modal (called internally when modals are parsed)\r\n function __registerModal__(modalId, modalDef) {\r\n __modals__.set(modalId, modalDef);\r\n }\r\n \r\n // Show a modal by ID and return a Promise that resolves with the submitted fields\r\n // Modal definitions are rendered from <components type=\"modal\" id=\"xxx\">\r\n // Usage: \r\n // await showModal(\"edit-product\"); // Just show, use onsubmit handler\r\n // const { fields, interaction } = await showModal(\"edit-product\"); // Get response\r\n // await showModal(\"edit-product\", { timeout: 60000 }); // 60 second timeout\r\n // await showModal(\"edit-product\", { timeout: 0 }); // No timeout (unlimited)\r\n function showModal(modalId, options) {\r\n if (!__ctx__ || !__ctx__.interaction) {\r\n return Promise.reject(new Error(\"showModal requires an interaction context\"));\r\n }\r\n \r\n // Default timeout: 10 minutes (600000ms), 0 = no timeout\r\n var timeout = (options && typeof options.timeout === 'number') ? options.timeout : 600000;\r\n \r\n // Disable auto-render IMMEDIATELY since we're showing a modal\r\n // This prevents flushRender from trying to update after modal is shown\r\n __autoRenderEnabled__ = false;\r\n __asyncInteractionCalled__ = true;\r\n \r\n // Create a promise that will be resolved when modal is submitted\r\n return new Promise(async function(resolve, reject) {\r\n var timeoutId = null;\r\n var modal = null;\r\n \r\n try {\r\n // Re-render to get latest modal definitions (reactive)\r\n var renderResult = await __component__.toJSON({ data: __data__ });\r\n \r\n // Get modals from the render result stored on component\r\n var modals = __component__.__lastRenderModals__;\r\n if (!modals) {\r\n reject(new Error(\"No modals defined in this component. Use <components type=\\\\\"modal\\\\\" id=\\\\\"...\\\\\">\")); \r\n return;\r\n }\r\n \r\n modal = modals.get(modalId);\r\n if (!modal) {\r\n reject(new Error(\"Modal '\" + modalId + \"' not found. Available modals: \" + Array.from(modals.keys()).join(\", \")));\r\n return;\r\n }\r\n \r\n // Wrapped resolve/reject to clear timeout\r\n var wrappedResolve = function(result) {\r\n if (timeoutId) clearTimeout(timeoutId);\r\n resolve(result);\r\n };\r\n var wrappedReject = function(error) {\r\n if (timeoutId) clearTimeout(timeoutId);\r\n reject(error);\r\n };\r\n \r\n // Store the promise resolver in component's pending modals map\r\n // This will be resolved when modal submit interaction is received\r\n __component__._pendingModals.set(modal.customId, { resolve: wrappedResolve, reject: wrappedReject });\r\n \r\n // Set up timeout if enabled (timeout > 0)\r\n if (timeout > 0) {\r\n timeoutId = setTimeout(function() {\r\n // Clean up pending modal\r\n __component__._pendingModals.delete(modal.customId);\r\n reject(new Error(\"Modal '\" + modalId + \"' timed out after \" + timeout + \"ms\"));\r\n }, timeout);\r\n }\r\n \r\n // Show the modal using the interaction\r\n var i = __ctx__.interaction;\r\n \r\n // Modal must be shown immediately - no deferral allowed\r\n await i.showModal({\r\n title: modal.title,\r\n customId: modal.customId,\r\n components: modal.components\r\n });\r\n \r\n // Note: Promise resolves later when modal is submitted\r\n // If you don't await for the response, the promise just hangs (which is fine)\r\n } catch (err) {\r\n // Clean up pending modal and timeout if show failed\r\n if (timeoutId) clearTimeout(timeoutId);\r\n if (modal && modal.customId) {\r\n __component__._pendingModals.delete(modal.customId);\r\n }\r\n reject(new Error(\"Failed to show modal: \" + (err.message || err)));\r\n }\r\n });\r\n }\r\n \r\n // Rate-limit aware edit function with retry\r\n function __safeEdit__(editFn, retryCount) {\r\n retryCount = retryCount || 0;\r\n var maxRetries = 3;\r\n \r\n return editFn().catch(function(err) {\r\n // Check for rate limit (429)\r\n if (err.status === 429 || (err.message && err.message.includes('rate limit'))) {\r\n var retryAfter = err.retry_after || err.retryAfter || 1;\r\n __isRateLimited__ = true;\r\n __rateLimitEndTime__ = Date.now() + (retryAfter * 1000);\r\n \r\n return new Promise(function(resolve) {\r\n setTimeout(function() {\r\n __isRateLimited__ = false;\r\n if (retryCount < maxRetries) {\r\n resolve(__safeEdit__(editFn, retryCount + 1));\r\n } else {\r\n resolve();\r\n }\r\n }, retryAfter * 1000);\r\n });\r\n }\r\n return Promise.resolve();\r\n });\r\n }\r\n \r\n // Throttled render - ensures minimum interval between renders\r\n function __throttledRender__(immediate) {\r\n var now = Date.now();\r\n var timeSinceLastRender = now - __lastRenderTime__;\r\n var waitTime = 0;\r\n \r\n // If rate limited, calculate wait time\r\n if (__isRateLimited__ && __rateLimitEndTime__ > now) {\r\n waitTime = Math.max(waitTime, __rateLimitEndTime__ - now);\r\n }\r\n \r\n // If within throttle interval, schedule for later\r\n if (!immediate && timeSinceLastRender < __throttleMinInterval__) {\r\n waitTime = Math.max(waitTime, __throttleMinInterval__ - timeSinceLastRender);\r\n }\r\n \r\n // Clear any pending render\r\n if (__pendingRenderTimeout__) {\r\n clearTimeout(__pendingRenderTimeout__);\r\n __pendingRenderTimeout__ = null;\r\n }\r\n \r\n if (waitTime > 0) {\r\n return new Promise(function(resolve) {\r\n __pendingRenderTimeout__ = setTimeout(function() {\r\n __pendingRenderTimeout__ = null;\r\n __lastRenderTime__ = Date.now();\r\n resolve(__executeRender__());\r\n }, waitTime);\r\n });\r\n }\r\n \r\n __lastRenderTime__ = now;\r\n return __executeRender__();\r\n }\r\n \r\n // Actual render execution\r\n async function __executeRender__() {\r\n console.log(\"[DBI-Svelte DEBUG] __executeRender__ called\");\r\n // Run pre-render callbacks (async, awaited)\r\n await __runPreRender__();\r\n \r\n console.log(\"[DBI-Svelte DEBUG] Calling toJSON with data:\", JSON.stringify(__data__).substring(0, 200));\r\n var components = await __component__.toJSON({ data: __data__ });\r\n console.log(\"[DBI-Svelte DEBUG] toJSON returned\", components ? \"components\" : \"null\");\r\n var result;\r\n \r\n // Try to use current interaction if available\r\n if (__ctx__ && __ctx__.interaction) {\r\n try {\r\n var i = __ctx__.interaction;\r\n console.log(\"[DBI-Svelte DEBUG] interaction available, replied:\", i.replied, \"deferred:\", i.deferred, \"__interactionDeferred__:\", __interactionDeferred__);\r\n \r\n // Update last message reference\r\n if (i.message) {\r\n __lastMessage__ = i.message;\r\n }\r\n \r\n // Check if interaction was deferred (our flag) or Discord.js flags\r\n if (i.replied || i.deferred || __interactionDeferred__) {\r\n console.log(\"[DBI-Svelte DEBUG] Using message.edit (deferred path)\");\r\n // Already replied/deferred, use message.edit with rate limit handling\r\n result = await __safeEdit__(function() {\r\n return i.message.edit({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n } else {\r\n console.log(\"[DBI-Svelte DEBUG] Using interaction.update\");\r\n // Not replied yet, use update with rate limit handling\r\n result = await __safeEdit__(function() {\r\n return i.update({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n }\r\n \r\n // Run after-render callbacks\r\n __runAfterRender__();\r\n return result;\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] Render failed:\", err);\r\n throw err;\r\n }\r\n }\r\n \r\n // Fallback: Use last message reference (for intervals/timeouts outside interaction)\r\n if (__lastMessage__) {\r\n result = await __safeEdit__(function() {\r\n return __lastMessage__.edit({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n \r\n // Run after-render callbacks\r\n __runAfterRender__();\r\n return result;\r\n }\r\n \r\n return Promise.resolve();\r\n }\r\n \r\n // Helper: Auto-detect whether to use update() or rerender()\r\n // If interaction was already replied/deferred, use message.edit\r\n // Otherwise use interaction.update\r\n function render(immediate) {\r\n return __throttledRender__(immediate);\r\n }\r\n \r\n // Track if we're inside a handler execution\r\n var __inHandlerExecution__ = false;\r\n \r\n // Track pending low-priority updates (from intervals/timeouts)\r\n var __pendingLowPriorityRender__ = false;\r\n \r\n // Mark that we have pending data changes\r\n function __markDataChanged__() {\r\n __hasDataChanges__ = true;\r\n \r\n // If we're NOT inside a handler (e.g., interval/timeout), trigger render immediately\r\n // The throttle will prevent too many renders\r\n if (!__inHandlerExecution__ && __autoRenderEnabled__ && __lastMessage__) {\r\n __hasDataChanges__ = false;\r\n __throttledRender__(false);\r\n }\r\n }\r\n \r\n // Low-priority update - used for background tasks like intervals\r\n // If a handler is currently running, skip this update (the handler's update will include our changes)\r\n function lowPriorityUpdate(callback) {\r\n if (__inHandlerExecution__) {\r\n // Handler is running - just update data, skip render\r\n // The handler will render when it finishes\r\n if (callback) callback();\r\n return;\r\n }\r\n \r\n // No handler running - proceed with update\r\n if (callback) callback();\r\n }\r\n \r\n // Flush pending render (called after interaction methods complete)\r\n function __flushRender__() {\r\n if (__hasDataChanges__ && __autoRenderEnabled__) {\r\n __hasDataChanges__ = false;\r\n render();\r\n }\r\n }\r\n \r\n // Create reactive proxy for data\r\n // Also properly forwards Object.keys/values/entries operations\r\n function __createReactiveProxy__(target, path) {\r\n if (typeof target !== 'object' || target === null) return target;\r\n \r\n return new Proxy(target, {\r\n get: function(obj, prop) {\r\n var value = obj[prop];\r\n // Wrap nested objects in proxy too\r\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\r\n return __createReactiveProxy__(value, path + '.' + String(prop));\r\n }\r\n return value;\r\n },\r\n set: function(obj, prop, value) {\r\n var oldValue = obj[prop];\r\n obj[prop] = value;\r\n // Only mark as changed if value actually changed\r\n if (oldValue !== value) {\r\n __markDataChanged__();\r\n }\r\n return true;\r\n },\r\n // Forward Object.keys/values/entries operations\r\n ownKeys: function(target) {\r\n return Reflect.ownKeys(target);\r\n },\r\n getOwnPropertyDescriptor: function(target, prop) {\r\n return Reflect.getOwnPropertyDescriptor(target, prop);\r\n },\r\n has: function(target, prop) {\r\n return Reflect.has(target, prop);\r\n }\r\n });\r\n }\r\n \r\n // Wrap data in reactive proxy\r\n var data = __createReactiveProxy__(__data__, 'data');\r\n \r\n // Track if an async interaction method was called\r\n var __asyncInteractionCalled__ = false;\r\n \r\n // Track if interaction was deferred (deferUpdate/deferReply)\r\n var __interactionDeferred__ = false;\r\n \r\n // Wrap interaction methods to auto-render after completion\r\n var interaction = null;\r\n var ctx = null;\r\n \r\n if (__ctx__ && __ctx__.interaction) {\r\n var originalInteraction = __ctx__.interaction;\r\n \r\n // Create a proxy for interaction that wraps reply/followUp/deferReply\r\n // Also properly forwards Object.keys/values/entries operations\r\n // Uses Reflect.get to properly handle getters with correct 'this' binding\r\n interaction = new Proxy(originalInteraction, {\r\n get: function(target, prop, receiver) {\r\n // Use Reflect.get to properly handle getters (like 'roles', 'users', etc.)\r\n // This ensures 'this' context is correct for Discord.js Collection getters\r\n var value = Reflect.get(target, prop, target);\r\n \r\n // Wrap methods that \"consume\" the interaction (reply, followUp, defer)\r\n if (prop === 'reply' || prop === 'followUp' || prop === 'deferReply' || prop === 'deferUpdate') {\r\n return function() {\r\n // Mark that async interaction was called - this prevents sync flush at handler end\r\n __asyncInteractionCalled__ = true;\r\n \r\n // Mark as deferred for deferUpdate/deferReply\r\n if (prop === 'deferUpdate' || prop === 'deferReply') {\r\n __interactionDeferred__ = true;\r\n }\r\n \r\n var result = value.apply(target, arguments);\r\n // After the reply completes, flush any pending renders using throttled render\r\n if (result && typeof result.then === 'function') {\r\n result.then(function() {\r\n console.log(\"[DBI-Svelte DEBUG] \" + prop + \" completed, hasDataChanges:\", __hasDataChanges__, \"autoRenderEnabled:\", __autoRenderEnabled__);\r\n if (__hasDataChanges__ && __autoRenderEnabled__) {\r\n __hasDataChanges__ = false;\r\n console.log(\"[DBI-Svelte DEBUG] Triggering render after \" + prop);\r\n // Use throttled render which handles rate limits\r\n __throttledRender__(false);\r\n }\r\n }).catch(function(err) {\r\n console.error(\"[DBI-Svelte] Render after \" + prop + \" failed:\", err);\r\n });\r\n }\r\n return result;\r\n };\r\n }\r\n \r\n // Wrap update method - this one renders directly, no need to flush after\r\n if (prop === 'update') {\r\n return function() {\r\n __autoRenderEnabled__ = false; // Disable auto since we're doing manual update\r\n __asyncInteractionCalled__ = true;\r\n return value.apply(target, arguments);\r\n };\r\n }\r\n \r\n // Bind functions to original target\r\n if (typeof value === 'function') {\r\n return value.bind(target);\r\n }\r\n \r\n return value;\r\n },\r\n // Forward Object.keys/values/entries operations\r\n ownKeys: function(target) {\r\n return Reflect.ownKeys(target);\r\n },\r\n getOwnPropertyDescriptor: function(target, prop) {\r\n return Reflect.getOwnPropertyDescriptor(target, prop);\r\n },\r\n has: function(target, prop) {\r\n return Reflect.has(target, prop);\r\n }\r\n });\r\n \r\n // Create wrapped ctx with the proxied interaction\r\n // Also properly forwards Object.keys/values/entries operations\r\n ctx = new Proxy(__ctx__, {\r\n get: function(target, prop, receiver) {\r\n if (prop === 'interaction') {\r\n return interaction;\r\n }\r\n // Use Reflect.get for proper getter handling\r\n return Reflect.get(target, prop, target);\r\n },\r\n // Forward Object.keys/values/entries operations\r\n ownKeys: function(target) {\r\n return Reflect.ownKeys(target);\r\n },\r\n getOwnPropertyDescriptor: function(target, prop) {\r\n return Reflect.getOwnPropertyDescriptor(target, prop);\r\n },\r\n has: function(target, prop) {\r\n return Reflect.has(target, prop);\r\n }\r\n });\r\n }\r\n \r\n // Helper: Force update message using interaction.update (for button clicks without reply)\r\n // Helper: Force update message using interaction.update (for button clicks without reply)\r\n async function update() {\r\n if (!__ctx__ || !__ctx__.interaction) {\r\n return Promise.resolve();\r\n }\r\n __autoRenderEnabled__ = false; // Disable auto-render since manual update called\r\n var components = await __component__.toJSON({ data: __data__ });\r\n return __safeEdit__(function() {\r\n return __ctx__.interaction.update({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n }\r\n \r\n // Helper: Force re-render message using message.edit (after reply/followUp)\r\n async function rerender() {\r\n if (!__ctx__ || !__ctx__.interaction || !__ctx__.interaction.message) {\r\n return Promise.resolve();\r\n }\r\n __autoRenderEnabled__ = false; // Disable auto-render since manual rerender called\r\n var components = await __component__.toJSON({ data: __data__ });\r\n return __safeEdit__(function() {\r\n return __ctx__.interaction.message.edit({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n }\r\n \r\n // Helper: Disable auto-render (for handlers that don't need UI update)\r\n function noRender() {\r\n __autoRenderEnabled__ = false;\r\n }\r\n \r\n // Helper: Set throttle interval (minimum ms between renders)\r\n function setThrottle(ms) {\r\n __throttleMinInterval__ = ms;\r\n }\r\n \r\n // Helper: Destroy this component instance (clears intervals, timers, removes ref)\r\n // Call this when you want to clean up the component manually\r\n function destroy() {\r\n // Run all destroy callbacks (clears intervals, timers, etc.)\r\n __runDestroy__();\r\n \r\n // Clear the ref from DBI store if available\r\n if (__data__ && __data__.$ref && __component__ && __component__.dbi) {\r\n __component__.dbi.data.refs.delete(__data__.$ref);\r\n }\r\n \r\n // Disable further auto-renders\r\n __autoRenderEnabled__ = false;\r\n }\r\n \r\n // Check if there are pending data changes that need SYNC render\r\n // Returns false if async interaction was called (reply/followUp will handle render)\r\n function __hasPendingRender__() {\r\n return __hasDataChanges__ && __autoRenderEnabled__ && !__asyncInteractionCalled__;\r\n }\r\n \r\n // Synchronous flush for when handler completes without async interaction\r\n // Only called when no reply/followUp was made - uses throttled render\r\n function __syncFlushRender__() {\r\n if (__hasDataChanges__ && __autoRenderEnabled__ && !__asyncInteractionCalled__) {\r\n __hasDataChanges__ = false;\r\n return __throttledRender__(true); // immediate=true for sync flush\r\n }\r\n return Promise.resolve();\r\n }\r\n \r\n // Run all mount callbacks, if callback returns a function add it to destroy callbacks\r\n function __runMount__() {\r\n if (__isMounted__) return;\r\n __isMounted__ = true;\r\n for (var i = 0; i < __mountCallbacks__.length; i++) {\r\n try {\r\n var result = __mountCallbacks__[i]();\r\n // If mount callback returns a function, add it to destroy callbacks\r\n if (typeof result === 'function') {\r\n __destroyCallbacks__.push(result);\r\n }\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] onMount callback failed:\", err);\r\n throw err;\r\n }\r\n }\r\n }\r\n \r\n // Run all destroy callbacks\r\n function __runDestroy__() {\r\n for (var i = 0; i < __destroyCallbacks__.length; i++) {\r\n try {\r\n __destroyCallbacks__[i]();\r\n } catch (err) {\r\n console.error(\"[DBI-Svelte] onDestroy callback failed:\", err);\r\n throw err;\r\n }\r\n }\r\n // Clear pending timeouts\r\n if (__pendingRenderTimeout__) {\r\n clearTimeout(__pendingRenderTimeout__);\r\n __pendingRenderTimeout__ = null;\r\n }\r\n }\r\n \r\n // Set handler execution flag\r\n function __setInHandler__(value) {\r\n __inHandlerExecution__ = value;\r\n }\r\n \r\n ${processedScript}\r\n \r\n // Inline handlers from template (extracted arrow functions/function expressions)\r\n ${Array.from(inlineHandlers || new Map()).map(([name, code]) => {\r\n // Wrap the inline code as a named function\r\n // If it's an arrow function, convert to regular function for proper 'this' binding\r\n if (code.trim().startsWith('async')) {\r\n // async arrow function or async function\r\n if (code.includes('=>')) {\r\n // async arrow function: async (ctx) => { ... } or async () => { ... }\r\n return `var ${name} = ${code};`;\r\n } else {\r\n // async function expression: async function(ctx) { ... }\r\n return `var ${name} = ${code};`;\r\n }\r\n } else if (code.includes('=>')) {\r\n // Regular arrow function: (ctx) => { ... } or () => { ... }\r\n return `var ${name} = ${code};`;\r\n } else {\r\n // Regular function expression: function(ctx) { ... }\r\n return `var ${name} = ${code};`;\r\n }\r\n }).join('\\n')}\r\n \r\n return { \r\n handlers: { ${[...functionNames, ...Array.from(inlineHandlers || new Map()).map(([name]) => name)].filter(Boolean).join(\", \")} },\r\n effects: __effects__,\r\n hasPendingRender: __hasPendingRender__,\r\n flushRender: __syncFlushRender__,\r\n wrappedCtx: ctx,\r\n mountCallbacks: __mountCallbacks__,\r\n destroyCallbacks: __destroyCallbacks__,\r\n preRenderCallbacks: __preRenderCallbacks__,\r\n afterRenderCallbacks: __afterRenderCallbacks__,\r\n runMount: __runMount__,\r\n runDestroy: __runDestroy__,\r\n runPreRender: __runPreRender__,\r\n runAfterRender: __runAfterRender__,\r\n setInHandler: __setInHandler__,\r\n render: render\r\n };\r\n };\r\n `;\r\n\r\n // Create the factory function\r\n const factoryFunc = new Function('console', wrappedScript);\r\n const createHandlers = factoryFunc(console);\r\n\r\n // Execute with the actual data, component, ctx, and imported modules to get handlers with proper closure\r\n let result;\r\n try {\r\n result = createHandlers(initialData, component, ctx, modules);\r\n } catch (execError) {\r\n throw execError;\r\n }\r\n\r\n Object.assign(handlers, result.handlers || {});\r\n effects.push(...(result.effects || []));\r\n\r\n // Return full result including render helpers\r\n // Function to run all effects\r\n const runEffects = () => {\r\n for (const effect of effects) {\r\n try {\r\n effect();\r\n } catch (error) {\r\n // Effect failed\r\n }\r\n }\r\n };\r\n\r\n return {\r\n handlers,\r\n effects,\r\n runEffects,\r\n hasPendingRender: result.hasPendingRender || (() => false),\r\n flushRender: result.flushRender || (() => Promise.resolve()),\r\n wrappedCtx: result.wrappedCtx || ctx,\r\n mountCallbacks: result.mountCallbacks || [],\r\n destroyCallbacks: result.destroyCallbacks || [],\r\n preRenderCallbacks: result.preRenderCallbacks || [],\r\n afterRenderCallbacks: result.afterRenderCallbacks || [],\r\n runMount: result.runMount || (() => { }),\r\n runDestroy: result.runDestroy || (() => { }),\r\n runPreRender: result.runPreRender || (async () => { }),\r\n runAfterRender: result.runAfterRender || (() => { }),\r\n setInHandler: result.setInHandler || (() => { }),\r\n render: result.render || (() => Promise.resolve())\r\n };\r\n } catch (error) {\r\n // Re-throw the error so it's visible to the developer\r\n console.error(\"[DBI-Svelte] createHandlerContext failed:\", error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Extract $effect callback bodies from script content\r\n */\r\nfunction extractEffectBodies(script: string): string[] {\r\n const bodies: string[] = [];\r\n // Match $effect(() => { ... }) or $effect(function() { ... })\r\n const effectRegex = /\\$effect\\s*\\(\\s*(?:(?:function\\s*\\([^)]*\\)|\\([^)]*\\)\\s*=>|\\(\\)\\s*=>)\\s*\\{([\\s\\S]*?)\\})\\s*\\)/g;\r\n let match;\r\n while ((match = effectRegex.exec(script)) !== null) {\r\n bodies.push(match[1]);\r\n }\r\n return bodies;\r\n}\r\n\r\n/**\r\n * Extract function names from script content (excluding effect callbacks)\r\n */\r\nfunction extractFunctionNames(script: string): string[] {\r\n const names: string[] = [];\r\n\r\n // Match function declarations: function name() {}\r\n const functionDeclRegex = /function\\s+(\\w+)\\s*\\(/g;\r\n let match;\r\n while ((match = functionDeclRegex.exec(script)) !== null) {\r\n names.push(match[1]);\r\n }\r\n\r\n // Match function expressions: const name = function() {}\r\n const functionExprRegex = /(?:const|let|var)\\s+(\\w+)\\s*=\\s*function\\s*\\(/g;\r\n while ((match = functionExprRegex.exec(script)) !== null) {\r\n names.push(match[1]);\r\n }\r\n\r\n // Match arrow functions: const name = () => {}\r\n const arrowFunctionRegex = /(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s*)?\\([^)]*\\)\\s*=>/g;\r\n while ((match = arrowFunctionRegex.exec(script)) !== null) {\r\n names.push(match[1]);\r\n }\r\n\r\n // Match arrow functions without parentheses: const name = x => {}\r\n const simpleArrowRegex = /(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s*)?\\w+\\s*=>/g;\r\n while ((match = simpleArrowRegex.exec(script)) !== null) {\r\n names.push(match[1]);\r\n }\r\n\r\n return [...new Set(names)]; // Remove duplicates\r\n}\r\n"]}
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "tslib": "^2.6.3"
16
16
  },
17
17
  "name": "@mostfeatured/dbi",
18
- "version": "0.2.27",
18
+ "version": "0.2.29-dev.0",
19
19
  "main": "dist/src/index.js",
20
20
  "types": "dist/src/index.d.ts",
21
21
  "typesVersions": {