@mostfeatured/dbi 0.2.11 → 0.2.13
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.
- package/dist/src/types/Components/HTMLComponentsV2/parser.d.ts.map +1 -1
- package/dist/src/types/Components/HTMLComponentsV2/parser.js +10 -3
- package/dist/src/types/Components/HTMLComponentsV2/parser.js.map +1 -1
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.d.ts.map +1 -1
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.js +18 -3
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.js.map +1 -1
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.d.ts.map +1 -1
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.js +11 -2
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.js.map +1 -1
- package/dist/test/index.js +3 -2
- package/dist/test/index.js.map +1 -1
- package/llm.txt +1088 -0
- package/package.json +1 -1
- package/src/types/Components/HTMLComponentsV2/parser.ts +10 -3
- package/src/types/Components/HTMLComponentsV2/svelteParser.ts +17 -4
- package/src/types/Components/HTMLComponentsV2/svelteRenderer.ts +10 -2
- package/test/index.ts +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AA4SrE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAS,EAAE,GAAO,EAAE,GAAE,GAA0B,SA4BpJ"}
|
|
@@ -98,9 +98,10 @@ function parseButton(dbi, dbiName, button) {
|
|
|
98
98
|
function parseStringSelect(dbi, dbiName, stringSelect) {
|
|
99
99
|
let minValues = parseInt(stringSelect.getAttribute("min-values"));
|
|
100
100
|
let maxValues = parseInt(stringSelect.getAttribute("max-values"));
|
|
101
|
-
|
|
101
|
+
// Support both <option> and <select-option> elements (Svelte may output either)
|
|
102
|
+
let options = Array.from(stringSelect.querySelectorAll("option, select-option")).map(option => {
|
|
102
103
|
return {
|
|
103
|
-
label: getCleanTextContent(option),
|
|
104
|
+
label: option.getAttribute("label") || getCleanTextContent(option),
|
|
104
105
|
value: option.getAttribute("value"),
|
|
105
106
|
description: option.getAttribute("description"),
|
|
106
107
|
emoji: option.getAttribute("emoji"),
|
|
@@ -120,7 +121,8 @@ function parseStringSelect(dbi, dbiName, stringSelect) {
|
|
|
120
121
|
function parseNonStringSelect(dbi, dbiName, userSelect, type) {
|
|
121
122
|
let minValues = parseInt(userSelect.getAttribute("min-values"));
|
|
122
123
|
let maxValues = parseInt(userSelect.getAttribute("max-values"));
|
|
123
|
-
|
|
124
|
+
// Support both <option> and <select-option> elements (Svelte may output either)
|
|
125
|
+
let options = Array.from(userSelect.querySelectorAll("option, select-option")).map(option => {
|
|
124
126
|
return {
|
|
125
127
|
id: getCleanTextContent(option) || option.getAttribute("id"),
|
|
126
128
|
type: option.getAttribute("type")
|
|
@@ -247,14 +249,19 @@ function parseElement(dbi, dbiName, element) {
|
|
|
247
249
|
case "BUTTON":
|
|
248
250
|
return parseButton(dbi, dbiName, element);
|
|
249
251
|
case "STRING-SELECT":
|
|
252
|
+
case "STRING-SELECT-MENU":
|
|
250
253
|
return parseStringSelect(dbi, dbiName, element);
|
|
251
254
|
case "USER-SELECT":
|
|
255
|
+
case "USER-SELECT-MENU":
|
|
252
256
|
return parseNonStringSelect(dbi, dbiName, element, discord_js_1.ComponentType.UserSelect);
|
|
253
257
|
case "ROLE-SELECT":
|
|
258
|
+
case "ROLE-SELECT-MENU":
|
|
254
259
|
return parseNonStringSelect(dbi, dbiName, element, discord_js_1.ComponentType.RoleSelect);
|
|
255
260
|
case "MENTIONABLE-SELECT":
|
|
261
|
+
case "MENTIONABLE-SELECT-MENU":
|
|
256
262
|
return parseNonStringSelect(dbi, dbiName, element, discord_js_1.ComponentType.MentionableSelect);
|
|
257
263
|
case "CHANNEL-SELECT":
|
|
264
|
+
case "CHANNEL-SELECT-MENU":
|
|
258
265
|
return parseNonStringSelect(dbi, dbiName, element, discord_js_1.ComponentType.ChannelSelect);
|
|
259
266
|
case "SECTION":
|
|
260
267
|
return parseSection(dbi, dbiName, element);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { JSDOM } from \"jsdom\";\r\nimport { Eta } from \"eta\";\r\nimport { DBI } from \"../../../DBI\";\r\nimport { NamespaceEnums } from \"../../../../generated/namespaceData\";\r\nimport { ButtonStyle, ComponentType, TextInputStyle } from \"discord.js\";\r\nimport { buildCustomId } from \"../../../utils/customId\";\r\nimport * as stuffs from \"stuffs\";\r\n\r\nconst eta = new Eta({\r\n useWith: true,\r\n});\r\n\r\nfunction getAttributeBoolean(element: Element, attribute: string): boolean {\r\n return element.hasAttribute(attribute) ? ['true', ''].includes(element.getAttribute(attribute)) : false\r\n}\r\n\r\nfunction parseElementDataAttributes(dbi: DBI<NamespaceEnums>, attributes: NamedNodeMap): any[] {\r\n let list = Array.from(attributes)\r\n .filter(attr => attr.nodeName.startsWith(\"data-\"))\r\n .map(attr => {\r\n let splited = attr.nodeName.slice(5).split(\":\");\r\n let index = parseInt(splited[0]);\r\n let value;\r\n switch (splited[1]) {\r\n case \"int\":\r\n case \"integer\":\r\n case \"float\":\r\n case \"number\": value = Number(attr.nodeValue!); break;\r\n case \"bool\":\r\n case \"boolean\": value = attr.nodeValue === \"true\" || attr.nodeValue === \"1\"; break;\r\n case \"string\":\r\n case \"str\": value = attr.nodeValue; break;\r\n case \"refrence\":\r\n case \"ref\": value = dbi.data.refs.get(attr.nodeValue!)?.value; break;\r\n case \"json\": value = JSON.parse(attr.nodeValue!); break;\r\n default: value = attr.nodeValue; break;\r\n }\r\n return {\r\n index,\r\n value\r\n };\r\n })\r\n .sort((a, b) => a.index - b.index)\r\n .map(i => i.value);\r\n let data = attributes.getNamedItem(\"data\")?.nodeValue;\r\n return list.length ? list : data ? [data] : [];\r\n}\r\n\r\nfunction getCleanTextContent(element: Element): string {\r\n return (element.textContent?.trim() || \"\").split(\"\\n\").map(line => line.trim()).join(\"\\n\");\r\n}\r\n\r\nfunction parseCustomIdAttributes(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element): string {\r\n let customId = element.getAttribute(\"custom-id\");\r\n if (!customId) {\r\n let name = element.getAttribute(\"name\");\r\n if (!name) throw new Error(\"Element must have a name or custom-id attribute.\");\r\n customId = buildCustomId(\r\n dbi,\r\n dbiName,\r\n [\r\n name,\r\n ...parseElementDataAttributes(dbi, element.attributes),\r\n ],\r\n element.hasAttribute(\"ttl\") ? parseInt(element.getAttribute(\"ttl\")!) : undefined,\r\n true\r\n );\r\n }\r\n return customId;\r\n}\r\n\r\nfunction parseActionRow(dbi: DBI<NamespaceEnums>, dbiName: string, actionRow: Element) {\r\n return {\r\n type: ComponentType.ActionRow,\r\n components: Array.from(actionRow.children).map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n })\r\n }\r\n}\r\n\r\nfunction parseButton(dbi: DBI<NamespaceEnums>, dbiName: string, button: Element) {\r\n const style = button.getAttribute(\"style\") || button.getAttribute(\"button-style\") || \"Primary\";\r\n const isDisabled = getAttributeBoolean(button, \"disabled\");\r\n\r\n const needsCustomId = style !== \"Link\" && style !== \"Premium\";\r\n\r\n return {\r\n type: ComponentType.Button,\r\n style: ButtonStyle[style],\r\n label: getCleanTextContent(button),\r\n emoji: button.getAttribute(\"emoji\"),\r\n custom_id: needsCustomId ? parseCustomIdAttributes(dbi, dbiName, button) : undefined,\r\n disabled: isDisabled,\r\n url: button.getAttribute(\"url\"),\r\n sku_id: button.getAttribute(\"sku-id\"),\r\n }\r\n}\r\n\r\nfunction parseStringSelect(dbi: DBI<NamespaceEnums>, dbiName: string, stringSelect: Element) {\r\n let minValues = parseInt(stringSelect.getAttribute(\"min-values\"));\r\n let maxValues = parseInt(stringSelect.getAttribute(\"max-values\"));\r\n\r\n let options = Array.from(stringSelect.querySelectorAll(\"option\")).map(option => {\r\n return {\r\n label: getCleanTextContent(option),\r\n value: option.getAttribute(\"value\"),\r\n description: option.getAttribute(\"description\"),\r\n emoji: option.getAttribute(\"emoji\"),\r\n default: getAttributeBoolean(option, \"default\"),\r\n }\r\n });\r\n\r\n return {\r\n type: ComponentType.StringSelect,\r\n custom_id: parseCustomIdAttributes(dbi, dbiName, stringSelect),\r\n placeholder: stringSelect.getAttribute(\"placeholder\"),\r\n min_values: !isNaN(minValues) ? minValues : undefined,\r\n max_values: !isNaN(maxValues) ? maxValues : undefined,\r\n disabled: getAttributeBoolean(stringSelect, \"disabled\"),\r\n options\r\n }\r\n}\r\n\r\nfunction parseNonStringSelect(dbi: DBI<NamespaceEnums>, dbiName: string, userSelect: Element, type: ComponentType) {\r\n let minValues = parseInt(userSelect.getAttribute(\"min-values\"));\r\n let maxValues = parseInt(userSelect.getAttribute(\"max-values\"));\r\n\r\n let options = Array.from(userSelect.querySelectorAll(\"option\")).map(option => {\r\n return {\r\n id: getCleanTextContent(option) || option.getAttribute(\"id\"),\r\n type: option.getAttribute(\"type\")\r\n }\r\n });\r\n\r\n return {\r\n type,\r\n custom_id: parseCustomIdAttributes(dbi, dbiName, userSelect),\r\n placeholder: userSelect.getAttribute(\"placeholder\"),\r\n min_values: !isNaN(minValues) ? minValues : undefined,\r\n max_values: !isNaN(maxValues) ? maxValues : undefined,\r\n disabled: getAttributeBoolean(userSelect, \"disabled\"),\r\n options\r\n }\r\n}\r\n\r\nfunction parseSection(dbi: DBI<NamespaceEnums>, dbiName: string, sectionElement: Element) {\r\n const childs = [...sectionElement.children];\r\n const components = childs.find(el => el.tagName === \"COMPONENTS\");\r\n const children = Array.from(components?.children || []);\r\n\r\n // Look for accessory in <accessory> wrapper or directly as <thumbnail>/<button>\r\n let accessory = childs.find(el => el.tagName === \"ACCESSORY\")?.children?.[0];\r\n\r\n // If no <accessory> wrapper, look for direct thumbnail or button\r\n if (!accessory) {\r\n accessory = childs.find(el => el.tagName === \"THUMBNAIL\" || el.tagName === \"BUTTON\");\r\n }\r\n\r\n return {\r\n type: ComponentType.Section,\r\n components: children.map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n }),\r\n ...(accessory ? { accessory: parseElement(dbi, dbiName, accessory) } : {})\r\n }\r\n}\r\n\r\nfunction parseTextDisplay(dbi: DBI<NamespaceEnums>, dbiName: string, textDisplayElement: Element) {\r\n return {\r\n type: ComponentType.TextDisplay,\r\n content: getCleanTextContent(textDisplayElement) || \"\",\r\n }\r\n}\r\n\r\nfunction parseThumbnail(dbi: DBI<NamespaceEnums>, dbiName: string, thumbnailElement: Element) {\r\n return {\r\n type: ComponentType.Thumbnail,\r\n media: {\r\n url: thumbnailElement.getAttribute(\"url\") || thumbnailElement.getAttribute(\"media\")\r\n }\r\n }\r\n}\r\n\r\nfunction parseMediaGallery(dbi: DBI<NamespaceEnums>, dbiName: string, mediaGalleryElement: Element) {\r\n return {\r\n type: ComponentType.MediaGallery,\r\n items: Array.from(mediaGalleryElement.querySelectorAll(\"item\")).map(item => {\r\n return {\r\n media: {\r\n url: item.getAttribute(\"url\")\r\n },\r\n description: getCleanTextContent(mediaGalleryElement) || item.getAttribute(\"description\") || \"\",\r\n spoiler: getAttributeBoolean(item, \"spoiler\"),\r\n };\r\n })\r\n }\r\n}\r\n\r\nfunction parseFile(dbi: DBI<NamespaceEnums>, dbiName: string, fileElement: Element) {\r\n return {\r\n type: ComponentType.File,\r\n file: {\r\n url: fileElement.getAttribute(\"url\"),\r\n },\r\n spoiler: getAttributeBoolean(fileElement, \"spoiler\"),\r\n }\r\n}\r\n\r\nfunction parseSeparator(dbi: DBI<NamespaceEnums>, dbiName: string, separatorElement: Element) {\r\n return {\r\n type: ComponentType.Separator,\r\n divider: separatorElement.hasAttribute(\"divider\"),\r\n spacing: parseInt(separatorElement.getAttribute(\"spacing\") || '1'),\r\n }\r\n}\r\n\r\nfunction parseContainer(dbi: DBI<NamespaceEnums>, dbiName: string, containerElement: Element) {\r\n const components = [...containerElement.children].find(el => el.tagName === \"COMPONENTS\");\r\n const children = Array.from(components?.children || []);\r\n\r\n return {\r\n type: ComponentType.Container,\r\n components: children.map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n }),\r\n accent_color: parseColor(containerElement.getAttribute(\"accent-color\") || \"\"),\r\n spoiler: containerElement.hasAttribute(\"spoiler\"),\r\n }\r\n}\r\n\r\nfunction parseTextInput(dbi: DBI<NamespaceEnums>, dbiName: string, textInputSelect: Element) {\r\n let minLength = parseInt(textInputSelect.getAttribute(\"min-length\"));\r\n let maxLength = parseInt(textInputSelect.getAttribute(\"max-length\"));\r\n\r\n return {\r\n type: ComponentType.TextInput,\r\n custom_id: textInputSelect.getAttribute(\"custom-id\") || textInputSelect.getAttribute(\"id\"),\r\n style: TextInputStyle[textInputSelect.getAttribute(\"input-style\") || textInputSelect.getAttribute(\"style\") || \"Short\"],\r\n label: textInputSelect.getAttribute(\"label\"),\r\n placeholder: textInputSelect.getAttribute(\"placeholder\"),\r\n min_length: !isNaN(minLength) ? minLength : undefined,\r\n max_length: !isNaN(maxLength) ? maxLength : undefined,\r\n required: textInputSelect.hasAttribute(\"required\"),\r\n value: getCleanTextContent(textInputSelect) || textInputSelect.getAttribute(\"value\"),\r\n }\r\n}\r\n\r\nfunction parseColor(color: string) {\r\n if (!color) return;\r\n if (/\\d{3,6}/.test(color)) return parseInt(color, 10);\r\n if (color.startsWith(\"#\")) return parseInt(color.slice(1), 16);\r\n if (color.startsWith(\"0x\")) return parseInt(color.slice(2), 16);\r\n if (color.startsWith(\"rgb(\")) {\r\n const rgb = color.slice(4, -1).split(\",\").map(Number);\r\n return (rgb[0] << 16) + (rgb[1] << 8) + rgb[2];\r\n }\r\n return parseInt(color, 16);\r\n}\r\n\r\nfunction parseElement(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element) {\r\n switch (element.tagName) {\r\n case \"ACTION-ROW\":\r\n return parseActionRow(dbi, dbiName, element);\r\n case \"BUTTON\":\r\n return parseButton(dbi, dbiName, element);\r\n case \"STRING-SELECT\":\r\n return parseStringSelect(dbi, dbiName, element);\r\n case \"USER-SELECT\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.UserSelect);\r\n case \"ROLE-SELECT\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.RoleSelect);\r\n case \"MENTIONABLE-SELECT\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.MentionableSelect);\r\n case \"CHANNEL-SELECT\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.ChannelSelect);\r\n case \"SECTION\":\r\n return parseSection(dbi, dbiName, element);\r\n case \"TEXT-DISPLAY\":\r\n return parseTextDisplay(dbi, dbiName, element);\r\n case \"THUMBNAIL\":\r\n return parseThumbnail(dbi, dbiName, element);\r\n case \"MEDIA-GALLERY\":\r\n return parseMediaGallery(dbi, dbiName, element);\r\n case \"FILE\":\r\n return parseFile(dbi, dbiName, element);\r\n case \"SEPARATOR\":\r\n return parseSeparator(dbi, dbiName, element);\r\n case \"CONTAINER\":\r\n return parseContainer(dbi, dbiName, element);\r\n case \"TEXT-INPUT\":\r\n return parseTextInput(dbi, dbiName, element);\r\n default:\r\n throw new Error(`Unknown HTML component: ${element.tagName}`);\r\n }\r\n}\r\n\r\nexport function parseHTMLComponentsV2(dbi: DBI<NamespaceEnums>, template: string, dbiName: string, { data = {}, ttl = 0 }: any = { data: {}, ttl: 0 }) {\r\n const { window: { document } } = new JSDOM(\r\n eta.renderString(\r\n template,\r\n {\r\n it: data,\r\n $refId(obj: any) {\r\n if (obj?.$ref) return `¤${obj.$ref}`;\r\n let id = stuffs.randomString(8);\r\n Object.assign(obj, {\r\n $ref: id,\r\n $unRef() { return dbi.data.refs.delete(id); },\r\n });\r\n dbi.data.refs.set(id, { at: Date.now(), value: obj, ttl });\r\n return `¤${id}`;\r\n }\r\n }\r\n )\r\n );\r\n\r\n const components = [...document.body.children].find(el => el.tagName === \"COMPONENTS\");\r\n const children = Array.from(components?.children || []);\r\n\r\n if (!children.length) throw new Error(\"No components found in the provided HTML template.\");\r\n\r\n return children.map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n });\r\n}"]}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { JSDOM } from \"jsdom\";\r\nimport { Eta } from \"eta\";\r\nimport { DBI } from \"../../../DBI\";\r\nimport { NamespaceEnums } from \"../../../../generated/namespaceData\";\r\nimport { ButtonStyle, ComponentType, TextInputStyle } from \"discord.js\";\r\nimport { buildCustomId } from \"../../../utils/customId\";\r\nimport * as stuffs from \"stuffs\";\r\n\r\nconst eta = new Eta({\r\n useWith: true,\r\n});\r\n\r\nfunction getAttributeBoolean(element: Element, attribute: string): boolean {\r\n return element.hasAttribute(attribute) ? ['true', ''].includes(element.getAttribute(attribute)) : false\r\n}\r\n\r\nfunction parseElementDataAttributes(dbi: DBI<NamespaceEnums>, attributes: NamedNodeMap): any[] {\r\n let list = Array.from(attributes)\r\n .filter(attr => attr.nodeName.startsWith(\"data-\"))\r\n .map(attr => {\r\n let splited = attr.nodeName.slice(5).split(\":\");\r\n let index = parseInt(splited[0]);\r\n let value;\r\n switch (splited[1]) {\r\n case \"int\":\r\n case \"integer\":\r\n case \"float\":\r\n case \"number\": value = Number(attr.nodeValue!); break;\r\n case \"bool\":\r\n case \"boolean\": value = attr.nodeValue === \"true\" || attr.nodeValue === \"1\"; break;\r\n case \"string\":\r\n case \"str\": value = attr.nodeValue; break;\r\n case \"refrence\":\r\n case \"ref\": value = dbi.data.refs.get(attr.nodeValue!)?.value; break;\r\n case \"json\": value = JSON.parse(attr.nodeValue!); break;\r\n default: value = attr.nodeValue; break;\r\n }\r\n return {\r\n index,\r\n value\r\n };\r\n })\r\n .sort((a, b) => a.index - b.index)\r\n .map(i => i.value);\r\n let data = attributes.getNamedItem(\"data\")?.nodeValue;\r\n return list.length ? list : data ? [data] : [];\r\n}\r\n\r\nfunction getCleanTextContent(element: Element): string {\r\n return (element.textContent?.trim() || \"\").split(\"\\n\").map(line => line.trim()).join(\"\\n\");\r\n}\r\n\r\nfunction parseCustomIdAttributes(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element): string {\r\n let customId = element.getAttribute(\"custom-id\");\r\n if (!customId) {\r\n let name = element.getAttribute(\"name\");\r\n if (!name) throw new Error(\"Element must have a name or custom-id attribute.\");\r\n customId = buildCustomId(\r\n dbi,\r\n dbiName,\r\n [\r\n name,\r\n ...parseElementDataAttributes(dbi, element.attributes),\r\n ],\r\n element.hasAttribute(\"ttl\") ? parseInt(element.getAttribute(\"ttl\")!) : undefined,\r\n true\r\n );\r\n }\r\n return customId;\r\n}\r\n\r\nfunction parseActionRow(dbi: DBI<NamespaceEnums>, dbiName: string, actionRow: Element) {\r\n return {\r\n type: ComponentType.ActionRow,\r\n components: Array.from(actionRow.children).map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n })\r\n }\r\n}\r\n\r\nfunction parseButton(dbi: DBI<NamespaceEnums>, dbiName: string, button: Element) {\r\n const style = button.getAttribute(\"style\") || button.getAttribute(\"button-style\") || \"Primary\";\r\n const isDisabled = getAttributeBoolean(button, \"disabled\");\r\n\r\n const needsCustomId = style !== \"Link\" && style !== \"Premium\";\r\n\r\n return {\r\n type: ComponentType.Button,\r\n style: ButtonStyle[style],\r\n label: getCleanTextContent(button),\r\n emoji: button.getAttribute(\"emoji\"),\r\n custom_id: needsCustomId ? parseCustomIdAttributes(dbi, dbiName, button) : undefined,\r\n disabled: isDisabled,\r\n url: button.getAttribute(\"url\"),\r\n sku_id: button.getAttribute(\"sku-id\"),\r\n }\r\n}\r\n\r\nfunction parseStringSelect(dbi: DBI<NamespaceEnums>, dbiName: string, stringSelect: Element) {\r\n let minValues = parseInt(stringSelect.getAttribute(\"min-values\"));\r\n let maxValues = parseInt(stringSelect.getAttribute(\"max-values\"));\r\n\r\n // Support both <option> and <select-option> elements (Svelte may output either)\r\n let options = Array.from(stringSelect.querySelectorAll(\"option, select-option\")).map(option => {\r\n return {\r\n label: option.getAttribute(\"label\") || getCleanTextContent(option),\r\n value: option.getAttribute(\"value\"),\r\n description: option.getAttribute(\"description\"),\r\n emoji: option.getAttribute(\"emoji\"),\r\n default: getAttributeBoolean(option, \"default\"),\r\n }\r\n });\r\n\r\n return {\r\n type: ComponentType.StringSelect,\r\n custom_id: parseCustomIdAttributes(dbi, dbiName, stringSelect),\r\n placeholder: stringSelect.getAttribute(\"placeholder\"),\r\n min_values: !isNaN(minValues) ? minValues : undefined,\r\n max_values: !isNaN(maxValues) ? maxValues : undefined,\r\n disabled: getAttributeBoolean(stringSelect, \"disabled\"),\r\n options\r\n }\r\n}\r\n\r\nfunction parseNonStringSelect(dbi: DBI<NamespaceEnums>, dbiName: string, userSelect: Element, type: ComponentType) {\r\n let minValues = parseInt(userSelect.getAttribute(\"min-values\"));\r\n let maxValues = parseInt(userSelect.getAttribute(\"max-values\"));\r\n\r\n // Support both <option> and <select-option> elements (Svelte may output either)\r\n let options = Array.from(userSelect.querySelectorAll(\"option, select-option\")).map(option => {\r\n return {\r\n id: getCleanTextContent(option) || option.getAttribute(\"id\"),\r\n type: option.getAttribute(\"type\")\r\n }\r\n });\r\n\r\n return {\r\n type,\r\n custom_id: parseCustomIdAttributes(dbi, dbiName, userSelect),\r\n placeholder: userSelect.getAttribute(\"placeholder\"),\r\n min_values: !isNaN(minValues) ? minValues : undefined,\r\n max_values: !isNaN(maxValues) ? maxValues : undefined,\r\n disabled: getAttributeBoolean(userSelect, \"disabled\"),\r\n options\r\n }\r\n}\r\n\r\nfunction parseSection(dbi: DBI<NamespaceEnums>, dbiName: string, sectionElement: Element) {\r\n const childs = [...sectionElement.children];\r\n const components = childs.find(el => el.tagName === \"COMPONENTS\");\r\n const children = Array.from(components?.children || []);\r\n\r\n // Look for accessory in <accessory> wrapper or directly as <thumbnail>/<button>\r\n let accessory = childs.find(el => el.tagName === \"ACCESSORY\")?.children?.[0];\r\n\r\n // If no <accessory> wrapper, look for direct thumbnail or button\r\n if (!accessory) {\r\n accessory = childs.find(el => el.tagName === \"THUMBNAIL\" || el.tagName === \"BUTTON\");\r\n }\r\n\r\n return {\r\n type: ComponentType.Section,\r\n components: children.map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n }),\r\n ...(accessory ? { accessory: parseElement(dbi, dbiName, accessory) } : {})\r\n }\r\n}\r\n\r\nfunction parseTextDisplay(dbi: DBI<NamespaceEnums>, dbiName: string, textDisplayElement: Element) {\r\n return {\r\n type: ComponentType.TextDisplay,\r\n content: getCleanTextContent(textDisplayElement) || \"\",\r\n }\r\n}\r\n\r\nfunction parseThumbnail(dbi: DBI<NamespaceEnums>, dbiName: string, thumbnailElement: Element) {\r\n return {\r\n type: ComponentType.Thumbnail,\r\n media: {\r\n url: thumbnailElement.getAttribute(\"url\") || thumbnailElement.getAttribute(\"media\")\r\n }\r\n }\r\n}\r\n\r\nfunction parseMediaGallery(dbi: DBI<NamespaceEnums>, dbiName: string, mediaGalleryElement: Element) {\r\n return {\r\n type: ComponentType.MediaGallery,\r\n items: Array.from(mediaGalleryElement.querySelectorAll(\"item\")).map(item => {\r\n return {\r\n media: {\r\n url: item.getAttribute(\"url\")\r\n },\r\n description: getCleanTextContent(mediaGalleryElement) || item.getAttribute(\"description\") || \"\",\r\n spoiler: getAttributeBoolean(item, \"spoiler\"),\r\n };\r\n })\r\n }\r\n}\r\n\r\nfunction parseFile(dbi: DBI<NamespaceEnums>, dbiName: string, fileElement: Element) {\r\n return {\r\n type: ComponentType.File,\r\n file: {\r\n url: fileElement.getAttribute(\"url\"),\r\n },\r\n spoiler: getAttributeBoolean(fileElement, \"spoiler\"),\r\n }\r\n}\r\n\r\nfunction parseSeparator(dbi: DBI<NamespaceEnums>, dbiName: string, separatorElement: Element) {\r\n return {\r\n type: ComponentType.Separator,\r\n divider: separatorElement.hasAttribute(\"divider\"),\r\n spacing: parseInt(separatorElement.getAttribute(\"spacing\") || '1'),\r\n }\r\n}\r\n\r\nfunction parseContainer(dbi: DBI<NamespaceEnums>, dbiName: string, containerElement: Element) {\r\n const components = [...containerElement.children].find(el => el.tagName === \"COMPONENTS\");\r\n const children = Array.from(components?.children || []);\r\n\r\n return {\r\n type: ComponentType.Container,\r\n components: children.map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n }),\r\n accent_color: parseColor(containerElement.getAttribute(\"accent-color\") || \"\"),\r\n spoiler: containerElement.hasAttribute(\"spoiler\"),\r\n }\r\n}\r\n\r\nfunction parseTextInput(dbi: DBI<NamespaceEnums>, dbiName: string, textInputSelect: Element) {\r\n let minLength = parseInt(textInputSelect.getAttribute(\"min-length\"));\r\n let maxLength = parseInt(textInputSelect.getAttribute(\"max-length\"));\r\n\r\n return {\r\n type: ComponentType.TextInput,\r\n custom_id: textInputSelect.getAttribute(\"custom-id\") || textInputSelect.getAttribute(\"id\"),\r\n style: TextInputStyle[textInputSelect.getAttribute(\"input-style\") || textInputSelect.getAttribute(\"style\") || \"Short\"],\r\n label: textInputSelect.getAttribute(\"label\"),\r\n placeholder: textInputSelect.getAttribute(\"placeholder\"),\r\n min_length: !isNaN(minLength) ? minLength : undefined,\r\n max_length: !isNaN(maxLength) ? maxLength : undefined,\r\n required: textInputSelect.hasAttribute(\"required\"),\r\n value: getCleanTextContent(textInputSelect) || textInputSelect.getAttribute(\"value\"),\r\n }\r\n}\r\n\r\nfunction parseColor(color: string) {\r\n if (!color) return;\r\n if (/\\d{3,6}/.test(color)) return parseInt(color, 10);\r\n if (color.startsWith(\"#\")) return parseInt(color.slice(1), 16);\r\n if (color.startsWith(\"0x\")) return parseInt(color.slice(2), 16);\r\n if (color.startsWith(\"rgb(\")) {\r\n const rgb = color.slice(4, -1).split(\",\").map(Number);\r\n return (rgb[0] << 16) + (rgb[1] << 8) + rgb[2];\r\n }\r\n return parseInt(color, 16);\r\n}\r\n\r\nfunction parseElement(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element) {\r\n switch (element.tagName) {\r\n case \"ACTION-ROW\":\r\n return parseActionRow(dbi, dbiName, element);\r\n case \"BUTTON\":\r\n return parseButton(dbi, dbiName, element);\r\n case \"STRING-SELECT\":\r\n case \"STRING-SELECT-MENU\":\r\n return parseStringSelect(dbi, dbiName, element);\r\n case \"USER-SELECT\":\r\n case \"USER-SELECT-MENU\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.UserSelect);\r\n case \"ROLE-SELECT\":\r\n case \"ROLE-SELECT-MENU\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.RoleSelect);\r\n case \"MENTIONABLE-SELECT\":\r\n case \"MENTIONABLE-SELECT-MENU\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.MentionableSelect);\r\n case \"CHANNEL-SELECT\":\r\n case \"CHANNEL-SELECT-MENU\":\r\n return parseNonStringSelect(dbi, dbiName, element, ComponentType.ChannelSelect);\r\n case \"SECTION\":\r\n return parseSection(dbi, dbiName, element);\r\n case \"TEXT-DISPLAY\":\r\n return parseTextDisplay(dbi, dbiName, element);\r\n case \"THUMBNAIL\":\r\n return parseThumbnail(dbi, dbiName, element);\r\n case \"MEDIA-GALLERY\":\r\n return parseMediaGallery(dbi, dbiName, element);\r\n case \"FILE\":\r\n return parseFile(dbi, dbiName, element);\r\n case \"SEPARATOR\":\r\n return parseSeparator(dbi, dbiName, element);\r\n case \"CONTAINER\":\r\n return parseContainer(dbi, dbiName, element);\r\n case \"TEXT-INPUT\":\r\n return parseTextInput(dbi, dbiName, element);\r\n default:\r\n throw new Error(`Unknown HTML component: ${element.tagName}`);\r\n }\r\n}\r\n\r\nexport function parseHTMLComponentsV2(dbi: DBI<NamespaceEnums>, template: string, dbiName: string, { data = {}, ttl = 0 }: any = { data: {}, ttl: 0 }) {\r\n const { window: { document } } = new JSDOM(\r\n eta.renderString(\r\n template,\r\n {\r\n it: data,\r\n $refId(obj: any) {\r\n if (obj?.$ref) return `¤${obj.$ref}`;\r\n let id = stuffs.randomString(8);\r\n Object.assign(obj, {\r\n $ref: id,\r\n $unRef() { return dbi.data.refs.delete(id); },\r\n });\r\n dbi.data.refs.set(id, { at: Date.now(), value: obj, ttl });\r\n return `¤${id}`;\r\n }\r\n }\r\n )\r\n );\r\n\r\n const components = [...document.body.children].find(el => el.tagName === \"COMPONENTS\");\r\n const children = Array.from(components?.children || []);\r\n\r\n if (!children.length) throw new Error(\"No components found in the provided HTML template.\");\r\n\r\n return children.map((element) => {\r\n return parseElement(dbi, dbiName, element);\r\n });\r\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelteParser.d.ts","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteParser.ts"],"names":[],"mappings":"AA+DA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"svelteParser.d.ts","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteParser.ts"],"names":[],"mappings":"AA+DA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyInH;AAkDD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnC,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,UAAU,EAAE,GAAG,CAAC;IAEhB,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC3B,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAsGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,oBAAoB,CAihBnJ"}
|
|
@@ -83,13 +83,28 @@ async function parseSvelteComponent(source, data) {
|
|
|
83
83
|
const attributes = node.attributes || [];
|
|
84
84
|
// Find name attribute
|
|
85
85
|
const nameAttr = attributes.find((attr) => attr.type === "Attribute" && attr.name === "name");
|
|
86
|
-
// Check if element has an onclick/onchange
|
|
86
|
+
// Check if element has an onclick/onchange/handler and get the handler info
|
|
87
87
|
let foundHandler = null;
|
|
88
88
|
for (const attr of attributes) {
|
|
89
89
|
const isEventHandler = attr.type === "EventHandler";
|
|
90
90
|
const isOnAttribute = attr.type === "Attribute" && attr.name && attr.name.startsWith("on");
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
const isHandlerAttribute = attr.type === "Attribute" && attr.name === "handler";
|
|
92
|
+
if (isEventHandler || isOnAttribute || isHandlerAttribute) {
|
|
93
|
+
// For "handler" attribute, use the element type to determine eventType
|
|
94
|
+
// button -> onclick, select -> onchange
|
|
95
|
+
let eventType = attr.name;
|
|
96
|
+
if (isHandlerAttribute) {
|
|
97
|
+
const elementName = node.name.toLowerCase();
|
|
98
|
+
if (elementName === "button") {
|
|
99
|
+
eventType = "onclick";
|
|
100
|
+
}
|
|
101
|
+
else if (elementName.includes("select")) {
|
|
102
|
+
eventType = "onchange";
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
eventType = "handler"; // fallback
|
|
106
|
+
}
|
|
107
|
+
}
|
|
93
108
|
let handlerName = "";
|
|
94
109
|
if (attr.type === "Attribute" && Array.isArray(attr.value)) {
|
|
95
110
|
const exprValue = attr.value.find((v) => v.type === "ExpressionTag" || v.type === "MustacheTag");
|
|
@@ -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, etc.\r\n element: string; // button, string-select, etc.\r\n}\r\n\r\nexport interface SvelteComponentInfo {\r\n handlers: Map<string, SvelteHandlerInfo>;\r\n scriptContent: string;\r\n processedSource: string; // Source with auto-generated names injected\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 const ast = _parse(source);\r\n const handlers = new Map<string, SvelteHandlerInfo>();\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 // 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\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 } | 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\r\n if (isEventHandler || isOnAttribute) {\r\n const eventType = attr.name;\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 } else if (attr.expression.type === \"MemberExpression\") {\r\n handlerName = extractMemberExpressionName(attr.expression);\r\n }\r\n }\r\n\r\n if (handlerName) {\r\n foundHandler = { eventType, handlerName };\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 });\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 return {\r\n handlers,\r\n scriptContent,\r\n processedSource\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\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 runMount: () => void;\r\n runDestroy: () => void;\r\n // Handler execution tracking\r\n setInHandler: (value: boolean) => 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[]): { modules: Record<string, any>; varDeclarations: string } {\r\n const modules: Record<string, any> = {};\r\n const declarations: string[] = [];\r\n\r\n for (const importInfo of imports) {\r\n try {\r\n // Try to require the module\r\n const mod = require(importInfo.moduleName);\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 */\r\nexport function createHandlerContext(scriptContent: string, initialData: Record<string, any> = {}, component?: any, ctx?: any): 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);\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 let processedScript = cleanedScript\r\n // Remove $state declarations completely or make them var\r\n .replace(/let\\s+(\\w+)\\s*=\\s*\\$state\\(([^)]*)\\);?/g, 'var $1 = $2;')\r\n // Remove $derived declarations but keep the value\r\n .replace(/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 // Replace $props destructuring with data access (handles default values)\r\n .replace(/let\\s+\\{\\s*([^}]+)\\s*\\}\\s*=\\s*\\$props\\(\\);?/g, (match, vars) => {\r\n return vars.split(',').map((v: string) => {\r\n v = v.trim();\r\n // Skip empty strings and comments\r\n if (!v || v.startsWith('//')) return '';\r\n // Remove inline comments from the variable definition\r\n v = v.replace(/\\/\\/.*$/, '').trim();\r\n if (!v) return '';\r\n // Skip 'data' prop as it's already defined in the wrapper\r\n if (v === 'data') return '';\r\n // Check if there's a default value: varName = defaultValue\r\n const defaultMatch = v.match(/^(\\w+)\\s*=\\s*(.+)$/);\r\n if (defaultMatch) {\r\n const [, varName, defaultValue] = defaultMatch;\r\n // Skip 'data' prop even with default value\r\n if (varName === 'data') return '';\r\n // Clean default value from trailing comments\r\n const cleanDefault = defaultValue.replace(/\\/\\/.*$/, '').trim();\r\n return `var ${varName} = data.${varName} ?? ${cleanDefault};`;\r\n }\r\n return `var ${v} = data.${v};`;\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 __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 // 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 var components = await __component__.toJSON({ data: __data__ });\r\n \r\n // Try to use current interaction if available\r\n if (__ctx__ && __ctx__.interaction) {\r\n try {\r\n var i = __ctx__.interaction;\r\n \r\n // Update last message reference\r\n if (i.message) {\r\n __lastMessage__ = i.message;\r\n }\r\n \r\n if (i.replied || i.deferred) {\r\n // Already replied, use message.edit with rate limit handling\r\n return __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 return __safeEdit__(function() {\r\n return i.update({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n }\r\n } catch (err) {\r\n // Silently fail\r\n }\r\n }\r\n \r\n // Fallback: Use last message reference (for intervals/timeouts outside interaction)\r\n if (__lastMessage__) {\r\n return __safeEdit__(function() {\r\n return __lastMessage__.edit({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\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 // 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 // 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 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 });\r\n }\r\n \r\n // Wrap data in reactive proxy\r\n var data = __createReactiveProxy__(__data__, 'data');\r\n \r\n // Track if an async interaction method was called\r\n var __asyncInteractionCalled__ = false;\r\n \r\n // Wrap interaction methods to auto-render after completion\r\n var interaction = null;\r\n var ctx = null;\r\n \r\n if (__ctx__ && __ctx__.interaction) {\r\n var originalInteraction = __ctx__.interaction;\r\n \r\n // Create a proxy for interaction that wraps reply/followUp/deferReply\r\n interaction = new Proxy(originalInteraction, {\r\n get: function(target, prop) {\r\n var value = target[prop];\r\n \r\n // Wrap methods that \"consume\" the interaction (reply, followUp, defer)\r\n if (prop === 'reply' || prop === 'followUp' || prop === 'deferReply' || prop === 'deferUpdate') {\r\n return function() {\r\n // Mark that async interaction was called - this prevents sync flush at handler end\r\n __asyncInteractionCalled__ = true;\r\n \r\n var result = value.apply(target, arguments);\r\n // After the reply completes, flush any pending renders using throttled render\r\n if (result && typeof result.then === 'function') {\r\n result.then(function() {\r\n if (__hasDataChanges__ && __autoRenderEnabled__) {\r\n __hasDataChanges__ = false;\r\n // Use throttled render which handles rate limits\r\n __throttledRender__(false);\r\n }\r\n }).catch(function(err) {\r\n // Silently fail\r\n });\r\n }\r\n return result;\r\n };\r\n }\r\n \r\n // Wrap update method - this one renders directly, no need to flush after\r\n if (prop === 'update') {\r\n return function() {\r\n __autoRenderEnabled__ = false; // Disable auto since we're doing manual update\r\n __asyncInteractionCalled__ = true;\r\n return value.apply(target, arguments);\r\n };\r\n }\r\n \r\n // Bind functions to original target\r\n if (typeof value === 'function') {\r\n return value.bind(target);\r\n }\r\n \r\n return value;\r\n }\r\n });\r\n \r\n // Create wrapped ctx with the proxied interaction\r\n ctx = new Proxy(__ctx__, {\r\n get: function(target, prop) {\r\n if (prop === 'interaction') {\r\n return interaction;\r\n }\r\n return 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 // Mount callback failed\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 // Destroy callback failed\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 return { \r\n handlers: { ${functionNames.length > 0 ? functionNames.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 runMount: __runMount__,\r\n runDestroy: __runDestroy__,\r\n setInHandler: __setInHandler__\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 const result = createHandlers(initialData, component, ctx, modules);\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 runMount: result.runMount || (() => { }),\r\n runDestroy: result.runDestroy || (() => { }),\r\n setInHandler: result.setInHandler || (() => { })\r\n };\r\n } catch (error) {\r\n // Silently fail and return fallback\r\n }\r\n\r\n // Function to run all effects (fallback)\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: () => false,\r\n flushRender: () => Promise.resolve(),\r\n wrappedCtx: ctx,\r\n mountCallbacks: [],\r\n destroyCallbacks: [],\r\n runMount: () => { },\r\n runDestroy: () => { },\r\n setInHandler: () => { }\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, etc.\r\n element: string; // button, string-select, etc.\r\n}\r\n\r\nexport interface SvelteComponentInfo {\r\n handlers: Map<string, SvelteHandlerInfo>;\r\n scriptContent: string;\r\n processedSource: string; // Source with auto-generated names injected\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 const ast = _parse(source);\r\n const handlers = new Map<string, SvelteHandlerInfo>();\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 // 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\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 } | 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\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 } else if (attr.expression.type === \"MemberExpression\") {\r\n handlerName = extractMemberExpressionName(attr.expression);\r\n }\r\n }\r\n\r\n if (handlerName) {\r\n foundHandler = { eventType, handlerName };\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 });\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 return {\r\n handlers,\r\n scriptContent,\r\n processedSource\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\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 runMount: () => void;\r\n runDestroy: () => void;\r\n // Handler execution tracking\r\n setInHandler: (value: boolean) => 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[]): { modules: Record<string, any>; varDeclarations: string } {\r\n const modules: Record<string, any> = {};\r\n const declarations: string[] = [];\r\n\r\n for (const importInfo of imports) {\r\n try {\r\n // Try to require the module\r\n const mod = require(importInfo.moduleName);\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 */\r\nexport function createHandlerContext(scriptContent: string, initialData: Record<string, any> = {}, component?: any, ctx?: any): 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);\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 let processedScript = cleanedScript\r\n // Remove $state declarations completely or make them var\r\n .replace(/let\\s+(\\w+)\\s*=\\s*\\$state\\(([^)]*)\\);?/g, 'var $1 = $2;')\r\n // Remove $derived declarations but keep the value\r\n .replace(/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 // Replace $props destructuring with data access (handles default values)\r\n .replace(/let\\s+\\{\\s*([^}]+)\\s*\\}\\s*=\\s*\\$props\\(\\);?/g, (match, vars) => {\r\n return vars.split(',').map((v: string) => {\r\n v = v.trim();\r\n // Skip empty strings and comments\r\n if (!v || v.startsWith('//')) return '';\r\n // Remove inline comments from the variable definition\r\n v = v.replace(/\\/\\/.*$/, '').trim();\r\n if (!v) return '';\r\n // Skip 'data' prop as it's already defined in the wrapper\r\n if (v === 'data') return '';\r\n // Check if there's a default value: varName = defaultValue\r\n const defaultMatch = v.match(/^(\\w+)\\s*=\\s*(.+)$/);\r\n if (defaultMatch) {\r\n const [, varName, defaultValue] = defaultMatch;\r\n // Skip 'data' prop even with default value\r\n if (varName === 'data') return '';\r\n // Clean default value from trailing comments\r\n const cleanDefault = defaultValue.replace(/\\/\\/.*$/, '').trim();\r\n return `var ${varName} = data.${varName} ?? ${cleanDefault};`;\r\n }\r\n return `var ${v} = data.${v};`;\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 __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 // 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 var components = await __component__.toJSON({ data: __data__ });\r\n \r\n // Try to use current interaction if available\r\n if (__ctx__ && __ctx__.interaction) {\r\n try {\r\n var i = __ctx__.interaction;\r\n \r\n // Update last message reference\r\n if (i.message) {\r\n __lastMessage__ = i.message;\r\n }\r\n \r\n if (i.replied || i.deferred) {\r\n // Already replied, use message.edit with rate limit handling\r\n return __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 return __safeEdit__(function() {\r\n return i.update({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\r\n }\r\n } catch (err) {\r\n // Silently fail\r\n }\r\n }\r\n \r\n // Fallback: Use last message reference (for intervals/timeouts outside interaction)\r\n if (__lastMessage__) {\r\n return __safeEdit__(function() {\r\n return __lastMessage__.edit({\r\n components: components,\r\n flags: [\"IsComponentsV2\"],\r\n });\r\n });\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 // 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 // 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 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 });\r\n }\r\n \r\n // Wrap data in reactive proxy\r\n var data = __createReactiveProxy__(__data__, 'data');\r\n \r\n // Track if an async interaction method was called\r\n var __asyncInteractionCalled__ = false;\r\n \r\n // Wrap interaction methods to auto-render after completion\r\n var interaction = null;\r\n var ctx = null;\r\n \r\n if (__ctx__ && __ctx__.interaction) {\r\n var originalInteraction = __ctx__.interaction;\r\n \r\n // Create a proxy for interaction that wraps reply/followUp/deferReply\r\n interaction = new Proxy(originalInteraction, {\r\n get: function(target, prop) {\r\n var value = target[prop];\r\n \r\n // Wrap methods that \"consume\" the interaction (reply, followUp, defer)\r\n if (prop === 'reply' || prop === 'followUp' || prop === 'deferReply' || prop === 'deferUpdate') {\r\n return function() {\r\n // Mark that async interaction was called - this prevents sync flush at handler end\r\n __asyncInteractionCalled__ = true;\r\n \r\n var result = value.apply(target, arguments);\r\n // After the reply completes, flush any pending renders using throttled render\r\n if (result && typeof result.then === 'function') {\r\n result.then(function() {\r\n if (__hasDataChanges__ && __autoRenderEnabled__) {\r\n __hasDataChanges__ = false;\r\n // Use throttled render which handles rate limits\r\n __throttledRender__(false);\r\n }\r\n }).catch(function(err) {\r\n // Silently fail\r\n });\r\n }\r\n return result;\r\n };\r\n }\r\n \r\n // Wrap update method - this one renders directly, no need to flush after\r\n if (prop === 'update') {\r\n return function() {\r\n __autoRenderEnabled__ = false; // Disable auto since we're doing manual update\r\n __asyncInteractionCalled__ = true;\r\n return value.apply(target, arguments);\r\n };\r\n }\r\n \r\n // Bind functions to original target\r\n if (typeof value === 'function') {\r\n return value.bind(target);\r\n }\r\n \r\n return value;\r\n }\r\n });\r\n \r\n // Create wrapped ctx with the proxied interaction\r\n ctx = new Proxy(__ctx__, {\r\n get: function(target, prop) {\r\n if (prop === 'interaction') {\r\n return interaction;\r\n }\r\n return 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 // Mount callback failed\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 // Destroy callback failed\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 return { \r\n handlers: { ${functionNames.length > 0 ? functionNames.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 runMount: __runMount__,\r\n runDestroy: __runDestroy__,\r\n setInHandler: __setInHandler__\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 const result = createHandlers(initialData, component, ctx, modules);\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 runMount: result.runMount || (() => { }),\r\n runDestroy: result.runDestroy || (() => { }),\r\n setInHandler: result.setInHandler || (() => { })\r\n };\r\n } catch (error) {\r\n // Silently fail and return fallback\r\n }\r\n\r\n // Function to run all effects (fallback)\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: () => false,\r\n flushRender: () => Promise.resolve(),\r\n wrappedCtx: ctx,\r\n mountCallbacks: [],\r\n destroyCallbacks: [],\r\n runMount: () => { },\r\n runDestroy: () => { },\r\n setInHandler: () => { }\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,EAAwB,MAAM,gBAAgB,CAAC;AAIvH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;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;CACpC;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,
|
|
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,EAAwB,MAAM,gBAAgB,CAAC;AAIvH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;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;CACpC;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,CAuG7B;AA4KD;;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,CAI7B"}
|
|
@@ -63,18 +63,27 @@ async function renderSvelteComponent(dbi, source, dbiName, options = {}) {
|
|
|
63
63
|
dbi.data.refs.set(stateRefId, { at: Date.now(), value: data, ttl });
|
|
64
64
|
}
|
|
65
65
|
// Add state ref to all elements with name attribute (buttons, selects)
|
|
66
|
+
// This includes both manual names and auto-generated names from svelteParser
|
|
66
67
|
html = html.replace(/<button([^>]*name="[^"]*"[^>]*)>/g, (match, attrs) => {
|
|
67
68
|
// Check if it already has data attributes
|
|
68
69
|
if (attrs.includes('data-1:'))
|
|
69
70
|
return match;
|
|
70
71
|
return `<button${attrs} data-1:ref="${stateRefId}">`;
|
|
71
72
|
});
|
|
72
|
-
// Also handle select elements
|
|
73
|
-
|
|
73
|
+
// Also handle select elements (with optional -menu suffix for Svelte compatibility)
|
|
74
|
+
// Supports: string-select, user-select, role-select, channel-select, mentionable-select
|
|
75
|
+
// Both with and without -menu suffix (e.g., string-select-menu or string-select)
|
|
76
|
+
html = html.replace(/<(string-select(?:-menu)?|user-select(?:-menu)?|role-select(?:-menu)?|channel-select(?:-menu)?|mentionable-select(?:-menu)?)([^>]*name="[^"]*"[^>]*)>/g, (match, tag, attrs) => {
|
|
74
77
|
if (attrs.includes('data-1:'))
|
|
75
78
|
return match;
|
|
76
79
|
return `<${tag}${attrs} data-1:ref="${stateRefId}">`;
|
|
77
80
|
});
|
|
81
|
+
// Handle modal elements with name attribute
|
|
82
|
+
html = html.replace(/<modal([^>]*name="[^"]*"[^>]*)>/g, (match, attrs) => {
|
|
83
|
+
if (attrs.includes('data-1:'))
|
|
84
|
+
return match;
|
|
85
|
+
return `<modal${attrs} data-1:ref="${stateRefId}">`;
|
|
86
|
+
});
|
|
78
87
|
}
|
|
79
88
|
// Parse the rendered HTML to Discord components
|
|
80
89
|
const components = (0, parser_1.parseHTMLComponentsV2)(dbi, html, dbiName, { data, ttl });
|