@mostfeatured/dbi 0.2.28 → 0.2.29-dev.1

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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"}
@@ -721,14 +721,18 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
721
721
  const content = match.substring(startIndex + 1, endIndex);
722
722
  // Parse props with proper handling of nested braces
723
723
  const props = parsePropsContent(content);
724
- return props.map(prop => {
724
+ // Generate prop accessors that read from data at access time
725
+ // Use a special pattern: define both the initial var AND a __propGetters__ object
726
+ // that inline handlers can use to get current values
727
+ const propDefs = props.map(prop => {
725
728
  if (!prop.name || prop.name === 'data')
726
729
  return '';
727
730
  if (prop.defaultValue !== undefined) {
728
- return `var ${prop.name} = data.${prop.name} ?? ${prop.defaultValue};`;
731
+ return `var ${prop.name} = data.${prop.name} ?? ${prop.defaultValue}; __propGetters__.${prop.name} = function() { return data.${prop.name} ?? ${prop.defaultValue}; };`;
729
732
  }
730
- return `var ${prop.name} = data.${prop.name};`;
733
+ return `var ${prop.name} = data.${prop.name}; __propGetters__.${prop.name} = function() { return data.${prop.name}; };`;
731
734
  }).filter(Boolean).join('\n');
735
+ return propDefs;
732
736
  });
733
737
  // Add module variable declarations at the beginning of processed script
734
738
  if (varDeclarations) {
@@ -748,6 +752,9 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
748
752
  var __autoRenderEnabled__ = true;
749
753
  var __hasDataChanges__ = false;
750
754
 
755
+ // Prop getters for accessing current data values (used by inline handlers)
756
+ var __propGetters__ = {};
757
+
751
758
  // Lifecycle callbacks
752
759
  var __mountCallbacks__ = [];
753
760
  var __destroyCallbacks__ = [];
@@ -915,7 +922,11 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
915
922
  retryCount = retryCount || 0;
916
923
  var maxRetries = 3;
917
924
 
918
- return editFn().catch(function(err) {
925
+ return editFn().then(function(result) {
926
+ console.log("[DBI-Svelte DEBUG] __safeEdit__ success");
927
+ return result;
928
+ }).catch(function(err) {
929
+ console.error("[DBI-Svelte DEBUG] __safeEdit__ error:", err.message || err);
919
930
  // Check for rate limit (429)
920
931
  if (err.status === 429 || (err.message && err.message.includes('rate limit'))) {
921
932
  var retryAfter = err.retry_after || err.retryAfter || 1;
@@ -933,7 +944,8 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
933
944
  }, retryAfter * 1000);
934
945
  });
935
946
  }
936
- return Promise.resolve();
947
+ // Log and re-throw non-rate-limit errors
948
+ throw err;
937
949
  });
938
950
  }
939
951
 
@@ -975,16 +987,28 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
975
987
 
976
988
  // Actual render execution
977
989
  async function __executeRender__() {
990
+ console.log("[DBI-Svelte DEBUG] __executeRender__ called");
978
991
  // Run pre-render callbacks (async, awaited)
979
992
  await __runPreRender__();
980
993
 
994
+ console.log("[DBI-Svelte DEBUG] Calling toJSON with data:", JSON.stringify(__data__).substring(0, 200));
981
995
  var components = await __component__.toJSON({ data: __data__ });
996
+ console.log("[DBI-Svelte DEBUG] toJSON returned", components ? "components" : "null");
982
997
  var result;
983
998
 
984
999
  // Try to use current interaction if available
985
1000
  if (__ctx__ && __ctx__.interaction) {
986
1001
  try {
987
1002
  var i = __ctx__.interaction;
1003
+ console.log("[DBI-Svelte DEBUG] interaction available, replied:", i.replied, "deferred:", i.deferred, "__interactionDeferred__:", __interactionDeferred__);
1004
+ console.log("[DBI-Svelte DEBUG] components count:", components ? components.length : 0);
1005
+ if (components && components[0]) {
1006
+ console.log("[DBI-Svelte DEBUG] first component type:", components[0].type);
1007
+ // Log first text content if it's a text_display
1008
+ if (components[0].type === 10 && components[0].content) {
1009
+ console.log("[DBI-Svelte DEBUG] first text content:", components[0].content.substring(0, 100));
1010
+ }
1011
+ }
988
1012
 
989
1013
  // Update last message reference
990
1014
  if (i.message) {
@@ -993,6 +1017,7 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
993
1017
 
994
1018
  // Check if interaction was deferred (our flag) or Discord.js flags
995
1019
  if (i.replied || i.deferred || __interactionDeferred__) {
1020
+ console.log("[DBI-Svelte DEBUG] Using message.edit (deferred path)");
996
1021
  // Already replied/deferred, use message.edit with rate limit handling
997
1022
  result = await __safeEdit__(function() {
998
1023
  return i.message.edit({
@@ -1001,6 +1026,7 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
1001
1026
  });
1002
1027
  });
1003
1028
  } else {
1029
+ console.log("[DBI-Svelte DEBUG] Using interaction.update");
1004
1030
  // Not replied yet, use update with rate limit handling
1005
1031
  result = await __safeEdit__(function() {
1006
1032
  return i.update({
@@ -1159,8 +1185,10 @@ function createHandlerContext(scriptContent, initialData = {}, component, ctx, s
1159
1185
  // After the reply completes, flush any pending renders using throttled render
1160
1186
  if (result && typeof result.then === 'function') {
1161
1187
  result.then(function() {
1188
+ console.log("[DBI-Svelte DEBUG] " + prop + " completed, hasDataChanges:", __hasDataChanges__, "autoRenderEnabled:", __autoRenderEnabled__);
1162
1189
  if (__hasDataChanges__ && __autoRenderEnabled__) {
1163
1190
  __hasDataChanges__ = false;
1191
+ console.log("[DBI-Svelte DEBUG] Triggering render after " + prop);
1164
1192
  // Use throttled render which handles rate limits
1165
1193
  __throttledRender__(false);
1166
1194
  }
@@ -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 // Check if interaction was deferred (our flag) or Discord.js flags\r\n if (i.replied || i.deferred || __interactionDeferred__) {\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 // 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 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 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"]}
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 // Generate prop accessors that read from data at access time\r\n // Use a special pattern: define both the initial var AND a __propGetters__ object\r\n // that inline handlers can use to get current values\r\n const propDefs = 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}; __propGetters__.${prop.name} = function() { return data.${prop.name} ?? ${prop.defaultValue}; };`;\r\n }\r\n return `var ${prop.name} = data.${prop.name}; __propGetters__.${prop.name} = function() { return data.${prop.name}; };`;\r\n }).filter(Boolean).join('\\n');\r\n\r\n return propDefs;\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 // Prop getters for accessing current data values (used by inline handlers)\r\n var __propGetters__ = {};\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().then(function(result) {\r\n console.log(\"[DBI-Svelte DEBUG] __safeEdit__ success\");\r\n return result;\r\n }).catch(function(err) {\r\n console.error(\"[DBI-Svelte DEBUG] __safeEdit__ error:\", err.message || 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 // Log and re-throw non-rate-limit errors\r\n throw err;\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 console.log(\"[DBI-Svelte DEBUG] components count:\", components ? components.length : 0);\r\n if (components && components[0]) {\r\n console.log(\"[DBI-Svelte DEBUG] first component type:\", components[0].type);\r\n // Log first text content if it's a text_display\r\n if (components[0].type === 10 && components[0].content) {\r\n console.log(\"[DBI-Svelte DEBUG] first text content:\", components[0].content.substring(0, 100));\r\n }\r\n }\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"svelteRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,EAA8C,mBAAmB,EAAwE,MAAM,gBAAgB,CAAC;AAIvK,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC7D,aAAa,EAAE,mBAAmB,CAAC;IACnC,uEAAuE;IACvE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CA8K7B;AA4LD;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAK7B"}
1
+ {"version":3,"file":"svelteRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,EAA8C,mBAAmB,EAAwE,MAAM,gBAAgB,CAAC;AAIvK,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC7D,aAAa,EAAE,mBAAmB,CAAC;IACnC,uEAAuE;IACvE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAiL7B;AA+LD;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAK7B"}
@@ -79,8 +79,11 @@ ${nextLine ? `${lineNum + 1} | ${nextLine}` : ''}
79
79
  // Svelte 5 SSR: Use render from svelte/server
80
80
  const { render } = require("svelte/server");
81
81
  // Pass data properties as top-level props (Svelte 5 expects flat props object)
82
+ console.log("[DBI-Svelte DEBUG] Rendering with props:", JSON.stringify(data).substring(0, 500));
83
+ console.log("[DBI-Svelte DEBUG] Props keys:", Object.keys(data));
82
84
  const renderResult = render(Component, { props: data });
83
85
  html = renderResult.body || "";
86
+ console.log("[DBI-Svelte DEBUG] Rendered HTML:", html.substring(0, 500));
84
87
  }
85
88
  catch (runtimeError) {
86
89
  // Format runtime error with helpful details
@@ -200,6 +203,8 @@ function createModuleContext(dbi, data, ttl) {
200
203
  */
201
204
  function evaluateCompiledComponent(code, context, filePath) {
202
205
  try {
206
+ // Log a portion of the compiled code for debugging
207
+ console.log("[DBI-Svelte DEBUG] Compiled code snippet:", code.substring(0, 500));
203
208
  // Load Svelte 5 internal runtime
204
209
  const svelteInternal = require("svelte/internal/server");
205
210
  const path = require("path");
@@ -1 +1 @@
1
- {"version":3,"file":"svelteRenderer.js","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { compile } from \"svelte/compiler\";\r\nimport { DBI } from \"../../../DBI\";\r\nimport { NamespaceEnums } from \"../../../../generated/namespaceData\";\r\nimport { parseHTMLComponentsV2, parseHTMLComponentsV2Multi } from \"./parser\";\r\nimport { parseSvelteComponent, createHandlerContext, SvelteComponentInfo, HandlerContextResult, validateSvelteComponent, logValidationWarnings } from \"./svelteParser\";\r\nimport * as stuffs from \"stuffs\";\r\nimport * as vm from \"vm\";\r\n\r\nexport interface SvelteRenderOptions {\r\n data?: Record<string, any>;\r\n ttl?: number;\r\n /** If true, skips validation warnings (useful for production) */\r\n skipValidation?: boolean;\r\n /** The file path of the Svelte component (used for resolving relative imports) */\r\n filePath?: string;\r\n}\r\n\r\nexport interface ModalDefinition {\r\n title: string;\r\n customId: string;\r\n components: any[];\r\n modalId: string;\r\n}\r\n\r\nexport interface SvelteRenderResult {\r\n components: any[];\r\n handlers: Map<string, { handlerFn: Function, context: any }>;\r\n componentInfo: SvelteComponentInfo;\r\n /** Modal definitions parsed from <components type=\"modal\"> elements */\r\n modals: Map<string, ModalDefinition>;\r\n}\r\n\r\n/**\r\n * Compile and render a Svelte component to Discord components\r\n */\r\nexport async function renderSvelteComponent(\r\n dbi: DBI<NamespaceEnums>,\r\n source: string,\r\n dbiName: string,\r\n options: SvelteRenderOptions = {}\r\n): Promise<SvelteRenderResult> {\r\n const { data = {}, ttl = 0, skipValidation = false, filePath } = options;\r\n\r\n // Parse the Svelte component to extract handlers\r\n // This also injects auto-generated names into elements without name attribute\r\n const componentInfo = await parseSvelteComponent(source, data);\r\n\r\n // Validate the component and log warnings (only on first render, not re-renders)\r\n if (!skipValidation && !data.$ref) {\r\n const warnings = validateSvelteComponent(componentInfo, data, dbiName);\r\n if (warnings.length > 0) {\r\n logValidationWarnings(warnings);\r\n }\r\n }\r\n\r\n // Use the processed source (with auto-generated names injected)\r\n const processedSource = componentInfo.processedSource;\r\n\r\n // Compile the Svelte component for SSR (Svelte 5)\r\n let compiled;\r\n try {\r\n compiled = compile(processedSource, {\r\n generate: \"server\",\r\n css: \"injected\",\r\n dev: false,\r\n } as any);\r\n } catch (compileError: any) {\r\n // Format Svelte compile error with helpful details\r\n const errorMessage = compileError.message || 'Unknown compile error';\r\n const location = compileError.start || compileError.loc || compileError.position;\r\n let details = errorMessage;\r\n\r\n if (location) {\r\n const lines = processedSource.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 Compile 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 // Check for common mistakes and add hints\r\n let hint = '';\r\n if (errorMessage.includes('Unexpected token')) {\r\n hint = '\\n\\nšŸ’” Hint: Check for missing closing tags, unclosed braces, or invalid JavaScript syntax.';\r\n } else if (errorMessage.includes('is not defined')) {\r\n hint = '\\n\\nšŸ’” Hint: Make sure all variables are declared in $props() or as local variables.';\r\n } else if (errorMessage.includes('Expected')) {\r\n hint = '\\n\\nšŸ’” Hint: There might be a syntax error in your template or script.';\r\n }\r\n\r\n const enhancedError = new Error(`[DBI-Svelte] Failed to compile component \"${dbiName}\":\\n${details}${hint}`);\r\n (enhancedError as any).originalError = compileError;\r\n (enhancedError as any).type = 'svelte-compile-error';\r\n throw enhancedError;\r\n }\r\n\r\n // Create a module context for the compiled code\r\n let html = \"\";\r\n try {\r\n const moduleContext = createModuleContext(dbi, data, ttl);\r\n const Component = evaluateCompiledComponent(compiled.js.code, moduleContext, filePath);\r\n\r\n // Svelte 5 SSR: Use render from svelte/server\r\n const { render } = require(\"svelte/server\");\r\n // Pass data properties as top-level props (Svelte 5 expects flat props object)\r\n const renderResult = render(Component, { props: data });\r\n html = renderResult.body || \"\";\r\n } catch (runtimeError: any) {\r\n // Format runtime error with helpful details\r\n const errorMessage = runtimeError.message || 'Unknown runtime error';\r\n let hint = '';\r\n\r\n if (errorMessage.includes('is not a function')) {\r\n hint = '\\n\\nšŸ’” Hint: A function you are trying to call is undefined. Check handler names.';\r\n } else if (errorMessage.includes('Cannot read properties of undefined') || errorMessage.includes('undefined is not an object')) {\r\n hint = '\\n\\nšŸ’” Hint: You are trying to access a property of an undefined value. Check your data object.';\r\n } else if (errorMessage.includes('is not defined')) {\r\n hint = '\\n\\nšŸ’” Hint: A variable is used but not declared. Make sure it is in $props() or declared locally.';\r\n }\r\n\r\n const enhancedError = new Error(`[DBI-Svelte] Runtime error in component \"${dbiName}\":\\n${errorMessage}${hint}`);\r\n (enhancedError as any).originalError = runtimeError;\r\n (enhancedError as any).type = 'svelte-runtime-error';\r\n throw enhancedError;\r\n }\r\n\r\n // For Svelte mode, inject state into interactive elements as a ref\r\n // Reuse existing ref if data already has one, otherwise create new\r\n if (data && Object.keys(data).length > 0) {\r\n let stateRefId: string;\r\n\r\n // Check if data already has a $ref (from previous render)\r\n if (data.$ref && typeof data.$ref === 'string') {\r\n stateRefId = data.$ref;\r\n // Update the existing ref's value with new data\r\n const existingRef = dbi.data.refs.get(stateRefId);\r\n if (existingRef) {\r\n existingRef.value = data;\r\n existingRef.at = Date.now(); // Refresh timestamp\r\n } else {\r\n // Ref expired or was deleted, create new one with same ID\r\n dbi.data.refs.set(stateRefId, { at: Date.now(), value: data, ttl });\r\n }\r\n } else {\r\n // Create a new ref for the state\r\n stateRefId = stuffs.randomString(8);\r\n data.$ref = stateRefId; // Store ref ID in data for future updates\r\n dbi.data.refs.set(stateRefId, { at: Date.now(), value: data, ttl });\r\n }\r\n\r\n // Add state ref to all elements with name attribute (buttons, selects)\r\n // This includes both manual names and auto-generated names from svelteParser\r\n html = html.replace(/<button([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, attrs) => {\r\n // Check if it already has data attributes\r\n if (attrs.includes('data-1:')) return match;\r\n return `<button${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n // Also handle select elements (with optional -menu suffix for Svelte compatibility)\r\n // Supports: string-select, user-select, role-select, channel-select, mentionable-select\r\n // Both with and without -menu suffix (e.g., string-select-menu or string-select)\r\n html = html.replace(/<(string-select(?:-menu)?|user-select(?:-menu)?|role-select(?:-menu)?|channel-select(?:-menu)?|mentionable-select(?:-menu)?)([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, tag, attrs) => {\r\n if (attrs.includes('data-1:')) return match;\r\n return `<${tag}${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n // Handle modal elements with name attribute\r\n html = html.replace(/<modal([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, attrs) => {\r\n if (attrs.includes('data-1:')) return match;\r\n return `<modal${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n }\r\n\r\n // Parse the rendered HTML to Discord components (with modal support)\r\n const parseResult = parseHTMLComponentsV2Multi(dbi, html, dbiName, { data, ttl });\r\n const components = parseResult.components;\r\n const modals = parseResult.modals;\r\n\r\n // Get source directory for resolving relative imports\r\n const path = require(\"path\");\r\n const sourceDir = filePath ? path.dirname(path.resolve(filePath)) : undefined;\r\n\r\n // Create handler context (also captures $effect callbacks and inline handlers)\r\n const handlerContext = createHandlerContext(componentInfo.scriptContent, data, undefined, undefined, sourceDir, componentInfo.inlineHandlers);\r\n const handlers = new Map<string, { handlerFn: Function, context: any }>();\r\n\r\n // Run effects on initial render\r\n handlerContext.runEffects();\r\n\r\n // Map handlers to component names\r\n componentInfo.handlers.forEach((handlerInfo, componentName) => {\r\n const handlerFn = handlerContext.handlers[handlerInfo.handlerName];\r\n if (handlerFn && typeof handlerFn === \"function\") {\r\n handlers.set(componentName, {\r\n handlerFn,\r\n context: data\r\n });\r\n }\r\n });\r\n\r\n return {\r\n components,\r\n handlers,\r\n componentInfo,\r\n modals\r\n };\r\n}\r\n\r\n/**\r\n * Create a module context for evaluating the compiled Svelte component\r\n */\r\nfunction createModuleContext(dbi: DBI<NamespaceEnums>, data: Record<string, any>, ttl: number) {\r\n return {\r\n // Store objects in refs for later retrieval in handlers\r\n // This is used internally by the parser when converting to Discord components\r\n __storeRef: (obj: any) => {\r\n let id = stuffs.randomString(8);\r\n dbi.data.refs.set(id, { at: Date.now(), value: obj, ttl });\r\n return id;\r\n },\r\n\r\n // DBI instance for advanced usage\r\n __dbi: dbi,\r\n\r\n // All data context available\r\n ...data,\r\n data, // Also expose as 'data' prop\r\n };\r\n}\r\n\r\n/**\r\n * Evaluate the compiled Svelte component code\r\n */\r\nfunction evaluateCompiledComponent(code: string, context: Record<string, any>, filePath?: string): any {\r\n try {\r\n // Load Svelte 5 internal runtime\r\n const svelteInternal = require(\"svelte/internal/server\");\r\n const path = require(\"path\");\r\n\r\n // Get the directory of the source file for resolving relative imports\r\n const sourceDir = filePath ? path.dirname(path.resolve(filePath)) : process.cwd();\r\n\r\n // Process the code to work in our context\r\n let processedCode = code;\r\n\r\n // Collect external modules to inject into sandbox\r\n const externalModules: Record<string, any> = {};\r\n\r\n // Replace svelte internal imports\r\n processedCode = processedCode.replace(\r\n /import\\s*\\*\\s*as\\s*(\\w+)\\s*from\\s*[\"']svelte\\/internal\\/server[\"'];?/g,\r\n 'const $1 = __svelteInternal;'\r\n );\r\n processedCode = processedCode.replace(\r\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']svelte\\/internal\\/server[\"'];?/g,\r\n (match, imports) => {\r\n const importList = imports.split(',').map((i: string) => i.trim());\r\n return `const { ${importList.join(', ')} } = __svelteInternal;`;\r\n }\r\n );\r\n\r\n // Handle external module imports (default imports)\r\n processedCode = processedCode.replace(\r\n /import\\s+(\\w+)\\s+from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, varName, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n // Resolve relative paths from source file directory\r\n const resolvedPath = modulePath.startsWith('.')\r\n ? path.resolve(sourceDir, modulePath)\r\n : modulePath;\r\n const mod = require(resolvedPath);\r\n externalModules[varName] = mod.default || mod;\r\n return `const ${varName} = __externalModules.${varName};`;\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Handle named imports from external modules\r\n processedCode = processedCode.replace(\r\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, imports, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n // Resolve relative paths from source file directory\r\n const resolvedPath = modulePath.startsWith('.')\r\n ? path.resolve(sourceDir, modulePath)\r\n : modulePath;\r\n const mod = require(resolvedPath);\r\n const importList = imports.split(',').map((i: string) => i.trim());\r\n importList.forEach((importName: string) => {\r\n const [name, alias] = importName.split(' as ').map(s => s.trim());\r\n externalModules[alias || name] = mod[name] || mod.default?.[name];\r\n });\r\n return importList.map((importName: string) => {\r\n const [name, alias] = importName.split(' as ').map(s => s.trim());\r\n return `const ${alias || name} = __externalModules.${alias || name};`;\r\n }).join('\\n');\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Handle namespace imports from external modules\r\n processedCode = processedCode.replace(\r\n /import\\s*\\*\\s*as\\s*(\\w+)\\s*from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, varName, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n // Resolve relative paths from source file directory\r\n const resolvedPath = modulePath.startsWith('.')\r\n ? path.resolve(sourceDir, modulePath)\r\n : modulePath;\r\n const mod = require(resolvedPath);\r\n externalModules[varName] = mod;\r\n return `const ${varName} = __externalModules.${varName};`;\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Remove any remaining import statements\r\n processedCode = processedCode\r\n .split('\\n')\r\n .filter(line => !line.trim().startsWith('import '))\r\n .join('\\n');\r\n\r\n // Replace 'export default' with assignment\r\n processedCode = processedCode.replace(/export\\s+default\\s+/g, '__exports.default = ');\r\n // Replace 'export function' with assignment\r\n processedCode = processedCode.replace(/export\\s+function\\s+(\\w+)/g, '__exports.$1 = function $1');\r\n // Replace 'export const' with assignment\r\n processedCode = processedCode.replace(/export\\s+const\\s+(\\w+)/g, '__exports.$1 = ');\r\n // Replace 'export let' with assignment \r\n processedCode = processedCode.replace(/export\\s+let\\s+(\\w+)/g, '__exports.$1 = ');\r\n\r\n // Create the sandbox context\r\n const __exports: any = {};\r\n // Svelte lifecycle functions - no-ops for SSR\r\n const svelteLifecycle = {\r\n onMount: () => () => { }, // Returns cleanup function\r\n onDestroy: () => { },\r\n beforeUpdate: () => { },\r\n afterUpdate: () => { },\r\n tick: () => Promise.resolve(),\r\n untrack: (fn: () => any) => fn(),\r\n createEventDispatcher: () => () => { },\r\n };\r\n\r\n // Note: Svelte 5 runes ($state, $derived, etc.) are compile-time features\r\n // The compiler transforms them, so we don't need runtime implementations.\r\n // The `$` variable is used by compiled code as the svelte/internal/server namespace.\r\n\r\n const sandbox = {\r\n __svelteInternal: svelteInternal,\r\n __externalModules: externalModules,\r\n $: svelteInternal, // Direct alias for compiled Svelte code that uses `$`\r\n __exports,\r\n console,\r\n ...svelteLifecycle,\r\n ...context,\r\n };\r\n\r\n // Wrap code in IIFE\r\n const wrappedCode = `\r\n (function() {\r\n ${processedCode}\r\n })();\r\n `;\r\n\r\n // Run in VM context for better isolation\r\n vm.createContext(sandbox);\r\n vm.runInContext(wrappedCode, sandbox);\r\n\r\n // Return the component\r\n const Component = sandbox.__exports.default;\r\n\r\n if (!Component) {\r\n throw new Error(\"Svelte component did not export a default component\");\r\n }\r\n\r\n return Component;\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Render a Svelte component from a file\r\n */\r\nexport async function renderSvelteComponentFromFile(\r\n dbi: DBI<NamespaceEnums>,\r\n filePath: string,\r\n dbiName: string,\r\n options: SvelteRenderOptions = {}\r\n): Promise<SvelteRenderResult> {\r\n const fs = require(\"fs\");\r\n const source = fs.readFileSync(filePath, \"utf-8\");\r\n // Pass filePath to options for resolving relative imports\r\n return await renderSvelteComponent(dbi, source, dbiName, { ...options, filePath });\r\n}\r\n"]}
1
+ {"version":3,"file":"svelteRenderer.js","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { compile } from \"svelte/compiler\";\r\nimport { DBI } from \"../../../DBI\";\r\nimport { NamespaceEnums } from \"../../../../generated/namespaceData\";\r\nimport { parseHTMLComponentsV2, parseHTMLComponentsV2Multi } from \"./parser\";\r\nimport { parseSvelteComponent, createHandlerContext, SvelteComponentInfo, HandlerContextResult, validateSvelteComponent, logValidationWarnings } from \"./svelteParser\";\r\nimport * as stuffs from \"stuffs\";\r\nimport * as vm from \"vm\";\r\n\r\nexport interface SvelteRenderOptions {\r\n data?: Record<string, any>;\r\n ttl?: number;\r\n /** If true, skips validation warnings (useful for production) */\r\n skipValidation?: boolean;\r\n /** The file path of the Svelte component (used for resolving relative imports) */\r\n filePath?: string;\r\n}\r\n\r\nexport interface ModalDefinition {\r\n title: string;\r\n customId: string;\r\n components: any[];\r\n modalId: string;\r\n}\r\n\r\nexport interface SvelteRenderResult {\r\n components: any[];\r\n handlers: Map<string, { handlerFn: Function, context: any }>;\r\n componentInfo: SvelteComponentInfo;\r\n /** Modal definitions parsed from <components type=\"modal\"> elements */\r\n modals: Map<string, ModalDefinition>;\r\n}\r\n\r\n/**\r\n * Compile and render a Svelte component to Discord components\r\n */\r\nexport async function renderSvelteComponent(\r\n dbi: DBI<NamespaceEnums>,\r\n source: string,\r\n dbiName: string,\r\n options: SvelteRenderOptions = {}\r\n): Promise<SvelteRenderResult> {\r\n const { data = {}, ttl = 0, skipValidation = false, filePath } = options;\r\n\r\n // Parse the Svelte component to extract handlers\r\n // This also injects auto-generated names into elements without name attribute\r\n const componentInfo = await parseSvelteComponent(source, data);\r\n\r\n // Validate the component and log warnings (only on first render, not re-renders)\r\n if (!skipValidation && !data.$ref) {\r\n const warnings = validateSvelteComponent(componentInfo, data, dbiName);\r\n if (warnings.length > 0) {\r\n logValidationWarnings(warnings);\r\n }\r\n }\r\n\r\n // Use the processed source (with auto-generated names injected)\r\n const processedSource = componentInfo.processedSource;\r\n\r\n // Compile the Svelte component for SSR (Svelte 5)\r\n let compiled;\r\n try {\r\n compiled = compile(processedSource, {\r\n generate: \"server\",\r\n css: \"injected\",\r\n dev: false,\r\n } as any);\r\n } catch (compileError: any) {\r\n // Format Svelte compile error with helpful details\r\n const errorMessage = compileError.message || 'Unknown compile error';\r\n const location = compileError.start || compileError.loc || compileError.position;\r\n let details = errorMessage;\r\n\r\n if (location) {\r\n const lines = processedSource.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 Compile 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 // Check for common mistakes and add hints\r\n let hint = '';\r\n if (errorMessage.includes('Unexpected token')) {\r\n hint = '\\n\\nšŸ’” Hint: Check for missing closing tags, unclosed braces, or invalid JavaScript syntax.';\r\n } else if (errorMessage.includes('is not defined')) {\r\n hint = '\\n\\nšŸ’” Hint: Make sure all variables are declared in $props() or as local variables.';\r\n } else if (errorMessage.includes('Expected')) {\r\n hint = '\\n\\nšŸ’” Hint: There might be a syntax error in your template or script.';\r\n }\r\n\r\n const enhancedError = new Error(`[DBI-Svelte] Failed to compile component \"${dbiName}\":\\n${details}${hint}`);\r\n (enhancedError as any).originalError = compileError;\r\n (enhancedError as any).type = 'svelte-compile-error';\r\n throw enhancedError;\r\n }\r\n\r\n // Create a module context for the compiled code\r\n let html = \"\";\r\n try {\r\n const moduleContext = createModuleContext(dbi, data, ttl);\r\n const Component = evaluateCompiledComponent(compiled.js.code, moduleContext, filePath);\r\n\r\n // Svelte 5 SSR: Use render from svelte/server\r\n const { render } = require(\"svelte/server\");\r\n // Pass data properties as top-level props (Svelte 5 expects flat props object)\r\n console.log(\"[DBI-Svelte DEBUG] Rendering with props:\", JSON.stringify(data).substring(0, 500));\r\n console.log(\"[DBI-Svelte DEBUG] Props keys:\", Object.keys(data));\r\n const renderResult = render(Component, { props: data });\r\n html = renderResult.body || \"\";\r\n console.log(\"[DBI-Svelte DEBUG] Rendered HTML:\", html.substring(0, 500));\r\n } catch (runtimeError: any) {\r\n // Format runtime error with helpful details\r\n const errorMessage = runtimeError.message || 'Unknown runtime error';\r\n let hint = '';\r\n\r\n if (errorMessage.includes('is not a function')) {\r\n hint = '\\n\\nšŸ’” Hint: A function you are trying to call is undefined. Check handler names.';\r\n } else if (errorMessage.includes('Cannot read properties of undefined') || errorMessage.includes('undefined is not an object')) {\r\n hint = '\\n\\nšŸ’” Hint: You are trying to access a property of an undefined value. Check your data object.';\r\n } else if (errorMessage.includes('is not defined')) {\r\n hint = '\\n\\nšŸ’” Hint: A variable is used but not declared. Make sure it is in $props() or declared locally.';\r\n }\r\n\r\n const enhancedError = new Error(`[DBI-Svelte] Runtime error in component \"${dbiName}\":\\n${errorMessage}${hint}`);\r\n (enhancedError as any).originalError = runtimeError;\r\n (enhancedError as any).type = 'svelte-runtime-error';\r\n throw enhancedError;\r\n }\r\n\r\n // For Svelte mode, inject state into interactive elements as a ref\r\n // Reuse existing ref if data already has one, otherwise create new\r\n if (data && Object.keys(data).length > 0) {\r\n let stateRefId: string;\r\n\r\n // Check if data already has a $ref (from previous render)\r\n if (data.$ref && typeof data.$ref === 'string') {\r\n stateRefId = data.$ref;\r\n // Update the existing ref's value with new data\r\n const existingRef = dbi.data.refs.get(stateRefId);\r\n if (existingRef) {\r\n existingRef.value = data;\r\n existingRef.at = Date.now(); // Refresh timestamp\r\n } else {\r\n // Ref expired or was deleted, create new one with same ID\r\n dbi.data.refs.set(stateRefId, { at: Date.now(), value: data, ttl });\r\n }\r\n } else {\r\n // Create a new ref for the state\r\n stateRefId = stuffs.randomString(8);\r\n data.$ref = stateRefId; // Store ref ID in data for future updates\r\n dbi.data.refs.set(stateRefId, { at: Date.now(), value: data, ttl });\r\n }\r\n\r\n // Add state ref to all elements with name attribute (buttons, selects)\r\n // This includes both manual names and auto-generated names from svelteParser\r\n html = html.replace(/<button([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, attrs) => {\r\n // Check if it already has data attributes\r\n if (attrs.includes('data-1:')) return match;\r\n return `<button${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n // Also handle select elements (with optional -menu suffix for Svelte compatibility)\r\n // Supports: string-select, user-select, role-select, channel-select, mentionable-select\r\n // Both with and without -menu suffix (e.g., string-select-menu or string-select)\r\n html = html.replace(/<(string-select(?:-menu)?|user-select(?:-menu)?|role-select(?:-menu)?|channel-select(?:-menu)?|mentionable-select(?:-menu)?)([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, tag, attrs) => {\r\n if (attrs.includes('data-1:')) return match;\r\n return `<${tag}${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n // Handle modal elements with name attribute\r\n html = html.replace(/<modal([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, attrs) => {\r\n if (attrs.includes('data-1:')) return match;\r\n return `<modal${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n }\r\n\r\n // Parse the rendered HTML to Discord components (with modal support)\r\n const parseResult = parseHTMLComponentsV2Multi(dbi, html, dbiName, { data, ttl });\r\n const components = parseResult.components;\r\n const modals = parseResult.modals;\r\n\r\n // Get source directory for resolving relative imports\r\n const path = require(\"path\");\r\n const sourceDir = filePath ? path.dirname(path.resolve(filePath)) : undefined;\r\n\r\n // Create handler context (also captures $effect callbacks and inline handlers)\r\n const handlerContext = createHandlerContext(componentInfo.scriptContent, data, undefined, undefined, sourceDir, componentInfo.inlineHandlers);\r\n const handlers = new Map<string, { handlerFn: Function, context: any }>();\r\n\r\n // Run effects on initial render\r\n handlerContext.runEffects();\r\n\r\n // Map handlers to component names\r\n componentInfo.handlers.forEach((handlerInfo, componentName) => {\r\n const handlerFn = handlerContext.handlers[handlerInfo.handlerName];\r\n if (handlerFn && typeof handlerFn === \"function\") {\r\n handlers.set(componentName, {\r\n handlerFn,\r\n context: data\r\n });\r\n }\r\n });\r\n\r\n return {\r\n components,\r\n handlers,\r\n componentInfo,\r\n modals\r\n };\r\n}\r\n\r\n/**\r\n * Create a module context for evaluating the compiled Svelte component\r\n */\r\nfunction createModuleContext(dbi: DBI<NamespaceEnums>, data: Record<string, any>, ttl: number) {\r\n return {\r\n // Store objects in refs for later retrieval in handlers\r\n // This is used internally by the parser when converting to Discord components\r\n __storeRef: (obj: any) => {\r\n let id = stuffs.randomString(8);\r\n dbi.data.refs.set(id, { at: Date.now(), value: obj, ttl });\r\n return id;\r\n },\r\n\r\n // DBI instance for advanced usage\r\n __dbi: dbi,\r\n\r\n // All data context available\r\n ...data,\r\n data, // Also expose as 'data' prop\r\n };\r\n}\r\n\r\n/**\r\n * Evaluate the compiled Svelte component code\r\n */\r\nfunction evaluateCompiledComponent(code: string, context: Record<string, any>, filePath?: string): any {\r\n try {\r\n // Log a portion of the compiled code for debugging\r\n console.log(\"[DBI-Svelte DEBUG] Compiled code snippet:\", code.substring(0, 500));\r\n\r\n // Load Svelte 5 internal runtime\r\n const svelteInternal = require(\"svelte/internal/server\");\r\n const path = require(\"path\");\r\n\r\n // Get the directory of the source file for resolving relative imports\r\n const sourceDir = filePath ? path.dirname(path.resolve(filePath)) : process.cwd();\r\n\r\n // Process the code to work in our context\r\n let processedCode = code;\r\n\r\n // Collect external modules to inject into sandbox\r\n const externalModules: Record<string, any> = {};\r\n\r\n // Replace svelte internal imports\r\n processedCode = processedCode.replace(\r\n /import\\s*\\*\\s*as\\s*(\\w+)\\s*from\\s*[\"']svelte\\/internal\\/server[\"'];?/g,\r\n 'const $1 = __svelteInternal;'\r\n );\r\n processedCode = processedCode.replace(\r\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']svelte\\/internal\\/server[\"'];?/g,\r\n (match, imports) => {\r\n const importList = imports.split(',').map((i: string) => i.trim());\r\n return `const { ${importList.join(', ')} } = __svelteInternal;`;\r\n }\r\n );\r\n\r\n // Handle external module imports (default imports)\r\n processedCode = processedCode.replace(\r\n /import\\s+(\\w+)\\s+from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, varName, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n // Resolve relative paths from source file directory\r\n const resolvedPath = modulePath.startsWith('.')\r\n ? path.resolve(sourceDir, modulePath)\r\n : modulePath;\r\n const mod = require(resolvedPath);\r\n externalModules[varName] = mod.default || mod;\r\n return `const ${varName} = __externalModules.${varName};`;\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Handle named imports from external modules\r\n processedCode = processedCode.replace(\r\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, imports, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n // Resolve relative paths from source file directory\r\n const resolvedPath = modulePath.startsWith('.')\r\n ? path.resolve(sourceDir, modulePath)\r\n : modulePath;\r\n const mod = require(resolvedPath);\r\n const importList = imports.split(',').map((i: string) => i.trim());\r\n importList.forEach((importName: string) => {\r\n const [name, alias] = importName.split(' as ').map(s => s.trim());\r\n externalModules[alias || name] = mod[name] || mod.default?.[name];\r\n });\r\n return importList.map((importName: string) => {\r\n const [name, alias] = importName.split(' as ').map(s => s.trim());\r\n return `const ${alias || name} = __externalModules.${alias || name};`;\r\n }).join('\\n');\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Handle namespace imports from external modules\r\n processedCode = processedCode.replace(\r\n /import\\s*\\*\\s*as\\s*(\\w+)\\s*from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, varName, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n // Resolve relative paths from source file directory\r\n const resolvedPath = modulePath.startsWith('.')\r\n ? path.resolve(sourceDir, modulePath)\r\n : modulePath;\r\n const mod = require(resolvedPath);\r\n externalModules[varName] = mod;\r\n return `const ${varName} = __externalModules.${varName};`;\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Remove any remaining import statements\r\n processedCode = processedCode\r\n .split('\\n')\r\n .filter(line => !line.trim().startsWith('import '))\r\n .join('\\n');\r\n\r\n // Replace 'export default' with assignment\r\n processedCode = processedCode.replace(/export\\s+default\\s+/g, '__exports.default = ');\r\n // Replace 'export function' with assignment\r\n processedCode = processedCode.replace(/export\\s+function\\s+(\\w+)/g, '__exports.$1 = function $1');\r\n // Replace 'export const' with assignment\r\n processedCode = processedCode.replace(/export\\s+const\\s+(\\w+)/g, '__exports.$1 = ');\r\n // Replace 'export let' with assignment \r\n processedCode = processedCode.replace(/export\\s+let\\s+(\\w+)/g, '__exports.$1 = ');\r\n\r\n // Create the sandbox context\r\n const __exports: any = {};\r\n // Svelte lifecycle functions - no-ops for SSR\r\n const svelteLifecycle = {\r\n onMount: () => () => { }, // Returns cleanup function\r\n onDestroy: () => { },\r\n beforeUpdate: () => { },\r\n afterUpdate: () => { },\r\n tick: () => Promise.resolve(),\r\n untrack: (fn: () => any) => fn(),\r\n createEventDispatcher: () => () => { },\r\n };\r\n\r\n // Note: Svelte 5 runes ($state, $derived, etc.) are compile-time features\r\n // The compiler transforms them, so we don't need runtime implementations.\r\n // The `$` variable is used by compiled code as the svelte/internal/server namespace.\r\n\r\n const sandbox = {\r\n __svelteInternal: svelteInternal,\r\n __externalModules: externalModules,\r\n $: svelteInternal, // Direct alias for compiled Svelte code that uses `$`\r\n __exports,\r\n console,\r\n ...svelteLifecycle,\r\n ...context,\r\n };\r\n\r\n // Wrap code in IIFE\r\n const wrappedCode = `\r\n (function() {\r\n ${processedCode}\r\n })();\r\n `;\r\n\r\n // Run in VM context for better isolation\r\n vm.createContext(sandbox);\r\n vm.runInContext(wrappedCode, sandbox);\r\n\r\n // Return the component\r\n const Component = sandbox.__exports.default;\r\n\r\n if (!Component) {\r\n throw new Error(\"Svelte component did not export a default component\");\r\n }\r\n\r\n return Component;\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Render a Svelte component from a file\r\n */\r\nexport async function renderSvelteComponentFromFile(\r\n dbi: DBI<NamespaceEnums>,\r\n filePath: string,\r\n dbiName: string,\r\n options: SvelteRenderOptions = {}\r\n): Promise<SvelteRenderResult> {\r\n const fs = require(\"fs\");\r\n const source = fs.readFileSync(filePath, \"utf-8\");\r\n // Pass filePath to options for resolving relative imports\r\n return await renderSvelteComponent(dbi, source, dbiName, { ...options, filePath });\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.28",
18
+ "version": "0.2.29-dev.1",
19
19
  "main": "dist/src/index.js",
20
20
  "types": "dist/src/index.d.ts",
21
21
  "typesVersions": {