@mostfeatured/dbi 0.2.11 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"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;AAqSrE,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"}
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
- let options = Array.from(stringSelect.querySelectorAll("option")).map(option => {
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
- let options = Array.from(userSelect.querySelectorAll("option")).map(option => {
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}"]}
@@ -69,8 +69,8 @@ async function renderSvelteComponent(dbi, source, dbiName, options = {}) {
69
69
  return match;
70
70
  return `<button${attrs} data-1:ref="${stateRefId}">`;
71
71
  });
72
- // Also handle select elements
73
- html = html.replace(/<(string-select|user-select|role-select|channel-select|mentionable-select)([^>]*name="[^"]*"[^>]*)>/g, (match, tag, attrs) => {
72
+ // Also handle select elements (with optional -menu suffix for Svelte compatibility)
73
+ html = html.replace(/<(string-select(?:-menu)?|user-select(?:-menu)?|role-select(?:-menu)?|channel-select(?:-menu)?|mentionable-select(?:-menu)?)([^>]*name="[^"]*"[^>]*)>/g, (match, tag, attrs) => {
74
74
  if (attrs.includes('data-1:'))
75
75
  return match;
76
76
  return `<${tag}${attrs} data-1:ref="${stateRefId}">`;
@@ -1 +1 @@
1
- {"version":3,"file":"svelteRenderer.js","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { compile } from \"svelte/compiler\";\r\nimport { DBI } from \"../../../DBI\";\r\nimport { NamespaceEnums } from \"../../../../generated/namespaceData\";\r\nimport { parseHTMLComponentsV2 } from \"./parser\";\r\nimport { parseSvelteComponent, createHandlerContext, SvelteComponentInfo, HandlerContextResult } from \"./svelteParser\";\r\nimport * as stuffs from \"stuffs\";\r\nimport * as vm from \"vm\";\r\n\r\nexport interface SvelteRenderOptions {\r\n data?: Record<string, any>;\r\n ttl?: number;\r\n}\r\n\r\nexport interface SvelteRenderResult {\r\n components: any[];\r\n handlers: Map<string, { handlerFn: Function, context: any }>;\r\n componentInfo: SvelteComponentInfo;\r\n}\r\n\r\n/**\r\n * Compile and render a Svelte component to Discord components\r\n */\r\nexport async function renderSvelteComponent(\r\n dbi: DBI<NamespaceEnums>,\r\n source: string,\r\n dbiName: string,\r\n options: SvelteRenderOptions = {}\r\n): Promise<SvelteRenderResult> {\r\n const { data = {}, ttl = 0 } = options;\r\n\r\n // Parse the Svelte component to extract handlers\r\n // This also injects auto-generated names into elements without name attribute\r\n const componentInfo = await parseSvelteComponent(source, data);\r\n\r\n // Use the processed source (with auto-generated names injected)\r\n const processedSource = componentInfo.processedSource;\r\n\r\n // Compile the Svelte component for SSR (Svelte 5)\r\n const compiled = compile(processedSource, {\r\n generate: \"server\",\r\n css: \"injected\",\r\n dev: false,\r\n } as any);\r\n\r\n // Create a module context for the compiled code\r\n let html = \"\";\r\n try {\r\n const moduleContext = createModuleContext(dbi, data, ttl);\r\n const Component = evaluateCompiledComponent(compiled.js.code, moduleContext);\r\n\r\n // Svelte 5 SSR: Use render from svelte/server\r\n const { render } = require(\"svelte/server\");\r\n // Pass data properties as top-level props (Svelte 5 expects flat props object)\r\n const renderResult = render(Component, { props: data });\r\n html = renderResult.body || \"\";\r\n } catch (error) {\r\n throw error;\r\n }\r\n\r\n // For Svelte mode, inject state into interactive elements as a ref\r\n // Reuse existing ref if data already has one, otherwise create new\r\n if (data && Object.keys(data).length > 0) {\r\n let stateRefId: string;\r\n\r\n // Check if data already has a $ref (from previous render)\r\n if (data.$ref && typeof data.$ref === 'string') {\r\n stateRefId = data.$ref;\r\n // Update the existing ref's value with new data\r\n const existingRef = dbi.data.refs.get(stateRefId);\r\n if (existingRef) {\r\n existingRef.value = data;\r\n existingRef.at = Date.now(); // Refresh timestamp\r\n } else {\r\n // Ref expired or was deleted, create new one with same ID\r\n dbi.data.refs.set(stateRefId, { at: Date.now(), value: data, ttl });\r\n }\r\n } else {\r\n // Create a new ref for the state\r\n stateRefId = stuffs.randomString(8);\r\n data.$ref = stateRefId; // Store ref ID in data for future updates\r\n dbi.data.refs.set(stateRefId, { at: Date.now(), value: data, ttl });\r\n }\r\n\r\n // Add state ref to all elements with name attribute (buttons, selects)\r\n html = html.replace(/<button([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, attrs) => {\r\n // Check if it already has data attributes\r\n if (attrs.includes('data-1:')) return match;\r\n return `<button${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n // Also handle select elements\r\n html = html.replace(/<(string-select|user-select|role-select|channel-select|mentionable-select)([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, tag, attrs) => {\r\n if (attrs.includes('data-1:')) return match;\r\n return `<${tag}${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n }\r\n\r\n // Parse the rendered HTML to Discord components\r\n const components = parseHTMLComponentsV2(dbi, html, dbiName, { data, ttl });\r\n\r\n // Create handler context (also captures $effect callbacks)\r\n const handlerContext = createHandlerContext(componentInfo.scriptContent, data);\r\n const handlers = new Map<string, { handlerFn: Function, context: any }>();\r\n\r\n // Run effects on initial render\r\n handlerContext.runEffects();\r\n\r\n // Map handlers to component names\r\n componentInfo.handlers.forEach((handlerInfo, componentName) => {\r\n const handlerFn = handlerContext.handlers[handlerInfo.handlerName];\r\n if (handlerFn && typeof handlerFn === \"function\") {\r\n handlers.set(componentName, {\r\n handlerFn,\r\n context: data\r\n });\r\n }\r\n });\r\n\r\n return {\r\n components,\r\n handlers,\r\n componentInfo\r\n };\r\n}\r\n\r\n/**\r\n * Create a module context for evaluating the compiled Svelte component\r\n */\r\nfunction createModuleContext(dbi: DBI<NamespaceEnums>, data: Record<string, any>, ttl: number) {\r\n return {\r\n // Store objects in refs for later retrieval in handlers\r\n // This is used internally by the parser when converting to Discord components\r\n __storeRef: (obj: any) => {\r\n let id = stuffs.randomString(8);\r\n dbi.data.refs.set(id, { at: Date.now(), value: obj, ttl });\r\n return id;\r\n },\r\n\r\n // DBI instance for advanced usage\r\n __dbi: dbi,\r\n\r\n // All data context available\r\n ...data,\r\n data, // Also expose as 'data' prop\r\n };\r\n}\r\n\r\n/**\r\n * Evaluate the compiled Svelte component code\r\n */\r\nfunction evaluateCompiledComponent(code: string, context: Record<string, any>): any {\r\n try {\r\n // Load Svelte 5 internal runtime\r\n const svelteInternal = require(\"svelte/internal/server\");\r\n\r\n // Process the code to work in our context\r\n let processedCode = code;\r\n\r\n // Collect external modules to inject into sandbox\r\n const externalModules: Record<string, any> = {};\r\n\r\n // Replace svelte internal imports\r\n processedCode = processedCode.replace(\r\n /import\\s*\\*\\s*as\\s*(\\w+)\\s*from\\s*[\"']svelte\\/internal\\/server[\"'];?/g,\r\n 'const $1 = __svelteInternal;'\r\n );\r\n processedCode = processedCode.replace(\r\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']svelte\\/internal\\/server[\"'];?/g,\r\n (match, imports) => {\r\n const importList = imports.split(',').map((i: string) => i.trim());\r\n return `const { ${importList.join(', ')} } = __svelteInternal;`;\r\n }\r\n );\r\n\r\n // Handle external module imports (default imports)\r\n processedCode = processedCode.replace(\r\n /import\\s+(\\w+)\\s+from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, varName, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n const mod = require(modulePath);\r\n externalModules[varName] = mod.default || mod;\r\n return `const ${varName} = __externalModules.${varName};`;\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Handle named imports from external modules\r\n processedCode = processedCode.replace(\r\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, imports, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n const mod = require(modulePath);\r\n const importList = imports.split(',').map((i: string) => i.trim());\r\n importList.forEach((importName: string) => {\r\n const [name, alias] = importName.split(' as ').map(s => s.trim());\r\n externalModules[alias || name] = mod[name] || mod.default?.[name];\r\n });\r\n return importList.map((importName: string) => {\r\n const [name, alias] = importName.split(' as ').map(s => s.trim());\r\n return `const ${alias || name} = __externalModules.${alias || name};`;\r\n }).join('\\n');\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Handle namespace imports from external modules\r\n processedCode = processedCode.replace(\r\n /import\\s*\\*\\s*as\\s*(\\w+)\\s*from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, varName, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n const mod = require(modulePath);\r\n externalModules[varName] = mod;\r\n return `const ${varName} = __externalModules.${varName};`;\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Remove any remaining import statements\r\n processedCode = processedCode\r\n .split('\\n')\r\n .filter(line => !line.trim().startsWith('import '))\r\n .join('\\n');\r\n\r\n // Replace 'export default' with assignment\r\n processedCode = processedCode.replace(/export\\s+default\\s+/g, '__exports.default = ');\r\n // Replace 'export function' with assignment\r\n processedCode = processedCode.replace(/export\\s+function\\s+(\\w+)/g, '__exports.$1 = function $1');\r\n // Replace 'export const' with assignment\r\n processedCode = processedCode.replace(/export\\s+const\\s+(\\w+)/g, '__exports.$1 = ');\r\n // Replace 'export let' with assignment \r\n processedCode = processedCode.replace(/export\\s+let\\s+(\\w+)/g, '__exports.$1 = ');\r\n\r\n // Create the sandbox context\r\n const __exports: any = {};\r\n // Svelte lifecycle functions - no-ops for SSR\r\n const svelteLifecycle = {\r\n onMount: () => () => { }, // Returns cleanup function\r\n onDestroy: () => { },\r\n beforeUpdate: () => { },\r\n afterUpdate: () => { },\r\n tick: () => Promise.resolve(),\r\n untrack: (fn: () => any) => fn(),\r\n createEventDispatcher: () => () => { },\r\n };\r\n\r\n // Note: Svelte 5 runes ($state, $derived, etc.) are compile-time features\r\n // The compiler transforms them, so we don't need runtime implementations.\r\n // The `$` variable is used by compiled code as the svelte/internal/server namespace.\r\n\r\n const sandbox = {\r\n __svelteInternal: svelteInternal,\r\n __externalModules: externalModules,\r\n $: svelteInternal, // Direct alias for compiled Svelte code that uses `$`\r\n __exports,\r\n console,\r\n ...svelteLifecycle,\r\n ...context,\r\n };\r\n\r\n // Wrap code in IIFE\r\n const wrappedCode = `\r\n (function() {\r\n ${processedCode}\r\n })();\r\n `;\r\n\r\n // Run in VM context for better isolation\r\n vm.createContext(sandbox);\r\n vm.runInContext(wrappedCode, sandbox);\r\n\r\n // Return the component\r\n const Component = sandbox.__exports.default;\r\n\r\n if (!Component) {\r\n throw new Error(\"Svelte component did not export a default component\");\r\n }\r\n\r\n return Component;\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Render a Svelte component from a file\r\n */\r\nexport async function renderSvelteComponentFromFile(\r\n dbi: DBI<NamespaceEnums>,\r\n filePath: string,\r\n dbiName: string,\r\n options: SvelteRenderOptions = {}\r\n): Promise<SvelteRenderResult> {\r\n const fs = require(\"fs\");\r\n const source = fs.readFileSync(filePath, \"utf-8\");\r\n return await renderSvelteComponent(dbi, source, dbiName, options);\r\n}\r\n"]}
1
+ {"version":3,"file":"svelteRenderer.js","sourceRoot":"","sources":["../../../../../src/types/Components/HTMLComponentsV2/svelteRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { compile } from \"svelte/compiler\";\r\nimport { DBI } from \"../../../DBI\";\r\nimport { NamespaceEnums } from \"../../../../generated/namespaceData\";\r\nimport { parseHTMLComponentsV2 } from \"./parser\";\r\nimport { parseSvelteComponent, createHandlerContext, SvelteComponentInfo, HandlerContextResult } from \"./svelteParser\";\r\nimport * as stuffs from \"stuffs\";\r\nimport * as vm from \"vm\";\r\n\r\nexport interface SvelteRenderOptions {\r\n data?: Record<string, any>;\r\n ttl?: number;\r\n}\r\n\r\nexport interface SvelteRenderResult {\r\n components: any[];\r\n handlers: Map<string, { handlerFn: Function, context: any }>;\r\n componentInfo: SvelteComponentInfo;\r\n}\r\n\r\n/**\r\n * Compile and render a Svelte component to Discord components\r\n */\r\nexport async function renderSvelteComponent(\r\n dbi: DBI<NamespaceEnums>,\r\n source: string,\r\n dbiName: string,\r\n options: SvelteRenderOptions = {}\r\n): Promise<SvelteRenderResult> {\r\n const { data = {}, ttl = 0 } = options;\r\n\r\n // Parse the Svelte component to extract handlers\r\n // This also injects auto-generated names into elements without name attribute\r\n const componentInfo = await parseSvelteComponent(source, data);\r\n\r\n // Use the processed source (with auto-generated names injected)\r\n const processedSource = componentInfo.processedSource;\r\n\r\n // Compile the Svelte component for SSR (Svelte 5)\r\n const compiled = compile(processedSource, {\r\n generate: \"server\",\r\n css: \"injected\",\r\n dev: false,\r\n } as any);\r\n\r\n // Create a module context for the compiled code\r\n let html = \"\";\r\n try {\r\n const moduleContext = createModuleContext(dbi, data, ttl);\r\n const Component = evaluateCompiledComponent(compiled.js.code, moduleContext);\r\n\r\n // Svelte 5 SSR: Use render from svelte/server\r\n const { render } = require(\"svelte/server\");\r\n // Pass data properties as top-level props (Svelte 5 expects flat props object)\r\n const renderResult = render(Component, { props: data });\r\n html = renderResult.body || \"\";\r\n } catch (error) {\r\n throw error;\r\n }\r\n\r\n // For Svelte mode, inject state into interactive elements as a ref\r\n // Reuse existing ref if data already has one, otherwise create new\r\n if (data && Object.keys(data).length > 0) {\r\n let stateRefId: string;\r\n\r\n // Check if data already has a $ref (from previous render)\r\n if (data.$ref && typeof data.$ref === 'string') {\r\n stateRefId = data.$ref;\r\n // Update the existing ref's value with new data\r\n const existingRef = dbi.data.refs.get(stateRefId);\r\n if (existingRef) {\r\n existingRef.value = data;\r\n existingRef.at = Date.now(); // Refresh timestamp\r\n } else {\r\n // Ref expired or was deleted, create new one with same ID\r\n dbi.data.refs.set(stateRefId, { at: Date.now(), value: data, ttl });\r\n }\r\n } else {\r\n // Create a new ref for the state\r\n stateRefId = stuffs.randomString(8);\r\n data.$ref = stateRefId; // Store ref ID in data for future updates\r\n dbi.data.refs.set(stateRefId, { at: Date.now(), value: data, ttl });\r\n }\r\n\r\n // Add state ref to all elements with name attribute (buttons, selects)\r\n html = html.replace(/<button([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, attrs) => {\r\n // Check if it already has data attributes\r\n if (attrs.includes('data-1:')) return match;\r\n return `<button${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n // Also handle select elements (with optional -menu suffix for Svelte compatibility)\r\n html = html.replace(/<(string-select(?:-menu)?|user-select(?:-menu)?|role-select(?:-menu)?|channel-select(?:-menu)?|mentionable-select(?:-menu)?)([^>]*name=\"[^\"]*\"[^>]*)>/g, (match, tag, attrs) => {\r\n if (attrs.includes('data-1:')) return match;\r\n return `<${tag}${attrs} data-1:ref=\"${stateRefId}\">`;\r\n });\r\n }\r\n\r\n // Parse the rendered HTML to Discord components\r\n const components = parseHTMLComponentsV2(dbi, html, dbiName, { data, ttl });\r\n\r\n // Create handler context (also captures $effect callbacks)\r\n const handlerContext = createHandlerContext(componentInfo.scriptContent, data);\r\n const handlers = new Map<string, { handlerFn: Function, context: any }>();\r\n\r\n // Run effects on initial render\r\n handlerContext.runEffects();\r\n\r\n // Map handlers to component names\r\n componentInfo.handlers.forEach((handlerInfo, componentName) => {\r\n const handlerFn = handlerContext.handlers[handlerInfo.handlerName];\r\n if (handlerFn && typeof handlerFn === \"function\") {\r\n handlers.set(componentName, {\r\n handlerFn,\r\n context: data\r\n });\r\n }\r\n });\r\n\r\n return {\r\n components,\r\n handlers,\r\n componentInfo\r\n };\r\n}\r\n\r\n/**\r\n * Create a module context for evaluating the compiled Svelte component\r\n */\r\nfunction createModuleContext(dbi: DBI<NamespaceEnums>, data: Record<string, any>, ttl: number) {\r\n return {\r\n // Store objects in refs for later retrieval in handlers\r\n // This is used internally by the parser when converting to Discord components\r\n __storeRef: (obj: any) => {\r\n let id = stuffs.randomString(8);\r\n dbi.data.refs.set(id, { at: Date.now(), value: obj, ttl });\r\n return id;\r\n },\r\n\r\n // DBI instance for advanced usage\r\n __dbi: dbi,\r\n\r\n // All data context available\r\n ...data,\r\n data, // Also expose as 'data' prop\r\n };\r\n}\r\n\r\n/**\r\n * Evaluate the compiled Svelte component code\r\n */\r\nfunction evaluateCompiledComponent(code: string, context: Record<string, any>): any {\r\n try {\r\n // Load Svelte 5 internal runtime\r\n const svelteInternal = require(\"svelte/internal/server\");\r\n\r\n // Process the code to work in our context\r\n let processedCode = code;\r\n\r\n // Collect external modules to inject into sandbox\r\n const externalModules: Record<string, any> = {};\r\n\r\n // Replace svelte internal imports\r\n processedCode = processedCode.replace(\r\n /import\\s*\\*\\s*as\\s*(\\w+)\\s*from\\s*[\"']svelte\\/internal\\/server[\"'];?/g,\r\n 'const $1 = __svelteInternal;'\r\n );\r\n processedCode = processedCode.replace(\r\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']svelte\\/internal\\/server[\"'];?/g,\r\n (match, imports) => {\r\n const importList = imports.split(',').map((i: string) => i.trim());\r\n return `const { ${importList.join(', ')} } = __svelteInternal;`;\r\n }\r\n );\r\n\r\n // Handle external module imports (default imports)\r\n processedCode = processedCode.replace(\r\n /import\\s+(\\w+)\\s+from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, varName, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n const mod = require(modulePath);\r\n externalModules[varName] = mod.default || mod;\r\n return `const ${varName} = __externalModules.${varName};`;\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Handle named imports from external modules\r\n processedCode = processedCode.replace(\r\n /import\\s*\\{([^}]+)\\}\\s*from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, imports, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n const mod = require(modulePath);\r\n const importList = imports.split(',').map((i: string) => i.trim());\r\n importList.forEach((importName: string) => {\r\n const [name, alias] = importName.split(' as ').map(s => s.trim());\r\n externalModules[alias || name] = mod[name] || mod.default?.[name];\r\n });\r\n return importList.map((importName: string) => {\r\n const [name, alias] = importName.split(' as ').map(s => s.trim());\r\n return `const ${alias || name} = __externalModules.${alias || name};`;\r\n }).join('\\n');\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Handle namespace imports from external modules\r\n processedCode = processedCode.replace(\r\n /import\\s*\\*\\s*as\\s*(\\w+)\\s*from\\s*[\"']([^\"']+)[\"'];?/g,\r\n (match, varName, modulePath) => {\r\n // Skip svelte imports\r\n if (modulePath.startsWith('svelte')) return '';\r\n try {\r\n const mod = require(modulePath);\r\n externalModules[varName] = mod;\r\n return `const ${varName} = __externalModules.${varName};`;\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n );\r\n\r\n // Remove any remaining import statements\r\n processedCode = processedCode\r\n .split('\\n')\r\n .filter(line => !line.trim().startsWith('import '))\r\n .join('\\n');\r\n\r\n // Replace 'export default' with assignment\r\n processedCode = processedCode.replace(/export\\s+default\\s+/g, '__exports.default = ');\r\n // Replace 'export function' with assignment\r\n processedCode = processedCode.replace(/export\\s+function\\s+(\\w+)/g, '__exports.$1 = function $1');\r\n // Replace 'export const' with assignment\r\n processedCode = processedCode.replace(/export\\s+const\\s+(\\w+)/g, '__exports.$1 = ');\r\n // Replace 'export let' with assignment \r\n processedCode = processedCode.replace(/export\\s+let\\s+(\\w+)/g, '__exports.$1 = ');\r\n\r\n // Create the sandbox context\r\n const __exports: any = {};\r\n // Svelte lifecycle functions - no-ops for SSR\r\n const svelteLifecycle = {\r\n onMount: () => () => { }, // Returns cleanup function\r\n onDestroy: () => { },\r\n beforeUpdate: () => { },\r\n afterUpdate: () => { },\r\n tick: () => Promise.resolve(),\r\n untrack: (fn: () => any) => fn(),\r\n createEventDispatcher: () => () => { },\r\n };\r\n\r\n // Note: Svelte 5 runes ($state, $derived, etc.) are compile-time features\r\n // The compiler transforms them, so we don't need runtime implementations.\r\n // The `$` variable is used by compiled code as the svelte/internal/server namespace.\r\n\r\n const sandbox = {\r\n __svelteInternal: svelteInternal,\r\n __externalModules: externalModules,\r\n $: svelteInternal, // Direct alias for compiled Svelte code that uses `$`\r\n __exports,\r\n console,\r\n ...svelteLifecycle,\r\n ...context,\r\n };\r\n\r\n // Wrap code in IIFE\r\n const wrappedCode = `\r\n (function() {\r\n ${processedCode}\r\n })();\r\n `;\r\n\r\n // Run in VM context for better isolation\r\n vm.createContext(sandbox);\r\n vm.runInContext(wrappedCode, sandbox);\r\n\r\n // Return the component\r\n const Component = sandbox.__exports.default;\r\n\r\n if (!Component) {\r\n throw new Error(\"Svelte component did not export a default component\");\r\n }\r\n\r\n return Component;\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Render a Svelte component from a file\r\n */\r\nexport async function renderSvelteComponentFromFile(\r\n dbi: DBI<NamespaceEnums>,\r\n filePath: string,\r\n dbiName: string,\r\n options: SvelteRenderOptions = {}\r\n): Promise<SvelteRenderResult> {\r\n const fs = require(\"fs\");\r\n const source = fs.readFileSync(filePath, \"utf-8\");\r\n return await renderSvelteComponent(dbi, source, dbiName, options);\r\n}\r\n"]}
@@ -5,7 +5,7 @@ const src_1 = require("../src");
5
5
  const path_1 = tslib_1.__importDefault(require("path"));
6
6
  const dbi = (0, src_1.createDBI)("svelte", {
7
7
  discord: {
8
- token: "YOUR_BOT_TOKEN_HERE",
8
+ token: process.env.DISCORD_TOKEN || "",
9
9
  options: {
10
10
  intents: [
11
11
  "GuildMessages",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../test/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createDBI } from \"../src\";\r\nimport path from \"path\";\r\n\r\nconst dbi = createDBI(\"svelte\", {\r\n discord: {\r\n token: \"YOUR_BOT_TOKEN_HERE\",\r\n options: {\r\n intents: [\r\n \"GuildMessages\",\r\n \"Guilds\",\r\n \"MessageContent\",\r\n \"GuildMessageReactions\"\r\n ],\r\n }\r\n },\r\n references: {\r\n autoClear: {\r\n ttl: 60000 * 60, // 60 minutes\r\n check: 60000 // every 60 seconds\r\n }\r\n }\r\n});\r\n\r\ndbi.register(({ ChatInput, HTMLComponentsV2 }) => {\r\n // Svelte product showcase with Components V2\r\n HTMLComponentsV2({\r\n name: \"product-showcase\",\r\n mode: 'svelte',\r\n file: path.join(__dirname, \"product-showcase.svelte\")\r\n });\r\n\r\n // Test command\r\n ChatInput({\r\n name: \"test-svelte\",\r\n description: \"Test Svelte product showcase\",\r\n async onExecute({ interaction, dbi }) {\r\n const showcase = dbi.interaction(\"product-showcase\") as any;\r\n\r\n const products = [\r\n {\r\n name: \"Gaming Keyboard\",\r\n description: \"RGB mechanical keyboard with Cherry MX switches\",\r\n price: 149,\r\n image: \"https://cdn.discordapp.com/embed/avatars/0.png\",\r\n category: \"Electronics\",\r\n rating: 4.8,\r\n stock: 25\r\n },\r\n {\r\n name: \"Wireless Mouse\",\r\n description: \"Ergonomic wireless mouse with 16000 DPI sensor\",\r\n price: 79,\r\n image: \"https://cdn.discordapp.com/embed/avatars/1.png\",\r\n category: \"Electronics\",\r\n rating: 4.5,\r\n stock: 42\r\n },\r\n {\r\n name: \"USB-C Hub\",\r\n description: \"7-in-1 USB-C hub with HDMI, USB 3.0, and SD card reader\",\r\n price: 59,\r\n image: \"https://cdn.discordapp.com/embed/avatars/2.png\",\r\n category: \"Accessories\",\r\n rating: 4.3,\r\n stock: 18\r\n },\r\n {\r\n name: \"Monitor Stand\",\r\n description: \"Adjustable monitor stand with cable management\",\r\n price: 89,\r\n image: \"https://cdn.discordapp.com/embed/avatars/3.png\",\r\n category: \"Furniture\",\r\n rating: 4.6,\r\n stock: 31\r\n }\r\n ];\r\n\r\n // Use send() method - this sends the message AND initializes lifecycle hooks (onMount)\r\n // The interval in onMount will start immediately after the message is sent\r\n await showcase.send(interaction, {\r\n data: {\r\n products,\r\n currentIndex: 0,\r\n cart: [],\r\n view: 'browse',\r\n elapsedTime: 0\r\n }\r\n });\r\n }\r\n });\r\n});\r\n\r\nsetTimeout(() => {\r\n console.log(\"Loading DBI...\");\r\n dbi.load().then(() => {\r\n dbi.publish(\"Guild\", \"1341841733511806978\")\r\n console.log(\"DBI loaded.\");\r\n dbi.login().then(() => {\r\n console.log(\"Bot is running with Svelte components!\");\r\n });\r\n });\r\n}, 100);"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../test/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createDBI } from \"../src\";\r\nimport path from \"path\";\r\n\r\nconst dbi = createDBI(\"svelte\", {\r\n discord: {\r\n token: process.env.DISCORD_TOKEN || \"\",\r\n options: {\r\n intents: [\r\n \"GuildMessages\",\r\n \"Guilds\",\r\n \"MessageContent\",\r\n \"GuildMessageReactions\"\r\n ],\r\n }\r\n },\r\n references: {\r\n autoClear: {\r\n ttl: 60000 * 60, // 60 minutes\r\n check: 60000 // every 60 seconds\r\n }\r\n }\r\n});\r\n\r\ndbi.register(({ ChatInput, HTMLComponentsV2 }) => {\r\n // Svelte product showcase with Components V2\r\n HTMLComponentsV2({\r\n name: \"product-showcase\",\r\n mode: 'svelte',\r\n file: path.join(__dirname, \"product-showcase.svelte\")\r\n });\r\n\r\n // Test command\r\n ChatInput({\r\n name: \"test-svelte\",\r\n description: \"Test Svelte product showcase\",\r\n async onExecute({ interaction, dbi }) {\r\n const showcase = dbi.interaction(\"product-showcase\") as any;\r\n\r\n const products = [\r\n {\r\n name: \"Gaming Keyboard\",\r\n description: \"RGB mechanical keyboard with Cherry MX switches\",\r\n price: 149,\r\n image: \"https://cdn.discordapp.com/embed/avatars/0.png\",\r\n category: \"Electronics\",\r\n rating: 4.8,\r\n stock: 25\r\n },\r\n {\r\n name: \"Wireless Mouse\",\r\n description: \"Ergonomic wireless mouse with 16000 DPI sensor\",\r\n price: 79,\r\n image: \"https://cdn.discordapp.com/embed/avatars/1.png\",\r\n category: \"Electronics\",\r\n rating: 4.5,\r\n stock: 42\r\n },\r\n {\r\n name: \"USB-C Hub\",\r\n description: \"7-in-1 USB-C hub with HDMI, USB 3.0, and SD card reader\",\r\n price: 59,\r\n image: \"https://cdn.discordapp.com/embed/avatars/2.png\",\r\n category: \"Accessories\",\r\n rating: 4.3,\r\n stock: 18\r\n },\r\n {\r\n name: \"Monitor Stand\",\r\n description: \"Adjustable monitor stand with cable management\",\r\n price: 89,\r\n image: \"https://cdn.discordapp.com/embed/avatars/3.png\",\r\n category: \"Furniture\",\r\n rating: 4.6,\r\n stock: 31\r\n }\r\n ];\r\n\r\n // Use send() method - this sends the message AND initializes lifecycle hooks (onMount)\r\n // The interval in onMount will start immediately after the message is sent\r\n await showcase.send(interaction, {\r\n data: {\r\n products,\r\n currentIndex: 0,\r\n cart: [],\r\n view: 'browse',\r\n elapsedTime: 0\r\n }\r\n });\r\n }\r\n });\r\n});\r\n\r\nsetTimeout(() => {\r\n console.log(\"Loading DBI...\");\r\n dbi.load().then(() => {\r\n dbi.publish(\"Guild\", \"1341841733511806978\")\r\n console.log(\"DBI loaded.\");\r\n dbi.login().then(() => {\r\n console.log(\"Bot is running with Svelte components!\");\r\n });\r\n });\r\n}, 100);"]}