{"version":3,"file":"dict.mjs","names":["INDENT_STRING","NEWLINE_STRING","assertXmlTagName","xmlElementChildElements","xmlElementText","Value","ValueArray","ValueBoolean","ValueData","ValueInteger","ValueReal","ValueString","childTagNames","ValueDict","TYPE","TAG_NAMES","CHILD_TAG_NAMES","Map","ValueType","t","set","value","constructor","size","has","key","get","getValue","r","Error","delete","clear","fromXmlElement","element","children","l","length","v","i","eK","eV","nodeValue","childFromXmlElement","tagName","toXml","options","depth","indentString","n","newlineString","p","repeat","p2","val","e","replaceAll"],"sources":["../../src/value/dict.ts"],"sourcesContent":["import {INDENT_STRING, NEWLINE_STRING, IToXmlOptions} from '../options.ts';\nimport {\n\tIElement,\n\tassertXmlTagName,\n\txmlElementChildElements,\n\txmlElementText\n} from '../util.ts';\nimport {Value} from '../value.ts';\n\nimport {ValueArray} from './array.ts';\nimport {ValueBoolean} from './boolean.ts';\nimport {ValueData} from './data.ts';\nimport {ValueInteger} from './integer.ts';\nimport {ValueReal} from './real.ts';\nimport {ValueString} from './string.ts';\n\nlet childTagNames: Readonly<Map<string, new () => Value>>;\n\n/**\n * ValueDict object.\n */\nexport class ValueDict extends Value {\n\t/**\n\t * Value type.\n\t */\n\tpublic static readonly TYPE = 'dict';\n\n\t/**\n\t * Tag names.\n\t */\n\tpublic static readonly TAG_NAMES = ['dict'];\n\n\t/**\n\t * Child tag names.\n\t *\n\t * @returns Child tag names map.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic static get CHILD_TAG_NAMES() {\n\t\tif (!childTagNames) {\n\t\t\tchildTagNames = new Map();\n\t\t\tfor (const ValueType of [\n\t\t\t\tValueArray,\n\t\t\t\tValueBoolean,\n\t\t\t\tValueData,\n\t\t\t\tValueDict,\n\t\t\t\tValueInteger,\n\t\t\t\tValueReal,\n\t\t\t\tValueString\n\t\t\t]) {\n\t\t\t\tfor (const t of ValueType.TAG_NAMES) {\n\t\t\t\t\tchildTagNames.set(t, ValueType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn childTagNames;\n\t}\n\n\t/**\n\t * Value value.\n\t */\n\tpublic value = new Map<string, Value>();\n\n\t/**\n\t * ValueDict constructor.\n\t *\n\t * @param value The value.\n\t */\n\tconstructor(value = new Map<string, Value>()) {\n\t\tsuper();\n\n\t\tthis.value = value;\n\t}\n\n\t/**\n\t * Dictionary size.\n\t *\n\t * @returns The size.\n\t */\n\tpublic get size() {\n\t\treturn this.value.size;\n\t}\n\n\t/**\n\t * Check if key exists.\n\t *\n\t * @param key Dictionary key.\n\t * @returns The value or null.\n\t */\n\tpublic has(key: string) {\n\t\treturn this.value.has(key);\n\t}\n\n\t/**\n\t * Get value for key or null if does not exist.\n\t *\n\t * @param key Dictionary key.\n\t * @returns The value or null.\n\t */\n\tpublic get(key: string) {\n\t\treturn this.value.get(key) || null;\n\t}\n\n\t/**\n\t * Get value for key or throw.\n\t *\n\t * @param key Dictionary key.\n\t * @returns The value.\n\t */\n\tpublic getValue(key: string) {\n\t\tconst r = this.get(key);\n\t\tif (!r) {\n\t\t\tthrow new Error(`Key is null: ${key}`);\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Set value for key.\n\t *\n\t * @param key Dictionary key.\n\t * @param value Value object.\n\t */\n\tpublic set(key: string, value: Value) {\n\t\tthis.value.set(key, value);\n\t}\n\n\t/**\n\t * Delete value for key.\n\t *\n\t * @param key Dictionary key.\n\t */\n\tpublic delete(key: string) {\n\t\tthis.value.delete(key);\n\t}\n\n\t/**\n\t * Clear dictionary.\n\t */\n\tpublic clear() {\n\t\tthis.value.clear();\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic fromXmlElement(element: Readonly<IElement>) {\n\t\tassertXmlTagName(element, 'dict');\n\t\tconst children = xmlElementChildElements(element);\n\t\tconst l = children.length;\n\t\tif (l % 2) {\n\t\t\tthrow new Error(`Uneven number of child elements: ${l}`);\n\t\t}\n\t\tconst v: Map<string, Value> = new Map();\n\t\tfor (let i = 0; i < l; i += 2) {\n\t\t\tconst eK = children[i];\n\t\t\tconst eV = children[i + 1];\n\t\t\tassertXmlTagName(eK, 'key');\n\t\t\tconst key = xmlElementText(eK)?.nodeValue || '';\n\t\t\tconst value = this.childFromXmlElement(eV);\n\t\t\tv.set(key, value);\n\t\t}\n\t\tthis.value = v;\n\t}\n\n\t/**\n\t * Decode child element from XML element.\n\t *\n\t * @param element XML element.\n\t * @returns Value element.\n\t */\n\tpublic childFromXmlElement(element: Readonly<IElement>) {\n\t\tconst {tagName} = element;\n\t\tconst {CHILD_TAG_NAMES} = this.constructor as typeof ValueDict;\n\t\tconst Value = CHILD_TAG_NAMES.get(tagName) || null;\n\t\tif (!Value) {\n\t\t\tthrow new Error(`Unknown element type: ${tagName}`);\n\t\t}\n\t\tconst r = new Value();\n\t\tr.fromXmlElement(element);\n\t\treturn r;\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic toXml(options: Readonly<IToXmlOptions> | null = null, depth = 0) {\n\t\tconst i = options?.indentString ?? INDENT_STRING;\n\t\tconst n = options?.newlineString ?? NEWLINE_STRING;\n\t\tconst p = i.repeat(depth);\n\t\tconst v = this.value;\n\t\tif (!v.size) {\n\t\t\treturn `${p}<dict/>`;\n\t\t}\n\t\tconst p2 = i.repeat(depth + 1);\n\t\tlet r = `${p}<dict>`;\n\t\tfor (const [key, val] of v) {\n\t\t\tconst e = key\n\t\t\t\t.replaceAll('&', '&amp;')\n\t\t\t\t.replaceAll('<', '&lt;')\n\t\t\t\t.replaceAll('>', '&gt;');\n\t\t\tr += `${n}${p2}<key>${e}</key>${n}${val.toXml(options, depth + 1)}`;\n\t\t}\n\t\tr += `${n}${p}</dict>`;\n\t\treturn r;\n\t}\n}\n"],"mappings":"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","ignoreList":[]}