{"version":3,"file":"Tag-12b38305.js","sources":["../../../app/frontend/shared/Button.tsx","../../../app/frontend/shared/Tag.ts"],"sourcesContent":["import { ButtonHTMLAttributes } from \"react\";\nimport buttonStyleClasses, { ButtonStyle } from \"./buttonStyle\";\n\nexport interface Props extends ButtonHTMLAttributes {\n buttonStyle?: ButtonStyle;\n}\n\nexport default function Button({\n children,\n buttonStyle = \"primary\",\n ...props\n}: Props) {\n return (\n \n );\n}\n","type TagArrayable = string | Tag | Tag[] | null;\n\nexport default class Tag {\n #tag: string;\n\n #length: number;\n\n #value: string | Tag[];\n\n static getStringValue(tag: string, input: TagArrayable): string | undefined {\n const foundTag = this.toTagArray(input).find((t) => t.tag === tag);\n if (typeof foundTag?.value === \"string\") {\n return foundTag.value;\n }\n\n return undefined;\n }\n\n static fromTagArray(tag: string, input: Tag[]): Tag {\n const { length } = [...this.toString(input)];\n return new this(tag, length, input);\n }\n\n static toTagArray(input?: TagArrayable): Tag[] {\n let tagList: Tag[] = [];\n\n if (typeof input === \"string\") {\n tagList = this.parse(input);\n } else if (input instanceof Tag) {\n tagList = [input];\n } else if (input != null) {\n tagList = input;\n }\n\n return tagList;\n }\n\n static fromString(tag: string, input: string): Tag {\n return new this(tag, [...input].length, input);\n }\n\n static toString(input: TagArrayable): string {\n return this.toTagArray(input)\n .map((tag) => tag.toString())\n .join(\"\");\n }\n\n static debug(input: TagArrayable): void {\n this.traverse(input, (tag, path) => {\n const indent = \"\\t\".repeat(path.length + 1);\n if (typeof tag.value === \"string\") {\n console.log(`${indent}${tag.tag} ${tag.length} ${tag.value}`);\n } else {\n console.log(`${indent}${tag.tag} ${tag.length}`);\n }\n });\n }\n\n static traverse(\n input: TagArrayable,\n func: (tag: Tag, path: Tag[]) => void,\n path: Tag[] = [],\n ) {\n this.toTagArray(input).forEach((tag) => {\n func(tag, path);\n if (typeof tag.value !== \"string\") {\n this.traverse(tag.value, func, [...path, tag]);\n }\n });\n }\n\n static parse(input?: string, path: string[] = []): Tag[] {\n const tags: Tag[] = [];\n\n if (input == null) {\n return tags;\n }\n\n const unicodeCodepoints = [...input];\n\n let index = 0;\n let currentTag: string;\n let currentLength: number;\n let currentValue: string | Tag[];\n\n while (index < unicodeCodepoints.length) {\n currentTag = unicodeCodepoints.slice(index, index + 2).join(\"\");\n currentLength = parseInt(\n unicodeCodepoints.slice(index + 2, index + 4).join(\"\"),\n 10,\n );\n currentValue = unicodeCodepoints\n .slice(index + 4, index + currentLength + 4)\n .join(\"\");\n\n const newPath = [...path, currentTag];\n if (this.#isTemplate(newPath)) {\n currentValue = this.parse(currentValue, newPath);\n }\n\n tags.push(new this(currentTag, currentLength, currentValue));\n\n index += currentLength + 4;\n }\n\n return tags;\n }\n\n static #isTemplate(path: string[]): boolean {\n const pathTags = path.map((p) => parseInt(p, 10));\n if (path.length === 1) {\n if (pathTags[0] >= 26 && pathTags[0] <= 51) {\n // Merchant Account Information\n return true;\n }\n\n if (pathTags[0] >= 80 && pathTags[0] <= 99) {\n // Unreserved Templates\n return true;\n }\n\n if (pathTags[0] === 62) {\n // Additional Data Field Template\n return true;\n }\n\n if (pathTags[0] === 64) {\n // Merchant Information Language Template\n return true;\n }\n } else if (path.length === 2) {\n if (pathTags[0] === 62 && pathTags[1] >= 50 && pathTags[1] <= 99) {\n // Payment System specific templates\n return true;\n }\n }\n\n return false;\n }\n\n private constructor(tag: string, length: number, value: string | Tag[]) {\n this.#tag = tag;\n this.#length = length;\n this.#value = value;\n\n if (tag.length !== 2) {\n throw new Error(\"tag must be 2 digits\");\n }\n\n if (length < 0 || length > 99) {\n throw new Error(\"length can only be 0 to 99\");\n }\n }\n\n get tag() {\n return this.#tag;\n }\n\n get length() {\n return this.#length;\n }\n\n get value() {\n return this.#value;\n }\n\n toString() {\n let value: string;\n\n if (typeof this.#value === \"string\") {\n value = this.#value;\n } else {\n value = this.#value.map((tag) => tag.toString()).join(\"\");\n }\n\n return `${this.#tag}${this.#length.toString(10).padStart(2, \"0\")}${value}`;\n }\n}\n"],"names":["Button","children","buttonStyle","props","jsx","buttonStyleClasses","_Tag","tag","length","value","__privateAdd","_tag","_length","_value","__privateSet","input","foundTag","t","tagList","path","indent","func","tags","unicodeCodepoints","index","currentTag","currentLength","currentValue","newPath","__privateMethod","_isTemplate","isTemplate_fn","__privateGet","pathTags","p","Tag"],"mappings":"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"}