{"version":3,"file":"index.cjs","sources":["../src/Request.ts"],"sourcesContent":["import { dset } from 'dset';\nimport { cloneDeep } from 'lodash-es';\n\ntype RelationOptions = {\n\tproperties: string[];\n\trelations?: { [key: string]: RelationOptions };\n\tcustomAttributes?: Record<string, string>;\n};\n\ntype NodeOptions = {\n\tchildren?: string;\n\tattributes: Record<string, unknown>;\n\tnodes?: { [key: string]: NodeOptions };\n};\n\nfunction sanitizeHtmlEntities(value: unknown) {\n\tif (!value) {\n\t\treturn;\n\t}\n\n\treturn String(value).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n\nexport class Request {\n\tprivate readonly type: RequestType;\n\tprivate readonly propertiesTag: PropertiesTagName = 'Properties';\n\tprivate rootAttributes = new Map<string, unknown>();\n\tprivate relations: Record<string, RelationOptions> = {};\n\tprivate nodes: Record<string, NodeOptions> = {};\n\tprivate inlineFilters = new Map<string, unknown>();\n\tprivate tagFilters = new Set<string>();\n\n\tconstructor(type: RequestType, properties?: string[], propertiesTag: PropertiesTagName = 'Properties') {\n\t\tthis.type = type;\n\t\tthis.propertiesTag = propertiesTag;\n\n\t\tif (properties) {\n\t\t\tthis.addRootAttribute(propertiesTag, properties.join(' '));\n\t\t}\n\t}\n\n\tpublic clone(): this {\n\t\treturn cloneDeep(this);\n\t}\n\n\tpublic addRootAttribute(name: string, value: string | number): this {\n\t\tif (typeof value === 'number') {\n\t\t\tthis.rootAttributes.set(name, value.toString());\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.rootAttributes.set(name, value);\n\n\t\treturn this;\n\t}\n\n\tpublic addRelation(name: string, properties: string[] | null, customAttributes?: Record<string, string>): this {\n\t\tconst path = name.split('.').join('.relations.');\n\t\tdset(this.relations, path, { properties, customAttributes });\n\n\t\treturn this;\n\t}\n\n\tpublic addNode(name: string, attributes: Record<string, unknown>, children?: string): this {\n\t\tconst path = name.split('.').join('.nodes.');\n\t\tdset(this.nodes, path, { attributes, children });\n\n\t\treturn this;\n\t}\n\n\tpublic addInlineFilter(name: string, value: string | number): this {\n\t\tif (typeof value === 'number') {\n\t\t\tthis.inlineFilters.set(name, value.toString());\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.inlineFilters.set(name, value);\n\n\t\treturn this;\n\t}\n\n\tpublic addTagFilter(tag: string): this {\n\t\tthis.tagFilters.add(tag);\n\n\t\treturn this;\n\t}\n\n\tpublic toString(): string {\n\t\tlet request = `<Request Type=\"${this.type}\"${\n\t\t\tthis.rootAttributes.size > 0 ? ' ' + this.attributesToString(this.rootAttributes) : ''\n\t\t}>`;\n\n\t\tif (this.inlineFilters.size > 0 || this.tagFilters.size > 0) {\n\t\t\trequest += this.filtersToString();\n\t\t}\n\n\t\tif (Object.keys(this.nodes).length > 0) {\n\t\t\trequest += this.nodesToString();\n\t\t}\n\n\t\tif (Object.keys(this.relations).length > 0) {\n\t\t\trequest += this.relationsToString();\n\t\t}\n\n\t\trequest += '</Request>';\n\n\t\treturn request;\n\t}\n\n\tprivate attributesToString(attributes: Map<string, unknown>): string {\n\t\treturn Array.from(attributes)\n\t\t\t.map(([key, value]) => `${key}=\"${sanitizeHtmlEntities(value) || ''}\"`)\n\t\t\t.join(' ');\n\t}\n\n\tprivate relationsToString(): string {\n\t\treturn Object.keys(this.relations)\n\t\t\t.map((key) => this.relationToString(key, this.relations[key]))\n\t\t\t.join('');\n\t}\n\n\tprivate relationToString(name: string, relation: RelationOptions): string {\n\t\tlet output = `<Relation Name=\"${name}\"`;\n\n\t\tif (relation.properties?.length > 0) {\n\t\t\toutput += ` ${this.propertiesTag}=\"${relation.properties.join(' ')}\"`;\n\t\t}\n\n\t\tif (relation.customAttributes) {\n\t\t\tObject.entries(relation.customAttributes).forEach(([attribute, value]) => {\n\t\t\t\toutput += ` ${attribute}=\"${sanitizeHtmlEntities(value)}\"`;\n\t\t\t});\n\t\t}\n\n\t\tif (relation.relations) {\n\t\t\toutput += '>';\n\t\t\toutput += Object.keys(relation.relations!)\n\t\t\t\t.map((key) => this.relationToString(key, relation.relations![key]))\n\t\t\t\t.join('');\n\t\t\toutput += '</Relation>';\n\t\t} else {\n\t\t\toutput += '/>';\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tprivate nodesToString(): string {\n\t\treturn Object.keys(this.nodes)\n\t\t\t.map((key) => this.nodeToString(key, this.nodes[key]))\n\t\t\t.join('');\n\t}\n\n\tprivate nodeToString(name: string, node: NodeOptions): string {\n\t\tlet output = `<${name}`;\n\n\t\tif (Object.keys(node.attributes).length > 0) {\n\t\t\tObject.entries(node.attributes).forEach(([attribute, value]) => {\n\t\t\t\toutput += ` ${attribute}=\"${sanitizeHtmlEntities(value) || ''}\"`;\n\t\t\t});\n\t\t}\n\n\t\tif (node.nodes) {\n\t\t\toutput += '>';\n\n\t\t\toutput += Object.keys(node.nodes!)\n\t\t\t\t.map((key) => this.nodeToString(key, node.nodes![key]))\n\t\t\t\t.join('');\n\t\t\toutput += `</${name}>`;\n\t\t} else if (node.children) {\n\t\t\toutput += `>${node.children}</${name}>`;\n\t\t} else {\n\t\t\toutput += '/>';\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tprivate filtersToString(): string {\n\t\tlet output = '<Filter';\n\n\t\tif (this.inlineFilters.size > 0) {\n\t\t\toutput += ' ' + this.attributesToString(this.inlineFilters);\n\t\t}\n\n\t\tif (this.tagFilters.size > 0) {\n\t\t\toutput += '>';\n\t\t\toutput += `<Tags Mode=\"MySqlBoolean\">${Array.from(this.tagFilters).join(' ')}</Tags>`;\n\t\t\toutput += '</Filter>';\n\n\t\t\treturn output;\n\t\t}\n\n\t\toutput += '/>';\n\n\t\treturn output;\n\t}\n}\n\nexport enum Models {\n\tApplication = 'Application',\n\tApplicationRequestStatistic = 'ApplicationRequestStatistic',\n\tArticle = 'Article',\n\tArticleText = 'ArticleText',\n\tBankAccount = 'BankAccount',\n\tBeachMatch = 'BeachMatch',\n\tBeachLive = 'BeachLive',\n\tBeachRanking = 'BeachRanking',\n\tBeachRankingParameters = 'BeachRankingParameters',\n\tBeachStartingPointsRanking = 'BeachStartingPointsRanking',\n\tBeachRound = 'BeachRound',\n\tBeachStatistic = 'BeachStatistic',\n\tBeachTeam = 'BeachTeam',\n\tBeachTeamMate = 'BeachTeamMate',\n\tBeachTemplate = 'BeachTemplate',\n\tBeachTournament = 'BeachTournament',\n\tCoach = 'Coach',\n\tConfederation = 'Confederation',\n\tCourseAttender = 'CourseAttender',\n\tDevelopmentProject = 'DevelopmentProject',\n\tDevelopmentProjectProgressReport = 'DevelopmentProjectProgressReport',\n\tDayScheduleEntry = 'DayScheduleEntry',\n\tDocument = 'Document',\n\tEvent = 'Event',\n\tEventAccreditation = 'EventAccreditation',\n\tEventOfficial = 'EventOfficial',\n\tEventReferee = 'EventReferee',\n\tExportDefinition = 'ExportDefinition',\n\tFederation = 'Federation',\n\tFederationVolleyDivision = 'FederationVolleyDivision',\n\tFederationVolleySeason = 'FederationVolleySeason',\n\tFederationVolleySeasonDivision = 'FederationVolleySeasonDivision',\n\tImage = 'Image',\n\tMatch = 'Match',\n\tMediaOrganization = 'MediaOrganization',\n\tMediaPerson = 'MediaPerson',\n\tMedicalPerson = 'MedicalPerson',\n\tOfficial = 'Official',\n\tPerson = 'Person',\n\tPhase = 'Phase',\n\tPhaseRanking = 'PhaseRanking',\n\tPhaseTeam = 'PhaseTeam',\n\tPlayer = 'Player',\n\tPlayersAgent = 'PlayersAgent',\n\tPlayerInjury = 'PlayerInjury',\n\tPlayerAccountingEntry = 'PlayerAccountingEntry',\n\tPressRelease = 'PressRelease',\n\tPressReleaseText = 'PressReleaseText',\n\tReferee = 'Referee',\n\tRefereeMatchesByYear = 'RefereeMatchesByYear',\n\tRound = 'Round',\n\tRoundRanking = 'RoundRanking',\n\tSeason = 'Season',\n\tTag = 'Tag',\n\tTournament = 'Tournament',\n\tTournamentPlayer = 'TournamentPlayer',\n\tTournamentRanking = 'TournamentRanking',\n\tTournamentTeam = 'TournamentTeam',\n\tUser = 'User',\n\tVolleyClub = 'VolleyClub',\n\tVolleyClubTeam = 'VolleyClubTeam',\n\tVolleyClubTeamPlayer = 'VolleyClubTeamPlayer',\n\tVolleyClubTeamSeasonDivision = 'VolleyClubTeamSeasonDivision',\n\tVolleyHall = 'VolleyHall',\n\tVolleyMatch = 'VolleyMatch',\n\tVolleyMatchRefereeEvaluation = 'VolleyMatchRefereeEvaluation',\n\tVolleyPlayer = 'VolleyPlayer',\n\tVolleyPool = 'VolleyPool',\n\tVolleyRankingDefinition = 'VolleyRankingDefinition',\n\tVolleyTeam = 'VolleyTeam',\n\tVolleyTournament = 'VolleyTournament',\n\tVolleyTransfer = 'VolleyTransfer',\n\tVolleyTransferContract = 'VolleyTransferContract',\n\tVolleyTransferFee = 'VolleyTransferFee',\n\tVolleyTransferPayment = 'VolleyTransferPayment',\n\tVolleyTransferSeason = 'VolleyTransferSeason',\n}\n\nexport type GettableEntity =\n\t| Models.Application\n\t| Models.Article\n\t| Models.BankAccount\n\t| Models.BeachMatch\n\t| Models.BeachLive\n\t| Models.BeachRanking\n\t| Models.BeachStartingPointsRanking\n\t| Models.BeachRound\n\t| Models.BeachTeam\n\t| Models.BeachTemplate\n\t| Models.BeachTournament\n\t| Models.Coach\n\t| Models.DevelopmentProject\n\t| Models.DevelopmentProjectProgressReport\n\t| Models.DayScheduleEntry\n\t| Models.Document\n\t| Models.Event\n\t| Models.EventAccreditation\n\t| Models.EventOfficial\n\t| Models.EventReferee\n\t| Models.ExportDefinition\n\t| Models.Federation\n\t| Models.FederationVolleyDivision\n\t| Models.FederationVolleySeason\n\t| Models.FederationVolleySeasonDivision\n\t| Models.Image\n\t| Models.Match\n\t| Models.MediaOrganization\n\t| Models.MediaPerson\n\t| Models.MedicalPerson\n\t| Models.Person\n\t| Models.Phase\n\t| Models.PhaseRanking\n\t| Models.Player\n\t| Models.PlayersAgent\n\t| Models.PlayerInjury\n\t| Models.PressRelease\n\t| Models.PressReleaseText\n\t| Models.Referee\n\t| Models.Round\n\t| Models.RoundRanking\n\t| Models.Tournament\n\t| Models.TournamentPlayer\n\t| Models.TournamentRanking\n\t| Models.TournamentTeam\n\t| Models.User\n\t| Models.VolleyClub\n\t| Models.VolleyClubTeam\n\t| Models.VolleyClubTeamPlayer\n\t| Models.VolleyHall\n\t| Models.VolleyMatch\n\t| Models.VolleyMatchRefereeEvaluation\n\t| Models.VolleyPlayer\n\t| Models.VolleyPool\n\t| Models.VolleyTeam\n\t| Models.VolleyTournament\n\t| Models.VolleyTransfer\n\t| Models.VolleyTransferContract\n\t| Models.VolleyTransferFee\n\t| Models.VolleyTransferPayment;\n\nexport type ListableEntity =\n\t| Models.ApplicationRequestStatistic\n\t| Models.Article\n\t| Models.BankAccount\n\t| Models.BeachMatch\n\t| Models.BeachRanking\n\t| Models.BeachRankingParameters\n\t| Models.BeachRound\n\t| Models.BeachStatistic\n\t| Models.BeachTeam\n\t| Models.BeachTeamMate\n\t| Models.BeachTemplate\n\t| Models.BeachTournament\n\t| Models.Coach\n\t| Models.Confederation\n\t| Models.CourseAttender\n\t| Models.DevelopmentProject\n\t| Models.DevelopmentProjectProgressReport\n\t| Models.DayScheduleEntry\n\t| Models.Document\n\t| Models.Event\n\t| Models.EventAccreditation\n\t| Models.EventOfficial\n\t| Models.EventReferee\n\t| Models.ExportDefinition\n\t| Models.Federation\n\t| Models.FederationVolleyDivision\n\t| Models.FederationVolleySeason\n\t| Models.FederationVolleySeasonDivision\n\t| Models.Image\n\t| Models.MediaOrganization\n\t| Models.MediaPerson\n\t| Models.MedicalPerson\n\t| Models.Official\n\t| Models.Person\n\t| Models.Phase\n\t| Models.PhaseTeam\n\t| Models.Player\n\t| Models.PlayerInjury\n\t| Models.PlayerAccountingEntry\n\t| Models.PressRelease\n\t| Models.PressReleaseText\n\t| Models.Referee\n\t| Models.RefereeMatchesByYear\n\t| Models.Round\n\t| Models.Tag\n\t| Models.Tournament\n\t| Models.TournamentPlayer\n\t| Models.TournamentTeam\n\t| Models.User\n\t| Models.VolleyClub\n\t| Models.VolleyClubTeam\n\t| Models.VolleyClubTeamPlayer\n\t| Models.VolleyClubTeamSeasonDivision\n\t| Models.VolleyHall\n\t| Models.VolleyMatch\n\t| Models.VolleyMatchRefereeEvaluation\n\t| Models.VolleyPlayer\n\t| Models.VolleyRankingDefinition\n\t| Models.VolleyTournament\n\t| Models.VolleyTransfer\n\t| Models.VolleyTransferContract\n\t| Models.VolleyTransferPayment\n\t| Models.VolleyTransferSeason\n\t| Models.Season;\n\nexport type SavableEntity =\n\t| Models.Article\n\t| Models.ArticleText\n\t| Models.BankAccount\n\t| Models.BeachMatch\n\t| Models.BeachTeam\n\t| Models.BeachTournament\n\t| Models.Coach\n\t| Models.Confederation\n\t| Models.CourseAttender\n\t| Models.DevelopmentProject\n\t| Models.DevelopmentProjectProgressReport\n\t| Models.DayScheduleEntry\n\t| Models.Document\n\t| Models.Event\n\t| Models.EventAccreditation\n\t| Models.EventOfficial\n\t| Models.EventReferee\n\t| Models.Federation\n\t| Models.FederationVolleyDivision\n\t| Models.FederationVolleySeason\n\t| Models.FederationVolleySeasonDivision\n\t| Models.Image\n\t| Models.Match\n\t| Models.MediaPerson\n\t| Models.MedicalPerson\n\t| Models.Official\n\t| Models.Person\n\t| Models.Phase\n\t| Models.PhaseTeam\n\t| Models.Player\n\t| Models.PlayerAccountingEntry\n\t| Models.PlayerInjury\n\t| Models.PressRelease\n\t| Models.PressReleaseText\n\t| Models.Referee\n\t| Models.RefereeMatchesByYear\n\t| Models.Tournament\n\t| Models.TournamentPlayer\n\t| Models.TournamentTeam\n\t| Models.User\n\t| Models.VolleyClub\n\t| Models.VolleyClubTeam\n\t| Models.VolleyClubTeamPlayer\n\t| Models.VolleyHall\n\t| Models.VolleyMatch\n\t| Models.VolleyMatchRefereeEvaluation\n\t| Models.VolleyPlayer\n\t| Models.VolleyPool\n\t| Models.VolleyTeam\n\t| Models.VolleyTournament\n\t| Models.VolleyTransfer\n\t| Models.VolleyTransferContract\n\t| Models.VolleyTransferPayment;\n\nexport type GetEntityListRequest = `Get${ListableEntity}List`;\nexport type GetEntityRequest = `Get${GettableEntity}`;\nexport type SaveEntityRequest = `Save${SavableEntity}`;\nexport type RequestType = GetEntityRequest | GetEntityListRequest | SaveEntityRequest;\nexport type PropertiesTagName = 'Properties' | 'Fields';\n"],"names":["sanitizeHtmlEntities","value","String","replace","Request","Models","type","properties","propertiesTag","rootAttributes","Map","relations","nodes","inlineFilters","tagFilters","Set","this","addRootAttribute","join","clone","cloneDeep","name","set","toString","addRelation","customAttributes","path","split","dset","addNode","attributes","children","addInlineFilter","addTagFilter","tag","add","request","size","attributesToString","filtersToString","Object","keys","length","nodesToString","relationsToString","Array","from","map","key","_this","relationToString","relation","output","entries","forEach","_this2","_this3","nodeToString","node","_this4"],"mappings":"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C1Be,GAAU,IACVA,gCAAuCP,MAAMC,KAAK9B,KAAKF,YAAYI,KAAK,eACxEkC,GAAU,aAKXA,GAAU,WAMA/C,uBAAAA,EAAAA,iBAAAA,8CAEXA,4DACAA,oBACAA,4BACAA,4BACAA,0BACAA,wBACAA,8BACAA,kDACAA,0DACAA,0BACAA,kCACAA,wBACAA,gCACAA,gCACAA,oCACAA,gBACAA,gCACAA,kCACAA,0CACAA,sEACAA,sCACAA,sBACAA,gBACAA,0CACAA,gCACAA,8BACAA,sCACAA,0BACAA,sDACAA,kDACAA,kEACAA,gBACAA,gBACAA,wCACAA,4BACAA,gCACAA,sBACAA,kBACAA,gBACAA,8BACAA,wBACAA,kBACAA,8BACAA,8BACAA,gDACAA,8BACAA,sCACAA,oBACAA,8CACAA,gBACAA,8BACAA,kBACAA,YACAA,0BACAA,sCACAA,wCACAA,kCACAA,cACAA,0BACAA,kCACAA,8CACAA,8DACAA,0BACAA,4BACAA,8DACAA,8BACAA,0BACAA,oDACAA,0BACAA,sCACAA,kCACAA,kDACAA,wCACAA,gDACAA"}