@svintsow/discord-components 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/index.d.mts +289 -0
- package/dist/index.d.ts +289 -0
- package/dist/index.js +923 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +868 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/enums/ComponentType.ts","../src/constants/limits.ts","../src/errors/ValidationError.ts","../src/errors/InvalidComponentError.ts","../src/errors/InvalidURLException.ts","../src/errors/ComponentLimitError.ts","../src/builders/base/ComponentBuilder.ts","../src/builders/base/AccessoryBuilder.ts","../src/validation/validators/URLValidator.ts","../src/utils/urlUtils.ts","../src/utils/stringUtils.ts","../src/utils/arrayUtils.ts","../src/utils/objectUtils.ts","../src/validation/validators/StringValidator.ts","../src/validation/validators/ComponentValidator.ts","../src/validation/rules/limitRules.ts","../src/validation/rules/nestingRules.ts","../src/components/parser/ComponentParser.ts","../src/builders/container/ContainerBuilder.ts","../src/builders/section/SectionBuilder.ts","../src/builders/textDisplay/TextDisplayBuilder.ts","../src/builders/thumbnail/ThumbnailBuilder.ts","../src/builders/mediaGallery/MediaGalleryItemBuilder.ts","../src/builders/mediaGallery/MediaGalleryBuilder.ts","../src/builders/separator/SeparatorBuilder.ts","../src/builders/file/FileBuilder.ts","../src/builders/label/LabelBuilder.ts","../src/helpers/componentHelper.ts","../src/internal/registry.ts"],"sourcesContent":["export enum ComponentType {\r\n Container = 1,\r\n Section = 2,\r\n TextDisplay = 3,\r\n Thumbnail = 4,\r\n MediaGallery = 5,\r\n MediaGalleryItem = 6,\r\n Separator = 7,\r\n File = 8,\r\n Label = 9,\r\n}","export const Limits = {\r\n MAX_COMPONENTS_PER_CONTAINER: 5,\r\n MAX_TEXT_LENGTH: 2000,\r\n MAX_DESCRIPTION_LENGTH: 2000,\r\n MAX_LABEL_LENGTH: 80,\r\n MAX_FILENAME_LENGTH: 255,\r\n MAX_GALLERY_ITEMS: 10,\r\n MAX_URL_LENGTH: 2048,\r\n} as const;","export class ValidationError extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = 'ValidationError';\r\n }\r\n}","export class InvalidComponentError extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = 'InvalidComponentError';\r\n }\r\n}","export class InvalidURLException extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = 'InvalidURLException';\r\n }\r\n}","export class ComponentLimitError extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = 'ComponentLimitError';\r\n }\r\n}","import { IComponentBuilder } from '../../interfaces';\r\n\r\nexport abstract class ComponentBuilder implements IComponentBuilder {\r\n abstract toJSON(): Record<string, any>;\r\n\r\n clone(): this {\r\n const data = this.toJSON();\r\n const Constructor = this.constructor as any;\r\n const instance = new Constructor();\r\n return instance.fromJSON(data);\r\n }\r\n\r\n static from<T extends ComponentBuilder>(this: new (...args: any[]) => T, data: any): T {\r\n const instance = new this();\r\n return instance.fromJSON(data);\r\n }\r\n\r\n protected fromJSON(data: any): this {\r\n return this;\r\n }\r\n}","import { ComponentBuilder } from './ComponentBuilder';\r\nimport { ComponentType } from '../../enums';\r\n\r\nexport abstract class AccessoryBuilder extends ComponentBuilder {\r\n protected type!: ComponentType;\r\n protected style?: string;\r\n\r\n setStyle(style: string): this {\r\n this.style = style;\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n const data: Record<string, any> = {\r\n type: this.type,\r\n };\r\n\r\n if (this.style) {\r\n data.style = this.style;\r\n }\r\n\r\n return data;\r\n }\r\n}","import { InvalidURLException } from '../../errors';\r\n\r\nexport class URLValidator {\r\n static validate(url: string): void {\r\n try {\r\n // Allow both http and https\r\n new URL(url);\r\n } catch {\r\n throw new InvalidURLException(`Invalid URL: ${url}`);\r\n }\r\n }\r\n\r\n static validateOptional(url?: string): void {\r\n if (url) {\r\n this.validate(url);\r\n }\r\n }\r\n}","export class UrlUtils {\r\n static isValidUrl(url: string): boolean {\r\n try {\r\n new URL(url);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n static normalizeUrl(url: string): string {\r\n if (!this.isValidUrl(url)) {\r\n throw new Error('Invalid URL');\r\n }\r\n return url.trim();\r\n }\r\n}","export class StringUtils {\r\n static isString(value: any): value is string {\r\n return typeof value === 'string';\r\n }\r\n\r\n static truncate(text: string, maxLength: number): string {\r\n if (text.length <= maxLength) return text;\r\n return text.slice(0, maxLength - 3) + '...';\r\n }\r\n\r\n static validateLength(text: string, maxLength: number, field: string): void {\r\n if (text && text.length > maxLength) {\r\n throw new Error(`${field} exceeds maximum length of ${maxLength}`);\r\n }\r\n }\r\n}","export class ArrayUtils {\r\n static isValidArray<T>(arr: any): arr is T[] {\r\n return Array.isArray(arr);\r\n }\r\n\r\n static ensureArray<T>(items: T | T[]): T[] {\r\n return Array.isArray(items) ? items : [items];\r\n }\r\n\r\n static splice<T>(\r\n arr: T[],\r\n index: number,\r\n deleteCount: number,\r\n ...items: T[]\r\n ): T[] {\r\n const result = [...arr];\r\n result.splice(index, deleteCount, ...items);\r\n return result;\r\n }\r\n}","export class ObjectUtils {\r\n static deepClone<T>(obj: T): T {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n static hasOwnProperty(obj: any, prop: string): boolean {\r\n return Object.prototype.hasOwnProperty.call(obj, prop);\r\n }\r\n\r\n static mergeDeep<T extends Record<string, any>>(\r\n target: T,\r\n source: Partial<T>\r\n ): T {\r\n const result = { ...target };\r\n for (const key in source) {\r\n if (this.hasOwnProperty(source, key)) {\r\n result[key] = source[key] as any;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { ValidationError } from '../../errors';\r\nimport { StringUtils } from '../../utils';\r\n\r\nexport class StringValidator {\r\n static validate(value: any, field: string): void {\r\n if (!StringUtils.isString(value)) {\r\n throw new ValidationError(`${field} must be a string`);\r\n }\r\n }\r\n\r\n static validateLength(\r\n value: string,\r\n maxLength: number,\r\n field: string\r\n ): void {\r\n if (value && value.length > maxLength) {\r\n throw new ValidationError(\r\n `${field} must be at most ${maxLength} characters, got ${value.length}`\r\n );\r\n }\r\n }\r\n\r\n static validateOptional(value?: any, field?: string): void {\r\n if (value !== undefined && value !== null) {\r\n this.validate(value, field || 'Value');\r\n }\r\n }\r\n}","import { ComponentType } from '../../enums';\r\nimport { ValidationError } from '../../errors';\r\n\r\nexport class ComponentValidator {\r\n static validateType(type: ComponentType): void {\r\n if (!Object.values(ComponentType).includes(type)) {\r\n throw new ValidationError(`Invalid component type: ${type}`);\r\n }\r\n }\r\n\r\n static validateComponentStructure(obj: any): void {\r\n if (!obj || typeof obj !== 'object') {\r\n throw new ValidationError('Component must be an object');\r\n }\r\n\r\n if (!obj.type) {\r\n throw new ValidationError('Component must have a type');\r\n }\r\n\r\n this.validateType(obj.type);\r\n }\r\n}","import { ComponentLimitError } from '../../errors';\r\nimport { Limits } from '../../constants';\r\n\r\nexport class LimitRules {\r\n static validateComponentCount(count: number): void {\r\n if (count > Limits.MAX_COMPONENTS_PER_CONTAINER) {\r\n throw new ComponentLimitError(\r\n `Maximum ${Limits.MAX_COMPONENTS_PER_CONTAINER} components allowed, got ${count}`\r\n );\r\n }\r\n }\r\n\r\n static validateGalleryItems(count: number): void {\r\n if (count > Limits.MAX_GALLERY_ITEMS) {\r\n throw new ComponentLimitError(\r\n `Maximum ${Limits.MAX_GALLERY_ITEMS} gallery items allowed, got ${count}`\r\n );\r\n }\r\n }\r\n}","import { InvalidComponentError } from '../../errors';\r\nimport { ComponentType } from '../../enums';\r\n\r\nexport class NestingRules {\r\n static validateContainerNesting(componentType: ComponentType): void {\r\n const allowedTypes = [\r\n ComponentType.Container,\r\n ComponentType.Section,\r\n ComponentType.TextDisplay,\r\n ComponentType.Thumbnail,\r\n ComponentType.MediaGallery,\r\n ComponentType.Separator,\r\n ComponentType.File,\r\n ComponentType.Label,\r\n ];\r\n\r\n if (!allowedTypes.includes(componentType)) {\r\n throw new InvalidComponentError(\r\n `Component type ${componentType} cannot be nested in Container`\r\n );\r\n }\r\n }\r\n\r\n static validateSectionNesting(componentType: ComponentType): void {\r\n const allowedTypes = [\r\n ComponentType.TextDisplay,\r\n ComponentType.Thumbnail,\r\n ComponentType.MediaGallery,\r\n ComponentType.File,\r\n ComponentType.Label,\r\n ComponentType.Separator,\r\n ];\r\n\r\n if (!allowedTypes.includes(componentType)) {\r\n throw new InvalidComponentError(\r\n `Component type ${componentType} cannot be nested in Section`\r\n );\r\n }\r\n }\r\n}","import { ComponentBuilder } from '../../builders/base';\r\nimport { ComponentType } from '../../enums';\r\nimport { ValidationError } from '../../errors';\r\n\r\nimport {\r\n ContainerBuilder,\r\n SectionBuilder,\r\n TextDisplayBuilder,\r\n ThumbnailBuilder,\r\n MediaGalleryBuilder,\r\n MediaGalleryItemBuilder,\r\n SeparatorBuilder,\r\n FileBuilder,\r\n LabelBuilder,\r\n} from '../../builders';\r\n\r\nexport class ComponentParser {\r\n static parse(data: any): ComponentBuilder {\r\n if (!data || typeof data !== 'object') {\r\n throw new ValidationError('Invalid component data');\r\n }\r\n\r\n if (!data.type) {\r\n throw new ValidationError('Component data must have type');\r\n }\r\n\r\n switch (data.type) {\r\n case ComponentType.Container:\r\n return ContainerBuilder.from(data);\r\n case ComponentType.Section:\r\n return SectionBuilder.from(data);\r\n case ComponentType.TextDisplay:\r\n return TextDisplayBuilder.from(data);\r\n case ComponentType.Thumbnail:\r\n return ThumbnailBuilder.from(data);\r\n case ComponentType.MediaGallery:\r\n return MediaGalleryBuilder.from(data);\r\n case ComponentType.MediaGalleryItem:\r\n return MediaGalleryItemBuilder.from(data);\r\n case ComponentType.Separator:\r\n return SeparatorBuilder.from(data);\r\n case ComponentType.File:\r\n return FileBuilder.from(data);\r\n case ComponentType.Label:\r\n return LabelBuilder.from(data);\r\n default:\r\n throw new ValidationError(`Unknown component type: ${data.type}`);\r\n }\r\n }\r\n\r\n static parseMany(dataArray: any[]): ComponentBuilder[] {\r\n return dataArray.map(data => this.parse(data));\r\n }\r\n}","import { ComponentBuilder } from '../base';\r\nimport { ComponentType } from '../../enums';\r\nimport { Limits } from '../../constants';\r\nimport { LimitRules, NestingRules } from '../../validation';\r\nimport { ArrayUtils } from '../../utils';\r\nimport { ValidationError } from '../../errors';\r\nimport { ComponentParser } from '../../components/parser';\r\n\r\nexport class ContainerBuilder extends ComponentBuilder {\r\n private components: ComponentBuilder[] = [];\r\n private type: ComponentType = ComponentType.Container;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n addComponents(...components: ComponentBuilder[]): this {\r\n for (const component of components) {\r\n // Allow Container to be nested inside Container\r\n const componentType = (component as any).type || (component.constructor as any).type;\r\n if (componentType !== ComponentType.Container) {\r\n NestingRules.validateContainerNesting(componentType);\r\n }\r\n }\r\n\r\n const newCount = this.components.length + components.length;\r\n LimitRules.validateComponentCount(newCount);\r\n\r\n this.components.push(...components);\r\n return this;\r\n }\r\n\r\n spliceComponents(\r\n index: number,\r\n deleteCount: number,\r\n ...components: ComponentBuilder[]\r\n ): this {\r\n if (index < 0 || index > this.components.length) {\r\n throw new ValidationError(`Invalid index: ${index}`);\r\n }\r\n\r\n for (const component of components) {\r\n const componentType = (component as any).type || (component.constructor as any).type;\r\n if (componentType !== ComponentType.Container) {\r\n NestingRules.validateContainerNesting(componentType);\r\n }\r\n }\r\n\r\n const newCount = this.components.length - deleteCount + components.length;\r\n LimitRules.validateComponentCount(newCount);\r\n\r\n this.components = ArrayUtils.splice(\r\n this.components,\r\n index,\r\n deleteCount,\r\n ...components\r\n );\r\n\r\n return this;\r\n }\r\n\r\n clearComponents(): this {\r\n this.components = [];\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n return {\r\n type: this.type,\r\n components: this.components.map(comp => comp.toJSON()),\r\n };\r\n }\r\n\r\n protected fromJSON(data: any): this {\r\n if (!data.components || !Array.isArray(data.components)) {\r\n throw new ValidationError('Container data must have components array');\r\n }\r\n\r\n this.components = data.components.map((compData: any) => {\r\n return ComponentParser.parse(compData);\r\n });\r\n\r\n return this;\r\n }\r\n\r\n clone(): this {\r\n const cloned = new ContainerBuilder();\r\n cloned.components = this.components.map(comp => comp.clone());\r\n return cloned as this;\r\n }\r\n}","import { ComponentBuilder, AccessoryBuilder } from '../base';\r\nimport { ComponentType } from '../../enums';\r\nimport { NestingRules } from '../../validation';\r\nimport { ArrayUtils } from '../../utils';\r\nimport { ValidationError } from '../../errors';\r\nimport { ComponentParser } from '../../components/parser';\r\n\r\nexport class SectionBuilder extends ComponentBuilder {\r\n private texts: ComponentBuilder[] = [];\r\n private accessory: AccessoryBuilder | null = null;\r\n\r\n constructor() {\r\n super();\r\n this.type = ComponentType.Section;\r\n }\r\n\r\n addText(...textComponents: ComponentBuilder[]): this {\r\n for (const component of textComponents) {\r\n NestingRules.validateSectionNesting((component as any).type);\r\n }\r\n\r\n this.texts.push(...textComponents);\r\n return this;\r\n }\r\n\r\n setAccessory(accessory: AccessoryBuilder): this {\r\n this.accessory = accessory;\r\n return this;\r\n }\r\n\r\n clearAccessory(): this {\r\n this.accessory = null;\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n const data: Record<string, any> = {\r\n type: this.type,\r\n texts: this.texts.map(text => text.toJSON()),\r\n };\r\n\r\n if (this.accessory) {\r\n data.accessory = this.accessory.toJSON();\r\n }\r\n\r\n return data;\r\n }\r\n\r\nprotected fromJSON(data: any): this {\r\n if (!data.texts || !Array.isArray(data.texts)) {\r\n throw new ValidationError('Section data must have texts array');\r\n }\r\n\r\n this.texts = data.texts.map((textData: any) => {\r\n return ComponentParser.parse(textData);\r\n });\r\n\r\n if (data.accessory) {\r\n // Use ComponentParser for accessory too\r\n const parsed = ComponentParser.parse(data.accessory);\r\n this.accessory = parsed as unknown as AccessoryBuilder;\r\n }\r\n\r\n return this;\r\n}\r\n\r\n clone(): this {\r\n const cloned = new SectionBuilder();\r\n cloned.texts = this.texts.map(text => text.clone());\r\n if (this.accessory) {\r\n cloned.accessory = this.accessory.clone() as AccessoryBuilder;\r\n }\r\n return cloned as this;\r\n }\r\n\r\n private type!: ComponentType;\r\n}","import { ComponentBuilder } from '../base';\r\nimport { ComponentType } from '../../enums';\r\nimport { Limits } from '../../constants';\r\nimport { StringValidator } from '../../validation';\r\nimport { ValidationError } from '../../errors';\r\n\r\nexport class TextDisplayBuilder extends ComponentBuilder {\r\n private content: string = '';\r\n\r\n constructor() {\r\n super();\r\n this.type = ComponentType.TextDisplay;\r\n }\r\n\r\n setContent(text: string): this {\r\n StringValidator.validate(text, 'Content');\r\n StringValidator.validateLength(text, Limits.MAX_TEXT_LENGTH, 'Content');\r\n this.content = text;\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n if (!this.content) {\r\n throw new ValidationError('TextDisplay must have content');\r\n }\r\n\r\n return {\r\n type: this.type,\r\n content: this.content,\r\n };\r\n }\r\n\r\n protected fromJSON(data: any): this {\r\n if (!data.content) {\r\n throw new ValidationError('TextDisplay data must have content');\r\n }\r\n\r\n return this.setContent(data.content);\r\n }\r\n\r\n clone(): this {\r\n const cloned = new TextDisplayBuilder();\r\n cloned.content = this.content;\r\n return cloned as this;\r\n }\r\n\r\n private type!: ComponentType;\r\n}","import { ComponentBuilder } from '../base';\r\nimport { ComponentType } from '../../enums';\r\nimport { Limits } from '../../constants';\r\nimport { URLValidator, StringValidator } from '../../validation';\r\nimport { ValidationError } from '../../errors';\r\n\r\nexport class ThumbnailBuilder extends ComponentBuilder { // Не extends AccessoryBuilder\r\n private url: string = '';\r\n private description: string = '';\r\n private spoiler: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n (this as any).type = ComponentType.Thumbnail;\r\n }\r\n\r\n setURL(url: string): this {\r\n URLValidator.validate(url);\r\n this.url = url;\r\n return this;\r\n }\r\n\r\n setDescription(text: string): this {\r\n StringValidator.validate(text, 'Description');\r\n StringValidator.validateLength(\r\n text,\r\n Limits.MAX_DESCRIPTION_LENGTH,\r\n 'Description'\r\n );\r\n this.description = text;\r\n return this;\r\n }\r\n\r\n setSpoiler(spoiler: boolean): this {\r\n this.spoiler = spoiler;\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n if (!this.url) {\r\n throw new ValidationError('Thumbnail must have URL');\r\n }\r\n\r\n const data: Record<string, any> = {\r\n type: this.type,\r\n url: this.url,\r\n };\r\n\r\n if (this.description) {\r\n data.description = this.description;\r\n }\r\n\r\n if (this.spoiler) {\r\n data.spoiler = this.spoiler;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n protected fromJSON(data: any): this {\r\n if (!data.url) {\r\n throw new ValidationError('Thumbnail data must have URL');\r\n }\r\n\r\n this.setURL(data.url);\r\n if (data.description) {\r\n this.setDescription(data.description);\r\n }\r\n if (data.spoiler !== undefined) {\r\n this.setSpoiler(data.spoiler);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n clone(): this {\r\n const cloned = new ThumbnailBuilder();\r\n cloned.url = this.url;\r\n cloned.description = this.description;\r\n cloned.spoiler = this.spoiler;\r\n return cloned as this;\r\n }\r\n\r\n private type!: ComponentType;\r\n}","import { ComponentBuilder } from '../base';\r\nimport { ComponentType } from '../../enums';\r\nimport { Limits } from '../../constants';\r\nimport { URLValidator, StringValidator } from '../../validation';\r\nimport { ValidationError } from '../../errors';\r\n\r\nexport class MediaGalleryItemBuilder extends ComponentBuilder {\r\n private url: string = '';\r\n private description: string = '';\r\n private spoiler: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this.type = ComponentType.MediaGalleryItem;\r\n }\r\n\r\n setURL(url: string): this {\r\n URLValidator.validate(url);\r\n this.url = url;\r\n return this;\r\n }\r\n\r\n setDescription(text: string): this {\r\n StringValidator.validate(text, 'Description');\r\n StringValidator.validateLength(\r\n text,\r\n Limits.MAX_DESCRIPTION_LENGTH,\r\n 'Description'\r\n );\r\n this.description = text;\r\n return this;\r\n }\r\n\r\n setSpoiler(spoiler: boolean): this {\r\n this.spoiler = spoiler;\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n if (!this.url) {\r\n throw new ValidationError('MediaGalleryItem must have URL');\r\n }\r\n\r\n const data: Record<string, any> = {\r\n type: this.type,\r\n url: this.url,\r\n };\r\n\r\n if (this.description) {\r\n data.description = this.description;\r\n }\r\n\r\n if (this.spoiler) {\r\n data.spoiler = this.spoiler;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n protected fromJSON(data: any): this {\r\n if (!data.url) {\r\n throw new ValidationError('MediaGalleryItem data must have URL');\r\n }\r\n\r\n this.setURL(data.url);\r\n if (data.description) {\r\n this.setDescription(data.description);\r\n }\r\n if (data.spoiler !== undefined) {\r\n this.setSpoiler(data.spoiler);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n clone(): this {\r\n const cloned = new MediaGalleryItemBuilder();\r\n cloned.url = this.url;\r\n cloned.description = this.description;\r\n cloned.spoiler = this.spoiler;\r\n return cloned as this;\r\n }\r\n\r\n private type!: ComponentType;\r\n}","import { ComponentBuilder } from '../base';\r\nimport { ComponentType } from '../../enums';\r\nimport { MediaGalleryItemBuilder } from './MediaGalleryItemBuilder';\r\nimport { LimitRules } from '../../validation';\r\nimport { ArrayUtils } from '../../utils';\r\nimport { ValidationError } from '../../errors';\r\n\r\nexport class MediaGalleryBuilder extends ComponentBuilder {\r\n private items: MediaGalleryItemBuilder[] = [];\r\n\r\n constructor() {\r\n super();\r\n this.type = ComponentType.MediaGallery;\r\n }\r\n\r\n addItems(...items: MediaGalleryItemBuilder[]): this {\r\n const newCount = this.items.length + items.length;\r\n LimitRules.validateGalleryItems(newCount);\r\n\r\n this.items.push(...items);\r\n return this;\r\n }\r\n\r\n spliceItems(\r\n index: number,\r\n deleteCount: number,\r\n ...items: MediaGalleryItemBuilder[]\r\n ): this {\r\n if (index < 0 || index > this.items.length) {\r\n throw new ValidationError(`Invalid index: ${index}`);\r\n }\r\n\r\n const newCount = this.items.length - deleteCount + items.length;\r\n LimitRules.validateGalleryItems(newCount);\r\n\r\n this.items = ArrayUtils.splice(this.items, index, deleteCount, ...items);\r\n return this;\r\n }\r\n\r\n clearItems(): this {\r\n this.items = [];\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n return {\r\n type: this.type,\r\n items: this.items.map(item => item.toJSON()),\r\n };\r\n }\r\n\r\n protected fromJSON(data: any): this {\r\n if (!data.items || !Array.isArray(data.items)) {\r\n throw new ValidationError('MediaGallery data must have items array');\r\n }\r\n\r\n this.items = data.items.map((itemData: any) => {\r\n return MediaGalleryItemBuilder.from(itemData);\r\n });\r\n\r\n return this;\r\n }\r\n\r\n clone(): this {\r\n const cloned = new MediaGalleryBuilder();\r\n cloned.items = this.items.map(item => item.clone() as MediaGalleryItemBuilder);\r\n return cloned as this;\r\n }\r\n\r\n private type!: ComponentType;\r\n}","import { ComponentBuilder } from '../base';\r\nimport { ComponentType } from '../../enums';\r\nimport { ValidationError } from '../../errors';\r\n\r\nexport class SeparatorBuilder extends ComponentBuilder {\r\n private spacing: number = 8;\r\n private divider: boolean = true;\r\n\r\n constructor() {\r\n super();\r\n this.type = ComponentType.Separator;\r\n }\r\n\r\n setSpacing(spacing: number): this {\r\n if (spacing < 0 || spacing > 32) {\r\n throw new ValidationError('Spacing must be between 0 and 32');\r\n }\r\n this.spacing = spacing;\r\n return this;\r\n }\r\n\r\n setDivider(divider: boolean): this {\r\n this.divider = divider;\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n const data: Record<string, any> = {\r\n type: this.type,\r\n spacing: this.spacing,\r\n };\r\n\r\n if (!this.divider) {\r\n data.divider = this.divider;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n protected fromJSON(data: any): this {\r\n if (data.spacing !== undefined) {\r\n this.setSpacing(data.spacing);\r\n }\r\n if (data.divider !== undefined) {\r\n this.setDivider(data.divider);\r\n }\r\n return this;\r\n }\r\n\r\n clone(): this {\r\n const cloned = new SeparatorBuilder();\r\n cloned.spacing = this.spacing;\r\n cloned.divider = this.divider;\r\n return cloned as this;\r\n }\r\n\r\n private type!: ComponentType;\r\n}","import { ComponentBuilder } from '../base';\r\nimport { ComponentType } from '../../enums';\r\nimport { Limits } from '../../constants';\r\nimport { URLValidator, StringValidator } from '../../validation';\r\nimport { ValidationError } from '../../errors';\r\n\r\nexport class FileBuilder extends ComponentBuilder {\r\n private url: string = '';\r\n private filename: string = '';\r\n private description: string = '';\r\n\r\n constructor() {\r\n super();\r\n this.type = ComponentType.File;\r\n }\r\n\r\n setURL(url: string): this {\r\n URLValidator.validate(url);\r\n this.url = url;\r\n return this;\r\n }\r\n\r\n setFilename(name: string): this {\r\n StringValidator.validate(name, 'Filename');\r\n StringValidator.validateLength(name, Limits.MAX_FILENAME_LENGTH, 'Filename');\r\n this.filename = name;\r\n return this;\r\n }\r\n\r\n setDescription(text: string): this {\r\n StringValidator.validate(text, 'Description');\r\n StringValidator.validateLength(\r\n text,\r\n Limits.MAX_DESCRIPTION_LENGTH,\r\n 'Description'\r\n );\r\n this.description = text;\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n if (!this.url) {\r\n throw new ValidationError('File must have URL');\r\n }\r\n\r\n if (!this.filename) {\r\n throw new ValidationError('File must have filename');\r\n }\r\n\r\n const data: Record<string, any> = {\r\n type: this.type,\r\n url: this.url,\r\n filename: this.filename,\r\n };\r\n\r\n if (this.description) {\r\n data.description = this.description;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n protected fromJSON(data: any): this {\r\n if (!data.url || !data.filename) {\r\n throw new ValidationError('File data must have URL and filename');\r\n }\r\n\r\n this.setURL(data.url);\r\n this.setFilename(data.filename);\r\n if (data.description) {\r\n this.setDescription(data.description);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n clone(): this {\r\n const cloned = new FileBuilder();\r\n cloned.url = this.url;\r\n cloned.filename = this.filename;\r\n cloned.description = this.description;\r\n return cloned as this;\r\n }\r\n\r\n private type!: ComponentType;\r\n}","import { ComponentBuilder } from '../base';\r\nimport { ComponentType } from '../../enums';\r\nimport { Limits } from '../../constants';\r\nimport { StringValidator } from '../../validation';\r\nimport { ValidationError } from '../../errors';\r\n\r\nexport class LabelBuilder extends ComponentBuilder {\r\n private label: string = '';\r\n private description: string = '';\r\n\r\n constructor() {\r\n super();\r\n this.type = ComponentType.Label;\r\n }\r\n\r\n setLabel(text: string): this {\r\n StringValidator.validate(text, 'Label');\r\n StringValidator.validateLength(text, Limits.MAX_LABEL_LENGTH, 'Label');\r\n this.label = text;\r\n return this;\r\n }\r\n\r\n setDescription(text: string): this {\r\n StringValidator.validate(text, 'Description');\r\n StringValidator.validateLength(\r\n text,\r\n Limits.MAX_DESCRIPTION_LENGTH,\r\n 'Description'\r\n );\r\n this.description = text;\r\n return this;\r\n }\r\n\r\n toJSON(): Record<string, any> {\r\n if (!this.label) {\r\n throw new ValidationError('Label must have label text');\r\n }\r\n\r\n const data: Record<string, any> = {\r\n type: this.type,\r\n label: this.label,\r\n };\r\n\r\n if (this.description) {\r\n data.description = this.description;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n protected fromJSON(data: any): this {\r\n if (!data.label) {\r\n throw new ValidationError('Label data must have label');\r\n }\r\n\r\n this.setLabel(data.label);\r\n if (data.description) {\r\n this.setDescription(data.description);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n clone(): this {\r\n const cloned = new LabelBuilder();\r\n cloned.label = this.label;\r\n cloned.description = this.description;\r\n return cloned as this;\r\n }\r\n\r\n private type!: ComponentType;\r\n}","import { ComponentBuilder } from '../builders/base';\r\nimport { ContainerBuilder } from '../builders/container';\r\nimport { SectionBuilder } from '../builders/section';\r\nimport { TextDisplayBuilder } from '../builders/textDisplay';\r\n\r\nexport class ComponentHelper {\r\n static createTextSection(text: string): SectionBuilder {\r\n return new SectionBuilder().addText(\r\n new TextDisplayBuilder().setContent(text)\r\n );\r\n }\r\n\r\n static createContainerFrom(...components: ComponentBuilder[]): ContainerBuilder {\r\n return new ContainerBuilder().addComponents(...components);\r\n }\r\n}","import { ComponentBuilder } from '../builders/base';\r\n\r\nexport class ComponentRegistry {\r\n private static builders: Map<string, typeof ComponentBuilder> = new Map();\r\n\r\n static register(name: string, builder: typeof ComponentBuilder): void {\r\n this.builders.set(name, builder);\r\n }\r\n\r\n static get(name: string): typeof ComponentBuilder | undefined {\r\n return this.builders.get(name);\r\n }\r\n\r\n static has(name: string): boolean {\r\n return this.builders.has(name);\r\n }\r\n}"],"mappings":"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","names":["ComponentType"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@svintsow/discord-components",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Discord Components V2 Builder API for discord.js",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.mjs",
|
|
11
|
+
"require": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsup",
|
|
22
|
+
"dev": "tsup --watch",
|
|
23
|
+
"test": "jest --coverage",
|
|
24
|
+
"test:watch": "jest --watch",
|
|
25
|
+
"test:ci": "jest --coverage --ci",
|
|
26
|
+
"lint": "eslint src --ext .ts",
|
|
27
|
+
"format": "prettier --write src",
|
|
28
|
+
"prepublishOnly": "npm run build"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"discord.js": "^14.0.0"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/jest": "^29.5.12",
|
|
35
|
+
"@types/node": "^20.0.0",
|
|
36
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
37
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
38
|
+
"eslint": "^8.0.0",
|
|
39
|
+
"jest": "^29.7.0",
|
|
40
|
+
"prettier": "^3.0.0",
|
|
41
|
+
"ts-jest": "^29.1.2",
|
|
42
|
+
"tsup": "^7.0.0",
|
|
43
|
+
"typescript": "^5.0.0"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"discord",
|
|
47
|
+
"discord.js",
|
|
48
|
+
"components",
|
|
49
|
+
"builder",
|
|
50
|
+
"v2",
|
|
51
|
+
"typescript",
|
|
52
|
+
"interactions"
|
|
53
|
+
],
|
|
54
|
+
"author": "svintsow",
|
|
55
|
+
"license": "MIT",
|
|
56
|
+
"repository": {
|
|
57
|
+
"type": "git",
|
|
58
|
+
"url": "git+https://github.com/svintsow/discord-components.git"
|
|
59
|
+
},
|
|
60
|
+
"bugs": {
|
|
61
|
+
"url": "https://github.com/svintsow/discord-components/issues"
|
|
62
|
+
},
|
|
63
|
+
"homepage": "https://github.com/svintsow/discord-components#readme"
|
|
64
|
+
}
|