@mostfeatured/dbi 0.2.23 → 0.2.25

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;AAsPrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,IAAS,EAAE,GAAO,EAAE,GAAE,GAAQ;;;;;EAwE5H;AA8MD,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;AAED,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,0CAA0C;IAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAS,EAAE,GAAO,EAAE,GAAE,GAA0B,GAAG,sBAAsB,CAkDlL"}
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;AAwPrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,IAAS,EAAE,GAAO,EAAE,GAAE,GAAQ;;;;;EAwE5H;AA8MD,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;AAED,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,0CAA0C;IAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAS,EAAE,GAAO,EAAE,GAAE,GAA0B,GAAG,sBAAsB,CAkDlL"}
@@ -64,9 +64,11 @@ function getCleanTextContent(element) {
64
64
  function parseCustomIdAttributes(dbi, dbiName, element) {
65
65
  let customId = element.getAttribute("custom-id");
66
66
  if (!customId) {
67
- let name = element.getAttribute("name");
67
+ let name = element.getAttribute("name") || element.getAttribute("id") || element.getAttribute("custom-id");
68
68
  if (!name)
69
- throw new Error("Element must have a name or custom-id attribute.");
69
+ throw new Error(`Element must have a name, id, or custom-id attribute to build custom_id.\n${element.outerHTML}`, {
70
+ cause: element.outerHTML
71
+ });
70
72
  customId = (0, customId_1.buildCustomId)(dbi, dbiName, [
71
73
  name,
72
74
  ...parseElementDataAttributes(dbi, element.attributes),
@@ -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 // 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\n/**\r\n * Parse a modal element into Discord Modal format\r\n * Now supports the new Label component structure with various child components:\r\n * - text-input (type 4)\r\n * - string-select (type 3)\r\n * - user-select (type 5)\r\n * - role-select (type 6)\r\n * - mentionable-select (type 7)\r\n * - channel-select (type 8)\r\n * - file-upload (type 19)\r\n * - text-display (type 10)\r\n * \r\n * Example with Label wrapper (recommended):\r\n * <components type=\"modal\" id=\"my-modal\" title=\"My Modal\">\r\n * <label label=\"Your Name\" description=\"Enter your full name\">\r\n * <text-input id=\"name\" style=\"Short\" />\r\n * </label>\r\n * <label label=\"Select Bug Type\">\r\n * <string-select id=\"bug-type\">\r\n * <option value=\"ant\">🐜 Ant</option>\r\n * </string-select>\r\n * </label>\r\n * </components>\r\n * \r\n * Legacy format (still supported but deprecated):\r\n * <components type=\"modal\" id=\"my-modal\" title=\"My Modal\">\r\n * <text-input id=\"name\" label=\"Name\" />\r\n * </components>\r\n */\r\nexport function parseModal(dbi: DBI<NamespaceEnums>, dbiName: string, modalElement: Element, { data = {}, ttl = 0 }: any = {}) {\r\n const title = modalElement.getAttribute(\"title\") || \"Modal\";\r\n const modalId = modalElement.getAttribute(\"id\") || modalElement.getAttribute(\"name\");\r\n\r\n if (!modalId) {\r\n throw new Error(\"Modal must have an id or name attribute\");\r\n }\r\n\r\n // Parse modal children - supports Label, action-row (legacy), and direct text-input (legacy)\r\n const children = Array.from(modalElement.children);\r\n const components: any[] = [];\r\n\r\n for (const element of children) {\r\n const tagName = element.tagName.toUpperCase();\r\n\r\n if (tagName === \"FIELD\") {\r\n // New Label component (type 18) - wraps other modal components\r\n components.push(parseModalField(dbi, dbiName, element));\r\n } else if (tagName === \"ACTION-ROW\") {\r\n // Legacy: Action row with text inputs (deprecated but still supported)\r\n components.push({\r\n type: ComponentType.ActionRow,\r\n components: Array.from(element.children).map((child) => {\r\n return parseModalComponent(dbi, dbiName, child);\r\n })\r\n });\r\n } else if (tagName === \"TEXT-INPUT\") {\r\n // Legacy: Direct text-input auto-wrapped in action row\r\n components.push({\r\n type: ComponentType.ActionRow,\r\n components: [parseTextInput(dbi, dbiName, element)]\r\n });\r\n } else if (tagName === \"TEXT-DISPLAY\") {\r\n // Text display directly in modal (type 10)\r\n components.push({\r\n type: 10, // ComponentType.TextDisplay\r\n content: getCleanTextContent(element)\r\n });\r\n } else {\r\n // Try to parse as a modal-supported component and auto-wrap in Label\r\n const supportedTags = ['STRING-SELECT', 'USER-SELECT', 'ROLE-SELECT', 'MENTIONABLE-SELECT', 'CHANNEL-SELECT', 'FILE-UPLOAD'];\r\n if (supportedTags.includes(tagName)) {\r\n // Auto-wrap in a label for convenience\r\n components.push({\r\n type: 18, // Label\r\n label: element.getAttribute(\"label\") || element.getAttribute(\"placeholder\") || tagName.toLowerCase(),\r\n description: element.getAttribute(\"description\"),\r\n component: parseModalComponent(dbi, dbiName, element)\r\n });\r\n } else {\r\n console.warn(`[DBI-Modal] Unsupported element in modal: ${tagName}. Supported: field, text-input, text-display, string-select, user-select, role-select, mentionable-select, channel-select, file-upload`);\r\n }\r\n }\r\n }\r\n\r\n // Build custom_id for the modal - include ref for state persistence\r\n const customIdParts: any[] = [modalId];\r\n\r\n // Add ref if data has one (for state persistence across modal submit)\r\n // Use ¤ prefix so it gets resolved to actual state object when interaction is received\r\n if (data?.$ref) {\r\n customIdParts.push(`¤${data.$ref}`);\r\n }\r\n\r\n const customId = buildCustomId(dbi, dbiName, customIdParts, ttl, true);\r\n\r\n return {\r\n title,\r\n customId,\r\n components,\r\n modalId, // Store original ID for handler lookup\r\n };\r\n}\r\n\r\n/**\r\n * Parse a Field/Label component for modals (type 18)\r\n * <field label=\"Field Name\" description=\"Optional description\">\r\n * <text-input id=\"field\" />\r\n * </field>\r\n */\r\nfunction parseModalField(dbi: DBI<NamespaceEnums>, dbiName: string, fieldElement: Element) {\r\n const label = fieldElement.getAttribute(\"label\") || \"Label\";\r\n const description = fieldElement.getAttribute(\"description\");\r\n\r\n // Get the child component\r\n const child = fieldElement.children[0];\r\n if (!child) {\r\n throw new Error(\"Field component must have a child component (text-input, string-select, etc.);\");\r\n }\r\n\r\n return {\r\n type: 18, // Label component type\r\n label,\r\n description,\r\n component: parseModalComponent(dbi, dbiName, child)\r\n };\r\n}\r\n\r\n/**\r\n * Parse a component that can be inside a modal Label\r\n */\r\nfunction parseModalComponent(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element): any {\r\n const tagName = element.tagName.toUpperCase();\r\n\r\n switch (tagName) {\r\n case \"TEXT-INPUT\":\r\n return parseTextInput(dbi, dbiName, element);\r\n\r\n case \"STRING-SELECT\":\r\n case \"STRING-SELECT-MENU\":\r\n return parseStringSelectForModal(dbi, dbiName, element);\r\n\r\n case \"USER-SELECT\":\r\n case \"USER-SELECT-MENU\":\r\n return parseAutoSelectForModal(dbi, dbiName, element, 5); // type 5\r\n\r\n case \"ROLE-SELECT\":\r\n case \"ROLE-SELECT-MENU\":\r\n return parseAutoSelectForModal(dbi, dbiName, element, 6); // type 6\r\n\r\n case \"MENTIONABLE-SELECT\":\r\n case \"MENTIONABLE-SELECT-MENU\":\r\n return parseAutoSelectForModal(dbi, dbiName, element, 7); // type 7\r\n\r\n case \"CHANNEL-SELECT\":\r\n case \"CHANNEL-SELECT-MENU\":\r\n return parseAutoSelectForModal(dbi, dbiName, element, 8); // type 8\r\n\r\n case \"FILE-UPLOAD\":\r\n return parseFileUpload(dbi, dbiName, element);\r\n\r\n default:\r\n throw new Error(`Unsupported modal component: ${tagName}. Supported: text-input, string-select, user-select, role-select, mentionable-select, channel-select, file-upload`);\r\n }\r\n}\r\n\r\n/**\r\n * Parse a string select for modal (similar to message but with required field)\r\n */\r\nfunction parseStringSelectForModal(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element) {\r\n const customId = element.getAttribute(\"id\") || element.getAttribute(\"custom-id\") || element.getAttribute(\"name\");\r\n if (!customId) {\r\n throw new Error(\"String select in modal must have an id, custom-id, or name attribute\");\r\n }\r\n\r\n const minValues = parseInt(element.getAttribute(\"min-values\") || \"1\");\r\n const maxValues = parseInt(element.getAttribute(\"max-values\") || \"1\");\r\n const required = element.getAttribute(\"required\") !== \"false\";\r\n\r\n const options = Array.from(element.querySelectorAll(\"option\")).map((option) => ({\r\n label: getCleanTextContent(option) || option.getAttribute(\"label\") || \"Option\",\r\n value: option.getAttribute(\"value\") || getCleanTextContent(option),\r\n description: option.getAttribute(\"description\"),\r\n emoji: option.getAttribute(\"emoji\") ? { name: option.getAttribute(\"emoji\") } : undefined,\r\n default: getAttributeBoolean(option, \"default\")\r\n }));\r\n\r\n return {\r\n type: 3, // String Select\r\n custom_id: customId,\r\n placeholder: element.getAttribute(\"placeholder\"),\r\n min_values: isNaN(minValues) ? 1 : minValues,\r\n max_values: isNaN(maxValues) ? 1 : maxValues,\r\n required,\r\n options\r\n };\r\n}\r\n\r\n/**\r\n * Parse auto-populated select menus for modal (user, role, mentionable, channel)\r\n */\r\nfunction parseAutoSelectForModal(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element, componentType: number) {\r\n const customId = element.getAttribute(\"id\") || element.getAttribute(\"custom-id\") || element.getAttribute(\"name\");\r\n if (!customId) {\r\n throw new Error(`Select menu in modal must have an id, custom-id, or name attribute`);\r\n }\r\n\r\n const minValues = parseInt(element.getAttribute(\"min-values\") || \"1\");\r\n const maxValues = parseInt(element.getAttribute(\"max-values\") || \"1\");\r\n const required = element.getAttribute(\"required\") !== \"false\";\r\n\r\n const result: any = {\r\n type: componentType,\r\n custom_id: customId,\r\n placeholder: element.getAttribute(\"placeholder\"),\r\n min_values: isNaN(minValues) ? 1 : minValues,\r\n max_values: isNaN(maxValues) ? 1 : maxValues,\r\n required\r\n };\r\n\r\n // Channel select can have channel_types filter\r\n if (componentType === 8) {\r\n const channelTypes = element.getAttribute(\"channel-types\");\r\n if (channelTypes) {\r\n result.channel_types = channelTypes.split(\",\").map(t => parseInt(t.trim()));\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse file upload component for modals (type 19)\r\n * <file-upload id=\"attachment\" min-values=\"1\" max-values=\"5\" />\r\n */\r\nfunction parseFileUpload(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element) {\r\n const customId = element.getAttribute(\"id\") || element.getAttribute(\"custom-id\") || element.getAttribute(\"name\");\r\n if (!customId) {\r\n throw new Error(\"File upload must have an id, custom-id, or name attribute\");\r\n }\r\n\r\n const minValues = parseInt(element.getAttribute(\"min-values\") || \"1\");\r\n const maxValues = parseInt(element.getAttribute(\"max-values\") || \"1\");\r\n const required = element.getAttribute(\"required\") !== \"false\";\r\n\r\n return {\r\n type: 19, // File Upload\r\n custom_id: customId,\r\n min_values: isNaN(minValues) ? 1 : minValues,\r\n max_values: isNaN(maxValues) ? 1 : maxValues,\r\n required\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}\r\n\r\nexport interface ParsedComponentsResult {\r\n /** Main components to display (id=\"main\" or no id/type) */\r\n components: any[];\r\n /** Modal definitions keyed by their id */\r\n modals: Map<string, { title: string; customId: string; components: any[]; modalId: string }>;\r\n}\r\n\r\n/**\r\n * Parse HTML with support for multiple <components> elements\r\n * - <components> or <components id=\"main\"> - Main display components\r\n * - <components type=\"modal\" id=\"xxx\"> - Modal definitions\r\n */\r\nexport function parseHTMLComponentsV2Multi(dbi: DBI<NamespaceEnums>, template: string, dbiName: string, { data = {}, ttl = 0 }: any = { data: {}, ttl: 0 }): ParsedComponentsResult {\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 // Only select top-level <components> elements (direct children of body)\r\n // This avoids selecting nested <components> inside <container>, <section>, etc.\r\n const allComponents = [...document.body.children].filter(el => el.tagName === \"COMPONENTS\");\r\n const modals = new Map<string, { title: string; customId: string; components: any[]; modalId: string }>();\r\n let mainComponents: any[] = [];\r\n\r\n for (const componentsEl of allComponents) {\r\n const type = componentsEl.getAttribute(\"type\");\r\n const id = componentsEl.getAttribute(\"id\");\r\n\r\n if (type === \"modal\") {\r\n // This is a modal definition\r\n const modalData = parseModal(dbi, dbiName, componentsEl, { data, ttl });\r\n modals.set(modalData.modalId, modalData);\r\n } else if (!id || id === \"main\") {\r\n // This is the main components (no id, or id=\"main\")\r\n const children = Array.from(componentsEl.children);\r\n mainComponents = children.map((element) => parseElement(dbi, dbiName, element));\r\n }\r\n // Components with other ids are ignored (could be used for other purposes)\r\n }\r\n\r\n if (!mainComponents.length && modals.size === 0) {\r\n throw new Error(\"No components found in the provided HTML template.\");\r\n }\r\n\r\n return {\r\n components: mainComponents,\r\n modals\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\") || element.getAttribute(\"id\") || element.getAttribute(\"custom-id\");\r\n if (!name) throw new Error(`Element must have a name, id, or custom-id attribute to build custom_id.\\n${element.outerHTML}`, {\r\n cause: element.outerHTML\r\n });\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\n/**\r\n * Parse a modal element into Discord Modal format\r\n * Now supports the new Label component structure with various child components:\r\n * - text-input (type 4)\r\n * - string-select (type 3)\r\n * - user-select (type 5)\r\n * - role-select (type 6)\r\n * - mentionable-select (type 7)\r\n * - channel-select (type 8)\r\n * - file-upload (type 19)\r\n * - text-display (type 10)\r\n * \r\n * Example with Label wrapper (recommended):\r\n * <components type=\"modal\" id=\"my-modal\" title=\"My Modal\">\r\n * <label label=\"Your Name\" description=\"Enter your full name\">\r\n * <text-input id=\"name\" style=\"Short\" />\r\n * </label>\r\n * <label label=\"Select Bug Type\">\r\n * <string-select id=\"bug-type\">\r\n * <option value=\"ant\">🐜 Ant</option>\r\n * </string-select>\r\n * </label>\r\n * </components>\r\n * \r\n * Legacy format (still supported but deprecated):\r\n * <components type=\"modal\" id=\"my-modal\" title=\"My Modal\">\r\n * <text-input id=\"name\" label=\"Name\" />\r\n * </components>\r\n */\r\nexport function parseModal(dbi: DBI<NamespaceEnums>, dbiName: string, modalElement: Element, { data = {}, ttl = 0 }: any = {}) {\r\n const title = modalElement.getAttribute(\"title\") || \"Modal\";\r\n const modalId = modalElement.getAttribute(\"id\") || modalElement.getAttribute(\"name\");\r\n\r\n if (!modalId) {\r\n throw new Error(\"Modal must have an id or name attribute\");\r\n }\r\n\r\n // Parse modal children - supports Label, action-row (legacy), and direct text-input (legacy)\r\n const children = Array.from(modalElement.children);\r\n const components: any[] = [];\r\n\r\n for (const element of children) {\r\n const tagName = element.tagName.toUpperCase();\r\n\r\n if (tagName === \"FIELD\") {\r\n // New Label component (type 18) - wraps other modal components\r\n components.push(parseModalField(dbi, dbiName, element));\r\n } else if (tagName === \"ACTION-ROW\") {\r\n // Legacy: Action row with text inputs (deprecated but still supported)\r\n components.push({\r\n type: ComponentType.ActionRow,\r\n components: Array.from(element.children).map((child) => {\r\n return parseModalComponent(dbi, dbiName, child);\r\n })\r\n });\r\n } else if (tagName === \"TEXT-INPUT\") {\r\n // Legacy: Direct text-input auto-wrapped in action row\r\n components.push({\r\n type: ComponentType.ActionRow,\r\n components: [parseTextInput(dbi, dbiName, element)]\r\n });\r\n } else if (tagName === \"TEXT-DISPLAY\") {\r\n // Text display directly in modal (type 10)\r\n components.push({\r\n type: 10, // ComponentType.TextDisplay\r\n content: getCleanTextContent(element)\r\n });\r\n } else {\r\n // Try to parse as a modal-supported component and auto-wrap in Label\r\n const supportedTags = ['STRING-SELECT', 'USER-SELECT', 'ROLE-SELECT', 'MENTIONABLE-SELECT', 'CHANNEL-SELECT', 'FILE-UPLOAD'];\r\n if (supportedTags.includes(tagName)) {\r\n // Auto-wrap in a label for convenience\r\n components.push({\r\n type: 18, // Label\r\n label: element.getAttribute(\"label\") || element.getAttribute(\"placeholder\") || tagName.toLowerCase(),\r\n description: element.getAttribute(\"description\"),\r\n component: parseModalComponent(dbi, dbiName, element)\r\n });\r\n } else {\r\n console.warn(`[DBI-Modal] Unsupported element in modal: ${tagName}. Supported: field, text-input, text-display, string-select, user-select, role-select, mentionable-select, channel-select, file-upload`);\r\n }\r\n }\r\n }\r\n\r\n // Build custom_id for the modal - include ref for state persistence\r\n const customIdParts: any[] = [modalId];\r\n\r\n // Add ref if data has one (for state persistence across modal submit)\r\n // Use ¤ prefix so it gets resolved to actual state object when interaction is received\r\n if (data?.$ref) {\r\n customIdParts.push(`¤${data.$ref}`);\r\n }\r\n\r\n const customId = buildCustomId(dbi, dbiName, customIdParts, ttl, true);\r\n\r\n return {\r\n title,\r\n customId,\r\n components,\r\n modalId, // Store original ID for handler lookup\r\n };\r\n}\r\n\r\n/**\r\n * Parse a Field/Label component for modals (type 18)\r\n * <field label=\"Field Name\" description=\"Optional description\">\r\n * <text-input id=\"field\" />\r\n * </field>\r\n */\r\nfunction parseModalField(dbi: DBI<NamespaceEnums>, dbiName: string, fieldElement: Element) {\r\n const label = fieldElement.getAttribute(\"label\") || \"Label\";\r\n const description = fieldElement.getAttribute(\"description\");\r\n\r\n // Get the child component\r\n const child = fieldElement.children[0];\r\n if (!child) {\r\n throw new Error(\"Field component must have a child component (text-input, string-select, etc.);\");\r\n }\r\n\r\n return {\r\n type: 18, // Label component type\r\n label,\r\n description,\r\n component: parseModalComponent(dbi, dbiName, child)\r\n };\r\n}\r\n\r\n/**\r\n * Parse a component that can be inside a modal Label\r\n */\r\nfunction parseModalComponent(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element): any {\r\n const tagName = element.tagName.toUpperCase();\r\n\r\n switch (tagName) {\r\n case \"TEXT-INPUT\":\r\n return parseTextInput(dbi, dbiName, element);\r\n\r\n case \"STRING-SELECT\":\r\n case \"STRING-SELECT-MENU\":\r\n return parseStringSelectForModal(dbi, dbiName, element);\r\n\r\n case \"USER-SELECT\":\r\n case \"USER-SELECT-MENU\":\r\n return parseAutoSelectForModal(dbi, dbiName, element, 5); // type 5\r\n\r\n case \"ROLE-SELECT\":\r\n case \"ROLE-SELECT-MENU\":\r\n return parseAutoSelectForModal(dbi, dbiName, element, 6); // type 6\r\n\r\n case \"MENTIONABLE-SELECT\":\r\n case \"MENTIONABLE-SELECT-MENU\":\r\n return parseAutoSelectForModal(dbi, dbiName, element, 7); // type 7\r\n\r\n case \"CHANNEL-SELECT\":\r\n case \"CHANNEL-SELECT-MENU\":\r\n return parseAutoSelectForModal(dbi, dbiName, element, 8); // type 8\r\n\r\n case \"FILE-UPLOAD\":\r\n return parseFileUpload(dbi, dbiName, element);\r\n\r\n default:\r\n throw new Error(`Unsupported modal component: ${tagName}. Supported: text-input, string-select, user-select, role-select, mentionable-select, channel-select, file-upload`);\r\n }\r\n}\r\n\r\n/**\r\n * Parse a string select for modal (similar to message but with required field)\r\n */\r\nfunction parseStringSelectForModal(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element) {\r\n const customId = element.getAttribute(\"id\") || element.getAttribute(\"custom-id\") || element.getAttribute(\"name\");\r\n if (!customId) {\r\n throw new Error(\"String select in modal must have an id, custom-id, or name attribute\");\r\n }\r\n\r\n const minValues = parseInt(element.getAttribute(\"min-values\") || \"1\");\r\n const maxValues = parseInt(element.getAttribute(\"max-values\") || \"1\");\r\n const required = element.getAttribute(\"required\") !== \"false\";\r\n\r\n const options = Array.from(element.querySelectorAll(\"option\")).map((option) => ({\r\n label: getCleanTextContent(option) || option.getAttribute(\"label\") || \"Option\",\r\n value: option.getAttribute(\"value\") || getCleanTextContent(option),\r\n description: option.getAttribute(\"description\"),\r\n emoji: option.getAttribute(\"emoji\") ? { name: option.getAttribute(\"emoji\") } : undefined,\r\n default: getAttributeBoolean(option, \"default\")\r\n }));\r\n\r\n return {\r\n type: 3, // String Select\r\n custom_id: customId,\r\n placeholder: element.getAttribute(\"placeholder\"),\r\n min_values: isNaN(minValues) ? 1 : minValues,\r\n max_values: isNaN(maxValues) ? 1 : maxValues,\r\n required,\r\n options\r\n };\r\n}\r\n\r\n/**\r\n * Parse auto-populated select menus for modal (user, role, mentionable, channel)\r\n */\r\nfunction parseAutoSelectForModal(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element, componentType: number) {\r\n const customId = element.getAttribute(\"id\") || element.getAttribute(\"custom-id\") || element.getAttribute(\"name\");\r\n if (!customId) {\r\n throw new Error(`Select menu in modal must have an id, custom-id, or name attribute`);\r\n }\r\n\r\n const minValues = parseInt(element.getAttribute(\"min-values\") || \"1\");\r\n const maxValues = parseInt(element.getAttribute(\"max-values\") || \"1\");\r\n const required = element.getAttribute(\"required\") !== \"false\";\r\n\r\n const result: any = {\r\n type: componentType,\r\n custom_id: customId,\r\n placeholder: element.getAttribute(\"placeholder\"),\r\n min_values: isNaN(minValues) ? 1 : minValues,\r\n max_values: isNaN(maxValues) ? 1 : maxValues,\r\n required\r\n };\r\n\r\n // Channel select can have channel_types filter\r\n if (componentType === 8) {\r\n const channelTypes = element.getAttribute(\"channel-types\");\r\n if (channelTypes) {\r\n result.channel_types = channelTypes.split(\",\").map(t => parseInt(t.trim()));\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse file upload component for modals (type 19)\r\n * <file-upload id=\"attachment\" min-values=\"1\" max-values=\"5\" />\r\n */\r\nfunction parseFileUpload(dbi: DBI<NamespaceEnums>, dbiName: string, element: Element) {\r\n const customId = element.getAttribute(\"id\") || element.getAttribute(\"custom-id\") || element.getAttribute(\"name\");\r\n if (!customId) {\r\n throw new Error(\"File upload must have an id, custom-id, or name attribute\");\r\n }\r\n\r\n const minValues = parseInt(element.getAttribute(\"min-values\") || \"1\");\r\n const maxValues = parseInt(element.getAttribute(\"max-values\") || \"1\");\r\n const required = element.getAttribute(\"required\") !== \"false\";\r\n\r\n return {\r\n type: 19, // File Upload\r\n custom_id: customId,\r\n min_values: isNaN(minValues) ? 1 : minValues,\r\n max_values: isNaN(maxValues) ? 1 : maxValues,\r\n required\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}\r\n\r\nexport interface ParsedComponentsResult {\r\n /** Main components to display (id=\"main\" or no id/type) */\r\n components: any[];\r\n /** Modal definitions keyed by their id */\r\n modals: Map<string, { title: string; customId: string; components: any[]; modalId: string }>;\r\n}\r\n\r\n/**\r\n * Parse HTML with support for multiple <components> elements\r\n * - <components> or <components id=\"main\"> - Main display components\r\n * - <components type=\"modal\" id=\"xxx\"> - Modal definitions\r\n */\r\nexport function parseHTMLComponentsV2Multi(dbi: DBI<NamespaceEnums>, template: string, dbiName: string, { data = {}, ttl = 0 }: any = { data: {}, ttl: 0 }): ParsedComponentsResult {\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 // Only select top-level <components> elements (direct children of body)\r\n // This avoids selecting nested <components> inside <container>, <section>, etc.\r\n const allComponents = [...document.body.children].filter(el => el.tagName === \"COMPONENTS\");\r\n const modals = new Map<string, { title: string; customId: string; components: any[]; modalId: string }>();\r\n let mainComponents: any[] = [];\r\n\r\n for (const componentsEl of allComponents) {\r\n const type = componentsEl.getAttribute(\"type\");\r\n const id = componentsEl.getAttribute(\"id\");\r\n\r\n if (type === \"modal\") {\r\n // This is a modal definition\r\n const modalData = parseModal(dbi, dbiName, componentsEl, { data, ttl });\r\n modals.set(modalData.modalId, modalData);\r\n } else if (!id || id === \"main\") {\r\n // This is the main components (no id, or id=\"main\")\r\n const children = Array.from(componentsEl.children);\r\n mainComponents = children.map((element) => parseElement(dbi, dbiName, element));\r\n }\r\n // Components with other ids are ignored (could be used for other purposes)\r\n }\r\n\r\n if (!mainComponents.length && modals.size === 0) {\r\n throw new Error(\"No components found in the provided HTML template.\");\r\n }\r\n\r\n return {\r\n components: mainComponents,\r\n modals\r\n };\r\n}"]}
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "tslib": "^2.6.3"
16
16
  },
17
17
  "name": "@mostfeatured/dbi",
18
- "version": "0.2.23",
18
+ "version": "0.2.25",
19
19
  "main": "dist/src/index.js",
20
20
  "types": "dist/src/index.d.ts",
21
21
  "typesVersions": {