{"version":3,"file":"array.mjs","names":["INDENT_STRING","NEWLINE_STRING","assertXmlTagName","xmlElementChildElements","Value","ValueBoolean","ValueData","ValueDict","ValueInteger","ValueReal","ValueString","childTagNames","ValueArray","TYPE","TAG_NAMES","CHILD_TAG_NAMES","Map","ValueType","t","set","value","constructor","length","get","index","getValue","r","Error","push","values","pop","popValue","shift","shiftValue","fromXmlElement","element","children","map","el","childFromXmlElement","tagName","toXml","options","depth","n","newlineString","p","indentString","repeat","v"],"sources":["../../src/value/array.ts"],"sourcesContent":["import {INDENT_STRING, NEWLINE_STRING, IToXmlOptions} from '../options.ts';\nimport {IElement, assertXmlTagName, xmlElementChildElements} from '../util.ts';\nimport {Value} from '../value.ts';\n\nimport {ValueBoolean} from './boolean.ts';\nimport {ValueData} from './data.ts';\nimport {ValueDict} from './dict.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 * ValueArray object.\n */\nexport class ValueArray extends Value {\n\t/**\n\t * Value type.\n\t */\n\tpublic static readonly TYPE = 'array';\n\n\t/**\n\t * Tag names.\n\t */\n\tpublic static readonly TAG_NAMES = ['array'];\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: Value[] = [];\n\n\t/**\n\t * ValueArray constructor.\n\t *\n\t * @param value The value.\n\t */\n\tconstructor(value: Value[] = []) {\n\t\tsuper();\n\n\t\tthis.value = value;\n\t}\n\n\t/**\n\t * Array length.\n\t *\n\t * @returns The length.\n\t */\n\tpublic get length() {\n\t\treturn this.value.length;\n\t}\n\n\t/**\n\t * Get value at index or null if out of bounds.\n\t *\n\t * @param index Array index.\n\t * @returns The value or null.\n\t */\n\tpublic get(index: number) {\n\t\tconst {value} = this;\n\t\treturn index < this.length ? value[index] : null;\n\t}\n\n\t/**\n\t * Get value at index or throw.\n\t *\n\t * @param index Array index.\n\t * @returns The value.\n\t */\n\tpublic getValue(index: number) {\n\t\tconst r = this.get(index);\n\t\tif (!r) {\n\t\t\tthrow new Error(`Index out of bounds: ${index}`);\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Set value at index.\n\t *\n\t * @param index Array index.\n\t * @param value Value object.\n\t */\n\tpublic set(index: number, value: Value) {\n\t\tthis.value[index] = value;\n\t}\n\n\t/**\n\t * Push values onto array.\n\t *\n\t * @param values Value objects.\n\t */\n\tpublic push(...values: Value[]) {\n\t\tthis.value.push(...values);\n\t}\n\n\t/**\n\t * Pop value off array or null.\n\t *\n\t * @returns Value object or null.\n\t */\n\tpublic pop() {\n\t\treturn this.value.pop() || null;\n\t}\n\n\t/**\n\t * Pop value off array or throw.\n\t *\n\t * @returns Value object or null.\n\t */\n\tpublic popValue() {\n\t\tconst r = this.pop();\n\t\tif (!r) {\n\t\t\tthrow new Error('Cannot pop empty array');\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Shift value off array or null.\n\t *\n\t * @returns Value object or null.\n\t */\n\tpublic shift() {\n\t\treturn this.value.shift() || null;\n\t}\n\n\t/**\n\t * Pop value off array or throw.\n\t *\n\t * @returns Value object or null.\n\t */\n\tpublic shiftValue() {\n\t\tconst r = this.shift();\n\t\tif (!r) {\n\t\t\tthrow new Error('Cannot shift empty array');\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic fromXmlElement(element: Readonly<IElement>) {\n\t\tassertXmlTagName(element, 'array');\n\t\tconst children = xmlElementChildElements(element);\n\t\tthis.value = children.map(el => this.childFromXmlElement(el));\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 ValueArray;\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 n = options?.newlineString ?? NEWLINE_STRING;\n\t\tconst p = (options?.indentString ?? INDENT_STRING).repeat(depth);\n\t\tconst v = this.value;\n\t\tif (!v.length) {\n\t\t\treturn `${p}<array/>`;\n\t\t}\n\t\tlet r = `${p}<array>`;\n\t\tfor (const el of v) {\n\t\t\tr += `${n}${el.toXml(options, depth + 1)}`;\n\t\t}\n\t\tr += `${n}${p}</array>`;\n\t\treturn r;\n\t}\n}\n"],"mappings":"AAAA,SAAQA,aAAa,EAAEC,cAAc,QAAsB,gBAAe;AAC1E,SAAkBC,gBAAgB,EAAEC,uBAAuB,QAAO,aAAY;AAC9E,SAAQC,KAAK,QAAO,cAAa;AAEjC,SAAQC,YAAY,QAAO,eAAc;AACzC,SAAQC,SAAS,QAAO,YAAW;AACnC,SAAQC,SAAS,QAAO,YAAW;AACnC,SAAQC,YAAY,QAAO,eAAc;AACzC,SAAQC,SAAS,QAAO,YAAW;AACnC,SAAQC,WAAW,QAAO,cAAa;AAEvC,IAAIC,aAAqD;;AAEzD;AACA;AACA;AACA,OAAO,MAAMC,UAAU,SAASR,KAAK,CAAC;EACrC;AACD;AACA;EACC,OAAuBS,IAAI,GAAG,OAAO;;EAErC;AACD;AACA;EACC,OAAuBC,SAAS,GAAG,CAAC,OAAO,CAAC;;EAE5C;AACD;AACA;AACA;AACA;EACC;EACA,WAAkBC,eAAeA,CAAA,EAAG;IACnC,IAAI,CAACJ,aAAa,EAAE;MACnBA,aAAa,GAAG,IAAIK,GAAG,CAAC,CAAC;MACzB,KAAK,MAAMC,SAAS,IAAI,CACvBL,UAAU,EACVP,YAAY,EACZC,SAAS,EACTC,SAAS,EACTC,YAAY,EACZC,SAAS,EACTC,WAAW,CACX,EAAE;QACF,KAAK,MAAMQ,CAAC,IAAID,SAAS,CAACH,SAAS,EAAE;UACpCH,aAAa,CAACQ,GAAG,CAACD,CAAC,EAAED,SAAS,CAAC;QAChC;MACD;IACD;IACA,OAAON,aAAa;EACrB;;EAEA;AACD;AACA;EACQS,KAAK,GAAY,EAAE;;EAE1B;AACD;AACA;AACA;AACA;EACCC,WAAWA,CAACD,KAAc,GAAG,EAAE,EAAE;IAChC,KAAK,CAAC,CAAC;IAEP,IAAI,CAACA,KAAK,GAAGA,KAAK;EACnB;;EAEA;AACD;AACA;AACA;AACA;EACC,IAAWE,MAAMA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACF,KAAK,CAACE,MAAM;EACzB;;EAEA;AACD;AACA;AACA;AACA;AACA;EACQC,GAAGA,CAACC,KAAa,EAAE;IACzB,MAAM;MAACJ;IAAK,CAAC,GAAG,IAAI;IACpB,OAAOI,KAAK,GAAG,IAAI,CAACF,MAAM,GAAGF,KAAK,CAACI,KAAK,CAAC,GAAG,IAAI;EACjD;;EAEA;AACD;AACA;AACA;AACA;AACA;EACQC,QAAQA,CAACD,KAAa,EAAE;IAC9B,MAAME,CAAC,GAAG,IAAI,CAACH,GAAG,CAACC,KAAK,CAAC;IACzB,IAAI,CAACE,CAAC,EAAE;MACP,MAAM,IAAIC,KAAK,CAAC,wBAAwBH,KAAK,EAAE,CAAC;IACjD;IACA,OAAOE,CAAC;EACT;;EAEA;AACD;AACA;AACA;AACA;AACA;EACQP,GAAGA,CAACK,KAAa,EAAEJ,KAAY,EAAE;IACvC,IAAI,CAACA,KAAK,CAACI,KAAK,CAAC,GAAGJ,KAAK;EAC1B;;EAEA;AACD;AACA;AACA;AACA;EACQQ,IAAIA,CAAC,GAAGC,MAAe,EAAE;IAC/B,IAAI,CAACT,KAAK,CAACQ,IAAI,CAAC,GAAGC,MAAM,CAAC;EAC3B;;EAEA;AACD;AACA;AACA;AACA;EACQC,GAAGA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACV,KAAK,CAACU,GAAG,CAAC,CAAC,IAAI,IAAI;EAChC;;EAEA;AACD;AACA;AACA;AACA;EACQC,QAAQA,CAAA,EAAG;IACjB,MAAML,CAAC,GAAG,IAAI,CAACI,GAAG,CAAC,CAAC;IACpB,IAAI,CAACJ,CAAC,EAAE;MACP,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;IAC1C;IACA,OAAOD,CAAC;EACT;;EAEA;AACD;AACA;AACA;AACA;EACQM,KAAKA,CAAA,EAAG;IACd,OAAO,IAAI,CAACZ,KAAK,CAACY,KAAK,CAAC,CAAC,IAAI,IAAI;EAClC;;EAEA;AACD;AACA;AACA;AACA;EACQC,UAAUA,CAAA,EAAG;IACnB,MAAMP,CAAC,GAAG,IAAI,CAACM,KAAK,CAAC,CAAC;IACtB,IAAI,CAACN,CAAC,EAAE;MACP,MAAM,IAAIC,KAAK,CAAC,0BAA0B,CAAC;IAC5C;IACA,OAAOD,CAAC;EACT;;EAEA;AACD;AACA;EACQQ,cAAcA,CAACC,OAA2B,EAAE;IAClDjC,gBAAgB,CAACiC,OAAO,EAAE,OAAO,CAAC;IAClC,MAAMC,QAAQ,GAAGjC,uBAAuB,CAACgC,OAAO,CAAC;IACjD,IAAI,CAACf,KAAK,GAAGgB,QAAQ,CAACC,GAAG,CAACC,EAAE,IAAI,IAAI,CAACC,mBAAmB,CAACD,EAAE,CAAC,CAAC;EAC9D;;EAEA;AACD;AACA;AACA;AACA;AACA;EACQC,mBAAmBA,CAACJ,OAA2B,EAAE;IACvD,MAAM;MAACK;IAAO,CAAC,GAAGL,OAAO;IACzB,MAAM;MAACpB;IAAe,CAAC,GAAG,IAAI,CAACM,WAAgC;IAC/D,MAAMjB,KAAK,GAAGW,eAAe,CAACQ,GAAG,CAACiB,OAAO,CAAC,IAAI,IAAI;IAClD,IAAI,CAACpC,KAAK,EAAE;MACX,MAAM,IAAIuB,KAAK,CAAC,yBAAyBa,OAAO,EAAE,CAAC;IACpD;IACA,MAAMd,CAAC,GAAG,IAAItB,KAAK,CAAC,CAAC;IACrBsB,CAAC,CAACQ,cAAc,CAACC,OAAO,CAAC;IACzB,OAAOT,CAAC;EACT;;EAEA;AACD;AACA;EACQe,KAAKA,CAACC,OAAuC,GAAG,IAAI,EAAEC,KAAK,GAAG,CAAC,EAAE;IACvE,MAAMC,CAAC,GAAGF,OAAO,EAAEG,aAAa,IAAI5C,cAAc;IAClD,MAAM6C,CAAC,GAAG,CAACJ,OAAO,EAAEK,YAAY,IAAI/C,aAAa,EAAEgD,MAAM,CAACL,KAAK,CAAC;IAChE,MAAMM,CAAC,GAAG,IAAI,CAAC7B,KAAK;IACpB,IAAI,CAAC6B,CAAC,CAAC3B,MAAM,EAAE;MACd,OAAO,GAAGwB,CAAC,UAAU;IACtB;IACA,IAAIpB,CAAC,GAAG,GAAGoB,CAAC,SAAS;IACrB,KAAK,MAAMR,EAAE,IAAIW,CAAC,EAAE;MACnBvB,CAAC,IAAI,GAAGkB,CAAC,GAAGN,EAAE,CAACG,KAAK,CAACC,OAAO,EAAEC,KAAK,GAAG,CAAC,CAAC,EAAE;IAC3C;IACAjB,CAAC,IAAI,GAAGkB,CAAC,GAAGE,CAAC,UAAU;IACvB,OAAOpB,CAAC;EACT;AACD","ignoreList":[]}