bkper-js 2.32.0 → 2.32.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bkper.min.js +2 -2
- package/dist/bkper.min.js.map +3 -3
- package/lib/index.d.ts +1 -0
- package/lib/model/Book.js +24 -1
- package/lib/service/http-api-request.js +50 -11
- package/package.json +5 -8
- package/CHANGELOG.md +0 -464
package/dist/bkper.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../node_modules/luxon/src/errors.js", "../node_modules/luxon/src/impl/formats.js", "../node_modules/luxon/src/impl/util.js", "../node_modules/luxon/src/impl/english.js", "../node_modules/luxon/src/impl/formatter.js", "../node_modules/luxon/src/impl/invalid.js", "../node_modules/luxon/src/zone.js", "../node_modules/luxon/src/zones/localZone.js", "../node_modules/luxon/src/zones/IANAZone.js", "../node_modules/luxon/src/zones/fixedOffsetZone.js", "../node_modules/luxon/src/zones/invalidZone.js", "../node_modules/luxon/src/impl/zoneUtil.js", "../node_modules/luxon/src/settings.js", "../node_modules/luxon/src/impl/locale.js", "../node_modules/luxon/src/impl/regexParser.js", "../node_modules/luxon/src/duration.js", "../node_modules/luxon/src/interval.js", "../node_modules/luxon/src/info.js", "../node_modules/luxon/src/impl/diff.js", "../node_modules/luxon/src/impl/digits.js", "../node_modules/luxon/src/impl/tokenParser.js", "../node_modules/luxon/src/impl/conversions.js", "../node_modules/luxon/src/datetime.js", "../node_modules/luxon/src/luxon.js", "../lib/index.js", "../lib/model/BkperError.js", "../lib/service/http-request.js", "../lib/service/http-api-request.js", "../lib/service/account-service.js", "../lib/service/group-service.js", "../lib/utils.js", "../node_modules/big.js/big.mjs", "../lib/model/Amount.js", "../lib/model/Enums.js", "../lib/model/Resource.js", "../lib/model/ResourceProperty.js", "../lib/model/Group.js", "../lib/model/Account.js", "../lib/builders/AccountsDataTableBuilder.js", "../lib/model/Agent.js", "../lib/service/app-service.js", "../lib/service/book-service.js", "../lib/service/query-service.js", "../lib/service/balances-service.js", "../lib/service/file-service.js", "../lib/service/integration-service.js", "../lib/service/transaction-service.js", "../lib/service/event-service.js", "../lib/service/collaborator-service.js", "../lib/model/Collaborator.js", "../lib/service/collection-service.js", "../lib/model/Collection.js", "../lib/model/BotResponse.js", "../lib/service/connection-service.js", "../lib/model/Integration.js", "../lib/model/Connection.js", "../lib/service/user-service.js", "../lib/model/Billing.js", "../lib/model/User.js", "../lib/model/Event.js", "../lib/model/EventList.js", "../lib/model/File.js", "../node_modules/uuid/dist/esm-browser/stringify.js", "../node_modules/uuid/dist/esm-browser/rng.js", "../node_modules/uuid/dist/esm-browser/native.js", "../node_modules/uuid/dist/esm-browser/v4.js", "../lib/model/Transaction.js", "../lib/model/TransactionList.js", "../lib/model/Balance.js", "../lib/builders/BalancesDataTableBuilder.js", "../lib/model/BalancesContainerAccount.js", "../lib/model/BalancesContainerGroup.js", "../lib/model/BalancesReport.js", "../lib/model/Query.js", "../lib/model/Backlog.js", "../lib/builders/GroupsDataTableBuilder.js", "../lib/builders/TransactionsDataTableBuilder.js", "../lib/model/Book.js", "../lib/service/template-service.js", "../lib/model/Template.js", "../lib/model/Bkper.js", "../lib/model/App.js", "../lib/builders/BooksDataTableBuilder.js"],
|
|
4
|
-
"sourcesContent": ["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n", "/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23', always 24-hour.\n */\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour.\n */\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hour12: false,\n timeZoneName: s\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour.\n */\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hour12: false,\n timeZoneName: l\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l\n};\n", "/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasIntl() {\n try {\n return typeof Intl !== \"undefined\" && Intl.DateTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasFormatToParts() {\n return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts);\n}\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const minus = input < 0 ? \"-\" : \"\";\n const target = minus ? input * -1 : input;\n let result;\n\n if (target.toString().length < n) {\n result = (\"0\".repeat(n) + target).slice(-n);\n } else {\n result = target.toString();\n }\n\n return `${minus}${result}`;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n const factor = 10 ** digits,\n rounder = towardZero ? Math.trunc : Math.round;\n return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// covert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n return +d;\n}\n\nexport function weeksInWeekYear(weekYear) {\n const p1 =\n (weekYear +\n Math.floor(weekYear / 4) -\n Math.floor(weekYear / 100) +\n Math.floor(weekYear / 400)) %\n 7,\n last = weekYear - 1,\n p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n return p1 === 4 || p2 === 3 ? 53 : 52;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > 60 ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hour12: false,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\"\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = Object.assign({ timeZoneName: offsetFormat }, intlOpts),\n intl = hasIntl();\n\n if (intl && hasFormatToParts()) {\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find(m => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n } else if (intl) {\n // this probably doesn't work for all locales\n const without = new Intl.DateTimeFormat(locale, intlOpts).format(date),\n included = new Intl.DateTimeFormat(locale, modified).format(date),\n diffed = included.substring(without.length),\n trimmed = diffed.replace(/^[, \\u200e]+/, \"\");\n return trimmed;\n } else {\n return null;\n }\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer, nonUnitKeys) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n if (nonUnitKeys.indexOf(u) >= 0) continue;\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n\nexport const ianaRegex = /[A-Za-z_+-]{1,256}(:?\\/[A-Za-z_+-]{1,256}(\\/[A-Za-z_+-]{1,256})?)?/;\n", "import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\"\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"]\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hour12\"\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n", "import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { hasFormatToParts, padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: false, val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n }\n\n formatDateTime(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n }\n\n formatDateTimeParts(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.formatToParts();\n }\n\n resolvedOptions(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.resolvedOptions();\n }\n\n num(n, p = 0) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = Object.assign({}, this.opts);\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter =\n this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\" && hasFormatToParts(),\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = opts => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hour12: true }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = token => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = length =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = token => {\n // Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const tokenToField = token => {\n switch (token[0]) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n default:\n return null;\n }\n },\n tokenToString = lildur => token => {\n const mapped = tokenToField(token);\n if (mapped) {\n return this.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter(t => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\n", "export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n", "/* eslint no-unused-vars: \"off\" */\nimport { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get universal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n", "import { formatOffset, parseZoneInfo, hasIntl } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class LocalZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {LocalZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new LocalZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"local\";\n }\n\n /** @override **/\n get name() {\n if (hasIntl()) {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n } else return \"local\";\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"local\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n", "import { formatOffset, parseZoneInfo, isUndefined, ianaRegex, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst matchingRegex = RegExp(`^${ianaRegex.source}$`);\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\"\n });\n }\n return dtfCache[zone];\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n hour: 3,\n minute: 4,\n second: 5\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date),\n filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i],\n pos = typeToPos[type];\n\n if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n if (!ianaZoneCache[name]) {\n ianaZoneCache[name] = new IANAZone(name);\n }\n return ianaZoneCache[name];\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache = {};\n dtfCache = {};\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Fantasia/Castle\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return !!(s && s.match(matchingRegex));\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n // Etc/GMT+8 -> -480\n /** @ignore */\n static parseGMTOffset(specifier) {\n if (specifier) {\n const match = specifier.match(/^Etc\\/GMT(0|[+-]\\d{1,2})$/i);\n if (match) {\n return -60 * parseInt(match[1]);\n }\n }\n return null;\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /** @override **/\n get type() {\n return \"iana\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name),\n [year, month, day, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date),\n // work around https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /** @override **/\n get isValid() {\n return this.valid;\n }\n}\n", "import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /** @override **/\n get type() {\n return \"fixed\";\n }\n\n /** @override **/\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /** @override **/\n offsetName() {\n return this.name;\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /** @override **/\n get universal() {\n return true;\n }\n\n /** @override **/\n offset() {\n return this.fixed;\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n", "import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n", "/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"local\") return defaultZone;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else if ((offset = IANAZone.parseGMTOffset(input)) != null) {\n // handle Etc/GMT-4, which V8 chokes on\n return FixedOffsetZone.instance(offset);\n } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);\n else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && input.offset && typeof input.offset === \"number\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n", "import LocalZone from \"./zones/localZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nlet now = () => Date.now(),\n defaultZone = null, // not setting this directly to LocalZone.instance bc loading order issues\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n throwOnInvalid = false;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Get the default time zone to create DateTimes in.\n * @type {string}\n */\n static get defaultZoneName() {\n return Settings.defaultZone.name;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * @type {string}\n */\n static set defaultZoneName(z) {\n if (!z) {\n defaultZone = null;\n } else {\n defaultZone = normalizeZone(z);\n }\n }\n\n /**\n * Get the default time zone object to create DateTimes in. Does not affect existing instances.\n * @type {Zone}\n */\n static get defaultZone() {\n return defaultZone || LocalZone.instance;\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n }\n}\n", "import { hasFormatToParts, hasIntl, padStart, roundTo, hasRelative } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport Formatter from \"./formatter.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache[key];\n if (!inf) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache[key] = inf;\n }\n return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache[key];\n if (!inf) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache[key] = inf;\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else if (hasIntl()) {\n const computedSys = new Intl.DateTimeFormat().resolvedOptions().locale;\n // node sometimes defaults to \"und\". Override that because that is dumb\n sysLocaleCache = !computedSys || computedSys === \"und\" ? \"en-US\" : computedSys;\n return sysLocaleCache;\n } else {\n sysLocaleCache = \"en-US\";\n return sysLocaleCache;\n }\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n const smaller = localeStr.substring(0, uIndex);\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n } catch (e) {\n options = getCachedDTF(smaller).resolvedOptions();\n }\n\n const { numberingSystem, calendar } = options;\n // return the smaller one so that we can append the calendar and numbering overrides to it\n return [smaller, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (hasIntl()) {\n if (outputCalendar || numberingSystem) {\n localeStr += \"-u\";\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n } else {\n return [];\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2016, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, defaultOK, englishFn, intlFn) {\n const mode = loc.listingMode(defaultOK);\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n (hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\")\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n if (!forceSimple && hasIntl()) {\n const intlOpts = { useGrouping: false };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.hasIntl = hasIntl();\n\n let z;\n if (dt.zone.universal && this.hasIntl) {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n const isOffsetZoneSupported = IANAZone.isValidZone(offsetZ);\n if (dt.offset !== 0 && isOffsetZoneSupported) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata.\n // So we have to make do. Two cases:\n // 1. The format options tell us to show the zone. We can't do that, so the best\n // we can do is format the date in UTC.\n // 2. The format options don't tell us to show the zone. Then we can adjust them\n // the time and tell the formatter to show it to us in UTC, so that the time is right\n // and the bad zone doesn't show up.\n z = \"UTC\";\n if (opts.timeZoneName) {\n this.dt = dt;\n } else {\n this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);\n }\n }\n } else if (dt.zone.type === \"local\") {\n this.dt = dt;\n } else {\n this.dt = dt;\n z = dt.zone.name;\n }\n\n if (this.hasIntl) {\n const intlOpts = Object.assign({}, this.opts);\n if (z) {\n intlOpts.timeZone = z;\n }\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n }\n\n format() {\n if (this.hasIntl) {\n return this.dtf.format(this.dt.toJSDate());\n } else {\n const tokenFormat = English.formatString(this.opts),\n loc = Locale.create(\"en-US\");\n return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat);\n }\n }\n\n formatToParts() {\n if (this.hasIntl && hasFormatToParts()) {\n return this.dtf.formatToParts(this.dt.toJSDate());\n } else {\n // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings\n // and IMO it's too weird to have an uncanny valley like that\n return [];\n }\n }\n\n resolvedOptions() {\n if (this.hasIntl) {\n return this.dtf.resolvedOptions();\n } else {\n return {\n locale: \"en-US\",\n numberingSystem: \"latn\",\n outputCalendar: \"gregory\"\n };\n }\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = Object.assign({ style: \"long\" }, opts);\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\n/**\n * @private\n */\n\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n }\n\n static create(locale, numberingSystem, outputCalendar, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale,\n // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale()),\n numberingSystemR = numberingSystem || Settings.defaultNumberingSystem,\n outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar);\n }\n\n constructor(locale, numbering, outputCalendar, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode(defaultOK = true) {\n const intl = hasIntl(),\n hasFTP = intl && hasFormatToParts(),\n isActuallyEn = this.isEnglish(),\n hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n\n if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) {\n return \"error\";\n } else if (!hasFTP || (isActuallyEn && hasNoWeirdness)) {\n return \"en\";\n } else {\n return \"intl\";\n }\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone(Object.assign({}, alts, { defaultToEN: true }));\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone(Object.assign({}, alts, { defaultToEN: false }));\n }\n\n months(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.months, () => {\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n this.monthsCache[formatStr][length] = mapMonths(dt => this.extract(dt, intl, \"month\"));\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays(dt =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems(defaultOK = true) {\n return listStuff(\n this,\n undefined,\n defaultOK,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hour12: true };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n dt => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(dt =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find(m => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n (hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\"))\n );\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n}\n", "import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n ianaRegex,\n isUndefined\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return m =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [Object.assign(mergedVals, val), mergedZone || zone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/,\n isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/,\n isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${offsetRegex.source}?`),\n isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`),\n isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/,\n isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/,\n isoOrdinalRegex = /(\\d{4})-?(\\d{3})/,\n extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\"),\n extractISOOrdinalData = simpleParse(\"year\", \"ordinal\"),\n sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/, // dumbed-down version of the ISO one\n sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n ),\n sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1)\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3])\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration = /^-?P(?:(?:(-?\\d{1,9})Y)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,9})W)?(?:(-?\\d{1,9})D)?(?:T(?:(-?\\d{1,9})H)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,9}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [\n s,\n yearStr,\n monthStr,\n weekStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr,\n millisecondsStr\n ] = match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseInteger(yearStr)),\n months: maybeNegate(parseInteger(monthStr)),\n weeks: maybeNegate(parseInteger(weekStr)),\n days: maybeNegate(parseInteger(dayStr)),\n hours: maybeNegate(parseInteger(hourStr)),\n minutes: maybeNegate(parseInteger(minuteStr)),\n seconds: maybeNegate(parseInteger(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds)\n }\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr)\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset);\n\n/**\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOYmdTimeOffsetAndIANAZone = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n", "import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nconst lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 }\n },\n casualMatrix = Object.assign(\n {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000\n }\n },\n lowOrderMatrix\n ),\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = Object.assign(\n {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000\n }\n },\n lowOrderMatrix\n );\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy\n };\n return new Duration(conf);\n}\n\nfunction antiTrunc(n) {\n return n < 0 ? Math.floor(n) : Math.ceil(n);\n}\n\n// NB: mutates parameters\nfunction convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n const conv = matrix[toUnit][fromUnit],\n raw = fromMap[fromUnit] / conv,\n sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),\n // ok, so this is wild, but see the matrix in the tests\n added =\n !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);\n toMap[toUnit] += added;\n fromMap[fromUnit] -= added * conv;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n reverseUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n convert(matrix, vals, previous, vals, current);\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors.\n * * **Configuration** See {@link Duration.locale} and {@link Duration.numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = accurate ? accurateMatrix : casualMatrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject(Object.assign({ milliseconds: count }, opts));\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {string} [obj.locale='en-US'] - the locale to use\n * @param {string} obj.numberingSystem - the numbering system to use\n * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromObject(obj) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit, [\n \"locale\",\n \"numberingSystem\",\n \"conversionAccuracy\",\n \"zone\" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this\n ]),\n loc: Locale.fromObject(obj),\n conversionAccuracy: obj.conversionAccuracy\n });\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n const obj = Object.assign(parsed, opts);\n return Duration.fromObject(obj);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n const obj = Object.assign(parsed, opts);\n return Duration.fromObject(obj);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\"\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = Object.assign({}, opts, {\n floor: opts.round !== false && opts.floor !== false\n });\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = Object.assign({}, this.values);\n\n if (opts.includeConfig) {\n base.conversionAccuracy = this.conversionAccuracy;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = Object.assign(\n {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\"\n },\n opts\n );\n\n const value = this.shiftTo(\"hours\", \"minutes\", \"seconds\", \"milliseconds\");\n\n let fmt = opts.format === \"basic\" ? \"hhmm\" : \"hh:mm\";\n\n if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) {\n fmt += opts.format === \"basic\" ? \"ss\" : \":ss\";\n if (!opts.suppressMilliseconds || value.milliseconds !== 0) {\n fmt += \".SSS\";\n }\n }\n\n let str = value.toFormat(fmt);\n\n if (opts.includePrefix) {\n str = \"T\" + str;\n }\n\n return str;\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n return this.as(\"milliseconds\");\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = friendlyDuration(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = friendlyDuration(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === \"hour\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, []));\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem }),\n opts = { loc };\n\n if (conversionAccuracy) {\n opts.conversionAccuracy = conversionAccuracy;\n }\n\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map(u => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = own - i; // we'd like to absorb these fractions in another unit\n\n // plus anything further down the chain that should be rolled up in to this\n for (const down in vals) {\n if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n convert(this.matrix, vals, down, built, k);\n }\n }\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n return clone(this, { values: built }, true).normalize();\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDuration(durationish) {\n if (isNumber(durationish)) {\n return Duration.fromMillis(durationish);\n } else if (Duration.isDuration(durationish)) {\n return durationish;\n } else if (typeof durationish === \"object\") {\n return Duration.fromObject(durationish);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationish} of type ${typeof durationish}`\n );\n }\n}\n", "import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration, { friendlyDuration } from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}.\n * * **Accessors** Use {@link start} and {@link end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}.\n * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs}.\n * * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = friendlyDuration(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = friendlyDuration(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @return {number}\n */\n count(unit = \"milliseconds\") {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit),\n end = this.end.startOf(unit);\n return Math.floor(end.diff(start, unit).get(unit)) + 1;\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...[DateTime]} dateTimes - the unit of time to count.\n * @return {[Interval]}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter(d => this.contains(d))\n .sort(),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {[Interval]}\n */\n splitBy(duration) {\n const dur = friendlyDuration(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits(x => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {[Interval]}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Return whether this Interval engulfs the start and end of the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n static merge(intervals) {\n const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map(i => [{ time: i.s, type: \"s\" }, { time: i.e, type: \"e\" }]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {[Interval]}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map(i => this.intersection(i))\n .filter(i => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime.toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime.toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format string.\n * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details.\n * @param {Object} opts - options\n * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n", "import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasFormatToParts, hasIntl, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now()\n .setZone(zone)\n .set({ month: 12 });\n\n return !zone.universal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone.isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {[string]}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {[string]}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {[string]}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link weekdays}\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {[string]}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {[string]}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {[string]}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `zones`: whether this environment supports IANA timezones\n * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing\n * * `intl`: whether this environment supports general internationalization\n * * `relative`: whether this environment supports relative time formatting\n * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false }\n * @return {Object}\n */\n static features() {\n let intl = false,\n intlTokens = false,\n zones = false,\n relative = false;\n\n if (hasIntl()) {\n intl = true;\n intlTokens = hasFormatToParts();\n relative = hasRelative();\n\n try {\n zones =\n new Intl.DateTimeFormat(\"en\", { timeZone: \"America/New_York\" }).resolvedOptions()\n .timeZone === \"America/New_York\";\n } catch (e) {\n zones = false;\n }\n }\n\n return { intl, intlTokens, zones, relative };\n }\n}\n", "import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = dt =>\n dt\n .toUTC(0, { keepLocalTime: true })\n .startOf(\"day\")\n .valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n }\n ],\n [\"days\", dayDiff]\n ];\n\n const results = {};\n let lowestOrder, highWater;\n\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n let delta = differ(cursor, later);\n highWater = cursor.plus({ [unit]: delta });\n\n if (highWater > later) {\n cursor = cursor.plus({ [unit]: delta - 1 });\n delta -= 1;\n } else {\n cursor = highWater;\n }\n\n results[unit] = delta;\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function(earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n u => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(Object.assign(results, opts));\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n", "const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\"\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881]\n};\n\n// eslint-disable-next-line\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n", "import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = i => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `( |${NBSP})`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex(i => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n // eslint-disable-next-line no-useless-escape\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = t => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = t => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\", false), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\", false), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true, false), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true, false), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false, false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false, false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false, false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false, false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true, false), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true, false), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\"\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\"\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\"\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\"\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour: {\n numeric: \"h\",\n \"2-digit\": \"hh\"\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\"\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\"\n }\n};\n\nfunction tokenForPart(part, locale, formatOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n return {\n literal: true,\n val: value\n };\n }\n\n const style = formatOpts[type];\n\n let val = partTypeStyleToTokenVal[type];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map(u => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = token => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone;\n if (!isUndefined(matches.Z)) {\n zone = new FixedOffsetZone(matches.Z);\n } else if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n } else {\n zone = null;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n\n if (!formatOpts) {\n return token;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const parts = formatter.formatDateTimeParts(getDummyDateTime());\n\n const tokens = parts.map(p => tokenForPart(p, locale, formatOpts));\n\n if (tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nfunction expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map(t => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n units = tokens.map(t => unitForToken(t, locale)),\n disqualifyingUnit = units.find(t => t.invalidReason);\n\n if (disqualifyingUnit) {\n return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n } else {\n const [regexString, handlers] = buildRegex(units),\n regex = RegExp(regexString, \"i\"),\n [rawMatches, matches] = match(input, regex, handlers),\n [result, zone] = matches ? dateTimeFromMatches(matches) : [null, null];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return { input, tokens, regex, rawMatches, matches, result, zone };\n }\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, invalidReason];\n}\n", "import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nfunction dayOfWeek(year, month, day) {\n const js = new Date(Date.UTC(year, month - 1, day)).getUTCDay();\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex(i => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = dayOfWeek(year, month, day);\n\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear);\n } else if (weekNumber > weeksInWeekYear(year)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return Object.assign({ weekYear, weekNumber, weekday }, timeObject(gregObj));\n}\n\nexport function weekToGregorian(weekData) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n\n return Object.assign({ year, month, day }, timeObject(weekData));\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData,\n ordinal = computeOrdinal(year, month, day);\n\n return Object.assign({ year, ordinal }, timeObject(gregData));\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData,\n { month, day } = uncomputeOrdinal(year, ordinal);\n\n return Object.assign({ year, month, day }, timeObject(ordinalData));\n}\n\nexport function hasInvalidWeekData(obj) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.week);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n", "import Duration, { friendlyDuration } from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport { parseFromTokens, explainFromTokens } from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid\n };\n return new DateTime(Object.assign({}, current, alts, { old: current }));\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds()\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = Object.assign({}, inst.c, {\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7\n }),\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text) {\n const { setZone, zone } = opts;\n if (parsed && Object.keys(parsed).length !== 0) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(\n Object.assign(parsed, opts, {\n zone: interpretationZone,\n // setZone is a valid option in the calling methods, but not in fromObject\n setZone: undefined\n })\n );\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\n// technical time formats (e.g. the time part of ISO 8601), take some options\n// and this commonizes their handling\nfunction toTechTimeFormat(\n dt,\n {\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset,\n includePrefix = false,\n includeZone = false,\n spaceZone = false,\n format = \"extended\"\n }\n) {\n let fmt = format === \"basic\" ? \"HHmm\" : \"HH:mm\";\n\n if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) {\n fmt += format === \"basic\" ? \"ss\" : \":ss\";\n if (!suppressMilliseconds || dt.millisecond !== 0) {\n fmt += \".SSS\";\n }\n }\n\n if ((includeZone || includeOffset) && spaceZone) {\n fmt += \" \";\n }\n\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += format === \"basic\" ? \"ZZZ\" : \"ZZ\";\n }\n\n let str = toTechFormat(dt, fmt);\n\n if (includePrefix) {\n str = \"T\" + str;\n }\n\n return str;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\"\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\"\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, zone) {\n // assume we have the higher-order units\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const tsNow = Settings.now(),\n offsetProvis = zone.offset(tsNow),\n [ts, o] = objToTS(obj, offsetProvis, zone);\n\n return new DateTime({\n ts,\n zone,\n o\n });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = unit => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end\n .startOf(unit)\n .diff(start.startOf(unit), unit)\n .get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month},\n * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors.\n * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n const ot = zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12) //~> 2017-03-12T00:00:00\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return DateTime.now();\n } else {\n return quickDT(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n },\n Settings.defaultZone\n );\n }\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z\n * @return {DateTime}\n */\n static utc(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return new DateTime({\n ts: Settings.now(),\n zone: FixedOffsetZone.utcInstance\n });\n } else {\n return quickDT(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n },\n FixedOffsetZone.utcInstance\n );\n }\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options)\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @return {DateTime}\n */\n static fromObject(obj) {\n const zoneToUse = normalizeZone(obj.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const tsNow = Settings.now(),\n offsetProvis = zoneToUse.offset(tsNow),\n normalized = normalizeObject(obj, normalizeUnit, [\n \"zone\",\n \"locale\",\n \"outputCalendar\",\n \"numberingSystem\"\n ]),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n loc = Locale.fromObject(obj);\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n }),\n [vals, parsedZone, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is a DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.universal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1 }).offset || this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOpts(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link reconfigure} and {@link setZone}.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnit, []),\n settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized));\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized));\n } else {\n mixed = Object.assign(this.toObject(), normalized);\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = friendlyDuration(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = friendlyDuration(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit) {\n if (!this.isValid) return this;\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n o.weekday = 1;\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(opts = Formats.DATE_SHORT) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @return {string}\n */\n toISO(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toISODate(opts)}T${this.toISOTime(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @return {string}\n */\n toISODate({ format = \"extended\" } = {}) {\n let fmt = format === \"basic\" ? \"yyyyMMdd\" : \"yyyy-MM-dd\";\n if (this.year > 9999) {\n fmt = \"+\" + fmt;\n }\n\n return toTechFormat(this, fmt);\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n format = \"extended\"\n } = {}) {\n return toTechTimeFormat(this, {\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n includePrefix,\n format\n });\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n toSQLDate() {\n return toTechFormat(this, \"yyyy-MM-dd\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false } = {}) {\n return toTechTimeFormat(this, {\n includeOffset,\n includeZone,\n spaceZone: true\n });\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = Object.assign({}, this.c);\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\n this.invalid || otherDateTime.invalid,\n \"created by diffing an invalid DateTime\"\n );\n }\n\n const durOpts = Object.assign(\n { locale: this.locale, numberingSystem: this.numberingSystem },\n opts\n );\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const otherZoneDateTime = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return otherZoneDateTime.startOf(unit) <= inputMs && inputMs <= otherZoneDateTime.endOf(unit);\n }\n\n /**\n * Equality check\n * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({ zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(\n base,\n this.plus(padding),\n Object.assign(options, {\n numeric: \"always\",\n units,\n unit\n })\n );\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(\n options.base || DateTime.fromObject({ zone: this.zone }),\n this,\n Object.assign(options, {\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true\n })\n );\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, i => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, i => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n", "import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport LocalZone from \"./zones/localZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"1.28.1\";\n\nexport {\n VERSION,\n DateTime,\n Duration,\n Interval,\n Info,\n Zone,\n FixedOffsetZone,\n IANAZone,\n InvalidZone,\n LocalZone,\n Settings\n};\n", "/**\n * Bkper REST API Javascript client for Node.js and browsers.\n *\n * Learn more at https://bkper.com/docs\n *\n * @packageDocumentation\n */\nexport { Account } from './model/Account.js';\nexport { AccountsDataTableBuilder } from './builders/AccountsDataTableBuilder.js';\nexport { Agent } from './model/Agent.js';\nexport { Amount } from './model/Amount.js';\nexport { App } from './model/App.js';\nexport { Backlog } from './model/Backlog.js';\nexport { Balance } from './model/Balance.js';\nexport { BalancesDataTableBuilder } from './builders/BalancesDataTableBuilder.js';\nexport { BalancesReport } from './model/BalancesReport.js';\nexport { Billing } from './model/Billing.js';\nexport { Bkper } from './model/Bkper.js';\nexport { Book } from './model/Book.js';\nexport { BooksDataTableBuilder } from './builders/BooksDataTableBuilder.js';\nexport { Collaborator } from './model/Collaborator.js';\nexport { Collection } from './model/Collection.js';\nexport { Connection } from './model/Connection.js';\nexport { File } from './model/File.js';\nexport { Group } from './model/Group.js';\nexport { GroupsDataTableBuilder } from './builders/GroupsDataTableBuilder.js';\nexport { Integration } from './model/Integration.js';\nexport { Query } from './model/Query.js';\nexport { Template } from './model/Template.js';\nexport { Transaction } from './model/Transaction.js';\nexport { TransactionList } from './model/TransactionList.js';\nexport { TransactionsDataTableBuilder } from './builders/TransactionsDataTableBuilder.js';\nexport { Event } from './model/Event.js';\nexport { BotResponse } from './model/BotResponse.js';\nexport { EventList } from './model/EventList.js';\nexport { User } from './model/User.js';\nexport { Periodicity, DecimalSeparator, Permission, Visibility, AccountType, BalanceType, Period, Month, EventType, BotResponseType, TransactionStatus, } from './model/Enums.js';\nexport { BkperError } from './model/BkperError.js';\n//# sourceMappingURL=index.js.map", "/**\n * Standard error class for Bkper API errors.\n * Extends Error to enable instanceof checks and standard error handling.\n *\n * @public\n */\nexport class BkperError extends Error {\n constructor(code, message, reason) {\n super(message);\n this.name = 'BkperError';\n this.code = code;\n this.reason = reason;\n }\n}\n//# sourceMappingURL=BkperError.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nexport class HttpRequest {\n constructor(url) {\n this.params = [];\n this.headers = {};\n this.method = 'GET';\n this.payload = null;\n this.url = url;\n }\n setMethod(method) {\n this.method = method;\n return this;\n }\n setHeader(name, value) {\n this.headers[name] = value;\n return this;\n }\n addParam(name, value) {\n this.params.push({ name, value });\n return this;\n }\n setPayload(payload) {\n this.payload = payload;\n return this;\n }\n /**\n * Gets the result url, with query params appended.\n */\n getUrl() {\n let url = this.url;\n if (this.params != null) {\n let i = 0;\n if (url.indexOf('?') < 0) {\n url += '?';\n }\n else {\n i++;\n }\n for (const param of this.params) {\n if (i > 0) {\n url += \"&\";\n }\n var key = param.name;\n var value = param.value;\n if (value != null) {\n url += key + \"=\" + encodeURIComponent(value);\n i++;\n }\n }\n }\n return url;\n }\n execute() {\n return __awaiter(this, void 0, void 0, function* () {\n const url = this.getUrl();\n const fetchOptions = {\n method: this.method,\n headers: this.headers,\n };\n // Add body for non-GET requests\n if (this.payload && this.method !== 'GET') {\n if (typeof this.payload === 'string') {\n fetchOptions.body = this.payload;\n }\n else {\n fetchOptions.body = JSON.stringify(this.payload);\n // Ensure content-type is set for JSON payloads\n if (!this.headers['Content-Type'] && !this.headers['content-type']) {\n fetchOptions.headers = Object.assign(Object.assign({}, this.headers), { 'Content-Type': 'application/json' });\n }\n }\n }\n const response = yield fetch(url, fetchOptions);\n // Parse response body\n let data;\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n data = yield response.json();\n }\n else {\n data = yield response.text();\n }\n // Return axios-compatible response structure\n return {\n data: data,\n status: response.status,\n headers: response.headers\n };\n });\n }\n}\n//# sourceMappingURL=http-request.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { BkperError } from \"../model/BkperError.js\";\nimport { HttpRequest } from \"./http-request.js\";\n/**\n * The official Bkper API base URL.\n */\nexport const API_BASE_URL = \"https://api.bkper.app\";\n/**\n * Resolves the base URL based on config.\n */\nexport function resolveBaseUrl(config) {\n if (config.apiBaseUrl) {\n return config.apiBaseUrl;\n }\n return API_BASE_URL;\n}\nexport class HttpApiRequest extends HttpRequest {\n constructor(path, config) {\n const baseUrl = resolveBaseUrl(config);\n super(`${baseUrl}/${path}`);\n this.retry = 0;\n this.config = config;\n }\n fetch() {\n const _super = Object.create(null, {\n execute: { get: () => super.execute }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.addCustomHeaders();\n yield this.addAgentIdHeader();\n this.setHeader(\"Authorization\", `Bearer ${yield this.getAccessToken()}`);\n yield this.addApiKeyHeader();\n try {\n let resp = yield _super.execute.call(this);\n if (resp.status >= 200 && resp.status < 300) {\n return resp;\n }\n else if (resp.status == 404) {\n const errorObj = {\n response: {\n status: resp.status,\n data: resp.data,\n },\n };\n throw this.handleError(errorObj);\n }\n else if (resp.status != 400 && this.retry <= 3) {\n this.retry++;\n const effectiveConfig = this.config;\n if (effectiveConfig.requestRetryHandler) {\n yield effectiveConfig.requestRetryHandler(resp.status, resp.data, this.retry);\n }\n else {\n console.log(`${JSON.stringify(resp.data)} - Retrying... `);\n }\n return yield this.fetch();\n }\n else {\n // Create an error object that matches axios error structure for compatibility\n const errorObj = {\n response: {\n status: resp.status,\n data: resp.data,\n },\n };\n throw this.handleError(errorObj);\n }\n }\n catch (error) {\n // If error already has response structure (from our code above), use it\n if (error.response) {\n throw error;\n }\n // Network error or fetch failure\n if (error instanceof TypeError && error.message.includes(\"fetch\")) {\n // Network error - retry if within retry limit\n if (this.retry <= 3) {\n this.retry++;\n const effectiveConfig = this.config;\n if (effectiveConfig.requestRetryHandler) {\n yield effectiveConfig.requestRetryHandler(520, undefined, this.retry);\n }\n else {\n console.log(`Network error - Retrying... `);\n }\n return yield this.fetch();\n }\n }\n throw this.handleError(error);\n }\n });\n }\n handleError(err) {\n var _a, _b, _c, _d, _e, _f, _g;\n const effectiveConfig = this.config;\n const customError = effectiveConfig.requestErrorHandler\n ? effectiveConfig.requestErrorHandler(err)\n : undefined;\n if (customError) {\n return customError;\n }\n else {\n // Read internal HttpError from response\n let error = ((_b = (_a = err.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.error) || ((_c = err.data) === null || _c === void 0 ? void 0 : _c.error) || err.error;\n if (error) {\n // Transform to BkperError\n return new BkperError(error.code, error.message, (_e = (_d = error.errors) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.reason);\n }\n else {\n // Fallback for network errors, etc.\n return new BkperError(((_f = err.response) === null || _f === void 0 ? void 0 : _f.status) || ((_g = err.response) === null || _g === void 0 ? void 0 : _g.code) || err.status || err.code || 0, err.message || String(err), undefined);\n }\n }\n }\n addCustomHeaders() {\n return __awaiter(this, void 0, void 0, function* () {\n const effectiveConfig = this.config;\n if (effectiveConfig.requestHeadersProvider) {\n const headers = yield effectiveConfig.requestHeadersProvider();\n Object.entries(headers).forEach(([key, value]) => this.setHeader(key, value));\n }\n });\n }\n addAgentIdHeader() {\n return __awaiter(this, void 0, void 0, function* () {\n const effectiveConfig = this.config;\n if (effectiveConfig.agentIdProvider) {\n const agentId = yield effectiveConfig.agentIdProvider();\n if (agentId) {\n this.setHeader(\"bkper-agent-id\", agentId);\n }\n }\n });\n }\n addApiKeyHeader() {\n return __awaiter(this, void 0, void 0, function* () {\n const effectiveConfig = this.config;\n if (effectiveConfig.apiKeyProvider) {\n const apiKey = yield effectiveConfig.apiKeyProvider();\n if (apiKey) {\n this.setHeader(\"bkper-api-key\", apiKey);\n }\n }\n });\n }\n getAccessToken() {\n return __awaiter(this, void 0, void 0, function* () {\n let token = undefined;\n const effectiveConfig = this.config;\n if (effectiveConfig.oauthTokenProvider) {\n token = yield effectiveConfig.oauthTokenProvider();\n }\n else {\n console.warn(`Token provider NOT configured!`);\n }\n if (token) {\n token = token.replace(\"Bearer \", \"\");\n token = token.replace(\"bearer \", \"\");\n }\n return token;\n });\n }\n}\nexport class HttpBooksApiV5Request extends HttpApiRequest {\n constructor(service, config) {\n super(`v5/books/${service}`, config);\n }\n}\nexport class HttpApiV5Request extends HttpApiRequest {\n constructor(service, config) {\n super(`v5/${service}`, config);\n }\n}\n//# sourceMappingURL=http-api-request.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from './http-api-request.js';\nexport function createAccount(bookId, account, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/accounts`, config).setMethod('POST').setPayload(account).fetch();\n return response.data;\n });\n}\nexport function createAccounts(bookId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/accounts/batch`, config).setMethod('POST').setPayload(payload).fetch();\n return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function updateAccount(bookId, account, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var payload = account;\n var response = yield new HttpBooksApiV5Request(`${bookId}/accounts`, config).setMethod('PUT').setPayload(payload).fetch();\n return response.data;\n });\n}\nexport function updateAccounts(bookId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/accounts/batch`, config).setMethod('PUT').setPayload(payload).fetch();\n return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function deleteAccount(bookId, account, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/accounts/${account.id}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\nexport function deleteAccounts(bookId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/accounts/delete/batch`, config).setMethod('POST').setPayload(payload).fetch();\n return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function getAccount(bookId, idOrName, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/accounts/${encodeURIComponent(idOrName)}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function getAccounts(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpBooksApiV5Request(`${bookId}/accounts`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\n//# sourceMappingURL=account-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function createGroup(bookId, group, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups`, config).setMethod('POST').setPayload(group).fetch();\n return response.data;\n });\n}\nexport function createGroups(bookId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/groups/batch`, config).setMethod('POST').setPayload(payload).fetch();\n return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function updateGroup(bookId, group, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups`, config).setMethod('PUT').setPayload(group).fetch();\n return response.data;\n });\n}\nexport function deleteGroup(bookId, group, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups/${group.id}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\nexport function getGroupsByAccountId(bookId, accountId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n var response = yield new HttpBooksApiV5Request(`${bookId}/accounts/${accountId}/groups`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function getGroups(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups`, config).setMethod('GET').fetch();\n var groupsPlain = response.data;\n if (!(groupsPlain === null || groupsPlain === void 0 ? void 0 : groupsPlain.items)) {\n return [];\n }\n return groupsPlain.items;\n });\n}\nexport function getGroup(bookId, idOrName, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups/${encodeURIComponent(idOrName)}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function getAccounts(bookId, idOrName, config) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!idOrName) {\n return [];\n }\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups/${encodeURIComponent(idOrName)}/accounts`, config).setMethod('GET').fetch();\n var accountsPlain = response.data;\n if (!(accountsPlain === null || accountsPlain === void 0 ? void 0 : accountsPlain.items)) {\n return [];\n }\n return accountsPlain.items;\n });\n}\n//# sourceMappingURL=group-service.js.map", "import { DateTime } from 'luxon';\nimport { Amount } from './model/Amount.js';\nimport { DecimalSeparator, Periodicity } from './model/Enums.js';\nexport const NODE_ENV_DEV = 'development';\nexport function sleep(ms) {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\nexport function base64Decode(data) {\n return atob(data);\n}\nexport function repeatString(text, times) {\n if (times <= 0) {\n return '';\n }\n if (times === 1) {\n return text;\n }\n return text + repeatString(text, times - 1);\n}\nexport function extractTagsFromText(text) {\n if (!text || typeof text !== 'string') {\n return [];\n }\n const tagRegex = /#([a-zA-Z0-9_]+)/g;\n const tagsSet = new Set();\n let match;\n while ((match = tagRegex.exec(text)) !== null) {\n if (match[1]) {\n tagsSet.add(match[1]);\n }\n }\n return Array.from(tagsSet);\n}\n//SAME AS bkper-app\nvar diacriticsMap_ = null;\nexport function round(number, fractionDigits) {\n if (number == null) {\n number = new Amount('0');\n }\n if (fractionDigits) {\n return new Amount(number).round(fractionDigits);\n }\n else {\n return new Amount(number).round(2);\n }\n}\nexport function formatValue(value, decimalSeparator, fractionDigits) {\n if (value == null) {\n return '';\n }\n if (typeof value == 'string') {\n if (value.trim() == '') {\n return '';\n }\n value = new Amount(value);\n }\n if (value == null) {\n return '';\n }\n if (fractionDigits == null) {\n fractionDigits = 2;\n }\n var formattedValue = value.toFixed(fractionDigits) + '';\n if (decimalSeparator == DecimalSeparator.DOT) {\n return formattedValue.replace(/\\,/g, '.');\n }\n else {\n return formattedValue.replace(/\\./g, ',');\n }\n}\nexport function parseValue(value, decimalSeparator) {\n if (value == null) {\n return undefined;\n }\n if (!isNaN(+value) && isFinite(+value)) {\n return new Amount(value);\n }\n if (decimalSeparator == DecimalSeparator.DOT) {\n value = value.replace(/\\,/g, '');\n }\n else {\n value = value.replace(/\\./g, '').replace(/\\,/g, '.');\n }\n try {\n return new Amount(value);\n }\n catch (err) {\n return undefined;\n }\n}\nexport function convertValueToDate(dateValue, offsetInMinutes) {\n if (!dateValue) {\n return new Date();\n }\n var year = dateValue / 10000;\n var month = (dateValue / 100) % 100;\n var day = dateValue % 100;\n var date = createDate(year, month, day, offsetInMinutes);\n return date;\n}\nexport function isString(obj) {\n if (obj == null) {\n return false;\n }\n if (typeof obj === 'string' || obj instanceof String) {\n return true;\n }\n else {\n return false;\n }\n}\nexport function createDate(year, month, day, offsetInMinutes) {\n var date = new Date(year, month - 1, day);\n if (!offsetInMinutes) {\n offsetInMinutes = 0;\n }\n date.setTime(date.getTime() + offsetInMinutes * 60 * 1000);\n return date;\n}\nexport function formatDate(date, pattern, timeZone) {\n if (date == null || !(Object.prototype.toString.call(date) === '[object Date]')) {\n return '';\n }\n if (!timeZone || timeZone == '') {\n timeZone = 'UTC';\n }\n if (!pattern) {\n return formatDateISO(date, timeZone);\n }\n return DateTime.fromJSDate(date, { zone: timeZone }).toFormat(pattern);\n}\nexport function formatDateISO(date, timeZone) {\n if (date == null || !(Object.prototype.toString.call(date) === '[object Date]')) {\n return '';\n }\n if (!timeZone || timeZone == '') {\n timeZone = 'UTC';\n }\n return DateTime.fromJSDate(date, { zone: timeZone }).toISODate();\n}\nexport function getIsoDateValue(date) {\n return +date.replace(/-/g, '');\n}\nexport function parseDate(date, pattern, timeZone) {\n if (!pattern) {\n pattern = 'yyyy-MM-dd';\n }\n let dateObject = DateTime.fromFormat(date, pattern, { zone: timeZone }).toJSDate();\n if (dateObject instanceof Date && !isNaN(dateObject.getTime())) {\n return dateObject;\n }\n else {\n return DateTime.fromFormat(date, 'yyyy-MM-dd', { zone: timeZone }).toJSDate();\n }\n}\nexport function getDateFormatterPattern(datePattern, periodicity) {\n var pattern = datePattern;\n if (periodicity == Periodicity.MONTHLY) {\n pattern = 'MM/yyyy';\n }\n if (periodicity == Periodicity.YEARLY) {\n pattern = 'yyyy';\n }\n return pattern;\n}\nexport function getRepresentativeValue(value, credit) {\n if (value == null) {\n return new Amount(0);\n }\n if (credit != null && !credit) {\n return value.times(-1);\n }\n return value;\n}\n// export function wrapObjects<E extends Object>(wrapper: E, wrappeds: Array<Object>): Array<E> {\n// var newObjects = [];\n// if (wrappeds != null) {\n// for (var i = 0; i < wrappeds.length; i++) {\n// var newObject = wrapObject(wrapper, wrappeds[i]);\n// newObjects.push(newObject);\n// }\n// }\n// return newObjects;\n// }\n// export function wrapObject<E extends Object>(wrapper: E, wrapped: Object): E {\n// if (wrapped == null) {\n// wrapped = new Object();\n// }\n// var w = Object.create(wrapper);\n// w.wrapped = wrapped;\n// return w;\n// }\nexport function buildURLParams(params) {\n var urlSegment = '';\n var i = 0;\n for (var prop in params) {\n if (params.hasOwnProperty(prop)) {\n if (i > 0) {\n urlSegment += '&';\n }\n var name = prop;\n var value = params[prop];\n if (value != null) {\n urlSegment += name + '=' + encodeURIComponent(value);\n i++;\n }\n }\n }\n return urlSegment;\n}\nexport function convertInMatrix(array) {\n var maxLength = 0;\n for (var i = 0; i < array.length; i++) {\n if (array[i].length > maxLength) {\n maxLength = array[i].length;\n }\n }\n for (var i = 0; i < array.length; i++) {\n while (array[i].length < maxLength) {\n array[i].push(null);\n }\n }\n return array;\n}\nexport function normalizeName(name) {\n return normalizeText(name, '_');\n}\nexport function normalizeText(text, spaceReplacement) {\n if (!text || typeof text != 'string') {\n return '';\n }\n if (spaceReplacement) {\n text = text.replace(new RegExp(spaceReplacement, 'g'), ' ');\n }\n text = text.replace(new RegExp('-', 'g'), ' ');\n text = text.replace(/ +(?= )/g, '');\n text = removeDiacritics(text.trim().toLowerCase());\n if (spaceReplacement) {\n text = text.replace(new RegExp(' ', 'g'), spaceReplacement);\n }\n return text;\n}\nfunction removeDiacritics(str) {\n var letters = str.split('');\n var newStr = '';\n for (var i = 0; i < letters.length; i++) {\n newStr += letters[i] in getDiacriticsMap_() ? getDiacriticsMap_()[letters[i]] : letters[i];\n }\n return newStr;\n}\nfunction getDiacriticsMap_() {\n if (diacriticsMap_ == null) {\n diacriticsMap_ = {};\n for (var i = 0; i < defaultDiacriticsRemovalap_.length; i++) {\n var letters = defaultDiacriticsRemovalap_[i].letters.split('');\n for (var j = 0; j < letters.length; j++) {\n diacriticsMap_[letters[j]] = defaultDiacriticsRemovalap_[i].base;\n }\n }\n }\n return diacriticsMap_;\n}\nvar defaultDiacriticsRemovalap_ = [\n {\n base: 'A',\n letters: '\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F',\n },\n { base: 'AA', letters: '\\uA732' },\n { base: 'AE', letters: '\\u00C6\\u01FC\\u01E2' },\n { base: 'AO', letters: '\\uA734' },\n { base: 'AU', letters: '\\uA736' },\n { base: 'AV', letters: '\\uA738\\uA73A' },\n { base: 'AY', letters: '\\uA73C' },\n { base: 'B', letters: '\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181' },\n {\n base: 'C',\n letters: '\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E',\n },\n {\n base: 'D',\n letters: '\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779',\n },\n { base: 'DZ', letters: '\\u01F1\\u01C4' },\n { base: 'Dz', letters: '\\u01F2\\u01C5' },\n {\n base: 'E',\n letters: '\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E',\n },\n { base: 'F', letters: '\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B' },\n {\n base: 'G',\n letters: '\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E',\n },\n {\n base: 'H',\n letters: '\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D',\n },\n {\n base: 'I',\n letters: '\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197',\n },\n { base: 'J', letters: '\\u004A\\u24BF\\uFF2A\\u0134\\u0248' },\n {\n base: 'K',\n letters: '\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2',\n },\n {\n base: 'L',\n letters: '\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780',\n },\n { base: 'LJ', letters: '\\u01C7' },\n { base: 'Lj', letters: '\\u01C8' },\n { base: 'M', letters: '\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C' },\n {\n base: 'N',\n letters: '\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4',\n },\n { base: 'NJ', letters: '\\u01CA' },\n { base: 'Nj', letters: '\\u01CB' },\n {\n base: 'O',\n letters: '\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C',\n },\n { base: 'OI', letters: '\\u01A2' },\n { base: 'OO', letters: '\\uA74E' },\n { base: 'OU', letters: '\\u0222' },\n { base: 'P', letters: '\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754' },\n { base: 'Q', letters: '\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A' },\n {\n base: 'R',\n letters: '\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782',\n },\n {\n base: 'S',\n letters: '\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784',\n },\n {\n base: 'T',\n letters: '\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786',\n },\n { base: 'TZ', letters: '\\uA728' },\n {\n base: 'U',\n letters: '\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244',\n },\n { base: 'V', letters: '\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245' },\n { base: 'VY', letters: '\\uA760' },\n { base: 'W', letters: '\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72' },\n { base: 'X', letters: '\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C' },\n {\n base: 'Y',\n letters: '\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE',\n },\n {\n base: 'Z',\n letters: '\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762',\n },\n {\n base: 'a',\n letters: '\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250',\n },\n { base: 'aa', letters: '\\uA733' },\n { base: 'ae', letters: '\\u00E6\\u01FD\\u01E3' },\n { base: 'ao', letters: '\\uA735' },\n { base: 'au', letters: '\\uA737' },\n { base: 'av', letters: '\\uA739\\uA73B' },\n { base: 'ay', letters: '\\uA73D' },\n { base: 'b', letters: '\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253' },\n {\n base: 'c',\n letters: '\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184',\n },\n {\n base: 'd',\n letters: '\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A',\n },\n { base: 'dz', letters: '\\u01F3\\u01C6' },\n {\n base: 'e',\n letters: '\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD',\n },\n { base: 'f', letters: '\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C' },\n {\n base: 'g',\n letters: '\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F',\n },\n {\n base: 'h',\n letters: '\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265',\n },\n { base: 'hv', letters: '\\u0195' },\n {\n base: 'i',\n letters: '\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131',\n },\n { base: 'j', letters: '\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249' },\n {\n base: 'k',\n letters: '\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3',\n },\n {\n base: 'l',\n letters: '\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747',\n },\n { base: 'lj', letters: '\\u01C9' },\n { base: 'm', letters: '\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F' },\n {\n base: 'n',\n letters: '\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5',\n },\n { base: 'nj', letters: '\\u01CC' },\n {\n base: 'o',\n letters: '\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275',\n },\n { base: 'oi', letters: '\\u01A3' },\n { base: 'ou', letters: '\\u0223' },\n { base: 'oo', letters: '\\uA74F' },\n { base: 'p', letters: '\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755' },\n { base: 'q', letters: '\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759' },\n {\n base: 'r',\n letters: '\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783',\n },\n {\n base: 's',\n letters: '\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B',\n },\n {\n base: 't',\n letters: '\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787',\n },\n { base: 'tz', letters: '\\uA729' },\n {\n base: 'u',\n letters: '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289',\n },\n { base: 'v', letters: '\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C' },\n { base: 'vy', letters: '\\uA761' },\n { base: 'w', letters: '\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73' },\n { base: 'x', letters: '\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D' },\n {\n base: 'y',\n letters: '\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF',\n },\n {\n base: 'z',\n letters: '\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763',\n },\n];\n//# sourceMappingURL=utils.js.map", "/*\r\n * big.js v6.2.2\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2024 Michael Mclaughlin\r\n * https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\nvar DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n /*\r\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n * primitive number without a loss of precision.\r\n */\r\n STRICT = false, // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n if (typeof n !== 'string') {\r\n if (Big.strict === true && typeof n !== 'bigint') {\r\n throw TypeError(INVALID + 'value');\r\n }\r\n\r\n // Minus zero?\r\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n }\r\n\r\n parse(x, n);\r\n }\r\n\r\n // Retain a reference to this Big constructor.\r\n // Shadow Big.prototype.constructor which points to Object.\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.strict = STRICT;\r\n Big.roundDown = 0;\r\n Big.roundHalfUp = 1;\r\n Big.roundHalfEven = 2;\r\n Big.roundUp = 3;\r\n\r\n return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n var e, i, nl;\r\n\r\n if (!NUMERIC.test(n)) {\r\n throw Error(INVALID + 'number');\r\n }\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n var xc = x.c;\r\n\r\n if (rm === UNDEFINED) rm = x.constructor.RM;\r\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n if (sd < 1) {\r\n more =\r\n rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n rm === 1 && xc[0] >= 5 ||\r\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n );\r\n\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = x.e - sd + 1;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else if (sd < xc.length) {\r\n\r\n // xc[sd] is the digit after the digit that may be rounded up.\r\n more =\r\n rm === 1 && xc[sd] >= 5 ||\r\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n rm === 3 && (more || !!xc[0]);\r\n\r\n // Remove any digits after the required precision.\r\n xc.length = sd;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[--sd] > 9;) {\r\n xc[sd] = 0;\r\n if (sd === 0) {\r\n ++x.e;\r\n xc.unshift(1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (sd = xc.length; !xc[--sd];) xc.pop();\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n var e = x.e,\r\n s = x.c.join(''),\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (doExponential) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) {\r\n for (e -= n; e--;) s += '0';\r\n } else if (e < n) {\r\n s = s.slice(0, e) + '.' + s.slice(e);\r\n }\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n\r\n // Divisor is zero?\r\n if (!b[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) {\r\n y.s = k;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n p = dp + (q.e = x.e - y.e) + 1; // precision of the result\r\n\r\n q.s = k;\r\n k = p < 0 ? 0 : p;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n p--;\r\n }\r\n\r\n // Round?\r\n if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (yc[0]) {\r\n y.s = -b;\r\n } else if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = 1;\r\n }\r\n return y;\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n var e, k, t,\r\n x = this,\r\n Big = x.constructor;\r\n\r\n y = new Big(y);\r\n\r\n // Signs differ?\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (!yc[0]) {\r\n if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = x.s;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (e = xe - ye) {\r\n if (e > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n e = -e;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; e--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n e = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (k) {\r\n xc.unshift(k);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor('1'),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n throw Error(INVALID + 'exponent');\r\n }\r\n\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big('0.5');\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) {\r\n throw Error(NAME + 'No square root');\r\n }\r\n\r\n // Estimate.\r\n s = Math.sqrt(+stringify(x, true, true));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s + '');\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) {\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = b;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), ++dp, rm);\r\n for (; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n // x.e may have changed if the value is rounded up.\r\n for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON = P.toString = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitve number.\r\n */\r\nP.toNumber = function () {\r\n var n = +stringify(this, true, true);\r\n if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n throw Error(NAME + 'Imprecise conversion');\r\n }\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var x = this,\r\n Big = x.constructor,\r\n n = x.c[0];\r\n\r\n if (sd !== UNDEFINED) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n x = round(new Big(x), sd, rm);\r\n for (; x.c.length < sd;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n if (Big.strict === true) {\r\n throw Error(NAME + 'valueOf disallowed');\r\n }\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n", "import Big from \"big.js\";\n/**\n * This class defines an Amount for arbitrary-precision decimal arithmetic.\n *\n * It inherits methods from [big.js](http://mikemcl.github.io/big.js/) library\n *\n * @public\n */\nexport class Amount {\n /**\n * The Amount constructor.\n *\n * @param n - The number, string, or Amount to initialize with\n */\n constructor(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n this.big = new Big(n);\n }\n else if (n instanceof Amount) {\n this.big = new Big(n.big);\n }\n else if (n.toString) {\n this.big = new Big(n.toString());\n }\n else {\n this.big = new Big(+n);\n }\n }\n /**\n * Returns an absolute Amount.\n *\n * @returns The absolute value as a new Amount\n */\n abs() {\n let big = this.big.abs();\n return this.wrap(big);\n }\n /**\n * Compares this Amount with another value.\n *\n * @param n - The value to compare with\n *\n * @returns -1 if less than, 0 if equal, 1 if greater than\n */\n cmp(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.cmp(n);\n }\n else if (n instanceof Amount) {\n return this.big.cmp(n.big);\n }\n else if (n.toString) {\n return this.big.cmp(n.toString());\n }\n else {\n return this.big.cmp(+n);\n }\n }\n /**\n * Divides this Amount by another value.\n *\n * @param n - The divisor value\n *\n * @returns The division result as a new Amount\n */\n div(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.div(n);\n }\n else if (n instanceof Amount) {\n big = this.big.div(n.big);\n }\n else if (n.toString) {\n big = this.big.div(n.toString());\n }\n else {\n big = this.big.div(+n);\n }\n return this.wrap(big);\n }\n /**\n * Checks if this Amount equals another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if equal, false otherwise\n */\n eq(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.eq(n);\n }\n else if (n instanceof Amount) {\n return this.big.eq(n.big);\n }\n else if (n.toString) {\n return this.big.eq(n.toString());\n }\n else {\n return this.big.eq(+n);\n }\n }\n /**\n * Checks if this Amount is greater than another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if greater than, false otherwise\n */\n gt(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.gt(n);\n }\n else if (n instanceof Amount) {\n return this.big.gt(n.big);\n }\n else if (n.toString) {\n return this.big.gt(n.toString());\n }\n else {\n return this.big.gt(+n);\n }\n }\n /**\n * Checks if this Amount is greater than or equal to another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if greater than or equal, false otherwise\n */\n gte(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.gte(n);\n }\n else if (n instanceof Amount) {\n return this.big.gte(n.big);\n }\n else if (n.toString) {\n return this.big.gte(n.toString());\n }\n else {\n return this.big.gte(+n);\n }\n }\n /**\n * Checks if this Amount is less than another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if less than, false otherwise\n */\n lt(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.lt(n);\n }\n else if (n instanceof Amount) {\n return this.big.lt(n.big);\n }\n else if (n.toString) {\n return this.big.lt(n.toString());\n }\n else {\n return this.big.lt(+n);\n }\n }\n /**\n * Checks if this Amount is less than or equal to another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if less than or equal, false otherwise\n */\n lte(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.lte(n);\n }\n else if (n instanceof Amount) {\n return this.big.lte(n.big);\n }\n else if (n.toString) {\n return this.big.lte(n.toString());\n }\n else {\n return this.big.lte(+n);\n }\n }\n /**\n * Adds another value to this Amount.\n *\n * @param n - The value to add\n *\n * @returns The sum as a new Amount\n */\n plus(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.plus(n);\n }\n else if (n instanceof Amount) {\n big = this.big.plus(n.big);\n }\n else if (n.toString) {\n big = this.big.plus(n.toString());\n }\n else {\n big = this.big.plus(+n);\n }\n return this.wrap(big);\n }\n /**\n * Subtracts another value from this Amount.\n *\n * @param n - The value to subtract\n *\n * @returns The difference as a new Amount\n */\n minus(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.minus(n);\n }\n else if (n instanceof Amount) {\n big = this.big.minus(n.big);\n }\n else if (n.toString) {\n big = this.big.minus(n.toString());\n }\n else {\n big = this.big.minus(+n);\n }\n return this.wrap(big);\n }\n /**\n * Calculates the modulo (remainder) of dividing this Amount by another value.\n *\n * Similar to % operator\n *\n * @param n - The divisor value\n *\n * @returns The remainder as a new Amount\n */\n mod(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.mod(n);\n }\n else if (n instanceof Amount) {\n big = this.big.mod(n.big);\n }\n else if (n.toString) {\n big = this.big.mod(n.toString());\n }\n else {\n big = this.big.mod(+n);\n }\n return this.wrap(big);\n }\n /**\n * Rounds this Amount to a maximum of dp decimal places.\n *\n * @param dp - The number of decimal places (optional)\n *\n * @returns The rounded value as a new Amount\n */\n round(dp) {\n let big = this.big.round(dp);\n return this.wrap(big);\n }\n /**\n * Multiplies this Amount by another value.\n *\n * @param n - The value to multiply by\n *\n * @returns The product as a new Amount\n */\n times(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.times(n);\n }\n else if (n instanceof Amount) {\n big = this.big.times(n.big);\n }\n else if (n.toString) {\n big = this.big.times(n.toString());\n }\n else {\n big = this.big.times(+n);\n }\n return this.wrap(big);\n }\n /**\n * Returns a string representing the value of this Amount in normal notation to a fixed number of decimal places.\n *\n * @param dp - The number of decimal places (optional)\n *\n * @returns The formatted string representation\n */\n toFixed(dp) {\n return this.big.toFixed(dp);\n }\n /**\n * Returns a string representing the value of this Amount.\n *\n * @returns The string representation of this Amount\n */\n toString() {\n return this.big.toString();\n }\n /**\n * Returns a primitive number representing the value of this Amount.\n *\n * @returns The numeric value of this Amount\n */\n toNumber() {\n return this.big.toNumber();\n }\n /** @internal */\n checkNumberNotNull(amount) {\n if (amount == null) {\n throw new Error(`Invalid number: null`);\n }\n }\n /** @internal */\n static create() {\n return Object.create(this.prototype);\n }\n /** @internal */\n wrap(big) {\n let amount = Amount.create();\n amount.big = big;\n return amount;\n }\n}\n//# sourceMappingURL=Amount.js.map", "/**\n * The Periodicity of the query. It may depend on the level of granularity you write the range params.\n *\n * @public\n */\nexport var Periodicity;\n(function (Periodicity) {\n /**\n * Example: after:25/01/1983, before:04/03/2013, after:$d-30, before:$d, after:$d-15/$m\n */\n Periodicity[\"DAILY\"] = \"DAILY\";\n /**\n * Example: after:jan/2013, before:mar/2013, after:$m-1, before:$m\n */\n Periodicity[\"MONTHLY\"] = \"MONTHLY\";\n /**\n * Example: on:2013, after:2013, $y\n */\n Periodicity[\"YEARLY\"] = \"YEARLY\";\n})(Periodicity || (Periodicity = {}));\n/**\n * Decimal separator of numbers on book\n *\n * @public\n */\nexport var DecimalSeparator;\n(function (DecimalSeparator) {\n /**\n * ,\n */\n DecimalSeparator[\"COMMA\"] = \"COMMA\";\n /**\n * .\n */\n DecimalSeparator[\"DOT\"] = \"DOT\";\n})(DecimalSeparator || (DecimalSeparator = {}));\n/**\n * Enum representing permissions of user in the Book\n *\n * @public\n */\nexport var Permission;\n(function (Permission) {\n /**\n * No permission\n */\n Permission[\"NONE\"] = \"NONE\";\n /**\n * View transactions, accounts and balances.\n */\n Permission[\"VIEWER\"] = \"VIEWER\";\n /**\n * Record and delete drafts only. Useful to collect data only\n */\n Permission[\"RECORDER\"] = \"RECORDER\";\n /**\n * View transactions, accounts, record and delete drafts\n */\n Permission[\"POSTER\"] = \"POSTER\";\n /**\n * Manage accounts, transactions, book configuration and sharing\n */\n Permission[\"EDITOR\"] = \"EDITOR\";\n /**\n * Manage everything, including book visibility and deletion. Only one owner per book.\n */\n Permission[\"OWNER\"] = \"OWNER\";\n})(Permission || (Permission = {}));\n/**\n * Enum representing the visibility of a Book\n *\n * @public\n */\nexport var Visibility;\n(function (Visibility) {\n /**\n * The book can be accessed by anyone with the link\n */\n Visibility[\"PUBLIC\"] = \"PUBLIC\";\n /**\n * The book can be accessed by the owner and collaborators\n */\n Visibility[\"PRIVATE\"] = \"PRIVATE\";\n})(Visibility || (Visibility = {}));\n/**\n * Enum that represents account types.\n *\n * @public\n */\nexport var AccountType;\n(function (AccountType) {\n /**\n * Asset account type\n */\n AccountType[\"ASSET\"] = \"ASSET\";\n /**\n * Liability account type\n */\n AccountType[\"LIABILITY\"] = \"LIABILITY\";\n /**\n * Incoming account type\n */\n AccountType[\"INCOMING\"] = \"INCOMING\";\n /**\n * Outgoing account type\n */\n AccountType[\"OUTGOING\"] = \"OUTGOING\";\n})(AccountType || (AccountType = {}));\n/**\n * Enum that represents balance types.\n *\n * @public\n */\nexport var BalanceType;\n(function (BalanceType) {\n /**\n * Total balance\n */\n BalanceType[\"TOTAL\"] = \"TOTAL\";\n /**\n * Period balance\n */\n BalanceType[\"PERIOD\"] = \"PERIOD\";\n /**\n * Cumulative balance\n */\n BalanceType[\"CUMULATIVE\"] = \"CUMULATIVE\";\n})(BalanceType || (BalanceType = {}));\n/**\n * Enum that represents a period slice.\n *\n * @public\n */\nexport var Period;\n(function (Period) {\n /**\n * Monthly period\n */\n Period[\"MONTH\"] = \"MONTH\";\n /**\n * Quarterly period\n */\n Period[\"QUARTER\"] = \"QUARTER\";\n /**\n * Yearly period\n */\n Period[\"YEAR\"] = \"YEAR\";\n})(Period || (Period = {}));\n/**\n * Enum that represents a Month.\n *\n * @public\n */\nexport var Month;\n(function (Month) {\n Month[\"JANUARY\"] = \"JANUARY\";\n Month[\"FEBRUARY\"] = \"FEBRUARY\";\n Month[\"MARCH\"] = \"MARCH\";\n Month[\"APRIL\"] = \"APRIL\";\n Month[\"MAY\"] = \"MAY\";\n Month[\"JUNE\"] = \"JUNE\";\n Month[\"JULY\"] = \"JULY\";\n Month[\"AUGUST\"] = \"AUGUST\";\n Month[\"SEPTEMBER\"] = \"SEPTEMBER\";\n Month[\"OCTOBER\"] = \"OCTOBER\";\n Month[\"NOVEMBER\"] = \"NOVEMBER\";\n Month[\"DECEMBER\"] = \"DECEMBER\";\n})(Month || (Month = {}));\n/**\n * Enum that represents the status of a Transaction.\n *\n * @public\n */\nexport var TransactionStatus;\n(function (TransactionStatus) {\n /**\n * Transaction is in the trash\n */\n TransactionStatus[\"TRASHED\"] = \"TRASHED\";\n /**\n * Transaction is a draft, not yet posted\n */\n TransactionStatus[\"DRAFT\"] = \"DRAFT\";\n /**\n * Transaction is posted but not checked\n */\n TransactionStatus[\"UNCHECKED\"] = \"UNCHECKED\";\n /**\n * Transaction is posted and checked\n */\n TransactionStatus[\"CHECKED\"] = \"CHECKED\";\n})(TransactionStatus || (TransactionStatus = {}));\n/**\n * Enum that represents the type of a Bot Response\n *\n * @public\n */\nexport var BotResponseType;\n(function (BotResponseType) {\n /**\n * Info bot response\n */\n BotResponseType[\"INFO\"] = \"INFO\";\n /**\n * Warning bot response\n */\n BotResponseType[\"WARNING\"] = \"WARNING\";\n /**\n * Error bot response\n */\n BotResponseType[\"ERROR\"] = \"ERROR\";\n})(BotResponseType || (BotResponseType = {}));\n/**\n * Enum that represents event types.\n *\n * @public\n */\nexport var EventType;\n(function (EventType) {\n EventType[\"FILE_CREATED\"] = \"FILE_CREATED\";\n EventType[\"FILE_UPDATED\"] = \"FILE_UPDATED\";\n EventType[\"TRANSACTION_CREATED\"] = \"TRANSACTION_CREATED\";\n EventType[\"TRANSACTION_UPDATED\"] = \"TRANSACTION_UPDATED\";\n EventType[\"TRANSACTION_DELETED\"] = \"TRANSACTION_DELETED\";\n EventType[\"TRANSACTION_POSTED\"] = \"TRANSACTION_POSTED\";\n EventType[\"TRANSACTION_CHECKED\"] = \"TRANSACTION_CHECKED\";\n EventType[\"TRANSACTION_UNCHECKED\"] = \"TRANSACTION_UNCHECKED\";\n EventType[\"TRANSACTION_RESTORED\"] = \"TRANSACTION_RESTORED\";\n EventType[\"ACCOUNT_CREATED\"] = \"ACCOUNT_CREATED\";\n EventType[\"ACCOUNT_UPDATED\"] = \"ACCOUNT_UPDATED\";\n EventType[\"ACCOUNT_DELETED\"] = \"ACCOUNT_DELETED\";\n EventType[\"QUERY_CREATED\"] = \"QUERY_CREATED\";\n EventType[\"QUERY_UPDATED\"] = \"QUERY_UPDATED\";\n EventType[\"QUERY_DELETED\"] = \"QUERY_DELETED\";\n EventType[\"GROUP_CREATED\"] = \"GROUP_CREATED\";\n EventType[\"GROUP_UPDATED\"] = \"GROUP_UPDATED\";\n EventType[\"GROUP_DELETED\"] = \"GROUP_DELETED\";\n EventType[\"COMMENT_CREATED\"] = \"COMMENT_CREATED\";\n EventType[\"COMMENT_DELETED\"] = \"COMMENT_DELETED\";\n EventType[\"COLLABORATOR_ADDED\"] = \"COLLABORATOR_ADDED\";\n EventType[\"COLLABORATOR_UPDATED\"] = \"COLLABORATOR_UPDATED\";\n EventType[\"COLLABORATOR_REMOVED\"] = \"COLLABORATOR_REMOVED\";\n EventType[\"INTEGRATION_CREATED\"] = \"INTEGRATION_CREATED\";\n EventType[\"INTEGRATION_UPDATED\"] = \"INTEGRATION_UPDATED\";\n EventType[\"INTEGRATION_DELETED\"] = \"INTEGRATION_DELETED\";\n EventType[\"BOOK_UPDATED\"] = \"BOOK_UPDATED\";\n EventType[\"BOOK_DELETED\"] = \"BOOK_DELETED\";\n})(EventType || (EventType = {}));\n//# sourceMappingURL=Enums.js.map", "/**\n * Abstract base class for all Bkper resources.\n * Provides common functionality for config management and JSON serialization.\n *\n * @public\n */\nexport class Resource {\n /**\n * Constructs a new Resource\n * @param payload - The data payload for this resource\n */\n constructor(payload) {\n this.payload = payload || {};\n }\n /**\n * Gets an immutable copy of the JSON payload for this resource.\n * @returns An immutable copy of the json payload\n */\n json() {\n return Object.assign({}, this.payload);\n }\n}\n//# sourceMappingURL=Resource.js.map", "import { Resource } from \"./Resource.js\";\n/**\n * Abstract base class for Bkper resources that support custom properties.\n *\n * Extends Resource<T> and adds property management methods for entities\n * that have a properties field in their payload.\n *\n * @public\n */\nexport class ResourceProperty extends Resource {\n /**\n * Checks if a property key represents a hidden property.\n * Hidden properties are those whose keys end with an underscore \"_\".\n *\n * @param key - The property key to check\n * @returns True if the property is hidden, false otherwise\n *\n * @internal\n */\n isHiddenProperty(key) {\n return key.endsWith('_');\n }\n /**\n * Gets the custom properties stored in this resource.\n *\n * @returns Object with key/value pair properties\n */\n getProperties() {\n return this.payload.properties != null\n ? Object.assign({}, this.payload.properties) : {};\n }\n /**\n * Sets the custom properties of this resource.\n *\n * @param properties - Object with key/value pair properties\n *\n * @returns This resource, for chaining\n */\n setProperties(properties) {\n this.payload.properties = Object.assign({}, properties);\n return this;\n }\n /**\n * Gets the property value for given keys. First property found will be retrieved.\n *\n * @param keys - The property keys to search for\n *\n * @returns The property value or undefined if not found\n */\n getProperty(...keys) {\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n let value = this.payload.properties != null\n ? this.payload.properties[key]\n : null;\n if (value != null && value.trim() != \"\") {\n return value;\n }\n }\n return undefined;\n }\n /**\n * Sets a custom property in this resource.\n *\n * @param key - The property key\n * @param value - The property value, or null/undefined to clean it\n *\n * @returns This resource, for chaining\n */\n setProperty(key, value) {\n if (key == null || key.trim() == \"\") {\n return this;\n }\n if (this.payload.properties == null) {\n this.payload.properties = {};\n }\n if (!value) {\n value = \"\";\n }\n this.payload.properties[key] = value;\n return this;\n }\n /**\n * Deletes a custom property.\n *\n * @param key - The property key\n *\n * @returns This resource, for chaining\n */\n deleteProperty(key) {\n this.setProperty(key, null);\n return this;\n }\n /**\n * Gets the custom properties keys stored in this resource.\n *\n * @returns Array of property keys sorted alphabetically\n */\n getPropertyKeys() {\n let properties = this.getProperties();\n let propertyKeys = [];\n if (properties) {\n for (var key in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, key)) {\n propertyKeys.push(key);\n }\n }\n }\n propertyKeys = propertyKeys.sort();\n return propertyKeys;\n }\n /**\n * Sets a custom property in this resource, filtering out hidden properties.\n * Hidden properties are those whose keys end with an underscore \"_\".\n *\n * @param key - The property key\n * @param value - The property value, or null/undefined to clean it\n *\n * @returns This resource, for chaining\n */\n setVisibleProperty(key, value) {\n if (this.isHiddenProperty(key)) {\n return this;\n }\n return this.setProperty(key, value);\n }\n /**\n * Sets the custom properties of this resource, filtering out hidden properties.\n * Hidden properties are those whose keys end with an underscore \"_\".\n *\n * @param properties - Object with key/value pair properties\n *\n * @returns This resource, for chaining\n */\n setVisibleProperties(properties) {\n if (properties == null) {\n return this;\n }\n const filteredProperties = {};\n for (const key in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, key)) {\n if (!this.isHiddenProperty(key)) {\n filteredProperties[key] = properties[key];\n }\n }\n }\n return this.setProperties(filteredProperties);\n }\n /**\n * Gets the visible custom properties stored in this resource.\n * Hidden properties (those ending with \"_\") are excluded from the result.\n *\n * @returns Object with key/value pair properties, excluding hidden properties\n */\n getVisibleProperties() {\n const allProperties = this.getProperties();\n const visibleProperties = {};\n for (const key in allProperties) {\n if (Object.prototype.hasOwnProperty.call(allProperties, key)) {\n if (!this.isHiddenProperty(key)) {\n visibleProperties[key] = allProperties[key];\n }\n }\n }\n return visibleProperties;\n }\n}\n//# sourceMappingURL=ResourceProperty.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as GroupService from \"../service/group-service.js\";\nimport { normalizeText } from \"../utils.js\";\nimport { Account } from \"./Account.js\";\nimport { ResourceProperty } from \"./ResourceProperty.js\";\n/**\n * This class defines a Group of [[Accounts]].\n *\n * Accounts can be grouped by different meaning, like Expenses, Revenue, Assets, Liabilities and so on\n *\n * Its useful to keep organized and for high level analysis.\n *\n * @public\n */\nexport class Group extends ResourceProperty {\n constructor(book, payload) {\n super(payload || { createdAt: `${Date.now()}` });\n /** @internal */\n this.children = new Map();\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the id of this Group.\n *\n * @returns The id of this Group\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the name of this Group.\n *\n * @returns The name of this Group\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the Group.\n *\n * @param name - The name to set\n *\n * @returns This Group, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Tells if the balance of this Group has been verified/audited.\n *\n * @returns True if the balance of this Group has been verified/audited\n */\n isBalanceVerified() {\n return __awaiter(this, void 0, void 0, function* () {\n const accounts = yield this.getAccounts();\n for (const account of accounts) {\n if (!account.isBalanceVerified()) {\n return false;\n }\n }\n return true;\n });\n }\n /**\n * Tells if the Group is locked by the Book owner.\n *\n * @returns True if the Group is locked\n */\n isLocked() {\n if (this.payload.locked == null) {\n return false;\n }\n return this.payload.locked;\n }\n /**\n * Sets the locked state of the Group.\n *\n * @param locked - The locked state of the Group.\n *\n * @returns This Group, for chaining\n */\n setLocked(locked) {\n this.payload.locked = locked;\n return this;\n }\n /**\n * Gets the normalized name of this group without spaces and special characters.\n *\n * @returns The name of this group without spaces and special characters\n */\n getNormalizedName() {\n if (this.payload.normalizedName) {\n return this.payload.normalizedName;\n }\n else {\n return normalizeText(this.getName());\n }\n }\n /**\n * Gets all Accounts of this group.\n *\n * @returns All Accounts of this group\n */\n getAccounts() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.accounts) {\n return Array.from(this.accounts.values());\n }\n const id = this.getId();\n if (!id) {\n return [];\n }\n let accountsPlain = yield GroupService.getAccounts(this.book.getId(), id, this.getConfig());\n if (!accountsPlain) {\n return [];\n }\n let accounts = accountsPlain.map((acc) => new Account(this.book, acc));\n return accounts;\n });\n }\n /**\n * Gets the type of the accounts of this group.\n *\n * @returns The type for of the accounts of this group. Null if mixed\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Tells if the Group is hidden on main transactions menu.\n *\n * @returns True if the Group is hidden, false otherwise\n */\n isHidden() {\n return this.payload.hidden;\n }\n /**\n * Hide/Show group on main menu.\n *\n * @param hidden - Whether to hide the group\n *\n * @returns This Group, for chaining\n */\n setHidden(hidden) {\n this.payload.hidden = hidden;\n return this;\n }\n /**\n * Tells if this is a credit (Incoming and Liabilities) group.\n *\n * @returns True if this is a credit group\n */\n isCredit() {\n return this.payload.credit;\n }\n /**\n * Tells if this is a mixed (Assets/Liabilities or Incoming/Outgoing) group.\n *\n * @returns True if this is a mixed group\n */\n isMixed() {\n return this.payload.mixed;\n }\n /**\n * Tells if the Group is permanent.\n *\n * @returns True if the Group is permanent\n */\n isPermanent() {\n return this.payload.permanent;\n }\n /**\n * Gets the parent Group.\n *\n * @returns The parent Group\n */\n getParent() {\n return this.parent;\n }\n /**\n * Sets the parent Group.\n *\n * @param group - The parent Group to set\n *\n * @returns This Group, for chaining\n */\n setParent(group) {\n if (group) {\n this.payload.parent = {\n id: group.getId(),\n name: group.getName(),\n normalizedName: group.getNormalizedName(),\n };\n }\n else {\n this.payload.parent = undefined;\n }\n return this;\n }\n /**\n * Checks if the Group has a parent.\n *\n * @returns True if the Group has a parent, otherwise false\n */\n hasParent() {\n return this.payload.parent != null;\n }\n /**\n * Gets the children of the Group.\n *\n * @returns An array of child Groups\n */\n getChildren() {\n return Array.from(this.children.values()) || [];\n }\n /** @internal */\n addChild(child) {\n const id = child.getId();\n if (id) {\n this.children.set(id, child);\n }\n }\n /**\n * Gets all descendant Groups of the current Group.\n *\n * @returns A set of descendant Groups\n */\n getDescendants() {\n const descendants = new Set();\n this.traverseDescendants(this, descendants);\n return descendants;\n }\n /**\n * Gets the IDs of all descendant Groups in a tree structure.\n *\n * @returns A set of descendant Group IDs\n */\n getDescendantTreeIds() {\n return new Set(Array.from(this.getDescendants()).map((g) => g.getId() || \"\"));\n }\n /**\n * Checks if the Group has any children.\n *\n * @returns True if the Group has children, otherwise false\n */\n hasChildren() {\n return this.getChildren().length > 0;\n }\n /**\n * Checks if the Group is a leaf node (i.e., has no children).\n *\n * @returns True if the Group is a leaf, otherwise false\n */\n isLeaf() {\n return this.getChildren().length === 0;\n }\n /**\n * Checks if the Group is a root node (i.e., has no parent).\n *\n * @returns True if the Group is a root, otherwise false\n */\n isRoot() {\n return this.getParent() == undefined;\n }\n /**\n * Gets the depth of the Group in the hierarchy.\n *\n * @returns The depth of the Group\n */\n getDepth() {\n if (this.depth == undefined) {\n if (this.parent) {\n this.depth = this.parent.getDepth() + 1;\n }\n else {\n this.depth = 0;\n }\n }\n return this.depth;\n }\n /**\n * Gets the root Group of the current Group.\n *\n * @returns The root Group\n */\n getRoot() {\n if (this.root == undefined) {\n if (this.parent != undefined) {\n this.root = this.parent.getRoot();\n }\n else {\n this.root = this;\n }\n }\n return this.root;\n }\n /**\n * Gets the name of the root Group.\n *\n * @returns The name of the root Group\n */\n getRootName() {\n const root = this.getRoot();\n if (root != null) {\n return root.getName() || \"\";\n }\n return \"\";\n }\n /** @internal */\n traverseDescendants(group, descendants) {\n descendants.add(group);\n const children = group.getChildren();\n if (children.length > 0) {\n for (const child of children) {\n this.traverseDescendants(child, descendants);\n }\n }\n }\n /** @internal */\n buildGroupTree(idGroupMap) {\n this.parent = undefined;\n this.depth = undefined;\n this.root = undefined;\n if (this.payload.parent) {\n const parentGroup = idGroupMap.get(this.payload.parent.id || \"\");\n if (parentGroup) {\n this.parent = parentGroup;\n parentGroup.addChild(this);\n }\n }\n }\n /** @internal */\n addAccount(account) {\n const id = account === null || account === void 0 ? void 0 : account.getId();\n if (id) {\n if (!this.accounts) {\n this.accounts = new Map();\n }\n this.accounts.set(id, account);\n }\n }\n /**\n * Tells if this group has any account in it.\n *\n * @returns True if this group has any account in it\n */\n hasAccounts() {\n return this.payload.hasAccounts;\n }\n /**\n * Performs create new group.\n *\n * @returns A promise that resolves to this Group\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield GroupService.createGroup(this.book.getId(), this.payload, this.getConfig());\n this.updateGroupCache();\n return this;\n });\n }\n /**\n * Performs update group, applying pending changes.\n *\n * @returns A promise that resolves to this Group\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield GroupService.updateGroup(this.book.getId(), this.payload, this.getConfig());\n this.updateGroupCache();\n return this;\n });\n }\n /**\n * Performs delete group.\n *\n * @returns A promise that resolves to this Group\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield GroupService.deleteGroup(this.book.getId(), this.payload, this.getConfig());\n this.updateGroupCache(true);\n return this;\n });\n }\n /** @internal */\n updateGroupCache(remove) {\n this.book.setGroup(this.payload, remove);\n this.book.clearCache();\n }\n}\n//# sourceMappingURL=Group.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as AccountService from '../service/account-service.js';\nimport { Group } from './Group.js';\nimport { normalizeText } from '../utils.js';\nimport { ResourceProperty } from './ResourceProperty.js';\n/**\n * This class defines an [Account](https://en.wikipedia.org/wiki/Account_(bookkeeping)) of a [[Book]].\n *\n * It maintains a balance of all amount [credited and debited](http://en.wikipedia.org/wiki/Debits_and_credits) in it by [[Transactions]].\n *\n * An Account can be grouped by [[Groups]].\n *\n * @remarks\n * `Account` has no `getBalance()` method. To retrieve account balances, use\n * {@link Book.getBalancesReport} and read the resulting {@link BalancesContainer}.\n *\n * @public\n */\nexport class Account extends ResourceProperty {\n constructor(book, payload) {\n super(payload || { createdAt: `${Date.now()}` });\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the Account internal id.\n *\n * @returns The Account internal id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the Account name.\n *\n * @returns The Account name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the Account.\n *\n * @param name - The name to set\n *\n * @returns This Account, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Tells if the balance of this Account has been verified/audited.\n *\n * @returns True if the balance of this Account has been verified/audited\n */\n isBalanceVerified() {\n return this.payload.balanceVerified;\n }\n /**\n * Gets the normalized name of this Account without spaces or special characters.\n *\n * @returns The name of this Account without spaces or special characters\n */\n getNormalizedName() {\n if (this.payload.normalizedName) {\n return this.payload.normalizedName;\n }\n else {\n return normalizeText(this.getName());\n }\n }\n /**\n * Gets the type of this Account.\n *\n * @returns The [[AccountType]] of this Account\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Sets the type of the Account.\n *\n * @param type - The [[AccountType]] to set\n *\n * @returns This Account, for chaining\n */\n setType(type) {\n this.payload.type = type;\n return this;\n }\n /**\n * Tells if this Account is archived.\n *\n * @returns True if the Account is archived\n */\n isArchived() {\n return this.payload.archived;\n }\n /**\n * Sets Account archived/unarchived.\n *\n * @param archived - True to archive, false to unarchive\n *\n * @returns This Account, for chaining\n */\n setArchived(archived) {\n this.payload.archived = archived;\n return this;\n }\n /**\n * Tells if the Account has any transaction already posted.\n *\n * Accounts with transaction posted, even with zero balance, can only be archived.\n *\n * @returns True if the Account has transactions posted\n */\n hasTransactionPosted() {\n return this.payload.hasTransactionPosted;\n }\n /**\n * Tells if the Account is permanent.\n *\n * Permanent Accounts are the ones which final balance is relevant and keep its balances over time.\n *\n * They are also called [Real Accounts](http://en.wikipedia.org/wiki/Account_(Accountancy)#Based_on_periodicity_of_flow)\n *\n * Usually represents assets or tangibles, capable of being perceived by the senses or the mind, like bank Accounts, money, debts and so on.\n *\n * @returns True if its a permanent Account\n */\n isPermanent() {\n return this.payload.permanent;\n }\n /**\n * Tells if the Account has a Credit nature or Debit otherwise.\n *\n * Credit Accounts are just for representation purposes. It increase or decrease the absolute balance. It doesn't affect the overall balance or the behavior of the system.\n *\n * The absolute balance of credit Accounts increase when it participate as a credit/origin in a transaction. Its usually for Accounts that increase the balance of the assets, like revenue Accounts.\n *\n * ```\n * Crediting a credit\n * Thus ---------------------> Account increases its absolute balance\n * Debiting a debit\n *\n *\n * Debiting a credit\n * Thus ---------------------> Account decreases its absolute balance\n * Crediting a debit\n * ```\n *\n * As a rule of thumb, and for simple understanding, almost all Accounts are Debit nature (NOT credit), except the ones that \"offers\" amount for the books, like revenue Accounts.\n *\n * @returns True if the Account has credit nature\n */\n isCredit() {\n return this.payload.credit;\n }\n /**\n * Gets the [[Groups]] of this Account.\n *\n * When groups are already embedded in the account payload (e.g. from\n * {@link Bkper.getBook} with includeGroups), resolves them from the\n * book's cache instead of making API calls.\n *\n * @returns Promise with the [[Groups]] of this Account\n */\n getGroups() {\n return __awaiter(this, void 0, void 0, function* () {\n const id = this.getId();\n if (!id) {\n return [];\n }\n //Ensure groups are pre-loaded in the book cache to avoid multiple API calls when resolving groups from the payload\n yield this.book.getGroups();\n // resolve them from the book's group cache to get properly tree-linked Group objects\n if (this.payload.groups != null) {\n const groups = [];\n for (const groupPayload of this.payload.groups) {\n const group = yield this.book.getGroup(groupPayload.id);\n if (group) {\n groups.push(group);\n }\n }\n return groups;\n }\n return [];\n });\n }\n /**\n * Sets the groups of the Account.\n *\n * @param groups - The groups to set\n *\n * @returns This Account, for chaining\n */\n setGroups(groups) {\n this.payload.groups = undefined;\n if (groups != null) {\n groups.forEach(group => this.addGroup(group));\n }\n return this;\n }\n /**\n * Adds a group to the Account.\n *\n * @param group - The group to add\n *\n * @returns This Account, for chaining\n */\n addGroup(group) {\n if (!this.payload.groups) {\n this.payload.groups = [];\n }\n if (group instanceof Group) {\n this.payload.groups.push(group.json());\n }\n else {\n this.payload.groups.push(group);\n }\n return this;\n }\n /**\n * Removes a group from the Account.\n *\n * @param group - The group name, id or object to remove\n *\n * @returns Promise with this Account, for chaining\n */\n removeGroup(group) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.payload.groups != null) {\n let groupObject = undefined;\n if (group instanceof Group) {\n groupObject = group;\n }\n else if (typeof group == 'string') {\n groupObject = yield this.book.getGroup(group);\n }\n if (groupObject) {\n for (let i = 0; i < this.payload.groups.length; i++) {\n const groupId = this.payload.groups[i].id;\n if (groupId == groupObject.getId()) {\n this.payload.groups.splice(i, 1);\n }\n }\n }\n }\n return this;\n });\n }\n /**\n * Tells if this Account is in the [[Group]].\n *\n * @param group - The Group name, id or object\n *\n * @returns Promise with true if the Account is in the group\n */\n isInGroup(group) {\n return __awaiter(this, void 0, void 0, function* () {\n if (group == null) {\n return false;\n }\n //Group object\n if (group instanceof Group) {\n return this.isInGroupObject_(group);\n }\n //id or name\n var foundGroup = yield this.book.getGroup(group);\n if (foundGroup == null) {\n return false;\n }\n return this.isInGroupObject_(foundGroup);\n });\n }\n /** @internal */\n isInGroupObject_(group) {\n if (this.payload.groups == null) {\n return false;\n }\n for (var i = 0; i < this.payload.groups.length; i++) {\n if (this.payload.groups[i] == group.getId()) {\n return true;\n }\n }\n return false;\n }\n /**\n * Performs create new Account.\n *\n * @returns Promise with this Account after creation\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield AccountService.createAccount(this.book.getId(), this.payload, this.getConfig());\n this.updateAccountCache();\n return this;\n });\n }\n /**\n * Performs update Account, applying pending changes.\n *\n * @returns Promise with this Account after update\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield AccountService.updateAccount(this.book.getId(), this.payload, this.getConfig());\n this.updateAccountCache();\n return this;\n });\n }\n /**\n * Performs delete Account.\n *\n * @returns Promise with this Account after deletion\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield AccountService.deleteAccount(this.book.getId(), this.payload, this.getConfig());\n this.updateAccountCache(true);\n return this;\n });\n }\n /** @internal */\n updateAccountCache(remove) {\n this.book.setAccount(this.payload, remove);\n this.book.clearCache();\n }\n}\n//# sourceMappingURL=Account.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { AccountType } from '../model/Enums.js';\nimport { convertInMatrix } from '../utils.js';\n/**\n * A AccountsDataTableBuilder is used to setup and build two-dimensional arrays containing accounts.\n *\n * @public\n */\nexport class AccountsDataTableBuilder {\n constructor(accounts) {\n this.accounts = accounts;\n this.shouldIncludeArchived = false;\n this.shouldAddGroups = false;\n this.shouldAddProperties = false;\n this.shouldAddIds = false;\n this.shouldAddHiddenProperties = false;\n this.propertyKeys = [];\n }\n /**\n * Defines whether the archived accounts should be included.\n *\n * @param include - Whether to include archived accounts\n *\n * @returns This builder with respective include archived option, for chaining.\n */\n archived(include) {\n this.shouldIncludeArchived = include;\n return this;\n }\n /**\n * Defines whether include account groups.\n *\n * @param include - Whether to include groups\n *\n * @returns This builder with respective include groups option, for chaining.\n */\n groups(include) {\n this.shouldAddGroups = include;\n return this;\n }\n /**\n * Defines whether include custom account properties.\n *\n * @param include - Whether to include properties\n *\n * @returns This builder with respective include properties option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether include account ids.\n *\n * @param include - Whether to include ids\n *\n * @returns This builder with respective include ids option, for chaining.\n */\n ids(include) {\n this.shouldAddIds = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n getPropertyKeys() {\n if (this.propertyKeys.length === 0) {\n for (const account of this.accounts) {\n for (const key of account.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (this.propertyKeys.indexOf(key) <= -1) {\n this.propertyKeys.push(key);\n }\n }\n }\n this.propertyKeys = this.propertyKeys.sort();\n }\n return this.propertyKeys;\n }\n getTypeIndex(type) {\n if (type === AccountType.ASSET) {\n return 0;\n }\n if (type === AccountType.LIABILITY) {\n return 1;\n }\n if (type === AccountType.INCOMING) {\n return 2;\n }\n return 3;\n }\n getMaxNumberOfGroups() {\n return __awaiter(this, void 0, void 0, function* () {\n let maxNumberOfGroups = 0;\n for (const account of this.accounts) {\n const groups = yield account.getGroups();\n if (groups.length > maxNumberOfGroups) {\n maxNumberOfGroups = groups.length;\n }\n }\n return maxNumberOfGroups;\n });\n }\n /**\n * Sorts groups for an account in hierarchy-path order:\n * 1. Hierarchical groups (those with parent or children) come first, ordered by:\n * - Root group name (alphabetically)\n * - Depth within the hierarchy (parent before child)\n * 2. Free groups (no parent and no children) come last, sorted alphabetically\n */\n sortGroupsHierarchyPath_(groups) {\n // Partition into hierarchical vs free groups\n const hierarchicalGroups = [];\n const freeGroups = [];\n for (const group of groups) {\n if (group.getParent() != null || group.hasChildren()) {\n hierarchicalGroups.push(group);\n }\n else {\n freeGroups.push(group);\n }\n }\n // Group hierarchical groups by their root\n const byRoot = new Map();\n for (const group of hierarchicalGroups) {\n const root = group.getRoot();\n const rootId = root.getId() || '';\n if (!byRoot.has(rootId)) {\n byRoot.set(rootId, []);\n }\n byRoot.get(rootId).push(group);\n }\n // Sort chains: first by root name alphabetically, then by depth within each chain\n const sortedChains = Array.from(byRoot.entries())\n .sort((a, b) => {\n const rootA = a[1][0].getRoot();\n const rootB = b[1][0].getRoot();\n return rootA.getNormalizedName().localeCompare(rootB.getNormalizedName());\n })\n .map(([_, chainGroups]) => chainGroups.sort((a, b) => a.getDepth() - b.getDepth()));\n // Sort free groups alphabetically\n freeGroups.sort((a, b) => a.getNormalizedName().localeCompare(b.getNormalizedName()));\n // Combine: hierarchical chains first, then free groups\n const result = [];\n for (const chain of sortedChains) {\n result.push(...chain);\n }\n result.push(...freeGroups);\n return result;\n }\n /**\n * Builds a two-dimensional array containing all accounts.\n *\n * @returns A promise resolving to a two-dimensional array containing all accounts\n */\n build() {\n return __awaiter(this, void 0, void 0, function* () {\n let table = new Array();\n let accounts = this.accounts;\n if (!this.shouldIncludeArchived) {\n accounts = this.accounts.filter(a => !a.isArchived());\n }\n let headers = [];\n if (this.shouldAddIds) {\n headers.push('Account Id');\n }\n headers.push('Name');\n headers.push('Type');\n if (this.shouldAddGroups) {\n const maxGroups = yield this.getMaxNumberOfGroups();\n for (let i = 0; i < maxGroups; i++) {\n headers.push('Group');\n }\n }\n accounts.sort((a1, a2) => {\n let ret = this.getTypeIndex(a1.getType()) - this.getTypeIndex(a2.getType());\n if (ret === 0) {\n ret = a1.getNormalizedName().localeCompare(a2.getNormalizedName());\n }\n return ret;\n });\n let propertyKeys = [];\n if (this.shouldAddProperties) {\n propertyKeys = this.getPropertyKeys();\n }\n for (const account of accounts) {\n const line = [];\n if (this.shouldAddIds) {\n line.push(account.getId());\n }\n line.push(account.getName());\n line.push(account.getType());\n if (this.shouldAddGroups) {\n const groups = this.sortGroupsHierarchyPath_(yield account.getGroups());\n for (const group of groups) {\n line.push(group.getName());\n }\n }\n if (this.shouldAddGroups && this.shouldAddProperties) {\n const numOfBlankCells = headers.length - line.length;\n for (let i = 0; i < numOfBlankCells; i++) {\n line.push('');\n }\n }\n if (this.shouldAddProperties) {\n const properties = account.getProperties();\n for (const key of propertyKeys) {\n const propertyValue = properties[key];\n if (propertyValue) {\n line.push(propertyValue);\n continue;\n }\n line.push('');\n }\n }\n table.push(line);\n }\n if (this.shouldAddProperties) {\n headers = headers.concat(propertyKeys);\n }\n table.unshift(headers);\n convertInMatrix(table);\n return table;\n });\n }\n}\n//# sourceMappingURL=AccountsDataTableBuilder.js.map", "/**\n * Defines an Agent on Bkper.\n *\n * An Agent represents an entity (such as an App or Bot) that interacts with Bkper, executing actions on behalf of users.\n *\n * @public\n */\nexport class Agent {\n constructor(payload) {\n this.payload = payload || {};\n }\n /**\n * Gets the wrapped plain JSON object.\n *\n * @returns The wrapped plain json object\n */\n json() {\n return Object.assign({}, this.payload);\n }\n /**\n * Gets the Agent universal identifier.\n *\n * @returns The Agent universal identifier\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the Agent name.\n *\n * @returns The Agent name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the Agent logo URL.\n *\n * @returns The Agent logo url\n */\n getLogoUrl() {\n return this.payload.logo;\n }\n /**\n * Gets the Agent logo URL in dark mode.\n *\n * @returns The Agent logo url in dark mode\n */\n getLogoUrlDark() {\n return this.payload.logoDark;\n }\n}\n//# sourceMappingURL=Agent.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiRequest } from \"./http-api-request.js\";\nexport function getApps(config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiRequest(`v5/apps`, config).setMethod('GET').fetch();\n if (response.data == null) {\n return [];\n }\n let appListPlain = response.data;\n let appsJson = appListPlain.items;\n if (appsJson == null) {\n return [];\n }\n return appsJson;\n });\n}\nexport function getApp(id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiRequest(`v5/apps/${id}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function createApp(app, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpApiRequest(`v5/apps`, config).setMethod('POST').setPayload(app).fetch();\n return response.data;\n });\n}\nexport function updateApp(app, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpApiRequest(`v5/apps`, config).setMethod('PUT').setPayload(app).fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=app-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function loadBooks(query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let request = new HttpBooksApiV5Request('', config);\n if (query) {\n request.addParam('query', query);\n }\n let response = yield request.fetch();\n if (response.data == null) {\n return [];\n }\n let bookListPlain = response.data;\n let booksJson = bookListPlain.items;\n if (booksJson == null) {\n return [];\n }\n return booksJson;\n });\n}\nexport function loadBook(bookId, loadAccounts, loadGroups, config) {\n return __awaiter(this, void 0, void 0, function* () {\n if (bookId == null) {\n throw new Error(\"Book id null!\");\n }\n loadAccounts = loadAccounts || false;\n loadGroups = loadGroups || false;\n let response = yield new HttpBooksApiV5Request(bookId, config).addParam('loadAccounts', loadAccounts).addParam('loadGroups', loadGroups).fetch();\n return response.data;\n });\n}\nexport function createBook(book, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request('', config).setMethod('POST').setPayload(book).fetch();\n return response.data;\n });\n}\nexport function updateBook(bookId, book, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}`, config).setMethod('PUT').setPayload(book).fetch();\n return response.data;\n });\n}\nexport function audit(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n new HttpBooksApiV5Request(`${bookId}/audit`, config).setMethod('PATCH').fetch();\n });\n}\nexport function getApps(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpBooksApiV5Request(`${bookId}/apps`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function copyBook(bookId, name, copyTransactions, fromDate, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const request = new HttpBooksApiV5Request(`${bookId}/copy`, config).setMethod('POST').addParam('name', name);\n if (copyTransactions) {\n request.addParam('copyTransactions', copyTransactions);\n if (fromDate) {\n request.addParam('fromDate', fromDate);\n }\n }\n const response = yield request.fetch();\n return response.data;\n });\n}\nexport function deleteBook(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${bookId}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=book-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function getSavedQueries(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpBooksApiV5Request(`${bookId}/queries`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function createSavedQuery(bookId, query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/queries`, config).setMethod('POST').setPayload(query).fetch();\n return response.data;\n });\n}\nexport function updateSavedQuery(bookId, query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/queries`, config).setMethod('PUT').setPayload(query).fetch();\n return response.data;\n });\n}\nexport function deleteSavedQuery(bookId, queryId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/queries/${queryId}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=query-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nimport { HttpRequest } from \"./http-request.js\";\nexport function getBalances(bookId, query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpBooksApiV5Request(`${bookId}/balances`, config).addParam('query', query).addParam('time', Date.now()).fetch();\n const balancesUrl = (_a = response.data) === null || _a === void 0 ? void 0 : _a.balancesUrl; // Expected for large payloads\n if (balancesUrl) {\n const balancesResponse = yield new HttpRequest(balancesUrl).setMethod('GET').execute();\n response = { data: balancesResponse.data, status: balancesResponse.status };\n }\n return response.data;\n });\n}\n//# sourceMappingURL=balances-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function createFile(bookId, file, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/files`, config).setMethod('POST').setPayload(file).fetch();\n return response.data;\n });\n}\nexport function getFile(bookId, id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/files/${id}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function updateFile(bookId, file, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/files`, config).setMethod('PUT').setPayload(file).fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=file-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function listIntegrations(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const res = yield new HttpBooksApiV5Request(`${bookId}/integrations`, config)\n .setMethod('GET')\n .fetch();\n return ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function createIntegration(bookId, integration, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpBooksApiV5Request(`${bookId}/integrations`, config)\n .setPayload(integration)\n .setMethod('POST')\n .fetch();\n return res.data;\n });\n}\nexport function updateIntegration(bookId, integration, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpBooksApiV5Request(`${bookId}/integrations`, config)\n .setPayload(integration)\n .setMethod('PUT')\n .fetch();\n return res.data;\n });\n}\nexport function deleteIntegration(bookId, id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpBooksApiV5Request(`${bookId}/integrations/${id}`, config).setMethod('DELETE').fetch();\n return res.data;\n });\n}\n//# sourceMappingURL=integration-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function createTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions`, config).setMethod('POST').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function postTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = { items: transactions };\n yield new HttpBooksApiV5Request(`${bookId}/transactions/post/batch`, config).setMethod('PATCH').setPayload(payload).fetch();\n });\n}\nexport function createTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionList = { items: transactions };\n const payload = transactionList;\n const response = yield new HttpBooksApiV5Request(`${bookId}/transactions/batch`, config).setMethod('POST').setPayload(payload).fetch();\n transactionList = yield response.data;\n return transactionList != null && transactionList.items != null ? transactionList.items : [];\n });\n}\nexport function updateTransactionsBatch(bookId, transactions, updateChecked, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionList = { items: transactions };\n const payload = transactionList;\n const response = yield new HttpBooksApiV5Request(`${bookId}/transactions/batch`, config).setMethod('PUT').setPayload(payload).addParam('updateChecked', updateChecked).fetch();\n transactionList = yield response.data;\n return transactionList != null && transactionList.items != null ? transactionList.items : [];\n });\n}\nexport function checkTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = { items: transactions };\n yield new HttpBooksApiV5Request(`${bookId}/transactions/check/batch`, config).setMethod('PATCH').setPayload(payload).fetch();\n });\n}\nexport function uncheckTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = { items: transactions };\n yield new HttpBooksApiV5Request(`${bookId}/transactions/uncheck/batch`, config).setMethod('PATCH').setPayload(payload).fetch();\n });\n}\nexport function trashTransactionsBatch(bookId, transactions, trashChecked, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionList = { items: transactions };\n const payload = transactionList;\n const response = yield new HttpBooksApiV5Request(`${bookId}/transactions/trash/batch`, config).setMethod('PATCH').setPayload(payload).addParam('trashChecked', trashChecked).fetch();\n transactionList = yield response.data;\n });\n}\nexport function untrashTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionList = { items: transactions };\n const payload = transactionList;\n const response = yield new HttpBooksApiV5Request(`${bookId}/transactions/untrash/batch`, config).setMethod('PATCH').setPayload(payload).fetch();\n transactionList = yield response.data;\n });\n}\nexport function updateTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions`, config).setMethod('PUT').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function postTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/post`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function checkTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/check`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function uncheckTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/uncheck`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function trashTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/trash`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function restoreTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/restore`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function getTransaction(bookId, id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/${id}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function listTransactions(bookId, query, limit, cursor, config) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!query) {\n query = \"\";\n }\n if (!limit) {\n limit = 100;\n }\n var request = new HttpBooksApiV5Request(`${bookId}/transactions`, config);\n request.addParam('query', query);\n request.addParam('limit', limit);\n if (cursor != null) {\n request.setHeader('cursor', cursor);\n }\n var response = yield request.fetch();\n return response.data;\n });\n}\nexport function countTransactions(bookId, query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const request = new HttpBooksApiV5Request(`${bookId}/transactions/count`, config).setMethod('GET').addParam('query', query);\n const response = yield request.fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=transaction-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function listEvents(book, afterDate, beforeDate, onError, resourceId, limit, cursor, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let request = new HttpBooksApiV5Request(`${book.getId()}/events`, config);\n request.addParam('after', afterDate);\n request.addParam('before', beforeDate);\n request.addParam('error', onError);\n request.addParam('resoureId', resourceId);\n request.addParam('limit', limit);\n if (cursor != null) {\n request.setHeader('cursor', cursor);\n }\n var response = yield request.fetch();\n return response.data;\n });\n}\nexport function replayBotResponse(book, eventId, agentId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${book.getId()}/events/${eventId}/responses/${agentId}`, config).setMethod('PUT').fetch();\n return response.data;\n });\n}\nexport function deleteBotResponse(book, eventId, agentId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${book.getId()}/events/${eventId}/responses/${agentId}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\nexport function replayEventsBatch(book, eventList, errorsOnly, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let request = new HttpBooksApiV5Request(`${book.getId()}/events/replay/batch`, config).setMethod('PATCH').setPayload(eventList);\n if (errorsOnly) {\n request.addParam('errorsOnly', errorsOnly);\n }\n yield request.fetch();\n });\n}\nexport function getBacklog(book, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${book.getId()}/events/backlog`, config).setMethod(\"GET\").fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=event-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from './http-api-request.js';\nexport function listCollaborators(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/collaborators`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function addOrUpdateCollaborator(bookId, collaborator, message, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let request = new HttpBooksApiV5Request(`${bookId}/collaborators`, config).setMethod('POST').setPayload(collaborator);\n if (message) {\n request = request.addParam('message', message);\n }\n const response = yield request.fetch();\n return response.data;\n });\n}\nexport function removeCollaborator(bookId, email, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${bookId}/collaborators/${email}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=collaborator-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as CollaboratorService from \"../service/collaborator-service.js\";\nimport { Resource } from \"./Resource.js\";\n/**\n * This class defines a Collaborator of a [[Book]].\n *\n * A Collaborator represents a user that has been granted access to a Book with specific permissions.\n *\n * @public\n */\nexport class Collaborator extends Resource {\n constructor(book, payload) {\n super(payload);\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the Collaborator internal id.\n *\n * @returns The Collaborator internal id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the Collaborator email address.\n *\n * @returns The Collaborator email address\n */\n getEmail() {\n return this.payload.email;\n }\n /**\n * Sets the email address of the Collaborator.\n *\n * @param email - The email address to set\n *\n * @returns This Collaborator, for chaining\n */\n setEmail(email) {\n this.payload.email = email;\n return this;\n }\n /**\n * Gets the permission level of the Collaborator.\n *\n * @returns The permission level\n */\n getPermission() {\n return this.payload.permission;\n }\n /**\n * Sets the permission level of the Collaborator.\n *\n * @param permission - The permission level to set\n *\n * @returns This Collaborator, for chaining\n */\n setPermission(permission) {\n this.payload.permission = permission;\n return this;\n }\n /**\n * Performs create new Collaborator.\n *\n * @returns Promise with the created Collaborator\n */\n create(message) {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield CollaboratorService.addOrUpdateCollaborator(this.book.getId(), this.payload, message, this.getConfig());\n this.book.clearCollaboratorCache();\n return this;\n });\n }\n /**\n * Performs update Collaborator.\n *\n * @returns Promise with the updated Collaborator\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield CollaboratorService.addOrUpdateCollaborator(this.book.getId(), this.payload, undefined, this.getConfig());\n this.book.clearCollaboratorCache();\n return this;\n });\n }\n /**\n * Performs remove Collaborator.\n *\n * @returns Promise with the removed Collaborator\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const email = this.getEmail();\n if (!email) {\n throw new Error(\"Collaborator email is required\");\n }\n this.payload = yield CollaboratorService.removeCollaborator(this.book.getId(), email, this.getConfig());\n this.book.clearCollaboratorCache();\n return this;\n });\n }\n}\n//# sourceMappingURL=Collaborator.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiV5Request } from \"./http-api-request.js\";\nexport function loadCollections(config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpApiV5Request('collections', config).fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function createCollection(payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiV5Request('collections', config).setMethod('POST').setPayload(payload).fetch();\n return response.data;\n });\n}\nexport function updateCollection(payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiV5Request('collections', config).setMethod('PUT').setPayload(payload).fetch();\n return response.data;\n });\n}\nexport function deleteCollection(payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpApiV5Request(`collections/${payload.id}`, config).setMethod('DELETE').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function addBooksToCollection(collectionId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpApiV5Request(`collections/${collectionId}/books/add`, config).setMethod('PATCH').setPayload(payload).fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function removeBooksFromCollection(collectionId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpApiV5Request(`collections/${collectionId}/books/remove`, config).setMethod('PATCH').setPayload(payload).fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\n//# sourceMappingURL=collection-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Book } from \"./Book.js\";\nimport { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\nimport * as CollectionService from \"../service/collection-service.js\";\n/**\n * This class defines a Collection of [[Books]].\n *\n * @public\n */\nexport class Collection extends Resource {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the unique identifier of this Collection.\n *\n * @returns The id of this Collection\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the name of this Collection.\n *\n * @returns The name of this Collection\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the Collection.\n *\n * @param name - The name to set\n *\n * @returns This Collection, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Gets the username of the owner of this Collection\n *\n * @returns The Collection's owner username\n */\n getOwnerUsername() {\n return this.payload.ownerUsername;\n }\n /**\n * Gets the user permission for this Collection\n *\n * @returns The permission for the current user\n */\n getPermission() {\n return this.payload.permission\n ? this.payload.permission\n : undefined;\n }\n /**\n * Gets all Books of this collection.\n *\n * @returns All Books of this collection\n */\n getBooks() {\n let books = [];\n if (this.payload.books == null) {\n return books;\n }\n for (const bookPayload of this.payload.books) {\n let book = new Book(bookPayload, this.config);\n books.push(book);\n }\n return books;\n }\n /**\n * Adds Books to this Collection.\n *\n * @param books - The Books to add to this Collection\n *\n * @returns The added Book objects\n */\n addBooks(books) {\n return __awaiter(this, void 0, void 0, function* () {\n const collectionId = this.getId();\n if (collectionId && books.length > 0) {\n const bookList = { items: books.map((b) => b.json()) };\n let addedBooks = yield CollectionService.addBooksToCollection(collectionId, bookList, this.getConfig());\n return addedBooks.map((book) => new Book(book, this.config));\n }\n return [];\n });\n }\n /**\n * Removes Books from this Collection.\n *\n * @param books - The Books to remove from this Collection\n *\n * @returns The removed Book objects\n */\n removeBooks(books) {\n return __awaiter(this, void 0, void 0, function* () {\n const collectionId = this.getId();\n if (collectionId && books.length > 0) {\n const bookList = { items: books.map((b) => b.json()) };\n let removedBooks = yield CollectionService.removeBooksFromCollection(collectionId, bookList, this.getConfig());\n return removedBooks.map((book) => new Book(book, this.config));\n }\n return [];\n });\n }\n /**\n * Gets the last update date of this Collection\n *\n * @returns The Collection's last update timestamp, in milliseconds\n */\n getUpdatedAt() {\n return this.payload.updatedAt;\n }\n /**\n * Performs create new Collection.\n *\n * @returns The created Collection object\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield CollectionService.createCollection(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Performs update Collection, applying pending changes.\n *\n * @returns The updated Collection object\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield CollectionService.updateCollection(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Performs delete Collection.\n *\n * @returns The list of Books the user has access to that were affected by the deletion of this Collection\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n let books = yield CollectionService.deleteCollection(this.payload, this.getConfig());\n return books.map((book) => new Book(book, this.config));\n });\n }\n}\n//# sourceMappingURL=Collection.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as EventService from '../service/event-service.js';\n/**\n *\n * This class defines a Bot Response associated to an [[Event]].\n *\n * @public\n */\nexport class BotResponse {\n constructor(event, payload) {\n this.event = event;\n this.payload = payload || {};\n }\n /**\n * Gets the type of this Bot Response.\n *\n * @returns The type of this Bot Response\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Gets the agent id of this Bot Response.\n *\n * @returns The agent id of this Bot Response\n */\n getAgentId() {\n return this.payload.agentId;\n }\n /**\n * Gets the message of this Bot Response.\n *\n * @returns The message of this Bot Response\n */\n getMessage() {\n return this.payload.message;\n }\n /**\n * Gets the date this Bot Response was created.\n *\n * @returns The date this Bot Response was created\n */\n getCreatedAt() {\n return this.payload.createdAt ? new Date(new Number(this.payload.createdAt).valueOf()) : undefined;\n }\n /**\n * Gets the Event this Bot Response is associated to.\n *\n * @returns The Event this Bot Response is associated to\n */\n getEvent() {\n return this.event;\n }\n /**\n * Replay this Bot Response.\n *\n * @returns The updated Bot Response\n */\n replay() {\n return __awaiter(this, void 0, void 0, function* () {\n const eventId = this.event.getId();\n if (eventId == null) {\n throw new Error(\"Event id null!\");\n }\n const agentId = this.getAgentId();\n if (agentId == null) {\n throw new Error(\"Agent id null!\");\n }\n const updatedEventPayload = yield EventService.replayBotResponse(this.event.getBook(), eventId, agentId, this.event.getBook().getConfig());\n this.updateCache(updatedEventPayload);\n return this;\n });\n }\n /**\n * Delete this Bot Response.\n *\n * @returns The deleted Bot Response\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const eventId = this.event.getId();\n if (eventId == null) {\n throw new Error(\"Event id null!\");\n }\n const agentId = this.getAgentId();\n if (agentId == null) {\n throw new Error(\"Agent id null!\");\n }\n const updatedEventPayload = yield EventService.deleteBotResponse(this.event.getBook(), eventId, agentId, this.event.getBook().getConfig());\n this.updateCache(updatedEventPayload);\n return this;\n });\n }\n /** @internal */\n updateCache(updatedEventPayload) {\n var _a;\n // Update event\n this.event.payload = updatedEventPayload;\n this.event.clearCache();\n // Update bot response\n const updatedBotResponsePayload = (_a = updatedEventPayload === null || updatedEventPayload === void 0 ? void 0 : updatedEventPayload.botResponses) === null || _a === void 0 ? void 0 : _a.find(r => r.agentId && r.agentId === this.getAgentId());\n this.payload = updatedBotResponsePayload || {};\n }\n}\n//# sourceMappingURL=BotResponse.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiV5Request } from \"./http-api-request.js\";\nexport function getConnection(id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/connections/${id}`, config)\n .setMethod('GET')\n .fetch();\n return res.data;\n });\n}\nexport function listConnections(config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const res = yield new HttpApiV5Request(`user/connections`, config)\n .setMethod('GET')\n .fetch();\n return ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function createConnection(connection, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/connections`, config)\n .setPayload(connection)\n .setMethod('POST')\n .fetch();\n return res.data;\n });\n}\nexport function updateConnection(connection, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/connections`, config)\n .setPayload(connection)\n .setMethod('PUT')\n .fetch();\n return res.data;\n });\n}\nexport function deleteConnection(id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/connections/${id}`, config)\n .setMethod('DELETE')\n .fetch();\n return res.data;\n });\n}\nexport function listIntegrations(connectionId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const res = yield new HttpApiV5Request(`user/connections/${connectionId}/integrations`, config)\n .setMethod('GET')\n .fetch();\n return ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\n//# sourceMappingURL=connection-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as IntegrationService from \"../service/integration-service.js\";\nimport { ResourceProperty } from \"./ResourceProperty.js\";\nimport { Bkper } from \"./Bkper.js\";\n/**\n * This class defines a Integration from an [[User]] to an external service.\n *\n * @public\n */\nexport class Integration extends ResourceProperty {\n constructor(payload, config) {\n super(payload || {});\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the [[Book]] id of the Integration.\n *\n * @returns The Integration's Book id\n */\n getBookId() {\n return this.payload.bookId;\n }\n /**\n * Gets the id of the Integration.\n *\n * @returns This Integration's id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the name of the Integration.\n *\n * @returns The Integration's name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the name of the user who added the Integration.\n *\n * @returns The user name of who added the Integration\n */\n getAddedBy() {\n return this.payload.addedBy;\n }\n /**\n * Gets the agent id of the Integration.\n *\n * @returns The Integration's agent id\n */\n getAgentId() {\n return this.payload.agentId;\n }\n /**\n * Gets the logo of the Integration.\n *\n * @returns The Integration's logo\n *\n * @deprecated Use getLogoUrl instead.\n */\n getLogo() {\n return this.payload.logo;\n }\n /**\n * Gets the logo url of this Integration.\n *\n * @returns The logo url of this Integration\n */\n getLogoUrl() {\n return this.payload.logo;\n }\n /**\n * Gets the logo url of this Integration in dark mode.\n *\n * @returns The logo url of this Integration in dark mode\n */\n getLogoUrlDark() {\n return this.payload.logoDark;\n }\n /**\n * Gets the date when the Integration was added.\n *\n * @returns The Integration add date in milliseconds\n */\n getDateAddedMs() {\n return this.payload.dateAddedMs;\n }\n /**\n * Gets the date when the Integration was last updated.\n *\n * @returns The Integration last update date in milliseconds\n */\n getLastUpdateMs() {\n return this.payload.lastUpdateMs;\n }\n /**\n * Performs remove Integration.\n *\n * @returns The removed Integration object\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const bookId = this.getBookId();\n const integrationId = this.getId();\n if (bookId && integrationId) {\n this.payload = yield IntegrationService.deleteIntegration(bookId, integrationId, this.getConfig());\n }\n return this;\n });\n }\n}\n//# sourceMappingURL=Integration.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ResourceProperty } from \"./ResourceProperty.js\";\nimport { Bkper } from \"./Bkper.js\";\nimport * as ConnectionService from \"../service/connection-service.js\";\nimport { Integration } from \"./Integration.js\";\n/**\n * This class defines a Connection from an [[User]] to an external service.\n *\n * @public\n */\nexport class Connection extends ResourceProperty {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the id of the Connection.\n *\n * @returns The Connection's id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the agentId of the Connection.\n *\n * @returns The Connection's agentId\n */\n getAgentId() {\n return this.payload.agentId;\n }\n /**\n * Sets the Connection agentId.\n *\n * @param agentId - The Connection agentId\n *\n * @returns The Connection, for chaining\n */\n setAgentId(agentId) {\n this.payload.agentId = agentId;\n return this;\n }\n /**\n * Gets the name of the Connection.\n *\n * @returns The Connection name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the logo of the Connection.\n *\n * @returns The Connection logo\n */\n getLogo() {\n return this.payload.logo;\n }\n /**\n * Gets the date when the Connection was added.\n *\n * @returns The Connection add date in milliseconds\n */\n getDateAddedMs() {\n return this.payload.dateAddedMs;\n }\n /**\n * Gets the email of the owner of the Connection.\n *\n * @returns The Connection owner's email\n */\n getEmail() {\n return this.payload.email;\n }\n /**\n * Sets the name of the Connection.\n *\n * @param name - The name of the Connection\n *\n * @returns The Connection, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Sets the universal unique identifier of the Connection.\n *\n * @param uuid - The universal unique identifier of the Connection\n *\n * @returns The Connection, for chaining\n */\n setUUID(uuid) {\n this.payload.uuid = uuid;\n return this;\n }\n /**\n * Gets the universal unique identifier of this Connection.\n *\n * @returns The Connection's universal unique identifier name\n */\n getUUID() {\n return this.payload.uuid;\n }\n /**\n * Gets the type of the Connection.\n *\n * @returns The Connection type\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Sets the Connection type.\n *\n * @param type - The Connection type\n *\n * @returns The Connection, for chaining\n */\n setType(type) {\n this.payload.type = type;\n return this;\n }\n /**\n * Cleans any token property stored in the Connection.\n */\n clearTokenProperties() {\n this.getPropertyKeys()\n .filter((key) => key.includes(\"token\"))\n .forEach((key) => this.deleteProperty(key));\n }\n /**\n * Gets the existing [[Integrations]] on the Connection.\n *\n * @returns The existing Integration objects\n */\n getIntegrations() {\n return __awaiter(this, void 0, void 0, function* () {\n const id = this.getId();\n if (!id) {\n return [];\n }\n const integrationsPlain = yield ConnectionService.listIntegrations(id, this.getConfig());\n const integrations = integrationsPlain.map((i) => new Integration(i, this.config));\n return integrations;\n });\n }\n /**\n * Performs create new Connection.\n *\n * @returns The created Connection, for chaining\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield ConnectionService.createConnection(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Performs remove Connection.\n *\n * @returns The removed Connection object\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const connectionId = this.getId();\n if (connectionId) {\n this.payload = yield ConnectionService.deleteConnection(connectionId, this.getConfig());\n }\n return this;\n });\n }\n}\n//# sourceMappingURL=Connection.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiV5Request } from './http-api-request.js';\nexport function getUser(config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user`, config).setMethod('GET').fetch();\n return res.data;\n });\n}\nexport function getBilling(config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/billing`, config).setMethod('GET').fetch();\n return res.data;\n });\n}\nexport function getBillingCounts(config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/billing/counts`, config).setMethod('GET').fetch();\n return res.data;\n });\n}\nexport function getBillingPortalUrl(returnUrl, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/billing/portal`, config)\n .addParam('returnUrl', returnUrl)\n .fetch();\n return res.data;\n });\n}\nexport function getBillingCheckoutUrl(plan, successUrl, cancelUrl, cycle, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const request = new HttpApiV5Request(`user/billing/checkout`, config).addParam('plan', plan);\n if (cycle) {\n request.addParam('cycle', cycle);\n }\n if (successUrl) {\n request.addParam('successUrl', successUrl);\n }\n if (cancelUrl) {\n request.addParam('cancelUrl', cancelUrl);\n }\n const res = yield request.fetch();\n return res.data;\n });\n}\n//# sourceMappingURL=user-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Resource } from './Resource.js';\nimport { Bkper } from './Bkper.js';\nimport * as UserService from '../service/user-service.js';\n/**\n * This class defines the Billing information for a [[User]].\n *\n * The Billing information includes the plan, the admin email, and the billing portal URL.\n *\n * @public\n */\nexport class Billing extends Resource {\n constructor(json, config) {\n super(json);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Tells if billing is enabled for the User.\n *\n * @returns True if billing is enabled for the User\n */\n isEnabled() {\n return this.payload.enabled;\n }\n /**\n * Gets the email for the User.\n *\n * @returns The User's email\n */\n getEmail() {\n return this.payload.email;\n }\n /**\n * Gets the hosted domain for the User.\n *\n * @returns The User's hosted domain\n */\n getHostedDomain() {\n return this.payload.hostedDomain;\n }\n /**\n * Gets the current plan of the User.\n *\n * @returns The User's plan\n */\n getPlan() {\n return this.payload.plan;\n }\n /**\n * Tells if the User's current plan payment is overdue.\n *\n * @returns True if the plan payment is overdue\n */\n isPlanOverdue() {\n return this.payload.planOverdue;\n }\n /**\n * Gets the admin email for this User's billing account.\n *\n * @returns The billing admin email\n */\n getAdminEmail() {\n return this.payload.adminEmail;\n }\n /**\n * Tells if the User has started the trial period.\n *\n * @returns True if the User has started the trial period\n */\n hasStartedTrial() {\n return this.payload.startedTrial;\n }\n /**\n * Gets the number of days left in User's trial period.\n *\n * @returns The number of days left in trial period\n */\n getDaysLeftInTrial() {\n return this.payload.daysLeftInTrial;\n }\n /**\n * Gets the number of total transactions this month for the User's billing account.\n *\n * @returns The number of total transactions this month\n */\n getTotalTransactionsThisMonth() {\n return this.payload.totalTransactionsThisMonth;\n }\n /**\n * Gets the number of total transactions this year for the User's billing account.\n *\n * @returns The number of total transactions this year\n */\n getTotalTransactionsThisYear() {\n return this.payload.totalTransactionsThisYear;\n }\n /**\n * Gets the transaction counts associated to the User's billing account.\n *\n * @returns The transaction counts associated to the User's billing account\n */\n getCounts() {\n return __awaiter(this, void 0, void 0, function* () {\n const countsPayload = yield UserService.getBillingCounts(this.getConfig());\n return countsPayload;\n });\n }\n /**\n * Gets the URL to redirect the User to the billing portal.\n *\n * @param returnUrl - The URL to return to after the User has been redirected to the billing portal\n *\n * @returns The URL to redirect the User to the billing portal\n */\n getPortalUrl(returnUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n const urlPayload = yield UserService.getBillingPortalUrl(returnUrl, this.getConfig());\n return urlPayload === null || urlPayload === void 0 ? void 0 : urlPayload.url;\n });\n }\n /**\n * Gets the URL to redirect the User to the billing checkout.\n *\n * @param plan - The plan to checkout\n * @param successUrl - The URL to redirect to after the User has successfully checked out\n * @param cancelUrl - The URL to redirect to in case the checkout is cancelled\n * @param cycle - The billing cycle to checkout - \"monthly\" (default) or \"yearly\"\n *\n * @returns The URL to redirect the User to the billing checkout\n */\n getCheckoutUrl(plan, successUrl, cancelUrl, cycle) {\n return __awaiter(this, void 0, void 0, function* () {\n const urlPayload = yield UserService.getBillingCheckoutUrl(plan, successUrl, cancelUrl, cycle, this.getConfig());\n return urlPayload === null || urlPayload === void 0 ? void 0 : urlPayload.url;\n });\n }\n}\n//# sourceMappingURL=Billing.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Connection } from \"./Connection.js\";\nimport { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\nimport * as ConnectionService from \"../service/connection-service.js\";\nimport * as UserService from \"../service/user-service.js\";\nimport { Billing } from \"./Billing.js\";\n/**\n * This class defines a User on the Bkper platform.\n *\n * Users can own and collaborate on [[Books]], manage [[Collections]], and connect to external services through [[Connections]].\n *\n * Each User has a unique identity, subscription plan details, and access permissions across the platform.\n *\n * @public\n */\nexport class User extends Resource {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the id of the User.\n *\n * @returns The User's id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the given name of the User.\n *\n * @returns The User's given name\n */\n getGivenName() {\n return this.payload.givenName;\n }\n /**\n * Gets the name of the User.\n *\n * @returns The User's name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the avatar url of the User.\n *\n * @returns The User's avatar url\n */\n getAvatarUrl() {\n return this.payload.avatarUrl;\n }\n /**\n * Gets the full name of the User.\n *\n * @returns The User's full name\n */\n getFullName() {\n return this.payload.fullName;\n }\n /**\n * Gets the email of the User.\n *\n * @returns The User's email\n */\n getEmail() {\n return this.payload.email;\n }\n /**\n * Gets the hosted domain of the User.\n *\n * @returns The User's hosted domain\n */\n getHostedDomain() {\n return this.payload.hostedDomain;\n }\n /**\n * Gets the username of the User.\n *\n * @returns The User's username\n */\n getUsername() {\n return this.payload.username;\n }\n /**\n * Gets the billing information for this User.\n *\n * @returns The User's billing information\n */\n getBilling() {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = yield UserService.getBilling(this.getConfig());\n return new Billing(payload, this.config);\n });\n }\n /**\n * Tells if the User has already used [[Connections]].\n *\n * @returns True if the User has already used Connections\n */\n hasUsedConnections() {\n return this.payload.bankConnections;\n }\n /**\n * Gets the [[Connections]] of the User.\n *\n * @returns The retrieved Connection objects\n */\n getConnections() {\n return __awaiter(this, void 0, void 0, function* () {\n const json = yield ConnectionService.listConnections(this.getConfig());\n return json.map((c) => new Connection(c, this.config));\n });\n }\n /**\n * Gets a [[Connection]] of the User.\n *\n * @param id - The Connection's id\n *\n * @returns The retrieved Connection object\n */\n getConnection(id) {\n return __awaiter(this, void 0, void 0, function* () {\n const json = yield ConnectionService.getConnection(id, this.getConfig());\n return new Connection(json, this.config);\n });\n }\n}\n//# sourceMappingURL=User.js.map", "import { Agent } from \"./Agent.js\";\nimport { BotResponse } from \"./BotResponse.js\";\nimport { BotResponseType } from \"./Enums.js\";\nimport { User } from \"./User.js\";\n/**\n *\n * This class defines an Event from a [[Book]].\n *\n * An event is an object that represents an action (such as posting or deleting a [[Transaction]]) made by an actor (such as a user or a [Bot](https://bkper.com/apps) acting on behalf of a user).\n *\n * @public\n */\nexport class Event {\n constructor(book, payload) {\n this.book = book;\n this.payload = payload || {};\n }\n /**\n * Gets an immutable copy of the JSON payload for this Event.\n *\n * @returns The wrapped plain json object\n */\n json() {\n return Object.assign({}, this.payload);\n }\n /**\n * Gets the book in which the Event was created.\n *\n * @returns The book in which the Event was created\n */\n getBook() {\n return this.book;\n }\n /**\n * Gets the id of the Event.\n *\n * @returns The id of the Event\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the user who performed the Event.\n *\n * @returns The user who performed the Event\n */\n getUser() {\n return this.payload.user ? new User(this.payload.user, this.book.getConfig()) : undefined;\n }\n /**\n * Gets the Agent who performed the Event.\n *\n * @returns The Agent who performed the Event\n */\n getAgent() {\n return this.payload.agent ? new Agent(this.payload.agent) : undefined;\n }\n /**\n * Gets the date the Event was created.\n *\n * @returns The date the Event was created\n */\n getCreatedAt() {\n return this.payload.createdAt ? new Date(new Number(this.payload.createdAt).valueOf()) : undefined;\n }\n /**\n * Gets the type of the Event.\n *\n * @returns The type of the Event\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Gets the Bot Responses associated to this Event.\n *\n * @returns The Bot Responses associated to this Event\n */\n getBotResponses() {\n if (this.botResponses !== undefined) {\n return this.botResponses;\n }\n let botResponses = [];\n if (this.payload.botResponses) {\n for (const botResponse of this.payload.botResponses) {\n botResponses.push(new BotResponse(this, botResponse));\n }\n }\n this.botResponses = botResponses;\n return this.botResponses;\n }\n /**\n * Checks if this Event has at least one Bot Response of type ERROR.\n *\n * @returns True if this Event has at least one Bot Response of type ERROR\n */\n hasErrorResponse() {\n const botResponses = this.getBotResponses();\n for (const botResponse of botResponses) {\n if (botResponse.getType() === BotResponseType.ERROR) {\n return true;\n }\n }\n return false;\n }\n /** @internal */\n clearCache() {\n this.botResponses = undefined;\n }\n}\n//# sourceMappingURL=Event.js.map", "import { Event } from \"./Event.js\";\n/**\n * A list associated with an event query.\n *\n * @public\n */\nexport class EventList {\n constructor(book, payload) {\n this.book = book;\n this.payload = payload || {};\n }\n /**\n * Gets the cursor associated with the query for pagination.\n *\n * @returns The cursor associated with the query for pagination\n */\n getCursor() {\n return this.payload.cursor;\n }\n /**\n * Gets the first Event in the list.\n *\n * @returns The first Event in the list\n */\n getFirst() {\n const events = this.getItems();\n return events.length > 0 ? events[0] : undefined;\n }\n /**\n * Get the total number of events in the list.\n *\n * @returns The total number of events\n */\n size() {\n var _a;\n return ((_a = this.payload.items) === null || _a === void 0 ? void 0 : _a.length) || 0;\n }\n /**\n * Get the events in the list.\n *\n * @returns An array of Event objects\n */\n getItems() {\n var _a;\n return ((_a = this.payload.items) === null || _a === void 0 ? void 0 : _a.map(event => new Event(this.book, event))) || [];\n }\n}\n//# sourceMappingURL=EventList.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as FileService from \"../service/file-service.js\";\nimport { ResourceProperty } from \"./ResourceProperty.js\";\n/**\n *\n * This class defines a File uploaded to a [[Book]].\n *\n * A File can be attached to a [[Transaction]] or used to import data.\n *\n * @public\n */\nexport class File extends ResourceProperty {\n constructor(book, payload) {\n super(payload || { createdAt: `${Date.now()}` });\n this.book = book;\n }\n /**\n * Gets the Book this File belongs to.\n *\n * @returns The Book instance that owns this File\n */\n getBook() {\n return this.book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the File id.\n *\n * @returns The File id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the File name.\n *\n * @returns The File name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the File.\n *\n * @param name - The name to set\n *\n * @returns This File, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Gets the File content type.\n *\n * @returns The File content type\n */\n getContentType() {\n return this.payload.contentType;\n }\n /**\n * Sets the File content type.\n *\n * @param contentType - The content type to set\n *\n * @returns This File, for chaining\n */\n setContentType(contentType) {\n this.payload.contentType = contentType;\n return this;\n }\n /**\n * Gets the file content Base64 encoded.\n *\n * @returns The file content Base64 encoded\n */\n getContent() {\n return __awaiter(this, void 0, void 0, function* () {\n const id = this.getId();\n if (this.getId() != null &&\n (this.payload == null || this.payload.content == null) &&\n this.book &&\n id) {\n this.payload = yield FileService.getFile(this.book.getId(), id, this.getConfig());\n }\n return this.payload.content;\n });\n }\n /**\n * Sets the File content Base64 encoded.\n *\n * @param content - The content to set (Base64 encoded)\n *\n * @returns This File, for chaining\n */\n setContent(content) {\n this.payload.content = content;\n return this;\n }\n /**\n * Gets the file serving url for accessing via browser.\n *\n * @returns The file serving url\n */\n getUrl() {\n return this.payload.url;\n }\n /**\n * Gets the file size in bytes.\n *\n * @returns The file size in bytes\n */\n getSize() {\n return this.payload.size;\n }\n /**\n * Perform create new File.\n *\n * @returns The created File object\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield FileService.createFile(this.book.getId(), this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Perform update File, applying pending changes.\n *\n * @returns The updated File object\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield FileService.updateFile(this.book.getId(), this.payload, this.getConfig());\n return this;\n });\n }\n}\n//# sourceMappingURL=File.js.map", "import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n", "let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n", "const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { File } from './File.js';\nimport { Account } from './Account.js';\nimport { ResourceProperty } from './ResourceProperty.js';\nimport { TransactionStatus } from './Enums.js';\nimport * as TransactionService from '../service/transaction-service.js';\nimport * as Utils from '../utils.js';\nimport { Amount } from './Amount.js';\nimport { v4 as uuidv4 } from 'uuid';\n/**\n *\n * This class defines a Transaction between [credit and debit](http://en.wikipedia.org/wiki/Debits_and_credits) [[Accounts]].\n *\n * A Transaction is the main entity on the [Double Entry](http://en.wikipedia.org/wiki/Double-entry_bookkeeping_system) [Bookkeeping](http://en.wikipedia.org/wiki/Bookkeeping) system.\n *\n * @public\n */\nexport class Transaction extends ResourceProperty {\n constructor(book, payload) {\n super(payload || { createdAt: `${Date.now()}` });\n /** @internal */\n this.pendingFiles = new Map();\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the book associated with this transaction.\n *\n * @returns The book of the Transaction\n */\n getBook() {\n return this.book;\n }\n /**\n * Gets the unique identifier of the transaction.\n *\n * @returns The id of the Transaction\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the unique identifier of the agent that created this transaction.\n *\n * @returns The id of the agent that created this transaction\n */\n getAgentId() {\n return this.payload.agentId;\n }\n /**\n * Gets the name of the agent that created this transaction.\n *\n * @returns The name of the agent that created this transaction\n */\n getAgentName() {\n return this.payload.agentName;\n }\n /**\n * Gets the logo URL of the agent that created this transaction.\n *\n * @returns The logo of the agent that created this transaction\n */\n getAgentLogoUrl() {\n return this.payload.agentLogo;\n }\n /**\n * Gets the dark mode logo URL of the agent that created this transaction.\n *\n * @returns The logo of the agent that created this transaction in dark mode\n */\n getAgentLogoUrlDark() {\n return this.payload.agentLogoDark;\n }\n /**\n * Gets the remote IDs associated with this transaction. Remote ids are used to avoid duplication.\n *\n * @returns The remote ids of the Transaction\n */\n getRemoteIds() {\n return this.payload.remoteIds || [];\n }\n /**\n * Add a remote id to the Transaction.\n *\n * @param remoteId - The remote id to add\n *\n * @returns This Transaction, for chaining\n */\n addRemoteId(remoteId) {\n if (this.payload.remoteIds == null) {\n this.payload.remoteIds = [];\n }\n if (remoteId) {\n this.payload.remoteIds.push(remoteId);\n }\n return this;\n }\n /**\n * Checks if the transaction has been posted to the accounts.\n *\n * @returns True if transaction was already posted to the accounts. False if is still a Draft\n */\n isPosted() {\n return this.payload.posted;\n }\n /**\n * Checks if the transaction is marked as checked.\n *\n * @returns True if transaction is checked\n */\n isChecked() {\n return this.payload.checked;\n }\n /**\n * Set the check state of the Transaction.\n *\n * @param checked - The check state\n *\n * @returns This Transaction, for chaining\n */\n setChecked(checked) {\n this.payload.checked = checked;\n return this;\n }\n /**\n * Checks if the transaction is in the trash.\n *\n * @returns True if transaction is in trash\n */\n isTrashed() {\n return this.payload.trashed;\n }\n /**\n * Checks if the transaction is locked by the book's lock or closing date.\n *\n * @returns True if a transaction is locked by the book lock/closing date\n */\n isLocked() {\n const date = this.getDate() || Utils.formatDateISO(new Date(), this.book.getTimeZone());\n const lockOrClosingDate = this.book.getMostRecentLockDate_();\n return (lockOrClosingDate != null &&\n Utils.getIsoDateValue(lockOrClosingDate) >= Utils.getIsoDateValue(date));\n }\n /**\n * Gets the status of the transaction.\n *\n * @returns The status of the Transaction\n */\n getStatus() {\n if (this.isTrashed()) {\n return TransactionStatus.TRASHED;\n }\n if (!this.isPosted()) {\n return TransactionStatus.DRAFT;\n }\n if (this.isChecked()) {\n return TransactionStatus.CHECKED;\n }\n return TransactionStatus.UNCHECKED;\n }\n /**\n * Gets all hashtags used in the transaction.\n *\n * @returns All #hashtags used on the transaction\n */\n getTags() {\n if (this.payload.tags && this.payload.tags.length > 0) {\n return this.payload.tags;\n }\n const description = this.getDescription();\n if (description && description.includes('#')) {\n return Utils.extractTagsFromText(description);\n }\n return [];\n }\n /**\n * Gets all URLs associated with the transaction.\n *\n * @returns All urls of the transaction\n */\n getUrls() {\n return this.payload.urls || [];\n }\n /**\n * Sets the Transaction urls. Url starts with https://\n *\n * @param urls - The urls array\n *\n * @returns This Transaction, for chaining\n */\n setUrls(urls) {\n this.payload.urls = undefined;\n if (urls) {\n urls.forEach(url => {\n this.addUrl(url);\n });\n }\n return this;\n }\n /**\n * Add a url to the Transaction. Url starts with https://\n *\n * @param url - The url to add\n *\n * @returns This Transaction, for chaining\n */\n addUrl(url) {\n if (this.payload.urls == null) {\n this.payload.urls = [];\n }\n if (url) {\n this.payload.urls.push(url);\n }\n return this;\n }\n /**\n * Gets all files attached to the transaction.\n *\n * @returns The files attached to the transaction\n */\n getFiles() {\n if (this.payload.files && this.payload.files.length > 0) {\n const files = this.payload.files.map(file => new File(this.book, file));\n return files;\n }\n else {\n return [];\n }\n }\n /**\n * Removes a file attachment from the Transaction.\n *\n * @param file - The File to remove from this Transaction\n *\n * @returns This Transaction, for chaining\n */\n removeFile(file) {\n const fileId = file.getId();\n if (fileId) {\n if (this.payload.files != null) {\n this.payload.files = this.payload.files.filter(f => f.id !== fileId);\n }\n this.pendingFiles.delete(fileId);\n }\n return this;\n }\n /**\n * Adds a file attachment to the Transaction.\n *\n * Files not previously created in the Book will be automatically created when the transaction is persisted.\n *\n * @param file - The File to add to this Transaction\n *\n * @returns This Transaction, for chaining\n */\n addFile(file) {\n var _a;\n if (this.payload.files == null) {\n this.payload.files = [];\n }\n // Store file reference for later creation if needed\n const fileId = file.getId();\n const fileBookId = (_a = file.getBook()) === null || _a === void 0 ? void 0 : _a.getId();\n if (fileId == null || fileBookId != this.book.getId()) {\n // Generate temporary ID if file doesn't have one\n if (fileId == null) {\n file.payload.id = `temporary_${uuidv4()}`;\n }\n this.pendingFiles.set(file.getId(), file);\n }\n this.payload.files.push(file.json());\n return this;\n }\n /** @internal */\n createPendingFiles() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.pendingFiles.size === 0) {\n return;\n }\n if (this.payload.files == null) {\n this.payload.files = [];\n }\n // Create all pending files in parallel\n const promises = Array.from(this.pendingFiles.entries()).map((_a) => __awaiter(this, [_a], void 0, function* ([fileId, file]) {\n file.book = this.book;\n file.setProperty('upload_method', 'attachment');\n const createdFile = yield file.create();\n return { fileId, createdFile };\n }));\n const results = yield Promise.all(promises);\n // Update payload with all created files\n for (const { fileId, createdFile } of results) {\n const fileIndex = this.payload.files.findIndex(f => f.id === fileId);\n if (fileIndex >= 0) {\n this.payload.files[fileIndex] = createdFile.json();\n }\n else {\n this.payload.files.push(createdFile.json());\n }\n }\n // Clear pending files after creation\n this.pendingFiles.clear();\n });\n }\n /**\n * Check if the transaction has the specified tag.\n *\n * @param tag - The tag to check for\n *\n * @returns True if the transaction has the specified tag\n */\n hasTag(tag) {\n var tags = this.getTags();\n for (var i = 0; i < tags.length; i++) {\n if (tags[i] == tag) {\n return true;\n }\n }\n return false;\n }\n /**\n * Gets the credit account associated with this Transaction. Same as origin account\n *\n * @returns The credit (origin) account\n */\n getCreditAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.payload.creditAccount) {\n return undefined;\n }\n return yield this.book.getAccount(this.payload.creditAccount.id);\n });\n }\n /**\n * Gets the name of this Transaction's credit account.\n *\n * @returns The credit account name\n */\n getCreditAccountName() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if ((yield this.getCreditAccount()) != null) {\n return (_a = (yield this.getCreditAccount())) === null || _a === void 0 ? void 0 : _a.getName();\n }\n else {\n return '';\n }\n });\n }\n /**\n * Sets the credit/origin [[Account]] of this Transaction. Same as from()\n *\n * @param account - The Account object, or null/undefined to clear\n *\n * @returns This Transaction, for chaining\n */\n setCreditAccount(account) {\n if (account == null) {\n this.payload.creditAccount = undefined;\n return this;\n }\n if (account instanceof Account) {\n if (account.getId() != null) {\n this.payload.creditAccount = account.json();\n }\n }\n else {\n if (account.id != null) {\n this.payload.creditAccount = account;\n }\n }\n return this;\n }\n /**\n * Sets the credit/origin [[Account]] of this Transaction. Same as setCreditAccount()\n *\n * @param account - The Account object, or null/undefined to clear\n *\n * @returns This Transaction, for chaining\n */\n from(account) {\n return this.setCreditAccount(account);\n }\n /**\n * Gets the debit account associated with this Transaction. Same as destination account\n *\n * @returns The debit (destination) account\n */\n getDebitAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.payload.debitAccount) {\n return undefined;\n }\n return yield this.book.getAccount(this.payload.debitAccount.id);\n });\n }\n /**\n * Gets the name of this Transaction's debit account.\n *\n * @returns The debit account name\n */\n getDebitAccountName() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if ((yield this.getDebitAccount()) != null) {\n return (_a = (yield this.getDebitAccount())) === null || _a === void 0 ? void 0 : _a.getName();\n }\n else {\n return '';\n }\n });\n }\n /**\n * Sets the debit/destination [[Account]] of this Transaction. Same as to()\n *\n * @param account - The Account object, or null/undefined to clear\n *\n * @returns This Transaction, for chaining\n */\n setDebitAccount(account) {\n if (account == null) {\n this.payload.debitAccount = undefined;\n return this;\n }\n if (account instanceof Account) {\n if (account.getId() != null) {\n this.payload.debitAccount = { id: account.getId(), name: account.getName() };\n }\n }\n else {\n if (account.id != null) {\n this.payload.debitAccount = { id: account.id, name: account.name };\n }\n }\n return this;\n }\n /**\n * Sets the debit/destination [[Account]] of this Transaction. Same as setDebitAccount()\n *\n * @param account - The Account object, or null/undefined to clear\n *\n * @returns This Transaction, for chaining\n */\n to(account) {\n return this.setDebitAccount(account);\n }\n /**\n * Gets the amount of this Transaction.\n *\n * @returns The amount of this Transaction\n */\n getAmount() {\n return this.payload.amount != null && this.payload.amount.trim() != ''\n ? new Amount(this.payload.amount)\n : undefined;\n }\n /**\n * Gets the formatted amount of this Transaction according to the Book format.\n *\n * @returns The amount of this Transaction, formatted according to the Book format\n */\n getAmountFormatted() {\n const amount = this.getAmount();\n if (amount) {\n return this.book.formatValue(amount);\n }\n return undefined;\n }\n /**\n * Sets the amount of this Transaction.\n *\n * @param amount - The amount to set\n *\n * @returns This Transaction, for chaining\n */\n setAmount(amount) {\n if (typeof amount == 'string') {\n amount = Utils.parseValue(amount, this.book.getDecimalSeparator()) + '';\n this.payload.amount = amount.toString();\n return this;\n }\n amount = new Amount(amount);\n if (amount.eq(0)) {\n this.payload.amount = undefined;\n return this;\n }\n this.payload.amount = amount.abs().toString();\n return this;\n }\n /**\n * Get the absolute amount of this Transaction if the given account is at the credit side.\n *\n * @param account - The account object, id or name\n *\n * @returns The credit amount or undefined\n */\n getCreditAmount(account) {\n return __awaiter(this, void 0, void 0, function* () {\n let accountObject = yield this.getAccount_(account);\n if (yield this.isCredit(accountObject)) {\n return this.getAmount();\n }\n return undefined;\n });\n }\n /**\n * Gets the absolute amount of this Transaction if the given account is at the debit side.\n *\n * @param account - The account object, id or name\n *\n * @returns The debit amount or undefined\n */\n getDebitAmount(account) {\n return __awaiter(this, void 0, void 0, function* () {\n let accountObject = yield this.getAccount_(account);\n if (yield this.isDebit(accountObject)) {\n return this.getAmount();\n }\n return undefined;\n });\n }\n /**\n * Gets the [[Account]] at the other side of the transaction given the one in one side.\n *\n * @param account - The account object, id or name\n *\n * @returns The account at the other side of the transaction\n */\n getOtherAccount(account) {\n return __awaiter(this, void 0, void 0, function* () {\n let accountObject = yield this.getAccount_(account);\n if (yield this.isCredit(accountObject)) {\n return yield this.getDebitAccount();\n }\n if (yield this.isDebit(accountObject)) {\n return yield this.getCreditAccount();\n }\n return undefined;\n });\n }\n /**\n * The Account name at the other side of this Transaction given the one in one side.\n *\n * @param account - The Account object, id or name\n *\n * @returns The name of the Account at the other side\n */\n getOtherAccountName(account) {\n return __awaiter(this, void 0, void 0, function* () {\n var otherAccount = yield this.getOtherAccount(account);\n if (otherAccount != null) {\n return otherAccount.getName();\n }\n else {\n return '';\n }\n });\n }\n /**\n * Tell if the given account is credit on this Transaction\n *\n * @param account - The Account object\n *\n * @returns True if the account is the credit account\n */\n isCredit(account) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n return ((yield this.getCreditAccount()) != null &&\n account != null &&\n ((_a = (yield this.getCreditAccount())) === null || _a === void 0 ? void 0 : _a.getNormalizedName()) == account.getNormalizedName());\n });\n }\n /**\n * Tell if the given account is debit on the Transaction\n *\n * @param account - The [[Account]] object\n *\n * @returns True if the Account is the debit account\n */\n isDebit(account) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n return ((yield this.getDebitAccount()) != null &&\n account != null &&\n ((_a = (yield this.getDebitAccount())) === null || _a === void 0 ? void 0 : _a.getNormalizedName()) == account.getNormalizedName());\n });\n }\n /** @internal */\n getAccount_(account) {\n return __awaiter(this, void 0, void 0, function* () {\n if (account == null || account instanceof Account) {\n return account;\n }\n return yield this.book.getAccount(account);\n });\n }\n /**\n * Gets the description of this Transaction.\n *\n * @returns The description of this Transaction\n */\n getDescription() {\n if (this.payload.description == null) {\n return '';\n }\n return this.payload.description;\n }\n /**\n * Sets the description of the Transaction.\n *\n * @param description - The description to set\n *\n * @returns This Transaction, for chaining\n */\n setDescription(description) {\n this.payload.description = description;\n return this;\n }\n /**\n * Gets the transaction date in ISO format.\n *\n * @returns The Transaction date, in ISO format yyyy-MM-dd\n */\n getDate() {\n return this.payload.date;\n }\n /**\n * Sets the date of the Transaction.\n *\n * @param date - The date to set as string or Date object\n *\n * @returns This Transaction, for chaining\n */\n setDate(date) {\n if (typeof date == 'string') {\n if (date.indexOf('/') > 0) {\n let dateObject = Utils.parseDate(date, this.book.getDatePattern(), this.book.getTimeZone());\n this.payload.date = Utils.formatDateISO(dateObject, this.book.getTimeZone());\n }\n else if (date.indexOf('-') >= 0) {\n this.payload.date = date;\n }\n }\n else if (Object.prototype.toString.call(date) === '[object Date]') {\n this.payload.date = Utils.formatDateISO(date, this.book.getTimeZone());\n }\n return this;\n }\n /**\n * Gets the transaction date as a Date object in the book's timezone.\n *\n * @returns The Transaction Date object, on the time zone of the [[Book]]\n */\n getDateObject() {\n return Utils.convertValueToDate(this.getDateValue(), this.book.getTimeZoneOffset());\n }\n /**\n * Gets the transaction date as a numeric value.\n *\n * @returns The Transaction date number, in format YYYYMMDD\n */\n getDateValue() {\n return this.payload.dateValue;\n }\n /**\n * Gets the transaction date formatted according to the book's date pattern.\n *\n * @returns The Transaction date, formatted on the date pattern of the [[Book]]\n */\n getDateFormatted() {\n return this.payload.dateFormatted;\n }\n /**\n * Gets the date when the transaction was created.\n *\n * @returns The date the transaction was created\n */\n getCreatedAt() {\n return new Date(new Number(this.payload.createdAt).valueOf());\n }\n /**\n * Gets the formatted creation date of the transaction.\n *\n * @returns The date the transaction was created, formatted according to the date pattern of the [[Book]]\n */\n getCreatedAtFormatted() {\n return Utils.formatDate(this.getCreatedAt(), this.book.getDatePattern() + ' HH:mm:ss', this.book.getTimeZone());\n }\n /**\n * Gets the username of the user who created the transaction.\n *\n * @returns The username of the user who created the transaction\n */\n getCreatedBy() {\n return this.payload.createdBy;\n }\n /**\n * Gets the date when the transaction was last updated.\n *\n * @returns The date the transaction was last updated\n */\n getUpdatedAt() {\n return new Date(new Number(this.payload.updatedAt).valueOf());\n }\n /**\n * Gets the formatted last update date of the transaction.\n *\n * @returns The date the transaction was last updated, formatted according to the date pattern of the [[Book]]\n */\n getUpdatedAtFormatted() {\n return Utils.formatDate(this.getUpdatedAt(), this.book.getDatePattern() + ' HH:mm:ss', this.book.getTimeZone());\n }\n /** @internal */\n getCaEvolvedBalance_() {\n return this.payload.creditAccount != null && this.payload.creditAccount.balance != null\n ? new Amount(this.payload.creditAccount.balance)\n : undefined;\n }\n /** @internal */\n getDaEvolvedBalance_() {\n return this.payload.debitAccount != null && this.payload.debitAccount.balance != null\n ? new Amount(this.payload.debitAccount.balance)\n : undefined;\n }\n /**\n * Gets the balance that the [[Account]] has at that day, when listing transactions of that Account.\n *\n * Evolved balances is returned when searching for transactions of a permanent [[Account]].\n *\n * Only comes with the last posted transaction of the day.\n *\n * @param raw - True to get the raw balance, no matter the credit nature of the [[Account]]\n *\n * @returns The account balance at the transaction date\n */\n getAccountBalance(raw) {\n return __awaiter(this, void 0, void 0, function* () {\n var accountBalance = this.getCaEvolvedBalance_();\n var isCa = true;\n if (accountBalance == null) {\n accountBalance = this.getDaEvolvedBalance_();\n isCa = false;\n }\n if (accountBalance != null) {\n if (!raw) {\n var account = isCa ? yield this.getCreditAccount() : yield this.getDebitAccount();\n accountBalance = Utils.getRepresentativeValue(accountBalance, account === null || account === void 0 ? void 0 : account.isCredit());\n }\n return Utils.round(accountBalance, this.book.getFractionDigits());\n }\n else {\n return undefined;\n }\n });\n }\n /**\n * Perform create new draft transaction.\n *\n * @returns This Transaction, for chaining\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.createPendingFiles();\n let operation = yield TransactionService.createTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload = operation.transaction || {};\n return this;\n });\n }\n /**\n * Update transaction, applying pending changes.\n *\n * @returns This Transaction, for chaining\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.createPendingFiles();\n let operation = yield TransactionService.updateTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload = operation.transaction || {};\n return this;\n });\n }\n /**\n * Perform check transaction.\n *\n * @returns This Transaction, for chaining\n */\n check() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let operation = yield TransactionService.checkTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload.checked = (_a = operation.transaction) === null || _a === void 0 ? void 0 : _a.checked;\n return this;\n });\n }\n /**\n * Perform uncheck transaction.\n *\n * @returns This Transaction, for chaining\n */\n uncheck() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let operation = yield TransactionService.uncheckTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload.checked = (_a = operation.transaction) === null || _a === void 0 ? void 0 : _a.checked;\n return this;\n });\n }\n /**\n * Perform post transaction, changing credit and debit [[Account]] balances.\n *\n * @returns This Transaction, for chaining\n */\n post() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.createPendingFiles();\n let operation = yield TransactionService.postTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload = operation.transaction || {};\n return this;\n });\n }\n /**\n * Trash the transaction.\n *\n * @returns This Transaction, for chaining\n */\n trash() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let operation = yield TransactionService.trashTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload.trashed = (_a = operation.transaction) === null || _a === void 0 ? void 0 : _a.trashed;\n return this;\n });\n }\n /**\n * Untrash the transaction.\n *\n * @returns This Transaction, for chaining\n */\n untrash() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let operation = yield TransactionService.restoreTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload.trashed = (_a = operation.transaction) === null || _a === void 0 ? void 0 : _a.trashed;\n return this;\n });\n }\n}\n//# sourceMappingURL=Transaction.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Transaction } from \"./Transaction.js\";\n/**\n * A list associated with a transaction query.\n *\n * @public\n */\nexport class TransactionList {\n constructor(book, payload) {\n this.book = book;\n this.payload = payload || {};\n }\n /**\n * Gets the cursor associated with the query for pagination.\n *\n * @returns The cursor associated with the query for pagination\n */\n getCursor() {\n return this.payload.cursor;\n }\n /**\n * Retrieves the account associated with the query, when filtering by account.\n *\n * @returns The account associated with the query, or undefined if not set\n */\n getAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.payload.account) {\n return undefined;\n }\n return yield this.book.getAccount(this.payload.account);\n });\n }\n /**\n * Gets the first Transaction in the list.\n *\n * @returns The first Transaction in the list\n */\n getFirst() {\n const transactions = this.getItems();\n return transactions.length > 0 ? transactions[0] : undefined;\n }\n /**\n * Gets the total number of transactions in the list.\n *\n * @returns The total number of transactions\n */\n size() {\n var _a;\n return ((_a = this.payload.items) === null || _a === void 0 ? void 0 : _a.length) || 0;\n }\n /**\n * Gets the transactions in the list.\n *\n * @returns An array of Transaction objects\n */\n getItems() {\n var _a;\n let transactions = [];\n for (let transaction of (_a = this.payload.items) !== null && _a !== void 0 ? _a : []) {\n transactions.push(new Transaction(this.book, transaction));\n }\n return transactions;\n }\n}\n//# sourceMappingURL=TransactionList.js.map", "import * as Utils from '../utils.js';\nimport { Amount } from \"./Amount.js\";\n/**\n * Class that represents an [[Account]] or [[Group]] balance on a window of time (Day / Month / Year).\n *\n * @public\n */\nexport class Balance {\n constructor(container, balancePlain) {\n this.container = container;\n this.payload = balancePlain;\n }\n /**\n * The day of the balance. Days starts on 1 to 31.\n *\n * Day can be 0 (zero) in case of Monthly or Early [[Periodicity]] of the [[BalancesReport]]\n */\n getDay() {\n return this.payload.day;\n }\n /**\n * The month of the balance. Months starts on 1 (January) to 12 (December)\n *\n * Month can be 0 (zero) in case of Early [[Periodicity]] of the [[BalancesReport]]\n */\n getMonth() {\n return this.payload.month;\n }\n /**\n * The year of the balance\n */\n getYear() {\n return this.payload.year;\n }\n /**\n * Date object constructed based on [[Book]] time zone offset. Usefull for\n *\n * If Month or Day is zero, the date will be constructed with first Month (January) or Day (1) of the next period.\n */\n getDate() {\n var year = this.getYear();\n var month = this.getMonth();\n var day = this.getDay();\n if (month == null || month == 0) {\n year++;\n }\n if (day == null || day == 0) {\n month++;\n }\n var date = Utils.createDate(year, month, day, this.container.getBalancesReport().getBook().getTimeZoneOffset());\n return date;\n }\n /**\n * The Fuzzy Date of the balance, based on [[Periodicity]] of the [[BalancesReport]] query, composed by Year, Month and Day.\n *\n * The format is **YYYYMMDD**. Very usefull for ordering and indexing\n *\n * Month and Day can be 0 (zero), depending on the granularity of the [[Periodicity]].\n *\n * *Example:*\n *\n * **20180125** - 25, January, 2018 - DAILY Periodicity\n *\n * **20180100** - January, 2018 - MONTHLY Periodicity\n *\n * **20180000** - 2018 - YEARLY Periodicity\n */\n getFuzzyDate() {\n return this.payload.fuzzyDate;\n }\n /**\n * The cumulative balance to the date, based on the credit nature of the container\n */\n getCumulativeBalance() {\n return Utils.getRepresentativeValue(this.getCumulativeBalanceRaw(), this.container.isCredit());\n }\n /**\n * The raw cumulative balance to the date.\n */\n getCumulativeBalanceRaw() {\n return new Amount(this.payload.cumulativeBalance);\n }\n /**\n * The cumulative credit to the date.\n */\n getCumulativeCredit() {\n return new Amount(this.payload.cumulativeCredit);\n }\n /**\n * The cumulative debit to the date.\n */\n getCumulativeDebit() {\n return new Amount(this.payload.cumulativeDebit);\n }\n /**\n * The balance on the date period, based on credit nature of the container.\n */\n getPeriodBalance() {\n return Utils.getRepresentativeValue(this.getPeriodBalanceRaw(), this.container.isCredit());\n }\n /**\n * The raw balance on the date period.\n */\n getPeriodBalanceRaw() {\n return new Amount(this.payload.periodBalance);\n }\n /**\n * The credit on the date period.\n */\n getPeriodCredit() {\n return new Amount(this.payload.periodCredit);\n }\n /**\n * The debit on the date period.\n */\n getPeriodDebit() {\n return new Amount(this.payload.periodDebit);\n }\n}\n//# sourceMappingURL=Balance.js.map", "import { Amount } from '../model/Amount.js';\nimport { BalanceType } from '../model/Enums.js';\nimport * as Utils from '../utils.js';\n/**\n * A BalancesDataTableBuilder is used to setup and build two-dimensional arrays containing balance information.\n *\n * @public\n */\nexport class BalancesDataTableBuilder {\n constructor(book, balancesContainers, periodicity) {\n this.maxDepth = 0;\n this.expandAllAccounts = false;\n this.expandAllGroups = false;\n this.skipRoot = false;\n this.book = book;\n this.balancesContainers = balancesContainers;\n this.periodicity = periodicity;\n this.balanceType = BalanceType.TOTAL;\n this.shouldFormatDate = false;\n this.shouldHideDates = false;\n this.shouldHideNames = false;\n this.shouldFormatValue = false;\n this.shouldTranspose = false;\n this.shouldTrial = false;\n this.shouldPeriod = false;\n this.shouldRaw = false;\n this.shouldAddProperties = false;\n this.shouldAddHiddenProperties = false;\n }\n getBalance(balance, permanent) {\n return this.getRepresentativeBalance(balance, permanent).toNumber();\n }\n getRepresentativeBalance(balance, permanent) {\n if (balance == null) {\n return new Amount(0);\n }\n if (permanent) {\n return balance.times(-1);\n }\n return balance;\n }\n getBalanceText(balance, permanent) {\n return this.book.formatValue(this.getRepresentativeBalance(balance, permanent));\n }\n /**\n * Defines whether the dates should be ISO formatted YYYY-MM-DD. E.g. 2025-01-01\n *\n * @returns This builder with respective formatting option, for chaining.\n */\n formatDates(format) {\n this.shouldFormatDate = format;\n return this;\n }\n /**\n * Defines whether the value should be formatted based on decimal separator of the [[Book]].\n *\n * @returns This builder with respective formatting option, for chaining.\n */\n formatValues(format) {\n this.shouldFormatValue = format;\n return this;\n }\n /**\n * Defines whether Groups should expand its child accounts.\n *\n * true to expand itself\n * -1 to expand all subgroups\n * -2 to expand all accounts\n * 0 to expand nothing\n * 1 to expand itself and its first level of children\n * 2 to expand itself and its first two levels of children\n * etc.\n *\n * @returns This builder with respective expanded option, for chaining.\n */\n expanded(expanded) {\n if (typeof expanded == 'boolean' && expanded == true) {\n this.maxDepth = 1;\n this.skipRoot = true;\n }\n else if (expanded == -1) {\n this.expandAllGroups = true;\n }\n else if (expanded == -2) {\n this.expandAllAccounts = true;\n }\n else if (typeof expanded == 'number' && expanded > 0) {\n this.maxDepth = expanded;\n }\n return this;\n }\n /**\n * Fluent method to set the [[BalanceType]] for the builder.\n *\n * @param type - The type of balance for this data table\n *\n * For **TOTAL** [[BalanceType]], the table format looks like:\n *\n * ```\n * _____________________\n * | Expenses | -4568.23 |\n * | Income | 5678.93 |\n * | ... | ... |\n * |___________|__________|\n *\n * ```\n * Two columns, and each [[Account]] or [[Group]] per line.\n *\n * For **PERIOD** or **CUMULATIVE** [[BalanceType]], the table will be a time table, and the format looks like:\n *\n * ```\n * _______________________________________________________________\n * | | 15/01/2014 | 15/02/2014 | 15/03/2014 | ... |\n * | Expenses | -2345.23 | -2345.93 | -2456.45 | ... |\n * | Income | 3452.93 | 3456.46 | 3567.87 | ... |\n * | ... | ... | ... | ... | ... |\n * |____________|____________|____________|____________|___________|\n *\n * ```\n *\n * First column will be the [[Account]] or [[Group]] name, and one column for each Date.\n *\n * @returns This builder with respective balance type, for chaining.\n */\n type(type) {\n this.balanceType = type;\n return this;\n }\n /**\n * Defines whether should rows and columns should be transposed.\n *\n * For **TOTAL** [[BalanceType]], the **transposed** table looks like:\n *\n * ```\n * _____________________________\n * | Expenses | Income | ... |\n * | -4568.23 | 5678.93 | ... |\n * |___________|_________|_______|\n *\n * ```\n * Two rows, and each [[Account]] or [[Group]] per column.\n *\n *\n * For **PERIOD** or **CUMULATIVE** [[BalanceType]], the **transposed** table will be a time table, and the format looks like:\n *\n * ```\n * _______________________________________________________________\n * | | Expenses | Income | ... | ... |\n * | 15/01/2014 | -2345.23 | 3452.93 | ... | ... |\n * | 15/02/2014 | -2345.93 | 3456.46 | ... | ... |\n * | 15/03/2014 | -2456.45 | 3567.87 | ... | ... |\n * | ... | ... | ... | ... | ... |\n * |____________|____________|____________|____________|___________|\n *\n * ```\n *\n * First column will be each Date, and one column for each [[Account]] or [[Group]].\n *\n * @returns This builder with respective transposed option, for chaining.\n */\n transposed(transposed) {\n this.shouldTranspose = transposed;\n return this;\n }\n /**\n * Defines whether the dates should be hidden for **PERIOD** or **CUMULATIVE** [[BalanceType]].\n *\n * @returns This builder with respective hide dates option, for chaining.\n */\n hideDates(hide) {\n this.shouldHideDates = hide;\n return this;\n }\n /**\n * Defines whether the [[Accounts]] and [[Groups]] names should be hidden.\n *\n * @returns This builder with respective hide names option, for chaining.\n */\n hideNames(hide) {\n this.shouldHideNames = hide;\n return this;\n }\n /**\n * Defines whether include custom [[Accounts]] and [[Groups]] properties.\n *\n * @returns This builder with respective include properties option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n /**\n * Defines whether should split **TOTAL** [[BalanceType]] into debit and credit.\n *\n * @returns This builder with respective trial option, for chaining.\n */\n trial(trial) {\n this.shouldTrial = trial;\n return this;\n }\n /**\n * Defines whether should force use of period balances for **TOTAL** [[BalanceType]].\n *\n * @returns This builder with respective trial option, for chaining.\n */\n period(period) {\n this.shouldPeriod = period;\n return this;\n }\n /**\n * Defines whether should show raw balances, no matter the credit nature of the Account or Group.\n *\n * @returns This builder with respective trial option, for chaining.\n */\n raw(raw) {\n this.shouldRaw = raw;\n return this;\n }\n /**\n *\n * Builds an two-dimensional array with the balances.\n *\n */\n build() {\n if (this.balanceType == BalanceType.TOTAL) {\n return this.buildTotalDataTable_();\n }\n else {\n return this.buildTimeDataTable_();\n }\n }\n ////////////////////////\n addPropertyKeys(propertyKeys, container) {\n for (const key of container.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (propertyKeys.indexOf(key) <= -1) {\n propertyKeys.push(key);\n }\n }\n }\n flattenContainers(containersFlat, propertyKeys) {\n for (const container of this.balancesContainers) {\n if (this.expandAllAccounts) {\n this.flattenAllAccounts(container, containersFlat, propertyKeys);\n containersFlat.sort(this.sortContainersFunction);\n }\n else if (container.isFromGroup() && this.expandAllGroups) {\n this.flattenAllGroups(container, containersFlat, propertyKeys);\n }\n else {\n this.flattenMaxDepth(container, containersFlat, propertyKeys);\n }\n }\n }\n flattenAllAccounts(container, containersFlat, propertyKeys) {\n if (container.isFromGroup()) {\n for (const child of container.getBalancesContainers()) {\n this.flattenAllAccounts(child, containersFlat, propertyKeys);\n }\n }\n else {\n containersFlat.push(container);\n if (this.shouldAddProperties) {\n this.addPropertyKeys(propertyKeys, container);\n }\n }\n }\n sortContainersFunction(a, b) {\n let ret = 0;\n if (a.isPermanent() && !b.isPermanent()) {\n ret = -1;\n }\n else if (!a.isPermanent() && b.isPermanent()) {\n ret = 1;\n }\n if (ret == 0) {\n if (a.getParent() && !b.getParent()) {\n ret = -1;\n }\n else if (!a.getParent() && b.getParent()) {\n ret = 1;\n }\n }\n if (ret == 0) {\n ret = getBalanceTypeOrdinal(a) - getBalanceTypeOrdinal(b);\n }\n if (ret == 0) {\n ret = a.getName().toLowerCase().localeCompare(b.getName().toLowerCase());\n }\n function getBalanceTypeOrdinal(bc) {\n // ASSET(true, false, \"asset\"),\n if (bc.isPermanent() && !bc.isCredit()) {\n return 0;\n }\n // LIABILITY(true, true, \"liability\"),\n if (bc.isPermanent() && bc.isCredit()) {\n return 1;\n }\n // INCOMING(false, true, \"incoming\"),\n if (!bc.isPermanent() && bc.isCredit()) {\n return 2;\n }\n if (!bc.isPermanent() && !bc.isCredit()) {\n return 3;\n }\n return 4;\n }\n return ret;\n }\n flattenMaxDepth(container, containersFlat, propertyKeys) {\n let depth = container.getDepth();\n if (depth <= this.maxDepth) {\n if (!this.skipRoot && !this.shouldTranspose) {\n container.payload.name =\n Utils.repeatString(' ', depth * 4) + container.payload.name;\n }\n if (!this.skipRoot || depth != 0) {\n containersFlat.push(container);\n if (this.shouldAddProperties) {\n this.addPropertyKeys(propertyKeys, container);\n }\n }\n const children = container.getBalancesContainers();\n if (children && children.length > 0) {\n children.sort(this.sortContainersFunction);\n for (const child of children) {\n this.flattenMaxDepth(child, containersFlat, propertyKeys);\n }\n }\n }\n }\n flattenAllGroups(container, containersFlat, propertyKeys) {\n if (container.isFromGroup()) {\n if (!this.shouldTranspose) {\n let depth = container.getDepth();\n container.payload.name =\n Utils.repeatString(' ', depth * 4) + container.payload.name;\n }\n containersFlat.push(container);\n if (this.shouldAddProperties) {\n this.addPropertyKeys(propertyKeys, container);\n }\n if (container.hasGroupBalances()) {\n const children = container.getBalancesContainers();\n children.sort(this.sortContainersFunction);\n for (const child of children) {\n this.flattenAllGroups(child, containersFlat, propertyKeys);\n }\n }\n }\n }\n buildTotalDataTable_() {\n var table = new Array();\n if (this.balancesContainers == null) {\n return table;\n }\n this.balancesContainers.sort((a, b) => {\n if (a != null && b != null) {\n return a.getName().toLowerCase().localeCompare(b.getName().toLowerCase());\n }\n return -1;\n });\n let propertyKeys = [];\n let containers = new Array();\n this.flattenContainers(containers, propertyKeys);\n if (this.shouldAddProperties) {\n propertyKeys.sort();\n let header = ['name', 'balance'];\n for (const key of propertyKeys) {\n header.push(key);\n }\n table.push(header);\n }\n for (var i = 0; i < containers.length; i++) {\n var balances = containers[i];\n if (balances != null) {\n var line = new Array();\n var name = balances.getName();\n line.push(name);\n if (this.shouldTrial) {\n if (this.shouldFormatValue) {\n if (this.shouldPeriod) {\n line.push(balances.getPeriodDebitText());\n line.push(balances.getPeriodCreditText());\n }\n else {\n line.push(balances.getCumulativeDebitText());\n line.push(balances.getCumulativeCreditText());\n }\n }\n else {\n if (this.shouldPeriod) {\n line.push(balances.getPeriodDebit().toNumber());\n line.push(balances.getPeriodCredit().toNumber());\n }\n else {\n line.push(balances.getCumulativeDebit().toNumber());\n line.push(balances.getCumulativeCredit().toNumber());\n }\n }\n }\n else {\n if (this.shouldFormatValue) {\n if (this.shouldPeriod) {\n if (this.shouldRaw) {\n line.push(balances.getPeriodBalanceRawText());\n }\n else {\n line.push(this.getBalanceText(balances.getPeriodBalanceRaw(), balances.isPermanent()));\n }\n }\n else {\n if (this.shouldRaw) {\n line.push(balances.getCumulativeBalanceRawText());\n }\n else {\n line.push(this.getBalanceText(balances.getCumulativeBalanceRaw(), balances.isPermanent()));\n }\n }\n }\n else {\n if (this.shouldPeriod) {\n if (this.shouldRaw) {\n line.push(balances.getPeriodBalanceRaw().toNumber());\n }\n else {\n line.push(this.getBalance(balances.getPeriodBalanceRaw(), balances.isPermanent()));\n }\n }\n else {\n if (this.shouldRaw) {\n line.push(balances.getCumulativeBalanceRaw().toNumber());\n }\n else {\n line.push(this.getBalance(balances.getCumulativeBalanceRaw(), balances.isPermanent()));\n }\n }\n }\n }\n if (this.shouldAddProperties) {\n const properties = balances.getProperties();\n for (const key of propertyKeys) {\n let propertyValue = properties[key];\n if (propertyValue) {\n line.push(propertyValue);\n continue;\n }\n line.push('');\n }\n }\n table.push(line);\n }\n }\n if (this.shouldHideNames) {\n table = table.map(row => row.slice(1));\n }\n if (this.shouldTranspose && table.length > 0) {\n table = table[0].map((col, i) => table.map(row => row[i]));\n }\n return table;\n }\n buildTimeDataTable_() {\n var table = new Array();\n var dataIndexMap = new Object();\n var cumulativeBalance = this.balanceType == BalanceType.CUMULATIVE;\n var header = new Array();\n header.push('');\n if (this.balancesContainers == null) {\n return table;\n }\n let propertyKeys = [];\n let containers = new Array();\n this.flattenContainers(containers, propertyKeys);\n for (const container of containers) {\n header.push(container.getName());\n var balances = container.getBalances();\n if (balances != null) {\n for (const balance of balances) {\n var fuzzyDate = balance.getFuzzyDate();\n var indexEntry = dataIndexMap[fuzzyDate];\n if (indexEntry == null) {\n indexEntry = {};\n indexEntry.date = balance.getDate();\n dataIndexMap[fuzzyDate] = indexEntry;\n }\n var amount;\n if (cumulativeBalance) {\n amount = balance.getCumulativeBalanceRaw();\n }\n else {\n amount = balance.getPeriodBalanceRaw();\n }\n indexEntry[container.getName()] = this.shouldRaw\n ? amount\n : this.getRepresentativeBalance(amount, container.isPermanent());\n }\n }\n }\n table.push(header);\n var rows = new Array();\n for (var fuzzy in dataIndexMap) {\n var rowObject = dataIndexMap[fuzzy];\n var row = new Array();\n row.push(rowObject.date);\n for (const container of containers) {\n var amount = rowObject[container.getName()];\n if (amount == null) {\n amount = 'null_amount';\n }\n else {\n amount = new Amount(amount);\n if (this.shouldFormatValue) {\n amount = Utils.formatValue(amount, this.book.getDecimalSeparator(), this.book.getFractionDigits());\n }\n else {\n amount = amount.toNumber();\n }\n }\n row.push(amount);\n }\n rows.push(row);\n }\n rows.sort(function (a, b) {\n return a[0].getTime() - b[0].getTime();\n });\n var lastRow = null;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (i == 0) {\n //first row, all null values will be 0\n for (var j = 1; j < row.length; j++) {\n var cell = row[j];\n if (cell == 'null_amount') {\n var amount = new Amount(0);\n if (this.shouldFormatValue) {\n amount = Utils.formatValue(amount, this.book.getDecimalSeparator(), this.book.getFractionDigits());\n }\n else {\n amount = amount.toNumber();\n }\n row[j] = amount;\n }\n }\n }\n else {\n for (var j = 1; j < row.length; j++) {\n var cell = row[j];\n if (cell == 'null_amount' && cumulativeBalance) {\n if (lastRow) {\n row[j] = lastRow[j];\n }\n }\n else if (cell == 'null_amount') {\n var amount = new Amount(0);\n if (this.shouldFormatValue) {\n amount = Utils.formatValue(amount, this.book.getDecimalSeparator(), this.book.getFractionDigits());\n }\n else {\n amount = amount.toNumber();\n }\n row[j] = amount;\n }\n }\n }\n lastRow = row;\n table.push(row);\n }\n if (this.shouldFormatDate && table.length > 0) {\n // var pattern = Utils.getDateFormatterPattern(this.book.getDatePattern(), this.periodicity);\n for (var j = 1; j < table.length; j++) {\n var row = table[j];\n if (row.length > 0) {\n //first column\n row[0] = Utils.formatDateISO(row[0], this.book.getTimeZone());\n }\n }\n }\n if (this.shouldAddProperties) {\n propertyKeys.sort();\n for (const key of propertyKeys) {\n var propertyRow = [key];\n for (const container of containers) {\n propertyRow.push(container.getProperty(key) || '');\n }\n table.push(propertyRow);\n }\n }\n if (this.shouldHideNames) {\n table.shift();\n }\n if (this.shouldHideDates) {\n table = table.map(row => row.slice(1));\n }\n if (!this.shouldTranspose && table.length > 0) {\n table = table[0].map((col, i) => table.map(row => row[i]));\n }\n return table;\n }\n}\n//# sourceMappingURL=BalancesDataTableBuilder.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { getRepresentativeValue, normalizeName } from '../utils.js';\nimport { Amount } from './Amount.js';\nimport { Balance } from './Balance.js';\nimport { BalancesDataTableBuilder } from '../builders/BalancesDataTableBuilder.js';\n/** @internal */\nexport class AccountBalancesContainer {\n constructor(parent, balancesReport, payload) {\n this.parent = parent;\n this.balancesReport = balancesReport;\n this.payload = payload;\n }\n getBalancesReport() {\n return this.balancesReport;\n }\n getName() {\n return this.payload.name;\n }\n getNormalizedName() {\n return this.payload.normalizedName;\n }\n getGroup() {\n return __awaiter(this, void 0, void 0, function* () {\n return null;\n });\n }\n getAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n const account = yield this.balancesReport.getBook().getAccount(this.getNormalizedName());\n return account || null;\n });\n }\n getParent() {\n return this.parent;\n }\n getDepth() {\n if (this.depth == null) {\n const parent = this.getParent();\n this.depth = parent != null ? parent.getDepth() + 1 : 0;\n }\n return this.depth;\n }\n isCredit() {\n return this.payload.credit;\n }\n isPermanent() {\n return this.payload.permanent || false;\n }\n isFromAccount() {\n return true;\n }\n isFromGroup() {\n return false;\n }\n hasGroupBalances() {\n return false;\n }\n getCumulativeBalance() {\n return getRepresentativeValue(new Amount(this.payload.cumulativeBalance || 0), this.isCredit());\n }\n getCumulativeBalanceRaw() {\n return new Amount(this.payload.cumulativeBalance || 0);\n }\n getCumulativeCredit() {\n return new Amount(this.payload.cumulativeCredit || 0);\n }\n getCumulativeDebit() {\n return new Amount(this.payload.cumulativeDebit || 0);\n }\n getCumulativeBalanceText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeBalance());\n }\n getCumulativeBalanceRawText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeBalanceRaw());\n }\n getCumulativeCreditText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeCredit());\n }\n getCumulativeDebitText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeDebit());\n }\n getPeriodBalance() {\n return getRepresentativeValue(new Amount(this.payload.periodBalance || 0), this.isCredit());\n }\n getPeriodBalanceRaw() {\n return new Amount(this.payload.periodBalance || 0);\n }\n getPeriodCredit() {\n return new Amount(this.payload.periodCredit || 0);\n }\n getPeriodDebit() {\n return new Amount(this.payload.periodDebit || 0);\n }\n getPeriodBalanceText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodBalance());\n }\n getPeriodBalanceRawText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodBalanceRaw());\n }\n getPeriodCreditText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodCredit());\n }\n getPeriodDebitText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodDebit());\n }\n createDataTable() {\n return new BalancesDataTableBuilder(this.balancesReport.getBook(), [this], this.balancesReport.getPeriodicity());\n }\n getBalancesContainers() {\n return [];\n }\n getBalances() {\n if (!this.payload.balances) {\n return new Array();\n }\n return this.payload.balances.map(balancePlain => new Balance(this, balancePlain));\n }\n getProperties() {\n return this.payload.properties != null ? Object.assign({}, this.payload.properties) : {};\n }\n getProperty(...keys) {\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n let value = this.payload.properties != null ? this.payload.properties[key] : null;\n if (value != null && value.trim() != '') {\n return value;\n }\n }\n return undefined;\n }\n getPropertyKeys() {\n let properties = this.getProperties();\n let propertyKeys = [];\n if (properties) {\n for (var key in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, key)) {\n propertyKeys.push(key);\n }\n }\n }\n propertyKeys = propertyKeys.sort();\n return propertyKeys;\n }\n getBalancesContainer(name) {\n const normalizedName = normalizeName(name);\n if (this.getNormalizedName() == normalizedName) {\n return this;\n }\n throw `${name} does not match ${this.getName()}`;\n }\n}\n//# sourceMappingURL=BalancesContainerAccount.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Amount } from './Amount.js';\nimport { getRepresentativeValue, normalizeName } from '../utils.js';\nimport { AccountBalancesContainer } from './BalancesContainerAccount.js';\nimport { Balance } from './Balance.js';\nimport { BalancesDataTableBuilder } from '../builders/BalancesDataTableBuilder.js';\n/** @internal */\nexport class GroupBalancesContainer {\n constructor(parent, balancesReport, payload) {\n this.parent = parent;\n this.balancesReport = balancesReport;\n this.payload = payload;\n }\n getBalancesReport() {\n return this.balancesReport;\n }\n getName() {\n return this.payload.name;\n }\n getNormalizedName() {\n return this.payload.normalizedName;\n }\n getGroup() {\n return __awaiter(this, void 0, void 0, function* () {\n const group = yield this.balancesReport.getBook().getGroup(this.getNormalizedName());\n return group || null;\n });\n }\n getAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n return null;\n });\n }\n getParent() {\n return this.parent;\n }\n getDepth() {\n if (this.depth == null) {\n const parent = this.getParent();\n this.depth = parent != null ? parent.getDepth() + 1 : 0;\n }\n return this.depth;\n }\n isCredit() {\n return this.payload.credit || false;\n }\n isPermanent() {\n return this.payload.permanent || false;\n }\n isFromAccount() {\n return false;\n }\n isFromGroup() {\n return true;\n }\n hasGroupBalances() {\n const groupContainers = this.getGroupContainers();\n return groupContainers != null && groupContainers.length > 0;\n }\n getCumulativeBalance() {\n return getRepresentativeValue(new Amount(this.payload.cumulativeBalance || 0), this.isCredit());\n }\n getCumulativeBalanceRaw() {\n return new Amount(this.payload.cumulativeBalance || 0);\n }\n getCumulativeCredit() {\n return new Amount(this.payload.cumulativeCredit || 0);\n }\n getCumulativeDebit() {\n return new Amount(this.payload.cumulativeDebit || 0);\n }\n getCumulativeBalanceText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeBalance());\n }\n getCumulativeBalanceRawText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeBalanceRaw());\n }\n getCumulativeCreditText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeCredit());\n }\n getCumulativeDebitText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeDebit());\n }\n getPeriodBalance() {\n return getRepresentativeValue(new Amount(this.payload.periodBalance || 0), this.isCredit());\n }\n getPeriodBalanceRaw() {\n return new Amount(this.payload.periodBalance || 0);\n }\n getPeriodCredit() {\n return new Amount(this.payload.periodCredit || 0);\n }\n getPeriodDebit() {\n return new Amount(this.payload.periodDebit || 0);\n }\n getPeriodBalanceText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodBalance());\n }\n getPeriodBalanceRawText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodBalanceRaw());\n }\n getPeriodCreditText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodCredit());\n }\n getPeriodDebitText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodDebit());\n }\n getBalances() {\n if (!this.payload.balances) {\n return new Array();\n }\n return this.payload.balances.map(balancePlain => new Balance(this, balancePlain));\n }\n createDataTable() {\n return new BalancesDataTableBuilder(this.balancesReport.getBook(), this.getBalancesContainers(), this.balancesReport.getPeriodicity());\n }\n getProperties() {\n return this.payload.properties != null ? Object.assign({}, this.payload.properties) : {};\n }\n getProperty(...keys) {\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n let value = this.payload.properties != null ? this.payload.properties[key] : null;\n if (value != null && value.trim() != '') {\n return value;\n }\n }\n return undefined;\n }\n getPropertyKeys() {\n let properties = this.getProperties();\n let propertyKeys = [];\n if (properties) {\n for (var key in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, key)) {\n propertyKeys.push(key);\n }\n }\n }\n propertyKeys = propertyKeys.sort();\n return propertyKeys;\n }\n getBalancesContainers() {\n let containers = [];\n const groupContainers = this.getGroupContainers();\n if (groupContainers && groupContainers.length > 0) {\n containers = containers.concat(groupContainers);\n }\n const accountContainers = this.getAccountContainers();\n if (accountContainers && accountContainers.length > 0) {\n containers = containers.concat(accountContainers);\n }\n return containers;\n }\n /** @internal */\n getGroupContainers() {\n let groupBalances = this.payload.groupBalances;\n if (this.groupBalances == null && groupBalances != null) {\n this.groupBalances = [];\n for (let i = 0; i < groupBalances.length; i++) {\n const groupBalance = groupBalances[i];\n this.groupBalances.push(new GroupBalancesContainer(this, this.balancesReport, groupBalance));\n }\n }\n return this.groupBalances || [];\n }\n /** @internal */\n getAccountContainers() {\n let accountBalances = this.payload.accountBalances;\n if (this.accountBalances == null && accountBalances != null) {\n this.accountBalances = [];\n for (let i = 0; i < accountBalances.length; i++) {\n const accountBalance = accountBalances[i];\n this.accountBalances.push(new AccountBalancesContainer(this, this.balancesReport, accountBalance));\n }\n }\n return this.accountBalances || [];\n }\n getBalancesContainer(name) {\n var _a;\n const normalizedName = normalizeName(name);\n const rootContainers = this.getBalancesContainers();\n if (rootContainers == null || rootContainers.length === 0) {\n throw `${name} not found on group ${this.getName()}`;\n }\n if (this.balancesContainersMap == null) {\n this.balancesContainersMap = this.fillBalancesContainersMap(new Map(), rootContainers);\n }\n const balancesContainer = (_a = this.balancesContainersMap) === null || _a === void 0 ? void 0 : _a.get(normalizedName);\n if (!balancesContainer) {\n throw `${name} not found on group ${this.getName()}`;\n }\n return balancesContainer;\n }\n /** @internal */\n fillBalancesContainersMap(map, containers) {\n for (let i = 0; i < containers.length; i++) {\n const container = containers[i];\n const normalizedName = container.getNormalizedName();\n if (normalizedName) {\n if (!map.has(normalizedName)) {\n map.set(normalizedName, container);\n }\n }\n const nextContainers = container.getBalancesContainers();\n if (nextContainers && nextContainers.length > 0) {\n this.fillBalancesContainersMap(map, nextContainers);\n }\n }\n return map;\n }\n}\n//# sourceMappingURL=BalancesContainerGroup.js.map", "import { normalizeName } from '../utils.js';\nimport { AccountBalancesContainer } from './BalancesContainerAccount.js';\nimport { GroupBalancesContainer } from './BalancesContainerGroup.js';\nimport { BalancesDataTableBuilder } from '../builders/BalancesDataTableBuilder.js';\n/**\n * Class representing a Balance Report, generated when calling [Book.getBalanceReport](#book_getbalancesreport)\n *\n * @public\n */\nexport class BalancesReport {\n constructor(book, payload) {\n this.book = book;\n this.payload = payload;\n }\n /**\n * Gets the [[Book]] that generated the report.\n *\n * @returns The [[Book]] that generated the report\n */\n getBook() {\n return this.book;\n }\n /**\n * Creates a BalancesDataTableBuilder to generate a two-dimensional array with all [[BalancesContainers]].\n */\n createDataTable() {\n return new BalancesDataTableBuilder(this.book, this.getBalancesContainers(), this.getPeriodicity());\n }\n /**\n * Gets the [[Periodicity]] of the query used to generate the report.\n *\n * @returns The [[Periodicity]] of the query used to generate the report\n */\n getPeriodicity() {\n return this.payload.periodicity;\n }\n /**\n * Gets all [[BalancesContainers]] of the report.\n *\n * @returns All [[BalancesContainers]] of the report\n */\n getBalancesContainers() {\n let containers = [];\n const accountContainers = this.getRootAccountBalancesContainers();\n if (accountContainers != null && accountContainers.length > 0) {\n containers = containers.concat(accountContainers);\n }\n const groupContainers = this.getGroupBalancesContainers();\n if (groupContainers != null && groupContainers.length > 0) {\n containers = containers.concat(groupContainers);\n }\n return containers;\n }\n /**\n * Gets a specific [[BalancesContainer]].\n *\n * @param name - The [[Account]] or [[Group]] name\n *\n * @returns The retrieved [[BalancesContainer]]\n */\n getBalancesContainer(name) {\n var _a;\n const normalizedName = normalizeName(name);\n const rootContainers = this.getBalancesContainers();\n if (rootContainers == null || rootContainers.length === 0) {\n throw `${name} not found`;\n }\n if (this.balancesContainersMap == null) {\n this.balancesContainersMap = this.fillBalancesContainersMap(new Map(), rootContainers);\n }\n const balancesContainer = (_a = this.balancesContainersMap) === null || _a === void 0 ? void 0 : _a.get(normalizedName);\n if (!balancesContainer) {\n throw `${name} not found`;\n }\n return balancesContainer;\n }\n /** @internal */\n getRootAccountBalancesContainers() {\n if (this.accountBalancesContainers == null && this.payload.accountBalances != null) {\n this.accountBalancesContainers = [];\n for (let i = 0; i < this.payload.accountBalances.length; i++) {\n const accountBalances = this.payload.accountBalances[i];\n const accountBalancesContainer = new AccountBalancesContainer(null, this, accountBalances);\n this.accountBalancesContainers.push(accountBalancesContainer);\n }\n }\n return this.accountBalancesContainers || [];\n }\n /** @internal */\n getGroupBalancesContainers() {\n if (this.groupBalancesContainers == null && this.payload.groupBalances != null) {\n this.groupBalancesContainers = [];\n for (let i = 0; i < this.payload.groupBalances.length; i++) {\n const groupBalances = this.payload.groupBalances[i];\n const groupBalancesContainer = new GroupBalancesContainer(null, this, groupBalances);\n this.groupBalancesContainers.push(groupBalancesContainer);\n }\n }\n return this.groupBalancesContainers || [];\n }\n /** @internal */\n fillBalancesContainersMap(map, containers) {\n for (let i = 0; i < containers.length; i++) {\n const container = containers[i];\n const normalizedName = container.getNormalizedName();\n if (normalizedName) {\n if (!map.has(normalizedName)) {\n map.set(normalizedName, container);\n }\n }\n const nextContainers = container.getBalancesContainers();\n if (nextContainers && nextContainers.length > 0) {\n this.fillBalancesContainersMap(map, nextContainers);\n }\n }\n return map;\n }\n}\n//# sourceMappingURL=BalancesReport.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as QueryService from \"../service/query-service.js\";\nimport { Resource } from \"./Resource.js\";\n/**\n * Defines a saved Query in a [[Book]].\n *\n * Queries can be saved on Books by users.\n *\n * @public\n */\nexport class Query extends Resource {\n constructor(book, payload) {\n super(payload);\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the Query universal identifier.\n *\n * @returns The Query universal identifier\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the title of this saved Query.\n *\n * @returns The title of this saved Query\n */\n getTitle() {\n return this.payload.title;\n }\n /**\n * Sets the title of this saved Query.\n *\n * @param title - The title of this saved Query\n *\n * @returns This Query, for chaining\n */\n setTitle(title) {\n this.payload.title = title;\n return this;\n }\n /**\n * Gets the query string to be executed.\n *\n * @returns This Query string to be executed\n */\n getQuery() {\n return this.payload.query;\n }\n /**\n * Sets the query string associated with this saved Query.\n *\n * @param query - The query string to be executed\n *\n * @returns This Query, for chaining\n */\n setQuery(query) {\n this.payload.query = query;\n return this;\n }\n /**\n * Perform create new Query.\n *\n * @returns This Query, for chaining\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield QueryService.createSavedQuery(this.book.getId(), this.payload, this.getConfig());\n this.updateQueryCache();\n return this;\n });\n }\n /**\n * Perform update Query, applying pending changes.\n *\n * @returns This Query, for chaining\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield QueryService.updateSavedQuery(this.book.getId(), this.payload, this.getConfig());\n this.updateQueryCache();\n return this;\n });\n }\n /**\n * Perform delete Query.\n *\n * @returns This Query, for chaining\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const queryId = this.getId();\n if (!queryId) {\n throw new Error(\"Query id null!\");\n }\n this.payload = yield QueryService.deleteSavedQuery(this.book.getId(), queryId, this.getConfig());\n this.updateQueryCache(true);\n return this;\n });\n }\n /** @internal */\n updateQueryCache(deleted) {\n if (this.book.queries) {\n this.book.queries = this.book.queries.filter((q) => q.getId() !== this.getId());\n if (!deleted) {\n this.book.queries.push(this);\n }\n }\n }\n}\n//# sourceMappingURL=Query.js.map", "import { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\n/**\n *\n * This class defines the Backlog of a [[Book]].\n *\n * A Backlog is a list of pending tasks in a Book\n *\n * @public\n */\nexport class Backlog extends Resource {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Returns the number of pending tasks in this Backlog.\n *\n * @returns The number of tasks in the Backlog, or undefined if not available.\n */\n getCount() {\n return this.payload.count;\n }\n}\n//# sourceMappingURL=Backlog.js.map", "import { AccountType } from '../model/Enums.js';\nimport { convertInMatrix } from '../utils.js';\n/**\n * A GroupsDataTableBuilder is used to setup and build two-dimensional arrays containing groups.\n *\n * @public\n */\nexport class GroupsDataTableBuilder {\n constructor(groups) {\n this.COMPARATOR = (g1, g2) => {\n let ret = this.getTypeIndex(this.getStringType(g1)) - this.getTypeIndex(this.getStringType(g2));\n if (ret === 0) {\n ret =\n this.getHasChildrenIndex(g1.hasChildren()) -\n this.getHasChildrenIndex(g2.hasChildren());\n }\n if (ret === 0) {\n ret = g1.getNormalizedName().localeCompare(g2.getNormalizedName());\n }\n return ret;\n };\n this.groups = groups;\n this.shouldAddProperties = false;\n this.shouldAddIds = false;\n this.shouldAddHiddenProperties = false;\n this.shouldShowTree = false;\n this.propertyKeys = [];\n }\n /**\n * Defines whether include custom group properties.\n *\n * @param include - Whether to include properties\n *\n * @returns This builder with respective include properties option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether include group ids.\n *\n * @param include - Whether to include ids\n *\n * @returns This builder with respective include ids option, for chaining.\n */\n ids(include) {\n this.shouldAddIds = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n /**\n * Defines whether to render groups as an indented tree instead of flat rows with a Parent column.\n * When enabled, child group names are indented by depth level and the Parent column is removed.\n * Default is false.\n *\n * @param enable - Whether to enable tree rendering\n *\n * @returns This builder with respective option, for chaining.\n */\n tree(enable) {\n this.shouldShowTree = enable;\n return this;\n }\n mapPropertyKeys() {\n this.propertyKeys = [];\n for (const group of this.groups) {\n for (const key of group.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (this.propertyKeys.indexOf(key) <= -1) {\n this.propertyKeys.push(key);\n }\n }\n }\n this.propertyKeys = this.propertyKeys.sort();\n }\n getStringType(group) {\n let groupType = group.getType() ? group.getType() + '' : undefined;\n if (!groupType) {\n groupType = group.isPermanent()\n ? AccountType.ASSET + '_' + AccountType.LIABILITY\n : AccountType.INCOMING + '_' + AccountType.OUTGOING;\n }\n return groupType;\n }\n getTypeIndex(type) {\n if (type === AccountType.ASSET + '_' + AccountType.LIABILITY) {\n return 0;\n }\n if (type === AccountType.ASSET) {\n return 1;\n }\n if (type === AccountType.LIABILITY) {\n return 2;\n }\n if (type === AccountType.INCOMING + '_' + AccountType.OUTGOING) {\n return 3;\n }\n if (type === AccountType.INCOMING) {\n return 4;\n }\n return 5;\n }\n getHasChildrenIndex(hasChildren) {\n return hasChildren ? 0 : 1;\n }\n /**\n * Builds a two-dimensional array containing all Groups.\n *\n * @returns A two-dimensional array containing all Groups\n */\n build() {\n let table = new Array();\n const groups = this.groups;\n groups.sort(this.COMPARATOR);\n let headers = [];\n if (this.shouldAddIds) {\n headers.push('Group Id');\n }\n headers.push('Name');\n headers.push('Type');\n if (!this.shouldShowTree) {\n headers.push('Parent');\n }\n if (this.shouldAddProperties) {\n this.mapPropertyKeys();\n }\n for (const group of groups) {\n if (group.isHidden() || group.getParent()) {\n continue;\n }\n table.push(this.buildGroupLine(group, 0));\n table = this.traverse(group, table, 1);\n }\n if (this.shouldAddProperties) {\n headers = headers.concat(this.propertyKeys);\n }\n table.unshift(headers);\n convertInMatrix(table);\n return table;\n }\n buildGroupLine(group, depth) {\n const line = [];\n if (this.shouldAddIds) {\n line.push(group.getId());\n }\n const name = this.shouldShowTree ? ' '.repeat(depth) + group.getName() : group.getName();\n line.push(name);\n line.push(this.getStringType(group));\n if (!this.shouldShowTree) {\n const parentName = group.getParent() ? group.getParent().getName() : '';\n line.push(parentName);\n }\n if (this.shouldAddProperties) {\n const properties = group.getProperties();\n for (const key of this.propertyKeys) {\n const propertyValue = properties[key];\n if (propertyValue) {\n line.push(propertyValue);\n continue;\n }\n line.push('');\n }\n }\n return line;\n }\n traverse(group, table, depth) {\n const children = group.getChildren();\n children.sort(this.COMPARATOR);\n for (const child of children) {\n table.push(this.buildGroupLine(child, depth));\n if (child.hasChildren()) {\n this.traverse(child, table, depth + 1);\n }\n }\n return table;\n }\n}\n//# sourceMappingURL=GroupsDataTableBuilder.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { convertInMatrix, formatValue, getRepresentativeValue } from '../utils.js';\n/**\n * A TransactionsDataTableBuilder is used to setup and build two-dimensional arrays containing transactions.\n *\n * @public\n */\nexport class TransactionsDataTableBuilder {\n constructor(book, transactions, account) {\n this.shouldFormatDates = false;\n this.shouldFormatValues = false;\n this.shouldAddUrls = false;\n this.shouldAddProperties = false;\n this.shouldAddIds = false;\n this.shouldAddRecordedAt = true;\n this.shouldAddHiddenProperties = false;\n this.book = book;\n this.transactions = transactions;\n this.account = account;\n }\n /**\n * Defines whether the dates should be formatted, based on date pattern of the [[Book]].\n *\n * @param format - Whether to format dates\n *\n * @returns This builder with respective formatting option, for chaining.\n */\n formatDates(format) {\n this.shouldFormatDates = format;\n return this;\n }\n /**\n * Defines whether amounts should be formatted based on [[DecimalSeparator]] of the [[Book]].\n *\n * @param format - Whether to format values\n *\n * @returns This builder with respective formatting option, for chaining.\n */\n formatValues(format) {\n this.shouldFormatValues = format;\n return this;\n }\n /**\n * Defines whether to include attachments and url links.\n *\n * @param include - Whether to include URLs\n *\n * @returns This builder with respective option, for chaining.\n */\n urls(include) {\n this.shouldAddUrls = include;\n return this;\n }\n /**\n * Defines whether to include custom transaction properties.\n *\n * @param include - Whether to include properties\n *\n * @returns This builder with respective option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether to include transaction ids and remote ids.\n *\n * @param include - Whether to include ids\n *\n * @returns This builder with respective option, for chaining.\n */\n ids(include) {\n this.shouldAddIds = include;\n return this;\n }\n /**\n * Defines whether to include the \"Recorded at\" column.\n *\n * @param include - Whether to include the recorded at column\n *\n * @returns This builder with respective option, for chaining.\n */\n recordedAt(include) {\n this.shouldAddRecordedAt = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n /**\n * @deprecated Use {@link urls} instead.\n */\n includeUrls(include) {\n return this.urls(include);\n }\n /**\n * @deprecated Use {@link properties} instead.\n */\n includeProperties(include) {\n return this.properties(include);\n }\n /**\n * @deprecated Use {@link ids} instead.\n */\n includeIds(include) {\n return this.ids(include);\n }\n /**\n * Gets the account used to filter transactions, when applicable.\n *\n * @returns The account, when filtering by a single account.\n */\n getAccount() {\n return this.account;\n }\n /**\n * Builds a two-dimensional array containing all transactions.\n *\n * @returns A promise resolving to a two-dimensional array containing all transactions\n */\n build() {\n return __awaiter(this, void 0, void 0, function* () {\n const headerLine = this.getHeaderLine();\n const dataTable = yield this.get2DArray_();\n if (dataTable.length > 0) {\n dataTable.splice(0, 0, headerLine);\n convertInMatrix(dataTable);\n return dataTable;\n }\n else {\n return [headerLine];\n }\n });\n }\n getHeaderLine() {\n const headerLine = [];\n if (this.shouldAddIds) {\n headerLine.push('Transaction Id');\n }\n headerLine.push('Status');\n headerLine.push('Date');\n headerLine.push('Origin');\n headerLine.push('Destination');\n headerLine.push('Description');\n headerLine.push('Amount');\n if (this.shouldShowBalances()) {\n headerLine.push('Balance');\n }\n if (this.shouldAddRecordedAt) {\n headerLine.push('Recorded at');\n }\n if (this.shouldAddProperties) {\n for (const key of this.getPropertyKeys()) {\n headerLine.push(key);\n }\n }\n if (this.shouldAddIds) {\n for (const remoteIdHeader of this.getRemoteIdHeaders()) {\n headerLine.push(remoteIdHeader);\n }\n }\n if (this.shouldAddUrls) {\n for (const attachmentHeader of this.getAttachmentHeaders()) {\n headerLine.push(attachmentHeader);\n }\n }\n return headerLine;\n }\n get2DArray_() {\n return __awaiter(this, void 0, void 0, function* () {\n const dataTable = [];\n for (const transaction of this.transactions) {\n const line = [];\n if (this.shouldAddIds) {\n line.push(transaction.getId());\n }\n line.push(transaction.getStatus());\n if (this.shouldFormatDates) {\n line.push(transaction.getDateFormatted());\n }\n else {\n line.push(transaction.getDateObject());\n }\n line.push(yield transaction.getCreditAccountName());\n line.push(yield transaction.getDebitAccountName());\n line.push(transaction.getDescription());\n let amount = transaction.getAmount();\n if (amount != null) {\n if (this.shouldShowBalances() && this.account) {\n const isCreditOnTx = yield this.isCreditOnTransaction_(transaction, this.account);\n amount = getRepresentativeValue(amount, !isCreditOnTx);\n }\n if (this.shouldFormatValues) {\n line.push(formatValue(amount, this.book.getDecimalSeparator(), this.book.getFractionDigits()));\n }\n else {\n line.push(amount.toNumber());\n }\n }\n else {\n line.push('');\n }\n if (this.shouldShowBalances()) {\n const accountBalance = yield transaction.getAccountBalance();\n if (accountBalance != null) {\n if (this.shouldFormatValues) {\n line.push(formatValue(accountBalance, this.book.getDecimalSeparator(), this.book.getFractionDigits()));\n }\n else {\n line.push(accountBalance.toNumber());\n }\n }\n else {\n line.push('');\n }\n }\n if (this.shouldAddRecordedAt) {\n if (this.shouldFormatDates) {\n line.push(transaction.getCreatedAtFormatted());\n }\n else {\n line.push(transaction.getCreatedAt());\n }\n }\n if (this.shouldAddProperties) {\n this.addPropertiesToLine(line, transaction);\n }\n if (this.shouldAddIds) {\n this.addRemoteIdsToLine(line, transaction);\n }\n if (this.shouldAddUrls) {\n this.addUrlsToLine(line, transaction);\n }\n dataTable.push(line);\n }\n return dataTable;\n });\n }\n shouldShowBalances() {\n return this.account != null && this.account.isPermanent() === true;\n }\n isCreditOnTransaction_(transaction, account) {\n return __awaiter(this, void 0, void 0, function* () {\n const creditAccount = yield transaction.getCreditAccount();\n if (account == null || creditAccount == null) {\n return false;\n }\n return creditAccount.getId() === account.getId();\n });\n }\n getPropertyKeys() {\n if (this.propertyKeys == null) {\n this.propertyKeys = [];\n for (const transaction of this.transactions) {\n for (const key of transaction.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (this.propertyKeys.indexOf(key) <= -1) {\n this.propertyKeys.push(key);\n }\n }\n }\n this.propertyKeys = this.propertyKeys.sort();\n }\n return this.propertyKeys;\n }\n getAttachmentHeaders() {\n if (this.attachmentHeaders == null) {\n this.attachmentHeaders = [];\n for (const transaction of this.transactions) {\n const urls = this.getUrls(transaction);\n if (urls.length > this.attachmentHeaders.length) {\n this.attachmentHeaders = [];\n urls.forEach(() => this.attachmentHeaders.push('Attachment'));\n }\n }\n }\n return this.attachmentHeaders;\n }\n getRemoteIdHeaders() {\n if (this.remoteIdHeaders == null) {\n this.remoteIdHeaders = [];\n for (const transaction of this.transactions) {\n const remoteIds = transaction.getRemoteIds();\n if (remoteIds && remoteIds.length > this.remoteIdHeaders.length) {\n this.remoteIdHeaders = [];\n remoteIds.forEach(() => this.remoteIdHeaders.push('Remote Id'));\n }\n }\n }\n return this.remoteIdHeaders;\n }\n addPropertiesToLine(line, transaction) {\n const lineLength = line.length;\n for (const key of this.getPropertyKeys()) {\n line.push('');\n }\n for (const key of transaction.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n const index = this.getPropertyKeys().indexOf(key) + lineLength;\n line[index] = transaction.getProperty(key);\n }\n }\n addRemoteIdsToLine(line, transaction) {\n const lineLength = line.length;\n for (const key of this.getRemoteIdHeaders()) {\n line.push('');\n }\n const remoteIds = transaction.getRemoteIds();\n if (remoteIds) {\n for (let index = lineLength; index < lineLength + remoteIds.length; index++) {\n line[index] = remoteIds[index - lineLength];\n }\n }\n }\n addUrlsToLine(line, transaction) {\n const lineLength = line.length;\n for (const key of this.getAttachmentHeaders()) {\n line.push('');\n }\n const urls = this.getUrls(transaction);\n for (let index = lineLength; index < lineLength + urls.length; index++) {\n line[index] = urls[index - lineLength];\n }\n }\n getUrls(transaction) {\n let urls = transaction.getUrls();\n if (urls == null) {\n urls = [];\n }\n const files = transaction.getFiles();\n if (files != null) {\n urls = urls.concat(files.map(f => f.getUrl()).filter((url) => url != null));\n }\n return urls;\n }\n}\n//# sourceMappingURL=TransactionsDataTableBuilder.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as AccountService from '../service/account-service.js';\nimport * as BookService from '../service/book-service.js';\nimport * as QueryService from '../service/query-service.js';\nimport * as BalancesService from '../service/balances-service.js';\nimport * as FileService from '../service/file-service.js';\nimport * as GroupService from '../service/group-service.js';\nimport * as IntegrationService from '../service/integration-service.js';\nimport * as TransactionService from '../service/transaction-service.js';\nimport * as EventService from '../service/event-service.js';\nimport * as CollaboratorService from '../service/collaborator-service.js';\nimport * as Utils from '../utils.js';\nimport { ResourceProperty } from './ResourceProperty.js';\nimport { Account } from './Account.js';\nimport { Collaborator } from './Collaborator.js';\nimport { Collection } from './Collection.js';\nimport { Permission } from './Enums.js';\nimport { EventList } from './EventList.js';\nimport { File } from './File.js';\nimport { Group } from './Group.js';\nimport { Integration } from './Integration.js';\nimport { Transaction } from './Transaction.js';\nimport { TransactionList } from './TransactionList.js';\nimport { BalancesReport } from './BalancesReport.js';\nimport { App } from './App.js';\nimport { Query } from './Query.js';\nimport { Bkper } from './Bkper.js';\nimport { Backlog } from './Backlog.js';\nimport { AccountsDataTableBuilder } from '../builders/AccountsDataTableBuilder.js';\nimport { GroupsDataTableBuilder } from '../builders/GroupsDataTableBuilder.js';\nimport { TransactionsDataTableBuilder } from '../builders/TransactionsDataTableBuilder.js';\n/**\n * A Book represents a [General Ledger](https://en.wikipedia.org/wiki/General_ledger) for a company or business, but can also represent a [Ledger](https://en.wikipedia.org/wiki/Ledger) for a project or department\n *\n * It contains all [[Accounts]] where [[Transactions]] are recorded/posted;\n *\n * @public\n */\nexport class Book extends ResourceProperty {\n constructor(payload, config) {\n super(payload);\n this.allGroupsLoaded = false;\n this.allAccountsLoaded = false;\n this.config = config;\n if (this.payload.permission == Permission.RECORDER) {\n this.payload.groups = this.payload.groups || [];\n this.payload.accounts = this.payload.accounts || [];\n }\n this.allGroupsLoaded = this.mapGroups(this.payload.groups);\n this.allAccountsLoaded = this.mapAccounts(this.payload.accounts);\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the unique identifier of this Book.\n *\n * @returns This Book's unique identifier\n */\n getId() {\n return this.payload.id || '';\n }\n /**\n * Gets the name of this Book.\n *\n * @returns The name of this Book\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the Book.\n *\n * @param name - The name to set\n *\n * @returns This Book, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Gets the number of fraction digits supported by this Book.\n *\n * @returns The number of fraction digits supported by this Book. Same as getDecimalPlaces\n */\n getFractionDigits() {\n return this.payload.fractionDigits;\n }\n /**\n * Gets the number of decimal places supported by this Book.\n *\n * @returns The number of decimal places supported by this Book. Same as getFractionDigits\n */\n getDecimalPlaces() {\n return this.getFractionDigits();\n }\n /**\n * Sets the number of fraction digits (decimal places) supported by this Book.\n *\n * @param fractionDigits - The number of fraction digits to set (0 to 8)\n *\n * @returns This Book, for chaining\n */\n setFractionDigits(fractionDigits) {\n this.payload.fractionDigits = fractionDigits;\n return this;\n }\n /**\n * Gets the period slice for balances visualization.\n *\n * @returns The period slice for balances visualization\n */\n getPeriod() {\n return this.payload.period;\n }\n /**\n * Sets the period slice for balances visualization.\n *\n * @param period - The period to set\n *\n * @returns This Book, for chaining\n */\n setPeriod(period) {\n this.payload.period = period;\n return this;\n }\n /**\n * Gets the start month when YEAR period is set.\n *\n * @returns The start month when YEAR period is set\n */\n getPeriodStartMonth() {\n return this.payload.periodStartMonth;\n }\n /**\n * Sets the start month when YEAR period is set.\n *\n * @param month - The start month to set\n *\n * @returns This Book, for chaining\n */\n setPeriodStartMonth(month) {\n this.payload.periodStartMonth = month;\n return this;\n }\n /**\n * Gets the transactions pagination page size.\n *\n * @returns The transactions pagination page size\n */\n getPageSize() {\n return this.payload.pageSize;\n }\n /**\n * Sets the transactions pagination page size.\n *\n * @param pageSize - The page size to set\n *\n * @returns This Book, for chaining\n */\n setPageSize(pageSize) {\n this.payload.pageSize = pageSize;\n return this;\n }\n /**\n * Gets the name of the owner of the Book.\n *\n * @returns The name of the owner of the Book\n */\n getOwnerName() {\n return this.payload.ownerName;\n }\n /**\n * Gets the logo URL of the Book owner's custom domain, if any.\n *\n * @returns The logo URL, or undefined if the owner has no custom domain logo\n */\n getLogoUrl() {\n return this.payload.logoUrl;\n }\n /**\n * Gets the permission for the current user in this Book.\n *\n * @returns The permission for the current user in this Book\n */\n getPermission() {\n return this.payload.permission;\n }\n /**\n * Gets the collection of this Book, if any.\n *\n * @returns The collection of this Book, if any\n */\n getCollection() {\n if (this.payload.collection != null && this.collection == null) {\n this.collection = new Collection(this.payload.collection, this.config);\n }\n return this.collection;\n }\n /**\n * Gets the date pattern of the Book.\n *\n * @returns The date pattern of the Book. Current: dd/MM/yyyy | MM/dd/yyyy | yyyy/MM/dd\n */\n getDatePattern() {\n return this.payload.datePattern;\n }\n /**\n * Sets the date pattern of the Book. Current: dd/MM/yyyy | MM/dd/yyyy | yyyy/MM/dd\n *\n * @param datePattern - The date pattern to set\n *\n * @returns This Book, for chaining\n */\n setDatePattern(datePattern) {\n this.payload.datePattern = datePattern;\n return this;\n }\n /**\n * Gets the lock date of the Book in ISO format yyyy-MM-dd.\n *\n * @returns The lock date of the Book in ISO format yyyy-MM-dd\n */\n getLockDate() {\n return this.payload.lockDate;\n }\n /**\n * Sets the lock date of the Book in ISO format yyyy-MM-dd.\n *\n * @param lockDate - The lock date to set in ISO format yyyy-MM-dd\n *\n * @returns This Book, for chaining\n */\n setLockDate(lockDate) {\n if (lockDate == null) {\n lockDate = '1900-00-00';\n }\n this.payload.lockDate = lockDate;\n return this;\n }\n /**\n * Gets the closing date of the Book in ISO format yyyy-MM-dd.\n *\n * @returns The closing date of the Book in ISO format yyyy-MM-dd\n */\n getClosingDate() {\n return this.payload.closingDate;\n }\n /**\n * Sets the closing date of the Book in ISO format yyyy-MM-dd.\n *\n * @param closingDate - The closing date to set in ISO format yyyy-MM-dd\n *\n * @returns This Book, for chaining\n */\n setClosingDate(closingDate) {\n if (closingDate == null) {\n closingDate = '1900-00-00';\n }\n this.payload.closingDate = closingDate;\n return this;\n }\n /**\n * Gets the decimal separator of the Book.\n *\n * @returns The decimal separator of the Book\n */\n getDecimalSeparator() {\n return this.payload.decimalSeparator;\n }\n /**\n * Sets the decimal separator of the Book\n *\n * @param decimalSeparator - The decimal separator to set\n *\n * @returns This Book, for chaining\n */\n setDecimalSeparator(decimalSeparator) {\n this.payload.decimalSeparator = decimalSeparator;\n return this;\n }\n /**\n * Gets the time zone of the Book.\n *\n * @returns The time zone of the Book\n */\n getTimeZone() {\n return this.payload.timeZone;\n }\n /**\n * Sets the time zone of the Book.\n *\n * @param timeZone - The time zone to set\n *\n * @returns This Book, for chaining\n */\n setTimeZone(timeZone) {\n this.payload.timeZone = timeZone;\n return this;\n }\n /**\n * Gets the time zone offset of the book, in minutes.\n *\n * @returns The time zone offset of the book, in minutes\n */\n getTimeZoneOffset() {\n return this.payload.timeZoneOffset;\n }\n /**\n * Gets the auto post status of the Book.\n *\n * @returns The auto post status of the Book\n */\n getAutoPost() {\n return this.payload.autoPost;\n }\n /**\n * Sets the auto post status of the Book.\n *\n * @param autoPost - The auto post status to set\n *\n * @returns This Book, for chaining\n */\n setAutoPost(autoPost) {\n this.payload.autoPost = autoPost;\n return this;\n }\n /**\n * Gets the last update date of the book, in milliseconds.\n *\n * @returns The last update date of the book, in milliseconds\n */\n getLastUpdateMs() {\n return this.payload.lastUpdateMs ? +this.payload.lastUpdateMs : undefined;\n }\n /**\n * Gets the total number of posted transactions.\n *\n * @returns The total number of posted transactions\n */\n getTotalTransactions() {\n return this.payload.totalTransactions ? +this.payload.totalTransactions : 0;\n }\n /**\n * Gets the total number of posted transactions on current month.\n *\n * @returns The total number of posted transactions on current month\n */\n getTotalTransactionsCurrentMonth() {\n return this.payload.totalTransactionsCurrentMonth\n ? +this.payload.totalTransactionsCurrentMonth\n : 0;\n }\n /**\n * Gets the total number of posted transactions on current year.\n *\n * @returns The total number of posted transactions on current year\n */\n getTotalTransactionsCurrentYear() {\n return this.payload.totalTransactionsCurrentYear\n ? +this.payload.totalTransactionsCurrentYear\n : 0;\n }\n /**\n * Gets the visibility of the book.\n *\n * @returns The visibility of the book\n */\n getVisibility() {\n return this.payload.visibility;\n }\n /**\n * Sets the visibility of the book.\n *\n * @param visibility - The visibility to set\n *\n * @returns This Book, for chaining\n */\n setVisibility(visibility) {\n this.payload.visibility = visibility;\n return this;\n }\n /**\n * Formats a date according to date pattern of the Book.\n *\n * @param date - The date to format as string.\n * @param timeZone - The output timezone of the result. Default to script's timeZone\n *\n * @returns The formatted date\n */\n formatDate(date, timeZone) {\n if (timeZone == null || timeZone.trim() == '') {\n timeZone = this.getTimeZone();\n }\n return Utils.formatDate(date, this.getDatePattern(), timeZone);\n }\n /**\n * Parse a date string according to date pattern and timezone of the Book. Also parse ISO yyyy-mm-dd format.\n *\n * @param date - The date string to parse\n *\n * @returns The parsed Date object\n */\n parseDate(date) {\n return Utils.parseDate(date, this.getDatePattern(), this.getTimeZone());\n }\n /**\n * Formats a value according to [[DecimalSeparator]] and fraction digits of the Book.\n *\n * @param value - The value to be formatted.\n *\n * @returns The formatted value\n */\n formatValue(value) {\n if (!value) {\n return '';\n }\n return Utils.formatValue(value, this.getDecimalSeparator(), this.getFractionDigits());\n }\n /**\n * Parse a value string according to [[DecimalSeparator]] and fraction digits of the Book.\n *\n * @param value - The value string to parse\n *\n * @returns The parsed Amount or undefined if parsing fails\n */\n parseValue(value) {\n return Utils.parseValue(value, this.getDecimalSeparator());\n }\n /**\n * Rounds a value according to the number of fraction digits of the Book.\n *\n * @param value - The value to be rounded\n *\n * @returns The rounded value\n */\n round(value) {\n return Utils.round(value, this.getFractionDigits());\n }\n /**\n * Batch create [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be created\n *\n * @returns The created Transactions\n */\n batchCreateTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n transactionPayloads = yield TransactionService.createTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n transactions = transactionPayloads.map(tx => new Transaction(this, tx));\n return transactions;\n });\n }\n /**\n * Batch post [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be posted\n */\n batchPostTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.postTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n });\n }\n /**\n * Batch update [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be updated\n *\n * @param updateChecked - True to also update checked transactions\n *\n * @returns The updated draft Transactions\n */\n batchUpdateTransactions(transactions, updateChecked) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n transactionPayloads = yield TransactionService.updateTransactionsBatch(this.getId(), transactionPayloads, updateChecked, this.getConfig());\n transactions = transactionPayloads.map(tx => new Transaction(this, tx));\n return transactions;\n });\n }\n /**\n * Batch check [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be checked\n */\n batchCheckTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.checkTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n });\n }\n /**\n * Batch uncheck [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be unchecked\n */\n batchUncheckTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.uncheckTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n });\n }\n /**\n * Batch trash [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be trashed\n * @param trashChecked - True to also trash checked transactions\n */\n batchTrashTransactions(transactions, trashChecked) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.trashTransactionsBatch(this.getId(), transactionPayloads, trashChecked, this.getConfig());\n });\n }\n /**\n * Batch untrash [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be untrashed\n */\n batchUntrashTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.untrashTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n });\n }\n /**\n * Replay [[Events]] on the Book, in batch.\n *\n * @param events - The events to be replayed\n * @param errorOnly - True to only replay events with errors\n */\n batchReplayEvents(events, errorOnly) {\n return __awaiter(this, void 0, void 0, function* () {\n const eventIds = events.map(event => event.getId());\n const eventPayloads = eventIds.map(id => ({ id: id }));\n const eventList = { items: eventPayloads };\n yield EventService.replayEventsBatch(this, eventList, errorOnly, this.getConfig());\n });\n }\n /**\n * Create [[Accounts]] on the Book, in batch.\n *\n * @param accounts - The accounts to be created\n *\n * @returns The created Accounts\n */\n batchCreateAccounts(accounts) {\n return __awaiter(this, void 0, void 0, function* () {\n if (accounts.length > 0) {\n const accountList = {\n items: accounts.map(a => a.json()),\n };\n const payloads = yield AccountService.createAccounts(this.getId(), accountList, this.getConfig());\n const createdAccounts = [];\n for (const payload of payloads) {\n const account = new Account(this, payload);\n createdAccounts.push(account);\n this.setAccount(payload);\n }\n this.clearCache();\n return createdAccounts;\n }\n return [];\n });\n }\n /**\n * Update [[Accounts]] on the Book, in batch.\n *\n * @param accounts - The accounts to be updated\n *\n * @returns The updated Accounts\n */\n batchUpdateAccounts(accounts) {\n return __awaiter(this, void 0, void 0, function* () {\n if (accounts.length > 0) {\n const accountList = {\n items: accounts.map(a => a.json()),\n };\n const payloads = yield AccountService.updateAccounts(this.getId(), accountList, this.getConfig());\n const updatedAccounts = [];\n for (const payload of payloads) {\n const account = new Account(this, payload);\n updatedAccounts.push(account);\n this.setAccount(payload);\n }\n this.clearCache();\n return updatedAccounts;\n }\n return [];\n });\n }\n /**\n * Delete [[Accounts]] on the Book, in batch.\n *\n * @param accounts - The accounts to be deleted\n *\n * @returns The deleted Accounts\n */\n batchDeleteAccounts(accounts) {\n return __awaiter(this, void 0, void 0, function* () {\n if (accounts.length > 0) {\n const accountList = {\n items: accounts.map(a => a.json()),\n };\n const payloads = yield AccountService.deleteAccounts(this.getId(), accountList, this.getConfig());\n const deletedAccounts = [];\n for (const payload of payloads) {\n const account = new Account(this, payload);\n deletedAccounts.push(account);\n this.setAccount(payload, true);\n }\n this.clearCache();\n return deletedAccounts;\n }\n return [];\n });\n }\n /**\n * Create [[Groups]] on the Book, in batch.\n *\n * @param groups - The groups to be created\n *\n * @returns The created Groups\n */\n batchCreateGroups(groups) {\n return __awaiter(this, void 0, void 0, function* () {\n if (groups.length > 0) {\n const groupList = { items: groups.map(g => g.json()) };\n const payloads = yield GroupService.createGroups(this.getId(), groupList, this.getConfig());\n const createdGroups = [];\n for (const payload of payloads) {\n const group = new Group(this, payload);\n createdGroups.push(group);\n this.setGroup(payload);\n }\n this.clearCache();\n return createdGroups;\n }\n return [];\n });\n }\n /**\n * Trigger Balances Audit async process.\n */\n audit() {\n BookService.audit(this.getId(), this.getConfig());\n }\n /**\n * Retrieve installed [[Apps]] for this Book.\n *\n * @returns The retrieved Apps objects\n */\n getApps() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.apps != null) {\n return this.apps;\n }\n const appsPlain = yield BookService.getApps(this.getId(), this.getConfig());\n this.apps = appsPlain.map(a => new App(a, this.config));\n return this.apps;\n });\n }\n /**\n * Gets the existing [[Integrations]] in the Book.\n *\n * @returns The retrieved Integration objects\n */\n getIntegrations() {\n return __awaiter(this, void 0, void 0, function* () {\n const integrationsPlain = yield IntegrationService.listIntegrations(this.getId(), this.getConfig());\n const integrations = integrationsPlain.map(i => new Integration(i, this.config));\n return integrations;\n });\n }\n /**\n * Creates a new [[Integration]] in the Book.\n *\n * @param integration - The [[Integration]] object or wrapped plain json\n *\n * @returns The created [[Integration]] object\n */\n createIntegration(integration) {\n return __awaiter(this, void 0, void 0, function* () {\n if (integration instanceof Integration) {\n integration = yield IntegrationService.createIntegration(this.getId(), integration.json(), this.getConfig());\n }\n else {\n integration = yield IntegrationService.createIntegration(this.getId(), integration, this.getConfig());\n }\n return new Integration(integration, this.config);\n });\n }\n /**\n * Updates an existing [[Integration]] in the Book.\n *\n * @param integration - The [[Integration]] wrapped plain json\n *\n * @returns The updated [[Integration]] object\n */\n updateIntegration(integration) {\n return __awaiter(this, void 0, void 0, function* () {\n if (integration instanceof Integration) {\n integration = yield IntegrationService.updateIntegration(this.getId(), integration.json(), this.getConfig());\n }\n else {\n integration = yield IntegrationService.updateIntegration(this.getId(), integration, this.getConfig());\n }\n return new Integration(integration, this.config);\n });\n }\n /**\n * Gets an [[Account]] object by id or name.\n *\n * Results are cached to avoid repeated server calls. Account-group relationships\n * are included if the full chart was loaded via getAccounts() or when the Book\n * was loaded with includeAccounts=true.\n *\n * @param idOrName - The id or name of the Account\n *\n * @returns The matching Account object\n *\n * @example\n * ```typescript\n * // Get individual account (basic data, cached)\n * const account = await book.getAccount('Bank Account');\n *\n * // For account-group relationships, use one of these approaches:\n * // Option 1: Load book with full data upfront\n * const bookWithAccounts = await Bkper.getBook(bookId, true);\n * const accountWithGroups = await bookWithAccounts.getAccount('Bank Account');\n *\n * // Option 2: Load full chart when needed\n * await book.getAccounts();\n * const accountWithGroups2 = await book.getAccount('Bank Account');\n * ```\n */\n getAccount(idOrName) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!idOrName || idOrName.trim() == '') {\n return undefined;\n }\n let account;\n // Try to get account by id\n if (this.idAccountMap) {\n account = this.idAccountMap.get(idOrName);\n }\n // Try to get account by name\n if (!account && this.nameAccountMap) {\n account = this.nameAccountMap.get(Utils.normalizeName(idOrName));\n }\n // Try to fetch account from server\n if (!account) {\n const accountPayload = yield AccountService.getAccount(this.getId(), idOrName, this.getConfig());\n if (accountPayload) {\n account = new Account(this, accountPayload);\n this.updateAccountCache(account);\n }\n }\n return account;\n });\n }\n /** @internal */\n updateGroupCache(group) {\n this.updateGroupIdMap(group);\n this.updateGroupNameMap(group);\n }\n /** @internal */\n updateGroupIdMap(group) {\n this.idGroupMap = this.idGroupMap || new Map();\n const id = group.getId();\n if (id) {\n this.idGroupMap.set(id, group);\n }\n }\n /** @internal */\n updateGroupNameMap(group) {\n this.nameGroupMap = this.nameGroupMap || new Map();\n const normalizedName = group.getNormalizedName();\n if (normalizedName) {\n this.nameGroupMap.set(normalizedName, group);\n }\n }\n /** @internal */\n updateAccountCache(account) {\n this.updateAccountIdMap(account);\n this.updateAccountNameMap(account);\n }\n /** @internal */\n updateAccountIdMap(account) {\n this.idAccountMap = this.idAccountMap || new Map();\n const id = account.getId();\n if (id) {\n this.idAccountMap.set(id, account);\n }\n }\n /** @internal */\n updateAccountNameMap(account) {\n this.nameAccountMap = this.nameAccountMap || new Map();\n const normalizedName = account.getNormalizedName();\n if (normalizedName) {\n this.nameAccountMap.set(normalizedName, account);\n }\n }\n /** @internal */\n getMostRecentLockDate_() {\n const closingDate = this.getClosingDate();\n const lockDate = this.getLockDate();\n if (!closingDate && !lockDate) {\n return null;\n }\n if (!closingDate && lockDate) {\n return lockDate;\n }\n if (closingDate && !lockDate) {\n return closingDate;\n }\n if (Utils.getIsoDateValue(closingDate) > Utils.getIsoDateValue(lockDate)) {\n return closingDate;\n }\n else {\n return lockDate;\n }\n }\n /**\n * Gets a [[Group]] object by id or name.\n *\n * Results are cached to avoid repeated server calls. Parent/child relationships\n * are included if all groups were loaded via getGroups() or when the Book was\n * loaded with includeGroups=true.\n *\n * @param idOrName - The id or name of the Group\n *\n * @returns The matching Group object\n *\n * @example\n * ```typescript\n * // Get individual group (basic data, cached)\n * const group = await book.getGroup('Assets');\n *\n * // For parent/child relationships, use one of these approaches:\n * // Option 1: Load book with full hierarchy upfront\n * const bookWithGroups = await Bkper.getBook(bookId, false, true);\n * const groupWithTree = await bookWithGroups.getGroup('Assets');\n *\n * // Option 2: Load full hierarchy when needed\n * await book.getGroups();\n * const groupWithTree2 = await book.getGroup('Assets');\n * console.log(groupWithTree2.getParent(), groupWithTree2.getChildren());\n * ```\n */\n getGroup(idOrName) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!idOrName || idOrName.trim() == '') {\n return undefined;\n }\n let group;\n // Try to get group by id\n if (this.idGroupMap) {\n group = this.idGroupMap.get(idOrName);\n }\n // Try to get group by name\n if (!group && this.nameGroupMap) {\n group = this.nameGroupMap.get(Utils.normalizeName(idOrName));\n }\n // Try to fetch group from server\n if (!group) {\n const groupPayload = yield GroupService.getGroup(this.getId(), idOrName, this.getConfig());\n if (groupPayload) {\n group = new Group(this, groupPayload);\n this.updateGroupCache(group);\n }\n }\n return group;\n });\n }\n /**\n * Gets all [[Groups]] of this Book with complete parent/child hierarchy.\n *\n * Results are cached for performance. Group tree relationships are built\n * during loading. Consider using Bkper.getBook(id, false, true) for\n * upfront loading when you know you'll need all groups.\n *\n * @returns The retrieved [[Group]] objects\n *\n * @example\n * ```typescript\n * // Load all groups with complete hierarchy\n * const groups = await book.getGroups();\n *\n * // Alternative: Load book with groups upfront (more efficient)\n * const bookWithGroups = await Bkper.getBook(bookId, false, true);\n * const groups2 = await bookWithGroups.getGroups(); // Already cached\n * ```\n */\n getGroups() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n if (this.idGroupMap && this.allGroupsLoaded) {\n return Array.from(((_a = this.idGroupMap) === null || _a === void 0 ? void 0 : _a.values()) || []);\n }\n let groups = yield GroupService.getGroups(this.getId(), this.getConfig());\n this.allGroupsLoaded = this.mapGroups(groups);\n return Array.from(((_b = this.idGroupMap) === null || _b === void 0 ? void 0 : _b.values()) || []);\n });\n }\n /** @internal */\n mapGroups(groups) {\n if (!groups) {\n return false;\n }\n let groupsObj = groups.map(group => new Group(this, group));\n this.idGroupMap = new Map();\n this.nameGroupMap = new Map();\n for (const group of groupsObj) {\n this.updateGroupCache(group);\n group.buildGroupTree(this.idGroupMap);\n }\n for (const group of groupsObj) {\n group.buildGroupTree(this.idGroupMap);\n }\n return true;\n }\n /**\n * Gets all [[Accounts]] of this Book with full account-group relationships.\n *\n * Results are cached for performance. Groups are automatically loaded first\n * to ensure proper linking. Consider using Bkper.getBook(id, true) for\n * upfront loading when you know you'll need all accounts.\n *\n * @returns The retrieved [[Account]] objects\n *\n * @example\n * ```typescript\n * // Load all accounts with complete relationships\n * const accounts = await book.getAccounts();\n *\n * // Alternative: Load book with accounts upfront (more efficient)\n * const bookWithAccounts = await Bkper.getBook(bookId, true);\n * const accounts2 = await bookWithAccounts.getAccounts(); // Already cached\n * ```\n */\n getAccounts() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n if (this.idAccountMap && this.allAccountsLoaded) {\n return Array.from(((_a = this.idAccountMap) === null || _a === void 0 ? void 0 : _a.values()) || []);\n }\n //Ensure groups are loaded\n yield this.getGroups();\n let accounts = yield AccountService.getAccounts(this.getId(), this.getConfig());\n this.allAccountsLoaded = this.mapAccounts(accounts);\n return Array.from(((_b = this.idAccountMap) === null || _b === void 0 ? void 0 : _b.values()) || []);\n });\n }\n /** @internal */\n mapAccounts(accounts) {\n if (!accounts) {\n return false;\n }\n let accountsObj = accounts.map(account => new Account(this, account));\n this.idAccountMap = new Map();\n this.nameAccountMap = new Map();\n for (const account of accountsObj) {\n this.updateAccountCache(account);\n this.linkAccountsAndGroups(account);\n }\n this.ensureGroupsAccountMapsLoaded();\n return true;\n }\n /** @internal */\n linkAccountsAndGroups(account) {\n var _a;\n const groupPayloads = account.json().groups || [];\n for (const groupPayload of groupPayloads) {\n const group = (_a = this.idGroupMap) === null || _a === void 0 ? void 0 : _a.get(groupPayload.id || '');\n if (group != null) {\n group.addAccount(account);\n }\n }\n }\n /**\n * Ensures every group has a cached `.accounts` Map after accounts are loaded.\n *\n * `linkAccountsAndGroups()` populates `.accounts` on groups that have accounts\n * linked to them. Groups with zero accounts keep `.accounts = undefined`. This\n * method fills that gap by initializing an empty Map on those groups.\n *\n * Without this, `Group.getAccounts()` sees `undefined`, skips the cache check,\n * and falls through to a network request per group \u2014 causing hundreds of\n * redundant `/groups/{id}/accounts` calls on books with many groups.\n *\n * IMPORTANT: This method must NOT be guarded by `allGroupsLoaded` or any\n * similar flag. It runs inside `mapAccounts()`, which is always called after\n * `mapGroups()` sets `allGroupsLoaded = true`. A guard like\n * `if (!this.allGroupsLoaded)` would make this method dead code, silently\n * reintroducing the redundant network requests.\n *\n * @internal\n */\n ensureGroupsAccountMapsLoaded() {\n if (this.idGroupMap) {\n for (const group of this.idGroupMap.values()) {\n if (group.accounts == null) {\n group.accounts = new Map();\n }\n }\n }\n }\n /** @internal */\n clearCache() {\n this.clearGroupCache();\n this.clearAccountCache();\n }\n /** @internal */\n clearGroupCache() {\n this.allGroupsLoaded = false;\n this.idGroupMap = undefined;\n this.nameGroupMap = undefined;\n }\n /** @internal */\n clearAccountCache() {\n this.allAccountsLoaded = false;\n this.idAccountMap = undefined;\n this.nameAccountMap = undefined;\n }\n /** @internal */\n clearCollaboratorCache() {\n this.collaborators = undefined;\n }\n /** @internal */\n setAccount(account, remove) {\n const accountPayloads = this.payload.accounts || [];\n if (remove) {\n this.payload.accounts = accountPayloads.filter(a => a.id !== account.id);\n }\n else {\n const existingAccount = accountPayloads.find(a => a.id === account.id);\n if (existingAccount) {\n this.payload.accounts = accountPayloads.map(a => a.id === account.id ? account : a);\n }\n else {\n this.payload.accounts = [...accountPayloads, account];\n }\n }\n }\n /** @internal */\n setGroup(group, remove) {\n const groupPayloads = this.payload.groups || [];\n if (remove) {\n this.payload.groups = groupPayloads.filter(g => g.id !== group.id);\n }\n else {\n const existingGroup = groupPayloads.find(g => g.id === group.id);\n if (existingGroup) {\n this.payload.groups = groupPayloads.map(g => (g.id === group.id ? group : g));\n }\n else {\n this.payload.groups = [...groupPayloads, group];\n }\n }\n }\n /**\n * Lists transactions in the Book based on the provided query, limit, and cursor, for pagination.\n *\n * @param query - The query string to filter transactions\n * @param limit - The maximum number of transactions to return. Default to 100, max to 1000\n * @param cursor - The cursor for pagination\n *\n * @returns A [[TransactionList]] object containing the list of transactions\n */\n listTransactions(query, limit, cursor) {\n return __awaiter(this, void 0, void 0, function* () {\n const transactionsList = yield TransactionService.listTransactions(this.getId(), query, limit, cursor, this.getConfig());\n return new TransactionList(this, transactionsList);\n });\n }\n /**\n * Retrieve the number of transactions based on a query.\n *\n * @param query - The query string\n *\n * @returns The number of matching transactions\n */\n countTransactions(query) {\n return __awaiter(this, void 0, void 0, function* () {\n const count = yield TransactionService.countTransactions(this.getId(), query, this.getConfig());\n return count.total;\n });\n }\n /**\n * Lists events in the Book based on the provided parameters.\n *\n * @param afterDate - The start date (inclusive) for the events search range, in [RFC3339](https://en.wikipedia.org/wiki/ISO_8601#RFC_3339) format. Can be null\n * @param beforeDate - The end date (exclusive) for the events search range, in [RFC3339](https://en.wikipedia.org/wiki/ISO_8601#RFC_3339) format. Can be null\n * @param onError - True to search only for events on error\n * @param resourceId - The ID of the event's resource (Transaction, Account, or Group). Can be null\n * @param limit - The maximum number of events to return\n * @param cursor - The cursor for pagination. Can be null\n *\n * @returns An [[EventList]] object containing the list of events\n */\n listEvents(afterDate, beforeDate, onError, resourceId, limit, cursor) {\n return __awaiter(this, void 0, void 0, function* () {\n const eventsList = yield EventService.listEvents(this, afterDate, beforeDate, onError, resourceId, limit, cursor, this.getConfig());\n return new EventList(this, eventsList);\n });\n }\n /**\n * Retrieve a transaction by id.\n *\n * @param id - The transaction ID\n *\n * @returns The [[Transaction]] object\n */\n getTransaction(id) {\n return __awaiter(this, void 0, void 0, function* () {\n let wrapped = yield TransactionService.getTransaction(this.getId(), id, this.getConfig());\n if (!wrapped) {\n return undefined;\n }\n let transaction = new Transaction(this, wrapped);\n return transaction;\n });\n }\n /**\n * Retrieve a file by id.\n *\n * @param id - The file ID\n *\n * @returns The [[File]] object\n */\n getFile(id) {\n return __awaiter(this, void 0, void 0, function* () {\n let wrapped = yield FileService.getFile(this.getId(), id, this.getConfig());\n if (!wrapped) {\n return undefined;\n }\n let file = new File(this, wrapped);\n return file;\n });\n }\n /**\n * Performs create new Book.\n *\n * @returns The created Book object\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield BookService.createBook(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Creates a copy of this Book\n *\n * @param name - The name for the copied book\n * @param copyTransactions - True to copy transactions from the source book (user must be the Book owner)\n * @param fromDate - Start date to consider if copying transactions (numeric value in YYYYMMDD format)\n *\n * @returns The copied Book object\n */\n copy(name, copyTransactions, fromDate) {\n return __awaiter(this, void 0, void 0, function* () {\n const copiedBookPayload = yield BookService.copyBook(this.getId(), name, copyTransactions, fromDate, this.getConfig());\n return new Book(copiedBookPayload, this.config);\n });\n }\n /**\n * Perform update Book, applying pending changes.\n *\n * @returns The updated Book object\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield BookService.updateBook(this.getId(), this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Warning!\n *\n * Deletes this Book and all its data (transactions, accounts, groups). Book owner only.\n *\n * @returns This Book after deletion\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield BookService.deleteBook(this.getId(), this.getConfig());\n return this;\n });\n }\n /**\n * Create a [[BalancesReport]] based on query.\n *\n * @param query - The balances report query\n *\n * @returns The balances report\n *\n * Example:\n *\n * ```js\n * var book = BkperApp.getBook(\"agtzfmJrcGVyLWhyZHITCxIGTGVkZ2VyGICAgPXjx7oKDA\");\n *\n * var balancesReport = book.getBalancesReport(\"group:'Equity' after:7/2018 before:8/2018\");\n *\n * var accountBalance = balancesReport.getBalancesContainer(\"Bank Account\").getCumulativeBalance();\n * ```\n *\n * @returns The retrieved [[BalancesReport]] object\n */\n getBalancesReport(query) {\n return __awaiter(this, void 0, void 0, function* () {\n const balances = yield BalancesService.getBalances(this.getId(), query, this.getConfig());\n return new BalancesReport(this, balances);\n });\n }\n /**\n * Gets the saved queries from this book.\n *\n * @returns The saved queries from this book\n */\n getSavedQueries() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.queries == null) {\n const queryPayloads = yield QueryService.getSavedQueries(this.getId(), this.getConfig());\n this.queries = queryPayloads.map(payload => new Query(this, payload));\n }\n return this.queries;\n });\n }\n /**\n * Gets all collaborators of this Book.\n *\n * @returns Array of Collaborator objects\n */\n getCollaborators() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.collaborators) {\n const collaboratorPayloads = yield CollaboratorService.listCollaborators(this.getId(), this.getConfig());\n this.collaborators = collaboratorPayloads.map(payload => new Collaborator(this, payload));\n }\n return this.collaborators;\n });\n }\n /**\n * Gets the Backlog of this Book.\n *\n * @returns The Backlog object\n */\n getBacklog() {\n return __awaiter(this, void 0, void 0, function* () {\n const backlogPayload = yield EventService.getBacklog(this, this.getConfig());\n return new Backlog(backlogPayload, this.config);\n });\n }\n /**\n * Create a {@link AccountsDataTableBuilder}, to build two dimensional Array representations of {@link Account} dataset.\n *\n * @param accounts - Optional array of accounts. If not provided, all accounts will be fetched.\n *\n * @returns Accounts data table builder.\n */\n createAccountsDataTable(accounts) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!accounts) {\n accounts = yield this.getAccounts();\n }\n return new AccountsDataTableBuilder(accounts);\n });\n }\n /**\n * Create a {@link GroupsDataTableBuilder}, to build two dimensional Array representations of {@link Group} dataset.\n *\n * @param groups - Optional array of groups. If not provided, all groups will be fetched.\n *\n * @returns Groups data table builder.\n */\n createGroupsDataTable(groups) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!groups) {\n groups = yield this.getGroups();\n }\n return new GroupsDataTableBuilder(groups);\n });\n }\n /**\n * Create a {@link TransactionsDataTableBuilder}, to build two dimensional Array representations of {@link Transaction} dataset.\n *\n * @param transactions - Array of transactions to include in the table.\n * @param account - Optional account for balance column display.\n *\n * @returns Transactions data table builder.\n */\n createTransactionsDataTable(transactions, account) {\n return new TransactionsDataTableBuilder(this, transactions, account);\n }\n}\n//# sourceMappingURL=Book.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiRequest } from \"./http-api-request.js\";\nexport function getTemplates(config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiRequest(`v5/templates`, config).setMethod('GET').fetch();\n if (response.data == null) {\n return [];\n }\n let templateListPlain = response.data;\n let templatesJson = templateListPlain.items;\n if (templatesJson == null) {\n return [];\n }\n return templatesJson;\n });\n}\n//# sourceMappingURL=template-service.js.map", "import { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\n/**\n * This class defines a Template.\n *\n * A Template is a pre-configured setup for [[Books]] and associated Google Sheets that provides users with a starting point for specific accounting or financial management needs.\n *\n * @public\n */\nexport class Template extends Resource {\n constructor(json, config) {\n super(json);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the name of the Template.\n *\n * @returns The Template's name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the description of the Template.\n *\n * @returns The Template's description\n */\n getDescription() {\n return this.payload.description;\n }\n /**\n * Gets the url of the image of the Template.\n *\n * @returns The url of the Template's image\n */\n getImageUrl() {\n return this.payload.imageUrl;\n }\n /**\n * Gets the category of the Template.\n *\n * @returns The Template's category. Example: \"PERSONAL\", \"BUSINESS\", etc\n */\n getCategory() {\n return this.payload.category;\n }\n /**\n * Gets the times the Template has been used.\n *\n * @returns The number of times the Template has been used\n */\n getTimesUsed() {\n return this.payload.timesUsed || 0;\n }\n /**\n * Gets the bookId of the [[Book]] associated with the Template.\n *\n * @returns The bookId of the Book associated with the Template\n */\n getBookId() {\n return this.payload.bookId;\n }\n /**\n * Gets the link of the [[Book]] associated with the Template.\n *\n * @returns The link of the Book associated with the Template\n */\n getBookLink() {\n return this.payload.bookLink;\n }\n /**\n * Gets the link of the Google Sheets spreadsheet associated with the Template.\n *\n * @returns The link of the Google Sheets spreadsheet associated with the Template\n */\n getSheetsLink() {\n return this.payload.sheetsLink;\n }\n}\n//# sourceMappingURL=Template.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Book } from \"./Book.js\";\nimport { App } from \"./App.js\";\nimport * as AppService from \"../service/app-service.js\";\nimport * as BookService from \"../service/book-service.js\";\nimport * as CollectionService from \"../service/collection-service.js\";\nimport * as UserService from \"../service/user-service.js\";\nimport * as TemplateService from \"../service/template-service.js\";\nimport { User } from \"./User.js\";\nimport { Template } from \"./Template.js\";\nimport { Collection } from \"./Collection.js\";\n/**\n * This is the main entry point of the [bkper-js](https://www.npmjs.com/package/bkper-js) library.\n *\n * You can configure the library in two ways:\n *\n * 1. Using static configuration (traditional approach):\n *\n * ```typescript\n * Bkper.setConfig({\n * apiKeyProvider: () => process.env.BKPER_API_KEY,\n * oauthTokenProvider: () => process.env.BKPER_OAUTH_TOKEN\n * });\n *\n * const bkper = new Bkper();\n * const book = await bkper.getBook('bookId');\n * ```\n *\n * 2. Using per-instance configuration (recommended for Cloudflare Workers):\n *\n * ```typescript\n * const bkper = new Bkper({\n * apiKeyProvider: () => process.env.BKPER_API_KEY,\n * oauthTokenProvider: () => process.env.BKPER_OAUTH_TOKEN\n * });\n *\n * const book = await bkper.getBook('bookId');\n * ```\n *\n * @public\n */\nexport class Bkper {\n /**\n * Sets the global API configuration for all Bkper operations.\n *\n * WARNING: This configuration will be shared and should NOT be used on shared environments.\n *\n * @param config - The Config object containing API key and OAuth token providers\n */\n static setConfig(config) {\n Bkper.globalConfig = config;\n }\n /**\n * Creates a new Bkper instance with the provided configuration.\n *\n * @param config - The Config object containing API key and OAuth token providers.\n * If not provided, uses the global configuration set via setConfig().\n */\n constructor(config) {\n this.config = config || Bkper.globalConfig;\n }\n /**\n * Gets the current instance configuration.\n *\n * @returns The Config object for this Bkper instance\n */\n getConfig() {\n return this.config;\n }\n /**\n * Gets the [[Book]] with the specified bookId from url param.\n *\n * @param id - The universal book id - The same bookId param of URL you access at app.bkper.com\n * @param includeAccounts - Optional parameter to include accounts in the retrieved Book\n * @param includeGroups - Optional parameter to include groups in the retrieved Book\n *\n * If both includeAccounts and includeGroups are false, the Book will be returned with only the basic information.\n *\n * If includeAccounts is true, the Book will be returned with the accounts and groups.\n *\n * If includeGroups is true, the Book will be returned with the groups.\n *\n * @returns The retrieved Book\n */\n getBook(id, includeAccounts, includeGroups) {\n return __awaiter(this, void 0, void 0, function* () {\n let book = yield BookService.loadBook(id, includeAccounts, includeGroups, this.config);\n return new Book(book, this.config);\n });\n }\n /**\n * Gets all [[Books]] the user has access to.\n *\n * @param query - Optional search term to filter books\n * @returns The retrieved list of Books\n */\n getBooks(query) {\n return __awaiter(this, void 0, void 0, function* () {\n let books = yield BookService.loadBooks(query, this.config);\n return books.map((book) => new Book(book, this.config));\n });\n }\n /**\n * Gets all [[Collections]] the user has access to.\n *\n * @returns The retrieved list of Collections\n */\n getCollections() {\n return __awaiter(this, void 0, void 0, function* () {\n let collections = yield CollectionService.loadCollections(this.config);\n return collections.map((collection) => new Collection(collection, this.config));\n });\n }\n /**\n * Gets all [[Apps]] available for the user.\n *\n * @returns The retrieved list of Apps\n */\n getApps() {\n return __awaiter(this, void 0, void 0, function* () {\n let apps = yield AppService.getApps(this.config);\n return apps.map((app) => new App(app, this.config));\n });\n }\n /**\n * Gets the [[App]] with the specified id.\n *\n * @param id - The App id (agentId)\n *\n * @returns The retrieved App\n */\n getApp(id) {\n return __awaiter(this, void 0, void 0, function* () {\n let app = yield AppService.getApp(id, this.config);\n return new App(app, this.config);\n });\n }\n /**\n * Gets all [[Templates]] available for the user.\n *\n * @returns The retrieved list of Templates\n */\n getTemplates() {\n return __awaiter(this, void 0, void 0, function* () {\n let templates = yield TemplateService.getTemplates(this.config);\n return templates.map((template) => new Template(template, this.config));\n });\n }\n /**\n * Gets the current logged [[User]].\n *\n * @returns The retrieved User\n */\n getUser() {\n return __awaiter(this, void 0, void 0, function* () {\n let user = yield UserService.getUser(this.config);\n return new User(user, this.config);\n });\n }\n}\n/** @internal */\nBkper.globalConfig = {};\n//# sourceMappingURL=Bkper.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as AppService from \"../service/app-service.js\";\nimport { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\n/**\n * Defines an App on Bkper.\n *\n * Apps can be installed on Books by users.\n *\n * @public\n */\nexport class App extends Resource {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Sets the webhook url for development.\n *\n * @param webhookUrlDev - The webhook URL for development\n *\n * @returns This App, for chaining\n */\n setWebhookUrlDev(webhookUrlDev) {\n this.payload.webhookUrlDev = webhookUrlDev;\n return this;\n }\n /**\n * Gets the App universal identifier.\n *\n * @returns The App universal identifier\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the name of this App.\n *\n * @returns The name of this App\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Checks if this App has events bound to it.\n *\n * @returns True if this App has events bound to it\n */\n hasEvents() {\n const events = this.getEvents() || [];\n return events.length > 0;\n }\n /**\n * Gets the events bound to this App.\n *\n * @returns The events bound to this App\n */\n getEvents() {\n return this.payload.events;\n }\n /**\n * Checks if this App is published.\n *\n * @returns True if this App is published\n */\n isPublished() {\n return this.payload.published || false;\n }\n /**\n * Tells if this App is installable.\n *\n * @returns True if this App is installable\n */\n isInstallable() {\n return this.payload.installable || false;\n }\n /**\n * Gets the logo url of this App.\n *\n * @returns The logo url of this App\n */\n getLogoUrl() {\n return this.payload.logoUrl;\n }\n /**\n * Gets the logo url of this App in dark mode.\n *\n * @returns The logo url of this App in dark mode\n */\n getLogoUrlDark() {\n return this.payload.logoUrlDark;\n }\n /**\n * Gets the description of this App.\n *\n * @returns The description of this App\n */\n getDescription() {\n return this.payload.description;\n }\n /**\n * Sets the whitelisted users (usernames and domain patterns).\n *\n * @param users - The users to whitelist (comma or space separated usernames and domain patterns like *@domain.com)\n *\n * @returns This App for chaining\n */\n setUsers(users) {\n this.payload.users = users;\n return this;\n }\n /**\n * Gets the whitelisted users (usernames and domain patterns).\n *\n * @returns The users string\n */\n getUsers() {\n return this.payload.users;\n }\n /**\n * Gets the menu url of this App.\n *\n * @returns The menu url of this App\n */\n getMenuUrl() {\n return this.payload.menuUrl;\n }\n /**\n * Gets the menu development url of this App.\n *\n * @returns The menu development url of this App\n */\n getMenuUrlDev() {\n return this.payload.menuUrlDev;\n }\n /**\n * Gets the menu text of this App.\n *\n * @returns The menu text of this App\n */\n getMenuText() {\n return this.payload.menuText;\n }\n /**\n * Gets the menu popup width of this App.\n *\n * @returns The menu popup width of this App\n */\n getMenuPopupWidth() {\n return this.payload.menuPopupWidth;\n }\n /**\n * Gets the menu popup height of this App.\n *\n * @returns The menu popup height of this App\n */\n getMenuPopupHeight() {\n return this.payload.menuPopupHeight;\n }\n /**\n * Gets the name of the owner of this App.\n *\n * @returns The name of the owner of this App\n */\n getOwnerName() {\n return this.payload.ownerName;\n }\n /**\n * Gets the logo url of the owner of this App.\n *\n * @returns The logo url of the owner of this App\n */\n getOwnerLogoUrl() {\n return this.payload.ownerLogoUrl;\n }\n /**\n * Gets the website url of the owner of this App.\n *\n * @returns The website url of the owner of this App\n */\n getOwnerWebsiteUrl() {\n return this.payload.ownerWebsite;\n }\n /**\n * Gets the file patterns the App handles.\n *\n * @returns The file patterns the App handles - E.g *.pdf *.csv\n */\n getFilePatterns() {\n return this.payload.filePatterns;\n }\n /**\n * Sets the developers (usernames and domain patterns).\n *\n * @param developers - The developers (comma or space separated usernames and domain patterns like *@domain.com)\n *\n * @returns This App for chaining\n */\n setDevelopers(developers) {\n this.payload.developers = developers;\n return this;\n }\n /**\n * Gets the developers (usernames and domain patterns).\n *\n * @returns The developers string\n */\n getDevelopers() {\n return this.payload.developers;\n }\n /**\n * Sets the client secret.\n *\n * @param clientSecret - The client secret to set\n *\n * @returns This App for chaining\n */\n setClientSecret(clientSecret) {\n this.payload.clientSecret = clientSecret;\n return this;\n }\n /**\n * Gets the website url of this App.\n *\n * @returns The website url of this App\n */\n getWebsiteUrl() {\n return this.payload.website;\n }\n /**\n * Tells if the repository is private.\n *\n * @returns True if the repository is private\n */\n isRepositoryPrivate() {\n return this.payload.repoPrivate;\n }\n /**\n * Gets the repository url of this App.\n *\n * @returns The repository url of this App\n */\n getRepositoryUrl() {\n return this.payload.repoUrl;\n }\n /**\n * Gets the readme.md file as text.\n *\n * @returns The readme text\n */\n getReadme() {\n return this.payload.readmeMd || this.payload.readme;\n }\n /**\n * Sets the readme.md file as text.\n *\n * @param readme - The readme text to set\n *\n * @returns This App, for chaining\n */\n setReadme(readme) {\n this.payload.readmeMd = readme;\n return this;\n }\n /**\n * Performs the app creation, applying pending changes.\n *\n * The App id MUST be unique. If another app is already existing, an error will be thrown.\n *\n * @returns This App after creation\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n yield AppService.createApp(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Performs a full update of the App, applying pending changes.\n *\n * @returns This App after the update\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n yield AppService.updateApp(this.payload, this.getConfig());\n return this;\n });\n }\n}\n//# sourceMappingURL=App.js.map", "import { convertInMatrix } from '../utils.js';\n/**\n * A BooksDataTableBuilder is used to setup and build two-dimensional arrays containing books.\n *\n * @public\n */\nexport class BooksDataTableBuilder {\n constructor(books) {\n this.shouldAddProperties = false;\n this.shouldAddIds = false;\n this.shouldAddHiddenProperties = false;\n this.propertyKeys = [];\n this.books = books;\n }\n /**\n * Defines whether to include custom book properties.\n *\n * @param include - Whether to include properties\n *\n * @returns This builder with respective include properties option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether to include book ids.\n *\n * @param include - Whether to include ids\n *\n * @returns This builder with respective include ids option, for chaining.\n */\n ids(include) {\n this.shouldAddIds = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n mapPropertyKeys() {\n this.propertyKeys = [];\n for (const book of this.books) {\n for (const key of book.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (this.propertyKeys.indexOf(key) <= -1) {\n this.propertyKeys.push(key);\n }\n }\n }\n this.propertyKeys = this.propertyKeys.sort();\n }\n /**\n * Builds a two-dimensional array containing all Books.\n *\n * @returns A two-dimensional array containing all Books\n */\n build() {\n var _a, _b;\n const table = new Array();\n this.books.sort((a, b) => {\n var _a, _b;\n const collA = (_a = a.getCollection()) === null || _a === void 0 ? void 0 : _a.getName();\n const collB = (_b = b.getCollection()) === null || _b === void 0 ? void 0 : _b.getName();\n // Books with collection before books without\n if (collA && !collB)\n return -1;\n if (!collA && collB)\n return 1;\n let ret = (collA || '').localeCompare(collB || '');\n if (ret === 0) {\n ret = (a.getName() || '').localeCompare(b.getName() || '');\n }\n return ret;\n });\n let headers = [];\n if (this.shouldAddIds) {\n headers.push('Book Id');\n }\n headers.push('Name');\n headers.push('Collection');\n headers.push('Date Pattern');\n headers.push('Decimal Separator');\n headers.push('Fraction Digits');\n headers.push('Period');\n headers.push('Owner');\n if (this.shouldAddProperties) {\n this.mapPropertyKeys();\n headers = headers.concat(this.propertyKeys);\n }\n for (const book of this.books) {\n const line = [];\n if (this.shouldAddIds) {\n line.push(book.getId());\n }\n line.push(book.getName() || '');\n line.push(((_a = book.getCollection()) === null || _a === void 0 ? void 0 : _a.getName()) || '');\n line.push(book.getDatePattern() || '');\n line.push(book.getDecimalSeparator() || '');\n line.push((_b = book.getFractionDigits()) !== null && _b !== void 0 ? _b : '');\n line.push(book.getPeriod() || '');\n line.push(book.getOwnerName() || '');\n if (this.shouldAddProperties) {\n const properties = book.getProperties();\n for (const key of this.propertyKeys) {\n line.push(properties[key] || '');\n }\n }\n table.push(line);\n }\n table.unshift(headers);\n convertInMatrix(table);\n return table;\n }\n}\n//# sourceMappingURL=BooksDataTableBuilder.js.map"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["LuxonError", "Error", "InvalidDateTimeError", "_LuxonError", "_inheritsLoose", "reason", "toMessage", "InvalidIntervalError", "_LuxonError2", "InvalidDurationError", "_LuxonError3", "ConflictingSpecificationError", "_LuxonError4", "InvalidUnitError", "_LuxonError5", "unit", "InvalidArgumentError", "_LuxonError6", "ZoneIsAbstractError", "_LuxonError7", "n", "s", "l", "DATE_SHORT", "year", "month", "day", "DATE_MED", "DATE_MED_WITH_WEEKDAY", "weekday", "DATE_FULL", "DATE_HUGE", "TIME_SIMPLE", "hour", "minute", "TIME_WITH_SECONDS", "second", "TIME_WITH_SHORT_OFFSET", "timeZoneName", "TIME_WITH_LONG_OFFSET", "TIME_24_SIMPLE", "hour12", "TIME_24_WITH_SECONDS", "TIME_24_WITH_SHORT_OFFSET", "TIME_24_WITH_LONG_OFFSET", "DATETIME_SHORT", "DATETIME_SHORT_WITH_SECONDS", "DATETIME_MED", "DATETIME_MED_WITH_SECONDS", "DATETIME_MED_WITH_WEEKDAY", "DATETIME_FULL", "DATETIME_FULL_WITH_SECONDS", "DATETIME_HUGE", "DATETIME_HUGE_WITH_SECONDS", "isUndefined", "o", "isNumber", "isInteger", "isString", "isDate", "Object", "prototype", "toString", "call", "hasIntl", "Intl", "DateTimeFormat", "e", "hasFormatToParts", "formatToParts", "hasRelative", "RelativeTimeFormat", "maybeArray", "thing", "Array", "isArray", "bestBy", "arr", "by", "compare", "length", "reduce", "best", "next", "pair", "pick", "obj", "keys", "a", "k", "hasOwnProperty", "prop", "integerBetween", "bottom", "top", "floorMod", "x", "Math", "floor", "padStart", "input", "minus", "target", "result", "repeat", "slice", "parseInteger", "string", "parseInt", "parseMillis", "fraction", "f", "parseFloat", "roundTo", "number", "digits", "towardZero", "factor", "rounder", "trunc", "round", "isLeapYear", "daysInYear", "daysInMonth", "modMonth", "modYear", "objToLocalTS", "d", "Date", "UTC", "millisecond", "setUTCFullYear", "getUTCFullYear", "weeksInWeekYear", "weekYear", "p1", "last", "p2", "untruncateYear", "parseZoneInfo", "ts", "offsetFormat", "locale", "timeZone", "date", "intlOpts", "modified", "assign", "intl", "parsed", "find", "m", "type", "toLowerCase", "value", "without", "format", "included", "diffed", "substring", "trimmed", "replace", "signedOffset", "offHourStr", "offMinuteStr", "offHour", "Number", "isNaN", "offMin", "offMinSigned", "is", "asNumber", "numericValue", "normalizeObject", "normalizer", "nonUnitKeys", "normalized", "u", "indexOf", "v", "formatOffset", "offset", "hours", "abs", "minutes", "sign", "RangeError", "timeObject", "ianaRegex", "stringify", "JSON", "sort", "monthsLong", "monthsShort", "monthsNarrow", "months", "weekdaysLong", "weekdaysShort", "weekdaysNarrow", "weekdays", "meridiems", "erasLong", "erasShort", "erasNarrow", "eras", "meridiemForDateTime", "dt", "weekdayForDateTime", "monthForDateTime", "eraForDateTime", "formatRelativeTime", "count", "numeric", "narrow", "units", "years", "quarters", "weeks", "days", "seconds", "lastable", "isDay", "isInPast", "fmtValue", "singular", "lilUnits", "fmtUnit", "formatString", "knownFormat", "filtered", "key", "dateTimeHuge", "Formats", "stringifyTokens", "splits", "tokenToString", "_iterator", "_createForOfIteratorHelperLoose", "_step", "token", "literal", "val", "macroTokenToFormatOpts", "D", "DD", "DDD", "DDDD", "t", "tt", "ttt", "tttt", "T", "TT", "TTT", "TTTT", "ff", "fff", "ffff", "F", "FF", "FFF", "FFFF", "Formatter", "create", "opts", "parseFormat", "fmt", "current", "currentFull", "bracketed", "i", "c", "charAt", "push", "formatOpts", "loc", "systemLoc", "formatWithSystemDefault", "redefaultToSystem", "df", "dtFormatter", "formatDateTime", "formatDateTimeParts", "resolvedOptions", "num", "p", "forceSimple", "padTo", "numberFormatter", "formatDateTimeFromString", "_this", "knownEnglish", "listingMode", "useDateTimeFormatter", "outputCalendar", "extract", "isOffsetFixed", "allowZ", "isValid", "zone", "meridiem", "English", "standalone", "maybeMacro", "era", "offsetName", "zoneName", "weekNumber", "ordinal", "quarter", "formatDurationFromString", "dur", "_this2", "tokenToField", "lildur", "mapped", "get", "tokens", "realTokens", "found", "_ref", "concat", "collapsed", "shiftTo", "map", "filter", "Invalid", "explanation", "Zone", "equals", "otherZone", "singleton", "LocalZone", "getTimezoneOffset", "matchingRegex", "RegExp", "source", "dtfCache", "makeDTF", "typeToPos", "hackyOffset", "dtf", "formatted", "exec", "fMonth", "fDay", "fYear", "fHour", "fMinute", "fSecond", "partsOffset", "filled", "_formatted$i", "pos", "ianaZoneCache", "IANAZone", "name", "resetCache", "isValidSpecifier", "match", "isValidZone", "parseGMTOffset", "specifier", "_Zone", "valid", "NaN", "_ref2", "adjustedHour", "asUTC", "asTS", "over", "FixedOffsetZone", "instance", "utcInstance", "parseSpecifier", "r", "fixed", "InvalidZone", "normalizeZone", "defaultZone", "lowered", "now", "defaultLocale", "defaultNumberingSystem", "defaultOutputCalendar", "throwOnInvalid", "Settings", "resetCaches", "Locale", "z", "numberingSystem", "intlDTCache", "getCachedDTF", "locString", "intlNumCache", "getCachedINF", "inf", "NumberFormat", "intlRelCache", "getCachedRTF", "_opts", "base", "cacheKeyOpts", "_objectWithoutPropertiesLoose", "sysLocaleCache", "systemLocale", "computedSys", "parseLocaleString", "localeStr", "uIndex", "options", "smaller", "_options", "calendar", "intlConfigString", "mapMonths", "ms", "DateTime", "utc", "mapWeekdays", "listStuff", "defaultOK", "englishFn", "intlFn", "mode", "supportsFastNumbers", "startsWith", "PolyNumberFormatter", "useGrouping", "minimumIntegerDigits", "PolyDateFormatter", "universal", "gmtOffset", "offsetZ", "isOffsetZoneSupported", "fromMillis", "toJSDate", "tokenFormat", "PolyRelFormatter", "isEnglish", "style", "rtf", "fromOpts", "defaultToEN", "specifiedLocale", "localeR", "numberingSystemR", "outputCalendarR", "fromObject", "_temp", "numbering", "_parseLocaleString", "parsedLocale", "parsedNumberingSystem", "parsedOutputCalendar", "weekdaysCache", "monthsCache", "meridiemCache", "eraCache", "fastNumbersCached", "hasFTP", "isActuallyEn", "hasNoWeirdness", "clone", "alts", "getOwnPropertyNames", "redefaultToEN", "formatStr", "_this3", "undefined", "_this4", "field", "results", "matching", "fastNumbers", "relFormatter", "other", "combineRegexes", "_len", "regexes", "_key", "full", "combineExtractors", "_len2", "extractors", "_key2", "ex", "mergedVals", "mergedZone", "cursor", "_ex", "parse", "_len3", "patterns", "_key3", "_i", "_patterns", "_patterns$_i", "regex", "extractor", "simpleParse", "_len4", "_key4", "ret", "offsetRegex", "isoTimeBaseRegex", "isoTimeRegex", "isoTimeExtensionRegex", "isoYmdRegex", "isoWeekRegex", "isoOrdinalRegex", "extractISOWeekData", "extractISOOrdinalData", "sqlYmdRegex", "sqlTimeRegex", "sqlTimeExtensionRegex", "int", "fallback", "extractISOYmd", "item", "extractISOTime", "milliseconds", "extractISOOffset", "local", "fullOffset", "extractIANAZone", "isoTimeOnly", "isoDuration", "extractISODuration", "yearStr", "monthStr", "weekStr", "dayStr", "hourStr", "minuteStr", "secondStr", "millisecondsStr", "hasNegativePrefix", "negativeSeconds", "maybeNegate", "force", "obsOffsets", "GMT", "EDT", "EST", "CDT", "CST", "MDT", "MST", "PDT", "PST", "fromStrings", "weekdayStr", "rfc2822", "extractRFC2822", "obsOffset", "milOffset", "preprocessRFC2822", "trim", "rfc1123", "rfc850", "ascii", "extractRFC1123Or850", "extractASCII", "isoYmdWithTimeExtensionRegex", "isoWeekWithTimeExtensionRegex", "isoOrdinalWithTimeExtensionRegex", "isoTimeCombinedRegex", "extractISOYmdTimeAndOffset", "extractISOWeekTimeAndOffset", "extractISOOrdinalDateAndTime", "extractISOTimeAndOffset", "parseISODate", "parseRFC2822Date", "parseHTTPDate", "parseISODuration", "extractISOTimeOnly", "parseISOTimeOnly", "sqlYmdWithTimeExtensionRegex", "sqlTimeCombinedRegex", "extractISOYmdTimeOffsetAndIANAZone", "extractISOTimeOffsetAndIANAZone", "parseSQL", "INVALID", "lowOrderMatrix", "casualMatrix", "daysInYearAccurate", "daysInMonthAccurate", "accurateMatrix", "orderedUnits", "reverseUnits", "reverse", "clear", "conf", "values", "conversionAccuracy", "Duration", "antiTrunc", "ceil", "convert", "matrix", "fromMap", "fromUnit", "toMap", "toUnit", "conv", "raw", "sameSign", "added", "normalizeValues", "vals", "previous", "config", "accurate", "invalid", "isLuxonDuration", "normalizeUnit", "fromISO", "text", "_parseISODuration", "fromISOTime", "_parseISOTimeOnly", "week", "isDuration", "toFormat", "fmtOpts", "toObject", "includeConfig", "toISO", "toISOTime", "millis", "toMillis", "suppressMilliseconds", "suppressSeconds", "includePrefix", "str", "toJSON", "as", "valueOf", "plus", "duration", "friendlyDuration", "negate", "mapUnits", "fn", "_Object$keys", "set", "mixed", "reconfigure", "normalize", "built", "accumulated", "lastUnit", "_iterator2", "_step2", "own", "ak", "down", "negated", "_i2", "_Object$keys2", "eq", "v1", "v2", "_iterator3", "_step3", "durationish", "validateStartEnd", "start", "end", "Interval", "isLuxonInterval", "fromDateTimes", "builtStart", "friendlyDateTime", "builtEnd", "validateError", "after", "before", "_split", "split", "startIsValid", "endIsValid", "isInterval", "toDuration", "startOf", "diff", "hasSame", "isEmpty", "isAfter", "dateTime", "isBefore", "contains", "splitAt", "dateTimes", "sorted", "splitBy", "idx", "divideEqually", "numberOfParts", "overlaps", "abutsStart", "abutsEnd", "engulfs", "intersection", "union", "merge", "intervals", "_intervals$sort$reduc", "b", "sofar", "final", "xor", "_Array$prototype", "currentCount", "ends", "time", "flattened", "difference", "toISODate", "dateFormat", "_temp2", "_ref3", "_ref3$separator", "separator", "invalidReason", "mapEndpoints", "mapFn", "Info", "hasDST", "proto", "setZone", "isValidIANAZone", "_ref$locale", "_ref$numberingSystem", "_ref$locObj", "locObj", "_ref$outputCalendar", "monthsFormat", "_ref2$locale", "_ref2$numberingSystem", "_ref2$locObj", "_ref2$outputCalendar", "_temp3", "_ref3$locale", "_ref3$numberingSystem", "_ref3$locObj", "weekdaysFormat", "_temp4", "_ref4", "_ref4$locale", "_ref4$numberingSystem", "_ref4$locObj", "_temp5", "_ref5", "_ref5$locale", "_temp6", "_ref6", "_ref6$locale", "features", "intlTokens", "zones", "relative", "dayDiff", "earlier", "later", "utcDayStart", "toUTC", "keepLocalTime", "highOrderDiffs", "differs", "lowestOrder", "highWater", "_differs", "_differs$_i", "differ", "_cursor$plus", "delta", "_cursor$plus2", "_diff", "_highOrderDiffs", "remainingMillis", "lowerOrderUnits", "_cursor$plus3", "_Duration$fromMillis", "numberingSystems", "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "hanidec", "khmr", "knda", "laoo", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt", "latn", "numberingSystemsUTF16", "hanidecChars", "parseDigits", "code", "charCodeAt", "search", "_numberingSystemsUTF", "min", "max", "digitRegex", "append", "MISSING_FTP", "intUnit", "post", "deser", "NBSP", "String", "spaceOrNBSP", "spaceOrNBSPRegExp", "fixListRegex", "stripInsensitivities", "oneOf", "strings", "startIndex", "join", "findIndex", "groups", "h", "simple", "escapeToken", "unitForToken", "one", "two", "three", "four", "six", "oneOrTwo", "oneToThree", "oneToSix", "oneToNine", "twoToFour", "fourToSix", "unitate", "partTypeStyleToTokenVal", "short", "long", "dayperiod", "dayPeriod", "tokenForPart", "part", "buildRegex", "re", "handlers", "matches", "all", "matchIndex", "dateTimeFromMatches", "toField", "Z", "q", "M", "G", "y", "S", "dummyDateTimeCache", "getDummyDateTime", "maybeExpandMacroToken", "formatter", "parts", "includes", "expandMacroTokens", "explainFromTokens", "disqualifyingUnit", "_buildRegex", "regexString", "_match", "rawMatches", "parseFromTokens", "_explainFromTokens", "nonLeapLadder", "leapLadder", "unitOutOfRange", "dayOfWeek", "js", "getUTCDay", "computeOrdinal", "uncomputeOrdinal", "table", "month0", "gregorianToWeek", "gregObj", "weekToGregorian", "weekData", "weekdayOfJan4", "yearInDays", "_uncomputeOrdinal", "gregorianToOrdinal", "gregData", "ordinalToGregorian", "ordinalData", "_uncomputeOrdinal2", "hasInvalidWeekData", "validYear", "validWeek", "validWeekday", "hasInvalidOrdinalData", "validOrdinal", "hasInvalidGregorianData", "validMonth", "validDay", "hasInvalidTimeData", "validHour", "validMinute", "validSecond", "validMillisecond", "MAX_DATE", "unsupportedZone", "possiblyCachedWeekData", "inst", "old", "fixOffset", "localTS", "tz", "utcGuess", "o2", "o3", "tsToObj", "getUTCMonth", "getUTCDate", "getUTCHours", "getUTCMinutes", "getUTCSeconds", "getUTCMilliseconds", "objToTS", "adjustTime", "oPre", "millisToAdd", "_fixOffset", "parseDataToDateTime", "parsedZone", "interpretationZone", "toTechFormat", "toTechTimeFormat", "_ref$suppressSeconds", "_ref$suppressMillisec", "includeOffset", "_ref$includePrefix", "_ref$includeZone", "includeZone", "_ref$spaceZone", "spaceZone", "_ref$format", "defaultUnitValues", "defaultWeekUnitValues", "defaultOrdinalUnitValues", "orderedWeekUnits", "orderedOrdinalUnits", "weeknumber", "weeksnumber", "weeknumbers", "weekyear", "weekyears", "quickDT", "tsNow", "offsetProvis", "_objToTS", "diffRelative", "calendary", "unchanged", "ot", "_zone", "isLuxonDateTime", "fromJSDate", "zoneToUse", "fromSeconds", "containsOrdinal", "containsGregorYear", "containsGregorMD", "containsGregor", "definiteWeekDef", "useWeekData", "defaultValues", "objNow", "foundFirst", "higherOrderInvalid", "gregorian", "_objToTS2", "tsFinal", "offsetFinal", "_parseISODate", "fromRFC2822", "_parseRFC2822Date", "fromHTTP", "_parseHTTPDate", "fromFormat", "_opts$locale", "_opts$numberingSystem", "localeToUse", "_parseFromTokens", "fromString", "fromSQL", "_parseSQL", "isDateTime", "resolvedLocaleOpts", "_Formatter$create$res", "toLocal", "_ref3$keepLocalTime", "_ref3$keepCalendarTim", "keepCalendarTime", "newTS", "offsetGuess", "asObj", "_objToTS3", "setLocale", "settingWeekStuff", "_objToTS4", "normalizedUnit", "endOf", "_this$plus", "toLocaleString", "toLocaleParts", "_ref5$format", "toISOWeekDate", "_ref6$suppressMillise", "_ref6$suppressSeconds", "_ref6$includeOffset", "_ref6$includePrefix", "_ref6$format", "toRFC2822", "toHTTP", "toSQLDate", "toSQLTime", "_ref7", "_ref7$includeOffset", "_ref7$includeZone", "toSQL", "toSeconds", "toBSON", "otherDateTime", "durOpts", "otherIsLater", "diffNow", "until", "inputMs", "otherZoneDateTime", "toRelative", "padding", "toRelativeCalendar", "every", "fromFormatExplain", "_options$locale", "_options$numberingSys", "fromStringExplain", "dateTimeish", "VERSION", "index_exports", "__export", "Account", "AccountType", "AccountsDataTableBuilder", "Agent", "Amount", "App", "Backlog", "Balance", "BalanceType", "BalancesDataTableBuilder", "BalancesReport", "Billing", "Bkper", "BkperError", "Book", "BooksDataTableBuilder", "BotResponse", "BotResponseType", "Collaborator", "Collection", "Connection", "DecimalSeparator", "Event", "EventList", "EventType", "File", "Group", "GroupsDataTableBuilder", "Integration", "Month", "Period", "Periodicity", "Permission", "Query", "Template", "Transaction", "TransactionList", "TransactionStatus", "TransactionsDataTableBuilder", "User", "Visibility", "BkperError", "code", "message", "reason", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "HttpRequest", "url", "method", "name", "payload", "param", "key", "fetchOptions", "response", "data", "contentType", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "API_BASE_URL", "resolveBaseUrl", "config", "HttpApiRequest", "HttpRequest", "path", "baseUrl", "_super", "resp", "errorObj", "effectiveConfig", "error", "err", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "customError", "BkperError", "headers", "key", "agentId", "apiKey", "token", "HttpBooksApiV5Request", "service", "HttpApiV5Request", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "createAccount", "bookId", "account", "config", "response", "HttpBooksApiV5Request", "createAccounts", "payload", "_a", "updateAccount", "updateAccounts", "deleteAccount", "deleteAccounts", "getAccount", "idOrName", "getAccounts", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "createGroup", "bookId", "group", "config", "response", "HttpBooksApiV5Request", "createGroups", "payload", "_a", "updateGroup", "deleteGroup", "getGroups", "bookId", "config", "__awaiter", "response", "HttpBooksApiV5Request", "groupsPlain", "getGroup", "idOrName", "getAccounts", "accountsPlain", "import_luxon", "DP", "RM", "MAX_DP", "MAX_POWER", "NE", "PE", "STRICT", "NAME", "INVALID", "INVALID_DP", "INVALID_RM", "DIV_BY_ZERO", "P", "UNDEFINED", "NUMERIC", "_Big_", "Big", "n", "x", "parse", "e", "i", "nl", "round", "sd", "rm", "more", "xc", "stringify", "doExponential", "isNonzero", "s", "y", "isneg", "yc", "j", "k", "l", "a", "b", "dp", "bl", "bt", "cmp", "ri", "bz", "ai", "al", "r", "rl", "q", "qc", "qi", "p", "t", "xlty", "xe", "ye", "ygtx", "one", "c", "half", "big_default", "Amount", "_Amount", "n", "big_default", "big", "dp", "amount", "Periodicity", "DecimalSeparator", "Permission", "Visibility", "AccountType", "BalanceType", "Period", "Month", "TransactionStatus", "BotResponseType", "EventType", "repeatString", "text", "times", "extractTagsFromText", "tagRegex", "tagsSet", "match", "diacriticsMap_", "round", "number", "fractionDigits", "Amount", "formatValue", "value", "decimalSeparator", "formattedValue", "DecimalSeparator", "parseValue", "err", "convertValueToDate", "dateValue", "offsetInMinutes", "year", "month", "day", "date", "createDate", "createDate", "year", "month", "day", "offsetInMinutes", "date", "formatDate", "pattern", "timeZone", "formatDateISO", "getIsoDateValue", "parseDate", "dateObject", "getRepresentativeValue", "value", "credit", "Amount", "convertInMatrix", "array", "maxLength", "i", "normalizeName", "name", "normalizeText", "text", "spaceReplacement", "removeDiacritics", "str", "letters", "newStr", "getDiacriticsMap_", "diacriticsMap_", "defaultDiacriticsRemovalap_", "j", "Resource", "payload", "ResourceProperty", "Resource", "key", "properties", "keys", "index", "value", "propertyKeys", "filteredProperties", "allProperties", "visibleProperties", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Group", "ResourceProperty", "book", "payload", "name", "accounts", "account", "locked", "normalizeText", "id", "accountsPlain", "getAccounts", "acc", "Account", "hidden", "group", "child", "descendants", "g", "root", "children", "idGroupMap", "parentGroup", "createGroup", "updateGroup", "deleteGroup", "remove", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Account", "ResourceProperty", "book", "payload", "name", "normalizeText", "type", "archived", "groups", "groupPayload", "group", "Group", "groupObject", "i", "foundGroup", "createAccount", "updateAccount", "deleteAccount", "remove", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "AccountsDataTableBuilder", "accounts", "include", "account", "key", "type", "AccountType", "maxNumberOfGroups", "groups", "hierarchicalGroups", "freeGroups", "group", "byRoot", "rootId", "sortedChains", "b", "rootA", "rootB", "_", "chainGroups", "a", "chain", "table", "headers", "maxGroups", "i", "a1", "a2", "ret", "propertyKeys", "line", "numOfBlankCells", "properties", "propertyValue", "convertInMatrix", "Agent", "payload", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getApps", "config", "response", "HttpApiRequest", "appsJson", "getApp", "id", "createApp", "app", "updateApp", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "loadBooks", "query", "config", "request", "HttpBooksApiV5Request", "response", "booksJson", "loadBook", "bookId", "loadAccounts", "loadGroups", "createBook", "book", "updateBook", "audit", "getApps", "_a", "copyBook", "name", "copyTransactions", "fromDate", "deleteBook", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getSavedQueries", "bookId", "config", "_a", "response", "HttpBooksApiV5Request", "createSavedQuery", "query", "updateSavedQuery", "deleteSavedQuery", "queryId", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getBalances", "bookId", "query", "config", "_a", "response", "HttpBooksApiV5Request", "balancesUrl", "balancesResponse", "HttpRequest", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "createFile", "bookId", "file", "config", "response", "HttpBooksApiV5Request", "getFile", "id", "updateFile", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "listIntegrations", "bookId", "config", "_a", "res", "HttpBooksApiV5Request", "createIntegration", "integration", "updateIntegration", "deleteIntegration", "id", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "createTransaction", "bookId", "transaction", "config", "response", "HttpBooksApiV5Request", "postTransactionsBatch", "transactions", "payload", "createTransactionsBatch", "transactionList", "updateTransactionsBatch", "updateChecked", "checkTransactionsBatch", "uncheckTransactionsBatch", "trashTransactionsBatch", "trashChecked", "untrashTransactionsBatch", "updateTransaction", "postTransaction", "checkTransaction", "uncheckTransaction", "trashTransaction", "restoreTransaction", "getTransaction", "id", "listTransactions", "query", "limit", "cursor", "request", "countTransactions", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "listEvents", "book", "afterDate", "beforeDate", "onError", "resourceId", "limit", "cursor", "config", "request", "HttpBooksApiV5Request", "response", "replayBotResponse", "eventId", "agentId", "deleteBotResponse", "replayEventsBatch", "eventList", "errorsOnly", "getBacklog", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "listCollaborators", "bookId", "config", "_a", "response", "HttpBooksApiV5Request", "addOrUpdateCollaborator", "collaborator", "message", "request", "removeCollaborator", "email", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Collaborator", "Resource", "book", "payload", "email", "permission", "message", "addOrUpdateCollaborator", "removeCollaborator", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "loadCollections", "config", "_a", "response", "HttpApiV5Request", "createCollection", "payload", "updateCollection", "deleteCollection", "addBooksToCollection", "collectionId", "removeBooksFromCollection", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Collection", "Resource", "payload", "config", "Bkper", "name", "books", "bookPayload", "book", "Book", "collectionId", "bookList", "b", "addBooksToCollection", "removeBooksFromCollection", "createCollection", "updateCollection", "deleteCollection", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BotResponse", "event", "payload", "eventId", "agentId", "updatedEventPayload", "replayBotResponse", "deleteBotResponse", "_a", "updatedBotResponsePayload", "r", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getConnection", "id", "config", "HttpApiV5Request", "listConnections", "_a", "res", "createConnection", "connection", "deleteConnection", "id", "config", "__awaiter", "HttpApiV5Request", "listIntegrations", "connectionId", "_a", "res", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Integration", "ResourceProperty", "payload", "config", "Bkper", "bookId", "integrationId", "deleteIntegration", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Connection", "ResourceProperty", "payload", "config", "Bkper", "agentId", "name", "uuid", "type", "key", "id", "listIntegrations", "Integration", "createConnection", "connectionId", "deleteConnection", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getUser", "config", "HttpApiV5Request", "getBilling", "getBillingCounts", "getBillingPortalUrl", "returnUrl", "getBillingCheckoutUrl", "plan", "successUrl", "cancelUrl", "cycle", "request", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Billing", "Resource", "json", "config", "Bkper", "getBillingCounts", "returnUrl", "urlPayload", "getBillingPortalUrl", "plan", "successUrl", "cancelUrl", "cycle", "getBillingCheckoutUrl", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "User", "Resource", "payload", "config", "Bkper", "getBilling", "Billing", "listConnections", "c", "Connection", "id", "json", "getConnection", "Event", "book", "payload", "User", "Agent", "botResponses", "botResponse", "BotResponse", "BotResponseType", "EventList", "book", "payload", "events", "_a", "event", "Event", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "File", "ResourceProperty", "book", "payload", "name", "contentType", "id", "getFile", "content", "createFile", "updateFile", "byteToHex", "i", "unsafeStringify", "arr", "offset", "getRandomValues", "rnds8", "rng", "randomUUID", "native_default", "v4", "options", "buf", "offset", "_a", "_b", "_c", "native_default", "rnds", "rng", "i", "unsafeStringify", "v4_default", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Transaction", "ResourceProperty", "book", "payload", "remoteId", "checked", "date", "formatDateISO", "lockOrClosingDate", "getIsoDateValue", "TransactionStatus", "description", "extractTagsFromText", "urls", "url", "file", "File", "fileId", "f", "_a", "fileBookId", "v4_default", "promises", "createdFile", "results", "fileIndex", "tag", "tags", "i", "account", "Account", "Amount", "amount", "parseValue", "accountObject", "otherAccount", "dateObject", "parseDate", "convertValueToDate", "formatDate", "raw", "accountBalance", "isCa", "getRepresentativeValue", "round", "operation", "createTransaction", "updateTransaction", "checkTransaction", "uncheckTransaction", "postTransaction", "trashTransaction", "restoreTransaction", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "TransactionList", "book", "payload", "transactions", "_a", "transaction", "Transaction", "Balance", "container", "balancePlain", "year", "month", "day", "date", "createDate", "getRepresentativeValue", "Amount", "BalancesDataTableBuilder", "book", "balancesContainers", "periodicity", "BalanceType", "balance", "permanent", "Amount", "format", "expanded", "type", "transposed", "hide", "include", "trial", "period", "raw", "propertyKeys", "container", "key", "containersFlat", "child", "a", "b", "ret", "getBalanceTypeOrdinal", "bc", "depth", "repeatString", "children", "table", "containers", "header", "balances", "line", "name", "properties", "propertyValue", "row", "col", "i", "dataIndexMap", "cumulativeBalance", "fuzzyDate", "indexEntry", "amount", "rows", "fuzzy", "rowObject", "formatValue", "lastRow", "j", "cell", "formatDateISO", "propertyRow", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "AccountBalancesContainer", "parent", "balancesReport", "payload", "getRepresentativeValue", "Amount", "BalancesDataTableBuilder", "balancePlain", "Balance", "keys", "index", "key", "properties", "propertyKeys", "name", "normalizedName", "normalizeName", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "GroupBalancesContainer", "_GroupBalancesContainer", "parent", "balancesReport", "payload", "groupContainers", "getRepresentativeValue", "Amount", "balancePlain", "Balance", "BalancesDataTableBuilder", "keys", "index", "key", "properties", "propertyKeys", "containers", "accountContainers", "groupBalances", "i", "groupBalance", "accountBalances", "accountBalance", "AccountBalancesContainer", "name", "_a", "normalizedName", "normalizeName", "rootContainers", "balancesContainer", "map", "container", "nextContainers", "BalancesReport", "book", "payload", "BalancesDataTableBuilder", "containers", "accountContainers", "groupContainers", "name", "_a", "normalizedName", "normalizeName", "rootContainers", "balancesContainer", "i", "accountBalances", "accountBalancesContainer", "AccountBalancesContainer", "groupBalances", "groupBalancesContainer", "GroupBalancesContainer", "map", "container", "nextContainers", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Query", "Resource", "book", "payload", "title", "query", "createSavedQuery", "updateSavedQuery", "queryId", "deleteSavedQuery", "deleted", "q", "Backlog", "Resource", "payload", "config", "Bkper", "GroupsDataTableBuilder", "groups", "g1", "g2", "ret", "include", "enable", "group", "key", "groupType", "AccountType", "type", "hasChildren", "table", "headers", "convertInMatrix", "depth", "line", "name", "parentName", "properties", "propertyValue", "children", "child", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "TransactionsDataTableBuilder", "book", "transactions", "account", "format", "include", "headerLine", "dataTable", "convertInMatrix", "key", "remoteIdHeader", "attachmentHeader", "transaction", "line", "amount", "isCreditOnTx", "getRepresentativeValue", "formatValue", "accountBalance", "creditAccount", "urls", "remoteIds", "lineLength", "index", "files", "f", "url", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Book", "_Book", "ResourceProperty", "payload", "config", "Permission", "Bkper", "name", "fractionDigits", "period", "month", "pageSize", "Collection", "datePattern", "lockDate", "closingDate", "decimalSeparator", "timeZone", "autoPost", "visibility", "date", "formatDate", "parseDate", "formatValue", "parseValue", "round", "transactions", "transactionPayloads", "tx", "createTransactionsBatch", "Transaction", "postTransactionsBatch", "updateChecked", "updateTransactionsBatch", "checkTransactionsBatch", "uncheckTransactionsBatch", "trashChecked", "trashTransactionsBatch", "untrashTransactionsBatch", "events", "errorOnly", "eventList", "event", "id", "replayEventsBatch", "accounts", "accountList", "a", "payloads", "createAccounts", "createdAccounts", "account", "Account", "updateAccounts", "updatedAccounts", "deleteAccounts", "deletedAccounts", "groups", "groupList", "g", "createGroups", "createdGroups", "group", "Group", "audit", "appsPlain", "getApps", "App", "listIntegrations", "i", "Integration", "integration", "createIntegration", "updateIntegration", "idOrName", "normalizeName", "accountPayload", "getAccount", "normalizedName", "getIsoDateValue", "groupPayload", "getGroup", "_a", "_b", "getGroups", "groupsObj", "getAccounts", "accountsObj", "groupPayloads", "remove", "accountPayloads", "query", "limit", "cursor", "transactionsList", "listTransactions", "TransactionList", "countTransactions", "afterDate", "beforeDate", "onError", "resourceId", "eventsList", "listEvents", "EventList", "wrapped", "getTransaction", "getFile", "File", "createBook", "copyTransactions", "fromDate", "copiedBookPayload", "copyBook", "updateBook", "deleteBook", "balances", "getBalances", "BalancesReport", "queryPayloads", "getSavedQueries", "Query", "collaboratorPayloads", "listCollaborators", "Collaborator", "backlogPayload", "getBacklog", "Backlog", "AccountsDataTableBuilder", "GroupsDataTableBuilder", "TransactionsDataTableBuilder", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getTemplates", "config", "response", "HttpApiRequest", "templatesJson", "Template", "Resource", "json", "config", "Bkper", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Bkper", "_Bkper", "config", "id", "includeAccounts", "includeGroups", "book", "loadBook", "Book", "query", "loadBooks", "loadCollections", "collection", "Collection", "getApps", "app", "App", "getApp", "getTemplates", "template", "Template", "user", "getUser", "User", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "App", "Resource", "payload", "config", "Bkper", "webhookUrlDev", "users", "developers", "clientSecret", "readme", "createApp", "updateApp", "BooksDataTableBuilder", "books", "include", "book", "key", "_a", "_b", "table", "a", "b", "collA", "collB", "ret", "headers", "line", "properties", "convertInMatrix"]
|
|
4
|
+
"sourcesContent": ["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n", "/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23', always 24-hour.\n */\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour.\n */\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hour12: false,\n timeZoneName: s\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour.\n */\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hour12: false,\n timeZoneName: l\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l\n};\n", "/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasIntl() {\n try {\n return typeof Intl !== \"undefined\" && Intl.DateTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasFormatToParts() {\n return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts);\n}\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const minus = input < 0 ? \"-\" : \"\";\n const target = minus ? input * -1 : input;\n let result;\n\n if (target.toString().length < n) {\n result = (\"0\".repeat(n) + target).slice(-n);\n } else {\n result = target.toString();\n }\n\n return `${minus}${result}`;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n const factor = 10 ** digits,\n rounder = towardZero ? Math.trunc : Math.round;\n return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// covert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n return +d;\n}\n\nexport function weeksInWeekYear(weekYear) {\n const p1 =\n (weekYear +\n Math.floor(weekYear / 4) -\n Math.floor(weekYear / 100) +\n Math.floor(weekYear / 400)) %\n 7,\n last = weekYear - 1,\n p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n return p1 === 4 || p2 === 3 ? 53 : 52;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > 60 ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hour12: false,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\"\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = Object.assign({ timeZoneName: offsetFormat }, intlOpts),\n intl = hasIntl();\n\n if (intl && hasFormatToParts()) {\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find(m => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n } else if (intl) {\n // this probably doesn't work for all locales\n const without = new Intl.DateTimeFormat(locale, intlOpts).format(date),\n included = new Intl.DateTimeFormat(locale, modified).format(date),\n diffed = included.substring(without.length),\n trimmed = diffed.replace(/^[, \\u200e]+/, \"\");\n return trimmed;\n } else {\n return null;\n }\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer, nonUnitKeys) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n if (nonUnitKeys.indexOf(u) >= 0) continue;\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n\nexport const ianaRegex = /[A-Za-z_+-]{1,256}(:?\\/[A-Za-z_+-]{1,256}(\\/[A-Za-z_+-]{1,256})?)?/;\n", "import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\"\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"]\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hour12\"\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n", "import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { hasFormatToParts, padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: false, val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n }\n\n formatDateTime(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n }\n\n formatDateTimeParts(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.formatToParts();\n }\n\n resolvedOptions(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.resolvedOptions();\n }\n\n num(n, p = 0) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = Object.assign({}, this.opts);\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter =\n this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\" && hasFormatToParts(),\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = opts => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hour12: true }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = token => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = length =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = token => {\n // Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const tokenToField = token => {\n switch (token[0]) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n default:\n return null;\n }\n },\n tokenToString = lildur => token => {\n const mapped = tokenToField(token);\n if (mapped) {\n return this.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter(t => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\n", "export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n", "/* eslint no-unused-vars: \"off\" */\nimport { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get universal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n", "import { formatOffset, parseZoneInfo, hasIntl } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class LocalZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {LocalZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new LocalZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"local\";\n }\n\n /** @override **/\n get name() {\n if (hasIntl()) {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n } else return \"local\";\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"local\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n", "import { formatOffset, parseZoneInfo, isUndefined, ianaRegex, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst matchingRegex = RegExp(`^${ianaRegex.source}$`);\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\"\n });\n }\n return dtfCache[zone];\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n hour: 3,\n minute: 4,\n second: 5\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date),\n filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i],\n pos = typeToPos[type];\n\n if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n if (!ianaZoneCache[name]) {\n ianaZoneCache[name] = new IANAZone(name);\n }\n return ianaZoneCache[name];\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache = {};\n dtfCache = {};\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Fantasia/Castle\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return !!(s && s.match(matchingRegex));\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n // Etc/GMT+8 -> -480\n /** @ignore */\n static parseGMTOffset(specifier) {\n if (specifier) {\n const match = specifier.match(/^Etc\\/GMT(0|[+-]\\d{1,2})$/i);\n if (match) {\n return -60 * parseInt(match[1]);\n }\n }\n return null;\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /** @override **/\n get type() {\n return \"iana\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name),\n [year, month, day, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date),\n // work around https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /** @override **/\n get isValid() {\n return this.valid;\n }\n}\n", "import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /** @override **/\n get type() {\n return \"fixed\";\n }\n\n /** @override **/\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /** @override **/\n offsetName() {\n return this.name;\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /** @override **/\n get universal() {\n return true;\n }\n\n /** @override **/\n offset() {\n return this.fixed;\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n", "import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n", "/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"local\") return defaultZone;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else if ((offset = IANAZone.parseGMTOffset(input)) != null) {\n // handle Etc/GMT-4, which V8 chokes on\n return FixedOffsetZone.instance(offset);\n } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);\n else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && input.offset && typeof input.offset === \"number\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n", "import LocalZone from \"./zones/localZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nlet now = () => Date.now(),\n defaultZone = null, // not setting this directly to LocalZone.instance bc loading order issues\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n throwOnInvalid = false;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Get the default time zone to create DateTimes in.\n * @type {string}\n */\n static get defaultZoneName() {\n return Settings.defaultZone.name;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * @type {string}\n */\n static set defaultZoneName(z) {\n if (!z) {\n defaultZone = null;\n } else {\n defaultZone = normalizeZone(z);\n }\n }\n\n /**\n * Get the default time zone object to create DateTimes in. Does not affect existing instances.\n * @type {Zone}\n */\n static get defaultZone() {\n return defaultZone || LocalZone.instance;\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n }\n}\n", "import { hasFormatToParts, hasIntl, padStart, roundTo, hasRelative } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport Formatter from \"./formatter.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache[key];\n if (!inf) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache[key] = inf;\n }\n return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache[key];\n if (!inf) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache[key] = inf;\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else if (hasIntl()) {\n const computedSys = new Intl.DateTimeFormat().resolvedOptions().locale;\n // node sometimes defaults to \"und\". Override that because that is dumb\n sysLocaleCache = !computedSys || computedSys === \"und\" ? \"en-US\" : computedSys;\n return sysLocaleCache;\n } else {\n sysLocaleCache = \"en-US\";\n return sysLocaleCache;\n }\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n const smaller = localeStr.substring(0, uIndex);\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n } catch (e) {\n options = getCachedDTF(smaller).resolvedOptions();\n }\n\n const { numberingSystem, calendar } = options;\n // return the smaller one so that we can append the calendar and numbering overrides to it\n return [smaller, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (hasIntl()) {\n if (outputCalendar || numberingSystem) {\n localeStr += \"-u\";\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n } else {\n return [];\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2016, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, defaultOK, englishFn, intlFn) {\n const mode = loc.listingMode(defaultOK);\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n (hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\")\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n if (!forceSimple && hasIntl()) {\n const intlOpts = { useGrouping: false };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.hasIntl = hasIntl();\n\n let z;\n if (dt.zone.universal && this.hasIntl) {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n const isOffsetZoneSupported = IANAZone.isValidZone(offsetZ);\n if (dt.offset !== 0 && isOffsetZoneSupported) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata.\n // So we have to make do. Two cases:\n // 1. The format options tell us to show the zone. We can't do that, so the best\n // we can do is format the date in UTC.\n // 2. The format options don't tell us to show the zone. Then we can adjust them\n // the time and tell the formatter to show it to us in UTC, so that the time is right\n // and the bad zone doesn't show up.\n z = \"UTC\";\n if (opts.timeZoneName) {\n this.dt = dt;\n } else {\n this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);\n }\n }\n } else if (dt.zone.type === \"local\") {\n this.dt = dt;\n } else {\n this.dt = dt;\n z = dt.zone.name;\n }\n\n if (this.hasIntl) {\n const intlOpts = Object.assign({}, this.opts);\n if (z) {\n intlOpts.timeZone = z;\n }\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n }\n\n format() {\n if (this.hasIntl) {\n return this.dtf.format(this.dt.toJSDate());\n } else {\n const tokenFormat = English.formatString(this.opts),\n loc = Locale.create(\"en-US\");\n return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat);\n }\n }\n\n formatToParts() {\n if (this.hasIntl && hasFormatToParts()) {\n return this.dtf.formatToParts(this.dt.toJSDate());\n } else {\n // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings\n // and IMO it's too weird to have an uncanny valley like that\n return [];\n }\n }\n\n resolvedOptions() {\n if (this.hasIntl) {\n return this.dtf.resolvedOptions();\n } else {\n return {\n locale: \"en-US\",\n numberingSystem: \"latn\",\n outputCalendar: \"gregory\"\n };\n }\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = Object.assign({ style: \"long\" }, opts);\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\n/**\n * @private\n */\n\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n }\n\n static create(locale, numberingSystem, outputCalendar, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale,\n // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale()),\n numberingSystemR = numberingSystem || Settings.defaultNumberingSystem,\n outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar);\n }\n\n constructor(locale, numbering, outputCalendar, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode(defaultOK = true) {\n const intl = hasIntl(),\n hasFTP = intl && hasFormatToParts(),\n isActuallyEn = this.isEnglish(),\n hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n\n if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) {\n return \"error\";\n } else if (!hasFTP || (isActuallyEn && hasNoWeirdness)) {\n return \"en\";\n } else {\n return \"intl\";\n }\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone(Object.assign({}, alts, { defaultToEN: true }));\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone(Object.assign({}, alts, { defaultToEN: false }));\n }\n\n months(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.months, () => {\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n this.monthsCache[formatStr][length] = mapMonths(dt => this.extract(dt, intl, \"month\"));\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays(dt =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems(defaultOK = true) {\n return listStuff(\n this,\n undefined,\n defaultOK,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hour12: true };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n dt => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(dt =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find(m => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n (hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\"))\n );\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n}\n", "import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n ianaRegex,\n isUndefined\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return m =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [Object.assign(mergedVals, val), mergedZone || zone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/,\n isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/,\n isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${offsetRegex.source}?`),\n isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`),\n isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/,\n isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/,\n isoOrdinalRegex = /(\\d{4})-?(\\d{3})/,\n extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\"),\n extractISOOrdinalData = simpleParse(\"year\", \"ordinal\"),\n sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/, // dumbed-down version of the ISO one\n sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n ),\n sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1)\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3])\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration = /^-?P(?:(?:(-?\\d{1,9})Y)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,9})W)?(?:(-?\\d{1,9})D)?(?:T(?:(-?\\d{1,9})H)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,9}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [\n s,\n yearStr,\n monthStr,\n weekStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr,\n millisecondsStr\n ] = match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseInteger(yearStr)),\n months: maybeNegate(parseInteger(monthStr)),\n weeks: maybeNegate(parseInteger(weekStr)),\n days: maybeNegate(parseInteger(dayStr)),\n hours: maybeNegate(parseInteger(hourStr)),\n minutes: maybeNegate(parseInteger(minuteStr)),\n seconds: maybeNegate(parseInteger(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds)\n }\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr)\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset);\n\n/**\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOYmdTimeOffsetAndIANAZone = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n", "import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nconst lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 }\n },\n casualMatrix = Object.assign(\n {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000\n }\n },\n lowOrderMatrix\n ),\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = Object.assign(\n {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000\n }\n },\n lowOrderMatrix\n );\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy\n };\n return new Duration(conf);\n}\n\nfunction antiTrunc(n) {\n return n < 0 ? Math.floor(n) : Math.ceil(n);\n}\n\n// NB: mutates parameters\nfunction convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n const conv = matrix[toUnit][fromUnit],\n raw = fromMap[fromUnit] / conv,\n sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),\n // ok, so this is wild, but see the matrix in the tests\n added =\n !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);\n toMap[toUnit] += added;\n fromMap[fromUnit] -= added * conv;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n reverseUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n convert(matrix, vals, previous, vals, current);\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors.\n * * **Configuration** See {@link Duration.locale} and {@link Duration.numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = accurate ? accurateMatrix : casualMatrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject(Object.assign({ milliseconds: count }, opts));\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {string} [obj.locale='en-US'] - the locale to use\n * @param {string} obj.numberingSystem - the numbering system to use\n * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromObject(obj) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit, [\n \"locale\",\n \"numberingSystem\",\n \"conversionAccuracy\",\n \"zone\" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this\n ]),\n loc: Locale.fromObject(obj),\n conversionAccuracy: obj.conversionAccuracy\n });\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n const obj = Object.assign(parsed, opts);\n return Duration.fromObject(obj);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n const obj = Object.assign(parsed, opts);\n return Duration.fromObject(obj);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\"\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = Object.assign({}, opts, {\n floor: opts.round !== false && opts.floor !== false\n });\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = Object.assign({}, this.values);\n\n if (opts.includeConfig) {\n base.conversionAccuracy = this.conversionAccuracy;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = Object.assign(\n {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\"\n },\n opts\n );\n\n const value = this.shiftTo(\"hours\", \"minutes\", \"seconds\", \"milliseconds\");\n\n let fmt = opts.format === \"basic\" ? \"hhmm\" : \"hh:mm\";\n\n if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) {\n fmt += opts.format === \"basic\" ? \"ss\" : \":ss\";\n if (!opts.suppressMilliseconds || value.milliseconds !== 0) {\n fmt += \".SSS\";\n }\n }\n\n let str = value.toFormat(fmt);\n\n if (opts.includePrefix) {\n str = \"T\" + str;\n }\n\n return str;\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n return this.as(\"milliseconds\");\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = friendlyDuration(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = friendlyDuration(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === \"hour\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, []));\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem }),\n opts = { loc };\n\n if (conversionAccuracy) {\n opts.conversionAccuracy = conversionAccuracy;\n }\n\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map(u => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = own - i; // we'd like to absorb these fractions in another unit\n\n // plus anything further down the chain that should be rolled up in to this\n for (const down in vals) {\n if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n convert(this.matrix, vals, down, built, k);\n }\n }\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n return clone(this, { values: built }, true).normalize();\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDuration(durationish) {\n if (isNumber(durationish)) {\n return Duration.fromMillis(durationish);\n } else if (Duration.isDuration(durationish)) {\n return durationish;\n } else if (typeof durationish === \"object\") {\n return Duration.fromObject(durationish);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationish} of type ${typeof durationish}`\n );\n }\n}\n", "import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration, { friendlyDuration } from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}.\n * * **Accessors** Use {@link start} and {@link end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}.\n * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs}.\n * * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = friendlyDuration(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = friendlyDuration(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @return {number}\n */\n count(unit = \"milliseconds\") {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit),\n end = this.end.startOf(unit);\n return Math.floor(end.diff(start, unit).get(unit)) + 1;\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...[DateTime]} dateTimes - the unit of time to count.\n * @return {[Interval]}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter(d => this.contains(d))\n .sort(),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {[Interval]}\n */\n splitBy(duration) {\n const dur = friendlyDuration(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits(x => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {[Interval]}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Return whether this Interval engulfs the start and end of the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n static merge(intervals) {\n const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map(i => [{ time: i.s, type: \"s\" }, { time: i.e, type: \"e\" }]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {[Interval]}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map(i => this.intersection(i))\n .filter(i => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime.toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime.toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format string.\n * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details.\n * @param {Object} opts - options\n * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n", "import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasFormatToParts, hasIntl, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now()\n .setZone(zone)\n .set({ month: 12 });\n\n return !zone.universal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone.isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {[string]}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {[string]}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {[string]}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link weekdays}\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {[string]}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {[string]}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {[string]}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `zones`: whether this environment supports IANA timezones\n * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing\n * * `intl`: whether this environment supports general internationalization\n * * `relative`: whether this environment supports relative time formatting\n * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false }\n * @return {Object}\n */\n static features() {\n let intl = false,\n intlTokens = false,\n zones = false,\n relative = false;\n\n if (hasIntl()) {\n intl = true;\n intlTokens = hasFormatToParts();\n relative = hasRelative();\n\n try {\n zones =\n new Intl.DateTimeFormat(\"en\", { timeZone: \"America/New_York\" }).resolvedOptions()\n .timeZone === \"America/New_York\";\n } catch (e) {\n zones = false;\n }\n }\n\n return { intl, intlTokens, zones, relative };\n }\n}\n", "import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = dt =>\n dt\n .toUTC(0, { keepLocalTime: true })\n .startOf(\"day\")\n .valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n }\n ],\n [\"days\", dayDiff]\n ];\n\n const results = {};\n let lowestOrder, highWater;\n\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n let delta = differ(cursor, later);\n highWater = cursor.plus({ [unit]: delta });\n\n if (highWater > later) {\n cursor = cursor.plus({ [unit]: delta - 1 });\n delta -= 1;\n } else {\n cursor = highWater;\n }\n\n results[unit] = delta;\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function(earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n u => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(Object.assign(results, opts));\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n", "const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\"\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881]\n};\n\n// eslint-disable-next-line\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n", "import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = i => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `( |${NBSP})`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex(i => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n // eslint-disable-next-line no-useless-escape\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = t => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = t => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\", false), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\", false), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true, false), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true, false), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false, false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false, false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false, false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false, false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true, false), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true, false), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\"\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\"\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\"\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\"\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour: {\n numeric: \"h\",\n \"2-digit\": \"hh\"\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\"\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\"\n }\n};\n\nfunction tokenForPart(part, locale, formatOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n return {\n literal: true,\n val: value\n };\n }\n\n const style = formatOpts[type];\n\n let val = partTypeStyleToTokenVal[type];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map(u => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = token => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone;\n if (!isUndefined(matches.Z)) {\n zone = new FixedOffsetZone(matches.Z);\n } else if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n } else {\n zone = null;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n\n if (!formatOpts) {\n return token;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const parts = formatter.formatDateTimeParts(getDummyDateTime());\n\n const tokens = parts.map(p => tokenForPart(p, locale, formatOpts));\n\n if (tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nfunction expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map(t => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n units = tokens.map(t => unitForToken(t, locale)),\n disqualifyingUnit = units.find(t => t.invalidReason);\n\n if (disqualifyingUnit) {\n return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n } else {\n const [regexString, handlers] = buildRegex(units),\n regex = RegExp(regexString, \"i\"),\n [rawMatches, matches] = match(input, regex, handlers),\n [result, zone] = matches ? dateTimeFromMatches(matches) : [null, null];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return { input, tokens, regex, rawMatches, matches, result, zone };\n }\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, invalidReason];\n}\n", "import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nfunction dayOfWeek(year, month, day) {\n const js = new Date(Date.UTC(year, month - 1, day)).getUTCDay();\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex(i => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = dayOfWeek(year, month, day);\n\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear);\n } else if (weekNumber > weeksInWeekYear(year)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return Object.assign({ weekYear, weekNumber, weekday }, timeObject(gregObj));\n}\n\nexport function weekToGregorian(weekData) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n\n return Object.assign({ year, month, day }, timeObject(weekData));\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData,\n ordinal = computeOrdinal(year, month, day);\n\n return Object.assign({ year, ordinal }, timeObject(gregData));\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData,\n { month, day } = uncomputeOrdinal(year, ordinal);\n\n return Object.assign({ year, month, day }, timeObject(ordinalData));\n}\n\nexport function hasInvalidWeekData(obj) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.week);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n", "import Duration, { friendlyDuration } from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport { parseFromTokens, explainFromTokens } from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid\n };\n return new DateTime(Object.assign({}, current, alts, { old: current }));\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds()\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = Object.assign({}, inst.c, {\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7\n }),\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text) {\n const { setZone, zone } = opts;\n if (parsed && Object.keys(parsed).length !== 0) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(\n Object.assign(parsed, opts, {\n zone: interpretationZone,\n // setZone is a valid option in the calling methods, but not in fromObject\n setZone: undefined\n })\n );\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\n// technical time formats (e.g. the time part of ISO 8601), take some options\n// and this commonizes their handling\nfunction toTechTimeFormat(\n dt,\n {\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset,\n includePrefix = false,\n includeZone = false,\n spaceZone = false,\n format = \"extended\"\n }\n) {\n let fmt = format === \"basic\" ? \"HHmm\" : \"HH:mm\";\n\n if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) {\n fmt += format === \"basic\" ? \"ss\" : \":ss\";\n if (!suppressMilliseconds || dt.millisecond !== 0) {\n fmt += \".SSS\";\n }\n }\n\n if ((includeZone || includeOffset) && spaceZone) {\n fmt += \" \";\n }\n\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += format === \"basic\" ? \"ZZZ\" : \"ZZ\";\n }\n\n let str = toTechFormat(dt, fmt);\n\n if (includePrefix) {\n str = \"T\" + str;\n }\n\n return str;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\"\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\"\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, zone) {\n // assume we have the higher-order units\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const tsNow = Settings.now(),\n offsetProvis = zone.offset(tsNow),\n [ts, o] = objToTS(obj, offsetProvis, zone);\n\n return new DateTime({\n ts,\n zone,\n o\n });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = unit => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end\n .startOf(unit)\n .diff(start.startOf(unit), unit)\n .get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month},\n * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors.\n * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n const ot = zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12) //~> 2017-03-12T00:00:00\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return DateTime.now();\n } else {\n return quickDT(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n },\n Settings.defaultZone\n );\n }\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z\n * @return {DateTime}\n */\n static utc(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return new DateTime({\n ts: Settings.now(),\n zone: FixedOffsetZone.utcInstance\n });\n } else {\n return quickDT(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n },\n FixedOffsetZone.utcInstance\n );\n }\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options)\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @return {DateTime}\n */\n static fromObject(obj) {\n const zoneToUse = normalizeZone(obj.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const tsNow = Settings.now(),\n offsetProvis = zoneToUse.offset(tsNow),\n normalized = normalizeObject(obj, normalizeUnit, [\n \"zone\",\n \"locale\",\n \"outputCalendar\",\n \"numberingSystem\"\n ]),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n loc = Locale.fromObject(obj);\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n }),\n [vals, parsedZone, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is a DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.universal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1 }).offset || this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOpts(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link reconfigure} and {@link setZone}.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnit, []),\n settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized));\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized));\n } else {\n mixed = Object.assign(this.toObject(), normalized);\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = friendlyDuration(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = friendlyDuration(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit) {\n if (!this.isValid) return this;\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n o.weekday = 1;\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(opts = Formats.DATE_SHORT) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @return {string}\n */\n toISO(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toISODate(opts)}T${this.toISOTime(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @return {string}\n */\n toISODate({ format = \"extended\" } = {}) {\n let fmt = format === \"basic\" ? \"yyyyMMdd\" : \"yyyy-MM-dd\";\n if (this.year > 9999) {\n fmt = \"+\" + fmt;\n }\n\n return toTechFormat(this, fmt);\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n format = \"extended\"\n } = {}) {\n return toTechTimeFormat(this, {\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n includePrefix,\n format\n });\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n toSQLDate() {\n return toTechFormat(this, \"yyyy-MM-dd\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false } = {}) {\n return toTechTimeFormat(this, {\n includeOffset,\n includeZone,\n spaceZone: true\n });\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = Object.assign({}, this.c);\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\n this.invalid || otherDateTime.invalid,\n \"created by diffing an invalid DateTime\"\n );\n }\n\n const durOpts = Object.assign(\n { locale: this.locale, numberingSystem: this.numberingSystem },\n opts\n );\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const otherZoneDateTime = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return otherZoneDateTime.startOf(unit) <= inputMs && inputMs <= otherZoneDateTime.endOf(unit);\n }\n\n /**\n * Equality check\n * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({ zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(\n base,\n this.plus(padding),\n Object.assign(options, {\n numeric: \"always\",\n units,\n unit\n })\n );\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(\n options.base || DateTime.fromObject({ zone: this.zone }),\n this,\n Object.assign(options, {\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true\n })\n );\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, i => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, i => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n", "import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport LocalZone from \"./zones/localZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"1.28.1\";\n\nexport {\n VERSION,\n DateTime,\n Duration,\n Interval,\n Info,\n Zone,\n FixedOffsetZone,\n IANAZone,\n InvalidZone,\n LocalZone,\n Settings\n};\n", "/**\n * Bkper REST API Javascript client for Node.js and browsers.\n *\n * Learn more at https://bkper.com/docs\n *\n * @packageDocumentation\n */\nexport { Account } from './model/Account.js';\nexport { AccountsDataTableBuilder } from './builders/AccountsDataTableBuilder.js';\nexport { Agent } from './model/Agent.js';\nexport { Amount } from './model/Amount.js';\nexport { App } from './model/App.js';\nexport { Backlog } from './model/Backlog.js';\nexport { Balance } from './model/Balance.js';\nexport { BalancesDataTableBuilder } from './builders/BalancesDataTableBuilder.js';\nexport { BalancesReport } from './model/BalancesReport.js';\nexport { Billing } from './model/Billing.js';\nexport { Bkper } from './model/Bkper.js';\nexport { Book } from './model/Book.js';\nexport { BooksDataTableBuilder } from './builders/BooksDataTableBuilder.js';\nexport { Collaborator } from './model/Collaborator.js';\nexport { Collection } from './model/Collection.js';\nexport { Connection } from './model/Connection.js';\nexport { File } from './model/File.js';\nexport { Group } from './model/Group.js';\nexport { GroupsDataTableBuilder } from './builders/GroupsDataTableBuilder.js';\nexport { Integration } from './model/Integration.js';\nexport { Query } from './model/Query.js';\nexport { Template } from './model/Template.js';\nexport { Transaction } from './model/Transaction.js';\nexport { TransactionList } from './model/TransactionList.js';\nexport { TransactionsDataTableBuilder } from './builders/TransactionsDataTableBuilder.js';\nexport { Event } from './model/Event.js';\nexport { BotResponse } from './model/BotResponse.js';\nexport { EventList } from './model/EventList.js';\nexport { User } from './model/User.js';\nexport { Periodicity, DecimalSeparator, Permission, Visibility, AccountType, BalanceType, Period, Month, EventType, BotResponseType, TransactionStatus, } from './model/Enums.js';\nexport { BkperError } from './model/BkperError.js';\n//# sourceMappingURL=index.js.map", "/**\n * Standard error class for Bkper API errors.\n * Extends Error to enable instanceof checks and standard error handling.\n *\n * @public\n */\nexport class BkperError extends Error {\n constructor(code, message, reason) {\n super(message);\n this.name = 'BkperError';\n this.code = code;\n this.reason = reason;\n }\n}\n//# sourceMappingURL=BkperError.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nexport class HttpRequest {\n constructor(url) {\n this.params = [];\n this.headers = {};\n this.method = 'GET';\n this.payload = null;\n this.url = url;\n }\n setMethod(method) {\n this.method = method;\n return this;\n }\n setHeader(name, value) {\n this.headers[name] = value;\n return this;\n }\n addParam(name, value) {\n this.params.push({ name, value });\n return this;\n }\n setPayload(payload) {\n this.payload = payload;\n return this;\n }\n /**\n * Gets the result url, with query params appended.\n */\n getUrl() {\n let url = this.url;\n if (this.params != null) {\n let i = 0;\n if (url.indexOf('?') < 0) {\n url += '?';\n }\n else {\n i++;\n }\n for (const param of this.params) {\n if (i > 0) {\n url += \"&\";\n }\n var key = param.name;\n var value = param.value;\n if (value != null) {\n url += key + \"=\" + encodeURIComponent(value);\n i++;\n }\n }\n }\n return url;\n }\n execute() {\n return __awaiter(this, void 0, void 0, function* () {\n const url = this.getUrl();\n const fetchOptions = {\n method: this.method,\n headers: this.headers,\n };\n // Add body for non-GET requests\n if (this.payload && this.method !== 'GET') {\n if (typeof this.payload === 'string') {\n fetchOptions.body = this.payload;\n }\n else {\n fetchOptions.body = JSON.stringify(this.payload);\n // Ensure content-type is set for JSON payloads\n if (!this.headers['Content-Type'] && !this.headers['content-type']) {\n fetchOptions.headers = Object.assign(Object.assign({}, this.headers), { 'Content-Type': 'application/json' });\n }\n }\n }\n const response = yield fetch(url, fetchOptions);\n // Parse response body\n let data;\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n data = yield response.json();\n }\n else {\n data = yield response.text();\n }\n // Return axios-compatible response structure\n return {\n data: data,\n status: response.status,\n headers: response.headers\n };\n });\n }\n}\n//# sourceMappingURL=http-request.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { BkperError } from \"../model/BkperError.js\";\nimport { HttpRequest } from \"./http-request.js\";\n/**\n * The official Bkper API base URL.\n */\nexport const API_BASE_URL = \"https://api.bkper.app\";\n/**\n * Resolves the base URL based on config.\n */\nexport function resolveBaseUrl(config) {\n if (config.apiBaseUrl) {\n return config.apiBaseUrl;\n }\n return API_BASE_URL;\n}\nexport class HttpApiRequest extends HttpRequest {\n constructor(path, config) {\n const baseUrl = resolveBaseUrl(config);\n super(`${baseUrl}/${path}`);\n this.retry = 0;\n this.config = config;\n this.requestPath = path;\n }\n fetch() {\n const _super = Object.create(null, {\n execute: { get: () => super.execute }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.addCustomHeaders();\n yield this.addAgentIdHeader();\n this.setHeader(\"Authorization\", `Bearer ${yield this.getAccessToken()}`);\n yield this.addApiKeyHeader();\n try {\n let resp = yield _super.execute.call(this);\n if (resp.status >= 200 && resp.status < 300) {\n return resp;\n }\n else if (resp.status == 404) {\n const errorObj = {\n response: {\n status: resp.status,\n data: resp.data,\n },\n };\n throw this.handleError(errorObj);\n }\n else if (this.shouldRetry(resp.status) && this.retry < 3) {\n this.retry++;\n const effectiveConfig = this.config;\n if (effectiveConfig.requestRetryHandler) {\n yield effectiveConfig.requestRetryHandler(resp.status, resp.data, this.retry);\n }\n else {\n console.log(`${JSON.stringify(resp.data)} - Retrying ${this.retry}/3... `);\n }\n return yield this.fetch();\n }\n else {\n // Create an error object that matches axios error structure for compatibility\n const errorObj = {\n response: {\n status: resp.status,\n data: resp.data,\n },\n };\n throw this.handleError(errorObj);\n }\n }\n catch (error) {\n if (error instanceof BkperError) {\n throw error;\n }\n // If error already has response structure (from upstream), preserve it\n if (error.response) {\n throw error;\n }\n // Network error or fetch failure\n if (this.isNetworkError(error)) {\n // Network error - retry if within retry limit\n if (this.retry < 3) {\n this.retry++;\n const effectiveConfig = this.config;\n if (effectiveConfig.requestRetryHandler) {\n yield effectiveConfig.requestRetryHandler(520, error, this.retry);\n }\n else {\n console.log(`${this.formatNetworkErrorMessage(error)} - Retrying ${this.retry}/3... `);\n }\n return yield this.fetch();\n }\n }\n throw this.handleError(error);\n }\n });\n }\n shouldRetry(status) {\n return status == 408 || status == 429 || (status != null && status >= 500);\n }\n isNetworkError(error) {\n return error instanceof TypeError && error.message.toLowerCase().includes(\"fetch\");\n }\n formatNetworkErrorMessage(error) {\n var _a, _b, _c, _d, _e;\n const details = [];\n if ((_a = error.cause) === null || _a === void 0 ? void 0 : _a.code) {\n details.push(error.cause.code);\n }\n if ((_b = error.cause) === null || _b === void 0 ? void 0 : _b.hostname) {\n details.push(error.cause.hostname);\n }\n else if ((_c = error.cause) === null || _c === void 0 ? void 0 : _c.address) {\n details.push(error.cause.address);\n }\n if (((_d = error.cause) === null || _d === void 0 ? void 0 : _d.port) !== undefined) {\n details.push(`port=${error.cause.port}`);\n }\n if ((_e = error.cause) === null || _e === void 0 ? void 0 : _e.syscall) {\n details.push(`syscall=${error.cause.syscall}`);\n }\n if (details.length > 0) {\n return `Network error calling ${this.requestPath}: ${error.message} (${details.join(\", \")})`;\n }\n return `Network error calling ${this.requestPath}: ${error.message}`;\n }\n handleError(err) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n const effectiveConfig = this.config;\n const customError = effectiveConfig.requestErrorHandler\n ? effectiveConfig.requestErrorHandler(err)\n : undefined;\n if (customError) {\n return customError;\n }\n else if (err instanceof BkperError) {\n return err;\n }\n else if (this.isNetworkError(err)) {\n return new BkperError(((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) || ((_b = err.response) === null || _b === void 0 ? void 0 : _b.code) || err.status || err.code || 0, this.formatNetworkErrorMessage(err), undefined);\n }\n else {\n // Read internal HttpError from response\n let error = ((_d = (_c = err.response) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.error) || ((_e = err.data) === null || _e === void 0 ? void 0 : _e.error) || err.error;\n if (error) {\n // Transform to BkperError\n return new BkperError(error.code, error.message, (_g = (_f = error.errors) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.reason);\n }\n else {\n // Fallback for network errors, etc.\n return new BkperError(((_h = err.response) === null || _h === void 0 ? void 0 : _h.status) || ((_j = err.response) === null || _j === void 0 ? void 0 : _j.code) || err.status || err.code || 0, err.message || String(err), undefined);\n }\n }\n }\n addCustomHeaders() {\n return __awaiter(this, void 0, void 0, function* () {\n const effectiveConfig = this.config;\n if (effectiveConfig.requestHeadersProvider) {\n const headers = yield effectiveConfig.requestHeadersProvider();\n Object.entries(headers).forEach(([key, value]) => this.setHeader(key, value));\n }\n });\n }\n addAgentIdHeader() {\n return __awaiter(this, void 0, void 0, function* () {\n const effectiveConfig = this.config;\n if (effectiveConfig.agentIdProvider) {\n const agentId = yield effectiveConfig.agentIdProvider();\n if (agentId) {\n this.setHeader(\"bkper-agent-id\", agentId);\n }\n }\n });\n }\n addApiKeyHeader() {\n return __awaiter(this, void 0, void 0, function* () {\n const effectiveConfig = this.config;\n if (effectiveConfig.apiKeyProvider) {\n const apiKey = yield effectiveConfig.apiKeyProvider();\n if (apiKey) {\n this.setHeader(\"bkper-api-key\", apiKey);\n }\n }\n });\n }\n getAccessToken() {\n return __awaiter(this, void 0, void 0, function* () {\n let token = undefined;\n const effectiveConfig = this.config;\n if (effectiveConfig.oauthTokenProvider) {\n token = yield effectiveConfig.oauthTokenProvider();\n }\n else {\n console.warn(`Token provider NOT configured!`);\n }\n if (token) {\n token = token.replace(\"Bearer \", \"\");\n token = token.replace(\"bearer \", \"\");\n }\n return token;\n });\n }\n}\nexport class HttpBooksApiV5Request extends HttpApiRequest {\n constructor(service, config) {\n super(`v5/books/${service}`, config);\n }\n}\nexport class HttpApiV5Request extends HttpApiRequest {\n constructor(service, config) {\n super(`v5/${service}`, config);\n }\n}\n//# sourceMappingURL=http-api-request.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from './http-api-request.js';\nexport function createAccount(bookId, account, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/accounts`, config).setMethod('POST').setPayload(account).fetch();\n return response.data;\n });\n}\nexport function createAccounts(bookId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/accounts/batch`, config).setMethod('POST').setPayload(payload).fetch();\n return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function updateAccount(bookId, account, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var payload = account;\n var response = yield new HttpBooksApiV5Request(`${bookId}/accounts`, config).setMethod('PUT').setPayload(payload).fetch();\n return response.data;\n });\n}\nexport function updateAccounts(bookId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/accounts/batch`, config).setMethod('PUT').setPayload(payload).fetch();\n return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function deleteAccount(bookId, account, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/accounts/${account.id}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\nexport function deleteAccounts(bookId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/accounts/delete/batch`, config).setMethod('POST').setPayload(payload).fetch();\n return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function getAccount(bookId, idOrName, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/accounts/${encodeURIComponent(idOrName)}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function getAccounts(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpBooksApiV5Request(`${bookId}/accounts`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\n//# sourceMappingURL=account-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function createGroup(bookId, group, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups`, config).setMethod('POST').setPayload(group).fetch();\n return response.data;\n });\n}\nexport function createGroups(bookId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/groups/batch`, config).setMethod('POST').setPayload(payload).fetch();\n return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function updateGroup(bookId, group, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups`, config).setMethod('PUT').setPayload(group).fetch();\n return response.data;\n });\n}\nexport function deleteGroup(bookId, group, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups/${group.id}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\nexport function getGroupsByAccountId(bookId, accountId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n var response = yield new HttpBooksApiV5Request(`${bookId}/accounts/${accountId}/groups`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function getGroups(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups`, config).setMethod('GET').fetch();\n var groupsPlain = response.data;\n if (!(groupsPlain === null || groupsPlain === void 0 ? void 0 : groupsPlain.items)) {\n return [];\n }\n return groupsPlain.items;\n });\n}\nexport function getGroup(bookId, idOrName, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups/${encodeURIComponent(idOrName)}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function getAccounts(bookId, idOrName, config) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!idOrName) {\n return [];\n }\n var response = yield new HttpBooksApiV5Request(`${bookId}/groups/${encodeURIComponent(idOrName)}/accounts`, config).setMethod('GET').fetch();\n var accountsPlain = response.data;\n if (!(accountsPlain === null || accountsPlain === void 0 ? void 0 : accountsPlain.items)) {\n return [];\n }\n return accountsPlain.items;\n });\n}\n//# sourceMappingURL=group-service.js.map", "import { DateTime } from 'luxon';\nimport { Amount } from './model/Amount.js';\nimport { DecimalSeparator, Periodicity } from './model/Enums.js';\nexport const NODE_ENV_DEV = 'development';\nexport function sleep(ms) {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\nexport function base64Decode(data) {\n return atob(data);\n}\nexport function repeatString(text, times) {\n if (times <= 0) {\n return '';\n }\n if (times === 1) {\n return text;\n }\n return text + repeatString(text, times - 1);\n}\nexport function extractTagsFromText(text) {\n if (!text || typeof text !== 'string') {\n return [];\n }\n const tagRegex = /#([a-zA-Z0-9_]+)/g;\n const tagsSet = new Set();\n let match;\n while ((match = tagRegex.exec(text)) !== null) {\n if (match[1]) {\n tagsSet.add(match[1]);\n }\n }\n return Array.from(tagsSet);\n}\n//SAME AS bkper-app\nvar diacriticsMap_ = null;\nexport function round(number, fractionDigits) {\n if (number == null) {\n number = new Amount('0');\n }\n if (fractionDigits) {\n return new Amount(number).round(fractionDigits);\n }\n else {\n return new Amount(number).round(2);\n }\n}\nexport function formatValue(value, decimalSeparator, fractionDigits) {\n if (value == null) {\n return '';\n }\n if (typeof value == 'string') {\n if (value.trim() == '') {\n return '';\n }\n value = new Amount(value);\n }\n if (value == null) {\n return '';\n }\n if (fractionDigits == null) {\n fractionDigits = 2;\n }\n var formattedValue = value.toFixed(fractionDigits) + '';\n if (decimalSeparator == DecimalSeparator.DOT) {\n return formattedValue.replace(/\\,/g, '.');\n }\n else {\n return formattedValue.replace(/\\./g, ',');\n }\n}\nexport function parseValue(value, decimalSeparator) {\n if (value == null) {\n return undefined;\n }\n if (!isNaN(+value) && isFinite(+value)) {\n return new Amount(value);\n }\n if (decimalSeparator == DecimalSeparator.DOT) {\n value = value.replace(/\\,/g, '');\n }\n else {\n value = value.replace(/\\./g, '').replace(/\\,/g, '.');\n }\n try {\n return new Amount(value);\n }\n catch (err) {\n return undefined;\n }\n}\nexport function convertValueToDate(dateValue, offsetInMinutes) {\n if (!dateValue) {\n return new Date();\n }\n var year = dateValue / 10000;\n var month = (dateValue / 100) % 100;\n var day = dateValue % 100;\n var date = createDate(year, month, day, offsetInMinutes);\n return date;\n}\nexport function isString(obj) {\n if (obj == null) {\n return false;\n }\n if (typeof obj === 'string' || obj instanceof String) {\n return true;\n }\n else {\n return false;\n }\n}\nexport function createDate(year, month, day, offsetInMinutes) {\n var date = new Date(year, month - 1, day);\n if (!offsetInMinutes) {\n offsetInMinutes = 0;\n }\n date.setTime(date.getTime() + offsetInMinutes * 60 * 1000);\n return date;\n}\nexport function formatDate(date, pattern, timeZone) {\n if (date == null || !(Object.prototype.toString.call(date) === '[object Date]')) {\n return '';\n }\n if (!timeZone || timeZone == '') {\n timeZone = 'UTC';\n }\n if (!pattern) {\n return formatDateISO(date, timeZone);\n }\n return DateTime.fromJSDate(date, { zone: timeZone }).toFormat(pattern);\n}\nexport function formatDateISO(date, timeZone) {\n if (date == null || !(Object.prototype.toString.call(date) === '[object Date]')) {\n return '';\n }\n if (!timeZone || timeZone == '') {\n timeZone = 'UTC';\n }\n return DateTime.fromJSDate(date, { zone: timeZone }).toISODate();\n}\nexport function getIsoDateValue(date) {\n return +date.replace(/-/g, '');\n}\nexport function parseDate(date, pattern, timeZone) {\n if (!pattern) {\n pattern = 'yyyy-MM-dd';\n }\n let dateObject = DateTime.fromFormat(date, pattern, { zone: timeZone }).toJSDate();\n if (dateObject instanceof Date && !isNaN(dateObject.getTime())) {\n return dateObject;\n }\n else {\n return DateTime.fromFormat(date, 'yyyy-MM-dd', { zone: timeZone }).toJSDate();\n }\n}\nexport function getDateFormatterPattern(datePattern, periodicity) {\n var pattern = datePattern;\n if (periodicity == Periodicity.MONTHLY) {\n pattern = 'MM/yyyy';\n }\n if (periodicity == Periodicity.YEARLY) {\n pattern = 'yyyy';\n }\n return pattern;\n}\nexport function getRepresentativeValue(value, credit) {\n if (value == null) {\n return new Amount(0);\n }\n if (credit != null && !credit) {\n return value.times(-1);\n }\n return value;\n}\n// export function wrapObjects<E extends Object>(wrapper: E, wrappeds: Array<Object>): Array<E> {\n// var newObjects = [];\n// if (wrappeds != null) {\n// for (var i = 0; i < wrappeds.length; i++) {\n// var newObject = wrapObject(wrapper, wrappeds[i]);\n// newObjects.push(newObject);\n// }\n// }\n// return newObjects;\n// }\n// export function wrapObject<E extends Object>(wrapper: E, wrapped: Object): E {\n// if (wrapped == null) {\n// wrapped = new Object();\n// }\n// var w = Object.create(wrapper);\n// w.wrapped = wrapped;\n// return w;\n// }\nexport function buildURLParams(params) {\n var urlSegment = '';\n var i = 0;\n for (var prop in params) {\n if (params.hasOwnProperty(prop)) {\n if (i > 0) {\n urlSegment += '&';\n }\n var name = prop;\n var value = params[prop];\n if (value != null) {\n urlSegment += name + '=' + encodeURIComponent(value);\n i++;\n }\n }\n }\n return urlSegment;\n}\nexport function convertInMatrix(array) {\n var maxLength = 0;\n for (var i = 0; i < array.length; i++) {\n if (array[i].length > maxLength) {\n maxLength = array[i].length;\n }\n }\n for (var i = 0; i < array.length; i++) {\n while (array[i].length < maxLength) {\n array[i].push(null);\n }\n }\n return array;\n}\nexport function normalizeName(name) {\n return normalizeText(name, '_');\n}\nexport function normalizeText(text, spaceReplacement) {\n if (!text || typeof text != 'string') {\n return '';\n }\n if (spaceReplacement) {\n text = text.replace(new RegExp(spaceReplacement, 'g'), ' ');\n }\n text = text.replace(new RegExp('-', 'g'), ' ');\n text = text.replace(/ +(?= )/g, '');\n text = removeDiacritics(text.trim().toLowerCase());\n if (spaceReplacement) {\n text = text.replace(new RegExp(' ', 'g'), spaceReplacement);\n }\n return text;\n}\nfunction removeDiacritics(str) {\n var letters = str.split('');\n var newStr = '';\n for (var i = 0; i < letters.length; i++) {\n newStr += letters[i] in getDiacriticsMap_() ? getDiacriticsMap_()[letters[i]] : letters[i];\n }\n return newStr;\n}\nfunction getDiacriticsMap_() {\n if (diacriticsMap_ == null) {\n diacriticsMap_ = {};\n for (var i = 0; i < defaultDiacriticsRemovalap_.length; i++) {\n var letters = defaultDiacriticsRemovalap_[i].letters.split('');\n for (var j = 0; j < letters.length; j++) {\n diacriticsMap_[letters[j]] = defaultDiacriticsRemovalap_[i].base;\n }\n }\n }\n return diacriticsMap_;\n}\nvar defaultDiacriticsRemovalap_ = [\n {\n base: 'A',\n letters: '\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F',\n },\n { base: 'AA', letters: '\\uA732' },\n { base: 'AE', letters: '\\u00C6\\u01FC\\u01E2' },\n { base: 'AO', letters: '\\uA734' },\n { base: 'AU', letters: '\\uA736' },\n { base: 'AV', letters: '\\uA738\\uA73A' },\n { base: 'AY', letters: '\\uA73C' },\n { base: 'B', letters: '\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181' },\n {\n base: 'C',\n letters: '\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E',\n },\n {\n base: 'D',\n letters: '\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779',\n },\n { base: 'DZ', letters: '\\u01F1\\u01C4' },\n { base: 'Dz', letters: '\\u01F2\\u01C5' },\n {\n base: 'E',\n letters: '\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E',\n },\n { base: 'F', letters: '\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B' },\n {\n base: 'G',\n letters: '\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E',\n },\n {\n base: 'H',\n letters: '\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D',\n },\n {\n base: 'I',\n letters: '\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197',\n },\n { base: 'J', letters: '\\u004A\\u24BF\\uFF2A\\u0134\\u0248' },\n {\n base: 'K',\n letters: '\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2',\n },\n {\n base: 'L',\n letters: '\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780',\n },\n { base: 'LJ', letters: '\\u01C7' },\n { base: 'Lj', letters: '\\u01C8' },\n { base: 'M', letters: '\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C' },\n {\n base: 'N',\n letters: '\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4',\n },\n { base: 'NJ', letters: '\\u01CA' },\n { base: 'Nj', letters: '\\u01CB' },\n {\n base: 'O',\n letters: '\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C',\n },\n { base: 'OI', letters: '\\u01A2' },\n { base: 'OO', letters: '\\uA74E' },\n { base: 'OU', letters: '\\u0222' },\n { base: 'P', letters: '\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754' },\n { base: 'Q', letters: '\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A' },\n {\n base: 'R',\n letters: '\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782',\n },\n {\n base: 'S',\n letters: '\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784',\n },\n {\n base: 'T',\n letters: '\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786',\n },\n { base: 'TZ', letters: '\\uA728' },\n {\n base: 'U',\n letters: '\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244',\n },\n { base: 'V', letters: '\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245' },\n { base: 'VY', letters: '\\uA760' },\n { base: 'W', letters: '\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72' },\n { base: 'X', letters: '\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C' },\n {\n base: 'Y',\n letters: '\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE',\n },\n {\n base: 'Z',\n letters: '\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762',\n },\n {\n base: 'a',\n letters: '\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250',\n },\n { base: 'aa', letters: '\\uA733' },\n { base: 'ae', letters: '\\u00E6\\u01FD\\u01E3' },\n { base: 'ao', letters: '\\uA735' },\n { base: 'au', letters: '\\uA737' },\n { base: 'av', letters: '\\uA739\\uA73B' },\n { base: 'ay', letters: '\\uA73D' },\n { base: 'b', letters: '\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253' },\n {\n base: 'c',\n letters: '\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184',\n },\n {\n base: 'd',\n letters: '\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A',\n },\n { base: 'dz', letters: '\\u01F3\\u01C6' },\n {\n base: 'e',\n letters: '\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD',\n },\n { base: 'f', letters: '\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C' },\n {\n base: 'g',\n letters: '\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F',\n },\n {\n base: 'h',\n letters: '\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265',\n },\n { base: 'hv', letters: '\\u0195' },\n {\n base: 'i',\n letters: '\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131',\n },\n { base: 'j', letters: '\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249' },\n {\n base: 'k',\n letters: '\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3',\n },\n {\n base: 'l',\n letters: '\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747',\n },\n { base: 'lj', letters: '\\u01C9' },\n { base: 'm', letters: '\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F' },\n {\n base: 'n',\n letters: '\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5',\n },\n { base: 'nj', letters: '\\u01CC' },\n {\n base: 'o',\n letters: '\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275',\n },\n { base: 'oi', letters: '\\u01A3' },\n { base: 'ou', letters: '\\u0223' },\n { base: 'oo', letters: '\\uA74F' },\n { base: 'p', letters: '\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755' },\n { base: 'q', letters: '\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759' },\n {\n base: 'r',\n letters: '\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783',\n },\n {\n base: 's',\n letters: '\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B',\n },\n {\n base: 't',\n letters: '\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787',\n },\n { base: 'tz', letters: '\\uA729' },\n {\n base: 'u',\n letters: '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289',\n },\n { base: 'v', letters: '\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C' },\n { base: 'vy', letters: '\\uA761' },\n { base: 'w', letters: '\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73' },\n { base: 'x', letters: '\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D' },\n {\n base: 'y',\n letters: '\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF',\n },\n {\n base: 'z',\n letters: '\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763',\n },\n];\n//# sourceMappingURL=utils.js.map", "/*\r\n * big.js v6.2.2\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2024 Michael Mclaughlin\r\n * https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\nvar DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n /*\r\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n * primitive number without a loss of precision.\r\n */\r\n STRICT = false, // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n if (typeof n !== 'string') {\r\n if (Big.strict === true && typeof n !== 'bigint') {\r\n throw TypeError(INVALID + 'value');\r\n }\r\n\r\n // Minus zero?\r\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n }\r\n\r\n parse(x, n);\r\n }\r\n\r\n // Retain a reference to this Big constructor.\r\n // Shadow Big.prototype.constructor which points to Object.\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.strict = STRICT;\r\n Big.roundDown = 0;\r\n Big.roundHalfUp = 1;\r\n Big.roundHalfEven = 2;\r\n Big.roundUp = 3;\r\n\r\n return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n var e, i, nl;\r\n\r\n if (!NUMERIC.test(n)) {\r\n throw Error(INVALID + 'number');\r\n }\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n var xc = x.c;\r\n\r\n if (rm === UNDEFINED) rm = x.constructor.RM;\r\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n if (sd < 1) {\r\n more =\r\n rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n rm === 1 && xc[0] >= 5 ||\r\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n );\r\n\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = x.e - sd + 1;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else if (sd < xc.length) {\r\n\r\n // xc[sd] is the digit after the digit that may be rounded up.\r\n more =\r\n rm === 1 && xc[sd] >= 5 ||\r\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n rm === 3 && (more || !!xc[0]);\r\n\r\n // Remove any digits after the required precision.\r\n xc.length = sd;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[--sd] > 9;) {\r\n xc[sd] = 0;\r\n if (sd === 0) {\r\n ++x.e;\r\n xc.unshift(1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (sd = xc.length; !xc[--sd];) xc.pop();\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n var e = x.e,\r\n s = x.c.join(''),\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (doExponential) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) {\r\n for (e -= n; e--;) s += '0';\r\n } else if (e < n) {\r\n s = s.slice(0, e) + '.' + s.slice(e);\r\n }\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n\r\n // Divisor is zero?\r\n if (!b[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) {\r\n y.s = k;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n p = dp + (q.e = x.e - y.e) + 1; // precision of the result\r\n\r\n q.s = k;\r\n k = p < 0 ? 0 : p;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n p--;\r\n }\r\n\r\n // Round?\r\n if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (yc[0]) {\r\n y.s = -b;\r\n } else if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = 1;\r\n }\r\n return y;\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n var e, k, t,\r\n x = this,\r\n Big = x.constructor;\r\n\r\n y = new Big(y);\r\n\r\n // Signs differ?\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (!yc[0]) {\r\n if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = x.s;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (e = xe - ye) {\r\n if (e > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n e = -e;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; e--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n e = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (k) {\r\n xc.unshift(k);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor('1'),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n throw Error(INVALID + 'exponent');\r\n }\r\n\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big('0.5');\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) {\r\n throw Error(NAME + 'No square root');\r\n }\r\n\r\n // Estimate.\r\n s = Math.sqrt(+stringify(x, true, true));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s + '');\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) {\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = b;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), ++dp, rm);\r\n for (; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n // x.e may have changed if the value is rounded up.\r\n for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON = P.toString = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitve number.\r\n */\r\nP.toNumber = function () {\r\n var n = +stringify(this, true, true);\r\n if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n throw Error(NAME + 'Imprecise conversion');\r\n }\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var x = this,\r\n Big = x.constructor,\r\n n = x.c[0];\r\n\r\n if (sd !== UNDEFINED) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n x = round(new Big(x), sd, rm);\r\n for (; x.c.length < sd;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n if (Big.strict === true) {\r\n throw Error(NAME + 'valueOf disallowed');\r\n }\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n", "import Big from \"big.js\";\n/**\n * This class defines an Amount for arbitrary-precision decimal arithmetic.\n *\n * It inherits methods from [big.js](http://mikemcl.github.io/big.js/) library\n *\n * @public\n */\nexport class Amount {\n /**\n * The Amount constructor.\n *\n * @param n - The number, string, or Amount to initialize with\n */\n constructor(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n this.big = new Big(n);\n }\n else if (n instanceof Amount) {\n this.big = new Big(n.big);\n }\n else if (n.toString) {\n this.big = new Big(n.toString());\n }\n else {\n this.big = new Big(+n);\n }\n }\n /**\n * Returns an absolute Amount.\n *\n * @returns The absolute value as a new Amount\n */\n abs() {\n let big = this.big.abs();\n return this.wrap(big);\n }\n /**\n * Compares this Amount with another value.\n *\n * @param n - The value to compare with\n *\n * @returns -1 if less than, 0 if equal, 1 if greater than\n */\n cmp(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.cmp(n);\n }\n else if (n instanceof Amount) {\n return this.big.cmp(n.big);\n }\n else if (n.toString) {\n return this.big.cmp(n.toString());\n }\n else {\n return this.big.cmp(+n);\n }\n }\n /**\n * Divides this Amount by another value.\n *\n * @param n - The divisor value\n *\n * @returns The division result as a new Amount\n */\n div(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.div(n);\n }\n else if (n instanceof Amount) {\n big = this.big.div(n.big);\n }\n else if (n.toString) {\n big = this.big.div(n.toString());\n }\n else {\n big = this.big.div(+n);\n }\n return this.wrap(big);\n }\n /**\n * Checks if this Amount equals another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if equal, false otherwise\n */\n eq(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.eq(n);\n }\n else if (n instanceof Amount) {\n return this.big.eq(n.big);\n }\n else if (n.toString) {\n return this.big.eq(n.toString());\n }\n else {\n return this.big.eq(+n);\n }\n }\n /**\n * Checks if this Amount is greater than another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if greater than, false otherwise\n */\n gt(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.gt(n);\n }\n else if (n instanceof Amount) {\n return this.big.gt(n.big);\n }\n else if (n.toString) {\n return this.big.gt(n.toString());\n }\n else {\n return this.big.gt(+n);\n }\n }\n /**\n * Checks if this Amount is greater than or equal to another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if greater than or equal, false otherwise\n */\n gte(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.gte(n);\n }\n else if (n instanceof Amount) {\n return this.big.gte(n.big);\n }\n else if (n.toString) {\n return this.big.gte(n.toString());\n }\n else {\n return this.big.gte(+n);\n }\n }\n /**\n * Checks if this Amount is less than another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if less than, false otherwise\n */\n lt(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.lt(n);\n }\n else if (n instanceof Amount) {\n return this.big.lt(n.big);\n }\n else if (n.toString) {\n return this.big.lt(n.toString());\n }\n else {\n return this.big.lt(+n);\n }\n }\n /**\n * Checks if this Amount is less than or equal to another value.\n *\n * @param n - The value to compare with\n *\n * @returns True if less than or equal, false otherwise\n */\n lte(n) {\n this.checkNumberNotNull(n);\n if (typeof n == \"string\") {\n return this.big.lte(n);\n }\n else if (n instanceof Amount) {\n return this.big.lte(n.big);\n }\n else if (n.toString) {\n return this.big.lte(n.toString());\n }\n else {\n return this.big.lte(+n);\n }\n }\n /**\n * Adds another value to this Amount.\n *\n * @param n - The value to add\n *\n * @returns The sum as a new Amount\n */\n plus(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.plus(n);\n }\n else if (n instanceof Amount) {\n big = this.big.plus(n.big);\n }\n else if (n.toString) {\n big = this.big.plus(n.toString());\n }\n else {\n big = this.big.plus(+n);\n }\n return this.wrap(big);\n }\n /**\n * Subtracts another value from this Amount.\n *\n * @param n - The value to subtract\n *\n * @returns The difference as a new Amount\n */\n minus(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.minus(n);\n }\n else if (n instanceof Amount) {\n big = this.big.minus(n.big);\n }\n else if (n.toString) {\n big = this.big.minus(n.toString());\n }\n else {\n big = this.big.minus(+n);\n }\n return this.wrap(big);\n }\n /**\n * Calculates the modulo (remainder) of dividing this Amount by another value.\n *\n * Similar to % operator\n *\n * @param n - The divisor value\n *\n * @returns The remainder as a new Amount\n */\n mod(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.mod(n);\n }\n else if (n instanceof Amount) {\n big = this.big.mod(n.big);\n }\n else if (n.toString) {\n big = this.big.mod(n.toString());\n }\n else {\n big = this.big.mod(+n);\n }\n return this.wrap(big);\n }\n /**\n * Rounds this Amount to a maximum of dp decimal places.\n *\n * @param dp - The number of decimal places (optional)\n *\n * @returns The rounded value as a new Amount\n */\n round(dp) {\n let big = this.big.round(dp);\n return this.wrap(big);\n }\n /**\n * Multiplies this Amount by another value.\n *\n * @param n - The value to multiply by\n *\n * @returns The product as a new Amount\n */\n times(n) {\n this.checkNumberNotNull(n);\n let big;\n if (typeof n == \"string\") {\n big = this.big.times(n);\n }\n else if (n instanceof Amount) {\n big = this.big.times(n.big);\n }\n else if (n.toString) {\n big = this.big.times(n.toString());\n }\n else {\n big = this.big.times(+n);\n }\n return this.wrap(big);\n }\n /**\n * Returns a string representing the value of this Amount in normal notation to a fixed number of decimal places.\n *\n * @param dp - The number of decimal places (optional)\n *\n * @returns The formatted string representation\n */\n toFixed(dp) {\n return this.big.toFixed(dp);\n }\n /**\n * Returns a string representing the value of this Amount.\n *\n * @returns The string representation of this Amount\n */\n toString() {\n return this.big.toString();\n }\n /**\n * Returns a primitive number representing the value of this Amount.\n *\n * @returns The numeric value of this Amount\n */\n toNumber() {\n return this.big.toNumber();\n }\n /** @internal */\n checkNumberNotNull(amount) {\n if (amount == null) {\n throw new Error(`Invalid number: null`);\n }\n }\n /** @internal */\n static create() {\n return Object.create(this.prototype);\n }\n /** @internal */\n wrap(big) {\n let amount = Amount.create();\n amount.big = big;\n return amount;\n }\n}\n//# sourceMappingURL=Amount.js.map", "/**\n * The Periodicity of the query. It may depend on the level of granularity you write the range params.\n *\n * @public\n */\nexport var Periodicity;\n(function (Periodicity) {\n /**\n * Example: after:25/01/1983, before:04/03/2013, after:$d-30, before:$d, after:$d-15/$m\n */\n Periodicity[\"DAILY\"] = \"DAILY\";\n /**\n * Example: after:jan/2013, before:mar/2013, after:$m-1, before:$m\n */\n Periodicity[\"MONTHLY\"] = \"MONTHLY\";\n /**\n * Example: on:2013, after:2013, $y\n */\n Periodicity[\"YEARLY\"] = \"YEARLY\";\n})(Periodicity || (Periodicity = {}));\n/**\n * Decimal separator of numbers on book\n *\n * @public\n */\nexport var DecimalSeparator;\n(function (DecimalSeparator) {\n /**\n * ,\n */\n DecimalSeparator[\"COMMA\"] = \"COMMA\";\n /**\n * .\n */\n DecimalSeparator[\"DOT\"] = \"DOT\";\n})(DecimalSeparator || (DecimalSeparator = {}));\n/**\n * Enum representing permissions of user in the Book\n *\n * @public\n */\nexport var Permission;\n(function (Permission) {\n /**\n * No permission\n */\n Permission[\"NONE\"] = \"NONE\";\n /**\n * View transactions, accounts and balances.\n */\n Permission[\"VIEWER\"] = \"VIEWER\";\n /**\n * Record and delete drafts only. Useful to collect data only\n */\n Permission[\"RECORDER\"] = \"RECORDER\";\n /**\n * View transactions, accounts, record and delete drafts\n */\n Permission[\"POSTER\"] = \"POSTER\";\n /**\n * Manage accounts, transactions, book configuration and sharing\n */\n Permission[\"EDITOR\"] = \"EDITOR\";\n /**\n * Manage everything, including book visibility and deletion. Only one owner per book.\n */\n Permission[\"OWNER\"] = \"OWNER\";\n})(Permission || (Permission = {}));\n/**\n * Enum representing the visibility of a Book\n *\n * @public\n */\nexport var Visibility;\n(function (Visibility) {\n /**\n * The book can be accessed by anyone with the link\n */\n Visibility[\"PUBLIC\"] = \"PUBLIC\";\n /**\n * The book can be accessed by the owner and collaborators\n */\n Visibility[\"PRIVATE\"] = \"PRIVATE\";\n})(Visibility || (Visibility = {}));\n/**\n * Enum that represents account types.\n *\n * @public\n */\nexport var AccountType;\n(function (AccountType) {\n /**\n * Asset account type\n */\n AccountType[\"ASSET\"] = \"ASSET\";\n /**\n * Liability account type\n */\n AccountType[\"LIABILITY\"] = \"LIABILITY\";\n /**\n * Incoming account type\n */\n AccountType[\"INCOMING\"] = \"INCOMING\";\n /**\n * Outgoing account type\n */\n AccountType[\"OUTGOING\"] = \"OUTGOING\";\n})(AccountType || (AccountType = {}));\n/**\n * Enum that represents balance types.\n *\n * @public\n */\nexport var BalanceType;\n(function (BalanceType) {\n /**\n * Total balance\n */\n BalanceType[\"TOTAL\"] = \"TOTAL\";\n /**\n * Period balance\n */\n BalanceType[\"PERIOD\"] = \"PERIOD\";\n /**\n * Cumulative balance\n */\n BalanceType[\"CUMULATIVE\"] = \"CUMULATIVE\";\n})(BalanceType || (BalanceType = {}));\n/**\n * Enum that represents a period slice.\n *\n * @public\n */\nexport var Period;\n(function (Period) {\n /**\n * Monthly period\n */\n Period[\"MONTH\"] = \"MONTH\";\n /**\n * Quarterly period\n */\n Period[\"QUARTER\"] = \"QUARTER\";\n /**\n * Yearly period\n */\n Period[\"YEAR\"] = \"YEAR\";\n})(Period || (Period = {}));\n/**\n * Enum that represents a Month.\n *\n * @public\n */\nexport var Month;\n(function (Month) {\n Month[\"JANUARY\"] = \"JANUARY\";\n Month[\"FEBRUARY\"] = \"FEBRUARY\";\n Month[\"MARCH\"] = \"MARCH\";\n Month[\"APRIL\"] = \"APRIL\";\n Month[\"MAY\"] = \"MAY\";\n Month[\"JUNE\"] = \"JUNE\";\n Month[\"JULY\"] = \"JULY\";\n Month[\"AUGUST\"] = \"AUGUST\";\n Month[\"SEPTEMBER\"] = \"SEPTEMBER\";\n Month[\"OCTOBER\"] = \"OCTOBER\";\n Month[\"NOVEMBER\"] = \"NOVEMBER\";\n Month[\"DECEMBER\"] = \"DECEMBER\";\n})(Month || (Month = {}));\n/**\n * Enum that represents the status of a Transaction.\n *\n * @public\n */\nexport var TransactionStatus;\n(function (TransactionStatus) {\n /**\n * Transaction is in the trash\n */\n TransactionStatus[\"TRASHED\"] = \"TRASHED\";\n /**\n * Transaction is a draft, not yet posted\n */\n TransactionStatus[\"DRAFT\"] = \"DRAFT\";\n /**\n * Transaction is posted but not checked\n */\n TransactionStatus[\"UNCHECKED\"] = \"UNCHECKED\";\n /**\n * Transaction is posted and checked\n */\n TransactionStatus[\"CHECKED\"] = \"CHECKED\";\n})(TransactionStatus || (TransactionStatus = {}));\n/**\n * Enum that represents the type of a Bot Response\n *\n * @public\n */\nexport var BotResponseType;\n(function (BotResponseType) {\n /**\n * Info bot response\n */\n BotResponseType[\"INFO\"] = \"INFO\";\n /**\n * Warning bot response\n */\n BotResponseType[\"WARNING\"] = \"WARNING\";\n /**\n * Error bot response\n */\n BotResponseType[\"ERROR\"] = \"ERROR\";\n})(BotResponseType || (BotResponseType = {}));\n/**\n * Enum that represents event types.\n *\n * @public\n */\nexport var EventType;\n(function (EventType) {\n EventType[\"FILE_CREATED\"] = \"FILE_CREATED\";\n EventType[\"FILE_UPDATED\"] = \"FILE_UPDATED\";\n EventType[\"TRANSACTION_CREATED\"] = \"TRANSACTION_CREATED\";\n EventType[\"TRANSACTION_UPDATED\"] = \"TRANSACTION_UPDATED\";\n EventType[\"TRANSACTION_DELETED\"] = \"TRANSACTION_DELETED\";\n EventType[\"TRANSACTION_POSTED\"] = \"TRANSACTION_POSTED\";\n EventType[\"TRANSACTION_CHECKED\"] = \"TRANSACTION_CHECKED\";\n EventType[\"TRANSACTION_UNCHECKED\"] = \"TRANSACTION_UNCHECKED\";\n EventType[\"TRANSACTION_RESTORED\"] = \"TRANSACTION_RESTORED\";\n EventType[\"ACCOUNT_CREATED\"] = \"ACCOUNT_CREATED\";\n EventType[\"ACCOUNT_UPDATED\"] = \"ACCOUNT_UPDATED\";\n EventType[\"ACCOUNT_DELETED\"] = \"ACCOUNT_DELETED\";\n EventType[\"QUERY_CREATED\"] = \"QUERY_CREATED\";\n EventType[\"QUERY_UPDATED\"] = \"QUERY_UPDATED\";\n EventType[\"QUERY_DELETED\"] = \"QUERY_DELETED\";\n EventType[\"GROUP_CREATED\"] = \"GROUP_CREATED\";\n EventType[\"GROUP_UPDATED\"] = \"GROUP_UPDATED\";\n EventType[\"GROUP_DELETED\"] = \"GROUP_DELETED\";\n EventType[\"COMMENT_CREATED\"] = \"COMMENT_CREATED\";\n EventType[\"COMMENT_DELETED\"] = \"COMMENT_DELETED\";\n EventType[\"COLLABORATOR_ADDED\"] = \"COLLABORATOR_ADDED\";\n EventType[\"COLLABORATOR_UPDATED\"] = \"COLLABORATOR_UPDATED\";\n EventType[\"COLLABORATOR_REMOVED\"] = \"COLLABORATOR_REMOVED\";\n EventType[\"INTEGRATION_CREATED\"] = \"INTEGRATION_CREATED\";\n EventType[\"INTEGRATION_UPDATED\"] = \"INTEGRATION_UPDATED\";\n EventType[\"INTEGRATION_DELETED\"] = \"INTEGRATION_DELETED\";\n EventType[\"BOOK_UPDATED\"] = \"BOOK_UPDATED\";\n EventType[\"BOOK_DELETED\"] = \"BOOK_DELETED\";\n})(EventType || (EventType = {}));\n//# sourceMappingURL=Enums.js.map", "/**\n * Abstract base class for all Bkper resources.\n * Provides common functionality for config management and JSON serialization.\n *\n * @public\n */\nexport class Resource {\n /**\n * Constructs a new Resource\n * @param payload - The data payload for this resource\n */\n constructor(payload) {\n this.payload = payload || {};\n }\n /**\n * Gets an immutable copy of the JSON payload for this resource.\n * @returns An immutable copy of the json payload\n */\n json() {\n return Object.assign({}, this.payload);\n }\n}\n//# sourceMappingURL=Resource.js.map", "import { Resource } from \"./Resource.js\";\n/**\n * Abstract base class for Bkper resources that support custom properties.\n *\n * Extends Resource<T> and adds property management methods for entities\n * that have a properties field in their payload.\n *\n * @public\n */\nexport class ResourceProperty extends Resource {\n /**\n * Checks if a property key represents a hidden property.\n * Hidden properties are those whose keys end with an underscore \"_\".\n *\n * @param key - The property key to check\n * @returns True if the property is hidden, false otherwise\n *\n * @internal\n */\n isHiddenProperty(key) {\n return key.endsWith('_');\n }\n /**\n * Gets the custom properties stored in this resource.\n *\n * @returns Object with key/value pair properties\n */\n getProperties() {\n return this.payload.properties != null\n ? Object.assign({}, this.payload.properties) : {};\n }\n /**\n * Sets the custom properties of this resource.\n *\n * @param properties - Object with key/value pair properties\n *\n * @returns This resource, for chaining\n */\n setProperties(properties) {\n this.payload.properties = Object.assign({}, properties);\n return this;\n }\n /**\n * Gets the property value for given keys. First property found will be retrieved.\n *\n * @param keys - The property keys to search for\n *\n * @returns The property value or undefined if not found\n */\n getProperty(...keys) {\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n let value = this.payload.properties != null\n ? this.payload.properties[key]\n : null;\n if (value != null && value.trim() != \"\") {\n return value;\n }\n }\n return undefined;\n }\n /**\n * Sets a custom property in this resource.\n *\n * @param key - The property key\n * @param value - The property value, or null/undefined to clean it\n *\n * @returns This resource, for chaining\n */\n setProperty(key, value) {\n if (key == null || key.trim() == \"\") {\n return this;\n }\n if (this.payload.properties == null) {\n this.payload.properties = {};\n }\n if (!value) {\n value = \"\";\n }\n this.payload.properties[key] = value;\n return this;\n }\n /**\n * Deletes a custom property.\n *\n * @param key - The property key\n *\n * @returns This resource, for chaining\n */\n deleteProperty(key) {\n this.setProperty(key, null);\n return this;\n }\n /**\n * Gets the custom properties keys stored in this resource.\n *\n * @returns Array of property keys sorted alphabetically\n */\n getPropertyKeys() {\n let properties = this.getProperties();\n let propertyKeys = [];\n if (properties) {\n for (var key in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, key)) {\n propertyKeys.push(key);\n }\n }\n }\n propertyKeys = propertyKeys.sort();\n return propertyKeys;\n }\n /**\n * Sets a custom property in this resource, filtering out hidden properties.\n * Hidden properties are those whose keys end with an underscore \"_\".\n *\n * @param key - The property key\n * @param value - The property value, or null/undefined to clean it\n *\n * @returns This resource, for chaining\n */\n setVisibleProperty(key, value) {\n if (this.isHiddenProperty(key)) {\n return this;\n }\n return this.setProperty(key, value);\n }\n /**\n * Sets the custom properties of this resource, filtering out hidden properties.\n * Hidden properties are those whose keys end with an underscore \"_\".\n *\n * @param properties - Object with key/value pair properties\n *\n * @returns This resource, for chaining\n */\n setVisibleProperties(properties) {\n if (properties == null) {\n return this;\n }\n const filteredProperties = {};\n for (const key in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, key)) {\n if (!this.isHiddenProperty(key)) {\n filteredProperties[key] = properties[key];\n }\n }\n }\n return this.setProperties(filteredProperties);\n }\n /**\n * Gets the visible custom properties stored in this resource.\n * Hidden properties (those ending with \"_\") are excluded from the result.\n *\n * @returns Object with key/value pair properties, excluding hidden properties\n */\n getVisibleProperties() {\n const allProperties = this.getProperties();\n const visibleProperties = {};\n for (const key in allProperties) {\n if (Object.prototype.hasOwnProperty.call(allProperties, key)) {\n if (!this.isHiddenProperty(key)) {\n visibleProperties[key] = allProperties[key];\n }\n }\n }\n return visibleProperties;\n }\n}\n//# sourceMappingURL=ResourceProperty.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as GroupService from \"../service/group-service.js\";\nimport { normalizeText } from \"../utils.js\";\nimport { Account } from \"./Account.js\";\nimport { ResourceProperty } from \"./ResourceProperty.js\";\n/**\n * This class defines a Group of [[Accounts]].\n *\n * Accounts can be grouped by different meaning, like Expenses, Revenue, Assets, Liabilities and so on\n *\n * Its useful to keep organized and for high level analysis.\n *\n * @public\n */\nexport class Group extends ResourceProperty {\n constructor(book, payload) {\n super(payload || { createdAt: `${Date.now()}` });\n /** @internal */\n this.children = new Map();\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the id of this Group.\n *\n * @returns The id of this Group\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the name of this Group.\n *\n * @returns The name of this Group\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the Group.\n *\n * @param name - The name to set\n *\n * @returns This Group, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Tells if the balance of this Group has been verified/audited.\n *\n * @returns True if the balance of this Group has been verified/audited\n */\n isBalanceVerified() {\n return __awaiter(this, void 0, void 0, function* () {\n const accounts = yield this.getAccounts();\n for (const account of accounts) {\n if (!account.isBalanceVerified()) {\n return false;\n }\n }\n return true;\n });\n }\n /**\n * Tells if the Group is locked by the Book owner.\n *\n * @returns True if the Group is locked\n */\n isLocked() {\n if (this.payload.locked == null) {\n return false;\n }\n return this.payload.locked;\n }\n /**\n * Sets the locked state of the Group.\n *\n * @param locked - The locked state of the Group.\n *\n * @returns This Group, for chaining\n */\n setLocked(locked) {\n this.payload.locked = locked;\n return this;\n }\n /**\n * Gets the normalized name of this group without spaces and special characters.\n *\n * @returns The name of this group without spaces and special characters\n */\n getNormalizedName() {\n if (this.payload.normalizedName) {\n return this.payload.normalizedName;\n }\n else {\n return normalizeText(this.getName());\n }\n }\n /**\n * Gets all Accounts of this group.\n *\n * @returns All Accounts of this group\n */\n getAccounts() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.accounts) {\n return Array.from(this.accounts.values());\n }\n const id = this.getId();\n if (!id) {\n return [];\n }\n let accountsPlain = yield GroupService.getAccounts(this.book.getId(), id, this.getConfig());\n if (!accountsPlain) {\n return [];\n }\n let accounts = accountsPlain.map((acc) => new Account(this.book, acc));\n return accounts;\n });\n }\n /**\n * Gets the type of the accounts of this group.\n *\n * @returns The type for of the accounts of this group. Null if mixed\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Tells if the Group is hidden on main transactions menu.\n *\n * @returns True if the Group is hidden, false otherwise\n */\n isHidden() {\n return this.payload.hidden;\n }\n /**\n * Hide/Show group on main menu.\n *\n * @param hidden - Whether to hide the group\n *\n * @returns This Group, for chaining\n */\n setHidden(hidden) {\n this.payload.hidden = hidden;\n return this;\n }\n /**\n * Tells if this is a credit (Incoming and Liabilities) group.\n *\n * @returns True if this is a credit group\n */\n isCredit() {\n return this.payload.credit;\n }\n /**\n * Tells if this is a mixed (Assets/Liabilities or Incoming/Outgoing) group.\n *\n * @returns True if this is a mixed group\n */\n isMixed() {\n return this.payload.mixed;\n }\n /**\n * Tells if the Group is permanent.\n *\n * @returns True if the Group is permanent\n */\n isPermanent() {\n return this.payload.permanent;\n }\n /**\n * Gets the parent Group.\n *\n * @returns The parent Group\n */\n getParent() {\n return this.parent;\n }\n /**\n * Sets the parent Group.\n *\n * @param group - The parent Group to set\n *\n * @returns This Group, for chaining\n */\n setParent(group) {\n if (group) {\n this.payload.parent = {\n id: group.getId(),\n name: group.getName(),\n normalizedName: group.getNormalizedName(),\n };\n }\n else {\n this.payload.parent = undefined;\n }\n return this;\n }\n /**\n * Checks if the Group has a parent.\n *\n * @returns True if the Group has a parent, otherwise false\n */\n hasParent() {\n return this.payload.parent != null;\n }\n /**\n * Gets the children of the Group.\n *\n * @returns An array of child Groups\n */\n getChildren() {\n return Array.from(this.children.values()) || [];\n }\n /** @internal */\n addChild(child) {\n const id = child.getId();\n if (id) {\n this.children.set(id, child);\n }\n }\n /**\n * Gets all descendant Groups of the current Group.\n *\n * @returns A set of descendant Groups\n */\n getDescendants() {\n const descendants = new Set();\n this.traverseDescendants(this, descendants);\n return descendants;\n }\n /**\n * Gets the IDs of all descendant Groups in a tree structure.\n *\n * @returns A set of descendant Group IDs\n */\n getDescendantTreeIds() {\n return new Set(Array.from(this.getDescendants()).map((g) => g.getId() || \"\"));\n }\n /**\n * Checks if the Group has any children.\n *\n * @returns True if the Group has children, otherwise false\n */\n hasChildren() {\n return this.getChildren().length > 0;\n }\n /**\n * Checks if the Group is a leaf node (i.e., has no children).\n *\n * @returns True if the Group is a leaf, otherwise false\n */\n isLeaf() {\n return this.getChildren().length === 0;\n }\n /**\n * Checks if the Group is a root node (i.e., has no parent).\n *\n * @returns True if the Group is a root, otherwise false\n */\n isRoot() {\n return this.getParent() == undefined;\n }\n /**\n * Gets the depth of the Group in the hierarchy.\n *\n * @returns The depth of the Group\n */\n getDepth() {\n if (this.depth == undefined) {\n if (this.parent) {\n this.depth = this.parent.getDepth() + 1;\n }\n else {\n this.depth = 0;\n }\n }\n return this.depth;\n }\n /**\n * Gets the root Group of the current Group.\n *\n * @returns The root Group\n */\n getRoot() {\n if (this.root == undefined) {\n if (this.parent != undefined) {\n this.root = this.parent.getRoot();\n }\n else {\n this.root = this;\n }\n }\n return this.root;\n }\n /**\n * Gets the name of the root Group.\n *\n * @returns The name of the root Group\n */\n getRootName() {\n const root = this.getRoot();\n if (root != null) {\n return root.getName() || \"\";\n }\n return \"\";\n }\n /** @internal */\n traverseDescendants(group, descendants) {\n descendants.add(group);\n const children = group.getChildren();\n if (children.length > 0) {\n for (const child of children) {\n this.traverseDescendants(child, descendants);\n }\n }\n }\n /** @internal */\n buildGroupTree(idGroupMap) {\n this.parent = undefined;\n this.depth = undefined;\n this.root = undefined;\n if (this.payload.parent) {\n const parentGroup = idGroupMap.get(this.payload.parent.id || \"\");\n if (parentGroup) {\n this.parent = parentGroup;\n parentGroup.addChild(this);\n }\n }\n }\n /** @internal */\n addAccount(account) {\n const id = account === null || account === void 0 ? void 0 : account.getId();\n if (id) {\n if (!this.accounts) {\n this.accounts = new Map();\n }\n this.accounts.set(id, account);\n }\n }\n /**\n * Tells if this group has any account in it.\n *\n * @returns True if this group has any account in it\n */\n hasAccounts() {\n return this.payload.hasAccounts;\n }\n /**\n * Performs create new group.\n *\n * @returns A promise that resolves to this Group\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield GroupService.createGroup(this.book.getId(), this.payload, this.getConfig());\n this.updateGroupCache();\n return this;\n });\n }\n /**\n * Performs update group, applying pending changes.\n *\n * @returns A promise that resolves to this Group\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield GroupService.updateGroup(this.book.getId(), this.payload, this.getConfig());\n this.updateGroupCache();\n return this;\n });\n }\n /**\n * Performs delete group.\n *\n * @returns A promise that resolves to this Group\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield GroupService.deleteGroup(this.book.getId(), this.payload, this.getConfig());\n this.updateGroupCache(true);\n return this;\n });\n }\n /** @internal */\n updateGroupCache(remove) {\n this.book.setGroup(this.payload, remove);\n this.book.clearCache();\n }\n}\n//# sourceMappingURL=Group.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as AccountService from '../service/account-service.js';\nimport { Group } from './Group.js';\nimport { normalizeText } from '../utils.js';\nimport { ResourceProperty } from './ResourceProperty.js';\n/**\n * This class defines an [Account](https://en.wikipedia.org/wiki/Account_(bookkeeping)) of a [[Book]].\n *\n * It maintains a balance of all amount [credited and debited](http://en.wikipedia.org/wiki/Debits_and_credits) in it by [[Transactions]].\n *\n * An Account can be grouped by [[Groups]].\n *\n * @remarks\n * `Account` has no `getBalance()` method. To retrieve account balances, use\n * {@link Book.getBalancesReport} and read the resulting {@link BalancesContainer}.\n *\n * @public\n */\nexport class Account extends ResourceProperty {\n constructor(book, payload) {\n super(payload || { createdAt: `${Date.now()}` });\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the Account internal id.\n *\n * @returns The Account internal id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the Account name.\n *\n * @returns The Account name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the Account.\n *\n * @param name - The name to set\n *\n * @returns This Account, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Tells if the balance of this Account has been verified/audited.\n *\n * @returns True if the balance of this Account has been verified/audited\n */\n isBalanceVerified() {\n return this.payload.balanceVerified;\n }\n /**\n * Gets the normalized name of this Account without spaces or special characters.\n *\n * @returns The name of this Account without spaces or special characters\n */\n getNormalizedName() {\n if (this.payload.normalizedName) {\n return this.payload.normalizedName;\n }\n else {\n return normalizeText(this.getName());\n }\n }\n /**\n * Gets the type of this Account.\n *\n * @returns The [[AccountType]] of this Account\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Sets the type of the Account.\n *\n * @param type - The [[AccountType]] to set\n *\n * @returns This Account, for chaining\n */\n setType(type) {\n this.payload.type = type;\n return this;\n }\n /**\n * Tells if this Account is archived.\n *\n * @returns True if the Account is archived\n */\n isArchived() {\n return this.payload.archived;\n }\n /**\n * Sets Account archived/unarchived.\n *\n * @param archived - True to archive, false to unarchive\n *\n * @returns This Account, for chaining\n */\n setArchived(archived) {\n this.payload.archived = archived;\n return this;\n }\n /**\n * Tells if the Account has any transaction already posted.\n *\n * Accounts with transaction posted, even with zero balance, can only be archived.\n *\n * @returns True if the Account has transactions posted\n */\n hasTransactionPosted() {\n return this.payload.hasTransactionPosted;\n }\n /**\n * Tells if the Account is permanent.\n *\n * Permanent Accounts are the ones which final balance is relevant and keep its balances over time.\n *\n * They are also called [Real Accounts](http://en.wikipedia.org/wiki/Account_(Accountancy)#Based_on_periodicity_of_flow)\n *\n * Usually represents assets or tangibles, capable of being perceived by the senses or the mind, like bank Accounts, money, debts and so on.\n *\n * @returns True if its a permanent Account\n */\n isPermanent() {\n return this.payload.permanent;\n }\n /**\n * Tells if the Account has a Credit nature or Debit otherwise.\n *\n * Credit Accounts are just for representation purposes. It increase or decrease the absolute balance. It doesn't affect the overall balance or the behavior of the system.\n *\n * The absolute balance of credit Accounts increase when it participate as a credit/origin in a transaction. Its usually for Accounts that increase the balance of the assets, like revenue Accounts.\n *\n * ```\n * Crediting a credit\n * Thus ---------------------> Account increases its absolute balance\n * Debiting a debit\n *\n *\n * Debiting a credit\n * Thus ---------------------> Account decreases its absolute balance\n * Crediting a debit\n * ```\n *\n * As a rule of thumb, and for simple understanding, almost all Accounts are Debit nature (NOT credit), except the ones that \"offers\" amount for the books, like revenue Accounts.\n *\n * @returns True if the Account has credit nature\n */\n isCredit() {\n return this.payload.credit;\n }\n /**\n * Gets the [[Groups]] of this Account.\n *\n * When groups are already embedded in the account payload (e.g. from\n * {@link Bkper.getBook} with includeGroups), resolves them from the\n * book's cache instead of making API calls.\n *\n * @returns Promise with the [[Groups]] of this Account\n */\n getGroups() {\n return __awaiter(this, void 0, void 0, function* () {\n const id = this.getId();\n if (!id) {\n return [];\n }\n //Ensure groups are pre-loaded in the book cache to avoid multiple API calls when resolving groups from the payload\n yield this.book.getGroups();\n // resolve them from the book's group cache to get properly tree-linked Group objects\n if (this.payload.groups != null) {\n const groups = [];\n for (const groupPayload of this.payload.groups) {\n const group = yield this.book.getGroup(groupPayload.id);\n if (group) {\n groups.push(group);\n }\n }\n return groups;\n }\n return [];\n });\n }\n /**\n * Sets the groups of the Account.\n *\n * @param groups - The groups to set\n *\n * @returns This Account, for chaining\n */\n setGroups(groups) {\n this.payload.groups = undefined;\n if (groups != null) {\n groups.forEach(group => this.addGroup(group));\n }\n return this;\n }\n /**\n * Adds a group to the Account.\n *\n * @param group - The group to add\n *\n * @returns This Account, for chaining\n */\n addGroup(group) {\n if (!this.payload.groups) {\n this.payload.groups = [];\n }\n if (group instanceof Group) {\n this.payload.groups.push(group.json());\n }\n else {\n this.payload.groups.push(group);\n }\n return this;\n }\n /**\n * Removes a group from the Account.\n *\n * @param group - The group name, id or object to remove\n *\n * @returns Promise with this Account, for chaining\n */\n removeGroup(group) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.payload.groups != null) {\n let groupObject = undefined;\n if (group instanceof Group) {\n groupObject = group;\n }\n else if (typeof group == 'string') {\n groupObject = yield this.book.getGroup(group);\n }\n if (groupObject) {\n for (let i = 0; i < this.payload.groups.length; i++) {\n const groupId = this.payload.groups[i].id;\n if (groupId == groupObject.getId()) {\n this.payload.groups.splice(i, 1);\n }\n }\n }\n }\n return this;\n });\n }\n /**\n * Tells if this Account is in the [[Group]].\n *\n * @param group - The Group name, id or object\n *\n * @returns Promise with true if the Account is in the group\n */\n isInGroup(group) {\n return __awaiter(this, void 0, void 0, function* () {\n if (group == null) {\n return false;\n }\n //Group object\n if (group instanceof Group) {\n return this.isInGroupObject_(group);\n }\n //id or name\n var foundGroup = yield this.book.getGroup(group);\n if (foundGroup == null) {\n return false;\n }\n return this.isInGroupObject_(foundGroup);\n });\n }\n /** @internal */\n isInGroupObject_(group) {\n if (this.payload.groups == null) {\n return false;\n }\n for (var i = 0; i < this.payload.groups.length; i++) {\n if (this.payload.groups[i] == group.getId()) {\n return true;\n }\n }\n return false;\n }\n /**\n * Performs create new Account.\n *\n * @returns Promise with this Account after creation\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield AccountService.createAccount(this.book.getId(), this.payload, this.getConfig());\n this.updateAccountCache();\n return this;\n });\n }\n /**\n * Performs update Account, applying pending changes.\n *\n * @returns Promise with this Account after update\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield AccountService.updateAccount(this.book.getId(), this.payload, this.getConfig());\n this.updateAccountCache();\n return this;\n });\n }\n /**\n * Performs delete Account.\n *\n * @returns Promise with this Account after deletion\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield AccountService.deleteAccount(this.book.getId(), this.payload, this.getConfig());\n this.updateAccountCache(true);\n return this;\n });\n }\n /** @internal */\n updateAccountCache(remove) {\n this.book.setAccount(this.payload, remove);\n this.book.clearCache();\n }\n}\n//# sourceMappingURL=Account.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { AccountType } from '../model/Enums.js';\nimport { convertInMatrix } from '../utils.js';\n/**\n * A AccountsDataTableBuilder is used to setup and build two-dimensional arrays containing accounts.\n *\n * @public\n */\nexport class AccountsDataTableBuilder {\n constructor(accounts) {\n this.accounts = accounts;\n this.shouldIncludeArchived = false;\n this.shouldAddGroups = false;\n this.shouldAddProperties = false;\n this.shouldAddIds = false;\n this.shouldAddHiddenProperties = false;\n this.propertyKeys = [];\n }\n /**\n * Defines whether the archived accounts should be included.\n *\n * @param include - Whether to include archived accounts\n *\n * @returns This builder with respective include archived option, for chaining.\n */\n archived(include) {\n this.shouldIncludeArchived = include;\n return this;\n }\n /**\n * Defines whether include account groups.\n *\n * @param include - Whether to include groups\n *\n * @returns This builder with respective include groups option, for chaining.\n */\n groups(include) {\n this.shouldAddGroups = include;\n return this;\n }\n /**\n * Defines whether include custom account properties.\n *\n * @param include - Whether to include properties\n *\n * @returns This builder with respective include properties option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether include account ids.\n *\n * @param include - Whether to include ids\n *\n * @returns This builder with respective include ids option, for chaining.\n */\n ids(include) {\n this.shouldAddIds = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n getPropertyKeys() {\n if (this.propertyKeys.length === 0) {\n for (const account of this.accounts) {\n for (const key of account.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (this.propertyKeys.indexOf(key) <= -1) {\n this.propertyKeys.push(key);\n }\n }\n }\n this.propertyKeys = this.propertyKeys.sort();\n }\n return this.propertyKeys;\n }\n getTypeIndex(type) {\n if (type === AccountType.ASSET) {\n return 0;\n }\n if (type === AccountType.LIABILITY) {\n return 1;\n }\n if (type === AccountType.INCOMING) {\n return 2;\n }\n return 3;\n }\n getMaxNumberOfGroups() {\n return __awaiter(this, void 0, void 0, function* () {\n let maxNumberOfGroups = 0;\n for (const account of this.accounts) {\n const groups = yield account.getGroups();\n if (groups.length > maxNumberOfGroups) {\n maxNumberOfGroups = groups.length;\n }\n }\n return maxNumberOfGroups;\n });\n }\n /**\n * Sorts groups for an account in hierarchy-path order:\n * 1. Hierarchical groups (those with parent or children) come first, ordered by:\n * - Root group name (alphabetically)\n * - Depth within the hierarchy (parent before child)\n * 2. Free groups (no parent and no children) come last, sorted alphabetically\n */\n sortGroupsHierarchyPath_(groups) {\n // Partition into hierarchical vs free groups\n const hierarchicalGroups = [];\n const freeGroups = [];\n for (const group of groups) {\n if (group.getParent() != null || group.hasChildren()) {\n hierarchicalGroups.push(group);\n }\n else {\n freeGroups.push(group);\n }\n }\n // Group hierarchical groups by their root\n const byRoot = new Map();\n for (const group of hierarchicalGroups) {\n const root = group.getRoot();\n const rootId = root.getId() || '';\n if (!byRoot.has(rootId)) {\n byRoot.set(rootId, []);\n }\n byRoot.get(rootId).push(group);\n }\n // Sort chains: first by root name alphabetically, then by depth within each chain\n const sortedChains = Array.from(byRoot.entries())\n .sort((a, b) => {\n const rootA = a[1][0].getRoot();\n const rootB = b[1][0].getRoot();\n return rootA.getNormalizedName().localeCompare(rootB.getNormalizedName());\n })\n .map(([_, chainGroups]) => chainGroups.sort((a, b) => a.getDepth() - b.getDepth()));\n // Sort free groups alphabetically\n freeGroups.sort((a, b) => a.getNormalizedName().localeCompare(b.getNormalizedName()));\n // Combine: hierarchical chains first, then free groups\n const result = [];\n for (const chain of sortedChains) {\n result.push(...chain);\n }\n result.push(...freeGroups);\n return result;\n }\n /**\n * Builds a two-dimensional array containing all accounts.\n *\n * @returns A promise resolving to a two-dimensional array containing all accounts\n */\n build() {\n return __awaiter(this, void 0, void 0, function* () {\n let table = new Array();\n let accounts = this.accounts;\n if (!this.shouldIncludeArchived) {\n accounts = this.accounts.filter(a => !a.isArchived());\n }\n let headers = [];\n if (this.shouldAddIds) {\n headers.push('Account Id');\n }\n headers.push('Name');\n headers.push('Type');\n if (this.shouldAddGroups) {\n const maxGroups = yield this.getMaxNumberOfGroups();\n for (let i = 0; i < maxGroups; i++) {\n headers.push('Group');\n }\n }\n accounts.sort((a1, a2) => {\n let ret = this.getTypeIndex(a1.getType()) - this.getTypeIndex(a2.getType());\n if (ret === 0) {\n ret = a1.getNormalizedName().localeCompare(a2.getNormalizedName());\n }\n return ret;\n });\n let propertyKeys = [];\n if (this.shouldAddProperties) {\n propertyKeys = this.getPropertyKeys();\n }\n for (const account of accounts) {\n const line = [];\n if (this.shouldAddIds) {\n line.push(account.getId());\n }\n line.push(account.getName());\n line.push(account.getType());\n if (this.shouldAddGroups) {\n const groups = this.sortGroupsHierarchyPath_(yield account.getGroups());\n for (const group of groups) {\n line.push(group.getName());\n }\n }\n if (this.shouldAddGroups && this.shouldAddProperties) {\n const numOfBlankCells = headers.length - line.length;\n for (let i = 0; i < numOfBlankCells; i++) {\n line.push('');\n }\n }\n if (this.shouldAddProperties) {\n const properties = account.getProperties();\n for (const key of propertyKeys) {\n const propertyValue = properties[key];\n if (propertyValue) {\n line.push(propertyValue);\n continue;\n }\n line.push('');\n }\n }\n table.push(line);\n }\n if (this.shouldAddProperties) {\n headers = headers.concat(propertyKeys);\n }\n table.unshift(headers);\n convertInMatrix(table);\n return table;\n });\n }\n}\n//# sourceMappingURL=AccountsDataTableBuilder.js.map", "/**\n * Defines an Agent on Bkper.\n *\n * An Agent represents an entity (such as an App or Bot) that interacts with Bkper, executing actions on behalf of users.\n *\n * @public\n */\nexport class Agent {\n constructor(payload) {\n this.payload = payload || {};\n }\n /**\n * Gets the wrapped plain JSON object.\n *\n * @returns The wrapped plain json object\n */\n json() {\n return Object.assign({}, this.payload);\n }\n /**\n * Gets the Agent universal identifier.\n *\n * @returns The Agent universal identifier\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the Agent name.\n *\n * @returns The Agent name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the Agent logo URL.\n *\n * @returns The Agent logo url\n */\n getLogoUrl() {\n return this.payload.logo;\n }\n /**\n * Gets the Agent logo URL in dark mode.\n *\n * @returns The Agent logo url in dark mode\n */\n getLogoUrlDark() {\n return this.payload.logoDark;\n }\n}\n//# sourceMappingURL=Agent.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiRequest } from \"./http-api-request.js\";\nexport function getApps(config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiRequest(`v5/apps`, config).setMethod('GET').fetch();\n if (response.data == null) {\n return [];\n }\n let appListPlain = response.data;\n let appsJson = appListPlain.items;\n if (appsJson == null) {\n return [];\n }\n return appsJson;\n });\n}\nexport function getApp(id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiRequest(`v5/apps/${id}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function createApp(app, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpApiRequest(`v5/apps`, config).setMethod('POST').setPayload(app).fetch();\n return response.data;\n });\n}\nexport function updateApp(app, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpApiRequest(`v5/apps`, config).setMethod('PUT').setPayload(app).fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=app-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function loadBooks(query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let request = new HttpBooksApiV5Request('', config);\n if (query) {\n request.addParam('query', query);\n }\n let response = yield request.fetch();\n if (response.data == null) {\n return [];\n }\n let bookListPlain = response.data;\n let booksJson = bookListPlain.items;\n if (booksJson == null) {\n return [];\n }\n return booksJson;\n });\n}\nexport function loadBook(bookId, loadAccounts, loadGroups, config) {\n return __awaiter(this, void 0, void 0, function* () {\n if (bookId == null) {\n throw new Error(\"Book id null!\");\n }\n loadAccounts = loadAccounts || false;\n loadGroups = loadGroups || false;\n let response = yield new HttpBooksApiV5Request(bookId, config).addParam('loadAccounts', loadAccounts).addParam('loadGroups', loadGroups).fetch();\n return response.data;\n });\n}\nexport function createBook(book, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request('', config).setMethod('POST').setPayload(book).fetch();\n return response.data;\n });\n}\nexport function updateBook(bookId, book, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}`, config).setMethod('PUT').setPayload(book).fetch();\n return response.data;\n });\n}\nexport function audit(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n new HttpBooksApiV5Request(`${bookId}/audit`, config).setMethod('PATCH').fetch();\n });\n}\nexport function getApps(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpBooksApiV5Request(`${bookId}/apps`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function copyBook(bookId, name, copyTransactions, fromDate, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const request = new HttpBooksApiV5Request(`${bookId}/copy`, config).setMethod('POST').addParam('name', name);\n if (copyTransactions) {\n request.addParam('copyTransactions', copyTransactions);\n if (fromDate) {\n request.addParam('fromDate', fromDate);\n }\n }\n const response = yield request.fetch();\n return response.data;\n });\n}\nexport function deleteBook(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${bookId}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=book-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function getSavedQueries(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpBooksApiV5Request(`${bookId}/queries`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function createSavedQuery(bookId, query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/queries`, config).setMethod('POST').setPayload(query).fetch();\n return response.data;\n });\n}\nexport function updateSavedQuery(bookId, query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/queries`, config).setMethod('PUT').setPayload(query).fetch();\n return response.data;\n });\n}\nexport function deleteSavedQuery(bookId, queryId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/queries/${queryId}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=query-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nimport { HttpRequest } from \"./http-request.js\";\nexport function getBalances(bookId, query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpBooksApiV5Request(`${bookId}/balances`, config).addParam('query', query).addParam('time', Date.now()).fetch();\n const balancesUrl = (_a = response.data) === null || _a === void 0 ? void 0 : _a.balancesUrl; // Expected for large payloads\n if (balancesUrl) {\n const balancesResponse = yield new HttpRequest(balancesUrl).setMethod('GET').execute();\n response = { data: balancesResponse.data, status: balancesResponse.status };\n }\n return response.data;\n });\n}\n//# sourceMappingURL=balances-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function createFile(bookId, file, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/files`, config).setMethod('POST').setPayload(file).fetch();\n return response.data;\n });\n}\nexport function getFile(bookId, id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/files/${id}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function updateFile(bookId, file, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpBooksApiV5Request(`${bookId}/files`, config).setMethod('PUT').setPayload(file).fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=file-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function listIntegrations(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const res = yield new HttpBooksApiV5Request(`${bookId}/integrations`, config)\n .setMethod('GET')\n .fetch();\n return ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function createIntegration(bookId, integration, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpBooksApiV5Request(`${bookId}/integrations`, config)\n .setPayload(integration)\n .setMethod('POST')\n .fetch();\n return res.data;\n });\n}\nexport function updateIntegration(bookId, integration, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpBooksApiV5Request(`${bookId}/integrations`, config)\n .setPayload(integration)\n .setMethod('PUT')\n .fetch();\n return res.data;\n });\n}\nexport function deleteIntegration(bookId, id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpBooksApiV5Request(`${bookId}/integrations/${id}`, config).setMethod('DELETE').fetch();\n return res.data;\n });\n}\n//# sourceMappingURL=integration-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function createTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions`, config).setMethod('POST').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function postTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = { items: transactions };\n yield new HttpBooksApiV5Request(`${bookId}/transactions/post/batch`, config).setMethod('PATCH').setPayload(payload).fetch();\n });\n}\nexport function createTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionList = { items: transactions };\n const payload = transactionList;\n const response = yield new HttpBooksApiV5Request(`${bookId}/transactions/batch`, config).setMethod('POST').setPayload(payload).fetch();\n transactionList = yield response.data;\n return transactionList != null && transactionList.items != null ? transactionList.items : [];\n });\n}\nexport function updateTransactionsBatch(bookId, transactions, updateChecked, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionList = { items: transactions };\n const payload = transactionList;\n const response = yield new HttpBooksApiV5Request(`${bookId}/transactions/batch`, config).setMethod('PUT').setPayload(payload).addParam('updateChecked', updateChecked).fetch();\n transactionList = yield response.data;\n return transactionList != null && transactionList.items != null ? transactionList.items : [];\n });\n}\nexport function checkTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = { items: transactions };\n yield new HttpBooksApiV5Request(`${bookId}/transactions/check/batch`, config).setMethod('PATCH').setPayload(payload).fetch();\n });\n}\nexport function uncheckTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = { items: transactions };\n yield new HttpBooksApiV5Request(`${bookId}/transactions/uncheck/batch`, config).setMethod('PATCH').setPayload(payload).fetch();\n });\n}\nexport function trashTransactionsBatch(bookId, transactions, trashChecked, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionList = { items: transactions };\n const payload = transactionList;\n const response = yield new HttpBooksApiV5Request(`${bookId}/transactions/trash/batch`, config).setMethod('PATCH').setPayload(payload).addParam('trashChecked', trashChecked).fetch();\n transactionList = yield response.data;\n });\n}\nexport function untrashTransactionsBatch(bookId, transactions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionList = { items: transactions };\n const payload = transactionList;\n const response = yield new HttpBooksApiV5Request(`${bookId}/transactions/untrash/batch`, config).setMethod('PATCH').setPayload(payload).fetch();\n transactionList = yield response.data;\n });\n}\nexport function updateTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions`, config).setMethod('PUT').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function postTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/post`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function checkTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/check`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function uncheckTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/uncheck`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function trashTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/trash`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function restoreTransaction(bookId, transaction, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/restore`, config).setMethod('PATCH').setPayload(transaction).fetch();\n return response.data;\n });\n}\nexport function getTransaction(bookId, id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var response = yield new HttpBooksApiV5Request(`${bookId}/transactions/${id}`, config).setMethod('GET').fetch();\n return response.data;\n });\n}\nexport function listTransactions(bookId, query, limit, cursor, config) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!query) {\n query = \"\";\n }\n if (!limit) {\n limit = 100;\n }\n var request = new HttpBooksApiV5Request(`${bookId}/transactions`, config);\n request.addParam('query', query);\n request.addParam('limit', limit);\n if (cursor != null) {\n request.setHeader('cursor', cursor);\n }\n var response = yield request.fetch();\n return response.data;\n });\n}\nexport function countTransactions(bookId, query, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const request = new HttpBooksApiV5Request(`${bookId}/transactions/count`, config).setMethod('GET').addParam('query', query);\n const response = yield request.fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=transaction-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from \"./http-api-request.js\";\nexport function listEvents(book, afterDate, beforeDate, onError, resourceId, limit, cursor, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let request = new HttpBooksApiV5Request(`${book.getId()}/events`, config);\n request.addParam('after', afterDate);\n request.addParam('before', beforeDate);\n request.addParam('error', onError);\n request.addParam('resoureId', resourceId);\n request.addParam('limit', limit);\n if (cursor != null) {\n request.setHeader('cursor', cursor);\n }\n var response = yield request.fetch();\n return response.data;\n });\n}\nexport function replayBotResponse(book, eventId, agentId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${book.getId()}/events/${eventId}/responses/${agentId}`, config).setMethod('PUT').fetch();\n return response.data;\n });\n}\nexport function deleteBotResponse(book, eventId, agentId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${book.getId()}/events/${eventId}/responses/${agentId}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\nexport function replayEventsBatch(book, eventList, errorsOnly, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let request = new HttpBooksApiV5Request(`${book.getId()}/events/replay/batch`, config).setMethod('PATCH').setPayload(eventList);\n if (errorsOnly) {\n request.addParam('errorsOnly', errorsOnly);\n }\n yield request.fetch();\n });\n}\nexport function getBacklog(book, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${book.getId()}/events/backlog`, config).setMethod(\"GET\").fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=event-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpBooksApiV5Request } from './http-api-request.js';\nexport function listCollaborators(bookId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const response = yield new HttpBooksApiV5Request(`${bookId}/collaborators`, config).setMethod('GET').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function addOrUpdateCollaborator(bookId, collaborator, message, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let request = new HttpBooksApiV5Request(`${bookId}/collaborators`, config).setMethod('POST').setPayload(collaborator);\n if (message) {\n request = request.addParam('message', message);\n }\n const response = yield request.fetch();\n return response.data;\n });\n}\nexport function removeCollaborator(bookId, email, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield new HttpBooksApiV5Request(`${bookId}/collaborators/${email}`, config).setMethod('DELETE').fetch();\n return response.data;\n });\n}\n//# sourceMappingURL=collaborator-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as CollaboratorService from \"../service/collaborator-service.js\";\nimport { Resource } from \"./Resource.js\";\n/**\n * This class defines a Collaborator of a [[Book]].\n *\n * A Collaborator represents a user that has been granted access to a Book with specific permissions.\n *\n * @public\n */\nexport class Collaborator extends Resource {\n constructor(book, payload) {\n super(payload);\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the Collaborator internal id.\n *\n * @returns The Collaborator internal id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the Collaborator email address.\n *\n * @returns The Collaborator email address\n */\n getEmail() {\n return this.payload.email;\n }\n /**\n * Sets the email address of the Collaborator.\n *\n * @param email - The email address to set\n *\n * @returns This Collaborator, for chaining\n */\n setEmail(email) {\n this.payload.email = email;\n return this;\n }\n /**\n * Gets the permission level of the Collaborator.\n *\n * @returns The permission level\n */\n getPermission() {\n return this.payload.permission;\n }\n /**\n * Sets the permission level of the Collaborator.\n *\n * @param permission - The permission level to set\n *\n * @returns This Collaborator, for chaining\n */\n setPermission(permission) {\n this.payload.permission = permission;\n return this;\n }\n /**\n * Performs create new Collaborator.\n *\n * @returns Promise with the created Collaborator\n */\n create(message) {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield CollaboratorService.addOrUpdateCollaborator(this.book.getId(), this.payload, message, this.getConfig());\n this.book.clearCollaboratorCache();\n return this;\n });\n }\n /**\n * Performs update Collaborator.\n *\n * @returns Promise with the updated Collaborator\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield CollaboratorService.addOrUpdateCollaborator(this.book.getId(), this.payload, undefined, this.getConfig());\n this.book.clearCollaboratorCache();\n return this;\n });\n }\n /**\n * Performs remove Collaborator.\n *\n * @returns Promise with the removed Collaborator\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const email = this.getEmail();\n if (!email) {\n throw new Error(\"Collaborator email is required\");\n }\n this.payload = yield CollaboratorService.removeCollaborator(this.book.getId(), email, this.getConfig());\n this.book.clearCollaboratorCache();\n return this;\n });\n }\n}\n//# sourceMappingURL=Collaborator.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiV5Request } from \"./http-api-request.js\";\nexport function loadCollections(config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpApiV5Request('collections', config).fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function createCollection(payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiV5Request('collections', config).setMethod('POST').setPayload(payload).fetch();\n return response.data;\n });\n}\nexport function updateCollection(payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiV5Request('collections', config).setMethod('PUT').setPayload(payload).fetch();\n return response.data;\n });\n}\nexport function deleteCollection(payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpApiV5Request(`collections/${payload.id}`, config).setMethod('DELETE').fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function addBooksToCollection(collectionId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpApiV5Request(`collections/${collectionId}/books/add`, config).setMethod('PATCH').setPayload(payload).fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function removeBooksFromCollection(collectionId, payload, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let response = yield new HttpApiV5Request(`collections/${collectionId}/books/remove`, config).setMethod('PATCH').setPayload(payload).fetch();\n return ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\n//# sourceMappingURL=collection-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Book } from \"./Book.js\";\nimport { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\nimport * as CollectionService from \"../service/collection-service.js\";\n/**\n * This class defines a Collection of [[Books]].\n *\n * @public\n */\nexport class Collection extends Resource {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the unique identifier of this Collection.\n *\n * @returns The id of this Collection\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the name of this Collection.\n *\n * @returns The name of this Collection\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the Collection.\n *\n * @param name - The name to set\n *\n * @returns This Collection, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Gets the username of the owner of this Collection\n *\n * @returns The Collection's owner username\n */\n getOwnerUsername() {\n return this.payload.ownerUsername;\n }\n /**\n * Gets the user permission for this Collection\n *\n * @returns The permission for the current user\n */\n getPermission() {\n return this.payload.permission\n ? this.payload.permission\n : undefined;\n }\n /**\n * Gets all Books of this collection.\n *\n * @returns All Books of this collection\n */\n getBooks() {\n let books = [];\n if (this.payload.books == null) {\n return books;\n }\n for (const bookPayload of this.payload.books) {\n let book = new Book(bookPayload, this.config);\n books.push(book);\n }\n return books;\n }\n /**\n * Adds Books to this Collection.\n *\n * @param books - The Books to add to this Collection\n *\n * @returns The added Book objects\n */\n addBooks(books) {\n return __awaiter(this, void 0, void 0, function* () {\n const collectionId = this.getId();\n if (collectionId && books.length > 0) {\n const bookList = { items: books.map((b) => b.json()) };\n let addedBooks = yield CollectionService.addBooksToCollection(collectionId, bookList, this.getConfig());\n return addedBooks.map((book) => new Book(book, this.config));\n }\n return [];\n });\n }\n /**\n * Removes Books from this Collection.\n *\n * @param books - The Books to remove from this Collection\n *\n * @returns The removed Book objects\n */\n removeBooks(books) {\n return __awaiter(this, void 0, void 0, function* () {\n const collectionId = this.getId();\n if (collectionId && books.length > 0) {\n const bookList = { items: books.map((b) => b.json()) };\n let removedBooks = yield CollectionService.removeBooksFromCollection(collectionId, bookList, this.getConfig());\n return removedBooks.map((book) => new Book(book, this.config));\n }\n return [];\n });\n }\n /**\n * Gets the last update date of this Collection\n *\n * @returns The Collection's last update timestamp, in milliseconds\n */\n getUpdatedAt() {\n return this.payload.updatedAt;\n }\n /**\n * Performs create new Collection.\n *\n * @returns The created Collection object\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield CollectionService.createCollection(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Performs update Collection, applying pending changes.\n *\n * @returns The updated Collection object\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield CollectionService.updateCollection(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Performs delete Collection.\n *\n * @returns The list of Books the user has access to that were affected by the deletion of this Collection\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n let books = yield CollectionService.deleteCollection(this.payload, this.getConfig());\n return books.map((book) => new Book(book, this.config));\n });\n }\n}\n//# sourceMappingURL=Collection.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as EventService from '../service/event-service.js';\n/**\n *\n * This class defines a Bot Response associated to an [[Event]].\n *\n * @public\n */\nexport class BotResponse {\n constructor(event, payload) {\n this.event = event;\n this.payload = payload || {};\n }\n /**\n * Gets the type of this Bot Response.\n *\n * @returns The type of this Bot Response\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Gets the agent id of this Bot Response.\n *\n * @returns The agent id of this Bot Response\n */\n getAgentId() {\n return this.payload.agentId;\n }\n /**\n * Gets the message of this Bot Response.\n *\n * @returns The message of this Bot Response\n */\n getMessage() {\n return this.payload.message;\n }\n /**\n * Gets the date this Bot Response was created.\n *\n * @returns The date this Bot Response was created\n */\n getCreatedAt() {\n return this.payload.createdAt ? new Date(new Number(this.payload.createdAt).valueOf()) : undefined;\n }\n /**\n * Gets the Event this Bot Response is associated to.\n *\n * @returns The Event this Bot Response is associated to\n */\n getEvent() {\n return this.event;\n }\n /**\n * Replay this Bot Response.\n *\n * @returns The updated Bot Response\n */\n replay() {\n return __awaiter(this, void 0, void 0, function* () {\n const eventId = this.event.getId();\n if (eventId == null) {\n throw new Error(\"Event id null!\");\n }\n const agentId = this.getAgentId();\n if (agentId == null) {\n throw new Error(\"Agent id null!\");\n }\n const updatedEventPayload = yield EventService.replayBotResponse(this.event.getBook(), eventId, agentId, this.event.getBook().getConfig());\n this.updateCache(updatedEventPayload);\n return this;\n });\n }\n /**\n * Delete this Bot Response.\n *\n * @returns The deleted Bot Response\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const eventId = this.event.getId();\n if (eventId == null) {\n throw new Error(\"Event id null!\");\n }\n const agentId = this.getAgentId();\n if (agentId == null) {\n throw new Error(\"Agent id null!\");\n }\n const updatedEventPayload = yield EventService.deleteBotResponse(this.event.getBook(), eventId, agentId, this.event.getBook().getConfig());\n this.updateCache(updatedEventPayload);\n return this;\n });\n }\n /** @internal */\n updateCache(updatedEventPayload) {\n var _a;\n // Update event\n this.event.payload = updatedEventPayload;\n this.event.clearCache();\n // Update bot response\n const updatedBotResponsePayload = (_a = updatedEventPayload === null || updatedEventPayload === void 0 ? void 0 : updatedEventPayload.botResponses) === null || _a === void 0 ? void 0 : _a.find(r => r.agentId && r.agentId === this.getAgentId());\n this.payload = updatedBotResponsePayload || {};\n }\n}\n//# sourceMappingURL=BotResponse.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiV5Request } from \"./http-api-request.js\";\nexport function getConnection(id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/connections/${id}`, config)\n .setMethod('GET')\n .fetch();\n return res.data;\n });\n}\nexport function listConnections(config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const res = yield new HttpApiV5Request(`user/connections`, config)\n .setMethod('GET')\n .fetch();\n return ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\nexport function createConnection(connection, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/connections`, config)\n .setPayload(connection)\n .setMethod('POST')\n .fetch();\n return res.data;\n });\n}\nexport function updateConnection(connection, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/connections`, config)\n .setPayload(connection)\n .setMethod('PUT')\n .fetch();\n return res.data;\n });\n}\nexport function deleteConnection(id, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/connections/${id}`, config)\n .setMethod('DELETE')\n .fetch();\n return res.data;\n });\n}\nexport function listIntegrations(connectionId, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const res = yield new HttpApiV5Request(`user/connections/${connectionId}/integrations`, config)\n .setMethod('GET')\n .fetch();\n return ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.items) || [];\n });\n}\n//# sourceMappingURL=connection-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as IntegrationService from \"../service/integration-service.js\";\nimport { ResourceProperty } from \"./ResourceProperty.js\";\nimport { Bkper } from \"./Bkper.js\";\n/**\n * This class defines a Integration from an [[User]] to an external service.\n *\n * @public\n */\nexport class Integration extends ResourceProperty {\n constructor(payload, config) {\n super(payload || {});\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the [[Book]] id of the Integration.\n *\n * @returns The Integration's Book id\n */\n getBookId() {\n return this.payload.bookId;\n }\n /**\n * Gets the id of the Integration.\n *\n * @returns This Integration's id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the name of the Integration.\n *\n * @returns The Integration's name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the name of the user who added the Integration.\n *\n * @returns The user name of who added the Integration\n */\n getAddedBy() {\n return this.payload.addedBy;\n }\n /**\n * Gets the agent id of the Integration.\n *\n * @returns The Integration's agent id\n */\n getAgentId() {\n return this.payload.agentId;\n }\n /**\n * Gets the logo of the Integration.\n *\n * @returns The Integration's logo\n *\n * @deprecated Use getLogoUrl instead.\n */\n getLogo() {\n return this.payload.logo;\n }\n /**\n * Gets the logo url of this Integration.\n *\n * @returns The logo url of this Integration\n */\n getLogoUrl() {\n return this.payload.logo;\n }\n /**\n * Gets the logo url of this Integration in dark mode.\n *\n * @returns The logo url of this Integration in dark mode\n */\n getLogoUrlDark() {\n return this.payload.logoDark;\n }\n /**\n * Gets the date when the Integration was added.\n *\n * @returns The Integration add date in milliseconds\n */\n getDateAddedMs() {\n return this.payload.dateAddedMs;\n }\n /**\n * Gets the date when the Integration was last updated.\n *\n * @returns The Integration last update date in milliseconds\n */\n getLastUpdateMs() {\n return this.payload.lastUpdateMs;\n }\n /**\n * Performs remove Integration.\n *\n * @returns The removed Integration object\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const bookId = this.getBookId();\n const integrationId = this.getId();\n if (bookId && integrationId) {\n this.payload = yield IntegrationService.deleteIntegration(bookId, integrationId, this.getConfig());\n }\n return this;\n });\n }\n}\n//# sourceMappingURL=Integration.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ResourceProperty } from \"./ResourceProperty.js\";\nimport { Bkper } from \"./Bkper.js\";\nimport * as ConnectionService from \"../service/connection-service.js\";\nimport { Integration } from \"./Integration.js\";\n/**\n * This class defines a Connection from an [[User]] to an external service.\n *\n * @public\n */\nexport class Connection extends ResourceProperty {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the id of the Connection.\n *\n * @returns The Connection's id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the agentId of the Connection.\n *\n * @returns The Connection's agentId\n */\n getAgentId() {\n return this.payload.agentId;\n }\n /**\n * Sets the Connection agentId.\n *\n * @param agentId - The Connection agentId\n *\n * @returns The Connection, for chaining\n */\n setAgentId(agentId) {\n this.payload.agentId = agentId;\n return this;\n }\n /**\n * Gets the name of the Connection.\n *\n * @returns The Connection name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the logo of the Connection.\n *\n * @returns The Connection logo\n */\n getLogo() {\n return this.payload.logo;\n }\n /**\n * Gets the date when the Connection was added.\n *\n * @returns The Connection add date in milliseconds\n */\n getDateAddedMs() {\n return this.payload.dateAddedMs;\n }\n /**\n * Gets the email of the owner of the Connection.\n *\n * @returns The Connection owner's email\n */\n getEmail() {\n return this.payload.email;\n }\n /**\n * Sets the name of the Connection.\n *\n * @param name - The name of the Connection\n *\n * @returns The Connection, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Sets the universal unique identifier of the Connection.\n *\n * @param uuid - The universal unique identifier of the Connection\n *\n * @returns The Connection, for chaining\n */\n setUUID(uuid) {\n this.payload.uuid = uuid;\n return this;\n }\n /**\n * Gets the universal unique identifier of this Connection.\n *\n * @returns The Connection's universal unique identifier name\n */\n getUUID() {\n return this.payload.uuid;\n }\n /**\n * Gets the type of the Connection.\n *\n * @returns The Connection type\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Sets the Connection type.\n *\n * @param type - The Connection type\n *\n * @returns The Connection, for chaining\n */\n setType(type) {\n this.payload.type = type;\n return this;\n }\n /**\n * Cleans any token property stored in the Connection.\n */\n clearTokenProperties() {\n this.getPropertyKeys()\n .filter((key) => key.includes(\"token\"))\n .forEach((key) => this.deleteProperty(key));\n }\n /**\n * Gets the existing [[Integrations]] on the Connection.\n *\n * @returns The existing Integration objects\n */\n getIntegrations() {\n return __awaiter(this, void 0, void 0, function* () {\n const id = this.getId();\n if (!id) {\n return [];\n }\n const integrationsPlain = yield ConnectionService.listIntegrations(id, this.getConfig());\n const integrations = integrationsPlain.map((i) => new Integration(i, this.config));\n return integrations;\n });\n }\n /**\n * Performs create new Connection.\n *\n * @returns The created Connection, for chaining\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield ConnectionService.createConnection(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Performs remove Connection.\n *\n * @returns The removed Connection object\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const connectionId = this.getId();\n if (connectionId) {\n this.payload = yield ConnectionService.deleteConnection(connectionId, this.getConfig());\n }\n return this;\n });\n }\n}\n//# sourceMappingURL=Connection.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiV5Request } from './http-api-request.js';\nexport function getUser(config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user`, config).setMethod('GET').fetch();\n return res.data;\n });\n}\nexport function getBilling(config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/billing`, config).setMethod('GET').fetch();\n return res.data;\n });\n}\nexport function getBillingCounts(config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/billing/counts`, config).setMethod('GET').fetch();\n return res.data;\n });\n}\nexport function getBillingPortalUrl(returnUrl, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const res = yield new HttpApiV5Request(`user/billing/portal`, config)\n .addParam('returnUrl', returnUrl)\n .fetch();\n return res.data;\n });\n}\nexport function getBillingCheckoutUrl(plan, successUrl, cancelUrl, cycle, config) {\n return __awaiter(this, void 0, void 0, function* () {\n const request = new HttpApiV5Request(`user/billing/checkout`, config).addParam('plan', plan);\n if (cycle) {\n request.addParam('cycle', cycle);\n }\n if (successUrl) {\n request.addParam('successUrl', successUrl);\n }\n if (cancelUrl) {\n request.addParam('cancelUrl', cancelUrl);\n }\n const res = yield request.fetch();\n return res.data;\n });\n}\n//# sourceMappingURL=user-service.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Resource } from './Resource.js';\nimport { Bkper } from './Bkper.js';\nimport * as UserService from '../service/user-service.js';\n/**\n * This class defines the Billing information for a [[User]].\n *\n * The Billing information includes the plan, the admin email, and the billing portal URL.\n *\n * @public\n */\nexport class Billing extends Resource {\n constructor(json, config) {\n super(json);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Tells if billing is enabled for the User.\n *\n * @returns True if billing is enabled for the User\n */\n isEnabled() {\n return this.payload.enabled;\n }\n /**\n * Gets the email for the User.\n *\n * @returns The User's email\n */\n getEmail() {\n return this.payload.email;\n }\n /**\n * Gets the hosted domain for the User.\n *\n * @returns The User's hosted domain\n */\n getHostedDomain() {\n return this.payload.hostedDomain;\n }\n /**\n * Gets the current plan of the User.\n *\n * @returns The User's plan\n */\n getPlan() {\n return this.payload.plan;\n }\n /**\n * Tells if the User's current plan payment is overdue.\n *\n * @returns True if the plan payment is overdue\n */\n isPlanOverdue() {\n return this.payload.planOverdue;\n }\n /**\n * Gets the admin email for this User's billing account.\n *\n * @returns The billing admin email\n */\n getAdminEmail() {\n return this.payload.adminEmail;\n }\n /**\n * Tells if the User has started the trial period.\n *\n * @returns True if the User has started the trial period\n */\n hasStartedTrial() {\n return this.payload.startedTrial;\n }\n /**\n * Gets the number of days left in User's trial period.\n *\n * @returns The number of days left in trial period\n */\n getDaysLeftInTrial() {\n return this.payload.daysLeftInTrial;\n }\n /**\n * Gets the number of total transactions this month for the User's billing account.\n *\n * @returns The number of total transactions this month\n */\n getTotalTransactionsThisMonth() {\n return this.payload.totalTransactionsThisMonth;\n }\n /**\n * Gets the number of total transactions this year for the User's billing account.\n *\n * @returns The number of total transactions this year\n */\n getTotalTransactionsThisYear() {\n return this.payload.totalTransactionsThisYear;\n }\n /**\n * Gets the transaction counts associated to the User's billing account.\n *\n * @returns The transaction counts associated to the User's billing account\n */\n getCounts() {\n return __awaiter(this, void 0, void 0, function* () {\n const countsPayload = yield UserService.getBillingCounts(this.getConfig());\n return countsPayload;\n });\n }\n /**\n * Gets the URL to redirect the User to the billing portal.\n *\n * @param returnUrl - The URL to return to after the User has been redirected to the billing portal\n *\n * @returns The URL to redirect the User to the billing portal\n */\n getPortalUrl(returnUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n const urlPayload = yield UserService.getBillingPortalUrl(returnUrl, this.getConfig());\n return urlPayload === null || urlPayload === void 0 ? void 0 : urlPayload.url;\n });\n }\n /**\n * Gets the URL to redirect the User to the billing checkout.\n *\n * @param plan - The plan to checkout\n * @param successUrl - The URL to redirect to after the User has successfully checked out\n * @param cancelUrl - The URL to redirect to in case the checkout is cancelled\n * @param cycle - The billing cycle to checkout - \"monthly\" (default) or \"yearly\"\n *\n * @returns The URL to redirect the User to the billing checkout\n */\n getCheckoutUrl(plan, successUrl, cancelUrl, cycle) {\n return __awaiter(this, void 0, void 0, function* () {\n const urlPayload = yield UserService.getBillingCheckoutUrl(plan, successUrl, cancelUrl, cycle, this.getConfig());\n return urlPayload === null || urlPayload === void 0 ? void 0 : urlPayload.url;\n });\n }\n}\n//# sourceMappingURL=Billing.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Connection } from \"./Connection.js\";\nimport { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\nimport * as ConnectionService from \"../service/connection-service.js\";\nimport * as UserService from \"../service/user-service.js\";\nimport { Billing } from \"./Billing.js\";\n/**\n * This class defines a User on the Bkper platform.\n *\n * Users can own and collaborate on [[Books]], manage [[Collections]], and connect to external services through [[Connections]].\n *\n * Each User has a unique identity, subscription plan details, and access permissions across the platform.\n *\n * @public\n */\nexport class User extends Resource {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the id of the User.\n *\n * @returns The User's id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the given name of the User.\n *\n * @returns The User's given name\n */\n getGivenName() {\n return this.payload.givenName;\n }\n /**\n * Gets the name of the User.\n *\n * @returns The User's name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the avatar url of the User.\n *\n * @returns The User's avatar url\n */\n getAvatarUrl() {\n return this.payload.avatarUrl;\n }\n /**\n * Gets the full name of the User.\n *\n * @returns The User's full name\n */\n getFullName() {\n return this.payload.fullName;\n }\n /**\n * Gets the email of the User.\n *\n * @returns The User's email\n */\n getEmail() {\n return this.payload.email;\n }\n /**\n * Gets the hosted domain of the User.\n *\n * @returns The User's hosted domain\n */\n getHostedDomain() {\n return this.payload.hostedDomain;\n }\n /**\n * Gets the username of the User.\n *\n * @returns The User's username\n */\n getUsername() {\n return this.payload.username;\n }\n /**\n * Gets the billing information for this User.\n *\n * @returns The User's billing information\n */\n getBilling() {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = yield UserService.getBilling(this.getConfig());\n return new Billing(payload, this.config);\n });\n }\n /**\n * Tells if the User has already used [[Connections]].\n *\n * @returns True if the User has already used Connections\n */\n hasUsedConnections() {\n return this.payload.bankConnections;\n }\n /**\n * Gets the [[Connections]] of the User.\n *\n * @returns The retrieved Connection objects\n */\n getConnections() {\n return __awaiter(this, void 0, void 0, function* () {\n const json = yield ConnectionService.listConnections(this.getConfig());\n return json.map((c) => new Connection(c, this.config));\n });\n }\n /**\n * Gets a [[Connection]] of the User.\n *\n * @param id - The Connection's id\n *\n * @returns The retrieved Connection object\n */\n getConnection(id) {\n return __awaiter(this, void 0, void 0, function* () {\n const json = yield ConnectionService.getConnection(id, this.getConfig());\n return new Connection(json, this.config);\n });\n }\n}\n//# sourceMappingURL=User.js.map", "import { Agent } from \"./Agent.js\";\nimport { BotResponse } from \"./BotResponse.js\";\nimport { BotResponseType } from \"./Enums.js\";\nimport { User } from \"./User.js\";\n/**\n *\n * This class defines an Event from a [[Book]].\n *\n * An event is an object that represents an action (such as posting or deleting a [[Transaction]]) made by an actor (such as a user or a [Bot](https://bkper.com/apps) acting on behalf of a user).\n *\n * @public\n */\nexport class Event {\n constructor(book, payload) {\n this.book = book;\n this.payload = payload || {};\n }\n /**\n * Gets an immutable copy of the JSON payload for this Event.\n *\n * @returns The wrapped plain json object\n */\n json() {\n return Object.assign({}, this.payload);\n }\n /**\n * Gets the book in which the Event was created.\n *\n * @returns The book in which the Event was created\n */\n getBook() {\n return this.book;\n }\n /**\n * Gets the id of the Event.\n *\n * @returns The id of the Event\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the user who performed the Event.\n *\n * @returns The user who performed the Event\n */\n getUser() {\n return this.payload.user ? new User(this.payload.user, this.book.getConfig()) : undefined;\n }\n /**\n * Gets the Agent who performed the Event.\n *\n * @returns The Agent who performed the Event\n */\n getAgent() {\n return this.payload.agent ? new Agent(this.payload.agent) : undefined;\n }\n /**\n * Gets the date the Event was created.\n *\n * @returns The date the Event was created\n */\n getCreatedAt() {\n return this.payload.createdAt ? new Date(new Number(this.payload.createdAt).valueOf()) : undefined;\n }\n /**\n * Gets the type of the Event.\n *\n * @returns The type of the Event\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Gets the Bot Responses associated to this Event.\n *\n * @returns The Bot Responses associated to this Event\n */\n getBotResponses() {\n if (this.botResponses !== undefined) {\n return this.botResponses;\n }\n let botResponses = [];\n if (this.payload.botResponses) {\n for (const botResponse of this.payload.botResponses) {\n botResponses.push(new BotResponse(this, botResponse));\n }\n }\n this.botResponses = botResponses;\n return this.botResponses;\n }\n /**\n * Checks if this Event has at least one Bot Response of type ERROR.\n *\n * @returns True if this Event has at least one Bot Response of type ERROR\n */\n hasErrorResponse() {\n const botResponses = this.getBotResponses();\n for (const botResponse of botResponses) {\n if (botResponse.getType() === BotResponseType.ERROR) {\n return true;\n }\n }\n return false;\n }\n /** @internal */\n clearCache() {\n this.botResponses = undefined;\n }\n}\n//# sourceMappingURL=Event.js.map", "import { Event } from \"./Event.js\";\n/**\n * A list associated with an event query.\n *\n * @public\n */\nexport class EventList {\n constructor(book, payload) {\n this.book = book;\n this.payload = payload || {};\n }\n /**\n * Gets the cursor associated with the query for pagination.\n *\n * @returns The cursor associated with the query for pagination\n */\n getCursor() {\n return this.payload.cursor;\n }\n /**\n * Gets the first Event in the list.\n *\n * @returns The first Event in the list\n */\n getFirst() {\n const events = this.getItems();\n return events.length > 0 ? events[0] : undefined;\n }\n /**\n * Get the total number of events in the list.\n *\n * @returns The total number of events\n */\n size() {\n var _a;\n return ((_a = this.payload.items) === null || _a === void 0 ? void 0 : _a.length) || 0;\n }\n /**\n * Get the events in the list.\n *\n * @returns An array of Event objects\n */\n getItems() {\n var _a;\n return ((_a = this.payload.items) === null || _a === void 0 ? void 0 : _a.map(event => new Event(this.book, event))) || [];\n }\n}\n//# sourceMappingURL=EventList.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as FileService from \"../service/file-service.js\";\nimport { ResourceProperty } from \"./ResourceProperty.js\";\n/**\n *\n * This class defines a File uploaded to a [[Book]].\n *\n * A File can be attached to a [[Transaction]] or used to import data.\n *\n * @public\n */\nexport class File extends ResourceProperty {\n constructor(book, payload) {\n super(payload || { createdAt: `${Date.now()}` });\n this.book = book;\n }\n /**\n * Gets the Book this File belongs to.\n *\n * @returns The Book instance that owns this File\n */\n getBook() {\n return this.book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the File id.\n *\n * @returns The File id\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the File name.\n *\n * @returns The File name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the File.\n *\n * @param name - The name to set\n *\n * @returns This File, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Gets the File content type.\n *\n * @returns The File content type\n */\n getContentType() {\n return this.payload.contentType;\n }\n /**\n * Sets the File content type.\n *\n * @param contentType - The content type to set\n *\n * @returns This File, for chaining\n */\n setContentType(contentType) {\n this.payload.contentType = contentType;\n return this;\n }\n /**\n * Gets the file content Base64 encoded.\n *\n * @returns The file content Base64 encoded\n */\n getContent() {\n return __awaiter(this, void 0, void 0, function* () {\n const id = this.getId();\n if (this.getId() != null &&\n (this.payload == null || this.payload.content == null) &&\n this.book &&\n id) {\n this.payload = yield FileService.getFile(this.book.getId(), id, this.getConfig());\n }\n return this.payload.content;\n });\n }\n /**\n * Sets the File content Base64 encoded.\n *\n * @param content - The content to set (Base64 encoded)\n *\n * @returns This File, for chaining\n */\n setContent(content) {\n this.payload.content = content;\n return this;\n }\n /**\n * Gets the file serving url for accessing via browser.\n *\n * @returns The file serving url\n */\n getUrl() {\n return this.payload.url;\n }\n /**\n * Gets the file size in bytes.\n *\n * @returns The file size in bytes\n */\n getSize() {\n return this.payload.size;\n }\n /**\n * Perform create new File.\n *\n * @returns The created File object\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield FileService.createFile(this.book.getId(), this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Perform update File, applying pending changes.\n *\n * @returns The updated File object\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield FileService.updateFile(this.book.getId(), this.payload, this.getConfig());\n return this;\n });\n }\n}\n//# sourceMappingURL=File.js.map", "import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n", "let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n", "const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { File } from './File.js';\nimport { Account } from './Account.js';\nimport { ResourceProperty } from './ResourceProperty.js';\nimport { TransactionStatus } from './Enums.js';\nimport * as TransactionService from '../service/transaction-service.js';\nimport * as Utils from '../utils.js';\nimport { Amount } from './Amount.js';\nimport { v4 as uuidv4 } from 'uuid';\n/**\n *\n * This class defines a Transaction between [credit and debit](http://en.wikipedia.org/wiki/Debits_and_credits) [[Accounts]].\n *\n * A Transaction is the main entity on the [Double Entry](http://en.wikipedia.org/wiki/Double-entry_bookkeeping_system) [Bookkeeping](http://en.wikipedia.org/wiki/Bookkeeping) system.\n *\n * @public\n */\nexport class Transaction extends ResourceProperty {\n constructor(book, payload) {\n super(payload || { createdAt: `${Date.now()}` });\n /** @internal */\n this.pendingFiles = new Map();\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the book associated with this transaction.\n *\n * @returns The book of the Transaction\n */\n getBook() {\n return this.book;\n }\n /**\n * Gets the unique identifier of the transaction.\n *\n * @returns The id of the Transaction\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the unique identifier of the agent that created this transaction.\n *\n * @returns The id of the agent that created this transaction\n */\n getAgentId() {\n return this.payload.agentId;\n }\n /**\n * Gets the name of the agent that created this transaction.\n *\n * @returns The name of the agent that created this transaction\n */\n getAgentName() {\n return this.payload.agentName;\n }\n /**\n * Gets the logo URL of the agent that created this transaction.\n *\n * @returns The logo of the agent that created this transaction\n */\n getAgentLogoUrl() {\n return this.payload.agentLogo;\n }\n /**\n * Gets the dark mode logo URL of the agent that created this transaction.\n *\n * @returns The logo of the agent that created this transaction in dark mode\n */\n getAgentLogoUrlDark() {\n return this.payload.agentLogoDark;\n }\n /**\n * Gets the remote IDs associated with this transaction. Remote ids are used to avoid duplication.\n *\n * @returns The remote ids of the Transaction\n */\n getRemoteIds() {\n return this.payload.remoteIds || [];\n }\n /**\n * Add a remote id to the Transaction.\n *\n * @param remoteId - The remote id to add\n *\n * @returns This Transaction, for chaining\n */\n addRemoteId(remoteId) {\n if (this.payload.remoteIds == null) {\n this.payload.remoteIds = [];\n }\n if (remoteId) {\n this.payload.remoteIds.push(remoteId);\n }\n return this;\n }\n /**\n * Checks if the transaction has been posted to the accounts.\n *\n * @returns True if transaction was already posted to the accounts. False if is still a Draft\n */\n isPosted() {\n return this.payload.posted;\n }\n /**\n * Checks if the transaction is marked as checked.\n *\n * @returns True if transaction is checked\n */\n isChecked() {\n return this.payload.checked;\n }\n /**\n * Set the check state of the Transaction.\n *\n * @param checked - The check state\n *\n * @returns This Transaction, for chaining\n */\n setChecked(checked) {\n this.payload.checked = checked;\n return this;\n }\n /**\n * Checks if the transaction is in the trash.\n *\n * @returns True if transaction is in trash\n */\n isTrashed() {\n return this.payload.trashed;\n }\n /**\n * Checks if the transaction is locked by the book's lock or closing date.\n *\n * @returns True if a transaction is locked by the book lock/closing date\n */\n isLocked() {\n const date = this.getDate() || Utils.formatDateISO(new Date(), this.book.getTimeZone());\n const lockOrClosingDate = this.book.getMostRecentLockDate_();\n return (lockOrClosingDate != null &&\n Utils.getIsoDateValue(lockOrClosingDate) >= Utils.getIsoDateValue(date));\n }\n /**\n * Gets the status of the transaction.\n *\n * @returns The status of the Transaction\n */\n getStatus() {\n if (this.isTrashed()) {\n return TransactionStatus.TRASHED;\n }\n if (!this.isPosted()) {\n return TransactionStatus.DRAFT;\n }\n if (this.isChecked()) {\n return TransactionStatus.CHECKED;\n }\n return TransactionStatus.UNCHECKED;\n }\n /**\n * Gets all hashtags used in the transaction.\n *\n * @returns All #hashtags used on the transaction\n */\n getTags() {\n if (this.payload.tags && this.payload.tags.length > 0) {\n return this.payload.tags;\n }\n const description = this.getDescription();\n if (description && description.includes('#')) {\n return Utils.extractTagsFromText(description);\n }\n return [];\n }\n /**\n * Gets all URLs associated with the transaction.\n *\n * @returns All urls of the transaction\n */\n getUrls() {\n return this.payload.urls || [];\n }\n /**\n * Sets the Transaction urls. Url starts with https://\n *\n * @param urls - The urls array\n *\n * @returns This Transaction, for chaining\n */\n setUrls(urls) {\n this.payload.urls = undefined;\n if (urls) {\n urls.forEach(url => {\n this.addUrl(url);\n });\n }\n return this;\n }\n /**\n * Add a url to the Transaction. Url starts with https://\n *\n * @param url - The url to add\n *\n * @returns This Transaction, for chaining\n */\n addUrl(url) {\n if (this.payload.urls == null) {\n this.payload.urls = [];\n }\n if (url) {\n this.payload.urls.push(url);\n }\n return this;\n }\n /**\n * Gets all files attached to the transaction.\n *\n * @returns The files attached to the transaction\n */\n getFiles() {\n if (this.payload.files && this.payload.files.length > 0) {\n const files = this.payload.files.map(file => new File(this.book, file));\n return files;\n }\n else {\n return [];\n }\n }\n /**\n * Removes a file attachment from the Transaction.\n *\n * @param file - The File to remove from this Transaction\n *\n * @returns This Transaction, for chaining\n */\n removeFile(file) {\n const fileId = file.getId();\n if (fileId) {\n if (this.payload.files != null) {\n this.payload.files = this.payload.files.filter(f => f.id !== fileId);\n }\n this.pendingFiles.delete(fileId);\n }\n return this;\n }\n /**\n * Adds a file attachment to the Transaction.\n *\n * Files not previously created in the Book will be automatically created when the transaction is persisted.\n *\n * @param file - The File to add to this Transaction\n *\n * @returns This Transaction, for chaining\n */\n addFile(file) {\n var _a;\n if (this.payload.files == null) {\n this.payload.files = [];\n }\n // Store file reference for later creation if needed\n const fileId = file.getId();\n const fileBookId = (_a = file.getBook()) === null || _a === void 0 ? void 0 : _a.getId();\n if (fileId == null || fileBookId != this.book.getId()) {\n // Generate temporary ID if file doesn't have one\n if (fileId == null) {\n file.payload.id = `temporary_${uuidv4()}`;\n }\n this.pendingFiles.set(file.getId(), file);\n }\n this.payload.files.push(file.json());\n return this;\n }\n /** @internal */\n createPendingFiles() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.pendingFiles.size === 0) {\n return;\n }\n if (this.payload.files == null) {\n this.payload.files = [];\n }\n // Create all pending files in parallel\n const promises = Array.from(this.pendingFiles.entries()).map((_a) => __awaiter(this, [_a], void 0, function* ([fileId, file]) {\n file.book = this.book;\n file.setProperty('upload_method', 'attachment');\n const createdFile = yield file.create();\n return { fileId, createdFile };\n }));\n const results = yield Promise.all(promises);\n // Update payload with all created files\n for (const { fileId, createdFile } of results) {\n const fileIndex = this.payload.files.findIndex(f => f.id === fileId);\n if (fileIndex >= 0) {\n this.payload.files[fileIndex] = createdFile.json();\n }\n else {\n this.payload.files.push(createdFile.json());\n }\n }\n // Clear pending files after creation\n this.pendingFiles.clear();\n });\n }\n /**\n * Check if the transaction has the specified tag.\n *\n * @param tag - The tag to check for\n *\n * @returns True if the transaction has the specified tag\n */\n hasTag(tag) {\n var tags = this.getTags();\n for (var i = 0; i < tags.length; i++) {\n if (tags[i] == tag) {\n return true;\n }\n }\n return false;\n }\n /**\n * Gets the credit account associated with this Transaction. Same as origin account\n *\n * @returns The credit (origin) account\n */\n getCreditAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.payload.creditAccount) {\n return undefined;\n }\n return yield this.book.getAccount(this.payload.creditAccount.id);\n });\n }\n /**\n * Gets the name of this Transaction's credit account.\n *\n * @returns The credit account name\n */\n getCreditAccountName() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if ((yield this.getCreditAccount()) != null) {\n return (_a = (yield this.getCreditAccount())) === null || _a === void 0 ? void 0 : _a.getName();\n }\n else {\n return '';\n }\n });\n }\n /**\n * Sets the credit/origin [[Account]] of this Transaction. Same as from()\n *\n * @param account - The Account object, or null/undefined to clear\n *\n * @returns This Transaction, for chaining\n */\n setCreditAccount(account) {\n if (account == null) {\n this.payload.creditAccount = undefined;\n return this;\n }\n if (account instanceof Account) {\n if (account.getId() != null) {\n this.payload.creditAccount = account.json();\n }\n }\n else {\n if (account.id != null) {\n this.payload.creditAccount = account;\n }\n }\n return this;\n }\n /**\n * Sets the credit/origin [[Account]] of this Transaction. Same as setCreditAccount()\n *\n * @param account - The Account object, or null/undefined to clear\n *\n * @returns This Transaction, for chaining\n */\n from(account) {\n return this.setCreditAccount(account);\n }\n /**\n * Gets the debit account associated with this Transaction. Same as destination account\n *\n * @returns The debit (destination) account\n */\n getDebitAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.payload.debitAccount) {\n return undefined;\n }\n return yield this.book.getAccount(this.payload.debitAccount.id);\n });\n }\n /**\n * Gets the name of this Transaction's debit account.\n *\n * @returns The debit account name\n */\n getDebitAccountName() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if ((yield this.getDebitAccount()) != null) {\n return (_a = (yield this.getDebitAccount())) === null || _a === void 0 ? void 0 : _a.getName();\n }\n else {\n return '';\n }\n });\n }\n /**\n * Sets the debit/destination [[Account]] of this Transaction. Same as to()\n *\n * @param account - The Account object, or null/undefined to clear\n *\n * @returns This Transaction, for chaining\n */\n setDebitAccount(account) {\n if (account == null) {\n this.payload.debitAccount = undefined;\n return this;\n }\n if (account instanceof Account) {\n if (account.getId() != null) {\n this.payload.debitAccount = { id: account.getId(), name: account.getName() };\n }\n }\n else {\n if (account.id != null) {\n this.payload.debitAccount = { id: account.id, name: account.name };\n }\n }\n return this;\n }\n /**\n * Sets the debit/destination [[Account]] of this Transaction. Same as setDebitAccount()\n *\n * @param account - The Account object, or null/undefined to clear\n *\n * @returns This Transaction, for chaining\n */\n to(account) {\n return this.setDebitAccount(account);\n }\n /**\n * Gets the amount of this Transaction.\n *\n * @returns The amount of this Transaction\n */\n getAmount() {\n return this.payload.amount != null && this.payload.amount.trim() != ''\n ? new Amount(this.payload.amount)\n : undefined;\n }\n /**\n * Gets the formatted amount of this Transaction according to the Book format.\n *\n * @returns The amount of this Transaction, formatted according to the Book format\n */\n getAmountFormatted() {\n const amount = this.getAmount();\n if (amount) {\n return this.book.formatValue(amount);\n }\n return undefined;\n }\n /**\n * Sets the amount of this Transaction.\n *\n * @param amount - The amount to set\n *\n * @returns This Transaction, for chaining\n */\n setAmount(amount) {\n if (typeof amount == 'string') {\n amount = Utils.parseValue(amount, this.book.getDecimalSeparator()) + '';\n this.payload.amount = amount.toString();\n return this;\n }\n amount = new Amount(amount);\n if (amount.eq(0)) {\n this.payload.amount = undefined;\n return this;\n }\n this.payload.amount = amount.abs().toString();\n return this;\n }\n /**\n * Get the absolute amount of this Transaction if the given account is at the credit side.\n *\n * @param account - The account object, id or name\n *\n * @returns The credit amount or undefined\n */\n getCreditAmount(account) {\n return __awaiter(this, void 0, void 0, function* () {\n let accountObject = yield this.getAccount_(account);\n if (yield this.isCredit(accountObject)) {\n return this.getAmount();\n }\n return undefined;\n });\n }\n /**\n * Gets the absolute amount of this Transaction if the given account is at the debit side.\n *\n * @param account - The account object, id or name\n *\n * @returns The debit amount or undefined\n */\n getDebitAmount(account) {\n return __awaiter(this, void 0, void 0, function* () {\n let accountObject = yield this.getAccount_(account);\n if (yield this.isDebit(accountObject)) {\n return this.getAmount();\n }\n return undefined;\n });\n }\n /**\n * Gets the [[Account]] at the other side of the transaction given the one in one side.\n *\n * @param account - The account object, id or name\n *\n * @returns The account at the other side of the transaction\n */\n getOtherAccount(account) {\n return __awaiter(this, void 0, void 0, function* () {\n let accountObject = yield this.getAccount_(account);\n if (yield this.isCredit(accountObject)) {\n return yield this.getDebitAccount();\n }\n if (yield this.isDebit(accountObject)) {\n return yield this.getCreditAccount();\n }\n return undefined;\n });\n }\n /**\n * The Account name at the other side of this Transaction given the one in one side.\n *\n * @param account - The Account object, id or name\n *\n * @returns The name of the Account at the other side\n */\n getOtherAccountName(account) {\n return __awaiter(this, void 0, void 0, function* () {\n var otherAccount = yield this.getOtherAccount(account);\n if (otherAccount != null) {\n return otherAccount.getName();\n }\n else {\n return '';\n }\n });\n }\n /**\n * Tell if the given account is credit on this Transaction\n *\n * @param account - The Account object\n *\n * @returns True if the account is the credit account\n */\n isCredit(account) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n return ((yield this.getCreditAccount()) != null &&\n account != null &&\n ((_a = (yield this.getCreditAccount())) === null || _a === void 0 ? void 0 : _a.getNormalizedName()) == account.getNormalizedName());\n });\n }\n /**\n * Tell if the given account is debit on the Transaction\n *\n * @param account - The [[Account]] object\n *\n * @returns True if the Account is the debit account\n */\n isDebit(account) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n return ((yield this.getDebitAccount()) != null &&\n account != null &&\n ((_a = (yield this.getDebitAccount())) === null || _a === void 0 ? void 0 : _a.getNormalizedName()) == account.getNormalizedName());\n });\n }\n /** @internal */\n getAccount_(account) {\n return __awaiter(this, void 0, void 0, function* () {\n if (account == null || account instanceof Account) {\n return account;\n }\n return yield this.book.getAccount(account);\n });\n }\n /**\n * Gets the description of this Transaction.\n *\n * @returns The description of this Transaction\n */\n getDescription() {\n if (this.payload.description == null) {\n return '';\n }\n return this.payload.description;\n }\n /**\n * Sets the description of the Transaction.\n *\n * @param description - The description to set\n *\n * @returns This Transaction, for chaining\n */\n setDescription(description) {\n this.payload.description = description;\n return this;\n }\n /**\n * Gets the transaction date in ISO format.\n *\n * @returns The Transaction date, in ISO format yyyy-MM-dd\n */\n getDate() {\n return this.payload.date;\n }\n /**\n * Sets the date of the Transaction.\n *\n * @param date - The date to set as string or Date object\n *\n * @returns This Transaction, for chaining\n */\n setDate(date) {\n if (typeof date == 'string') {\n if (date.indexOf('/') > 0) {\n let dateObject = Utils.parseDate(date, this.book.getDatePattern(), this.book.getTimeZone());\n this.payload.date = Utils.formatDateISO(dateObject, this.book.getTimeZone());\n }\n else if (date.indexOf('-') >= 0) {\n this.payload.date = date;\n }\n }\n else if (Object.prototype.toString.call(date) === '[object Date]') {\n this.payload.date = Utils.formatDateISO(date, this.book.getTimeZone());\n }\n return this;\n }\n /**\n * Gets the transaction date as a Date object in the book's timezone.\n *\n * @returns The Transaction Date object, on the time zone of the [[Book]]\n */\n getDateObject() {\n return Utils.convertValueToDate(this.getDateValue(), this.book.getTimeZoneOffset());\n }\n /**\n * Gets the transaction date as a numeric value.\n *\n * @returns The Transaction date number, in format YYYYMMDD\n */\n getDateValue() {\n return this.payload.dateValue;\n }\n /**\n * Gets the transaction date formatted according to the book's date pattern.\n *\n * @returns The Transaction date, formatted on the date pattern of the [[Book]]\n */\n getDateFormatted() {\n return this.payload.dateFormatted;\n }\n /**\n * Gets the date when the transaction was created.\n *\n * @returns The date the transaction was created\n */\n getCreatedAt() {\n return new Date(new Number(this.payload.createdAt).valueOf());\n }\n /**\n * Gets the formatted creation date of the transaction.\n *\n * @returns The date the transaction was created, formatted according to the date pattern of the [[Book]]\n */\n getCreatedAtFormatted() {\n return Utils.formatDate(this.getCreatedAt(), this.book.getDatePattern() + ' HH:mm:ss', this.book.getTimeZone());\n }\n /**\n * Gets the username of the user who created the transaction.\n *\n * @returns The username of the user who created the transaction\n */\n getCreatedBy() {\n return this.payload.createdBy;\n }\n /**\n * Gets the date when the transaction was last updated.\n *\n * @returns The date the transaction was last updated\n */\n getUpdatedAt() {\n return new Date(new Number(this.payload.updatedAt).valueOf());\n }\n /**\n * Gets the formatted last update date of the transaction.\n *\n * @returns The date the transaction was last updated, formatted according to the date pattern of the [[Book]]\n */\n getUpdatedAtFormatted() {\n return Utils.formatDate(this.getUpdatedAt(), this.book.getDatePattern() + ' HH:mm:ss', this.book.getTimeZone());\n }\n /** @internal */\n getCaEvolvedBalance_() {\n return this.payload.creditAccount != null && this.payload.creditAccount.balance != null\n ? new Amount(this.payload.creditAccount.balance)\n : undefined;\n }\n /** @internal */\n getDaEvolvedBalance_() {\n return this.payload.debitAccount != null && this.payload.debitAccount.balance != null\n ? new Amount(this.payload.debitAccount.balance)\n : undefined;\n }\n /**\n * Gets the balance that the [[Account]] has at that day, when listing transactions of that Account.\n *\n * Evolved balances is returned when searching for transactions of a permanent [[Account]].\n *\n * Only comes with the last posted transaction of the day.\n *\n * @param raw - True to get the raw balance, no matter the credit nature of the [[Account]]\n *\n * @returns The account balance at the transaction date\n */\n getAccountBalance(raw) {\n return __awaiter(this, void 0, void 0, function* () {\n var accountBalance = this.getCaEvolvedBalance_();\n var isCa = true;\n if (accountBalance == null) {\n accountBalance = this.getDaEvolvedBalance_();\n isCa = false;\n }\n if (accountBalance != null) {\n if (!raw) {\n var account = isCa ? yield this.getCreditAccount() : yield this.getDebitAccount();\n accountBalance = Utils.getRepresentativeValue(accountBalance, account === null || account === void 0 ? void 0 : account.isCredit());\n }\n return Utils.round(accountBalance, this.book.getFractionDigits());\n }\n else {\n return undefined;\n }\n });\n }\n /**\n * Perform create new draft transaction.\n *\n * @returns This Transaction, for chaining\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.createPendingFiles();\n let operation = yield TransactionService.createTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload = operation.transaction || {};\n return this;\n });\n }\n /**\n * Update transaction, applying pending changes.\n *\n * @returns This Transaction, for chaining\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.createPendingFiles();\n let operation = yield TransactionService.updateTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload = operation.transaction || {};\n return this;\n });\n }\n /**\n * Perform check transaction.\n *\n * @returns This Transaction, for chaining\n */\n check() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let operation = yield TransactionService.checkTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload.checked = (_a = operation.transaction) === null || _a === void 0 ? void 0 : _a.checked;\n return this;\n });\n }\n /**\n * Perform uncheck transaction.\n *\n * @returns This Transaction, for chaining\n */\n uncheck() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let operation = yield TransactionService.uncheckTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload.checked = (_a = operation.transaction) === null || _a === void 0 ? void 0 : _a.checked;\n return this;\n });\n }\n /**\n * Perform post transaction, changing credit and debit [[Account]] balances.\n *\n * @returns This Transaction, for chaining\n */\n post() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.createPendingFiles();\n let operation = yield TransactionService.postTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload = operation.transaction || {};\n return this;\n });\n }\n /**\n * Trash the transaction.\n *\n * @returns This Transaction, for chaining\n */\n trash() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let operation = yield TransactionService.trashTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload.trashed = (_a = operation.transaction) === null || _a === void 0 ? void 0 : _a.trashed;\n return this;\n });\n }\n /**\n * Untrash the transaction.\n *\n * @returns This Transaction, for chaining\n */\n untrash() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let operation = yield TransactionService.restoreTransaction(this.book.getId(), this.payload, this.getConfig());\n this.payload.trashed = (_a = operation.transaction) === null || _a === void 0 ? void 0 : _a.trashed;\n return this;\n });\n }\n}\n//# sourceMappingURL=Transaction.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Transaction } from \"./Transaction.js\";\n/**\n * A list associated with a transaction query.\n *\n * @public\n */\nexport class TransactionList {\n constructor(book, payload) {\n this.book = book;\n this.payload = payload || {};\n }\n /**\n * Gets the cursor associated with the query for pagination.\n *\n * @returns The cursor associated with the query for pagination\n */\n getCursor() {\n return this.payload.cursor;\n }\n /**\n * Retrieves the account associated with the query, when filtering by account.\n *\n * @returns The account associated with the query, or undefined if not set\n */\n getAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.payload.account) {\n return undefined;\n }\n return yield this.book.getAccount(this.payload.account);\n });\n }\n /**\n * Gets the first Transaction in the list.\n *\n * @returns The first Transaction in the list\n */\n getFirst() {\n const transactions = this.getItems();\n return transactions.length > 0 ? transactions[0] : undefined;\n }\n /**\n * Gets the total number of transactions in the list.\n *\n * @returns The total number of transactions\n */\n size() {\n var _a;\n return ((_a = this.payload.items) === null || _a === void 0 ? void 0 : _a.length) || 0;\n }\n /**\n * Gets the transactions in the list.\n *\n * @returns An array of Transaction objects\n */\n getItems() {\n var _a;\n let transactions = [];\n for (let transaction of (_a = this.payload.items) !== null && _a !== void 0 ? _a : []) {\n transactions.push(new Transaction(this.book, transaction));\n }\n return transactions;\n }\n}\n//# sourceMappingURL=TransactionList.js.map", "import * as Utils from '../utils.js';\nimport { Amount } from \"./Amount.js\";\n/**\n * Class that represents an [[Account]] or [[Group]] balance on a window of time (Day / Month / Year).\n *\n * @public\n */\nexport class Balance {\n constructor(container, balancePlain) {\n this.container = container;\n this.payload = balancePlain;\n }\n /**\n * The day of the balance. Days starts on 1 to 31.\n *\n * Day can be 0 (zero) in case of Monthly or Early [[Periodicity]] of the [[BalancesReport]]\n */\n getDay() {\n return this.payload.day;\n }\n /**\n * The month of the balance. Months starts on 1 (January) to 12 (December)\n *\n * Month can be 0 (zero) in case of Early [[Periodicity]] of the [[BalancesReport]]\n */\n getMonth() {\n return this.payload.month;\n }\n /**\n * The year of the balance\n */\n getYear() {\n return this.payload.year;\n }\n /**\n * Date object constructed based on [[Book]] time zone offset. Usefull for\n *\n * If Month or Day is zero, the date will be constructed with first Month (January) or Day (1) of the next period.\n */\n getDate() {\n var year = this.getYear();\n var month = this.getMonth();\n var day = this.getDay();\n if (month == null || month == 0) {\n year++;\n }\n if (day == null || day == 0) {\n month++;\n }\n var date = Utils.createDate(year, month, day, this.container.getBalancesReport().getBook().getTimeZoneOffset());\n return date;\n }\n /**\n * The Fuzzy Date of the balance, based on [[Periodicity]] of the [[BalancesReport]] query, composed by Year, Month and Day.\n *\n * The format is **YYYYMMDD**. Very usefull for ordering and indexing\n *\n * Month and Day can be 0 (zero), depending on the granularity of the [[Periodicity]].\n *\n * *Example:*\n *\n * **20180125** - 25, January, 2018 - DAILY Periodicity\n *\n * **20180100** - January, 2018 - MONTHLY Periodicity\n *\n * **20180000** - 2018 - YEARLY Periodicity\n */\n getFuzzyDate() {\n return this.payload.fuzzyDate;\n }\n /**\n * The cumulative balance to the date, based on the credit nature of the container\n */\n getCumulativeBalance() {\n return Utils.getRepresentativeValue(this.getCumulativeBalanceRaw(), this.container.isCredit());\n }\n /**\n * The raw cumulative balance to the date.\n */\n getCumulativeBalanceRaw() {\n return new Amount(this.payload.cumulativeBalance);\n }\n /**\n * The cumulative credit to the date.\n */\n getCumulativeCredit() {\n return new Amount(this.payload.cumulativeCredit);\n }\n /**\n * The cumulative debit to the date.\n */\n getCumulativeDebit() {\n return new Amount(this.payload.cumulativeDebit);\n }\n /**\n * The balance on the date period, based on credit nature of the container.\n */\n getPeriodBalance() {\n return Utils.getRepresentativeValue(this.getPeriodBalanceRaw(), this.container.isCredit());\n }\n /**\n * The raw balance on the date period.\n */\n getPeriodBalanceRaw() {\n return new Amount(this.payload.periodBalance);\n }\n /**\n * The credit on the date period.\n */\n getPeriodCredit() {\n return new Amount(this.payload.periodCredit);\n }\n /**\n * The debit on the date period.\n */\n getPeriodDebit() {\n return new Amount(this.payload.periodDebit);\n }\n}\n//# sourceMappingURL=Balance.js.map", "import { Amount } from '../model/Amount.js';\nimport { BalanceType } from '../model/Enums.js';\nimport * as Utils from '../utils.js';\n/**\n * A BalancesDataTableBuilder is used to setup and build two-dimensional arrays containing balance information.\n *\n * @public\n */\nexport class BalancesDataTableBuilder {\n constructor(book, balancesContainers, periodicity) {\n this.maxDepth = 0;\n this.expandAllAccounts = false;\n this.expandAllGroups = false;\n this.skipRoot = false;\n this.book = book;\n this.balancesContainers = balancesContainers;\n this.periodicity = periodicity;\n this.balanceType = BalanceType.TOTAL;\n this.shouldFormatDate = false;\n this.shouldHideDates = false;\n this.shouldHideNames = false;\n this.shouldFormatValue = false;\n this.shouldTranspose = false;\n this.shouldTrial = false;\n this.shouldPeriod = false;\n this.shouldRaw = false;\n this.shouldAddProperties = false;\n this.shouldAddHiddenProperties = false;\n }\n getBalance(balance, permanent) {\n return this.getRepresentativeBalance(balance, permanent).toNumber();\n }\n getRepresentativeBalance(balance, permanent) {\n if (balance == null) {\n return new Amount(0);\n }\n if (permanent) {\n return balance.times(-1);\n }\n return balance;\n }\n getBalanceText(balance, permanent) {\n return this.book.formatValue(this.getRepresentativeBalance(balance, permanent));\n }\n /**\n * Defines whether the dates should be ISO formatted YYYY-MM-DD. E.g. 2025-01-01\n *\n * @returns This builder with respective formatting option, for chaining.\n */\n formatDates(format) {\n this.shouldFormatDate = format;\n return this;\n }\n /**\n * Defines whether the value should be formatted based on decimal separator of the [[Book]].\n *\n * @returns This builder with respective formatting option, for chaining.\n */\n formatValues(format) {\n this.shouldFormatValue = format;\n return this;\n }\n /**\n * Defines whether Groups should expand its child accounts.\n *\n * true to expand itself\n * -1 to expand all subgroups\n * -2 to expand all accounts\n * 0 to expand nothing\n * 1 to expand itself and its first level of children\n * 2 to expand itself and its first two levels of children\n * etc.\n *\n * @returns This builder with respective expanded option, for chaining.\n */\n expanded(expanded) {\n if (typeof expanded == 'boolean' && expanded == true) {\n this.maxDepth = 1;\n this.skipRoot = true;\n }\n else if (expanded == -1) {\n this.expandAllGroups = true;\n }\n else if (expanded == -2) {\n this.expandAllAccounts = true;\n }\n else if (typeof expanded == 'number' && expanded > 0) {\n this.maxDepth = expanded;\n }\n return this;\n }\n /**\n * Fluent method to set the [[BalanceType]] for the builder.\n *\n * @param type - The type of balance for this data table\n *\n * For **TOTAL** [[BalanceType]], the table format looks like:\n *\n * ```\n * _____________________\n * | Expenses | -4568.23 |\n * | Income | 5678.93 |\n * | ... | ... |\n * |___________|__________|\n *\n * ```\n * Two columns, and each [[Account]] or [[Group]] per line.\n *\n * For **PERIOD** or **CUMULATIVE** [[BalanceType]], the table will be a time table, and the format looks like:\n *\n * ```\n * _______________________________________________________________\n * | | 15/01/2014 | 15/02/2014 | 15/03/2014 | ... |\n * | Expenses | -2345.23 | -2345.93 | -2456.45 | ... |\n * | Income | 3452.93 | 3456.46 | 3567.87 | ... |\n * | ... | ... | ... | ... | ... |\n * |____________|____________|____________|____________|___________|\n *\n * ```\n *\n * First column will be the [[Account]] or [[Group]] name, and one column for each Date.\n *\n * @returns This builder with respective balance type, for chaining.\n */\n type(type) {\n this.balanceType = type;\n return this;\n }\n /**\n * Defines whether should rows and columns should be transposed.\n *\n * For **TOTAL** [[BalanceType]], the **transposed** table looks like:\n *\n * ```\n * _____________________________\n * | Expenses | Income | ... |\n * | -4568.23 | 5678.93 | ... |\n * |___________|_________|_______|\n *\n * ```\n * Two rows, and each [[Account]] or [[Group]] per column.\n *\n *\n * For **PERIOD** or **CUMULATIVE** [[BalanceType]], the **transposed** table will be a time table, and the format looks like:\n *\n * ```\n * _______________________________________________________________\n * | | Expenses | Income | ... | ... |\n * | 15/01/2014 | -2345.23 | 3452.93 | ... | ... |\n * | 15/02/2014 | -2345.93 | 3456.46 | ... | ... |\n * | 15/03/2014 | -2456.45 | 3567.87 | ... | ... |\n * | ... | ... | ... | ... | ... |\n * |____________|____________|____________|____________|___________|\n *\n * ```\n *\n * First column will be each Date, and one column for each [[Account]] or [[Group]].\n *\n * @returns This builder with respective transposed option, for chaining.\n */\n transposed(transposed) {\n this.shouldTranspose = transposed;\n return this;\n }\n /**\n * Defines whether the dates should be hidden for **PERIOD** or **CUMULATIVE** [[BalanceType]].\n *\n * @returns This builder with respective hide dates option, for chaining.\n */\n hideDates(hide) {\n this.shouldHideDates = hide;\n return this;\n }\n /**\n * Defines whether the [[Accounts]] and [[Groups]] names should be hidden.\n *\n * @returns This builder with respective hide names option, for chaining.\n */\n hideNames(hide) {\n this.shouldHideNames = hide;\n return this;\n }\n /**\n * Defines whether include custom [[Accounts]] and [[Groups]] properties.\n *\n * @returns This builder with respective include properties option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n /**\n * Defines whether should split **TOTAL** [[BalanceType]] into debit and credit.\n *\n * @returns This builder with respective trial option, for chaining.\n */\n trial(trial) {\n this.shouldTrial = trial;\n return this;\n }\n /**\n * Defines whether should force use of period balances for **TOTAL** [[BalanceType]].\n *\n * @returns This builder with respective trial option, for chaining.\n */\n period(period) {\n this.shouldPeriod = period;\n return this;\n }\n /**\n * Defines whether should show raw balances, no matter the credit nature of the Account or Group.\n *\n * @returns This builder with respective trial option, for chaining.\n */\n raw(raw) {\n this.shouldRaw = raw;\n return this;\n }\n /**\n *\n * Builds an two-dimensional array with the balances.\n *\n */\n build() {\n if (this.balanceType == BalanceType.TOTAL) {\n return this.buildTotalDataTable_();\n }\n else {\n return this.buildTimeDataTable_();\n }\n }\n ////////////////////////\n addPropertyKeys(propertyKeys, container) {\n for (const key of container.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (propertyKeys.indexOf(key) <= -1) {\n propertyKeys.push(key);\n }\n }\n }\n flattenContainers(containersFlat, propertyKeys) {\n for (const container of this.balancesContainers) {\n if (this.expandAllAccounts) {\n this.flattenAllAccounts(container, containersFlat, propertyKeys);\n containersFlat.sort(this.sortContainersFunction);\n }\n else if (container.isFromGroup() && this.expandAllGroups) {\n this.flattenAllGroups(container, containersFlat, propertyKeys);\n }\n else {\n this.flattenMaxDepth(container, containersFlat, propertyKeys);\n }\n }\n }\n flattenAllAccounts(container, containersFlat, propertyKeys) {\n if (container.isFromGroup()) {\n for (const child of container.getBalancesContainers()) {\n this.flattenAllAccounts(child, containersFlat, propertyKeys);\n }\n }\n else {\n containersFlat.push(container);\n if (this.shouldAddProperties) {\n this.addPropertyKeys(propertyKeys, container);\n }\n }\n }\n sortContainersFunction(a, b) {\n let ret = 0;\n if (a.isPermanent() && !b.isPermanent()) {\n ret = -1;\n }\n else if (!a.isPermanent() && b.isPermanent()) {\n ret = 1;\n }\n if (ret == 0) {\n if (a.getParent() && !b.getParent()) {\n ret = -1;\n }\n else if (!a.getParent() && b.getParent()) {\n ret = 1;\n }\n }\n if (ret == 0) {\n ret = getBalanceTypeOrdinal(a) - getBalanceTypeOrdinal(b);\n }\n if (ret == 0) {\n ret = a.getName().toLowerCase().localeCompare(b.getName().toLowerCase());\n }\n function getBalanceTypeOrdinal(bc) {\n // ASSET(true, false, \"asset\"),\n if (bc.isPermanent() && !bc.isCredit()) {\n return 0;\n }\n // LIABILITY(true, true, \"liability\"),\n if (bc.isPermanent() && bc.isCredit()) {\n return 1;\n }\n // INCOMING(false, true, \"incoming\"),\n if (!bc.isPermanent() && bc.isCredit()) {\n return 2;\n }\n if (!bc.isPermanent() && !bc.isCredit()) {\n return 3;\n }\n return 4;\n }\n return ret;\n }\n flattenMaxDepth(container, containersFlat, propertyKeys) {\n let depth = container.getDepth();\n if (depth <= this.maxDepth) {\n if (!this.skipRoot && !this.shouldTranspose) {\n container.payload.name =\n Utils.repeatString(' ', depth * 4) + container.payload.name;\n }\n if (!this.skipRoot || depth != 0) {\n containersFlat.push(container);\n if (this.shouldAddProperties) {\n this.addPropertyKeys(propertyKeys, container);\n }\n }\n const children = container.getBalancesContainers();\n if (children && children.length > 0) {\n children.sort(this.sortContainersFunction);\n for (const child of children) {\n this.flattenMaxDepth(child, containersFlat, propertyKeys);\n }\n }\n }\n }\n flattenAllGroups(container, containersFlat, propertyKeys) {\n if (container.isFromGroup()) {\n if (!this.shouldTranspose) {\n let depth = container.getDepth();\n container.payload.name =\n Utils.repeatString(' ', depth * 4) + container.payload.name;\n }\n containersFlat.push(container);\n if (this.shouldAddProperties) {\n this.addPropertyKeys(propertyKeys, container);\n }\n if (container.hasGroupBalances()) {\n const children = container.getBalancesContainers();\n children.sort(this.sortContainersFunction);\n for (const child of children) {\n this.flattenAllGroups(child, containersFlat, propertyKeys);\n }\n }\n }\n }\n buildTotalDataTable_() {\n var table = new Array();\n if (this.balancesContainers == null) {\n return table;\n }\n this.balancesContainers.sort((a, b) => {\n if (a != null && b != null) {\n return a.getName().toLowerCase().localeCompare(b.getName().toLowerCase());\n }\n return -1;\n });\n let propertyKeys = [];\n let containers = new Array();\n this.flattenContainers(containers, propertyKeys);\n if (this.shouldAddProperties) {\n propertyKeys.sort();\n let header = ['name', 'balance'];\n for (const key of propertyKeys) {\n header.push(key);\n }\n table.push(header);\n }\n for (var i = 0; i < containers.length; i++) {\n var balances = containers[i];\n if (balances != null) {\n var line = new Array();\n var name = balances.getName();\n line.push(name);\n if (this.shouldTrial) {\n if (this.shouldFormatValue) {\n if (this.shouldPeriod) {\n line.push(balances.getPeriodDebitText());\n line.push(balances.getPeriodCreditText());\n }\n else {\n line.push(balances.getCumulativeDebitText());\n line.push(balances.getCumulativeCreditText());\n }\n }\n else {\n if (this.shouldPeriod) {\n line.push(balances.getPeriodDebit().toNumber());\n line.push(balances.getPeriodCredit().toNumber());\n }\n else {\n line.push(balances.getCumulativeDebit().toNumber());\n line.push(balances.getCumulativeCredit().toNumber());\n }\n }\n }\n else {\n if (this.shouldFormatValue) {\n if (this.shouldPeriod) {\n if (this.shouldRaw) {\n line.push(balances.getPeriodBalanceRawText());\n }\n else {\n line.push(this.getBalanceText(balances.getPeriodBalanceRaw(), balances.isPermanent()));\n }\n }\n else {\n if (this.shouldRaw) {\n line.push(balances.getCumulativeBalanceRawText());\n }\n else {\n line.push(this.getBalanceText(balances.getCumulativeBalanceRaw(), balances.isPermanent()));\n }\n }\n }\n else {\n if (this.shouldPeriod) {\n if (this.shouldRaw) {\n line.push(balances.getPeriodBalanceRaw().toNumber());\n }\n else {\n line.push(this.getBalance(balances.getPeriodBalanceRaw(), balances.isPermanent()));\n }\n }\n else {\n if (this.shouldRaw) {\n line.push(balances.getCumulativeBalanceRaw().toNumber());\n }\n else {\n line.push(this.getBalance(balances.getCumulativeBalanceRaw(), balances.isPermanent()));\n }\n }\n }\n }\n if (this.shouldAddProperties) {\n const properties = balances.getProperties();\n for (const key of propertyKeys) {\n let propertyValue = properties[key];\n if (propertyValue) {\n line.push(propertyValue);\n continue;\n }\n line.push('');\n }\n }\n table.push(line);\n }\n }\n if (this.shouldHideNames) {\n table = table.map(row => row.slice(1));\n }\n if (this.shouldTranspose && table.length > 0) {\n table = table[0].map((col, i) => table.map(row => row[i]));\n }\n return table;\n }\n buildTimeDataTable_() {\n var table = new Array();\n var dataIndexMap = new Object();\n var cumulativeBalance = this.balanceType == BalanceType.CUMULATIVE;\n var header = new Array();\n header.push('');\n if (this.balancesContainers == null) {\n return table;\n }\n let propertyKeys = [];\n let containers = new Array();\n this.flattenContainers(containers, propertyKeys);\n for (const container of containers) {\n header.push(container.getName());\n var balances = container.getBalances();\n if (balances != null) {\n for (const balance of balances) {\n var fuzzyDate = balance.getFuzzyDate();\n var indexEntry = dataIndexMap[fuzzyDate];\n if (indexEntry == null) {\n indexEntry = {};\n indexEntry.date = balance.getDate();\n dataIndexMap[fuzzyDate] = indexEntry;\n }\n var amount;\n if (cumulativeBalance) {\n amount = balance.getCumulativeBalanceRaw();\n }\n else {\n amount = balance.getPeriodBalanceRaw();\n }\n indexEntry[container.getName()] = this.shouldRaw\n ? amount\n : this.getRepresentativeBalance(amount, container.isPermanent());\n }\n }\n }\n table.push(header);\n var rows = new Array();\n for (var fuzzy in dataIndexMap) {\n var rowObject = dataIndexMap[fuzzy];\n var row = new Array();\n row.push(rowObject.date);\n for (const container of containers) {\n var amount = rowObject[container.getName()];\n if (amount == null) {\n amount = 'null_amount';\n }\n else {\n amount = new Amount(amount);\n if (this.shouldFormatValue) {\n amount = Utils.formatValue(amount, this.book.getDecimalSeparator(), this.book.getFractionDigits());\n }\n else {\n amount = amount.toNumber();\n }\n }\n row.push(amount);\n }\n rows.push(row);\n }\n rows.sort(function (a, b) {\n return a[0].getTime() - b[0].getTime();\n });\n var lastRow = null;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (i == 0) {\n //first row, all null values will be 0\n for (var j = 1; j < row.length; j++) {\n var cell = row[j];\n if (cell == 'null_amount') {\n var amount = new Amount(0);\n if (this.shouldFormatValue) {\n amount = Utils.formatValue(amount, this.book.getDecimalSeparator(), this.book.getFractionDigits());\n }\n else {\n amount = amount.toNumber();\n }\n row[j] = amount;\n }\n }\n }\n else {\n for (var j = 1; j < row.length; j++) {\n var cell = row[j];\n if (cell == 'null_amount' && cumulativeBalance) {\n if (lastRow) {\n row[j] = lastRow[j];\n }\n }\n else if (cell == 'null_amount') {\n var amount = new Amount(0);\n if (this.shouldFormatValue) {\n amount = Utils.formatValue(amount, this.book.getDecimalSeparator(), this.book.getFractionDigits());\n }\n else {\n amount = amount.toNumber();\n }\n row[j] = amount;\n }\n }\n }\n lastRow = row;\n table.push(row);\n }\n if (this.shouldFormatDate && table.length > 0) {\n // var pattern = Utils.getDateFormatterPattern(this.book.getDatePattern(), this.periodicity);\n for (var j = 1; j < table.length; j++) {\n var row = table[j];\n if (row.length > 0) {\n //first column\n row[0] = Utils.formatDateISO(row[0], this.book.getTimeZone());\n }\n }\n }\n if (this.shouldAddProperties) {\n propertyKeys.sort();\n for (const key of propertyKeys) {\n var propertyRow = [key];\n for (const container of containers) {\n propertyRow.push(container.getProperty(key) || '');\n }\n table.push(propertyRow);\n }\n }\n if (this.shouldHideNames) {\n table.shift();\n }\n if (this.shouldHideDates) {\n table = table.map(row => row.slice(1));\n }\n if (!this.shouldTranspose && table.length > 0) {\n table = table[0].map((col, i) => table.map(row => row[i]));\n }\n return table;\n }\n}\n//# sourceMappingURL=BalancesDataTableBuilder.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { getRepresentativeValue, normalizeName } from '../utils.js';\nimport { Amount } from './Amount.js';\nimport { Balance } from './Balance.js';\nimport { BalancesDataTableBuilder } from '../builders/BalancesDataTableBuilder.js';\n/** @internal */\nexport class AccountBalancesContainer {\n constructor(parent, balancesReport, payload) {\n this.parent = parent;\n this.balancesReport = balancesReport;\n this.payload = payload;\n }\n getBalancesReport() {\n return this.balancesReport;\n }\n getName() {\n return this.payload.name;\n }\n getNormalizedName() {\n return this.payload.normalizedName;\n }\n getGroup() {\n return __awaiter(this, void 0, void 0, function* () {\n return null;\n });\n }\n getAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n const account = yield this.balancesReport.getBook().getAccount(this.getNormalizedName());\n return account || null;\n });\n }\n getParent() {\n return this.parent;\n }\n getDepth() {\n if (this.depth == null) {\n const parent = this.getParent();\n this.depth = parent != null ? parent.getDepth() + 1 : 0;\n }\n return this.depth;\n }\n isCredit() {\n return this.payload.credit;\n }\n isPermanent() {\n return this.payload.permanent || false;\n }\n isFromAccount() {\n return true;\n }\n isFromGroup() {\n return false;\n }\n hasGroupBalances() {\n return false;\n }\n getCumulativeBalance() {\n return getRepresentativeValue(new Amount(this.payload.cumulativeBalance || 0), this.isCredit());\n }\n getCumulativeBalanceRaw() {\n return new Amount(this.payload.cumulativeBalance || 0);\n }\n getCumulativeCredit() {\n return new Amount(this.payload.cumulativeCredit || 0);\n }\n getCumulativeDebit() {\n return new Amount(this.payload.cumulativeDebit || 0);\n }\n getCumulativeBalanceText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeBalance());\n }\n getCumulativeBalanceRawText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeBalanceRaw());\n }\n getCumulativeCreditText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeCredit());\n }\n getCumulativeDebitText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeDebit());\n }\n getPeriodBalance() {\n return getRepresentativeValue(new Amount(this.payload.periodBalance || 0), this.isCredit());\n }\n getPeriodBalanceRaw() {\n return new Amount(this.payload.periodBalance || 0);\n }\n getPeriodCredit() {\n return new Amount(this.payload.periodCredit || 0);\n }\n getPeriodDebit() {\n return new Amount(this.payload.periodDebit || 0);\n }\n getPeriodBalanceText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodBalance());\n }\n getPeriodBalanceRawText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodBalanceRaw());\n }\n getPeriodCreditText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodCredit());\n }\n getPeriodDebitText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodDebit());\n }\n createDataTable() {\n return new BalancesDataTableBuilder(this.balancesReport.getBook(), [this], this.balancesReport.getPeriodicity());\n }\n getBalancesContainers() {\n return [];\n }\n getBalances() {\n if (!this.payload.balances) {\n return new Array();\n }\n return this.payload.balances.map(balancePlain => new Balance(this, balancePlain));\n }\n getProperties() {\n return this.payload.properties != null ? Object.assign({}, this.payload.properties) : {};\n }\n getProperty(...keys) {\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n let value = this.payload.properties != null ? this.payload.properties[key] : null;\n if (value != null && value.trim() != '') {\n return value;\n }\n }\n return undefined;\n }\n getPropertyKeys() {\n let properties = this.getProperties();\n let propertyKeys = [];\n if (properties) {\n for (var key in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, key)) {\n propertyKeys.push(key);\n }\n }\n }\n propertyKeys = propertyKeys.sort();\n return propertyKeys;\n }\n getBalancesContainer(name) {\n const normalizedName = normalizeName(name);\n if (this.getNormalizedName() == normalizedName) {\n return this;\n }\n throw `${name} does not match ${this.getName()}`;\n }\n}\n//# sourceMappingURL=BalancesContainerAccount.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Amount } from './Amount.js';\nimport { getRepresentativeValue, normalizeName } from '../utils.js';\nimport { AccountBalancesContainer } from './BalancesContainerAccount.js';\nimport { Balance } from './Balance.js';\nimport { BalancesDataTableBuilder } from '../builders/BalancesDataTableBuilder.js';\n/** @internal */\nexport class GroupBalancesContainer {\n constructor(parent, balancesReport, payload) {\n this.parent = parent;\n this.balancesReport = balancesReport;\n this.payload = payload;\n }\n getBalancesReport() {\n return this.balancesReport;\n }\n getName() {\n return this.payload.name;\n }\n getNormalizedName() {\n return this.payload.normalizedName;\n }\n getGroup() {\n return __awaiter(this, void 0, void 0, function* () {\n const group = yield this.balancesReport.getBook().getGroup(this.getNormalizedName());\n return group || null;\n });\n }\n getAccount() {\n return __awaiter(this, void 0, void 0, function* () {\n return null;\n });\n }\n getParent() {\n return this.parent;\n }\n getDepth() {\n if (this.depth == null) {\n const parent = this.getParent();\n this.depth = parent != null ? parent.getDepth() + 1 : 0;\n }\n return this.depth;\n }\n isCredit() {\n return this.payload.credit || false;\n }\n isPermanent() {\n return this.payload.permanent || false;\n }\n isFromAccount() {\n return false;\n }\n isFromGroup() {\n return true;\n }\n hasGroupBalances() {\n const groupContainers = this.getGroupContainers();\n return groupContainers != null && groupContainers.length > 0;\n }\n getCumulativeBalance() {\n return getRepresentativeValue(new Amount(this.payload.cumulativeBalance || 0), this.isCredit());\n }\n getCumulativeBalanceRaw() {\n return new Amount(this.payload.cumulativeBalance || 0);\n }\n getCumulativeCredit() {\n return new Amount(this.payload.cumulativeCredit || 0);\n }\n getCumulativeDebit() {\n return new Amount(this.payload.cumulativeDebit || 0);\n }\n getCumulativeBalanceText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeBalance());\n }\n getCumulativeBalanceRawText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeBalanceRaw());\n }\n getCumulativeCreditText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeCredit());\n }\n getCumulativeDebitText() {\n return this.balancesReport.getBook().formatValue(this.getCumulativeDebit());\n }\n getPeriodBalance() {\n return getRepresentativeValue(new Amount(this.payload.periodBalance || 0), this.isCredit());\n }\n getPeriodBalanceRaw() {\n return new Amount(this.payload.periodBalance || 0);\n }\n getPeriodCredit() {\n return new Amount(this.payload.periodCredit || 0);\n }\n getPeriodDebit() {\n return new Amount(this.payload.periodDebit || 0);\n }\n getPeriodBalanceText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodBalance());\n }\n getPeriodBalanceRawText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodBalanceRaw());\n }\n getPeriodCreditText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodCredit());\n }\n getPeriodDebitText() {\n return this.balancesReport.getBook().formatValue(this.getPeriodDebit());\n }\n getBalances() {\n if (!this.payload.balances) {\n return new Array();\n }\n return this.payload.balances.map(balancePlain => new Balance(this, balancePlain));\n }\n createDataTable() {\n return new BalancesDataTableBuilder(this.balancesReport.getBook(), this.getBalancesContainers(), this.balancesReport.getPeriodicity());\n }\n getProperties() {\n return this.payload.properties != null ? Object.assign({}, this.payload.properties) : {};\n }\n getProperty(...keys) {\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n let value = this.payload.properties != null ? this.payload.properties[key] : null;\n if (value != null && value.trim() != '') {\n return value;\n }\n }\n return undefined;\n }\n getPropertyKeys() {\n let properties = this.getProperties();\n let propertyKeys = [];\n if (properties) {\n for (var key in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, key)) {\n propertyKeys.push(key);\n }\n }\n }\n propertyKeys = propertyKeys.sort();\n return propertyKeys;\n }\n getBalancesContainers() {\n let containers = [];\n const groupContainers = this.getGroupContainers();\n if (groupContainers && groupContainers.length > 0) {\n containers = containers.concat(groupContainers);\n }\n const accountContainers = this.getAccountContainers();\n if (accountContainers && accountContainers.length > 0) {\n containers = containers.concat(accountContainers);\n }\n return containers;\n }\n /** @internal */\n getGroupContainers() {\n let groupBalances = this.payload.groupBalances;\n if (this.groupBalances == null && groupBalances != null) {\n this.groupBalances = [];\n for (let i = 0; i < groupBalances.length; i++) {\n const groupBalance = groupBalances[i];\n this.groupBalances.push(new GroupBalancesContainer(this, this.balancesReport, groupBalance));\n }\n }\n return this.groupBalances || [];\n }\n /** @internal */\n getAccountContainers() {\n let accountBalances = this.payload.accountBalances;\n if (this.accountBalances == null && accountBalances != null) {\n this.accountBalances = [];\n for (let i = 0; i < accountBalances.length; i++) {\n const accountBalance = accountBalances[i];\n this.accountBalances.push(new AccountBalancesContainer(this, this.balancesReport, accountBalance));\n }\n }\n return this.accountBalances || [];\n }\n getBalancesContainer(name) {\n var _a;\n const normalizedName = normalizeName(name);\n const rootContainers = this.getBalancesContainers();\n if (rootContainers == null || rootContainers.length === 0) {\n throw `${name} not found on group ${this.getName()}`;\n }\n if (this.balancesContainersMap == null) {\n this.balancesContainersMap = this.fillBalancesContainersMap(new Map(), rootContainers);\n }\n const balancesContainer = (_a = this.balancesContainersMap) === null || _a === void 0 ? void 0 : _a.get(normalizedName);\n if (!balancesContainer) {\n throw `${name} not found on group ${this.getName()}`;\n }\n return balancesContainer;\n }\n /** @internal */\n fillBalancesContainersMap(map, containers) {\n for (let i = 0; i < containers.length; i++) {\n const container = containers[i];\n const normalizedName = container.getNormalizedName();\n if (normalizedName) {\n if (!map.has(normalizedName)) {\n map.set(normalizedName, container);\n }\n }\n const nextContainers = container.getBalancesContainers();\n if (nextContainers && nextContainers.length > 0) {\n this.fillBalancesContainersMap(map, nextContainers);\n }\n }\n return map;\n }\n}\n//# sourceMappingURL=BalancesContainerGroup.js.map", "import { normalizeName } from '../utils.js';\nimport { AccountBalancesContainer } from './BalancesContainerAccount.js';\nimport { GroupBalancesContainer } from './BalancesContainerGroup.js';\nimport { BalancesDataTableBuilder } from '../builders/BalancesDataTableBuilder.js';\n/**\n * Class representing a Balance Report, generated when calling [Book.getBalanceReport](#book_getbalancesreport)\n *\n * @public\n */\nexport class BalancesReport {\n constructor(book, payload) {\n this.book = book;\n this.payload = payload;\n }\n /**\n * Gets the [[Book]] that generated the report.\n *\n * @returns The [[Book]] that generated the report\n */\n getBook() {\n return this.book;\n }\n /**\n * Creates a BalancesDataTableBuilder to generate a two-dimensional array with all [[BalancesContainers]].\n */\n createDataTable() {\n return new BalancesDataTableBuilder(this.book, this.getBalancesContainers(), this.getPeriodicity());\n }\n /**\n * Gets the [[Periodicity]] of the query used to generate the report.\n *\n * @returns The [[Periodicity]] of the query used to generate the report\n */\n getPeriodicity() {\n return this.payload.periodicity;\n }\n /**\n * Gets all [[BalancesContainers]] of the report.\n *\n * @returns All [[BalancesContainers]] of the report\n */\n getBalancesContainers() {\n let containers = [];\n const accountContainers = this.getRootAccountBalancesContainers();\n if (accountContainers != null && accountContainers.length > 0) {\n containers = containers.concat(accountContainers);\n }\n const groupContainers = this.getGroupBalancesContainers();\n if (groupContainers != null && groupContainers.length > 0) {\n containers = containers.concat(groupContainers);\n }\n return containers;\n }\n /**\n * Gets a specific [[BalancesContainer]].\n *\n * @param name - The [[Account]] or [[Group]] name\n *\n * @returns The retrieved [[BalancesContainer]]\n */\n getBalancesContainer(name) {\n var _a;\n const normalizedName = normalizeName(name);\n const rootContainers = this.getBalancesContainers();\n if (rootContainers == null || rootContainers.length === 0) {\n throw `${name} not found`;\n }\n if (this.balancesContainersMap == null) {\n this.balancesContainersMap = this.fillBalancesContainersMap(new Map(), rootContainers);\n }\n const balancesContainer = (_a = this.balancesContainersMap) === null || _a === void 0 ? void 0 : _a.get(normalizedName);\n if (!balancesContainer) {\n throw `${name} not found`;\n }\n return balancesContainer;\n }\n /** @internal */\n getRootAccountBalancesContainers() {\n if (this.accountBalancesContainers == null && this.payload.accountBalances != null) {\n this.accountBalancesContainers = [];\n for (let i = 0; i < this.payload.accountBalances.length; i++) {\n const accountBalances = this.payload.accountBalances[i];\n const accountBalancesContainer = new AccountBalancesContainer(null, this, accountBalances);\n this.accountBalancesContainers.push(accountBalancesContainer);\n }\n }\n return this.accountBalancesContainers || [];\n }\n /** @internal */\n getGroupBalancesContainers() {\n if (this.groupBalancesContainers == null && this.payload.groupBalances != null) {\n this.groupBalancesContainers = [];\n for (let i = 0; i < this.payload.groupBalances.length; i++) {\n const groupBalances = this.payload.groupBalances[i];\n const groupBalancesContainer = new GroupBalancesContainer(null, this, groupBalances);\n this.groupBalancesContainers.push(groupBalancesContainer);\n }\n }\n return this.groupBalancesContainers || [];\n }\n /** @internal */\n fillBalancesContainersMap(map, containers) {\n for (let i = 0; i < containers.length; i++) {\n const container = containers[i];\n const normalizedName = container.getNormalizedName();\n if (normalizedName) {\n if (!map.has(normalizedName)) {\n map.set(normalizedName, container);\n }\n }\n const nextContainers = container.getBalancesContainers();\n if (nextContainers && nextContainers.length > 0) {\n this.fillBalancesContainersMap(map, nextContainers);\n }\n }\n return map;\n }\n}\n//# sourceMappingURL=BalancesReport.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as QueryService from \"../service/query-service.js\";\nimport { Resource } from \"./Resource.js\";\n/**\n * Defines a saved Query in a [[Book]].\n *\n * Queries can be saved on Books by users.\n *\n * @public\n */\nexport class Query extends Resource {\n constructor(book, payload) {\n super(payload);\n this.book = book;\n }\n /** @internal */\n getConfig() {\n return this.book.getConfig();\n }\n /**\n * Gets the Query universal identifier.\n *\n * @returns The Query universal identifier\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the title of this saved Query.\n *\n * @returns The title of this saved Query\n */\n getTitle() {\n return this.payload.title;\n }\n /**\n * Sets the title of this saved Query.\n *\n * @param title - The title of this saved Query\n *\n * @returns This Query, for chaining\n */\n setTitle(title) {\n this.payload.title = title;\n return this;\n }\n /**\n * Gets the query string to be executed.\n *\n * @returns This Query string to be executed\n */\n getQuery() {\n return this.payload.query;\n }\n /**\n * Sets the query string associated with this saved Query.\n *\n * @param query - The query string to be executed\n *\n * @returns This Query, for chaining\n */\n setQuery(query) {\n this.payload.query = query;\n return this;\n }\n /**\n * Perform create new Query.\n *\n * @returns This Query, for chaining\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield QueryService.createSavedQuery(this.book.getId(), this.payload, this.getConfig());\n this.updateQueryCache();\n return this;\n });\n }\n /**\n * Perform update Query, applying pending changes.\n *\n * @returns This Query, for chaining\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield QueryService.updateSavedQuery(this.book.getId(), this.payload, this.getConfig());\n this.updateQueryCache();\n return this;\n });\n }\n /**\n * Perform delete Query.\n *\n * @returns This Query, for chaining\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n const queryId = this.getId();\n if (!queryId) {\n throw new Error(\"Query id null!\");\n }\n this.payload = yield QueryService.deleteSavedQuery(this.book.getId(), queryId, this.getConfig());\n this.updateQueryCache(true);\n return this;\n });\n }\n /** @internal */\n updateQueryCache(deleted) {\n if (this.book.queries) {\n this.book.queries = this.book.queries.filter((q) => q.getId() !== this.getId());\n if (!deleted) {\n this.book.queries.push(this);\n }\n }\n }\n}\n//# sourceMappingURL=Query.js.map", "import { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\n/**\n *\n * This class defines the Backlog of a [[Book]].\n *\n * A Backlog is a list of pending tasks in a Book\n *\n * @public\n */\nexport class Backlog extends Resource {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Returns the number of pending tasks in this Backlog.\n *\n * @returns The number of tasks in the Backlog, or undefined if not available.\n */\n getCount() {\n return this.payload.count;\n }\n}\n//# sourceMappingURL=Backlog.js.map", "import { AccountType } from '../model/Enums.js';\nimport { convertInMatrix } from '../utils.js';\n/**\n * A GroupsDataTableBuilder is used to setup and build two-dimensional arrays containing groups.\n *\n * @public\n */\nexport class GroupsDataTableBuilder {\n constructor(groups) {\n this.COMPARATOR = (g1, g2) => {\n let ret = this.getTypeIndex(this.getStringType(g1)) - this.getTypeIndex(this.getStringType(g2));\n if (ret === 0) {\n ret =\n this.getHasChildrenIndex(g1.hasChildren()) -\n this.getHasChildrenIndex(g2.hasChildren());\n }\n if (ret === 0) {\n ret = g1.getNormalizedName().localeCompare(g2.getNormalizedName());\n }\n return ret;\n };\n this.groups = groups;\n this.shouldAddProperties = false;\n this.shouldAddIds = false;\n this.shouldAddHiddenProperties = false;\n this.shouldShowTree = false;\n this.propertyKeys = [];\n }\n /**\n * Defines whether include custom group properties.\n *\n * @param include - Whether to include properties\n *\n * @returns This builder with respective include properties option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether include group ids.\n *\n * @param include - Whether to include ids\n *\n * @returns This builder with respective include ids option, for chaining.\n */\n ids(include) {\n this.shouldAddIds = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n /**\n * Defines whether to render groups as an indented tree instead of flat rows with a Parent column.\n * When enabled, child group names are indented by depth level and the Parent column is removed.\n * Default is false.\n *\n * @param enable - Whether to enable tree rendering\n *\n * @returns This builder with respective option, for chaining.\n */\n tree(enable) {\n this.shouldShowTree = enable;\n return this;\n }\n mapPropertyKeys() {\n this.propertyKeys = [];\n for (const group of this.groups) {\n for (const key of group.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (this.propertyKeys.indexOf(key) <= -1) {\n this.propertyKeys.push(key);\n }\n }\n }\n this.propertyKeys = this.propertyKeys.sort();\n }\n getStringType(group) {\n let groupType = group.getType() ? group.getType() + '' : undefined;\n if (!groupType) {\n groupType = group.isPermanent()\n ? AccountType.ASSET + '_' + AccountType.LIABILITY\n : AccountType.INCOMING + '_' + AccountType.OUTGOING;\n }\n return groupType;\n }\n getTypeIndex(type) {\n if (type === AccountType.ASSET + '_' + AccountType.LIABILITY) {\n return 0;\n }\n if (type === AccountType.ASSET) {\n return 1;\n }\n if (type === AccountType.LIABILITY) {\n return 2;\n }\n if (type === AccountType.INCOMING + '_' + AccountType.OUTGOING) {\n return 3;\n }\n if (type === AccountType.INCOMING) {\n return 4;\n }\n return 5;\n }\n getHasChildrenIndex(hasChildren) {\n return hasChildren ? 0 : 1;\n }\n /**\n * Builds a two-dimensional array containing all Groups.\n *\n * @returns A two-dimensional array containing all Groups\n */\n build() {\n let table = new Array();\n const groups = this.groups;\n groups.sort(this.COMPARATOR);\n let headers = [];\n if (this.shouldAddIds) {\n headers.push('Group Id');\n }\n headers.push('Name');\n headers.push('Type');\n if (!this.shouldShowTree) {\n headers.push('Parent');\n }\n if (this.shouldAddProperties) {\n this.mapPropertyKeys();\n }\n for (const group of groups) {\n if (group.isHidden() || group.getParent()) {\n continue;\n }\n table.push(this.buildGroupLine(group, 0));\n table = this.traverse(group, table, 1);\n }\n if (this.shouldAddProperties) {\n headers = headers.concat(this.propertyKeys);\n }\n table.unshift(headers);\n convertInMatrix(table);\n return table;\n }\n buildGroupLine(group, depth) {\n const line = [];\n if (this.shouldAddIds) {\n line.push(group.getId());\n }\n const name = this.shouldShowTree ? ' '.repeat(depth) + group.getName() : group.getName();\n line.push(name);\n line.push(this.getStringType(group));\n if (!this.shouldShowTree) {\n const parentName = group.getParent() ? group.getParent().getName() : '';\n line.push(parentName);\n }\n if (this.shouldAddProperties) {\n const properties = group.getProperties();\n for (const key of this.propertyKeys) {\n const propertyValue = properties[key];\n if (propertyValue) {\n line.push(propertyValue);\n continue;\n }\n line.push('');\n }\n }\n return line;\n }\n traverse(group, table, depth) {\n const children = group.getChildren();\n children.sort(this.COMPARATOR);\n for (const child of children) {\n table.push(this.buildGroupLine(child, depth));\n if (child.hasChildren()) {\n this.traverse(child, table, depth + 1);\n }\n }\n return table;\n }\n}\n//# sourceMappingURL=GroupsDataTableBuilder.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { convertInMatrix, formatValue, getRepresentativeValue } from '../utils.js';\n/**\n * A TransactionsDataTableBuilder is used to setup and build two-dimensional arrays containing transactions.\n *\n * @public\n */\nexport class TransactionsDataTableBuilder {\n constructor(book, transactions, account) {\n this.shouldFormatDates = false;\n this.shouldFormatValues = false;\n this.shouldAddUrls = false;\n this.shouldAddProperties = false;\n this.shouldAddIds = false;\n this.shouldAddRecordedAt = true;\n this.shouldAddHiddenProperties = false;\n this.book = book;\n this.transactions = transactions;\n this.account = account;\n }\n /**\n * Defines whether the dates should be formatted, based on date pattern of the [[Book]].\n *\n * @param format - Whether to format dates\n *\n * @returns This builder with respective formatting option, for chaining.\n */\n formatDates(format) {\n this.shouldFormatDates = format;\n return this;\n }\n /**\n * Defines whether amounts should be formatted based on [[DecimalSeparator]] of the [[Book]].\n *\n * @param format - Whether to format values\n *\n * @returns This builder with respective formatting option, for chaining.\n */\n formatValues(format) {\n this.shouldFormatValues = format;\n return this;\n }\n /**\n * Defines whether to include attachments and url links.\n *\n * @param include - Whether to include URLs\n *\n * @returns This builder with respective option, for chaining.\n */\n urls(include) {\n this.shouldAddUrls = include;\n return this;\n }\n /**\n * Defines whether to include custom transaction properties.\n *\n * @param include - Whether to include properties\n *\n * @returns This builder with respective option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether to include transaction ids and remote ids.\n *\n * @param include - Whether to include ids\n *\n * @returns This builder with respective option, for chaining.\n */\n ids(include) {\n this.shouldAddIds = include;\n return this;\n }\n /**\n * Defines whether to include the \"Recorded at\" column.\n *\n * @param include - Whether to include the recorded at column\n *\n * @returns This builder with respective option, for chaining.\n */\n recordedAt(include) {\n this.shouldAddRecordedAt = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n /**\n * @deprecated Use {@link urls} instead.\n */\n includeUrls(include) {\n return this.urls(include);\n }\n /**\n * @deprecated Use {@link properties} instead.\n */\n includeProperties(include) {\n return this.properties(include);\n }\n /**\n * @deprecated Use {@link ids} instead.\n */\n includeIds(include) {\n return this.ids(include);\n }\n /**\n * Gets the account used to filter transactions, when applicable.\n *\n * @returns The account, when filtering by a single account.\n */\n getAccount() {\n return this.account;\n }\n /**\n * Builds a two-dimensional array containing all transactions.\n *\n * @returns A promise resolving to a two-dimensional array containing all transactions\n */\n build() {\n return __awaiter(this, void 0, void 0, function* () {\n const headerLine = this.getHeaderLine();\n const dataTable = yield this.get2DArray_();\n if (dataTable.length > 0) {\n dataTable.splice(0, 0, headerLine);\n convertInMatrix(dataTable);\n return dataTable;\n }\n else {\n return [headerLine];\n }\n });\n }\n getHeaderLine() {\n const headerLine = [];\n if (this.shouldAddIds) {\n headerLine.push('Transaction Id');\n }\n headerLine.push('Status');\n headerLine.push('Date');\n headerLine.push('Origin');\n headerLine.push('Destination');\n headerLine.push('Description');\n headerLine.push('Amount');\n if (this.shouldShowBalances()) {\n headerLine.push('Balance');\n }\n if (this.shouldAddRecordedAt) {\n headerLine.push('Recorded at');\n }\n if (this.shouldAddProperties) {\n for (const key of this.getPropertyKeys()) {\n headerLine.push(key);\n }\n }\n if (this.shouldAddIds) {\n for (const remoteIdHeader of this.getRemoteIdHeaders()) {\n headerLine.push(remoteIdHeader);\n }\n }\n if (this.shouldAddUrls) {\n for (const attachmentHeader of this.getAttachmentHeaders()) {\n headerLine.push(attachmentHeader);\n }\n }\n return headerLine;\n }\n get2DArray_() {\n return __awaiter(this, void 0, void 0, function* () {\n const dataTable = [];\n for (const transaction of this.transactions) {\n const line = [];\n if (this.shouldAddIds) {\n line.push(transaction.getId());\n }\n line.push(transaction.getStatus());\n if (this.shouldFormatDates) {\n line.push(transaction.getDateFormatted());\n }\n else {\n line.push(transaction.getDateObject());\n }\n line.push(yield transaction.getCreditAccountName());\n line.push(yield transaction.getDebitAccountName());\n line.push(transaction.getDescription());\n let amount = transaction.getAmount();\n if (amount != null) {\n if (this.shouldShowBalances() && this.account) {\n const isCreditOnTx = yield this.isCreditOnTransaction_(transaction, this.account);\n amount = getRepresentativeValue(amount, !isCreditOnTx);\n }\n if (this.shouldFormatValues) {\n line.push(formatValue(amount, this.book.getDecimalSeparator(), this.book.getFractionDigits()));\n }\n else {\n line.push(amount.toNumber());\n }\n }\n else {\n line.push('');\n }\n if (this.shouldShowBalances()) {\n const accountBalance = yield transaction.getAccountBalance();\n if (accountBalance != null) {\n if (this.shouldFormatValues) {\n line.push(formatValue(accountBalance, this.book.getDecimalSeparator(), this.book.getFractionDigits()));\n }\n else {\n line.push(accountBalance.toNumber());\n }\n }\n else {\n line.push('');\n }\n }\n if (this.shouldAddRecordedAt) {\n if (this.shouldFormatDates) {\n line.push(transaction.getCreatedAtFormatted());\n }\n else {\n line.push(transaction.getCreatedAt());\n }\n }\n if (this.shouldAddProperties) {\n this.addPropertiesToLine(line, transaction);\n }\n if (this.shouldAddIds) {\n this.addRemoteIdsToLine(line, transaction);\n }\n if (this.shouldAddUrls) {\n this.addUrlsToLine(line, transaction);\n }\n dataTable.push(line);\n }\n return dataTable;\n });\n }\n shouldShowBalances() {\n return this.account != null && this.account.isPermanent() === true;\n }\n isCreditOnTransaction_(transaction, account) {\n return __awaiter(this, void 0, void 0, function* () {\n const creditAccount = yield transaction.getCreditAccount();\n if (account == null || creditAccount == null) {\n return false;\n }\n return creditAccount.getId() === account.getId();\n });\n }\n getPropertyKeys() {\n if (this.propertyKeys == null) {\n this.propertyKeys = [];\n for (const transaction of this.transactions) {\n for (const key of transaction.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (this.propertyKeys.indexOf(key) <= -1) {\n this.propertyKeys.push(key);\n }\n }\n }\n this.propertyKeys = this.propertyKeys.sort();\n }\n return this.propertyKeys;\n }\n getAttachmentHeaders() {\n if (this.attachmentHeaders == null) {\n this.attachmentHeaders = [];\n for (const transaction of this.transactions) {\n const urls = this.getUrls(transaction);\n if (urls.length > this.attachmentHeaders.length) {\n this.attachmentHeaders = [];\n urls.forEach(() => this.attachmentHeaders.push('Attachment'));\n }\n }\n }\n return this.attachmentHeaders;\n }\n getRemoteIdHeaders() {\n if (this.remoteIdHeaders == null) {\n this.remoteIdHeaders = [];\n for (const transaction of this.transactions) {\n const remoteIds = transaction.getRemoteIds();\n if (remoteIds && remoteIds.length > this.remoteIdHeaders.length) {\n this.remoteIdHeaders = [];\n remoteIds.forEach(() => this.remoteIdHeaders.push('Remote Id'));\n }\n }\n }\n return this.remoteIdHeaders;\n }\n addPropertiesToLine(line, transaction) {\n const lineLength = line.length;\n for (const key of this.getPropertyKeys()) {\n line.push('');\n }\n for (const key of transaction.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n const index = this.getPropertyKeys().indexOf(key) + lineLength;\n line[index] = transaction.getProperty(key);\n }\n }\n addRemoteIdsToLine(line, transaction) {\n const lineLength = line.length;\n for (const key of this.getRemoteIdHeaders()) {\n line.push('');\n }\n const remoteIds = transaction.getRemoteIds();\n if (remoteIds) {\n for (let index = lineLength; index < lineLength + remoteIds.length; index++) {\n line[index] = remoteIds[index - lineLength];\n }\n }\n }\n addUrlsToLine(line, transaction) {\n const lineLength = line.length;\n for (const key of this.getAttachmentHeaders()) {\n line.push('');\n }\n const urls = this.getUrls(transaction);\n for (let index = lineLength; index < lineLength + urls.length; index++) {\n line[index] = urls[index - lineLength];\n }\n }\n getUrls(transaction) {\n let urls = transaction.getUrls();\n if (urls == null) {\n urls = [];\n }\n const files = transaction.getFiles();\n if (files != null) {\n urls = urls.concat(files.map(f => f.getUrl()).filter((url) => url != null));\n }\n return urls;\n }\n}\n//# sourceMappingURL=TransactionsDataTableBuilder.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as AccountService from '../service/account-service.js';\nimport * as BookService from '../service/book-service.js';\nimport * as QueryService from '../service/query-service.js';\nimport * as BalancesService from '../service/balances-service.js';\nimport * as FileService from '../service/file-service.js';\nimport * as GroupService from '../service/group-service.js';\nimport * as IntegrationService from '../service/integration-service.js';\nimport * as TransactionService from '../service/transaction-service.js';\nimport * as EventService from '../service/event-service.js';\nimport * as CollaboratorService from '../service/collaborator-service.js';\nimport * as Utils from '../utils.js';\nimport { ResourceProperty } from './ResourceProperty.js';\nimport { Account } from './Account.js';\nimport { Collaborator } from './Collaborator.js';\nimport { Collection } from './Collection.js';\nimport { Permission } from './Enums.js';\nimport { EventList } from './EventList.js';\nimport { File } from './File.js';\nimport { Group } from './Group.js';\nimport { Integration } from './Integration.js';\nimport { Transaction } from './Transaction.js';\nimport { TransactionList } from './TransactionList.js';\nimport { BalancesReport } from './BalancesReport.js';\nimport { App } from './App.js';\nimport { Query } from './Query.js';\nimport { Bkper } from './Bkper.js';\nimport { Backlog } from './Backlog.js';\nimport { AccountsDataTableBuilder } from '../builders/AccountsDataTableBuilder.js';\nimport { GroupsDataTableBuilder } from '../builders/GroupsDataTableBuilder.js';\nimport { TransactionsDataTableBuilder } from '../builders/TransactionsDataTableBuilder.js';\n/**\n * A Book represents a [General Ledger](https://en.wikipedia.org/wiki/General_ledger) for a company or business, but can also represent a [Ledger](https://en.wikipedia.org/wiki/Ledger) for a project or department\n *\n * It contains all [[Accounts]] where [[Transactions]] are recorded/posted;\n *\n * @public\n */\nexport class Book extends ResourceProperty {\n constructor(payload, config) {\n super(payload);\n this.allGroupsLoaded = false;\n this.allAccountsLoaded = false;\n this.config = config;\n if (this.payload.permission == Permission.RECORDER) {\n this.payload.groups = this.payload.groups || [];\n this.payload.accounts = this.payload.accounts || [];\n }\n this.allGroupsLoaded = this.mapGroups(this.payload.groups);\n this.allAccountsLoaded = this.mapAccounts(this.payload.accounts);\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the unique identifier of this Book.\n *\n * @returns This Book's unique identifier\n */\n getId() {\n return this.payload.id || '';\n }\n /**\n * Gets the name of this Book.\n *\n * @returns The name of this Book\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Sets the name of the Book.\n *\n * @param name - The name to set\n *\n * @returns This Book, for chaining\n */\n setName(name) {\n this.payload.name = name;\n return this;\n }\n /**\n * Gets the number of fraction digits supported by this Book.\n *\n * @returns The number of fraction digits supported by this Book. Same as getDecimalPlaces\n */\n getFractionDigits() {\n return this.payload.fractionDigits;\n }\n /**\n * Gets the number of decimal places supported by this Book.\n *\n * @returns The number of decimal places supported by this Book. Same as getFractionDigits\n */\n getDecimalPlaces() {\n return this.getFractionDigits();\n }\n /**\n * Sets the number of fraction digits (decimal places) supported by this Book.\n *\n * @param fractionDigits - The number of fraction digits to set (0 to 8)\n *\n * @returns This Book, for chaining\n */\n setFractionDigits(fractionDigits) {\n this.payload.fractionDigits = fractionDigits;\n return this;\n }\n /**\n * Gets the period slice for balances visualization.\n *\n * @returns The period slice for balances visualization\n */\n getPeriod() {\n return this.payload.period;\n }\n /**\n * Sets the period slice for balances visualization.\n *\n * @param period - The period to set\n *\n * @returns This Book, for chaining\n */\n setPeriod(period) {\n this.payload.period = period;\n return this;\n }\n /**\n * Gets the start month when YEAR period is set.\n *\n * @returns The start month when YEAR period is set\n */\n getPeriodStartMonth() {\n return this.payload.periodStartMonth;\n }\n /**\n * Sets the start month when YEAR period is set.\n *\n * @param month - The start month to set\n *\n * @returns This Book, for chaining\n */\n setPeriodStartMonth(month) {\n this.payload.periodStartMonth = month;\n return this;\n }\n /**\n * Gets the transactions pagination page size.\n *\n * @returns The transactions pagination page size\n */\n getPageSize() {\n return this.payload.pageSize;\n }\n /**\n * Sets the transactions pagination page size.\n *\n * @param pageSize - The page size to set\n *\n * @returns This Book, for chaining\n */\n setPageSize(pageSize) {\n this.payload.pageSize = pageSize;\n return this;\n }\n /**\n * Gets the name of the owner of the Book.\n *\n * @returns The name of the owner of the Book\n */\n getOwnerName() {\n return this.payload.ownerName;\n }\n /**\n * Gets the logo URL of the Book owner's custom domain, if any.\n *\n * @returns The logo URL, or undefined if the owner has no custom domain logo\n */\n getLogoUrl() {\n return this.payload.logoUrl;\n }\n /**\n * Gets the permission for the current user in this Book.\n *\n * @returns The permission for the current user in this Book\n */\n getPermission() {\n return this.payload.permission;\n }\n /**\n * Gets the collection of this Book, if any.\n *\n * @returns The collection of this Book, if any\n */\n getCollection() {\n if (this.payload.collection != null && this.collection == null) {\n this.collection = new Collection(this.payload.collection, this.config);\n }\n return this.collection;\n }\n /**\n * Gets the date pattern of the Book.\n *\n * @returns The date pattern of the Book. Current: dd/MM/yyyy | MM/dd/yyyy | yyyy/MM/dd\n */\n getDatePattern() {\n return this.payload.datePattern;\n }\n /**\n * Sets the date pattern of the Book. Current: dd/MM/yyyy | MM/dd/yyyy | yyyy/MM/dd\n *\n * @param datePattern - The date pattern to set\n *\n * @returns This Book, for chaining\n */\n setDatePattern(datePattern) {\n this.payload.datePattern = datePattern;\n return this;\n }\n /**\n * Gets the lock date of the Book in ISO format yyyy-MM-dd.\n *\n * @returns The lock date of the Book in ISO format yyyy-MM-dd\n */\n getLockDate() {\n return this.payload.lockDate;\n }\n /**\n * Sets the lock date of the Book in ISO format yyyy-MM-dd.\n *\n * @param lockDate - The lock date to set in ISO format yyyy-MM-dd\n *\n * @returns This Book, for chaining\n */\n setLockDate(lockDate) {\n if (lockDate == null) {\n lockDate = '1900-00-00';\n }\n this.payload.lockDate = lockDate;\n return this;\n }\n /**\n * Gets the closing date of the Book in ISO format yyyy-MM-dd.\n *\n * @returns The closing date of the Book in ISO format yyyy-MM-dd\n */\n getClosingDate() {\n return this.payload.closingDate;\n }\n /**\n * Sets the closing date of the Book in ISO format yyyy-MM-dd.\n *\n * @param closingDate - The closing date to set in ISO format yyyy-MM-dd\n *\n * @returns This Book, for chaining\n */\n setClosingDate(closingDate) {\n if (closingDate == null) {\n closingDate = '1900-00-00';\n }\n this.payload.closingDate = closingDate;\n return this;\n }\n /**\n * Gets the decimal separator of the Book.\n *\n * @returns The decimal separator of the Book\n */\n getDecimalSeparator() {\n return this.payload.decimalSeparator;\n }\n /**\n * Sets the decimal separator of the Book\n *\n * @param decimalSeparator - The decimal separator to set\n *\n * @returns This Book, for chaining\n */\n setDecimalSeparator(decimalSeparator) {\n this.payload.decimalSeparator = decimalSeparator;\n return this;\n }\n /**\n * Gets the time zone of the Book.\n *\n * @returns The time zone of the Book\n */\n getTimeZone() {\n return this.payload.timeZone;\n }\n /**\n * Sets the time zone of the Book.\n *\n * @param timeZone - The time zone to set\n *\n * @returns This Book, for chaining\n */\n setTimeZone(timeZone) {\n this.payload.timeZone = timeZone;\n return this;\n }\n /**\n * Gets the time zone offset of the book, in minutes.\n *\n * @returns The time zone offset of the book, in minutes\n */\n getTimeZoneOffset() {\n return this.payload.timeZoneOffset;\n }\n /**\n * Gets the auto post status of the Book.\n *\n * @returns The auto post status of the Book\n */\n getAutoPost() {\n return this.payload.autoPost;\n }\n /**\n * Sets the auto post status of the Book.\n *\n * @param autoPost - The auto post status to set\n *\n * @returns This Book, for chaining\n */\n setAutoPost(autoPost) {\n this.payload.autoPost = autoPost;\n return this;\n }\n /**\n * Gets the last update date of the book, in milliseconds.\n *\n * @returns The last update date of the book, in milliseconds\n */\n getLastUpdateMs() {\n return this.payload.lastUpdateMs ? +this.payload.lastUpdateMs : undefined;\n }\n /**\n * Gets the total number of posted transactions.\n *\n * @returns The total number of posted transactions\n */\n getTotalTransactions() {\n return this.payload.totalTransactions ? +this.payload.totalTransactions : 0;\n }\n /**\n * Gets the total number of posted transactions on current month.\n *\n * @returns The total number of posted transactions on current month\n */\n getTotalTransactionsCurrentMonth() {\n return this.payload.totalTransactionsCurrentMonth\n ? +this.payload.totalTransactionsCurrentMonth\n : 0;\n }\n /**\n * Gets the total number of posted transactions on current year.\n *\n * @returns The total number of posted transactions on current year\n */\n getTotalTransactionsCurrentYear() {\n return this.payload.totalTransactionsCurrentYear\n ? +this.payload.totalTransactionsCurrentYear\n : 0;\n }\n /**\n * Gets the visibility of the book.\n *\n * @returns The visibility of the book\n */\n getVisibility() {\n return this.payload.visibility;\n }\n /**\n * Sets the visibility of the book.\n *\n * @param visibility - The visibility to set\n *\n * @returns This Book, for chaining\n */\n setVisibility(visibility) {\n this.payload.visibility = visibility;\n return this;\n }\n /**\n * Formats a date according to date pattern of the Book.\n *\n * @param date - The date to format as string.\n * @param timeZone - The output timezone of the result. Default to script's timeZone\n *\n * @returns The formatted date\n */\n formatDate(date, timeZone) {\n if (timeZone == null || timeZone.trim() == '') {\n timeZone = this.getTimeZone();\n }\n return Utils.formatDate(date, this.getDatePattern(), timeZone);\n }\n /**\n * Parse a date string according to date pattern and timezone of the Book. Also parse ISO yyyy-mm-dd format.\n *\n * @param date - The date string to parse\n *\n * @returns The parsed Date object\n */\n parseDate(date) {\n return Utils.parseDate(date, this.getDatePattern(), this.getTimeZone());\n }\n /**\n * Formats a value according to [[DecimalSeparator]] and fraction digits of the Book.\n *\n * @param value - The value to be formatted.\n *\n * @returns The formatted value\n */\n formatValue(value) {\n if (!value) {\n return '';\n }\n return Utils.formatValue(value, this.getDecimalSeparator(), this.getFractionDigits());\n }\n /**\n * Parse a value string according to [[DecimalSeparator]] and fraction digits of the Book.\n *\n * @param value - The value string to parse\n *\n * @returns The parsed Amount or undefined if parsing fails\n */\n parseValue(value) {\n return Utils.parseValue(value, this.getDecimalSeparator());\n }\n /**\n * Rounds a value according to the number of fraction digits of the Book.\n *\n * @param value - The value to be rounded\n *\n * @returns The rounded value\n */\n round(value) {\n return Utils.round(value, this.getFractionDigits());\n }\n /**\n * Batch create [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be created\n *\n * @returns The created Transactions\n */\n batchCreateTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n transactionPayloads = yield TransactionService.createTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n transactions = transactionPayloads.map(tx => new Transaction(this, tx));\n return transactions;\n });\n }\n /**\n * Batch post [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be posted\n */\n batchPostTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.postTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n });\n }\n /**\n * Batch update [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be updated\n *\n * @param updateChecked - True to also update checked transactions\n *\n * @returns The updated draft Transactions\n */\n batchUpdateTransactions(transactions, updateChecked) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n transactionPayloads = yield TransactionService.updateTransactionsBatch(this.getId(), transactionPayloads, updateChecked, this.getConfig());\n transactions = transactionPayloads.map(tx => new Transaction(this, tx));\n return transactions;\n });\n }\n /**\n * Batch check [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be checked\n */\n batchCheckTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.checkTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n });\n }\n /**\n * Batch uncheck [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be unchecked\n */\n batchUncheckTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.uncheckTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n });\n }\n /**\n * Batch trash [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be trashed\n * @param trashChecked - True to also trash checked transactions\n */\n batchTrashTransactions(transactions, trashChecked) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.trashTransactionsBatch(this.getId(), transactionPayloads, trashChecked, this.getConfig());\n });\n }\n /**\n * Batch untrash [[Transactions]] on the Book.\n *\n * @param transactions - The transactions to be untrashed\n */\n batchUntrashTransactions(transactions) {\n return __awaiter(this, void 0, void 0, function* () {\n let transactionPayloads = [];\n transactions.forEach(tx => transactionPayloads.push(tx.json()));\n yield TransactionService.untrashTransactionsBatch(this.getId(), transactionPayloads, this.getConfig());\n });\n }\n /**\n * Replay [[Events]] on the Book, in batch.\n *\n * @param events - The events to be replayed\n * @param errorOnly - True to only replay events with errors\n */\n batchReplayEvents(events, errorOnly) {\n return __awaiter(this, void 0, void 0, function* () {\n const eventIds = events.map(event => event.getId());\n const eventPayloads = eventIds.map(id => ({ id: id }));\n const eventList = { items: eventPayloads };\n yield EventService.replayEventsBatch(this, eventList, errorOnly, this.getConfig());\n });\n }\n /**\n * Create [[Accounts]] on the Book, in batch.\n *\n * @param accounts - The accounts to be created\n *\n * @returns The created Accounts\n */\n batchCreateAccounts(accounts) {\n return __awaiter(this, void 0, void 0, function* () {\n if (accounts.length > 0) {\n const accountList = {\n items: yield Promise.all(accounts.map(account => this.normalizeAccountPayloadForBatchCreate_(account))),\n };\n const payloads = yield AccountService.createAccounts(this.getId(), accountList, this.getConfig());\n const createdAccounts = [];\n for (const payload of payloads) {\n const account = new Account(this, payload);\n createdAccounts.push(account);\n this.setAccount(payload);\n }\n this.clearCache();\n return createdAccounts;\n }\n return [];\n });\n }\n /** @internal */\n normalizeAccountPayloadForBatchCreate_(account) {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = account.json();\n if (!payload.groups || payload.groups.length === 0) {\n return payload;\n }\n const normalizedGroups = [];\n for (const groupPayload of payload.groups) {\n const idOrName = groupPayload.id || groupPayload.name;\n if (!idOrName || idOrName.trim() === '') {\n throw new Error('Account group reference must include id or name');\n }\n const group = yield this.getGroup(idOrName);\n if (!group) {\n throw new Error(`Group not found: ${idOrName}`);\n }\n normalizedGroups.push(group.json());\n }\n payload.groups = normalizedGroups;\n return payload;\n });\n }\n /**\n * Update [[Accounts]] on the Book, in batch.\n *\n * @param accounts - The accounts to be updated\n *\n * @returns The updated Accounts\n */\n batchUpdateAccounts(accounts) {\n return __awaiter(this, void 0, void 0, function* () {\n if (accounts.length > 0) {\n const accountList = {\n items: accounts.map(a => a.json()),\n };\n const payloads = yield AccountService.updateAccounts(this.getId(), accountList, this.getConfig());\n const updatedAccounts = [];\n for (const payload of payloads) {\n const account = new Account(this, payload);\n updatedAccounts.push(account);\n this.setAccount(payload);\n }\n this.clearCache();\n return updatedAccounts;\n }\n return [];\n });\n }\n /**\n * Delete [[Accounts]] on the Book, in batch.\n *\n * @param accounts - The accounts to be deleted\n *\n * @returns The deleted Accounts\n */\n batchDeleteAccounts(accounts) {\n return __awaiter(this, void 0, void 0, function* () {\n if (accounts.length > 0) {\n const accountList = {\n items: accounts.map(a => a.json()),\n };\n const payloads = yield AccountService.deleteAccounts(this.getId(), accountList, this.getConfig());\n const deletedAccounts = [];\n for (const payload of payloads) {\n const account = new Account(this, payload);\n deletedAccounts.push(account);\n this.setAccount(payload, true);\n }\n this.clearCache();\n return deletedAccounts;\n }\n return [];\n });\n }\n /**\n * Create [[Groups]] on the Book, in batch.\n *\n * @param groups - The groups to be created\n *\n * @returns The created Groups\n */\n batchCreateGroups(groups) {\n return __awaiter(this, void 0, void 0, function* () {\n if (groups.length > 0) {\n const groupList = { items: groups.map(g => g.json()) };\n const payloads = yield GroupService.createGroups(this.getId(), groupList, this.getConfig());\n const createdGroups = [];\n for (const payload of payloads) {\n const group = new Group(this, payload);\n createdGroups.push(group);\n this.setGroup(payload);\n }\n this.clearCache();\n return createdGroups;\n }\n return [];\n });\n }\n /**\n * Trigger Balances Audit async process.\n */\n audit() {\n BookService.audit(this.getId(), this.getConfig());\n }\n /**\n * Retrieve installed [[Apps]] for this Book.\n *\n * @returns The retrieved Apps objects\n */\n getApps() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.apps != null) {\n return this.apps;\n }\n const appsPlain = yield BookService.getApps(this.getId(), this.getConfig());\n this.apps = appsPlain.map(a => new App(a, this.config));\n return this.apps;\n });\n }\n /**\n * Gets the existing [[Integrations]] in the Book.\n *\n * @returns The retrieved Integration objects\n */\n getIntegrations() {\n return __awaiter(this, void 0, void 0, function* () {\n const integrationsPlain = yield IntegrationService.listIntegrations(this.getId(), this.getConfig());\n const integrations = integrationsPlain.map(i => new Integration(i, this.config));\n return integrations;\n });\n }\n /**\n * Creates a new [[Integration]] in the Book.\n *\n * @param integration - The [[Integration]] object or wrapped plain json\n *\n * @returns The created [[Integration]] object\n */\n createIntegration(integration) {\n return __awaiter(this, void 0, void 0, function* () {\n if (integration instanceof Integration) {\n integration = yield IntegrationService.createIntegration(this.getId(), integration.json(), this.getConfig());\n }\n else {\n integration = yield IntegrationService.createIntegration(this.getId(), integration, this.getConfig());\n }\n return new Integration(integration, this.config);\n });\n }\n /**\n * Updates an existing [[Integration]] in the Book.\n *\n * @param integration - The [[Integration]] wrapped plain json\n *\n * @returns The updated [[Integration]] object\n */\n updateIntegration(integration) {\n return __awaiter(this, void 0, void 0, function* () {\n if (integration instanceof Integration) {\n integration = yield IntegrationService.updateIntegration(this.getId(), integration.json(), this.getConfig());\n }\n else {\n integration = yield IntegrationService.updateIntegration(this.getId(), integration, this.getConfig());\n }\n return new Integration(integration, this.config);\n });\n }\n /**\n * Gets an [[Account]] object by id or name.\n *\n * Results are cached to avoid repeated server calls. Account-group relationships\n * are included if the full chart was loaded via getAccounts() or when the Book\n * was loaded with includeAccounts=true.\n *\n * @param idOrName - The id or name of the Account\n *\n * @returns The matching Account object\n *\n * @example\n * ```typescript\n * // Get individual account (basic data, cached)\n * const account = await book.getAccount('Bank Account');\n *\n * // For account-group relationships, use one of these approaches:\n * // Option 1: Load book with full data upfront\n * const bookWithAccounts = await Bkper.getBook(bookId, true);\n * const accountWithGroups = await bookWithAccounts.getAccount('Bank Account');\n *\n * // Option 2: Load full chart when needed\n * await book.getAccounts();\n * const accountWithGroups2 = await book.getAccount('Bank Account');\n * ```\n */\n getAccount(idOrName) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!idOrName || idOrName.trim() == '') {\n return undefined;\n }\n let account;\n // Try to get account by id\n if (this.idAccountMap) {\n account = this.idAccountMap.get(idOrName);\n }\n // Try to get account by name\n if (!account && this.nameAccountMap) {\n account = this.nameAccountMap.get(Utils.normalizeName(idOrName));\n }\n // Try to fetch account from server\n if (!account) {\n const accountPayload = yield AccountService.getAccount(this.getId(), idOrName, this.getConfig());\n if (accountPayload) {\n account = new Account(this, accountPayload);\n this.updateAccountCache(account);\n }\n }\n return account;\n });\n }\n /** @internal */\n updateGroupCache(group) {\n this.updateGroupIdMap(group);\n this.updateGroupNameMap(group);\n }\n /** @internal */\n updateGroupIdMap(group) {\n this.idGroupMap = this.idGroupMap || new Map();\n const id = group.getId();\n if (id) {\n this.idGroupMap.set(id, group);\n }\n }\n /** @internal */\n updateGroupNameMap(group) {\n this.nameGroupMap = this.nameGroupMap || new Map();\n const normalizedName = group.getNormalizedName();\n if (normalizedName) {\n this.nameGroupMap.set(normalizedName, group);\n }\n }\n /** @internal */\n updateAccountCache(account) {\n this.updateAccountIdMap(account);\n this.updateAccountNameMap(account);\n }\n /** @internal */\n updateAccountIdMap(account) {\n this.idAccountMap = this.idAccountMap || new Map();\n const id = account.getId();\n if (id) {\n this.idAccountMap.set(id, account);\n }\n }\n /** @internal */\n updateAccountNameMap(account) {\n this.nameAccountMap = this.nameAccountMap || new Map();\n const normalizedName = account.getNormalizedName();\n if (normalizedName) {\n this.nameAccountMap.set(normalizedName, account);\n }\n }\n /** @internal */\n getMostRecentLockDate_() {\n const closingDate = this.getClosingDate();\n const lockDate = this.getLockDate();\n if (!closingDate && !lockDate) {\n return null;\n }\n if (!closingDate && lockDate) {\n return lockDate;\n }\n if (closingDate && !lockDate) {\n return closingDate;\n }\n if (Utils.getIsoDateValue(closingDate) > Utils.getIsoDateValue(lockDate)) {\n return closingDate;\n }\n else {\n return lockDate;\n }\n }\n /**\n * Gets a [[Group]] object by id or name.\n *\n * Results are cached to avoid repeated server calls. Parent/child relationships\n * are included if all groups were loaded via getGroups() or when the Book was\n * loaded with includeGroups=true.\n *\n * @param idOrName - The id or name of the Group\n *\n * @returns The matching Group object\n *\n * @example\n * ```typescript\n * // Get individual group (basic data, cached)\n * const group = await book.getGroup('Assets');\n *\n * // For parent/child relationships, use one of these approaches:\n * // Option 1: Load book with full hierarchy upfront\n * const bookWithGroups = await Bkper.getBook(bookId, false, true);\n * const groupWithTree = await bookWithGroups.getGroup('Assets');\n *\n * // Option 2: Load full hierarchy when needed\n * await book.getGroups();\n * const groupWithTree2 = await book.getGroup('Assets');\n * console.log(groupWithTree2.getParent(), groupWithTree2.getChildren());\n * ```\n */\n getGroup(idOrName) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!idOrName || idOrName.trim() == '') {\n return undefined;\n }\n let group;\n // Try to get group by id\n if (this.idGroupMap) {\n group = this.idGroupMap.get(idOrName);\n }\n // Try to get group by name\n if (!group && this.nameGroupMap) {\n group = this.nameGroupMap.get(Utils.normalizeName(idOrName));\n }\n // Try to fetch group from server\n if (!group) {\n const groupPayload = yield GroupService.getGroup(this.getId(), idOrName, this.getConfig());\n if (groupPayload) {\n group = new Group(this, groupPayload);\n this.updateGroupCache(group);\n }\n }\n return group;\n });\n }\n /**\n * Gets all [[Groups]] of this Book with complete parent/child hierarchy.\n *\n * Results are cached for performance. Group tree relationships are built\n * during loading. Consider using Bkper.getBook(id, false, true) for\n * upfront loading when you know you'll need all groups.\n *\n * @returns The retrieved [[Group]] objects\n *\n * @example\n * ```typescript\n * // Load all groups with complete hierarchy\n * const groups = await book.getGroups();\n *\n * // Alternative: Load book with groups upfront (more efficient)\n * const bookWithGroups = await Bkper.getBook(bookId, false, true);\n * const groups2 = await bookWithGroups.getGroups(); // Already cached\n * ```\n */\n getGroups() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n if (this.idGroupMap && this.allGroupsLoaded) {\n return Array.from(((_a = this.idGroupMap) === null || _a === void 0 ? void 0 : _a.values()) || []);\n }\n let groups = yield GroupService.getGroups(this.getId(), this.getConfig());\n this.allGroupsLoaded = this.mapGroups(groups);\n return Array.from(((_b = this.idGroupMap) === null || _b === void 0 ? void 0 : _b.values()) || []);\n });\n }\n /** @internal */\n mapGroups(groups) {\n if (!groups) {\n return false;\n }\n let groupsObj = groups.map(group => new Group(this, group));\n this.idGroupMap = new Map();\n this.nameGroupMap = new Map();\n for (const group of groupsObj) {\n this.updateGroupCache(group);\n group.buildGroupTree(this.idGroupMap);\n }\n for (const group of groupsObj) {\n group.buildGroupTree(this.idGroupMap);\n }\n return true;\n }\n /**\n * Gets all [[Accounts]] of this Book with full account-group relationships.\n *\n * Results are cached for performance. Groups are automatically loaded first\n * to ensure proper linking. Consider using Bkper.getBook(id, true) for\n * upfront loading when you know you'll need all accounts.\n *\n * @returns The retrieved [[Account]] objects\n *\n * @example\n * ```typescript\n * // Load all accounts with complete relationships\n * const accounts = await book.getAccounts();\n *\n * // Alternative: Load book with accounts upfront (more efficient)\n * const bookWithAccounts = await Bkper.getBook(bookId, true);\n * const accounts2 = await bookWithAccounts.getAccounts(); // Already cached\n * ```\n */\n getAccounts() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n if (this.idAccountMap && this.allAccountsLoaded) {\n return Array.from(((_a = this.idAccountMap) === null || _a === void 0 ? void 0 : _a.values()) || []);\n }\n //Ensure groups are loaded\n yield this.getGroups();\n let accounts = yield AccountService.getAccounts(this.getId(), this.getConfig());\n this.allAccountsLoaded = this.mapAccounts(accounts);\n return Array.from(((_b = this.idAccountMap) === null || _b === void 0 ? void 0 : _b.values()) || []);\n });\n }\n /** @internal */\n mapAccounts(accounts) {\n if (!accounts) {\n return false;\n }\n let accountsObj = accounts.map(account => new Account(this, account));\n this.idAccountMap = new Map();\n this.nameAccountMap = new Map();\n for (const account of accountsObj) {\n this.updateAccountCache(account);\n this.linkAccountsAndGroups(account);\n }\n this.ensureGroupsAccountMapsLoaded();\n return true;\n }\n /** @internal */\n linkAccountsAndGroups(account) {\n var _a;\n const groupPayloads = account.json().groups || [];\n for (const groupPayload of groupPayloads) {\n const group = (_a = this.idGroupMap) === null || _a === void 0 ? void 0 : _a.get(groupPayload.id || '');\n if (group != null) {\n group.addAccount(account);\n }\n }\n }\n /**\n * Ensures every group has a cached `.accounts` Map after accounts are loaded.\n *\n * `linkAccountsAndGroups()` populates `.accounts` on groups that have accounts\n * linked to them. Groups with zero accounts keep `.accounts = undefined`. This\n * method fills that gap by initializing an empty Map on those groups.\n *\n * Without this, `Group.getAccounts()` sees `undefined`, skips the cache check,\n * and falls through to a network request per group \u2014 causing hundreds of\n * redundant `/groups/{id}/accounts` calls on books with many groups.\n *\n * IMPORTANT: This method must NOT be guarded by `allGroupsLoaded` or any\n * similar flag. It runs inside `mapAccounts()`, which is always called after\n * `mapGroups()` sets `allGroupsLoaded = true`. A guard like\n * `if (!this.allGroupsLoaded)` would make this method dead code, silently\n * reintroducing the redundant network requests.\n *\n * @internal\n */\n ensureGroupsAccountMapsLoaded() {\n if (this.idGroupMap) {\n for (const group of this.idGroupMap.values()) {\n if (group.accounts == null) {\n group.accounts = new Map();\n }\n }\n }\n }\n /** @internal */\n clearCache() {\n this.clearGroupCache();\n this.clearAccountCache();\n }\n /** @internal */\n clearGroupCache() {\n this.allGroupsLoaded = false;\n this.idGroupMap = undefined;\n this.nameGroupMap = undefined;\n }\n /** @internal */\n clearAccountCache() {\n this.allAccountsLoaded = false;\n this.idAccountMap = undefined;\n this.nameAccountMap = undefined;\n }\n /** @internal */\n clearCollaboratorCache() {\n this.collaborators = undefined;\n }\n /** @internal */\n setAccount(account, remove) {\n const accountPayloads = this.payload.accounts || [];\n if (remove) {\n this.payload.accounts = accountPayloads.filter(a => a.id !== account.id);\n }\n else {\n const existingAccount = accountPayloads.find(a => a.id === account.id);\n if (existingAccount) {\n this.payload.accounts = accountPayloads.map(a => a.id === account.id ? account : a);\n }\n else {\n this.payload.accounts = [...accountPayloads, account];\n }\n }\n }\n /** @internal */\n setGroup(group, remove) {\n const groupPayloads = this.payload.groups || [];\n if (remove) {\n this.payload.groups = groupPayloads.filter(g => g.id !== group.id);\n }\n else {\n const existingGroup = groupPayloads.find(g => g.id === group.id);\n if (existingGroup) {\n this.payload.groups = groupPayloads.map(g => (g.id === group.id ? group : g));\n }\n else {\n this.payload.groups = [...groupPayloads, group];\n }\n }\n }\n /**\n * Lists transactions in the Book based on the provided query, limit, and cursor, for pagination.\n *\n * @param query - The query string to filter transactions\n * @param limit - The maximum number of transactions to return. Default to 100, max to 1000\n * @param cursor - The cursor for pagination\n *\n * @returns A [[TransactionList]] object containing the list of transactions\n */\n listTransactions(query, limit, cursor) {\n return __awaiter(this, void 0, void 0, function* () {\n const transactionsList = yield TransactionService.listTransactions(this.getId(), query, limit, cursor, this.getConfig());\n return new TransactionList(this, transactionsList);\n });\n }\n /**\n * Retrieve the number of transactions based on a query.\n *\n * @param query - The query string\n *\n * @returns The number of matching transactions\n */\n countTransactions(query) {\n return __awaiter(this, void 0, void 0, function* () {\n const count = yield TransactionService.countTransactions(this.getId(), query, this.getConfig());\n return count.total;\n });\n }\n /**\n * Lists events in the Book based on the provided parameters.\n *\n * @param afterDate - The start date (inclusive) for the events search range, in [RFC3339](https://en.wikipedia.org/wiki/ISO_8601#RFC_3339) format. Can be null\n * @param beforeDate - The end date (exclusive) for the events search range, in [RFC3339](https://en.wikipedia.org/wiki/ISO_8601#RFC_3339) format. Can be null\n * @param onError - True to search only for events on error\n * @param resourceId - The ID of the event's resource (Transaction, Account, or Group). Can be null\n * @param limit - The maximum number of events to return\n * @param cursor - The cursor for pagination. Can be null\n *\n * @returns An [[EventList]] object containing the list of events\n */\n listEvents(afterDate, beforeDate, onError, resourceId, limit, cursor) {\n return __awaiter(this, void 0, void 0, function* () {\n const eventsList = yield EventService.listEvents(this, afterDate, beforeDate, onError, resourceId, limit, cursor, this.getConfig());\n return new EventList(this, eventsList);\n });\n }\n /**\n * Retrieve a transaction by id.\n *\n * @param id - The transaction ID\n *\n * @returns The [[Transaction]] object\n */\n getTransaction(id) {\n return __awaiter(this, void 0, void 0, function* () {\n let wrapped = yield TransactionService.getTransaction(this.getId(), id, this.getConfig());\n if (!wrapped) {\n return undefined;\n }\n let transaction = new Transaction(this, wrapped);\n return transaction;\n });\n }\n /**\n * Retrieve a file by id.\n *\n * @param id - The file ID\n *\n * @returns The [[File]] object\n */\n getFile(id) {\n return __awaiter(this, void 0, void 0, function* () {\n let wrapped = yield FileService.getFile(this.getId(), id, this.getConfig());\n if (!wrapped) {\n return undefined;\n }\n let file = new File(this, wrapped);\n return file;\n });\n }\n /**\n * Performs create new Book.\n *\n * @returns The created Book object\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield BookService.createBook(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Creates a copy of this Book\n *\n * @param name - The name for the copied book\n * @param copyTransactions - True to copy transactions from the source book (user must be the Book owner)\n * @param fromDate - Start date to consider if copying transactions (numeric value in YYYYMMDD format)\n *\n * @returns The copied Book object\n */\n copy(name, copyTransactions, fromDate) {\n return __awaiter(this, void 0, void 0, function* () {\n const copiedBookPayload = yield BookService.copyBook(this.getId(), name, copyTransactions, fromDate, this.getConfig());\n return new Book(copiedBookPayload, this.config);\n });\n }\n /**\n * Perform update Book, applying pending changes.\n *\n * @returns The updated Book object\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield BookService.updateBook(this.getId(), this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Warning!\n *\n * Deletes this Book and all its data (transactions, accounts, groups). Book owner only.\n *\n * @returns This Book after deletion\n */\n remove() {\n return __awaiter(this, void 0, void 0, function* () {\n this.payload = yield BookService.deleteBook(this.getId(), this.getConfig());\n return this;\n });\n }\n /**\n * Create a [[BalancesReport]] based on query.\n *\n * @param query - The balances report query\n *\n * @returns The balances report\n *\n * Example:\n *\n * ```js\n * var book = BkperApp.getBook(\"agtzfmJrcGVyLWhyZHITCxIGTGVkZ2VyGICAgPXjx7oKDA\");\n *\n * var balancesReport = book.getBalancesReport(\"group:'Equity' after:7/2018 before:8/2018\");\n *\n * var accountBalance = balancesReport.getBalancesContainer(\"Bank Account\").getCumulativeBalance();\n * ```\n *\n * @returns The retrieved [[BalancesReport]] object\n */\n getBalancesReport(query) {\n return __awaiter(this, void 0, void 0, function* () {\n const balances = yield BalancesService.getBalances(this.getId(), query, this.getConfig());\n return new BalancesReport(this, balances);\n });\n }\n /**\n * Gets the saved queries from this book.\n *\n * @returns The saved queries from this book\n */\n getSavedQueries() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.queries == null) {\n const queryPayloads = yield QueryService.getSavedQueries(this.getId(), this.getConfig());\n this.queries = queryPayloads.map(payload => new Query(this, payload));\n }\n return this.queries;\n });\n }\n /**\n * Gets all collaborators of this Book.\n *\n * @returns Array of Collaborator objects\n */\n getCollaborators() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.collaborators) {\n const collaboratorPayloads = yield CollaboratorService.listCollaborators(this.getId(), this.getConfig());\n this.collaborators = collaboratorPayloads.map(payload => new Collaborator(this, payload));\n }\n return this.collaborators;\n });\n }\n /**\n * Gets the Backlog of this Book.\n *\n * @returns The Backlog object\n */\n getBacklog() {\n return __awaiter(this, void 0, void 0, function* () {\n const backlogPayload = yield EventService.getBacklog(this, this.getConfig());\n return new Backlog(backlogPayload, this.config);\n });\n }\n /**\n * Create a {@link AccountsDataTableBuilder}, to build two dimensional Array representations of {@link Account} dataset.\n *\n * @param accounts - Optional array of accounts. If not provided, all accounts will be fetched.\n *\n * @returns Accounts data table builder.\n */\n createAccountsDataTable(accounts) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!accounts) {\n accounts = yield this.getAccounts();\n }\n return new AccountsDataTableBuilder(accounts);\n });\n }\n /**\n * Create a {@link GroupsDataTableBuilder}, to build two dimensional Array representations of {@link Group} dataset.\n *\n * @param groups - Optional array of groups. If not provided, all groups will be fetched.\n *\n * @returns Groups data table builder.\n */\n createGroupsDataTable(groups) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!groups) {\n groups = yield this.getGroups();\n }\n return new GroupsDataTableBuilder(groups);\n });\n }\n /**\n * Create a {@link TransactionsDataTableBuilder}, to build two dimensional Array representations of {@link Transaction} dataset.\n *\n * @param transactions - Array of transactions to include in the table.\n * @param account - Optional account for balance column display.\n *\n * @returns Transactions data table builder.\n */\n createTransactionsDataTable(transactions, account) {\n return new TransactionsDataTableBuilder(this, transactions, account);\n }\n}\n//# sourceMappingURL=Book.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { HttpApiRequest } from \"./http-api-request.js\";\nexport function getTemplates(config) {\n return __awaiter(this, void 0, void 0, function* () {\n let response = yield new HttpApiRequest(`v5/templates`, config).setMethod('GET').fetch();\n if (response.data == null) {\n return [];\n }\n let templateListPlain = response.data;\n let templatesJson = templateListPlain.items;\n if (templatesJson == null) {\n return [];\n }\n return templatesJson;\n });\n}\n//# sourceMappingURL=template-service.js.map", "import { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\n/**\n * This class defines a Template.\n *\n * A Template is a pre-configured setup for [[Books]] and associated Google Sheets that provides users with a starting point for specific accounting or financial management needs.\n *\n * @public\n */\nexport class Template extends Resource {\n constructor(json, config) {\n super(json);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Gets the name of the Template.\n *\n * @returns The Template's name\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Gets the description of the Template.\n *\n * @returns The Template's description\n */\n getDescription() {\n return this.payload.description;\n }\n /**\n * Gets the url of the image of the Template.\n *\n * @returns The url of the Template's image\n */\n getImageUrl() {\n return this.payload.imageUrl;\n }\n /**\n * Gets the category of the Template.\n *\n * @returns The Template's category. Example: \"PERSONAL\", \"BUSINESS\", etc\n */\n getCategory() {\n return this.payload.category;\n }\n /**\n * Gets the times the Template has been used.\n *\n * @returns The number of times the Template has been used\n */\n getTimesUsed() {\n return this.payload.timesUsed || 0;\n }\n /**\n * Gets the bookId of the [[Book]] associated with the Template.\n *\n * @returns The bookId of the Book associated with the Template\n */\n getBookId() {\n return this.payload.bookId;\n }\n /**\n * Gets the link of the [[Book]] associated with the Template.\n *\n * @returns The link of the Book associated with the Template\n */\n getBookLink() {\n return this.payload.bookLink;\n }\n /**\n * Gets the link of the Google Sheets spreadsheet associated with the Template.\n *\n * @returns The link of the Google Sheets spreadsheet associated with the Template\n */\n getSheetsLink() {\n return this.payload.sheetsLink;\n }\n}\n//# sourceMappingURL=Template.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Book } from \"./Book.js\";\nimport { App } from \"./App.js\";\nimport * as AppService from \"../service/app-service.js\";\nimport * as BookService from \"../service/book-service.js\";\nimport * as CollectionService from \"../service/collection-service.js\";\nimport * as UserService from \"../service/user-service.js\";\nimport * as TemplateService from \"../service/template-service.js\";\nimport { User } from \"./User.js\";\nimport { Template } from \"./Template.js\";\nimport { Collection } from \"./Collection.js\";\n/**\n * This is the main entry point of the [bkper-js](https://www.npmjs.com/package/bkper-js) library.\n *\n * You can configure the library in two ways:\n *\n * 1. Using static configuration (traditional approach):\n *\n * ```typescript\n * Bkper.setConfig({\n * apiKeyProvider: () => process.env.BKPER_API_KEY,\n * oauthTokenProvider: () => process.env.BKPER_OAUTH_TOKEN\n * });\n *\n * const bkper = new Bkper();\n * const book = await bkper.getBook('bookId');\n * ```\n *\n * 2. Using per-instance configuration (recommended for Cloudflare Workers):\n *\n * ```typescript\n * const bkper = new Bkper({\n * apiKeyProvider: () => process.env.BKPER_API_KEY,\n * oauthTokenProvider: () => process.env.BKPER_OAUTH_TOKEN\n * });\n *\n * const book = await bkper.getBook('bookId');\n * ```\n *\n * @public\n */\nexport class Bkper {\n /**\n * Sets the global API configuration for all Bkper operations.\n *\n * WARNING: This configuration will be shared and should NOT be used on shared environments.\n *\n * @param config - The Config object containing API key and OAuth token providers\n */\n static setConfig(config) {\n Bkper.globalConfig = config;\n }\n /**\n * Creates a new Bkper instance with the provided configuration.\n *\n * @param config - The Config object containing API key and OAuth token providers.\n * If not provided, uses the global configuration set via setConfig().\n */\n constructor(config) {\n this.config = config || Bkper.globalConfig;\n }\n /**\n * Gets the current instance configuration.\n *\n * @returns The Config object for this Bkper instance\n */\n getConfig() {\n return this.config;\n }\n /**\n * Gets the [[Book]] with the specified bookId from url param.\n *\n * @param id - The universal book id - The same bookId param of URL you access at app.bkper.com\n * @param includeAccounts - Optional parameter to include accounts in the retrieved Book\n * @param includeGroups - Optional parameter to include groups in the retrieved Book\n *\n * If both includeAccounts and includeGroups are false, the Book will be returned with only the basic information.\n *\n * If includeAccounts is true, the Book will be returned with the accounts and groups.\n *\n * If includeGroups is true, the Book will be returned with the groups.\n *\n * @returns The retrieved Book\n */\n getBook(id, includeAccounts, includeGroups) {\n return __awaiter(this, void 0, void 0, function* () {\n let book = yield BookService.loadBook(id, includeAccounts, includeGroups, this.config);\n return new Book(book, this.config);\n });\n }\n /**\n * Gets all [[Books]] the user has access to.\n *\n * @param query - Optional search term to filter books\n * @returns The retrieved list of Books\n */\n getBooks(query) {\n return __awaiter(this, void 0, void 0, function* () {\n let books = yield BookService.loadBooks(query, this.config);\n return books.map((book) => new Book(book, this.config));\n });\n }\n /**\n * Gets all [[Collections]] the user has access to.\n *\n * @returns The retrieved list of Collections\n */\n getCollections() {\n return __awaiter(this, void 0, void 0, function* () {\n let collections = yield CollectionService.loadCollections(this.config);\n return collections.map((collection) => new Collection(collection, this.config));\n });\n }\n /**\n * Gets all [[Apps]] available for the user.\n *\n * @returns The retrieved list of Apps\n */\n getApps() {\n return __awaiter(this, void 0, void 0, function* () {\n let apps = yield AppService.getApps(this.config);\n return apps.map((app) => new App(app, this.config));\n });\n }\n /**\n * Gets the [[App]] with the specified id.\n *\n * @param id - The App id (agentId)\n *\n * @returns The retrieved App\n */\n getApp(id) {\n return __awaiter(this, void 0, void 0, function* () {\n let app = yield AppService.getApp(id, this.config);\n return new App(app, this.config);\n });\n }\n /**\n * Gets all [[Templates]] available for the user.\n *\n * @returns The retrieved list of Templates\n */\n getTemplates() {\n return __awaiter(this, void 0, void 0, function* () {\n let templates = yield TemplateService.getTemplates(this.config);\n return templates.map((template) => new Template(template, this.config));\n });\n }\n /**\n * Gets the current logged [[User]].\n *\n * @returns The retrieved User\n */\n getUser() {\n return __awaiter(this, void 0, void 0, function* () {\n let user = yield UserService.getUser(this.config);\n return new User(user, this.config);\n });\n }\n}\n/** @internal */\nBkper.globalConfig = {};\n//# sourceMappingURL=Bkper.js.map", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as AppService from \"../service/app-service.js\";\nimport { Resource } from \"./Resource.js\";\nimport { Bkper } from \"./Bkper.js\";\n/**\n * Defines an App on Bkper.\n *\n * Apps can be installed on Books by users.\n *\n * @public\n */\nexport class App extends Resource {\n constructor(payload, config) {\n super(payload);\n this.config = config;\n }\n /** @internal */\n getConfig() {\n return this.config || Bkper.globalConfig;\n }\n /**\n * Sets the webhook url for development.\n *\n * @param webhookUrlDev - The webhook URL for development\n *\n * @returns This App, for chaining\n */\n setWebhookUrlDev(webhookUrlDev) {\n this.payload.webhookUrlDev = webhookUrlDev;\n return this;\n }\n /**\n * Gets the App universal identifier.\n *\n * @returns The App universal identifier\n */\n getId() {\n return this.payload.id;\n }\n /**\n * Gets the name of this App.\n *\n * @returns The name of this App\n */\n getName() {\n return this.payload.name;\n }\n /**\n * Checks if this App has events bound to it.\n *\n * @returns True if this App has events bound to it\n */\n hasEvents() {\n const events = this.getEvents() || [];\n return events.length > 0;\n }\n /**\n * Gets the events bound to this App.\n *\n * @returns The events bound to this App\n */\n getEvents() {\n return this.payload.events;\n }\n /**\n * Checks if this App is published.\n *\n * @returns True if this App is published\n */\n isPublished() {\n return this.payload.published || false;\n }\n /**\n * Tells if this App is installable.\n *\n * @returns True if this App is installable\n */\n isInstallable() {\n return this.payload.installable || false;\n }\n /**\n * Gets the logo url of this App.\n *\n * @returns The logo url of this App\n */\n getLogoUrl() {\n return this.payload.logoUrl;\n }\n /**\n * Gets the logo url of this App in dark mode.\n *\n * @returns The logo url of this App in dark mode\n */\n getLogoUrlDark() {\n return this.payload.logoUrlDark;\n }\n /**\n * Gets the description of this App.\n *\n * @returns The description of this App\n */\n getDescription() {\n return this.payload.description;\n }\n /**\n * Sets the whitelisted users (usernames and domain patterns).\n *\n * @param users - The users to whitelist (comma or space separated usernames and domain patterns like *@domain.com)\n *\n * @returns This App for chaining\n */\n setUsers(users) {\n this.payload.users = users;\n return this;\n }\n /**\n * Gets the whitelisted users (usernames and domain patterns).\n *\n * @returns The users string\n */\n getUsers() {\n return this.payload.users;\n }\n /**\n * Gets the menu url of this App.\n *\n * @returns The menu url of this App\n */\n getMenuUrl() {\n return this.payload.menuUrl;\n }\n /**\n * Gets the menu development url of this App.\n *\n * @returns The menu development url of this App\n */\n getMenuUrlDev() {\n return this.payload.menuUrlDev;\n }\n /**\n * Gets the menu text of this App.\n *\n * @returns The menu text of this App\n */\n getMenuText() {\n return this.payload.menuText;\n }\n /**\n * Gets the menu popup width of this App.\n *\n * @returns The menu popup width of this App\n */\n getMenuPopupWidth() {\n return this.payload.menuPopupWidth;\n }\n /**\n * Gets the menu popup height of this App.\n *\n * @returns The menu popup height of this App\n */\n getMenuPopupHeight() {\n return this.payload.menuPopupHeight;\n }\n /**\n * Gets the name of the owner of this App.\n *\n * @returns The name of the owner of this App\n */\n getOwnerName() {\n return this.payload.ownerName;\n }\n /**\n * Gets the logo url of the owner of this App.\n *\n * @returns The logo url of the owner of this App\n */\n getOwnerLogoUrl() {\n return this.payload.ownerLogoUrl;\n }\n /**\n * Gets the website url of the owner of this App.\n *\n * @returns The website url of the owner of this App\n */\n getOwnerWebsiteUrl() {\n return this.payload.ownerWebsite;\n }\n /**\n * Gets the file patterns the App handles.\n *\n * @returns The file patterns the App handles - E.g *.pdf *.csv\n */\n getFilePatterns() {\n return this.payload.filePatterns;\n }\n /**\n * Sets the developers (usernames and domain patterns).\n *\n * @param developers - The developers (comma or space separated usernames and domain patterns like *@domain.com)\n *\n * @returns This App for chaining\n */\n setDevelopers(developers) {\n this.payload.developers = developers;\n return this;\n }\n /**\n * Gets the developers (usernames and domain patterns).\n *\n * @returns The developers string\n */\n getDevelopers() {\n return this.payload.developers;\n }\n /**\n * Sets the client secret.\n *\n * @param clientSecret - The client secret to set\n *\n * @returns This App for chaining\n */\n setClientSecret(clientSecret) {\n this.payload.clientSecret = clientSecret;\n return this;\n }\n /**\n * Gets the website url of this App.\n *\n * @returns The website url of this App\n */\n getWebsiteUrl() {\n return this.payload.website;\n }\n /**\n * Tells if the repository is private.\n *\n * @returns True if the repository is private\n */\n isRepositoryPrivate() {\n return this.payload.repoPrivate;\n }\n /**\n * Gets the repository url of this App.\n *\n * @returns The repository url of this App\n */\n getRepositoryUrl() {\n return this.payload.repoUrl;\n }\n /**\n * Gets the readme.md file as text.\n *\n * @returns The readme text\n */\n getReadme() {\n return this.payload.readmeMd || this.payload.readme;\n }\n /**\n * Sets the readme.md file as text.\n *\n * @param readme - The readme text to set\n *\n * @returns This App, for chaining\n */\n setReadme(readme) {\n this.payload.readmeMd = readme;\n return this;\n }\n /**\n * Performs the app creation, applying pending changes.\n *\n * The App id MUST be unique. If another app is already existing, an error will be thrown.\n *\n * @returns This App after creation\n */\n create() {\n return __awaiter(this, void 0, void 0, function* () {\n yield AppService.createApp(this.payload, this.getConfig());\n return this;\n });\n }\n /**\n * Performs a full update of the App, applying pending changes.\n *\n * @returns This App after the update\n */\n update() {\n return __awaiter(this, void 0, void 0, function* () {\n yield AppService.updateApp(this.payload, this.getConfig());\n return this;\n });\n }\n}\n//# sourceMappingURL=App.js.map", "import { convertInMatrix } from '../utils.js';\n/**\n * A BooksDataTableBuilder is used to setup and build two-dimensional arrays containing books.\n *\n * @public\n */\nexport class BooksDataTableBuilder {\n constructor(books) {\n this.shouldAddProperties = false;\n this.shouldAddIds = false;\n this.shouldAddHiddenProperties = false;\n this.propertyKeys = [];\n this.books = books;\n }\n /**\n * Defines whether to include custom book properties.\n *\n * @param include - Whether to include properties\n *\n * @returns This builder with respective include properties option, for chaining.\n */\n properties(include) {\n this.shouldAddProperties = include;\n return this;\n }\n /**\n * Defines whether to include book ids.\n *\n * @param include - Whether to include ids\n *\n * @returns This builder with respective include ids option, for chaining.\n */\n ids(include) {\n this.shouldAddIds = include;\n return this;\n }\n /**\n * Defines whether to include hidden properties (keys ending with underscore \"_\").\n * Only relevant when {@link properties} is enabled.\n * Default is false \u2014 hidden properties are excluded.\n *\n * @param include - Whether to include hidden properties\n *\n * @returns This builder with respective option, for chaining.\n */\n hiddenProperties(include) {\n this.shouldAddHiddenProperties = include;\n return this;\n }\n mapPropertyKeys() {\n this.propertyKeys = [];\n for (const book of this.books) {\n for (const key of book.getPropertyKeys()) {\n if (!this.shouldAddHiddenProperties && key.endsWith('_')) {\n continue;\n }\n if (this.propertyKeys.indexOf(key) <= -1) {\n this.propertyKeys.push(key);\n }\n }\n }\n this.propertyKeys = this.propertyKeys.sort();\n }\n /**\n * Builds a two-dimensional array containing all Books.\n *\n * @returns A two-dimensional array containing all Books\n */\n build() {\n var _a, _b;\n const table = new Array();\n this.books.sort((a, b) => {\n var _a, _b;\n const collA = (_a = a.getCollection()) === null || _a === void 0 ? void 0 : _a.getName();\n const collB = (_b = b.getCollection()) === null || _b === void 0 ? void 0 : _b.getName();\n // Books with collection before books without\n if (collA && !collB)\n return -1;\n if (!collA && collB)\n return 1;\n let ret = (collA || '').localeCompare(collB || '');\n if (ret === 0) {\n ret = (a.getName() || '').localeCompare(b.getName() || '');\n }\n return ret;\n });\n let headers = [];\n if (this.shouldAddIds) {\n headers.push('Book Id');\n }\n headers.push('Name');\n headers.push('Collection');\n headers.push('Date Pattern');\n headers.push('Decimal Separator');\n headers.push('Fraction Digits');\n headers.push('Period');\n headers.push('Owner');\n if (this.shouldAddProperties) {\n this.mapPropertyKeys();\n headers = headers.concat(this.propertyKeys);\n }\n for (const book of this.books) {\n const line = [];\n if (this.shouldAddIds) {\n line.push(book.getId());\n }\n line.push(book.getName() || '');\n line.push(((_a = book.getCollection()) === null || _a === void 0 ? void 0 : _a.getName()) || '');\n line.push(book.getDatePattern() || '');\n line.push(book.getDecimalSeparator() || '');\n line.push((_b = book.getFractionDigits()) !== null && _b !== void 0 ? _b : '');\n line.push(book.getPeriod() || '');\n line.push(book.getOwnerName() || '');\n if (this.shouldAddProperties) {\n const properties = book.getProperties();\n for (const key of this.propertyKeys) {\n line.push(properties[key] || '');\n }\n }\n table.push(line);\n }\n table.unshift(headers);\n convertInMatrix(table);\n return table;\n }\n}\n//# sourceMappingURL=BooksDataTableBuilder.js.map"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["LuxonError", "Error", "InvalidDateTimeError", "_LuxonError", "_inheritsLoose", "reason", "toMessage", "InvalidIntervalError", "_LuxonError2", "InvalidDurationError", "_LuxonError3", "ConflictingSpecificationError", "_LuxonError4", "InvalidUnitError", "_LuxonError5", "unit", "InvalidArgumentError", "_LuxonError6", "ZoneIsAbstractError", "_LuxonError7", "n", "s", "l", "DATE_SHORT", "year", "month", "day", "DATE_MED", "DATE_MED_WITH_WEEKDAY", "weekday", "DATE_FULL", "DATE_HUGE", "TIME_SIMPLE", "hour", "minute", "TIME_WITH_SECONDS", "second", "TIME_WITH_SHORT_OFFSET", "timeZoneName", "TIME_WITH_LONG_OFFSET", "TIME_24_SIMPLE", "hour12", "TIME_24_WITH_SECONDS", "TIME_24_WITH_SHORT_OFFSET", "TIME_24_WITH_LONG_OFFSET", "DATETIME_SHORT", "DATETIME_SHORT_WITH_SECONDS", "DATETIME_MED", "DATETIME_MED_WITH_SECONDS", "DATETIME_MED_WITH_WEEKDAY", "DATETIME_FULL", "DATETIME_FULL_WITH_SECONDS", "DATETIME_HUGE", "DATETIME_HUGE_WITH_SECONDS", "isUndefined", "o", "isNumber", "isInteger", "isString", "isDate", "Object", "prototype", "toString", "call", "hasIntl", "Intl", "DateTimeFormat", "e", "hasFormatToParts", "formatToParts", "hasRelative", "RelativeTimeFormat", "maybeArray", "thing", "Array", "isArray", "bestBy", "arr", "by", "compare", "length", "reduce", "best", "next", "pair", "pick", "obj", "keys", "a", "k", "hasOwnProperty", "prop", "integerBetween", "bottom", "top", "floorMod", "x", "Math", "floor", "padStart", "input", "minus", "target", "result", "repeat", "slice", "parseInteger", "string", "parseInt", "parseMillis", "fraction", "f", "parseFloat", "roundTo", "number", "digits", "towardZero", "factor", "rounder", "trunc", "round", "isLeapYear", "daysInYear", "daysInMonth", "modMonth", "modYear", "objToLocalTS", "d", "Date", "UTC", "millisecond", "setUTCFullYear", "getUTCFullYear", "weeksInWeekYear", "weekYear", "p1", "last", "p2", "untruncateYear", "parseZoneInfo", "ts", "offsetFormat", "locale", "timeZone", "date", "intlOpts", "modified", "assign", "intl", "parsed", "find", "m", "type", "toLowerCase", "value", "without", "format", "included", "diffed", "substring", "trimmed", "replace", "signedOffset", "offHourStr", "offMinuteStr", "offHour", "Number", "isNaN", "offMin", "offMinSigned", "is", "asNumber", "numericValue", "normalizeObject", "normalizer", "nonUnitKeys", "normalized", "u", "indexOf", "v", "formatOffset", "offset", "hours", "abs", "minutes", "sign", "RangeError", "timeObject", "ianaRegex", "stringify", "JSON", "sort", "monthsLong", "monthsShort", "monthsNarrow", "months", "weekdaysLong", "weekdaysShort", "weekdaysNarrow", "weekdays", "meridiems", "erasLong", "erasShort", "erasNarrow", "eras", "meridiemForDateTime", "dt", "weekdayForDateTime", "monthForDateTime", "eraForDateTime", "formatRelativeTime", "count", "numeric", "narrow", "units", "years", "quarters", "weeks", "days", "seconds", "lastable", "isDay", "isInPast", "fmtValue", "singular", "lilUnits", "fmtUnit", "formatString", "knownFormat", "filtered", "key", "dateTimeHuge", "Formats", "stringifyTokens", "splits", "tokenToString", "_iterator", "_createForOfIteratorHelperLoose", "_step", "token", "literal", "val", "macroTokenToFormatOpts", "D", "DD", "DDD", "DDDD", "t", "tt", "ttt", "tttt", "T", "TT", "TTT", "TTTT", "ff", "fff", "ffff", "F", "FF", "FFF", "FFFF", "Formatter", "create", "opts", "parseFormat", "fmt", "current", "currentFull", "bracketed", "i", "c", "charAt", "push", "formatOpts", "loc", "systemLoc", "formatWithSystemDefault", "redefaultToSystem", "df", "dtFormatter", "formatDateTime", "formatDateTimeParts", "resolvedOptions", "num", "p", "forceSimple", "padTo", "numberFormatter", "formatDateTimeFromString", "_this", "knownEnglish", "listingMode", "useDateTimeFormatter", "outputCalendar", "extract", "isOffsetFixed", "allowZ", "isValid", "zone", "meridiem", "English", "standalone", "maybeMacro", "era", "offsetName", "zoneName", "weekNumber", "ordinal", "quarter", "formatDurationFromString", "dur", "_this2", "tokenToField", "lildur", "mapped", "get", "tokens", "realTokens", "found", "_ref", "concat", "collapsed", "shiftTo", "map", "filter", "Invalid", "explanation", "Zone", "equals", "otherZone", "singleton", "LocalZone", "getTimezoneOffset", "matchingRegex", "RegExp", "source", "dtfCache", "makeDTF", "typeToPos", "hackyOffset", "dtf", "formatted", "exec", "fMonth", "fDay", "fYear", "fHour", "fMinute", "fSecond", "partsOffset", "filled", "_formatted$i", "pos", "ianaZoneCache", "IANAZone", "name", "resetCache", "isValidSpecifier", "match", "isValidZone", "parseGMTOffset", "specifier", "_Zone", "valid", "NaN", "_ref2", "adjustedHour", "asUTC", "asTS", "over", "FixedOffsetZone", "instance", "utcInstance", "parseSpecifier", "r", "fixed", "InvalidZone", "normalizeZone", "defaultZone", "lowered", "now", "defaultLocale", "defaultNumberingSystem", "defaultOutputCalendar", "throwOnInvalid", "Settings", "resetCaches", "Locale", "z", "numberingSystem", "intlDTCache", "getCachedDTF", "locString", "intlNumCache", "getCachedINF", "inf", "NumberFormat", "intlRelCache", "getCachedRTF", "_opts", "base", "cacheKeyOpts", "_objectWithoutPropertiesLoose", "sysLocaleCache", "systemLocale", "computedSys", "parseLocaleString", "localeStr", "uIndex", "options", "smaller", "_options", "calendar", "intlConfigString", "mapMonths", "ms", "DateTime", "utc", "mapWeekdays", "listStuff", "defaultOK", "englishFn", "intlFn", "mode", "supportsFastNumbers", "startsWith", "PolyNumberFormatter", "useGrouping", "minimumIntegerDigits", "PolyDateFormatter", "universal", "gmtOffset", "offsetZ", "isOffsetZoneSupported", "fromMillis", "toJSDate", "tokenFormat", "PolyRelFormatter", "isEnglish", "style", "rtf", "fromOpts", "defaultToEN", "specifiedLocale", "localeR", "numberingSystemR", "outputCalendarR", "fromObject", "_temp", "numbering", "_parseLocaleString", "parsedLocale", "parsedNumberingSystem", "parsedOutputCalendar", "weekdaysCache", "monthsCache", "meridiemCache", "eraCache", "fastNumbersCached", "hasFTP", "isActuallyEn", "hasNoWeirdness", "clone", "alts", "getOwnPropertyNames", "redefaultToEN", "formatStr", "_this3", "undefined", "_this4", "field", "results", "matching", "fastNumbers", "relFormatter", "other", "combineRegexes", "_len", "regexes", "_key", "full", "combineExtractors", "_len2", "extractors", "_key2", "ex", "mergedVals", "mergedZone", "cursor", "_ex", "parse", "_len3", "patterns", "_key3", "_i", "_patterns", "_patterns$_i", "regex", "extractor", "simpleParse", "_len4", "_key4", "ret", "offsetRegex", "isoTimeBaseRegex", "isoTimeRegex", "isoTimeExtensionRegex", "isoYmdRegex", "isoWeekRegex", "isoOrdinalRegex", "extractISOWeekData", "extractISOOrdinalData", "sqlYmdRegex", "sqlTimeRegex", "sqlTimeExtensionRegex", "int", "fallback", "extractISOYmd", "item", "extractISOTime", "milliseconds", "extractISOOffset", "local", "fullOffset", "extractIANAZone", "isoTimeOnly", "isoDuration", "extractISODuration", "yearStr", "monthStr", "weekStr", "dayStr", "hourStr", "minuteStr", "secondStr", "millisecondsStr", "hasNegativePrefix", "negativeSeconds", "maybeNegate", "force", "obsOffsets", "GMT", "EDT", "EST", "CDT", "CST", "MDT", "MST", "PDT", "PST", "fromStrings", "weekdayStr", "rfc2822", "extractRFC2822", "obsOffset", "milOffset", "preprocessRFC2822", "trim", "rfc1123", "rfc850", "ascii", "extractRFC1123Or850", "extractASCII", "isoYmdWithTimeExtensionRegex", "isoWeekWithTimeExtensionRegex", "isoOrdinalWithTimeExtensionRegex", "isoTimeCombinedRegex", "extractISOYmdTimeAndOffset", "extractISOWeekTimeAndOffset", "extractISOOrdinalDateAndTime", "extractISOTimeAndOffset", "parseISODate", "parseRFC2822Date", "parseHTTPDate", "parseISODuration", "extractISOTimeOnly", "parseISOTimeOnly", "sqlYmdWithTimeExtensionRegex", "sqlTimeCombinedRegex", "extractISOYmdTimeOffsetAndIANAZone", "extractISOTimeOffsetAndIANAZone", "parseSQL", "INVALID", "lowOrderMatrix", "casualMatrix", "daysInYearAccurate", "daysInMonthAccurate", "accurateMatrix", "orderedUnits", "reverseUnits", "reverse", "clear", "conf", "values", "conversionAccuracy", "Duration", "antiTrunc", "ceil", "convert", "matrix", "fromMap", "fromUnit", "toMap", "toUnit", "conv", "raw", "sameSign", "added", "normalizeValues", "vals", "previous", "config", "accurate", "invalid", "isLuxonDuration", "normalizeUnit", "fromISO", "text", "_parseISODuration", "fromISOTime", "_parseISOTimeOnly", "week", "isDuration", "toFormat", "fmtOpts", "toObject", "includeConfig", "toISO", "toISOTime", "millis", "toMillis", "suppressMilliseconds", "suppressSeconds", "includePrefix", "str", "toJSON", "as", "valueOf", "plus", "duration", "friendlyDuration", "negate", "mapUnits", "fn", "_Object$keys", "set", "mixed", "reconfigure", "normalize", "built", "accumulated", "lastUnit", "_iterator2", "_step2", "own", "ak", "down", "negated", "_i2", "_Object$keys2", "eq", "v1", "v2", "_iterator3", "_step3", "durationish", "validateStartEnd", "start", "end", "Interval", "isLuxonInterval", "fromDateTimes", "builtStart", "friendlyDateTime", "builtEnd", "validateError", "after", "before", "_split", "split", "startIsValid", "endIsValid", "isInterval", "toDuration", "startOf", "diff", "hasSame", "isEmpty", "isAfter", "dateTime", "isBefore", "contains", "splitAt", "dateTimes", "sorted", "splitBy", "idx", "divideEqually", "numberOfParts", "overlaps", "abutsStart", "abutsEnd", "engulfs", "intersection", "union", "merge", "intervals", "_intervals$sort$reduc", "b", "sofar", "final", "xor", "_Array$prototype", "currentCount", "ends", "time", "flattened", "difference", "toISODate", "dateFormat", "_temp2", "_ref3", "_ref3$separator", "separator", "invalidReason", "mapEndpoints", "mapFn", "Info", "hasDST", "proto", "setZone", "isValidIANAZone", "_ref$locale", "_ref$numberingSystem", "_ref$locObj", "locObj", "_ref$outputCalendar", "monthsFormat", "_ref2$locale", "_ref2$numberingSystem", "_ref2$locObj", "_ref2$outputCalendar", "_temp3", "_ref3$locale", "_ref3$numberingSystem", "_ref3$locObj", "weekdaysFormat", "_temp4", "_ref4", "_ref4$locale", "_ref4$numberingSystem", "_ref4$locObj", "_temp5", "_ref5", "_ref5$locale", "_temp6", "_ref6", "_ref6$locale", "features", "intlTokens", "zones", "relative", "dayDiff", "earlier", "later", "utcDayStart", "toUTC", "keepLocalTime", "highOrderDiffs", "differs", "lowestOrder", "highWater", "_differs", "_differs$_i", "differ", "_cursor$plus", "delta", "_cursor$plus2", "_diff", "_highOrderDiffs", "remainingMillis", "lowerOrderUnits", "_cursor$plus3", "_Duration$fromMillis", "numberingSystems", "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "hanidec", "khmr", "knda", "laoo", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt", "latn", "numberingSystemsUTF16", "hanidecChars", "parseDigits", "code", "charCodeAt", "search", "_numberingSystemsUTF", "min", "max", "digitRegex", "append", "MISSING_FTP", "intUnit", "post", "deser", "NBSP", "String", "spaceOrNBSP", "spaceOrNBSPRegExp", "fixListRegex", "stripInsensitivities", "oneOf", "strings", "startIndex", "join", "findIndex", "groups", "h", "simple", "escapeToken", "unitForToken", "one", "two", "three", "four", "six", "oneOrTwo", "oneToThree", "oneToSix", "oneToNine", "twoToFour", "fourToSix", "unitate", "partTypeStyleToTokenVal", "short", "long", "dayperiod", "dayPeriod", "tokenForPart", "part", "buildRegex", "re", "handlers", "matches", "all", "matchIndex", "dateTimeFromMatches", "toField", "Z", "q", "M", "G", "y", "S", "dummyDateTimeCache", "getDummyDateTime", "maybeExpandMacroToken", "formatter", "parts", "includes", "expandMacroTokens", "explainFromTokens", "disqualifyingUnit", "_buildRegex", "regexString", "_match", "rawMatches", "parseFromTokens", "_explainFromTokens", "nonLeapLadder", "leapLadder", "unitOutOfRange", "dayOfWeek", "js", "getUTCDay", "computeOrdinal", "uncomputeOrdinal", "table", "month0", "gregorianToWeek", "gregObj", "weekToGregorian", "weekData", "weekdayOfJan4", "yearInDays", "_uncomputeOrdinal", "gregorianToOrdinal", "gregData", "ordinalToGregorian", "ordinalData", "_uncomputeOrdinal2", "hasInvalidWeekData", "validYear", "validWeek", "validWeekday", "hasInvalidOrdinalData", "validOrdinal", "hasInvalidGregorianData", "validMonth", "validDay", "hasInvalidTimeData", "validHour", "validMinute", "validSecond", "validMillisecond", "MAX_DATE", "unsupportedZone", "possiblyCachedWeekData", "inst", "old", "fixOffset", "localTS", "tz", "utcGuess", "o2", "o3", "tsToObj", "getUTCMonth", "getUTCDate", "getUTCHours", "getUTCMinutes", "getUTCSeconds", "getUTCMilliseconds", "objToTS", "adjustTime", "oPre", "millisToAdd", "_fixOffset", "parseDataToDateTime", "parsedZone", "interpretationZone", "toTechFormat", "toTechTimeFormat", "_ref$suppressSeconds", "_ref$suppressMillisec", "includeOffset", "_ref$includePrefix", "_ref$includeZone", "includeZone", "_ref$spaceZone", "spaceZone", "_ref$format", "defaultUnitValues", "defaultWeekUnitValues", "defaultOrdinalUnitValues", "orderedWeekUnits", "orderedOrdinalUnits", "weeknumber", "weeksnumber", "weeknumbers", "weekyear", "weekyears", "quickDT", "tsNow", "offsetProvis", "_objToTS", "diffRelative", "calendary", "unchanged", "ot", "_zone", "isLuxonDateTime", "fromJSDate", "zoneToUse", "fromSeconds", "containsOrdinal", "containsGregorYear", "containsGregorMD", "containsGregor", "definiteWeekDef", "useWeekData", "defaultValues", "objNow", "foundFirst", "higherOrderInvalid", "gregorian", "_objToTS2", "tsFinal", "offsetFinal", "_parseISODate", "fromRFC2822", "_parseRFC2822Date", "fromHTTP", "_parseHTTPDate", "fromFormat", "_opts$locale", "_opts$numberingSystem", "localeToUse", "_parseFromTokens", "fromString", "fromSQL", "_parseSQL", "isDateTime", "resolvedLocaleOpts", "_Formatter$create$res", "toLocal", "_ref3$keepLocalTime", "_ref3$keepCalendarTim", "keepCalendarTime", "newTS", "offsetGuess", "asObj", "_objToTS3", "setLocale", "settingWeekStuff", "_objToTS4", "normalizedUnit", "endOf", "_this$plus", "toLocaleString", "toLocaleParts", "_ref5$format", "toISOWeekDate", "_ref6$suppressMillise", "_ref6$suppressSeconds", "_ref6$includeOffset", "_ref6$includePrefix", "_ref6$format", "toRFC2822", "toHTTP", "toSQLDate", "toSQLTime", "_ref7", "_ref7$includeOffset", "_ref7$includeZone", "toSQL", "toSeconds", "toBSON", "otherDateTime", "durOpts", "otherIsLater", "diffNow", "until", "inputMs", "otherZoneDateTime", "toRelative", "padding", "toRelativeCalendar", "every", "fromFormatExplain", "_options$locale", "_options$numberingSys", "fromStringExplain", "dateTimeish", "VERSION", "index_exports", "__export", "Account", "AccountType", "AccountsDataTableBuilder", "Agent", "Amount", "App", "Backlog", "Balance", "BalanceType", "BalancesDataTableBuilder", "BalancesReport", "Billing", "Bkper", "BkperError", "Book", "BooksDataTableBuilder", "BotResponse", "BotResponseType", "Collaborator", "Collection", "Connection", "DecimalSeparator", "Event", "EventList", "EventType", "File", "Group", "GroupsDataTableBuilder", "Integration", "Month", "Period", "Periodicity", "Permission", "Query", "Template", "Transaction", "TransactionList", "TransactionStatus", "TransactionsDataTableBuilder", "User", "Visibility", "BkperError", "code", "message", "reason", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "HttpRequest", "url", "method", "name", "payload", "param", "key", "fetchOptions", "response", "data", "contentType", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "API_BASE_URL", "resolveBaseUrl", "config", "HttpApiRequest", "HttpRequest", "path", "baseUrl", "_super", "resp", "errorObj", "effectiveConfig", "error", "BkperError", "status", "_a", "_b", "_c", "_d", "_e", "details", "err", "_f", "_g", "_h", "_j", "customError", "headers", "key", "agentId", "apiKey", "token", "HttpBooksApiV5Request", "service", "HttpApiV5Request", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "createAccount", "bookId", "account", "config", "response", "HttpBooksApiV5Request", "createAccounts", "payload", "_a", "updateAccount", "updateAccounts", "deleteAccount", "deleteAccounts", "getAccount", "idOrName", "getAccounts", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "createGroup", "bookId", "group", "config", "response", "HttpBooksApiV5Request", "createGroups", "payload", "_a", "updateGroup", "deleteGroup", "getGroups", "bookId", "config", "__awaiter", "response", "HttpBooksApiV5Request", "groupsPlain", "getGroup", "idOrName", "getAccounts", "accountsPlain", "import_luxon", "DP", "RM", "MAX_DP", "MAX_POWER", "NE", "PE", "STRICT", "NAME", "INVALID", "INVALID_DP", "INVALID_RM", "DIV_BY_ZERO", "P", "UNDEFINED", "NUMERIC", "_Big_", "Big", "n", "x", "parse", "e", "i", "nl", "round", "sd", "rm", "more", "xc", "stringify", "doExponential", "isNonzero", "s", "y", "isneg", "yc", "j", "k", "l", "a", "b", "dp", "bl", "bt", "cmp", "ri", "bz", "ai", "al", "r", "rl", "q", "qc", "qi", "p", "t", "xlty", "xe", "ye", "ygtx", "one", "c", "half", "big_default", "Amount", "_Amount", "n", "big_default", "big", "dp", "amount", "Periodicity", "DecimalSeparator", "Permission", "Visibility", "AccountType", "BalanceType", "Period", "Month", "TransactionStatus", "BotResponseType", "EventType", "repeatString", "text", "times", "extractTagsFromText", "tagRegex", "tagsSet", "match", "diacriticsMap_", "round", "number", "fractionDigits", "Amount", "formatValue", "value", "decimalSeparator", "formattedValue", "DecimalSeparator", "parseValue", "err", "convertValueToDate", "dateValue", "offsetInMinutes", "year", "month", "day", "date", "createDate", "createDate", "year", "month", "day", "offsetInMinutes", "date", "formatDate", "pattern", "timeZone", "formatDateISO", "getIsoDateValue", "parseDate", "dateObject", "getRepresentativeValue", "value", "credit", "Amount", "convertInMatrix", "array", "maxLength", "i", "normalizeName", "name", "normalizeText", "text", "spaceReplacement", "removeDiacritics", "str", "letters", "newStr", "getDiacriticsMap_", "diacriticsMap_", "defaultDiacriticsRemovalap_", "j", "Resource", "payload", "ResourceProperty", "Resource", "key", "properties", "keys", "index", "value", "propertyKeys", "filteredProperties", "allProperties", "visibleProperties", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Group", "ResourceProperty", "book", "payload", "name", "accounts", "account", "locked", "normalizeText", "id", "accountsPlain", "getAccounts", "acc", "Account", "hidden", "group", "child", "descendants", "g", "root", "children", "idGroupMap", "parentGroup", "createGroup", "updateGroup", "deleteGroup", "remove", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Account", "ResourceProperty", "book", "payload", "name", "normalizeText", "type", "archived", "groups", "groupPayload", "group", "Group", "groupObject", "i", "foundGroup", "createAccount", "updateAccount", "deleteAccount", "remove", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "AccountsDataTableBuilder", "accounts", "include", "account", "key", "type", "AccountType", "maxNumberOfGroups", "groups", "hierarchicalGroups", "freeGroups", "group", "byRoot", "rootId", "sortedChains", "b", "rootA", "rootB", "_", "chainGroups", "a", "chain", "table", "headers", "maxGroups", "i", "a1", "a2", "ret", "propertyKeys", "line", "numOfBlankCells", "properties", "propertyValue", "convertInMatrix", "Agent", "payload", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getApps", "config", "response", "HttpApiRequest", "appsJson", "getApp", "id", "createApp", "app", "updateApp", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "loadBooks", "query", "config", "request", "HttpBooksApiV5Request", "response", "booksJson", "loadBook", "bookId", "loadAccounts", "loadGroups", "createBook", "book", "updateBook", "audit", "getApps", "_a", "copyBook", "name", "copyTransactions", "fromDate", "deleteBook", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getSavedQueries", "bookId", "config", "_a", "response", "HttpBooksApiV5Request", "createSavedQuery", "query", "updateSavedQuery", "deleteSavedQuery", "queryId", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getBalances", "bookId", "query", "config", "_a", "response", "HttpBooksApiV5Request", "balancesUrl", "balancesResponse", "HttpRequest", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "createFile", "bookId", "file", "config", "response", "HttpBooksApiV5Request", "getFile", "id", "updateFile", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "listIntegrations", "bookId", "config", "_a", "res", "HttpBooksApiV5Request", "createIntegration", "integration", "updateIntegration", "deleteIntegration", "id", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "createTransaction", "bookId", "transaction", "config", "response", "HttpBooksApiV5Request", "postTransactionsBatch", "transactions", "payload", "createTransactionsBatch", "transactionList", "updateTransactionsBatch", "updateChecked", "checkTransactionsBatch", "uncheckTransactionsBatch", "trashTransactionsBatch", "trashChecked", "untrashTransactionsBatch", "updateTransaction", "postTransaction", "checkTransaction", "uncheckTransaction", "trashTransaction", "restoreTransaction", "getTransaction", "id", "listTransactions", "query", "limit", "cursor", "request", "countTransactions", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "listEvents", "book", "afterDate", "beforeDate", "onError", "resourceId", "limit", "cursor", "config", "request", "HttpBooksApiV5Request", "response", "replayBotResponse", "eventId", "agentId", "deleteBotResponse", "replayEventsBatch", "eventList", "errorsOnly", "getBacklog", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "listCollaborators", "bookId", "config", "_a", "response", "HttpBooksApiV5Request", "addOrUpdateCollaborator", "collaborator", "message", "request", "removeCollaborator", "email", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Collaborator", "Resource", "book", "payload", "email", "permission", "message", "addOrUpdateCollaborator", "removeCollaborator", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "loadCollections", "config", "_a", "response", "HttpApiV5Request", "createCollection", "payload", "updateCollection", "deleteCollection", "addBooksToCollection", "collectionId", "removeBooksFromCollection", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Collection", "Resource", "payload", "config", "Bkper", "name", "books", "bookPayload", "book", "Book", "collectionId", "bookList", "b", "addBooksToCollection", "removeBooksFromCollection", "createCollection", "updateCollection", "deleteCollection", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BotResponse", "event", "payload", "eventId", "agentId", "updatedEventPayload", "replayBotResponse", "deleteBotResponse", "_a", "updatedBotResponsePayload", "r", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getConnection", "id", "config", "HttpApiV5Request", "listConnections", "_a", "res", "createConnection", "connection", "deleteConnection", "id", "config", "__awaiter", "HttpApiV5Request", "listIntegrations", "connectionId", "_a", "res", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Integration", "ResourceProperty", "payload", "config", "Bkper", "bookId", "integrationId", "deleteIntegration", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Connection", "ResourceProperty", "payload", "config", "Bkper", "agentId", "name", "uuid", "type", "key", "id", "listIntegrations", "Integration", "createConnection", "connectionId", "deleteConnection", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getUser", "config", "HttpApiV5Request", "getBilling", "getBillingCounts", "getBillingPortalUrl", "returnUrl", "getBillingCheckoutUrl", "plan", "successUrl", "cancelUrl", "cycle", "request", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Billing", "Resource", "json", "config", "Bkper", "getBillingCounts", "returnUrl", "urlPayload", "getBillingPortalUrl", "plan", "successUrl", "cancelUrl", "cycle", "getBillingCheckoutUrl", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "User", "Resource", "payload", "config", "Bkper", "getBilling", "Billing", "listConnections", "c", "Connection", "id", "json", "getConnection", "Event", "book", "payload", "User", "Agent", "botResponses", "botResponse", "BotResponse", "BotResponseType", "EventList", "book", "payload", "events", "_a", "event", "Event", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "File", "ResourceProperty", "book", "payload", "name", "contentType", "id", "getFile", "content", "createFile", "updateFile", "byteToHex", "i", "unsafeStringify", "arr", "offset", "getRandomValues", "rnds8", "rng", "randomUUID", "native_default", "v4", "options", "buf", "offset", "_a", "_b", "_c", "native_default", "rnds", "rng", "i", "unsafeStringify", "v4_default", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Transaction", "ResourceProperty", "book", "payload", "remoteId", "checked", "date", "formatDateISO", "lockOrClosingDate", "getIsoDateValue", "TransactionStatus", "description", "extractTagsFromText", "urls", "url", "file", "File", "fileId", "f", "_a", "fileBookId", "v4_default", "promises", "createdFile", "results", "fileIndex", "tag", "tags", "i", "account", "Account", "Amount", "amount", "parseValue", "accountObject", "otherAccount", "dateObject", "parseDate", "convertValueToDate", "formatDate", "raw", "accountBalance", "isCa", "getRepresentativeValue", "round", "operation", "createTransaction", "updateTransaction", "checkTransaction", "uncheckTransaction", "postTransaction", "trashTransaction", "restoreTransaction", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "TransactionList", "book", "payload", "transactions", "_a", "transaction", "Transaction", "Balance", "container", "balancePlain", "year", "month", "day", "date", "createDate", "getRepresentativeValue", "Amount", "BalancesDataTableBuilder", "book", "balancesContainers", "periodicity", "BalanceType", "balance", "permanent", "Amount", "format", "expanded", "type", "transposed", "hide", "include", "trial", "period", "raw", "propertyKeys", "container", "key", "containersFlat", "child", "a", "b", "ret", "getBalanceTypeOrdinal", "bc", "depth", "repeatString", "children", "table", "containers", "header", "balances", "line", "name", "properties", "propertyValue", "row", "col", "i", "dataIndexMap", "cumulativeBalance", "fuzzyDate", "indexEntry", "amount", "rows", "fuzzy", "rowObject", "formatValue", "lastRow", "j", "cell", "formatDateISO", "propertyRow", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "AccountBalancesContainer", "parent", "balancesReport", "payload", "getRepresentativeValue", "Amount", "BalancesDataTableBuilder", "balancePlain", "Balance", "keys", "index", "key", "properties", "propertyKeys", "name", "normalizedName", "normalizeName", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "GroupBalancesContainer", "_GroupBalancesContainer", "parent", "balancesReport", "payload", "groupContainers", "getRepresentativeValue", "Amount", "balancePlain", "Balance", "BalancesDataTableBuilder", "keys", "index", "key", "properties", "propertyKeys", "containers", "accountContainers", "groupBalances", "i", "groupBalance", "accountBalances", "accountBalance", "AccountBalancesContainer", "name", "_a", "normalizedName", "normalizeName", "rootContainers", "balancesContainer", "map", "container", "nextContainers", "BalancesReport", "book", "payload", "BalancesDataTableBuilder", "containers", "accountContainers", "groupContainers", "name", "_a", "normalizedName", "normalizeName", "rootContainers", "balancesContainer", "i", "accountBalances", "accountBalancesContainer", "AccountBalancesContainer", "groupBalances", "groupBalancesContainer", "GroupBalancesContainer", "map", "container", "nextContainers", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Query", "Resource", "book", "payload", "title", "query", "createSavedQuery", "updateSavedQuery", "queryId", "deleteSavedQuery", "deleted", "q", "Backlog", "Resource", "payload", "config", "Bkper", "GroupsDataTableBuilder", "groups", "g1", "g2", "ret", "include", "enable", "group", "key", "groupType", "AccountType", "type", "hasChildren", "table", "headers", "convertInMatrix", "depth", "line", "name", "parentName", "properties", "propertyValue", "children", "child", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "TransactionsDataTableBuilder", "book", "transactions", "account", "format", "include", "headerLine", "dataTable", "convertInMatrix", "key", "remoteIdHeader", "attachmentHeader", "transaction", "line", "amount", "isCreditOnTx", "getRepresentativeValue", "formatValue", "accountBalance", "creditAccount", "urls", "remoteIds", "lineLength", "index", "files", "f", "url", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Book", "_Book", "ResourceProperty", "payload", "config", "Permission", "Bkper", "name", "fractionDigits", "period", "month", "pageSize", "Collection", "datePattern", "lockDate", "closingDate", "decimalSeparator", "timeZone", "autoPost", "visibility", "date", "formatDate", "parseDate", "formatValue", "parseValue", "round", "transactions", "transactionPayloads", "tx", "createTransactionsBatch", "Transaction", "postTransactionsBatch", "updateChecked", "updateTransactionsBatch", "checkTransactionsBatch", "uncheckTransactionsBatch", "trashChecked", "trashTransactionsBatch", "untrashTransactionsBatch", "events", "errorOnly", "eventList", "event", "id", "replayEventsBatch", "accounts", "accountList", "account", "payloads", "createAccounts", "createdAccounts", "Account", "normalizedGroups", "groupPayload", "idOrName", "group", "a", "updateAccounts", "updatedAccounts", "deleteAccounts", "deletedAccounts", "groups", "groupList", "g", "createGroups", "createdGroups", "Group", "audit", "appsPlain", "getApps", "App", "listIntegrations", "i", "Integration", "integration", "createIntegration", "updateIntegration", "normalizeName", "accountPayload", "getAccount", "normalizedName", "getIsoDateValue", "getGroup", "_a", "_b", "getGroups", "groupsObj", "getAccounts", "accountsObj", "groupPayloads", "remove", "accountPayloads", "query", "limit", "cursor", "transactionsList", "listTransactions", "TransactionList", "countTransactions", "afterDate", "beforeDate", "onError", "resourceId", "eventsList", "listEvents", "EventList", "wrapped", "getTransaction", "getFile", "File", "createBook", "copyTransactions", "fromDate", "copiedBookPayload", "copyBook", "updateBook", "deleteBook", "balances", "getBalances", "BalancesReport", "queryPayloads", "getSavedQueries", "Query", "collaboratorPayloads", "listCollaborators", "Collaborator", "backlogPayload", "getBacklog", "Backlog", "AccountsDataTableBuilder", "GroupsDataTableBuilder", "TransactionsDataTableBuilder", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "getTemplates", "config", "response", "HttpApiRequest", "templatesJson", "Template", "Resource", "json", "config", "Bkper", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Bkper", "_Bkper", "config", "id", "includeAccounts", "includeGroups", "book", "loadBook", "Book", "query", "loadBooks", "loadCollections", "collection", "Collection", "getApps", "app", "App", "getApp", "getTemplates", "template", "Template", "user", "getUser", "User", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "App", "Resource", "payload", "config", "Bkper", "webhookUrlDev", "users", "developers", "clientSecret", "readme", "createApp", "updateApp", "BooksDataTableBuilder", "books", "include", "book", "key", "_a", "_b", "table", "a", "b", "collA", "collB", "ret", "headers", "line", "properties", "convertInMatrix"]
|
|
7
7
|
}
|