{"version":3,"file":"integer.mjs","names":["INDENT_STRING","assertXmlTagName","xmlElementText","Value","MAX_NUM","assertInteger","value","Number","isInteger","Error","ValueInteger","TYPE","TAG_NAMES","constructor","asBigInt","BigInt","asNumber","fromXmlElement","element","text","nodeValue","test","num","toXml","options","depth","p","indentString","repeat","v"],"sources":["../../src/value/integer.ts"],"sourcesContent":["import {INDENT_STRING, IToXmlOptions} from '../options.ts';\nimport {IElement, assertXmlTagName, xmlElementText} from '../util.ts';\nimport {Value} from '../value.ts';\n\nconst MAX_NUM = 0x1fffffffffffff;\n\n/**\n * Assert number is integer.\n *\n * @param value Number value.\n */\nfunction assertInteger(value: number | bigint) {\n\tif (typeof value === 'number' && !Number.isInteger(value)) {\n\t\t// eslint-disable-next-line unicorn/prefer-type-error\n\t\tthrow new Error(`Value not an integer: ${value}`);\n\t}\n}\n\n/**\n * ValueInteger object.\n */\nexport class ValueInteger extends Value {\n\t/**\n\t * Value type.\n\t */\n\tpublic static readonly TYPE = 'integer';\n\n\t/**\n\t * Tag names.\n\t */\n\tpublic static readonly TAG_NAMES = ['integer'];\n\n\t/**\n\t * Value value.\n\t */\n\tpublic value: number | bigint = 0;\n\n\t/**\n\t * ValueInteger constructor.\n\t *\n\t * @param value The value.\n\t */\n\tconstructor(value: number | bigint = 0) {\n\t\tsuper();\n\n\t\tassertInteger(value);\n\t\tthis.value = value;\n\t}\n\n\t/**\n\t * Get value as BigInt.\n\t *\n\t * @returns Value as a BigInt.\n\t */\n\tpublic asBigInt() {\n\t\treturn BigInt(this.value);\n\t}\n\n\t/**\n\t * Get value as Number, possibly losing some precision.\n\t *\n\t * @returns Value as a Number.\n\t */\n\tpublic asNumber() {\n\t\treturn Number(this.value);\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic fromXmlElement(element: Readonly<IElement>) {\n\t\tassertXmlTagName(element, 'integer');\n\t\tconst text = xmlElementText(element)?.nodeValue || '';\n\t\tif (!/^[+-]?\\d+$/.test(text)) {\n\t\t\tthrow new Error(`Invalid integer data: ${text}`);\n\t\t}\n\t\tconst num = +text;\n\t\tthis.value = num > MAX_NUM || num < -MAX_NUM ? BigInt(text) : num;\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic toXml(options: Readonly<IToXmlOptions> | null = null, depth = 0) {\n\t\tconst p = (options?.indentString ?? INDENT_STRING).repeat(depth);\n\t\tconst v = this.value;\n\t\tassertInteger(v);\n\t\treturn `${p}<integer>${v}</integer>`;\n\t}\n}\n"],"mappings":"AAAA,SAAQA,aAAa,QAAsB,gBAAe;AAC1D,SAAkBC,gBAAgB,EAAEC,cAAc,QAAO,aAAY;AACrE,SAAQC,KAAK,QAAO,cAAa;AAEjC,MAAMC,OAAO,GAAG,gBAAgB;;AAEhC;AACA;AACA;AACA;AACA;AACA,SAASC,aAAaA,CAACC,KAAsB,EAAE;EAC9C,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACC,MAAM,CAACC,SAAS,CAACF,KAAK,CAAC,EAAE;IAC1D;IACA,MAAM,IAAIG,KAAK,CAAC,yBAAyBH,KAAK,EAAE,CAAC;EAClD;AACD;;AAEA;AACA;AACA;AACA,OAAO,MAAMI,YAAY,SAASP,KAAK,CAAC;EACvC;AACD;AACA;EACC,OAAuBQ,IAAI,GAAG,SAAS;;EAEvC;AACD;AACA;EACC,OAAuBC,SAAS,GAAG,CAAC,SAAS,CAAC;;EAE9C;AACD;AACA;EACQN,KAAK,GAAoB,CAAC;;EAEjC;AACD;AACA;AACA;AACA;EACCO,WAAWA,CAACP,KAAsB,GAAG,CAAC,EAAE;IACvC,KAAK,CAAC,CAAC;IAEPD,aAAa,CAACC,KAAK,CAAC;IACpB,IAAI,CAACA,KAAK,GAAGA,KAAK;EACnB;;EAEA;AACD;AACA;AACA;AACA;EACQQ,QAAQA,CAAA,EAAG;IACjB,OAAOC,MAAM,CAAC,IAAI,CAACT,KAAK,CAAC;EAC1B;;EAEA;AACD;AACA;AACA;AACA;EACQU,QAAQA,CAAA,EAAG;IACjB,OAAOT,MAAM,CAAC,IAAI,CAACD,KAAK,CAAC;EAC1B;;EAEA;AACD;AACA;EACQW,cAAcA,CAACC,OAA2B,EAAE;IAClDjB,gBAAgB,CAACiB,OAAO,EAAE,SAAS,CAAC;IACpC,MAAMC,IAAI,GAAGjB,cAAc,CAACgB,OAAO,CAAC,EAAEE,SAAS,IAAI,EAAE;IACrD,IAAI,CAAC,YAAY,CAACC,IAAI,CAACF,IAAI,CAAC,EAAE;MAC7B,MAAM,IAAIV,KAAK,CAAC,yBAAyBU,IAAI,EAAE,CAAC;IACjD;IACA,MAAMG,GAAG,GAAG,CAACH,IAAI;IACjB,IAAI,CAACb,KAAK,GAAGgB,GAAG,GAAGlB,OAAO,IAAIkB,GAAG,GAAG,CAAClB,OAAO,GAAGW,MAAM,CAACI,IAAI,CAAC,GAAGG,GAAG;EAClE;;EAEA;AACD;AACA;EACQC,KAAKA,CAACC,OAAuC,GAAG,IAAI,EAAEC,KAAK,GAAG,CAAC,EAAE;IACvE,MAAMC,CAAC,GAAG,CAACF,OAAO,EAAEG,YAAY,IAAI3B,aAAa,EAAE4B,MAAM,CAACH,KAAK,CAAC;IAChE,MAAMI,CAAC,GAAG,IAAI,CAACvB,KAAK;IACpBD,aAAa,CAACwB,CAAC,CAAC;IAChB,OAAO,GAAGH,CAAC,YAAYG,CAAC,YAAY;EACrC;AACD","ignoreList":[]}