{"version":3,"sources":["node_modules/crypto-js/core.js","node_modules/crypto-js/x64-core.js","node_modules/crypto-js/lib-typedarrays.js","node_modules/crypto-js/enc-utf16.js","node_modules/crypto-js/enc-base64.js","node_modules/crypto-js/enc-base64url.js","node_modules/crypto-js/md5.js","node_modules/crypto-js/sha1.js","node_modules/crypto-js/sha256.js","node_modules/crypto-js/sha224.js","node_modules/crypto-js/sha512.js","node_modules/crypto-js/sha384.js","node_modules/crypto-js/sha3.js","node_modules/crypto-js/ripemd160.js","node_modules/crypto-js/hmac.js","node_modules/crypto-js/pbkdf2.js","node_modules/crypto-js/evpkdf.js","node_modules/crypto-js/cipher-core.js","node_modules/crypto-js/mode-cfb.js","node_modules/crypto-js/mode-ctr.js","node_modules/crypto-js/mode-ctr-gladman.js","node_modules/crypto-js/mode-ofb.js","node_modules/crypto-js/mode-ecb.js","node_modules/crypto-js/pad-ansix923.js","node_modules/crypto-js/pad-iso10126.js","node_modules/crypto-js/pad-iso97971.js","node_modules/crypto-js/pad-zeropadding.js","node_modules/crypto-js/pad-nopadding.js","node_modules/crypto-js/format-hex.js","node_modules/crypto-js/aes.js","node_modules/crypto-js/tripledes.js","node_modules/crypto-js/rc4.js","node_modules/crypto-js/rabbit.js","node_modules/crypto-js/rabbit-legacy.js","node_modules/crypto-js/blowfish.js","node_modules/crypto-js/index.js","libs/model/enums/dialog.type.ts","libs/model/entities/catalog/application.environment.ts","libs/model/configuration/web/environment.prod.ts","libs/model/configuration/web/environment.release.candidate.ts","libs/model/configuration/web/environment.edge.ts","libs/model/configuration/web/environment.vnext.ts","libs/model/configuration/web/environment.dev.ts","libs/model/entities/catalog/application.tokens.ts","libs/model/utilities/domain.utility.ts","libs/model/entities/shared/user.device.info.ts","libs/model/entities/shared/system.priority.ts","libs/model/entities/shared/address.ts","libs/model/entities/shared/activity.entity.name.ts","libs/model/entities/shared/code.ts","libs/model/entities/shared/location.ts","libs/model/entities/shared/activity.type.ts","node_modules/luxon/src/errors.js","node_modules/luxon/src/impl/formats.js","node_modules/luxon/src/zone.js","node_modules/luxon/src/zones/systemZone.js","node_modules/luxon/src/zones/IANAZone.js","node_modules/luxon/src/impl/locale.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/impl/digits.js","node_modules/luxon/src/settings.js","node_modules/luxon/src/impl/invalid.js","node_modules/luxon/src/impl/conversions.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/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/tokenParser.js","node_modules/luxon/src/datetime.js","libs/model/utilities/date.utility.ts","libs/model/entities/shared/label.ts","libs/model/enums/code.price.type.ts","libs/model/enums/enum.source.ts","libs/model/entities/shared/alert.ts","libs/model/entities/shared/lexorank.ts","libs/model/entities/shared/activity.location.ts","libs/model/entities/job/job.ts","libs/model/entities/job/system.workorder.status.ts","libs/model/entities/job/workorder.status.system.name.ts","libs/model/entities/job/job.filters.ts","libs/model/entities/job/job.view.type.ts","libs/model/entities/job/job.group.by.ts","libs/model/entities/job/job.view.ts","libs/model/entities/job/job.displays.ts","libs/model/entities/job/job.sort.options.ts","libs/model/entities/accounting/accounting.enums.ts","libs/model/utilities/accounting.system.mapping.utility.ts","libs/model/utilities/code.utility.ts","node_modules/decimal.js/decimal.mjs","libs/model/utilities/workorder.utility.ts","libs/model/utilities/workorder.status.utility.ts","libs/model/utilities/color.utility.ts","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","libs/model/utilities/individual.compliance.utility.ts","libs/model/utilities/job.utility.ts","libs/model/utilities/priority.utility.ts","libs/model/utilities/pricebook.utility.ts","libs/model/entities/price.book.ts","libs/model/utilities/accounting.system.utility.ts","libs/model/utilities/date.format.utility.ts","libs/model/utilities/duration.utility.ts","libs/model/utilities/entity.form.utility.ts","libs/model/utilities/invoice.utility.ts","libs/model/utilities/job.media.utility.ts","libs/model/utilities/letter.avatar.ts","libs/model/entities/purchase/purchase.order.ts","libs/model/utilities/purchase.order.utilities.ts","libs/model/entities/quotes/quote.pro.view.filters.ts","libs/model/utilities/recurring.job.utility.ts","libs/model/metadata/entity/decorators/model/metadata.entity.field.types.ts","libs/model/entities/fields/custom.field.ts","libs/model/utilities/job.index.utility.ts","libs/model/utilities/work.compliance.utility.ts","libs/model/utilities/aroflo.request.utility.ts","libs/model/utilities/nonce.utility.ts","node_modules/inflected/dist/esm/inflected.js","libs/model/entities/job/recurring.job.ts","libs/model/entities/job/job.financial.recap.ts","libs/model/entities/job/claim.processing.status.ts","libs/model/entities/shared/daily.log.ts","libs/model/entities/tenant/tenant.ts","libs/model/entities/tenant/work.type.ts","libs/model/entities/time.billing/timesheet.entry.ts","libs/model/entities/form/form.export.utility.ts","libs/model/entities/invoicing/invoice.allocation.utility.ts","libs/model/entities/payment/payment.filters.ts","libs/model/entities/payment/payment.ts","libs/model/entities/payment/payment.utility.ts","libs/model/entities/contact/contact.ts","libs/model/entities/contact/contact.import.utility.ts","libs/model/entities/contact/contact.utility.ts","libs/model/entities/job.templates/job.template.questions.ts","libs/model/entities/job.templates/dynamic.job.template.domain.ts","libs/model/entities/job.templates/job.template.utility.ts","libs/model/entities/scheduler/allocation.ts","libs/model/entities/scheduler/run.utility.ts","libs/model/entities/crm/accounts/contact.index.utility.ts","libs/model/entities/crm/sites/site.pro.index.utility.ts","libs/model/entities/reports/report.field.type.ts","libs/model/entities/reports/report.query.operators.ts","libs/model/entities/variation/variation.status.ts","libs/model/entities/tasks/task.enum.ts","libs/model/entities/tasks/task.group.utility.ts","libs/model/entities/tasks/task.utility.ts","libs/model/entities/tasks/task.options.ts","libs/model/entities/tasks/task.node.utility.ts","libs/model/entities/opportunities/enums.ts","libs/model/entities/opportunities/opportunity.filters.ts","libs/model/entities/leads/lead.filters.ts","libs/model/entities/leads/lead.stage.ts","libs/model/entities/document.themes/document.theme.financial.options.ts","libs/model/entities/document.themes/document.theme.invoice.options.ts","libs/model/entities/document.themes/document.theme.quote.options.ts","libs/model/entities/document.themes/enums.ts","libs/model/entities/document.themes/document.theme.ts","libs/model/entities/entity.form/enums.ts","libs/model/entities/entity.form/entity.form.ts","libs/model/entities/projects/enums.ts","libs/model/entities/projects/project.filters.ts","libs/model/entities/policies/job.sharing.policy.ts","libs/model/entities/policies/policy.ts","node_modules/zod/lib/index.mjs","libs/model/entities/policies/quote.policy.ts","libs/model/entities/sale.order/sale.order.view.filter.ts","libs/model/entities/claims/claim.sync.message.ts","libs/model/metadata/entity/decorators/utilities/get.entity.field.type.ts","node_modules/reflect-metadata/Reflect.js","libs/model/metadata/entity/decorators/metadata.catalog.ts","libs/model/metadata/entity/decorators/metadata.entity.field.ts","libs/model/metadata/entity/import/metadata.field.mapper.ts","libs/model/metadata/entity/import/metadata.validation.data.ts","libs/model/metadata/entity/import/metadata.import.field.builder.ts","libs/model/metadata/entity/import/metadata.import.validators.ts","libs/model/metadata/entity/import/metadata.import.data.ts","libs/model/metadata/merge/decorators/merge.catalog.ts","libs/model/metadata/merge/decorators/utilities/get.merge.dataset.ts","libs/model/metadata/merge/decorators/utilities/get.merge.schema.ts","libs/model/metadata/merge/decorators/utilities/get.merge.source.entity.ts","libs/model/metadata/merge/decorators/decorators/merge.dataset.ts","libs/model/metadata/merge/decorators/decorators/merge.field.ts","libs/model/metadata/merge/decorators/decorators/merge.schema.ts","libs/model/metadata/merge/decorators/decorators/merge.source.ts","libs/model/metadata/merge/entities/data/account.contact.merge.data.ts","libs/model/metadata/merge/entities/data/account.merge.data.ts","libs/model/metadata/merge/entities/data/account.site.merge.data.ts","libs/model/metadata/merge/entities/data/activity.merge.data.ts","libs/model/metadata/merge/entities/data/allocation.merge.data.ts","libs/model/metadata/merge/entities/data/asset.merge.data.ts","libs/model/metadata/merge/entities/data/basic.site.merge.data.ts","libs/model/metadata/merge/entities/data/company.merge.data.ts","libs/model/metadata/merge/entities/data/contact.link.merge.data.ts","libs/model/metadata/merge/entities/data/contact.merge.data.ts","libs/model/metadata/merge/entities/data/employee.merge.data.ts","libs/model/metadata/merge/entities/data/financial.item.line.merge.data.ts","libs/model/metadata/merge/entities/data/invoice.account.merge.data.ts","libs/model/metadata/merge/entities/data/invoice.merge.data.ts","libs/model/metadata/merge/entities/data/job.assets.merge.data.ts","libs/model/metadata/merge/entities/data/job.contact.link.merge.data.ts","libs/model/metadata/merge/entities/data/job.merge.data.ts","libs/model/metadata/merge/entities/data/job.site.merge.data.ts","libs/model/metadata/merge/entities/data/job.stages.merge.data.ts","libs/model/metadata/merge/entities/data/lead.account.merge.data.ts","libs/model/metadata/merge/entities/data/lead.contact.merge.data.ts","libs/model/metadata/merge/entities/data/lead.merge.data.ts","libs/model/metadata/merge/entities/data/opportunity.merge.data.ts","libs/model/metadata/merge/entities/data/purchase.order.merge.data.ts","libs/model/metadata/merge/entities/data/quote.pro.merge.data.ts","libs/model/metadata/merge/entities/data/sale.order.items.merge.data.ts","libs/model/metadata/merge/entities/data/sale.order.merge.data.ts","libs/model/metadata/merge/entities/data/stage.merge.data.ts","libs/model/metadata/merge/entities/data/stage.include.items.merge.data.ts","libs/model/metadata/merge/entities/data/stage.items.merge.data.ts","libs/model/metadata/merge/entities/data/contact.full.merge.data.ts","libs/model/metadata/merge/entities/data/site.merge.data.ts","libs/model/metadata/merge/entities/data/other.merge.data.ts","libs/model/metadata/merge/entities/data/invoice.attachments.merge.data.ts","libs/model/metadata/merge/entities/data/job.item.merge.data.ts","libs/model/metadata/merge/entities/data/job.include.items.merge.data.ts","libs/model/metadata/merge/entities/data/bulk.invoice.job.merge.data.ts","libs/model/metadata/merge/entities/datasets/allocation.dataset.ts","libs/model/metadata/merge/entities/datasets/bill.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/invoice.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/job.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/lead.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/opportunity.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/quote.pro.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/quote.pro.job.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/quote.pro.opportunity.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/sale.order.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/stage.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/stage.resource.dataset.ts","libs/model/metadata/merge/entities/datasets/purchase.order.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/credit.note.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/credit.note.supplier.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/prepayment.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/prepayment.supplier.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/account.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/contact.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/customer.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/contractor.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/site.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/login.contact.merge.dataset.ts","libs/model/metadata/merge/entities/datasets/bulk.invoice.job.merge.dataset.ts","libs/model/entities/entities/views/entity.view.metadata.ts","libs/model/entities/entities/views/entity.view.request.ts","libs/model/entities/entities/forms/entity.form.id.ts","libs/model/entities/entities/definitions/entity.definition.ts","libs/model/entities/entity.status/enum.ts","libs/model/security/base.security.module.ts","libs/model/security/security.module.ts","libs/model/security/utility/security.module.utility.ts","libs/model/security/modules/app.security.ts","libs/model/security/modules/asset.security.module.ts","libs/model/security/modules/claim.security.module.ts","libs/model/security/modules/configuration.security.module.ts","libs/model/security/modules/crm.security.module.ts","libs/model/security/modules/dashboard.security.module.ts","libs/model/security/modules/defect.security.module.ts","libs/model/security/modules/finance.security.module.ts","libs/model/security/modules/individual.compliance.security.module.ts","libs/model/security/modules/job.security.module.ts","libs/model/security/modules/job.template.security.module.ts","libs/model/security/modules/knowledgebase.security.module.ts","libs/model/security/modules/mobile.technicians.security.module.ts","libs/model/security/modules/portal.clients.security.module.ts","libs/model/security/modules/portal.contractors.security.module.ts","libs/model/security/modules/projects.security.module.ts","libs/model/security/modules/purchase.order.security.module.ts","libs/model/security/modules/quote.security.module.ts","libs/model/security/modules/quote.template.security.module.ts","libs/model/security/modules/recurring.job.security.module.ts","libs/model/security/modules/report.security.module.ts","libs/model/security/modules/sales.security.module.ts","libs/model/security/modules/scheduler.security.module.ts","libs/model/security/modules/task.security.module.ts","libs/model/security/modules/timesheet.security.module.ts","libs/model/security/modules/variation.security.module.ts","libs/model/security/modules/work.compliance.security.module.ts","libs/model/security/modules/form.security.module.ts","libs/model/security/modules/address.validation.security.module.ts","libs/model/security/modules/enterprise.search.security.module.ts","libs/model/security/modules/property.management.security.module.ts","libs/model/security/modules/workbuddy.connect.security.module.ts","libs/model/security/modules/equipment.security.module.ts","libs/model/security/utility/security.roles.utility.ts","libs/model/security/security.role.ts","libs/model/security/module.right.const.ts","libs/model/security/default.users.ts","libs/model/security/tenant.plan.ts","node_modules/@ts-rest/core/index.esm.mjs","libs/model/contracts/address.search.contract.ts"],"sourcesContent":[";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory();\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([], factory);\n } else {\n // Global (browser)\n root.CryptoJS = factory();\n }\n})(this, function () {\n /*globals window, global, require*/\n\n /**\n * CryptoJS core components.\n */\n var CryptoJS = CryptoJS || function (Math, undefined) {\n var crypto;\n\n // Native crypto from window (Browser)\n if (typeof window !== 'undefined' && window.crypto) {\n crypto = window.crypto;\n }\n\n // Native crypto in web worker (Browser)\n if (typeof self !== 'undefined' && self.crypto) {\n crypto = self.crypto;\n }\n\n // Native crypto from worker\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n crypto = globalThis.crypto;\n }\n\n // Native (experimental IE 11) crypto from window (Browser)\n if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n crypto = window.msCrypto;\n }\n\n // Native crypto from global (NodeJS)\n if (!crypto && typeof global !== 'undefined' && global.crypto) {\n crypto = global.crypto;\n }\n\n // Native crypto import via require (NodeJS)\n if (!crypto && typeof require === 'function') {\n try {\n crypto = require('crypto');\n } catch (err) {}\n }\n\n /*\n * Cryptographically secure pseudorandom number generator\n *\n * As Math.random() is cryptographically not safe to use\n */\n var cryptoSecureRandomInt = function () {\n if (crypto) {\n // Use getRandomValues method (Browser)\n if (typeof crypto.getRandomValues === 'function') {\n try {\n return crypto.getRandomValues(new Uint32Array(1))[0];\n } catch (err) {}\n }\n\n // Use randomBytes method (NodeJS)\n if (typeof crypto.randomBytes === 'function') {\n try {\n return crypto.randomBytes(4).readInt32LE();\n } catch (err) {}\n }\n }\n throw new Error('Native crypto module could not be used to get secure random number.');\n };\n\n /*\n * Local polyfill of Object.create\n */\n var create = Object.create || function () {\n function F() {}\n return function (obj) {\n var subtype;\n F.prototype = obj;\n subtype = new F();\n F.prototype = null;\n return subtype;\n };\n }();\n\n /**\n * CryptoJS namespace.\n */\n var C = {};\n\n /**\n * Library namespace.\n */\n var C_lib = C.lib = {};\n\n /**\n * Base object for prototypal inheritance.\n */\n var Base = C_lib.Base = function () {\n return {\n /**\n * Creates a new object that inherits from this object.\n *\n * @param {Object} overrides Properties to copy into the new object.\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * field: 'value',\n *\n * method: function () {\n * }\n * });\n */\n extend: function (overrides) {\n // Spawn\n var subtype = create(this);\n\n // Augment\n if (overrides) {\n subtype.mixIn(overrides);\n }\n\n // Create default initializer\n if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n subtype.init = function () {\n subtype.$super.init.apply(this, arguments);\n };\n }\n\n // Initializer's prototype is the subtype object\n subtype.init.prototype = subtype;\n\n // Reference supertype\n subtype.$super = this;\n return subtype;\n },\n /**\n * Extends this object and runs the init method.\n * Arguments to create() will be passed to init().\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var instance = MyType.create();\n */\n create: function () {\n var instance = this.extend();\n instance.init.apply(instance, arguments);\n return instance;\n },\n /**\n * Initializes a newly created object.\n * Override this method to add some logic when your objects are created.\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * init: function () {\n * // ...\n * }\n * });\n */\n init: function () {},\n /**\n * Copies properties into this object.\n *\n * @param {Object} properties The properties to mix in.\n *\n * @example\n *\n * MyType.mixIn({\n * field: 'value'\n * });\n */\n mixIn: function (properties) {\n for (var propertyName in properties) {\n if (properties.hasOwnProperty(propertyName)) {\n this[propertyName] = properties[propertyName];\n }\n }\n\n // IE won't copy toString using the loop above\n if (properties.hasOwnProperty('toString')) {\n this.toString = properties.toString;\n }\n },\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = instance.clone();\n */\n clone: function () {\n return this.init.prototype.extend(this);\n }\n };\n }();\n\n /**\n * An array of 32-bit words.\n *\n * @property {Array} words The array of 32-bit words.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n var WordArray = C_lib.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of 32-bit words.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.create();\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n */\n init: function (words, sigBytes) {\n words = this.words = words || [];\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 4;\n }\n },\n /**\n * Converts this word array to a string.\n *\n * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n *\n * @return {string} The stringified word array.\n *\n * @example\n *\n * var string = wordArray + '';\n * var string = wordArray.toString();\n * var string = wordArray.toString(CryptoJS.enc.Utf8);\n */\n toString: function (encoder) {\n return (encoder || Hex).stringify(this);\n },\n /**\n * Concatenates a word array to this word array.\n *\n * @param {WordArray} wordArray The word array to append.\n *\n * @return {WordArray} This word array.\n *\n * @example\n *\n * wordArray1.concat(wordArray2);\n */\n concat: function (wordArray) {\n // Shortcuts\n var thisWords = this.words;\n var thatWords = wordArray.words;\n var thisSigBytes = this.sigBytes;\n var thatSigBytes = wordArray.sigBytes;\n\n // Clamp excess bits\n this.clamp();\n\n // Concat\n if (thisSigBytes % 4) {\n // Copy one byte at a time\n for (var i = 0; i < thatSigBytes; i++) {\n var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8;\n }\n } else {\n // Copy one word at a time\n for (var j = 0; j < thatSigBytes; j += 4) {\n thisWords[thisSigBytes + j >>> 2] = thatWords[j >>> 2];\n }\n }\n this.sigBytes += thatSigBytes;\n\n // Chainable\n return this;\n },\n /**\n * Removes insignificant bits.\n *\n * @example\n *\n * wordArray.clamp();\n */\n clamp: function () {\n // Shortcuts\n var words = this.words;\n var sigBytes = this.sigBytes;\n\n // Clamp\n words[sigBytes >>> 2] &= 0xffffffff << 32 - sigBytes % 4 * 8;\n words.length = Math.ceil(sigBytes / 4);\n },\n /**\n * Creates a copy of this word array.\n *\n * @return {WordArray} The clone.\n *\n * @example\n *\n * var clone = wordArray.clone();\n */\n clone: function () {\n var clone = Base.clone.call(this);\n clone.words = this.words.slice(0);\n return clone;\n },\n /**\n * Creates a word array filled with random bytes.\n *\n * @param {number} nBytes The number of random bytes to generate.\n *\n * @return {WordArray} The random word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.random(16);\n */\n random: function (nBytes) {\n var words = [];\n for (var i = 0; i < nBytes; i += 4) {\n words.push(cryptoSecureRandomInt());\n }\n return new WordArray.init(words, nBytes);\n }\n });\n\n /**\n * Encoder namespace.\n */\n var C_enc = C.enc = {};\n\n /**\n * Hex encoding strategy.\n */\n var Hex = C_enc.Hex = {\n /**\n * Converts a word array to a hex string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The hex string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n */\n stringify: function (wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var hexChars = [];\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n return hexChars.join('');\n },\n /**\n * Converts a hex string to a word array.\n *\n * @param {string} hexStr The hex string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n */\n parse: function (hexStr) {\n // Shortcut\n var hexStrLength = hexStr.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < hexStrLength; i += 2) {\n words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4;\n }\n return new WordArray.init(words, hexStrLength / 2);\n }\n };\n\n /**\n * Latin1 encoding strategy.\n */\n var Latin1 = C_enc.Latin1 = {\n /**\n * Converts a word array to a Latin1 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Latin1 string.\n *\n * @static\n *\n * @example\n *\n * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n */\n stringify: function (wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var latin1Chars = [];\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n return latin1Chars.join('');\n },\n /**\n * Converts a Latin1 string to a word array.\n *\n * @param {string} latin1Str The Latin1 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n */\n parse: function (latin1Str) {\n // Shortcut\n var latin1StrLength = latin1Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < latin1StrLength; i++) {\n words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << 24 - i % 4 * 8;\n }\n return new WordArray.init(words, latin1StrLength);\n }\n };\n\n /**\n * UTF-8 encoding strategy.\n */\n var Utf8 = C_enc.Utf8 = {\n /**\n * Converts a word array to a UTF-8 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-8 string.\n *\n * @static\n *\n * @example\n *\n * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n */\n stringify: function (wordArray) {\n try {\n return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n },\n /**\n * Converts a UTF-8 string to a word array.\n *\n * @param {string} utf8Str The UTF-8 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n */\n parse: function (utf8Str) {\n return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n }\n };\n\n /**\n * Abstract buffered block algorithm template.\n *\n * The property blockSize must be implemented in a concrete subtype.\n *\n * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n */\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n /**\n * Resets this block algorithm's data buffer to its initial state.\n *\n * @example\n *\n * bufferedBlockAlgorithm.reset();\n */\n reset: function () {\n // Initial values\n this._data = new WordArray.init();\n this._nDataBytes = 0;\n },\n /**\n * Adds new data to this block algorithm's buffer.\n *\n * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n *\n * @example\n *\n * bufferedBlockAlgorithm._append('data');\n * bufferedBlockAlgorithm._append(wordArray);\n */\n _append: function (data) {\n // Convert string to WordArray, else assume WordArray already\n if (typeof data == 'string') {\n data = Utf8.parse(data);\n }\n\n // Append\n this._data.concat(data);\n this._nDataBytes += data.sigBytes;\n },\n /**\n * Processes available data blocks.\n *\n * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n *\n * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n *\n * @return {WordArray} The processed data.\n *\n * @example\n *\n * var processedData = bufferedBlockAlgorithm._process();\n * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n */\n _process: function (doFlush) {\n var processedWords;\n\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var dataSigBytes = data.sigBytes;\n var blockSize = this.blockSize;\n var blockSizeBytes = blockSize * 4;\n\n // Count blocks ready\n var nBlocksReady = dataSigBytes / blockSizeBytes;\n if (doFlush) {\n // Round up to include partial blocks\n nBlocksReady = Math.ceil(nBlocksReady);\n } else {\n // Round down to include only full blocks,\n // less the number of blocks that must remain in the buffer\n nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n }\n\n // Count words ready\n var nWordsReady = nBlocksReady * blockSize;\n\n // Count bytes ready\n var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n // Process blocks\n if (nWordsReady) {\n for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n // Perform concrete-algorithm logic\n this._doProcessBlock(dataWords, offset);\n }\n\n // Remove processed words\n processedWords = dataWords.splice(0, nWordsReady);\n data.sigBytes -= nBytesReady;\n }\n\n // Return processed words\n return new WordArray.init(processedWords, nBytesReady);\n },\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = bufferedBlockAlgorithm.clone();\n */\n clone: function () {\n var clone = Base.clone.call(this);\n clone._data = this._data.clone();\n return clone;\n },\n _minBufferSize: 0\n });\n\n /**\n * Abstract hasher template.\n *\n * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n */\n var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n */\n cfg: Base.extend(),\n /**\n * Initializes a newly created hasher.\n *\n * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n *\n * @example\n *\n * var hasher = CryptoJS.algo.SHA256.create();\n */\n init: function (cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg);\n\n // Set initial values\n this.reset();\n },\n /**\n * Resets this hasher to its initial state.\n *\n * @example\n *\n * hasher.reset();\n */\n reset: function () {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this);\n\n // Perform concrete-hasher logic\n this._doReset();\n },\n /**\n * Updates this hasher with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {Hasher} This hasher.\n *\n * @example\n *\n * hasher.update('message');\n * hasher.update(wordArray);\n */\n update: function (messageUpdate) {\n // Append\n this._append(messageUpdate);\n\n // Update the hash\n this._process();\n\n // Chainable\n return this;\n },\n /**\n * Finalizes the hash computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The hash.\n *\n * @example\n *\n * var hash = hasher.finalize();\n * var hash = hasher.finalize('message');\n * var hash = hasher.finalize(wordArray);\n */\n finalize: function (messageUpdate) {\n // Final message update\n if (messageUpdate) {\n this._append(messageUpdate);\n }\n\n // Perform concrete-hasher logic\n var hash = this._doFinalize();\n return hash;\n },\n blockSize: 512 / 32,\n /**\n * Creates a shortcut function to a hasher's object interface.\n *\n * @param {Hasher} hasher The hasher to create a helper for.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n */\n _createHelper: function (hasher) {\n return function (message, cfg) {\n return new hasher.init(cfg).finalize(message);\n };\n },\n /**\n * Creates a shortcut function to the HMAC's object interface.\n *\n * @param {Hasher} hasher The hasher to use in this HMAC helper.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n */\n _createHmacHelper: function (hasher) {\n return function (message, key) {\n return new C_algo.HMAC.init(hasher, key).finalize(message);\n };\n }\n });\n\n /**\n * Algorithm namespace.\n */\n var C_algo = C.algo = {};\n return C;\n }(Math);\n return CryptoJS;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var X32WordArray = C_lib.WordArray;\n\n /**\n * x64 namespace.\n */\n var C_x64 = C.x64 = {};\n\n /**\n * A 64-bit word.\n */\n var X64Word = C_x64.Word = Base.extend({\n /**\n * Initializes a newly created 64-bit word.\n *\n * @param {number} high The high 32 bits.\n * @param {number} low The low 32 bits.\n *\n * @example\n *\n * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n */\n init: function (high, low) {\n this.high = high;\n this.low = low;\n }\n\n /**\n * Bitwise NOTs this word.\n *\n * @return {X64Word} A new x64-Word object after negating.\n *\n * @example\n *\n * var negated = x64Word.not();\n */\n // not: function () {\n // var high = ~this.high;\n // var low = ~this.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise ANDs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to AND with this word.\n *\n * @return {X64Word} A new x64-Word object after ANDing.\n *\n * @example\n *\n * var anded = x64Word.and(anotherX64Word);\n */\n // and: function (word) {\n // var high = this.high & word.high;\n // var low = this.low & word.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise ORs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to OR with this word.\n *\n * @return {X64Word} A new x64-Word object after ORing.\n *\n * @example\n *\n * var ored = x64Word.or(anotherX64Word);\n */\n // or: function (word) {\n // var high = this.high | word.high;\n // var low = this.low | word.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise XORs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to XOR with this word.\n *\n * @return {X64Word} A new x64-Word object after XORing.\n *\n * @example\n *\n * var xored = x64Word.xor(anotherX64Word);\n */\n // xor: function (word) {\n // var high = this.high ^ word.high;\n // var low = this.low ^ word.low;\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Shifts this word n bits to the left.\n *\n * @param {number} n The number of bits to shift.\n *\n * @return {X64Word} A new x64-Word object after shifting.\n *\n * @example\n *\n * var shifted = x64Word.shiftL(25);\n */\n // shiftL: function (n) {\n // if (n < 32) {\n // var high = (this.high << n) | (this.low >>> (32 - n));\n // var low = this.low << n;\n // } else {\n // var high = this.low << (n - 32);\n // var low = 0;\n // }\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Shifts this word n bits to the right.\n *\n * @param {number} n The number of bits to shift.\n *\n * @return {X64Word} A new x64-Word object after shifting.\n *\n * @example\n *\n * var shifted = x64Word.shiftR(7);\n */\n // shiftR: function (n) {\n // if (n < 32) {\n // var low = (this.low >>> n) | (this.high << (32 - n));\n // var high = this.high >>> n;\n // } else {\n // var low = this.high >>> (n - 32);\n // var high = 0;\n // }\n\n // return X64Word.create(high, low);\n // },\n\n /**\n * Rotates this word n bits to the left.\n *\n * @param {number} n The number of bits to rotate.\n *\n * @return {X64Word} A new x64-Word object after rotating.\n *\n * @example\n *\n * var rotated = x64Word.rotL(25);\n */\n // rotL: function (n) {\n // return this.shiftL(n).or(this.shiftR(64 - n));\n // },\n\n /**\n * Rotates this word n bits to the right.\n *\n * @param {number} n The number of bits to rotate.\n *\n * @return {X64Word} A new x64-Word object after rotating.\n *\n * @example\n *\n * var rotated = x64Word.rotR(7);\n */\n // rotR: function (n) {\n // return this.shiftR(n).or(this.shiftL(64 - n));\n // },\n\n /**\n * Adds this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to add with this word.\n *\n * @return {X64Word} A new x64-Word object after adding.\n *\n * @example\n *\n * var added = x64Word.add(anotherX64Word);\n */\n // add: function (word) {\n // var low = (this.low + word.low) | 0;\n // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n // var high = (this.high + word.high + carry) | 0;\n\n // return X64Word.create(high, low);\n // }\n });\n\n /**\n * An array of 64-bit words.\n *\n * @property {Array} words The array of CryptoJS.x64.Word objects.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n var X64WordArray = C_x64.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.x64.WordArray.create();\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ]);\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ], 10);\n */\n init: function (words, sigBytes) {\n words = this.words = words || [];\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 8;\n }\n },\n /**\n * Converts this 64-bit word array to a 32-bit word array.\n *\n * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n *\n * @example\n *\n * var x32WordArray = x64WordArray.toX32();\n */\n toX32: function () {\n // Shortcuts\n var x64Words = this.words;\n var x64WordsLength = x64Words.length;\n\n // Convert\n var x32Words = [];\n for (var i = 0; i < x64WordsLength; i++) {\n var x64Word = x64Words[i];\n x32Words.push(x64Word.high);\n x32Words.push(x64Word.low);\n }\n return X32WordArray.create(x32Words, this.sigBytes);\n },\n /**\n * Creates a copy of this word array.\n *\n * @return {X64WordArray} The clone.\n *\n * @example\n *\n * var clone = x64WordArray.clone();\n */\n clone: function () {\n var clone = Base.clone.call(this);\n\n // Clone \"words\" array\n var words = clone.words = this.words.slice(0);\n\n // Clone each X64Word object\n var wordsLength = words.length;\n for (var i = 0; i < wordsLength; i++) {\n words[i] = words[i].clone();\n }\n return clone;\n }\n });\n })();\n return CryptoJS;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Check if typed arrays are supported\n if (typeof ArrayBuffer != 'function') {\n return;\n }\n\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n\n // Reference original init\n var superInit = WordArray.init;\n\n // Augment WordArray.init to handle typed arrays\n var subInit = WordArray.init = function (typedArray) {\n // Convert buffers to uint8\n if (typedArray instanceof ArrayBuffer) {\n typedArray = new Uint8Array(typedArray);\n }\n\n // Convert other array views to uint8\n if (typedArray instanceof Int8Array || typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray || typedArray instanceof Int16Array || typedArray instanceof Uint16Array || typedArray instanceof Int32Array || typedArray instanceof Uint32Array || typedArray instanceof Float32Array || typedArray instanceof Float64Array) {\n typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n }\n\n // Handle Uint8Array\n if (typedArray instanceof Uint8Array) {\n // Shortcut\n var typedArrayByteLength = typedArray.byteLength;\n\n // Extract bytes\n var words = [];\n for (var i = 0; i < typedArrayByteLength; i++) {\n words[i >>> 2] |= typedArray[i] << 24 - i % 4 * 8;\n }\n\n // Initialize this word array\n superInit.call(this, words, typedArrayByteLength);\n } else {\n // Else call normal init\n superInit.apply(this, arguments);\n }\n };\n subInit.prototype = WordArray;\n })();\n return CryptoJS.lib.WordArray;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n\n /**\n * UTF-16 BE encoding strategy.\n */\n var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n /**\n * Converts a word array to a UTF-16 BE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 BE string.\n *\n * @static\n *\n * @example\n *\n * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n */\n stringify: function (wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var utf16Chars = [];\n for (var i = 0; i < sigBytes; i += 2) {\n var codePoint = words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff;\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n return utf16Chars.join('');\n },\n /**\n * Converts a UTF-16 BE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 BE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n */\n parse: function (utf16Str) {\n // Shortcut\n var utf16StrLength = utf16Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < utf16StrLength; i++) {\n words[i >>> 1] |= utf16Str.charCodeAt(i) << 16 - i % 2 * 16;\n }\n return WordArray.create(words, utf16StrLength * 2);\n }\n };\n\n /**\n * UTF-16 LE encoding strategy.\n */\n C_enc.Utf16LE = {\n /**\n * Converts a word array to a UTF-16 LE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 LE string.\n *\n * @static\n *\n * @example\n *\n * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n */\n stringify: function (wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var utf16Chars = [];\n for (var i = 0; i < sigBytes; i += 2) {\n var codePoint = swapEndian(words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff);\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n return utf16Chars.join('');\n },\n /**\n * Converts a UTF-16 LE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 LE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n */\n parse: function (utf16Str) {\n // Shortcut\n var utf16StrLength = utf16Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < utf16StrLength; i++) {\n words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << 16 - i % 2 * 16);\n }\n return WordArray.create(words, utf16StrLength * 2);\n }\n };\n function swapEndian(word) {\n return word << 8 & 0xff00ff00 | word >>> 8 & 0x00ff00ff;\n }\n })();\n return CryptoJS.enc.Utf16;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n\n /**\n * Base64 encoding strategy.\n */\n var Base64 = C_enc.Base64 = {\n /**\n * Converts a word array to a Base64 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Base64 string.\n *\n * @static\n *\n * @example\n *\n * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n */\n stringify: function (wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n var map = this._map;\n\n // Clamp excess bits\n wordArray.clamp();\n\n // Convert\n var base64Chars = [];\n for (var i = 0; i < sigBytes; i += 3) {\n var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n var triplet = byte1 << 16 | byte2 << 8 | byte3;\n for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n }\n }\n\n // Add padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n return base64Chars.join('');\n },\n /**\n * Converts a Base64 string to a word array.\n *\n * @param {string} base64Str The Base64 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n */\n parse: function (base64Str) {\n // Shortcuts\n var base64StrLength = base64Str.length;\n var map = this._map;\n var reverseMap = this._reverseMap;\n if (!reverseMap) {\n reverseMap = this._reverseMap = [];\n for (var j = 0; j < map.length; j++) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n }\n\n // Ignore padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n var paddingIndex = base64Str.indexOf(paddingChar);\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n }\n\n // Convert\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n };\n function parseLoop(base64Str, base64StrLength, reverseMap) {\n var words = [];\n var nBytes = 0;\n for (var i = 0; i < base64StrLength; i++) {\n if (i % 4) {\n var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n var bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n nBytes++;\n }\n }\n return WordArray.create(words, nBytes);\n }\n })();\n return CryptoJS.enc.Base64;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n\n /**\n * Base64url encoding strategy.\n */\n var Base64url = C_enc.Base64url = {\n /**\n * Converts a word array to a Base64url string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @param {boolean} urlSafe Whether to use url safe\n *\n * @return {string} The Base64url string.\n *\n * @static\n *\n * @example\n *\n * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n */\n stringify: function (wordArray, urlSafe) {\n if (urlSafe === undefined) {\n urlSafe = true;\n }\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n var map = urlSafe ? this._safe_map : this._map;\n\n // Clamp excess bits\n wordArray.clamp();\n\n // Convert\n var base64Chars = [];\n for (var i = 0; i < sigBytes; i += 3) {\n var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n var triplet = byte1 << 16 | byte2 << 8 | byte3;\n for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n }\n }\n\n // Add padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n return base64Chars.join('');\n },\n /**\n * Converts a Base64url string to a word array.\n *\n * @param {string} base64Str The Base64url string.\n *\n * @param {boolean} urlSafe Whether to use url safe\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n */\n parse: function (base64Str, urlSafe) {\n if (urlSafe === undefined) {\n urlSafe = true;\n }\n\n // Shortcuts\n var base64StrLength = base64Str.length;\n var map = urlSafe ? this._safe_map : this._map;\n var reverseMap = this._reverseMap;\n if (!reverseMap) {\n reverseMap = this._reverseMap = [];\n for (var j = 0; j < map.length; j++) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n }\n\n // Ignore padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n var paddingIndex = base64Str.indexOf(paddingChar);\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n }\n\n // Convert\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'\n };\n function parseLoop(base64Str, base64StrLength, reverseMap) {\n var words = [];\n var nBytes = 0;\n for (var i = 0; i < base64StrLength; i++) {\n if (i % 4) {\n var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n var bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n nBytes++;\n }\n }\n return WordArray.create(words, nBytes);\n }\n })();\n return CryptoJS.enc.Base64url;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Constants table\n var T = [];\n\n // Compute constants\n (function () {\n for (var i = 0; i < 64; i++) {\n T[i] = Math.abs(Math.sin(i + 1)) * 0x100000000 | 0;\n }\n })();\n\n /**\n * MD5 hash algorithm.\n */\n var MD5 = C_algo.MD5 = Hasher.extend({\n _doReset: function () {\n this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]);\n },\n _doProcessBlock: function (M, offset) {\n // Swap endian\n for (var i = 0; i < 16; i++) {\n // Shortcuts\n var offset_i = offset + i;\n var M_offset_i = M[offset_i];\n M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n }\n\n // Shortcuts\n var H = this._hash.words;\n var M_offset_0 = M[offset + 0];\n var M_offset_1 = M[offset + 1];\n var M_offset_2 = M[offset + 2];\n var M_offset_3 = M[offset + 3];\n var M_offset_4 = M[offset + 4];\n var M_offset_5 = M[offset + 5];\n var M_offset_6 = M[offset + 6];\n var M_offset_7 = M[offset + 7];\n var M_offset_8 = M[offset + 8];\n var M_offset_9 = M[offset + 9];\n var M_offset_10 = M[offset + 10];\n var M_offset_11 = M[offset + 11];\n var M_offset_12 = M[offset + 12];\n var M_offset_13 = M[offset + 13];\n var M_offset_14 = M[offset + 14];\n var M_offset_15 = M[offset + 15];\n\n // Working variables\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n\n // Computation\n a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n a = II(a, b, c, d, M_offset_0, 6, T[48]);\n d = II(d, a, b, c, M_offset_7, 10, T[49]);\n c = II(c, d, a, b, M_offset_14, 15, T[50]);\n b = II(b, c, d, a, M_offset_5, 21, T[51]);\n a = II(a, b, c, d, M_offset_12, 6, T[52]);\n d = II(d, a, b, c, M_offset_3, 10, T[53]);\n c = II(c, d, a, b, M_offset_10, 15, T[54]);\n b = II(b, c, d, a, M_offset_1, 21, T[55]);\n a = II(a, b, c, d, M_offset_8, 6, T[56]);\n d = II(d, a, b, c, M_offset_15, 10, T[57]);\n c = II(c, d, a, b, M_offset_6, 15, T[58]);\n b = II(b, c, d, a, M_offset_13, 21, T[59]);\n a = II(a, b, c, d, M_offset_4, 6, T[60]);\n d = II(d, a, b, c, M_offset_11, 10, T[61]);\n c = II(c, d, a, b, M_offset_2, 15, T[62]);\n b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n // Intermediate hash value\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n },\n _doFinalize: function () {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n var nBitsTotalL = nBitsTotal;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 0x00ff00ff | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 0xff00ff00;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 0x00ff00ff | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 0xff00ff00;\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var hash = this._hash;\n var H = hash.words;\n\n // Swap endian\n for (var i = 0; i < 4; i++) {\n // Shortcut\n var H_i = H[i];\n H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n }\n\n // Return final computed hash\n return hash;\n },\n clone: function () {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n function FF(a, b, c, d, x, s, t) {\n var n = a + (b & c | ~b & d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n function GG(a, b, c, d, x, s, t) {\n var n = a + (b & d | c & ~d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n function HH(a, b, c, d, x, s, t) {\n var n = a + (b ^ c ^ d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n function II(a, b, c, d, x, s, t) {\n var n = a + (c ^ (b | ~d)) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.MD5('message');\n * var hash = CryptoJS.MD5(wordArray);\n */\n C.MD5 = Hasher._createHelper(MD5);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacMD5(message, key);\n */\n C.HmacMD5 = Hasher._createHmacHelper(MD5);\n })(Math);\n return CryptoJS.MD5;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Reusable object\n var W = [];\n\n /**\n * SHA-1 hash algorithm.\n */\n var SHA1 = C_algo.SHA1 = Hasher.extend({\n _doReset: function () {\n this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]);\n },\n _doProcessBlock: function (M, offset) {\n // Shortcut\n var H = this._hash.words;\n\n // Working variables\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n // Computation\n for (var i = 0; i < 80; i++) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n W[i] = n << 1 | n >>> 31;\n }\n var t = (a << 5 | a >>> 27) + e + W[i];\n if (i < 20) {\n t += (b & c | ~b & d) + 0x5a827999;\n } else if (i < 40) {\n t += (b ^ c ^ d) + 0x6ed9eba1;\n } else if (i < 60) {\n t += (b & c | b & d | c & d) - 0x70e44324;\n } else /* if (i < 80) */{\n t += (b ^ c ^ d) - 0x359d3e2a;\n }\n e = d;\n d = c;\n c = b << 30 | b >>> 2;\n b = a;\n a = t;\n }\n\n // Intermediate hash value\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n H[4] = H[4] + e | 0;\n },\n _doFinalize: function () {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Return final computed hash\n return this._hash;\n },\n clone: function () {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA1('message');\n * var hash = CryptoJS.SHA1(wordArray);\n */\n C.SHA1 = Hasher._createHelper(SHA1);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA1(message, key);\n */\n C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n })();\n return CryptoJS.SHA1;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Initialization and round constants tables\n var H = [];\n var K = [];\n\n // Compute constants\n (function () {\n function isPrime(n) {\n var sqrtN = Math.sqrt(n);\n for (var factor = 2; factor <= sqrtN; factor++) {\n if (!(n % factor)) {\n return false;\n }\n }\n return true;\n }\n function getFractionalBits(n) {\n return (n - (n | 0)) * 0x100000000 | 0;\n }\n var n = 2;\n var nPrime = 0;\n while (nPrime < 64) {\n if (isPrime(n)) {\n if (nPrime < 8) {\n H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n }\n K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n nPrime++;\n }\n n++;\n }\n })();\n\n // Reusable object\n var W = [];\n\n /**\n * SHA-256 hash algorithm.\n */\n var SHA256 = C_algo.SHA256 = Hasher.extend({\n _doReset: function () {\n this._hash = new WordArray.init(H.slice(0));\n },\n _doProcessBlock: function (M, offset) {\n // Shortcut\n var H = this._hash.words;\n\n // Working variables\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n var f = H[5];\n var g = H[6];\n var h = H[7];\n\n // Computation\n for (var i = 0; i < 64; i++) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n var gamma0x = W[i - 15];\n var gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3;\n var gamma1x = W[i - 2];\n var gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10;\n W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n }\n var ch = e & f ^ ~e & g;\n var maj = a & b ^ a & c ^ b & c;\n var sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22);\n var sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25);\n var t1 = h + sigma1 + ch + K[i] + W[i];\n var t2 = sigma0 + maj;\n h = g;\n g = f;\n f = e;\n e = d + t1 | 0;\n d = c;\n c = b;\n b = a;\n a = t1 + t2 | 0;\n }\n\n // Intermediate hash value\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n H[4] = H[4] + e | 0;\n H[5] = H[5] + f | 0;\n H[6] = H[6] + g | 0;\n H[7] = H[7] + h | 0;\n },\n _doFinalize: function () {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Return final computed hash\n return this._hash;\n },\n clone: function () {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA256('message');\n * var hash = CryptoJS.SHA256(wordArray);\n */\n C.SHA256 = Hasher._createHelper(SHA256);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA256(message, key);\n */\n C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n })(Math);\n return CryptoJS.SHA256;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./sha256\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var SHA256 = C_algo.SHA256;\n\n /**\n * SHA-224 hash algorithm.\n */\n var SHA224 = C_algo.SHA224 = SHA256.extend({\n _doReset: function () {\n this._hash = new WordArray.init([0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]);\n },\n _doFinalize: function () {\n var hash = SHA256._doFinalize.call(this);\n hash.sigBytes -= 4;\n return hash;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA224('message');\n * var hash = CryptoJS.SHA224(wordArray);\n */\n C.SHA224 = SHA256._createHelper(SHA224);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA224(message, key);\n */\n C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n })();\n return CryptoJS.SHA224;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./x64-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Hasher = C_lib.Hasher;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var X64WordArray = C_x64.WordArray;\n var C_algo = C.algo;\n function X64Word_create() {\n return X64Word.create.apply(X64Word, arguments);\n }\n\n // Constants\n var K = [X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)];\n\n // Reusable objects\n var W = [];\n (function () {\n for (var i = 0; i < 80; i++) {\n W[i] = X64Word_create();\n }\n })();\n\n /**\n * SHA-512 hash algorithm.\n */\n var SHA512 = C_algo.SHA512 = Hasher.extend({\n _doReset: function () {\n this._hash = new X64WordArray.init([new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)]);\n },\n _doProcessBlock: function (M, offset) {\n // Shortcuts\n var H = this._hash.words;\n var H0 = H[0];\n var H1 = H[1];\n var H2 = H[2];\n var H3 = H[3];\n var H4 = H[4];\n var H5 = H[5];\n var H6 = H[6];\n var H7 = H[7];\n var H0h = H0.high;\n var H0l = H0.low;\n var H1h = H1.high;\n var H1l = H1.low;\n var H2h = H2.high;\n var H2l = H2.low;\n var H3h = H3.high;\n var H3l = H3.low;\n var H4h = H4.high;\n var H4l = H4.low;\n var H5h = H5.high;\n var H5l = H5.low;\n var H6h = H6.high;\n var H6l = H6.low;\n var H7h = H7.high;\n var H7l = H7.low;\n\n // Working variables\n var ah = H0h;\n var al = H0l;\n var bh = H1h;\n var bl = H1l;\n var ch = H2h;\n var cl = H2l;\n var dh = H3h;\n var dl = H3l;\n var eh = H4h;\n var el = H4l;\n var fh = H5h;\n var fl = H5l;\n var gh = H6h;\n var gl = H6l;\n var hh = H7h;\n var hl = H7l;\n\n // Rounds\n for (var i = 0; i < 80; i++) {\n var Wil;\n var Wih;\n\n // Shortcut\n var Wi = W[i];\n\n // Extend message\n if (i < 16) {\n Wih = Wi.high = M[offset + i * 2] | 0;\n Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n } else {\n // Gamma0\n var gamma0x = W[i - 15];\n var gamma0xh = gamma0x.high;\n var gamma0xl = gamma0x.low;\n var gamma0h = (gamma0xh >>> 1 | gamma0xl << 31) ^ (gamma0xh >>> 8 | gamma0xl << 24) ^ gamma0xh >>> 7;\n var gamma0l = (gamma0xl >>> 1 | gamma0xh << 31) ^ (gamma0xl >>> 8 | gamma0xh << 24) ^ (gamma0xl >>> 7 | gamma0xh << 25);\n\n // Gamma1\n var gamma1x = W[i - 2];\n var gamma1xh = gamma1x.high;\n var gamma1xl = gamma1x.low;\n var gamma1h = (gamma1xh >>> 19 | gamma1xl << 13) ^ (gamma1xh << 3 | gamma1xl >>> 29) ^ gamma1xh >>> 6;\n var gamma1l = (gamma1xl >>> 19 | gamma1xh << 13) ^ (gamma1xl << 3 | gamma1xh >>> 29) ^ (gamma1xl >>> 6 | gamma1xh << 26);\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7 = W[i - 7];\n var Wi7h = Wi7.high;\n var Wi7l = Wi7.low;\n var Wi16 = W[i - 16];\n var Wi16h = Wi16.high;\n var Wi16l = Wi16.low;\n Wil = gamma0l + Wi7l;\n Wih = gamma0h + Wi7h + (Wil >>> 0 < gamma0l >>> 0 ? 1 : 0);\n Wil = Wil + gamma1l;\n Wih = Wih + gamma1h + (Wil >>> 0 < gamma1l >>> 0 ? 1 : 0);\n Wil = Wil + Wi16l;\n Wih = Wih + Wi16h + (Wil >>> 0 < Wi16l >>> 0 ? 1 : 0);\n Wi.high = Wih;\n Wi.low = Wil;\n }\n var chh = eh & fh ^ ~eh & gh;\n var chl = el & fl ^ ~el & gl;\n var majh = ah & bh ^ ah & ch ^ bh & ch;\n var majl = al & bl ^ al & cl ^ bl & cl;\n var sigma0h = (ah >>> 28 | al << 4) ^ (ah << 30 | al >>> 2) ^ (ah << 25 | al >>> 7);\n var sigma0l = (al >>> 28 | ah << 4) ^ (al << 30 | ah >>> 2) ^ (al << 25 | ah >>> 7);\n var sigma1h = (eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9);\n var sigma1l = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9);\n\n // t1 = h + sigma1 + ch + K[i] + W[i]\n var Ki = K[i];\n var Kih = Ki.high;\n var Kil = Ki.low;\n var t1l = hl + sigma1l;\n var t1h = hh + sigma1h + (t1l >>> 0 < hl >>> 0 ? 1 : 0);\n var t1l = t1l + chl;\n var t1h = t1h + chh + (t1l >>> 0 < chl >>> 0 ? 1 : 0);\n var t1l = t1l + Kil;\n var t1h = t1h + Kih + (t1l >>> 0 < Kil >>> 0 ? 1 : 0);\n var t1l = t1l + Wil;\n var t1h = t1h + Wih + (t1l >>> 0 < Wil >>> 0 ? 1 : 0);\n\n // t2 = sigma0 + maj\n var t2l = sigma0l + majl;\n var t2h = sigma0h + majh + (t2l >>> 0 < sigma0l >>> 0 ? 1 : 0);\n\n // Update working variables\n hh = gh;\n hl = gl;\n gh = fh;\n gl = fl;\n fh = eh;\n fl = el;\n el = dl + t1l | 0;\n eh = dh + t1h + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;\n dh = ch;\n dl = cl;\n ch = bh;\n cl = bl;\n bh = ah;\n bl = al;\n al = t1l + t2l | 0;\n ah = t1h + t2h + (al >>> 0 < t1l >>> 0 ? 1 : 0) | 0;\n }\n\n // Intermediate hash value\n H0l = H0.low = H0l + al;\n H0.high = H0h + ah + (H0l >>> 0 < al >>> 0 ? 1 : 0);\n H1l = H1.low = H1l + bl;\n H1.high = H1h + bh + (H1l >>> 0 < bl >>> 0 ? 1 : 0);\n H2l = H2.low = H2l + cl;\n H2.high = H2h + ch + (H2l >>> 0 < cl >>> 0 ? 1 : 0);\n H3l = H3.low = H3l + dl;\n H3.high = H3h + dh + (H3l >>> 0 < dl >>> 0 ? 1 : 0);\n H4l = H4.low = H4l + el;\n H4.high = H4h + eh + (H4l >>> 0 < el >>> 0 ? 1 : 0);\n H5l = H5.low = H5l + fl;\n H5.high = H5h + fh + (H5l >>> 0 < fl >>> 0 ? 1 : 0);\n H6l = H6.low = H6l + gl;\n H6.high = H6h + gh + (H6l >>> 0 < gl >>> 0 ? 1 : 0);\n H7l = H7.low = H7l + hl;\n H7.high = H7h + hh + (H7l >>> 0 < hl >>> 0 ? 1 : 0);\n },\n _doFinalize: function () {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 128 >>> 10 << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 128 >>> 10 << 5) + 31] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Convert hash to 32-bit word array before returning\n var hash = this._hash.toX32();\n\n // Return final computed hash\n return hash;\n },\n clone: function () {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n },\n blockSize: 1024 / 32\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA512('message');\n * var hash = CryptoJS.SHA512(wordArray);\n */\n C.SHA512 = Hasher._createHelper(SHA512);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA512(message, key);\n */\n C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n })();\n return CryptoJS.SHA512;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var X64WordArray = C_x64.WordArray;\n var C_algo = C.algo;\n var SHA512 = C_algo.SHA512;\n\n /**\n * SHA-384 hash algorithm.\n */\n var SHA384 = C_algo.SHA384 = SHA512.extend({\n _doReset: function () {\n this._hash = new X64WordArray.init([new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)]);\n },\n _doFinalize: function () {\n var hash = SHA512._doFinalize.call(this);\n hash.sigBytes -= 16;\n return hash;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA384('message');\n * var hash = CryptoJS.SHA384(wordArray);\n */\n C.SHA384 = SHA512._createHelper(SHA384);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA384(message, key);\n */\n C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n })();\n return CryptoJS.SHA384;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./x64-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var C_algo = C.algo;\n\n // Constants tables\n var RHO_OFFSETS = [];\n var PI_INDEXES = [];\n var ROUND_CONSTANTS = [];\n\n // Compute Constants\n (function () {\n // Compute rho offset constants\n var x = 1,\n y = 0;\n for (var t = 0; t < 24; t++) {\n RHO_OFFSETS[x + 5 * y] = (t + 1) * (t + 2) / 2 % 64;\n var newX = y % 5;\n var newY = (2 * x + 3 * y) % 5;\n x = newX;\n y = newY;\n }\n\n // Compute pi index constants\n for (var x = 0; x < 5; x++) {\n for (var y = 0; y < 5; y++) {\n PI_INDEXES[x + 5 * y] = y + (2 * x + 3 * y) % 5 * 5;\n }\n }\n\n // Compute round constants\n var LFSR = 0x01;\n for (var i = 0; i < 24; i++) {\n var roundConstantMsw = 0;\n var roundConstantLsw = 0;\n for (var j = 0; j < 7; j++) {\n if (LFSR & 0x01) {\n var bitPosition = (1 << j) - 1;\n if (bitPosition < 32) {\n roundConstantLsw ^= 1 << bitPosition;\n } else /* if (bitPosition >= 32) */{\n roundConstantMsw ^= 1 << bitPosition - 32;\n }\n }\n\n // Compute next LFSR\n if (LFSR & 0x80) {\n // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n LFSR = LFSR << 1 ^ 0x71;\n } else {\n LFSR <<= 1;\n }\n }\n ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n }\n })();\n\n // Reusable objects for temporary values\n var T = [];\n (function () {\n for (var i = 0; i < 25; i++) {\n T[i] = X64Word.create();\n }\n })();\n\n /**\n * SHA-3 hash algorithm.\n */\n var SHA3 = C_algo.SHA3 = Hasher.extend({\n /**\n * Configuration options.\n *\n * @property {number} outputLength\n * The desired number of bits in the output hash.\n * Only values permitted are: 224, 256, 384, 512.\n * Default: 512\n */\n cfg: Hasher.cfg.extend({\n outputLength: 512\n }),\n _doReset: function () {\n var state = this._state = [];\n for (var i = 0; i < 25; i++) {\n state[i] = new X64Word.init();\n }\n this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n },\n _doProcessBlock: function (M, offset) {\n // Shortcuts\n var state = this._state;\n var nBlockSizeLanes = this.blockSize / 2;\n\n // Absorb\n for (var i = 0; i < nBlockSizeLanes; i++) {\n // Shortcuts\n var M2i = M[offset + 2 * i];\n var M2i1 = M[offset + 2 * i + 1];\n\n // Swap endian\n M2i = (M2i << 8 | M2i >>> 24) & 0x00ff00ff | (M2i << 24 | M2i >>> 8) & 0xff00ff00;\n M2i1 = (M2i1 << 8 | M2i1 >>> 24) & 0x00ff00ff | (M2i1 << 24 | M2i1 >>> 8) & 0xff00ff00;\n\n // Absorb message into state\n var lane = state[i];\n lane.high ^= M2i1;\n lane.low ^= M2i;\n }\n\n // Rounds\n for (var round = 0; round < 24; round++) {\n // Theta\n for (var x = 0; x < 5; x++) {\n // Mix column lanes\n var tMsw = 0,\n tLsw = 0;\n for (var y = 0; y < 5; y++) {\n var lane = state[x + 5 * y];\n tMsw ^= lane.high;\n tLsw ^= lane.low;\n }\n\n // Temporary values\n var Tx = T[x];\n Tx.high = tMsw;\n Tx.low = tLsw;\n }\n for (var x = 0; x < 5; x++) {\n // Shortcuts\n var Tx4 = T[(x + 4) % 5];\n var Tx1 = T[(x + 1) % 5];\n var Tx1Msw = Tx1.high;\n var Tx1Lsw = Tx1.low;\n\n // Mix surrounding columns\n var tMsw = Tx4.high ^ (Tx1Msw << 1 | Tx1Lsw >>> 31);\n var tLsw = Tx4.low ^ (Tx1Lsw << 1 | Tx1Msw >>> 31);\n for (var y = 0; y < 5; y++) {\n var lane = state[x + 5 * y];\n lane.high ^= tMsw;\n lane.low ^= tLsw;\n }\n }\n\n // Rho Pi\n for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n var tMsw;\n var tLsw;\n\n // Shortcuts\n var lane = state[laneIndex];\n var laneMsw = lane.high;\n var laneLsw = lane.low;\n var rhoOffset = RHO_OFFSETS[laneIndex];\n\n // Rotate lanes\n if (rhoOffset < 32) {\n tMsw = laneMsw << rhoOffset | laneLsw >>> 32 - rhoOffset;\n tLsw = laneLsw << rhoOffset | laneMsw >>> 32 - rhoOffset;\n } else /* if (rhoOffset >= 32) */{\n tMsw = laneLsw << rhoOffset - 32 | laneMsw >>> 64 - rhoOffset;\n tLsw = laneMsw << rhoOffset - 32 | laneLsw >>> 64 - rhoOffset;\n }\n\n // Transpose lanes\n var TPiLane = T[PI_INDEXES[laneIndex]];\n TPiLane.high = tMsw;\n TPiLane.low = tLsw;\n }\n\n // Rho pi at x = y = 0\n var T0 = T[0];\n var state0 = state[0];\n T0.high = state0.high;\n T0.low = state0.low;\n\n // Chi\n for (var x = 0; x < 5; x++) {\n for (var y = 0; y < 5; y++) {\n // Shortcuts\n var laneIndex = x + 5 * y;\n var lane = state[laneIndex];\n var TLane = T[laneIndex];\n var Tx1Lane = T[(x + 1) % 5 + 5 * y];\n var Tx2Lane = T[(x + 2) % 5 + 5 * y];\n\n // Mix rows\n lane.high = TLane.high ^ ~Tx1Lane.high & Tx2Lane.high;\n lane.low = TLane.low ^ ~Tx1Lane.low & Tx2Lane.low;\n }\n }\n\n // Iota\n var lane = state[0];\n var roundConstant = ROUND_CONSTANTS[round];\n lane.high ^= roundConstant.high;\n lane.low ^= roundConstant.low;\n }\n },\n _doFinalize: function () {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n var blockSizeBits = this.blockSize * 32;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x1 << 24 - nBitsLeft % 32;\n dataWords[(Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits >>> 5) - 1] |= 0x80;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var state = this._state;\n var outputLengthBytes = this.cfg.outputLength / 8;\n var outputLengthLanes = outputLengthBytes / 8;\n\n // Squeeze\n var hashWords = [];\n for (var i = 0; i < outputLengthLanes; i++) {\n // Shortcuts\n var lane = state[i];\n var laneMsw = lane.high;\n var laneLsw = lane.low;\n\n // Swap endian\n laneMsw = (laneMsw << 8 | laneMsw >>> 24) & 0x00ff00ff | (laneMsw << 24 | laneMsw >>> 8) & 0xff00ff00;\n laneLsw = (laneLsw << 8 | laneLsw >>> 24) & 0x00ff00ff | (laneLsw << 24 | laneLsw >>> 8) & 0xff00ff00;\n\n // Squeeze state to retrieve hash\n hashWords.push(laneLsw);\n hashWords.push(laneMsw);\n }\n\n // Return final computed hash\n return new WordArray.init(hashWords, outputLengthBytes);\n },\n clone: function () {\n var clone = Hasher.clone.call(this);\n var state = clone._state = this._state.slice(0);\n for (var i = 0; i < 25; i++) {\n state[i] = state[i].clone();\n }\n return clone;\n }\n });\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA3('message');\n * var hash = CryptoJS.SHA3(wordArray);\n */\n C.SHA3 = Hasher._createHelper(SHA3);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA3(message, key);\n */\n C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n })(Math);\n return CryptoJS.SHA3;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /** @preserve\n (c) 2012 by Cédric Mesnil. All rights reserved.\n \tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n \t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n \tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Constants table\n var _zl = WordArray.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n var _zr = WordArray.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n var _sl = WordArray.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]);\n var _sr = WordArray.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]);\n var _hl = WordArray.create([0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n var _hr = WordArray.create([0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n /**\n * RIPEMD160 hash algorithm.\n */\n var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n _doReset: function () {\n this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n },\n _doProcessBlock: function (M, offset) {\n // Swap endian\n for (var i = 0; i < 16; i++) {\n // Shortcuts\n var offset_i = offset + i;\n var M_offset_i = M[offset_i];\n\n // Swap\n M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n }\n // Shortcut\n var H = this._hash.words;\n var hl = _hl.words;\n var hr = _hr.words;\n var zl = _zl.words;\n var zr = _zr.words;\n var sl = _sl.words;\n var sr = _sr.words;\n\n // Working variables\n var al, bl, cl, dl, el;\n var ar, br, cr, dr, er;\n ar = al = H[0];\n br = bl = H[1];\n cr = cl = H[2];\n dr = dl = H[3];\n er = el = H[4];\n // Computation\n var t;\n for (var i = 0; i < 80; i += 1) {\n t = al + M[offset + zl[i]] | 0;\n if (i < 16) {\n t += f1(bl, cl, dl) + hl[0];\n } else if (i < 32) {\n t += f2(bl, cl, dl) + hl[1];\n } else if (i < 48) {\n t += f3(bl, cl, dl) + hl[2];\n } else if (i < 64) {\n t += f4(bl, cl, dl) + hl[3];\n } else {\n // if (i<80) {\n t += f5(bl, cl, dl) + hl[4];\n }\n t = t | 0;\n t = rotl(t, sl[i]);\n t = t + el | 0;\n al = el;\n el = dl;\n dl = rotl(cl, 10);\n cl = bl;\n bl = t;\n t = ar + M[offset + zr[i]] | 0;\n if (i < 16) {\n t += f5(br, cr, dr) + hr[0];\n } else if (i < 32) {\n t += f4(br, cr, dr) + hr[1];\n } else if (i < 48) {\n t += f3(br, cr, dr) + hr[2];\n } else if (i < 64) {\n t += f2(br, cr, dr) + hr[3];\n } else {\n // if (i<80) {\n t += f1(br, cr, dr) + hr[4];\n }\n t = t | 0;\n t = rotl(t, sr[i]);\n t = t + er | 0;\n ar = er;\n er = dr;\n dr = rotl(cr, 10);\n cr = br;\n br = t;\n }\n // Intermediate hash value\n t = H[1] + cl + dr | 0;\n H[1] = H[2] + dl + er | 0;\n H[2] = H[3] + el + ar | 0;\n H[3] = H[4] + al + br | 0;\n H[4] = H[0] + bl + cr | 0;\n H[0] = t;\n },\n _doFinalize: function () {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotal << 8 | nBitsTotal >>> 24) & 0x00ff00ff | (nBitsTotal << 24 | nBitsTotal >>> 8) & 0xff00ff00;\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var hash = this._hash;\n var H = hash.words;\n\n // Swap endian\n for (var i = 0; i < 5; i++) {\n // Shortcut\n var H_i = H[i];\n\n // Swap\n H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n }\n\n // Return final computed hash\n return hash;\n },\n clone: function () {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n function f1(x, y, z) {\n return x ^ y ^ z;\n }\n function f2(x, y, z) {\n return x & y | ~x & z;\n }\n function f3(x, y, z) {\n return (x | ~y) ^ z;\n }\n function f4(x, y, z) {\n return x & z | y & ~z;\n }\n function f5(x, y, z) {\n return x ^ (y | ~z);\n }\n function rotl(x, n) {\n return x << n | x >>> 32 - n;\n }\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.RIPEMD160('message');\n * var hash = CryptoJS.RIPEMD160(wordArray);\n */\n C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n */\n C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n })(Math);\n return CryptoJS.RIPEMD160;\n});",";\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var C_algo = C.algo;\n\n /**\n * HMAC algorithm.\n */\n var HMAC = C_algo.HMAC = Base.extend({\n /**\n * Initializes a newly created HMAC.\n *\n * @param {Hasher} hasher The hash algorithm to use.\n * @param {WordArray|string} key The secret key.\n *\n * @example\n *\n * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n */\n init: function (hasher, key) {\n // Init hasher\n hasher = this._hasher = new hasher.init();\n\n // Convert string to WordArray, else assume WordArray already\n if (typeof key == 'string') {\n key = Utf8.parse(key);\n }\n\n // Shortcuts\n var hasherBlockSize = hasher.blockSize;\n var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n // Allow arbitrary length keys\n if (key.sigBytes > hasherBlockSizeBytes) {\n key = hasher.finalize(key);\n }\n\n // Clamp excess bits\n key.clamp();\n\n // Clone key for inner and outer pads\n var oKey = this._oKey = key.clone();\n var iKey = this._iKey = key.clone();\n\n // Shortcuts\n var oKeyWords = oKey.words;\n var iKeyWords = iKey.words;\n\n // XOR keys with pad constants\n for (var i = 0; i < hasherBlockSize; i++) {\n oKeyWords[i] ^= 0x5c5c5c5c;\n iKeyWords[i] ^= 0x36363636;\n }\n oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n // Set initial values\n this.reset();\n },\n /**\n * Resets this HMAC to its initial state.\n *\n * @example\n *\n * hmacHasher.reset();\n */\n reset: function () {\n // Shortcut\n var hasher = this._hasher;\n\n // Reset\n hasher.reset();\n hasher.update(this._iKey);\n },\n /**\n * Updates this HMAC with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {HMAC} This HMAC instance.\n *\n * @example\n *\n * hmacHasher.update('message');\n * hmacHasher.update(wordArray);\n */\n update: function (messageUpdate) {\n this._hasher.update(messageUpdate);\n\n // Chainable\n return this;\n },\n /**\n * Finalizes the HMAC computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The HMAC.\n *\n * @example\n *\n * var hmac = hmacHasher.finalize();\n * var hmac = hmacHasher.finalize('message');\n * var hmac = hmacHasher.finalize(wordArray);\n */\n finalize: function (messageUpdate) {\n // Shortcut\n var hasher = this._hasher;\n\n // Compute HMAC\n var innerHash = hasher.finalize(messageUpdate);\n hasher.reset();\n var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n return hmac;\n }\n });\n })();\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./sha256\", \"./hmac\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var SHA256 = C_algo.SHA256;\n var HMAC = C_algo.HMAC;\n\n /**\n * Password-Based Key Derivation Function 2 algorithm.\n */\n var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hasher to use. Default: SHA256\n * @property {number} iterations The number of iterations to perform. Default: 250000\n */\n cfg: Base.extend({\n keySize: 128 / 32,\n hasher: SHA256,\n iterations: 250000\n }),\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * var kdf = CryptoJS.algo.PBKDF2.create();\n * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n */\n init: function (cfg) {\n this.cfg = this.cfg.extend(cfg);\n },\n /**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * var key = kdf.compute(password, salt);\n */\n compute: function (password, salt) {\n // Shortcut\n var cfg = this.cfg;\n\n // Init HMAC\n var hmac = HMAC.create(cfg.hasher, password);\n\n // Initial values\n var derivedKey = WordArray.create();\n var blockIndex = WordArray.create([0x00000001]);\n\n // Shortcuts\n var derivedKeyWords = derivedKey.words;\n var blockIndexWords = blockIndex.words;\n var keySize = cfg.keySize;\n var iterations = cfg.iterations;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n var block = hmac.update(salt).finalize(blockIndex);\n hmac.reset();\n\n // Shortcuts\n var blockWords = block.words;\n var blockWordsLength = blockWords.length;\n\n // Iterations\n var intermediate = block;\n for (var i = 1; i < iterations; i++) {\n intermediate = hmac.finalize(intermediate);\n hmac.reset();\n\n // Shortcut\n var intermediateWords = intermediate.words;\n\n // XOR intermediate with block\n for (var j = 0; j < blockWordsLength; j++) {\n blockWords[j] ^= intermediateWords[j];\n }\n }\n derivedKey.concat(block);\n blockIndexWords[0]++;\n }\n derivedKey.sigBytes = keySize * 4;\n return derivedKey;\n }\n });\n\n /**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.PBKDF2(password, salt);\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n */\n C.PBKDF2 = function (password, salt, cfg) {\n return PBKDF2.create(cfg).compute(password, salt);\n };\n })();\n return CryptoJS.PBKDF2;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./sha1\", \"./hmac\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var MD5 = C_algo.MD5;\n\n /**\n * This key derivation function is meant to conform with EVP_BytesToKey.\n * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n */\n var EvpKDF = C_algo.EvpKDF = Base.extend({\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n cfg: Base.extend({\n keySize: 128 / 32,\n hasher: MD5,\n iterations: 1\n }),\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * var kdf = CryptoJS.algo.EvpKDF.create();\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n */\n init: function (cfg) {\n this.cfg = this.cfg.extend(cfg);\n },\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * var key = kdf.compute(password, salt);\n */\n compute: function (password, salt) {\n var block;\n\n // Shortcut\n var cfg = this.cfg;\n\n // Init hasher\n var hasher = cfg.hasher.create();\n\n // Initial values\n var derivedKey = WordArray.create();\n\n // Shortcuts\n var derivedKeyWords = derivedKey.words;\n var keySize = cfg.keySize;\n var iterations = cfg.iterations;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n if (block) {\n hasher.update(block);\n }\n block = hasher.update(password).finalize(salt);\n hasher.reset();\n\n // Iterations\n for (var i = 1; i < iterations; i++) {\n block = hasher.finalize(block);\n hasher.reset();\n }\n derivedKey.concat(block);\n }\n derivedKey.sigBytes = keySize * 4;\n return derivedKey;\n }\n });\n\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.EvpKDF(password, salt);\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n */\n C.EvpKDF = function (password, salt, cfg) {\n return EvpKDF.create(cfg).compute(password, salt);\n };\n })();\n return CryptoJS.EvpKDF;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./evpkdf\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * Cipher core components.\n */\n CryptoJS.lib.Cipher || function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var Base64 = C_enc.Base64;\n var C_algo = C.algo;\n var EvpKDF = C_algo.EvpKDF;\n\n /**\n * Abstract base cipher template.\n *\n * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n */\n var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n *\n * @property {WordArray} iv The IV to use for this operation.\n */\n cfg: Base.extend(),\n /**\n * Creates this cipher in encryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n */\n createEncryptor: function (key, cfg) {\n return this.create(this._ENC_XFORM_MODE, key, cfg);\n },\n /**\n * Creates this cipher in decryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n */\n createDecryptor: function (key, cfg) {\n return this.create(this._DEC_XFORM_MODE, key, cfg);\n },\n /**\n * Initializes a newly created cipher.\n *\n * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n */\n init: function (xformMode, key, cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg);\n\n // Store transform mode and key\n this._xformMode = xformMode;\n this._key = key;\n\n // Set initial values\n this.reset();\n },\n /**\n * Resets this cipher to its initial state.\n *\n * @example\n *\n * cipher.reset();\n */\n reset: function () {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this);\n\n // Perform concrete-cipher logic\n this._doReset();\n },\n /**\n * Adds data to be encrypted or decrypted.\n *\n * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n *\n * @return {WordArray} The data after processing.\n *\n * @example\n *\n * var encrypted = cipher.process('data');\n * var encrypted = cipher.process(wordArray);\n */\n process: function (dataUpdate) {\n // Append\n this._append(dataUpdate);\n\n // Process available blocks\n return this._process();\n },\n /**\n * Finalizes the encryption or decryption process.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n *\n * @return {WordArray} The data after final processing.\n *\n * @example\n *\n * var encrypted = cipher.finalize();\n * var encrypted = cipher.finalize('data');\n * var encrypted = cipher.finalize(wordArray);\n */\n finalize: function (dataUpdate) {\n // Final data update\n if (dataUpdate) {\n this._append(dataUpdate);\n }\n\n // Perform concrete-cipher logic\n var finalProcessedData = this._doFinalize();\n return finalProcessedData;\n },\n keySize: 128 / 32,\n ivSize: 128 / 32,\n _ENC_XFORM_MODE: 1,\n _DEC_XFORM_MODE: 2,\n /**\n * Creates shortcut functions to a cipher's object interface.\n *\n * @param {Cipher} cipher The cipher to create a helper for.\n *\n * @return {Object} An object with encrypt and decrypt shortcut functions.\n *\n * @static\n *\n * @example\n *\n * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n */\n _createHelper: function () {\n function selectCipherStrategy(key) {\n if (typeof key == 'string') {\n return PasswordBasedCipher;\n } else {\n return SerializableCipher;\n }\n }\n return function (cipher) {\n return {\n encrypt: function (message, key, cfg) {\n return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n },\n decrypt: function (ciphertext, key, cfg) {\n return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n }\n };\n };\n }()\n });\n\n /**\n * Abstract base stream cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n */\n var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n _doFinalize: function () {\n // Process partial blocks\n var finalProcessedBlocks = this._process(!!'flush');\n return finalProcessedBlocks;\n },\n blockSize: 1\n });\n\n /**\n * Mode namespace.\n */\n var C_mode = C.mode = {};\n\n /**\n * Abstract base block cipher mode template.\n */\n var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n /**\n * Creates this mode for encryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n */\n createEncryptor: function (cipher, iv) {\n return this.Encryptor.create(cipher, iv);\n },\n /**\n * Creates this mode for decryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n */\n createDecryptor: function (cipher, iv) {\n return this.Decryptor.create(cipher, iv);\n },\n /**\n * Initializes a newly created mode.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n */\n init: function (cipher, iv) {\n this._cipher = cipher;\n this._iv = iv;\n }\n });\n\n /**\n * Cipher Block Chaining mode.\n */\n var CBC = C_mode.CBC = function () {\n /**\n * Abstract base CBC mode.\n */\n var CBC = BlockCipherMode.extend();\n\n /**\n * CBC encryptor.\n */\n CBC.Encryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function (words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // XOR and encrypt\n xorBlock.call(this, words, offset, blockSize);\n cipher.encryptBlock(words, offset);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n });\n\n /**\n * CBC decryptor.\n */\n CBC.Decryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function (words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // Remember this block to use with next block\n var thisBlock = words.slice(offset, offset + blockSize);\n\n // Decrypt and XOR\n cipher.decryptBlock(words, offset);\n xorBlock.call(this, words, offset, blockSize);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n });\n function xorBlock(words, offset, blockSize) {\n var block;\n\n // Shortcut\n var iv = this._iv;\n\n // Choose mixing block\n if (iv) {\n block = iv;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n block = this._prevBlock;\n }\n\n // XOR blocks\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= block[i];\n }\n }\n return CBC;\n }();\n\n /**\n * Padding namespace.\n */\n var C_pad = C.pad = {};\n\n /**\n * PKCS #5/7 padding strategy.\n */\n var Pkcs7 = C_pad.Pkcs7 = {\n /**\n * Pads data using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to pad.\n * @param {number} blockSize The multiple that the data should be padded to.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n */\n pad: function (data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n // Create padding word\n var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes;\n\n // Create padding\n var paddingWords = [];\n for (var i = 0; i < nPaddingBytes; i += 4) {\n paddingWords.push(paddingWord);\n }\n var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n // Add padding\n data.concat(padding);\n },\n /**\n * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to unpad.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.unpad(wordArray);\n */\n unpad: function (data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n\n /**\n * Abstract base block cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n */\n var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n /**\n * Configuration options.\n *\n * @property {Mode} mode The block mode to use. Default: CBC\n * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n */\n cfg: Cipher.cfg.extend({\n mode: CBC,\n padding: Pkcs7\n }),\n reset: function () {\n var modeCreator;\n\n // Reset cipher\n Cipher.reset.call(this);\n\n // Shortcuts\n var cfg = this.cfg;\n var iv = cfg.iv;\n var mode = cfg.mode;\n\n // Reset block mode\n if (this._xformMode == this._ENC_XFORM_MODE) {\n modeCreator = mode.createEncryptor;\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n modeCreator = mode.createDecryptor;\n // Keep at least one block in the buffer for unpadding\n this._minBufferSize = 1;\n }\n if (this._mode && this._mode.__creator == modeCreator) {\n this._mode.init(this, iv && iv.words);\n } else {\n this._mode = modeCreator.call(mode, this, iv && iv.words);\n this._mode.__creator = modeCreator;\n }\n },\n _doProcessBlock: function (words, offset) {\n this._mode.processBlock(words, offset);\n },\n _doFinalize: function () {\n var finalProcessedBlocks;\n\n // Shortcut\n var padding = this.cfg.padding;\n\n // Finalize\n if (this._xformMode == this._ENC_XFORM_MODE) {\n // Pad data\n padding.pad(this._data, this.blockSize);\n\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n\n // Unpad data\n padding.unpad(finalProcessedBlocks);\n }\n return finalProcessedBlocks;\n },\n blockSize: 128 / 32\n });\n\n /**\n * A collection of cipher parameters.\n *\n * @property {WordArray} ciphertext The raw ciphertext.\n * @property {WordArray} key The key to this ciphertext.\n * @property {WordArray} iv The IV used in the ciphering operation.\n * @property {WordArray} salt The salt used with a key derivation function.\n * @property {Cipher} algorithm The cipher algorithm.\n * @property {Mode} mode The block mode used in the ciphering operation.\n * @property {Padding} padding The padding scheme used in the ciphering operation.\n * @property {number} blockSize The block size of the cipher.\n * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n */\n var CipherParams = C_lib.CipherParams = Base.extend({\n /**\n * Initializes a newly created cipher params object.\n *\n * @param {Object} cipherParams An object with any of the possible cipher parameters.\n *\n * @example\n *\n * var cipherParams = CryptoJS.lib.CipherParams.create({\n * ciphertext: ciphertextWordArray,\n * key: keyWordArray,\n * iv: ivWordArray,\n * salt: saltWordArray,\n * algorithm: CryptoJS.algo.AES,\n * mode: CryptoJS.mode.CBC,\n * padding: CryptoJS.pad.PKCS7,\n * blockSize: 4,\n * formatter: CryptoJS.format.OpenSSL\n * });\n */\n init: function (cipherParams) {\n this.mixIn(cipherParams);\n },\n /**\n * Converts this cipher params object to a string.\n *\n * @param {Format} formatter (Optional) The formatting strategy to use.\n *\n * @return {string} The stringified cipher params.\n *\n * @throws Error If neither the formatter nor the default formatter is set.\n *\n * @example\n *\n * var string = cipherParams + '';\n * var string = cipherParams.toString();\n * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n */\n toString: function (formatter) {\n return (formatter || this.formatter).stringify(this);\n }\n });\n\n /**\n * Format namespace.\n */\n var C_format = C.format = {};\n\n /**\n * OpenSSL formatting strategy.\n */\n var OpenSSLFormatter = C_format.OpenSSL = {\n /**\n * Converts a cipher params object to an OpenSSL-compatible string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The OpenSSL-compatible string.\n *\n * @static\n *\n * @example\n *\n * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n */\n stringify: function (cipherParams) {\n var wordArray;\n\n // Shortcuts\n var ciphertext = cipherParams.ciphertext;\n var salt = cipherParams.salt;\n\n // Format\n if (salt) {\n wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n } else {\n wordArray = ciphertext;\n }\n return wordArray.toString(Base64);\n },\n /**\n * Converts an OpenSSL-compatible string to a cipher params object.\n *\n * @param {string} openSSLStr The OpenSSL-compatible string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n */\n parse: function (openSSLStr) {\n var salt;\n\n // Parse base64\n var ciphertext = Base64.parse(openSSLStr);\n\n // Shortcut\n var ciphertextWords = ciphertext.words;\n\n // Test for salt\n if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n // Extract salt\n salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n // Remove salt from ciphertext\n ciphertextWords.splice(0, 4);\n ciphertext.sigBytes -= 16;\n }\n return CipherParams.create({\n ciphertext: ciphertext,\n salt: salt\n });\n }\n };\n\n /**\n * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n */\n var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n /**\n * Configuration options.\n *\n * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n */\n cfg: Base.extend({\n format: OpenSSLFormatter\n }),\n /**\n * Encrypts a message.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n encrypt: function (cipher, message, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Encrypt\n var encryptor = cipher.createEncryptor(key, cfg);\n var ciphertext = encryptor.finalize(message);\n\n // Shortcut\n var cipherCfg = encryptor.cfg;\n\n // Create and return serializable cipher params\n return CipherParams.create({\n ciphertext: ciphertext,\n key: key,\n iv: cipherCfg.iv,\n algorithm: cipher,\n mode: cipherCfg.mode,\n padding: cipherCfg.padding,\n blockSize: cipher.blockSize,\n formatter: cfg.format\n });\n },\n /**\n * Decrypts serialized ciphertext.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n decrypt: function (cipher, ciphertext, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Convert string to CipherParams\n ciphertext = this._parse(ciphertext, cfg.format);\n\n // Decrypt\n var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n return plaintext;\n },\n /**\n * Converts serialized ciphertext to CipherParams,\n * else assumed CipherParams already and returns ciphertext unchanged.\n *\n * @param {CipherParams|string} ciphertext The ciphertext.\n * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n *\n * @return {CipherParams} The unserialized ciphertext.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n */\n _parse: function (ciphertext, format) {\n if (typeof ciphertext == 'string') {\n return format.parse(ciphertext, this);\n } else {\n return ciphertext;\n }\n }\n });\n\n /**\n * Key derivation function namespace.\n */\n var C_kdf = C.kdf = {};\n\n /**\n * OpenSSL key derivation function.\n */\n var OpenSSLKdf = C_kdf.OpenSSL = {\n /**\n * Derives a key and IV from a password.\n *\n * @param {string} password The password to derive from.\n * @param {number} keySize The size in words of the key to generate.\n * @param {number} ivSize The size in words of the IV to generate.\n * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n *\n * @return {CipherParams} A cipher params object with the key, IV, and salt.\n *\n * @static\n *\n * @example\n *\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n */\n execute: function (password, keySize, ivSize, salt, hasher) {\n // Generate random salt\n if (!salt) {\n salt = WordArray.random(64 / 8);\n }\n\n // Derive key and IV\n if (!hasher) {\n var key = EvpKDF.create({\n keySize: keySize + ivSize\n }).compute(password, salt);\n } else {\n var key = EvpKDF.create({\n keySize: keySize + ivSize,\n hasher: hasher\n }).compute(password, salt);\n }\n\n // Separate key and IV\n var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n key.sigBytes = keySize * 4;\n\n // Return params\n return CipherParams.create({\n key: key,\n iv: iv,\n salt: salt\n });\n }\n };\n\n /**\n * A serializable cipher wrapper that derives the key from a password,\n * and returns ciphertext as a serializable cipher params object.\n */\n var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n /**\n * Configuration options.\n *\n * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n */\n cfg: SerializableCipher.cfg.extend({\n kdf: OpenSSLKdf\n }),\n /**\n * Encrypts a message using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n */\n encrypt: function (cipher, message, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Derive key and other params\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n // Add IV to config\n cfg.iv = derivedParams.iv;\n\n // Encrypt\n var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n // Mix in derived params\n ciphertext.mixIn(derivedParams);\n return ciphertext;\n },\n /**\n * Decrypts serialized ciphertext using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n */\n decrypt: function (cipher, ciphertext, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Convert string to CipherParams\n ciphertext = this._parse(ciphertext, cfg.format);\n\n // Derive key and other params\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n // Add IV to config\n cfg.iv = derivedParams.iv;\n\n // Decrypt\n var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n return plaintext;\n }\n });\n }();\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * Cipher Feedback block mode.\n */\n CryptoJS.mode.CFB = function () {\n var CFB = CryptoJS.lib.BlockCipherMode.extend();\n CFB.Encryptor = CFB.extend({\n processBlock: function (words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n });\n CFB.Decryptor = CFB.extend({\n processBlock: function (words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // Remember this block to use with next block\n var thisBlock = words.slice(offset, offset + blockSize);\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n });\n function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n var keystream;\n\n // Shortcut\n var iv = this._iv;\n\n // Generate keystream\n if (iv) {\n keystream = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n keystream = this._prevBlock;\n }\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n return CFB;\n }();\n return CryptoJS.mode.CFB;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * Counter block mode.\n */\n CryptoJS.mode.CTR = function () {\n var CTR = CryptoJS.lib.BlockCipherMode.extend();\n var Encryptor = CTR.Encryptor = CTR.extend({\n processBlock: function (words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var counter = this._counter;\n\n // Generate keystream\n if (iv) {\n counter = this._counter = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n var keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Increment counter\n counter[blockSize - 1] = counter[blockSize - 1] + 1 | 0;\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n CTR.Decryptor = Encryptor;\n return CTR;\n }();\n return CryptoJS.mode.CTR;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /** @preserve\n * Counter block mode compatible with Dr Brian Gladman fileenc.c\n * derived from CryptoJS.mode.CTR\n * Jan Hruby jhruby.web@gmail.com\n */\n CryptoJS.mode.CTRGladman = function () {\n var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n function incWord(word) {\n if ((word >> 24 & 0xff) === 0xff) {\n //overflow\n var b1 = word >> 16 & 0xff;\n var b2 = word >> 8 & 0xff;\n var b3 = word & 0xff;\n if (b1 === 0xff)\n // overflow b1\n {\n b1 = 0;\n if (b2 === 0xff) {\n b2 = 0;\n if (b3 === 0xff) {\n b3 = 0;\n } else {\n ++b3;\n }\n } else {\n ++b2;\n }\n } else {\n ++b1;\n }\n word = 0;\n word += b1 << 16;\n word += b2 << 8;\n word += b3;\n } else {\n word += 0x01 << 24;\n }\n return word;\n }\n function incCounter(counter) {\n if ((counter[0] = incWord(counter[0])) === 0) {\n // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n counter[1] = incWord(counter[1]);\n }\n return counter;\n }\n var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n processBlock: function (words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var counter = this._counter;\n\n // Generate keystream\n if (iv) {\n counter = this._counter = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n incCounter(counter);\n var keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n CTRGladman.Decryptor = Encryptor;\n return CTRGladman;\n }();\n return CryptoJS.mode.CTRGladman;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * Output Feedback block mode.\n */\n CryptoJS.mode.OFB = function () {\n var OFB = CryptoJS.lib.BlockCipherMode.extend();\n var Encryptor = OFB.Encryptor = OFB.extend({\n processBlock: function (words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var keystream = this._keystream;\n\n // Generate keystream\n if (iv) {\n keystream = this._keystream = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n OFB.Decryptor = Encryptor;\n return OFB;\n }();\n return CryptoJS.mode.OFB;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * Electronic Codebook block mode.\n */\n CryptoJS.mode.ECB = function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n ECB.Encryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n ECB.Decryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n return ECB;\n }();\n return CryptoJS.mode.ECB;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * ANSI X.923 padding strategy.\n */\n CryptoJS.pad.AnsiX923 = {\n pad: function (data, blockSize) {\n // Shortcuts\n var dataSigBytes = data.sigBytes;\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n // Compute last byte position\n var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n // Pad\n data.clamp();\n data.words[lastBytePos >>> 2] |= nPaddingBytes << 24 - lastBytePos % 4 * 8;\n data.sigBytes += nPaddingBytes;\n },\n unpad: function (data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n return CryptoJS.pad.Ansix923;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * ISO 10126 padding strategy.\n */\n CryptoJS.pad.Iso10126 = {\n pad: function (data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n // Pad\n data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n },\n unpad: function (data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n return CryptoJS.pad.Iso10126;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * ISO/IEC 9797-1 Padding Method 2.\n */\n CryptoJS.pad.Iso97971 = {\n pad: function (data, blockSize) {\n // Add 0x80 byte\n data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n // Zero pad the rest\n CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n },\n unpad: function (data) {\n // Remove zero padding\n CryptoJS.pad.ZeroPadding.unpad(data);\n\n // Remove one more byte -- the 0x80 byte\n data.sigBytes--;\n }\n };\n return CryptoJS.pad.Iso97971;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * Zero padding strategy.\n */\n CryptoJS.pad.ZeroPadding = {\n pad: function (data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Pad\n data.clamp();\n data.sigBytes += blockSizeBytes - (data.sigBytes % blockSizeBytes || blockSizeBytes);\n },\n unpad: function (data) {\n // Shortcut\n var dataWords = data.words;\n\n // Unpad\n var i = data.sigBytes - 1;\n for (var i = data.sigBytes - 1; i >= 0; i--) {\n if (dataWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff) {\n data.sigBytes = i + 1;\n break;\n }\n }\n }\n };\n return CryptoJS.pad.ZeroPadding;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n /**\n * A noop padding strategy.\n */\n CryptoJS.pad.NoPadding = {\n pad: function () {},\n unpad: function () {}\n };\n return CryptoJS.pad.NoPadding;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var CipherParams = C_lib.CipherParams;\n var C_enc = C.enc;\n var Hex = C_enc.Hex;\n var C_format = C.format;\n var HexFormatter = C_format.Hex = {\n /**\n * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The hexadecimally encoded string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n */\n stringify: function (cipherParams) {\n return cipherParams.ciphertext.toString(Hex);\n },\n /**\n * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n *\n * @param {string} input The hexadecimally encoded string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n */\n parse: function (input) {\n var ciphertext = Hex.parse(input);\n return CipherParams.create({\n ciphertext: ciphertext\n });\n }\n };\n })();\n return CryptoJS.format.Hex;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo;\n\n // Lookup tables\n var SBOX = [];\n var INV_SBOX = [];\n var SUB_MIX_0 = [];\n var SUB_MIX_1 = [];\n var SUB_MIX_2 = [];\n var SUB_MIX_3 = [];\n var INV_SUB_MIX_0 = [];\n var INV_SUB_MIX_1 = [];\n var INV_SUB_MIX_2 = [];\n var INV_SUB_MIX_3 = [];\n\n // Compute lookup tables\n (function () {\n // Compute double table\n var d = [];\n for (var i = 0; i < 256; i++) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = i << 1 ^ 0x11b;\n }\n }\n\n // Walk GF(2^8)\n var x = 0;\n var xi = 0;\n for (var i = 0; i < 256; i++) {\n // Compute sbox\n var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n SBOX[x] = sx;\n INV_SBOX[sx] = x;\n\n // Compute multiplication\n var x2 = d[x];\n var x4 = d[x2];\n var x8 = d[x4];\n\n // Compute sub bytes, mix columns tables\n var t = d[sx] * 0x101 ^ sx * 0x1010100;\n SUB_MIX_0[x] = t << 24 | t >>> 8;\n SUB_MIX_1[x] = t << 16 | t >>> 16;\n SUB_MIX_2[x] = t << 8 | t >>> 24;\n SUB_MIX_3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n var t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;\n INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;\n INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;\n INV_SUB_MIX_3[sx] = t;\n\n // Compute next counter\n if (!x) {\n x = xi = 1;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n }\n })();\n\n // Precomputed Rcon lookup\n var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n /**\n * AES block cipher algorithm.\n */\n var AES = C_algo.AES = BlockCipher.extend({\n _doReset: function () {\n var t;\n\n // Skip reset of nRounds has been set before and key did not change\n if (this._nRounds && this._keyPriorReset === this._key) {\n return;\n }\n\n // Shortcuts\n var key = this._keyPriorReset = this._key;\n var keyWords = key.words;\n var keySize = key.sigBytes / 4;\n\n // Compute number of rounds\n var nRounds = this._nRounds = keySize + 6;\n\n // Compute number of key schedule rows\n var ksRows = (nRounds + 1) * 4;\n\n // Compute key schedule\n var keySchedule = this._keySchedule = [];\n for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n if (ksRow < keySize) {\n keySchedule[ksRow] = keyWords[ksRow];\n } else {\n t = keySchedule[ksRow - 1];\n if (!(ksRow % keySize)) {\n // Rot word\n t = t << 8 | t >>> 24;\n\n // Sub word\n t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n\n // Mix Rcon\n t ^= RCON[ksRow / keySize | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize == 4) {\n // Sub word\n t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n }\n keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n }\n }\n\n // Compute inv key schedule\n var invKeySchedule = this._invKeySchedule = [];\n for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n var ksRow = ksRows - invKsRow;\n if (invKsRow % 4) {\n var t = keySchedule[ksRow];\n } else {\n var t = keySchedule[ksRow - 4];\n }\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 0xff]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n }\n }\n },\n encryptBlock: function (M, offset) {\n this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n },\n decryptBlock: function (M, offset) {\n // Swap 2nd and 4th rows\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n // Inv swap 2nd and 4th rows\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n },\n _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n // Shortcut\n var nRounds = this._nRounds;\n\n // Get input, add round key\n var s0 = M[offset] ^ keySchedule[0];\n var s1 = M[offset + 1] ^ keySchedule[1];\n var s2 = M[offset + 2] ^ keySchedule[2];\n var s3 = M[offset + 3] ^ keySchedule[3];\n\n // Key schedule row counter\n var ksRow = 4;\n\n // Rounds\n for (var round = 1; round < nRounds; round++) {\n // Shift rows, sub bytes, mix columns, add round key\n var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[s1 >>> 16 & 0xff] ^ SUB_MIX_2[s2 >>> 8 & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[s2 >>> 16 & 0xff] ^ SUB_MIX_2[s3 >>> 8 & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[s3 >>> 16 & 0xff] ^ SUB_MIX_2[s0 >>> 8 & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[s0 >>> 16 & 0xff] ^ SUB_MIX_2[s1 >>> 8 & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n }\n\n // Shift rows, sub bytes, add round key\n var t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n var t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n var t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n var t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n // Set output\n M[offset] = t0;\n M[offset + 1] = t1;\n M[offset + 2] = t2;\n M[offset + 3] = t3;\n },\n keySize: 256 / 32\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n */\n C.AES = BlockCipher._createHelper(AES);\n })();\n return CryptoJS.AES;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo;\n\n // Permuted Choice 1 constants\n var PC1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4];\n\n // Permuted Choice 2 constants\n var PC2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32];\n\n // Cumulative bit shift constants\n var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n // SBOXes and round permutation constants\n var SBOX_P = [{\n 0x0: 0x808200,\n 0x10000000: 0x8000,\n 0x20000000: 0x808002,\n 0x30000000: 0x2,\n 0x40000000: 0x200,\n 0x50000000: 0x808202,\n 0x60000000: 0x800202,\n 0x70000000: 0x800000,\n 0x80000000: 0x202,\n 0x90000000: 0x800200,\n 0xa0000000: 0x8200,\n 0xb0000000: 0x808000,\n 0xc0000000: 0x8002,\n 0xd0000000: 0x800002,\n 0xe0000000: 0x0,\n 0xf0000000: 0x8202,\n 0x8000000: 0x0,\n 0x18000000: 0x808202,\n 0x28000000: 0x8202,\n 0x38000000: 0x8000,\n 0x48000000: 0x808200,\n 0x58000000: 0x200,\n 0x68000000: 0x808002,\n 0x78000000: 0x2,\n 0x88000000: 0x800200,\n 0x98000000: 0x8200,\n 0xa8000000: 0x808000,\n 0xb8000000: 0x800202,\n 0xc8000000: 0x800002,\n 0xd8000000: 0x8002,\n 0xe8000000: 0x202,\n 0xf8000000: 0x800000,\n 0x1: 0x8000,\n 0x10000001: 0x2,\n 0x20000001: 0x808200,\n 0x30000001: 0x800000,\n 0x40000001: 0x808002,\n 0x50000001: 0x8200,\n 0x60000001: 0x200,\n 0x70000001: 0x800202,\n 0x80000001: 0x808202,\n 0x90000001: 0x808000,\n 0xa0000001: 0x800002,\n 0xb0000001: 0x8202,\n 0xc0000001: 0x202,\n 0xd0000001: 0x800200,\n 0xe0000001: 0x8002,\n 0xf0000001: 0x0,\n 0x8000001: 0x808202,\n 0x18000001: 0x808000,\n 0x28000001: 0x800000,\n 0x38000001: 0x200,\n 0x48000001: 0x8000,\n 0x58000001: 0x800002,\n 0x68000001: 0x2,\n 0x78000001: 0x8202,\n 0x88000001: 0x8002,\n 0x98000001: 0x800202,\n 0xa8000001: 0x202,\n 0xb8000001: 0x808200,\n 0xc8000001: 0x800200,\n 0xd8000001: 0x0,\n 0xe8000001: 0x8200,\n 0xf8000001: 0x808002\n }, {\n 0x0: 0x40084010,\n 0x1000000: 0x4000,\n 0x2000000: 0x80000,\n 0x3000000: 0x40080010,\n 0x4000000: 0x40000010,\n 0x5000000: 0x40084000,\n 0x6000000: 0x40004000,\n 0x7000000: 0x10,\n 0x8000000: 0x84000,\n 0x9000000: 0x40004010,\n 0xa000000: 0x40000000,\n 0xb000000: 0x84010,\n 0xc000000: 0x80010,\n 0xd000000: 0x0,\n 0xe000000: 0x4010,\n 0xf000000: 0x40080000,\n 0x800000: 0x40004000,\n 0x1800000: 0x84010,\n 0x2800000: 0x10,\n 0x3800000: 0x40004010,\n 0x4800000: 0x40084010,\n 0x5800000: 0x40000000,\n 0x6800000: 0x80000,\n 0x7800000: 0x40080010,\n 0x8800000: 0x80010,\n 0x9800000: 0x0,\n 0xa800000: 0x4000,\n 0xb800000: 0x40080000,\n 0xc800000: 0x40000010,\n 0xd800000: 0x84000,\n 0xe800000: 0x40084000,\n 0xf800000: 0x4010,\n 0x10000000: 0x0,\n 0x11000000: 0x40080010,\n 0x12000000: 0x40004010,\n 0x13000000: 0x40084000,\n 0x14000000: 0x40080000,\n 0x15000000: 0x10,\n 0x16000000: 0x84010,\n 0x17000000: 0x4000,\n 0x18000000: 0x4010,\n 0x19000000: 0x80000,\n 0x1a000000: 0x80010,\n 0x1b000000: 0x40000010,\n 0x1c000000: 0x84000,\n 0x1d000000: 0x40004000,\n 0x1e000000: 0x40000000,\n 0x1f000000: 0x40084010,\n 0x10800000: 0x84010,\n 0x11800000: 0x80000,\n 0x12800000: 0x40080000,\n 0x13800000: 0x4000,\n 0x14800000: 0x40004000,\n 0x15800000: 0x40084010,\n 0x16800000: 0x10,\n 0x17800000: 0x40000000,\n 0x18800000: 0x40084000,\n 0x19800000: 0x40000010,\n 0x1a800000: 0x40004010,\n 0x1b800000: 0x80010,\n 0x1c800000: 0x0,\n 0x1d800000: 0x4010,\n 0x1e800000: 0x40080010,\n 0x1f800000: 0x84000\n }, {\n 0x0: 0x104,\n 0x100000: 0x0,\n 0x200000: 0x4000100,\n 0x300000: 0x10104,\n 0x400000: 0x10004,\n 0x500000: 0x4000004,\n 0x600000: 0x4010104,\n 0x700000: 0x4010000,\n 0x800000: 0x4000000,\n 0x900000: 0x4010100,\n 0xa00000: 0x10100,\n 0xb00000: 0x4010004,\n 0xc00000: 0x4000104,\n 0xd00000: 0x10000,\n 0xe00000: 0x4,\n 0xf00000: 0x100,\n 0x80000: 0x4010100,\n 0x180000: 0x4010004,\n 0x280000: 0x0,\n 0x380000: 0x4000100,\n 0x480000: 0x4000004,\n 0x580000: 0x10000,\n 0x680000: 0x10004,\n 0x780000: 0x104,\n 0x880000: 0x4,\n 0x980000: 0x100,\n 0xa80000: 0x4010000,\n 0xb80000: 0x10104,\n 0xc80000: 0x10100,\n 0xd80000: 0x4000104,\n 0xe80000: 0x4010104,\n 0xf80000: 0x4000000,\n 0x1000000: 0x4010100,\n 0x1100000: 0x10004,\n 0x1200000: 0x10000,\n 0x1300000: 0x4000100,\n 0x1400000: 0x100,\n 0x1500000: 0x4010104,\n 0x1600000: 0x4000004,\n 0x1700000: 0x0,\n 0x1800000: 0x4000104,\n 0x1900000: 0x4000000,\n 0x1a00000: 0x4,\n 0x1b00000: 0x10100,\n 0x1c00000: 0x4010000,\n 0x1d00000: 0x104,\n 0x1e00000: 0x10104,\n 0x1f00000: 0x4010004,\n 0x1080000: 0x4000000,\n 0x1180000: 0x104,\n 0x1280000: 0x4010100,\n 0x1380000: 0x0,\n 0x1480000: 0x10004,\n 0x1580000: 0x4000100,\n 0x1680000: 0x100,\n 0x1780000: 0x4010004,\n 0x1880000: 0x10000,\n 0x1980000: 0x4010104,\n 0x1a80000: 0x10104,\n 0x1b80000: 0x4000004,\n 0x1c80000: 0x4000104,\n 0x1d80000: 0x4010000,\n 0x1e80000: 0x4,\n 0x1f80000: 0x10100\n }, {\n 0x0: 0x80401000,\n 0x10000: 0x80001040,\n 0x20000: 0x401040,\n 0x30000: 0x80400000,\n 0x40000: 0x0,\n 0x50000: 0x401000,\n 0x60000: 0x80000040,\n 0x70000: 0x400040,\n 0x80000: 0x80000000,\n 0x90000: 0x400000,\n 0xa0000: 0x40,\n 0xb0000: 0x80001000,\n 0xc0000: 0x80400040,\n 0xd0000: 0x1040,\n 0xe0000: 0x1000,\n 0xf0000: 0x80401040,\n 0x8000: 0x80001040,\n 0x18000: 0x40,\n 0x28000: 0x80400040,\n 0x38000: 0x80001000,\n 0x48000: 0x401000,\n 0x58000: 0x80401040,\n 0x68000: 0x0,\n 0x78000: 0x80400000,\n 0x88000: 0x1000,\n 0x98000: 0x80401000,\n 0xa8000: 0x400000,\n 0xb8000: 0x1040,\n 0xc8000: 0x80000000,\n 0xd8000: 0x400040,\n 0xe8000: 0x401040,\n 0xf8000: 0x80000040,\n 0x100000: 0x400040,\n 0x110000: 0x401000,\n 0x120000: 0x80000040,\n 0x130000: 0x0,\n 0x140000: 0x1040,\n 0x150000: 0x80400040,\n 0x160000: 0x80401000,\n 0x170000: 0x80001040,\n 0x180000: 0x80401040,\n 0x190000: 0x80000000,\n 0x1a0000: 0x80400000,\n 0x1b0000: 0x401040,\n 0x1c0000: 0x80001000,\n 0x1d0000: 0x400000,\n 0x1e0000: 0x40,\n 0x1f0000: 0x1000,\n 0x108000: 0x80400000,\n 0x118000: 0x80401040,\n 0x128000: 0x0,\n 0x138000: 0x401000,\n 0x148000: 0x400040,\n 0x158000: 0x80000000,\n 0x168000: 0x80001040,\n 0x178000: 0x40,\n 0x188000: 0x80000040,\n 0x198000: 0x1000,\n 0x1a8000: 0x80001000,\n 0x1b8000: 0x80400040,\n 0x1c8000: 0x1040,\n 0x1d8000: 0x80401000,\n 0x1e8000: 0x400000,\n 0x1f8000: 0x401040\n }, {\n 0x0: 0x80,\n 0x1000: 0x1040000,\n 0x2000: 0x40000,\n 0x3000: 0x20000000,\n 0x4000: 0x20040080,\n 0x5000: 0x1000080,\n 0x6000: 0x21000080,\n 0x7000: 0x40080,\n 0x8000: 0x1000000,\n 0x9000: 0x20040000,\n 0xa000: 0x20000080,\n 0xb000: 0x21040080,\n 0xc000: 0x21040000,\n 0xd000: 0x0,\n 0xe000: 0x1040080,\n 0xf000: 0x21000000,\n 0x800: 0x1040080,\n 0x1800: 0x21000080,\n 0x2800: 0x80,\n 0x3800: 0x1040000,\n 0x4800: 0x40000,\n 0x5800: 0x20040080,\n 0x6800: 0x21040000,\n 0x7800: 0x20000000,\n 0x8800: 0x20040000,\n 0x9800: 0x0,\n 0xa800: 0x21040080,\n 0xb800: 0x1000080,\n 0xc800: 0x20000080,\n 0xd800: 0x21000000,\n 0xe800: 0x1000000,\n 0xf800: 0x40080,\n 0x10000: 0x40000,\n 0x11000: 0x80,\n 0x12000: 0x20000000,\n 0x13000: 0x21000080,\n 0x14000: 0x1000080,\n 0x15000: 0x21040000,\n 0x16000: 0x20040080,\n 0x17000: 0x1000000,\n 0x18000: 0x21040080,\n 0x19000: 0x21000000,\n 0x1a000: 0x1040000,\n 0x1b000: 0x20040000,\n 0x1c000: 0x40080,\n 0x1d000: 0x20000080,\n 0x1e000: 0x0,\n 0x1f000: 0x1040080,\n 0x10800: 0x21000080,\n 0x11800: 0x1000000,\n 0x12800: 0x1040000,\n 0x13800: 0x20040080,\n 0x14800: 0x20000000,\n 0x15800: 0x1040080,\n 0x16800: 0x80,\n 0x17800: 0x21040000,\n 0x18800: 0x40080,\n 0x19800: 0x21040080,\n 0x1a800: 0x0,\n 0x1b800: 0x21000000,\n 0x1c800: 0x1000080,\n 0x1d800: 0x40000,\n 0x1e800: 0x20040000,\n 0x1f800: 0x20000080\n }, {\n 0x0: 0x10000008,\n 0x100: 0x2000,\n 0x200: 0x10200000,\n 0x300: 0x10202008,\n 0x400: 0x10002000,\n 0x500: 0x200000,\n 0x600: 0x200008,\n 0x700: 0x10000000,\n 0x800: 0x0,\n 0x900: 0x10002008,\n 0xa00: 0x202000,\n 0xb00: 0x8,\n 0xc00: 0x10200008,\n 0xd00: 0x202008,\n 0xe00: 0x2008,\n 0xf00: 0x10202000,\n 0x80: 0x10200000,\n 0x180: 0x10202008,\n 0x280: 0x8,\n 0x380: 0x200000,\n 0x480: 0x202008,\n 0x580: 0x10000008,\n 0x680: 0x10002000,\n 0x780: 0x2008,\n 0x880: 0x200008,\n 0x980: 0x2000,\n 0xa80: 0x10002008,\n 0xb80: 0x10200008,\n 0xc80: 0x0,\n 0xd80: 0x10202000,\n 0xe80: 0x202000,\n 0xf80: 0x10000000,\n 0x1000: 0x10002000,\n 0x1100: 0x10200008,\n 0x1200: 0x10202008,\n 0x1300: 0x2008,\n 0x1400: 0x200000,\n 0x1500: 0x10000000,\n 0x1600: 0x10000008,\n 0x1700: 0x202000,\n 0x1800: 0x202008,\n 0x1900: 0x0,\n 0x1a00: 0x8,\n 0x1b00: 0x10200000,\n 0x1c00: 0x2000,\n 0x1d00: 0x10002008,\n 0x1e00: 0x10202000,\n 0x1f00: 0x200008,\n 0x1080: 0x8,\n 0x1180: 0x202000,\n 0x1280: 0x200000,\n 0x1380: 0x10000008,\n 0x1480: 0x10002000,\n 0x1580: 0x2008,\n 0x1680: 0x10202008,\n 0x1780: 0x10200000,\n 0x1880: 0x10202000,\n 0x1980: 0x10200008,\n 0x1a80: 0x2000,\n 0x1b80: 0x202008,\n 0x1c80: 0x200008,\n 0x1d80: 0x0,\n 0x1e80: 0x10000000,\n 0x1f80: 0x10002008\n }, {\n 0x0: 0x100000,\n 0x10: 0x2000401,\n 0x20: 0x400,\n 0x30: 0x100401,\n 0x40: 0x2100401,\n 0x50: 0x0,\n 0x60: 0x1,\n 0x70: 0x2100001,\n 0x80: 0x2000400,\n 0x90: 0x100001,\n 0xa0: 0x2000001,\n 0xb0: 0x2100400,\n 0xc0: 0x2100000,\n 0xd0: 0x401,\n 0xe0: 0x100400,\n 0xf0: 0x2000000,\n 0x8: 0x2100001,\n 0x18: 0x0,\n 0x28: 0x2000401,\n 0x38: 0x2100400,\n 0x48: 0x100000,\n 0x58: 0x2000001,\n 0x68: 0x2000000,\n 0x78: 0x401,\n 0x88: 0x100401,\n 0x98: 0x2000400,\n 0xa8: 0x2100000,\n 0xb8: 0x100001,\n 0xc8: 0x400,\n 0xd8: 0x2100401,\n 0xe8: 0x1,\n 0xf8: 0x100400,\n 0x100: 0x2000000,\n 0x110: 0x100000,\n 0x120: 0x2000401,\n 0x130: 0x2100001,\n 0x140: 0x100001,\n 0x150: 0x2000400,\n 0x160: 0x2100400,\n 0x170: 0x100401,\n 0x180: 0x401,\n 0x190: 0x2100401,\n 0x1a0: 0x100400,\n 0x1b0: 0x1,\n 0x1c0: 0x0,\n 0x1d0: 0x2100000,\n 0x1e0: 0x2000001,\n 0x1f0: 0x400,\n 0x108: 0x100400,\n 0x118: 0x2000401,\n 0x128: 0x2100001,\n 0x138: 0x1,\n 0x148: 0x2000000,\n 0x158: 0x100000,\n 0x168: 0x401,\n 0x178: 0x2100400,\n 0x188: 0x2000001,\n 0x198: 0x2100000,\n 0x1a8: 0x0,\n 0x1b8: 0x2100401,\n 0x1c8: 0x100401,\n 0x1d8: 0x400,\n 0x1e8: 0x2000400,\n 0x1f8: 0x100001\n }, {\n 0x0: 0x8000820,\n 0x1: 0x20000,\n 0x2: 0x8000000,\n 0x3: 0x20,\n 0x4: 0x20020,\n 0x5: 0x8020820,\n 0x6: 0x8020800,\n 0x7: 0x800,\n 0x8: 0x8020000,\n 0x9: 0x8000800,\n 0xa: 0x20800,\n 0xb: 0x8020020,\n 0xc: 0x820,\n 0xd: 0x0,\n 0xe: 0x8000020,\n 0xf: 0x20820,\n 0x80000000: 0x800,\n 0x80000001: 0x8020820,\n 0x80000002: 0x8000820,\n 0x80000003: 0x8000000,\n 0x80000004: 0x8020000,\n 0x80000005: 0x20800,\n 0x80000006: 0x20820,\n 0x80000007: 0x20,\n 0x80000008: 0x8000020,\n 0x80000009: 0x820,\n 0x8000000a: 0x20020,\n 0x8000000b: 0x8020800,\n 0x8000000c: 0x0,\n 0x8000000d: 0x8020020,\n 0x8000000e: 0x8000800,\n 0x8000000f: 0x20000,\n 0x10: 0x20820,\n 0x11: 0x8020800,\n 0x12: 0x20,\n 0x13: 0x800,\n 0x14: 0x8000800,\n 0x15: 0x8000020,\n 0x16: 0x8020020,\n 0x17: 0x20000,\n 0x18: 0x0,\n 0x19: 0x20020,\n 0x1a: 0x8020000,\n 0x1b: 0x8000820,\n 0x1c: 0x8020820,\n 0x1d: 0x20800,\n 0x1e: 0x820,\n 0x1f: 0x8000000,\n 0x80000010: 0x20000,\n 0x80000011: 0x800,\n 0x80000012: 0x8020020,\n 0x80000013: 0x20820,\n 0x80000014: 0x20,\n 0x80000015: 0x8020000,\n 0x80000016: 0x8000000,\n 0x80000017: 0x8000820,\n 0x80000018: 0x8020820,\n 0x80000019: 0x8000020,\n 0x8000001a: 0x8000800,\n 0x8000001b: 0x0,\n 0x8000001c: 0x20800,\n 0x8000001d: 0x820,\n 0x8000001e: 0x20020,\n 0x8000001f: 0x8020800\n }];\n\n // Masks that select the SBOX input\n var SBOX_MASK = [0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f];\n\n /**\n * DES block cipher algorithm.\n */\n var DES = C_algo.DES = BlockCipher.extend({\n _doReset: function () {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n\n // Select 56 bits according to PC1\n var keyBits = [];\n for (var i = 0; i < 56; i++) {\n var keyBitPos = PC1[i] - 1;\n keyBits[i] = keyWords[keyBitPos >>> 5] >>> 31 - keyBitPos % 32 & 1;\n }\n\n // Assemble 16 subkeys\n var subKeys = this._subKeys = [];\n for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n // Create subkey\n var subKey = subKeys[nSubKey] = [];\n\n // Shortcut\n var bitShift = BIT_SHIFTS[nSubKey];\n\n // Select 48 bits according to PC2\n for (var i = 0; i < 24; i++) {\n // Select from the left 28 key bits\n subKey[i / 6 | 0] |= keyBits[(PC2[i] - 1 + bitShift) % 28] << 31 - i % 6;\n\n // Select from the right 28 key bits\n subKey[4 + (i / 6 | 0)] |= keyBits[28 + (PC2[i + 24] - 1 + bitShift) % 28] << 31 - i % 6;\n }\n\n // Since each subkey is applied to an expanded 32-bit input,\n // the subkey can be broken into 8 values scaled to 32-bits,\n // which allows the key to be used without expansion\n subKey[0] = subKey[0] << 1 | subKey[0] >>> 31;\n for (var i = 1; i < 7; i++) {\n subKey[i] = subKey[i] >>> (i - 1) * 4 + 3;\n }\n subKey[7] = subKey[7] << 5 | subKey[7] >>> 27;\n }\n\n // Compute inverse subkeys\n var invSubKeys = this._invSubKeys = [];\n for (var i = 0; i < 16; i++) {\n invSubKeys[i] = subKeys[15 - i];\n }\n },\n encryptBlock: function (M, offset) {\n this._doCryptBlock(M, offset, this._subKeys);\n },\n decryptBlock: function (M, offset) {\n this._doCryptBlock(M, offset, this._invSubKeys);\n },\n _doCryptBlock: function (M, offset, subKeys) {\n // Get input\n this._lBlock = M[offset];\n this._rBlock = M[offset + 1];\n\n // Initial permutation\n exchangeLR.call(this, 4, 0x0f0f0f0f);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeLR.call(this, 1, 0x55555555);\n\n // Rounds\n for (var round = 0; round < 16; round++) {\n // Shortcuts\n var subKey = subKeys[round];\n var lBlock = this._lBlock;\n var rBlock = this._rBlock;\n\n // Feistel function\n var f = 0;\n for (var i = 0; i < 8; i++) {\n f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n }\n this._lBlock = rBlock;\n this._rBlock = lBlock ^ f;\n }\n\n // Undo swap from last round\n var t = this._lBlock;\n this._lBlock = this._rBlock;\n this._rBlock = t;\n\n // Final permutation\n exchangeLR.call(this, 1, 0x55555555);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n // Set output\n M[offset] = this._lBlock;\n M[offset + 1] = this._rBlock;\n },\n keySize: 64 / 32,\n ivSize: 64 / 32,\n blockSize: 64 / 32\n });\n\n // Swap bits across the left and right words\n function exchangeLR(offset, mask) {\n var t = (this._lBlock >>> offset ^ this._rBlock) & mask;\n this._rBlock ^= t;\n this._lBlock ^= t << offset;\n }\n function exchangeRL(offset, mask) {\n var t = (this._rBlock >>> offset ^ this._lBlock) & mask;\n this._lBlock ^= t;\n this._rBlock ^= t << offset;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n */\n C.DES = BlockCipher._createHelper(DES);\n\n /**\n * Triple-DES block cipher algorithm.\n */\n var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n _doReset: function () {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n // Make sure the key length is valid (64, 128 or >= 192 bit)\n if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n }\n\n // Extend the key according to the keying options defined in 3DES standard\n var key1 = keyWords.slice(0, 2);\n var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n // Create DES instances\n this._des1 = DES.createEncryptor(WordArray.create(key1));\n this._des2 = DES.createEncryptor(WordArray.create(key2));\n this._des3 = DES.createEncryptor(WordArray.create(key3));\n },\n encryptBlock: function (M, offset) {\n this._des1.encryptBlock(M, offset);\n this._des2.decryptBlock(M, offset);\n this._des3.encryptBlock(M, offset);\n },\n decryptBlock: function (M, offset) {\n this._des3.decryptBlock(M, offset);\n this._des2.encryptBlock(M, offset);\n this._des1.decryptBlock(M, offset);\n },\n keySize: 192 / 32,\n ivSize: 64 / 32,\n blockSize: 64 / 32\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n */\n C.TripleDES = BlockCipher._createHelper(TripleDES);\n })();\n return CryptoJS.TripleDES;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n\n /**\n * RC4 stream cipher algorithm.\n */\n var RC4 = C_algo.RC4 = StreamCipher.extend({\n _doReset: function () {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n var keySigBytes = key.sigBytes;\n\n // Init sbox\n var S = this._S = [];\n for (var i = 0; i < 256; i++) {\n S[i] = i;\n }\n\n // Key setup\n for (var i = 0, j = 0; i < 256; i++) {\n var keyByteIndex = i % keySigBytes;\n var keyByte = keyWords[keyByteIndex >>> 2] >>> 24 - keyByteIndex % 4 * 8 & 0xff;\n j = (j + S[i] + keyByte) % 256;\n\n // Swap\n var t = S[i];\n S[i] = S[j];\n S[j] = t;\n }\n\n // Counters\n this._i = this._j = 0;\n },\n _doProcessBlock: function (M, offset) {\n M[offset] ^= generateKeystreamWord.call(this);\n },\n keySize: 256 / 32,\n ivSize: 0\n });\n function generateKeystreamWord() {\n // Shortcuts\n var S = this._S;\n var i = this._i;\n var j = this._j;\n\n // Generate keystream word\n var keystreamWord = 0;\n for (var n = 0; n < 4; n++) {\n i = (i + 1) % 256;\n j = (j + S[i]) % 256;\n\n // Swap\n var t = S[i];\n S[i] = S[j];\n S[j] = t;\n keystreamWord |= S[(S[i] + S[j]) % 256] << 24 - n * 8;\n }\n\n // Update counters\n this._i = i;\n this._j = j;\n return keystreamWord;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n */\n C.RC4 = StreamCipher._createHelper(RC4);\n\n /**\n * Modified RC4 stream cipher algorithm.\n */\n var RC4Drop = C_algo.RC4Drop = RC4.extend({\n /**\n * Configuration options.\n *\n * @property {number} drop The number of keystream words to drop. Default 192\n */\n cfg: RC4.cfg.extend({\n drop: 192\n }),\n _doReset: function () {\n RC4._doReset.call(this);\n\n // Drop\n for (var i = this.cfg.drop; i > 0; i--) {\n generateKeystreamWord.call(this);\n }\n }\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n */\n C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n })();\n return CryptoJS.RC4;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n\n // Reusable objects\n var S = [];\n var C_ = [];\n var G = [];\n\n /**\n * Rabbit stream cipher algorithm\n */\n var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n _doReset: function () {\n // Shortcuts\n var K = this._key.words;\n var iv = this.cfg.iv;\n\n // Swap endian\n for (var i = 0; i < 4; i++) {\n K[i] = (K[i] << 8 | K[i] >>> 24) & 0x00ff00ff | (K[i] << 24 | K[i] >>> 8) & 0xff00ff00;\n }\n\n // Generate initial state values\n var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n // Generate initial counter values\n var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n // Carry bit\n this._b = 0;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n\n // Modify the counters\n for (var i = 0; i < 8; i++) {\n C[i] ^= X[i + 4 & 7];\n }\n\n // IV setup\n if (iv) {\n // Shortcuts\n var IV = iv.words;\n var IV_0 = IV[0];\n var IV_1 = IV[1];\n\n // Generate four subvectors\n var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n var i1 = i0 >>> 16 | i2 & 0xffff0000;\n var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n // Modify counter values\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n }\n },\n _doProcessBlock: function (M, offset) {\n // Shortcut\n var X = this._X;\n\n // Iterate the system\n nextState.call(this);\n\n // Generate four keystream words\n S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n for (var i = 0; i < 4; i++) {\n // Swap endian\n S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n // Encrypt\n M[offset + i] ^= S[i];\n }\n },\n blockSize: 128 / 32,\n ivSize: 64 / 32\n });\n function nextState() {\n // Shortcuts\n var X = this._X;\n var C = this._C;\n\n // Save old counter values\n for (var i = 0; i < 8; i++) {\n C_[i] = C[i];\n }\n\n // Calculate new counter values\n C[0] = C[0] + 0x4d34d34d + this._b | 0;\n C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n // Calculate the g-values\n for (var i = 0; i < 8; i++) {\n var gx = X[i] + C[i];\n\n // Construct high and low argument for squaring\n var ga = gx & 0xffff;\n var gb = gx >>> 16;\n\n // Calculate high and low result of squaring\n var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n // High XOR low\n G[i] = gh ^ gl;\n }\n\n // Calculate new state values\n X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n */\n C.Rabbit = StreamCipher._createHelper(Rabbit);\n })();\n return CryptoJS.Rabbit;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n\n // Reusable objects\n var S = [];\n var C_ = [];\n var G = [];\n\n /**\n * Rabbit stream cipher algorithm.\n *\n * This is a legacy version that neglected to convert the key to little-endian.\n * This error doesn't affect the cipher's security,\n * but it does affect its compatibility with other implementations.\n */\n var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n _doReset: function () {\n // Shortcuts\n var K = this._key.words;\n var iv = this.cfg.iv;\n\n // Generate initial state values\n var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n // Generate initial counter values\n var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n // Carry bit\n this._b = 0;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n\n // Modify the counters\n for (var i = 0; i < 8; i++) {\n C[i] ^= X[i + 4 & 7];\n }\n\n // IV setup\n if (iv) {\n // Shortcuts\n var IV = iv.words;\n var IV_0 = IV[0];\n var IV_1 = IV[1];\n\n // Generate four subvectors\n var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n var i1 = i0 >>> 16 | i2 & 0xffff0000;\n var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n // Modify counter values\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3;\n\n // Iterate the system four times\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n }\n },\n _doProcessBlock: function (M, offset) {\n // Shortcut\n var X = this._X;\n\n // Iterate the system\n nextState.call(this);\n\n // Generate four keystream words\n S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n for (var i = 0; i < 4; i++) {\n // Swap endian\n S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n // Encrypt\n M[offset + i] ^= S[i];\n }\n },\n blockSize: 128 / 32,\n ivSize: 64 / 32\n });\n function nextState() {\n // Shortcuts\n var X = this._X;\n var C = this._C;\n\n // Save old counter values\n for (var i = 0; i < 8; i++) {\n C_[i] = C[i];\n }\n\n // Calculate new counter values\n C[0] = C[0] + 0x4d34d34d + this._b | 0;\n C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n // Calculate the g-values\n for (var i = 0; i < 8; i++) {\n var gx = X[i] + C[i];\n\n // Construct high and low argument for squaring\n var ga = gx & 0xffff;\n var gb = gx >>> 16;\n\n // Calculate high and low result of squaring\n var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n // High XOR low\n G[i] = gh ^ gl;\n }\n\n // Calculate new state values\n X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n }\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n */\n C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n })();\n return CryptoJS.RabbitLegacy;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo;\n const N = 16;\n\n //Origin pbox and sbox, derived from PI\n const ORIG_P = [0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, 0x9216D5D9, 0x8979FB1B];\n const ORIG_S = [[0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A], [0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7], [0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0], [0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6]];\n var BLOWFISH_CTX = {\n pbox: [],\n sbox: []\n };\n function F(ctx, x) {\n let a = x >> 24 & 0xFF;\n let b = x >> 16 & 0xFF;\n let c = x >> 8 & 0xFF;\n let d = x & 0xFF;\n let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n y = y ^ ctx.sbox[2][c];\n y = y + ctx.sbox[3][d];\n return y;\n }\n function BlowFish_Encrypt(ctx, left, right) {\n let Xl = left;\n let Xr = right;\n let temp;\n for (let i = 0; i < N; ++i) {\n Xl = Xl ^ ctx.pbox[i];\n Xr = F(ctx, Xl) ^ Xr;\n temp = Xl;\n Xl = Xr;\n Xr = temp;\n }\n temp = Xl;\n Xl = Xr;\n Xr = temp;\n Xr = Xr ^ ctx.pbox[N];\n Xl = Xl ^ ctx.pbox[N + 1];\n return {\n left: Xl,\n right: Xr\n };\n }\n function BlowFish_Decrypt(ctx, left, right) {\n let Xl = left;\n let Xr = right;\n let temp;\n for (let i = N + 1; i > 1; --i) {\n Xl = Xl ^ ctx.pbox[i];\n Xr = F(ctx, Xl) ^ Xr;\n temp = Xl;\n Xl = Xr;\n Xr = temp;\n }\n temp = Xl;\n Xl = Xr;\n Xr = temp;\n Xr = Xr ^ ctx.pbox[1];\n Xl = Xl ^ ctx.pbox[0];\n return {\n left: Xl,\n right: Xr\n };\n }\n\n /**\n * Initialization ctx's pbox and sbox.\n *\n * @param {Object} ctx The object has pbox and sbox.\n * @param {Array} key An array of 32-bit words.\n * @param {int} keysize The length of the key.\n *\n * @example\n *\n * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n */\n function BlowFishInit(ctx, key, keysize) {\n for (let Row = 0; Row < 4; Row++) {\n ctx.sbox[Row] = [];\n for (let Col = 0; Col < 256; Col++) {\n ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n }\n }\n let keyIndex = 0;\n for (let index = 0; index < N + 2; index++) {\n ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n keyIndex++;\n if (keyIndex >= keysize) {\n keyIndex = 0;\n }\n }\n let Data1 = 0;\n let Data2 = 0;\n let res = 0;\n for (let i = 0; i < N + 2; i += 2) {\n res = BlowFish_Encrypt(ctx, Data1, Data2);\n Data1 = res.left;\n Data2 = res.right;\n ctx.pbox[i] = Data1;\n ctx.pbox[i + 1] = Data2;\n }\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 256; j += 2) {\n res = BlowFish_Encrypt(ctx, Data1, Data2);\n Data1 = res.left;\n Data2 = res.right;\n ctx.sbox[i][j] = Data1;\n ctx.sbox[i][j + 1] = Data2;\n }\n }\n return true;\n }\n\n /**\n * Blowfish block cipher algorithm.\n */\n var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n _doReset: function () {\n // Skip reset of nRounds has been set before and key did not change\n if (this._keyPriorReset === this._key) {\n return;\n }\n\n // Shortcuts\n var key = this._keyPriorReset = this._key;\n var keyWords = key.words;\n var keySize = key.sigBytes / 4;\n\n //Initialization pbox and sbox\n BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n },\n encryptBlock: function (M, offset) {\n var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n M[offset] = res.left;\n M[offset + 1] = res.right;\n },\n decryptBlock: function (M, offset) {\n var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n M[offset] = res.left;\n M[offset + 1] = res.right;\n },\n blockSize: 64 / 32,\n keySize: 128 / 32,\n ivSize: 64 / 32\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n */\n C.Blowfish = BlockCipher._createHelper(Blowfish);\n })();\n return CryptoJS.Blowfish;\n});",";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n } else {\n // Global (browser)\n root.CryptoJS = factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n return CryptoJS;\n});","export enum DialogType {\n None = 'None',\n Add = 'Add',\n Edit = 'Edit',\n New = 'New',\n NewJob = 'New Job',\n NewQuote = 'New Quote',\n NewPrepaymentInvoice = 'New Prepayment Invoice',\n NewPrepaymentBill = 'New Prepayment Bill',\n NewCreditNote = 'New Credit Note',\n Filter = 'Filter',\n Activity = 'Activity',\n Processing = 'Processing',\n Download = 'Download',\n Tab = 'Tab',\n Import = 'Import',\n Allocation = 'Allocation',\n WorkDialog = 'WorkDialog',\n CodeDialog = 'CodeDialog',\n FormDialog = 'FormDialog',\n DayAllocation = 'Day Allocation',\n IntradayAllocation = 'Intraday Allocation',\n SendMail = 'SendMail',\n Message = 'Message',\n Picker = 'Picker',\n Reparent = 'Reparent',\n Details = 'Details',\n View = 'View',\n Email = 'Email',\n Media = 'Media',\n Convert = \"Convert\",\n Copy = \"Copy\",\n Payment = 'Payment',\n NewTemplate = 'New Template',\n Template = 'Template',\n ManageTemplate = 'Manage Template',\n Move = \"Move\",\n MoveWork = \"Move Work\",\n CopyWork = \"Copy Work\",\n Task = 'Task',\n Checklist = 'Checklist',\n}\n","export enum ApplicationEnvironment {\n\n // Obsolete\n Nightly = 'night',\n Regression = 'reg',\n Staging = 'stag',\n\n Development = 'dev',\n Edge = 'edge',\n Vnext = 'vnext',\n ReleaseCandidate = 'rc',\n Production = 'prod',\n\n}\n\nexport enum AppName {\n FieldApp = 'FieldApp',\n ManagerApp = 'ManagerApp',\n}\n","import { ApplicationEnvironment } from '../../entities/catalog/application.environment';\nimport { EnvironmentConfiguration } from './environment.configuration';\n\nexport const environmentProd = {\n locale: 'en-AU',\n production: true,\n api: '/api',\n domain: 'workbuddy.app',\n auth: {\n local: {\n callbackUrl: 'http://{0}:4000/callback',\n }\n },\n jms: {\n loginHref: 'https://id.workbuddy.app',\n logoutHref: 'https://id.workbuddy.app/logout',\n captcha: '6LfQ01oUAAAAAFfG2a8ZR509QugrxclKGsINjcKN',\n captchaSecret: '6LfQ01oUAAAAAFfjjGsSDeMfCc9ZPTAMswBcBh8y',\n },\n sentry: {\n dsn: '',\n name: '',\n release: '',\n environment: ''\n },\n environment: ApplicationEnvironment.Production\n} as EnvironmentConfiguration;\n","import { ApplicationEnvironment } from '../../entities/catalog/application.environment';\nimport { EnvironmentConfiguration } from './environment.configuration';\n\nexport const environmentReleaseCandidate = {\n locale: 'en-AU',\n production: true,\n api: '/api',\n domain: 'workbuddy.live',\n auth: {\n local: {\n callbackUrl: 'http://{0}:4000/callback',\n }\n },\n jms: {\n loginHref: 'https://id.workbuddy.live',\n logoutHref: 'https://id.workbuddy.live/logout',\n captcha: '6LfQ01oUAAAAAFfG2a8ZR509QugrxclKGsINjcKN',\n captchaSecret: '6LfQ01oUAAAAAFfjjGsSDeMfCc9ZPTAMswBcBh8y',\n },\n sentry: {\n dsn: '',\n name: '',\n release: '',\n environment: ''\n },\n environment: ApplicationEnvironment.ReleaseCandidate\n} as EnvironmentConfiguration;","import { ApplicationEnvironment } from '../../entities/catalog/application.environment';\nimport { EnvironmentConfiguration } from './environment.configuration';\n\nexport const environmentEdge = {\n locale: 'en-AU',\n production: false,\n api: '/api',\n domain: 'workbuddy.run',\n auth: {\n local: {\n callbackUrl: 'http://{0}:4000/callback',\n }\n },\n jms: {\n loginHref: 'https://id.workbuddy.run',\n logoutHref: 'https://id.workbuddy.run/logout',\n captcha: '6LfQ01oUAAAAAFfG2a8ZR509QugrxclKGsINjcKN',\n captchaSecret: '6LfQ01oUAAAAAFfjjGsSDeMfCc9ZPTAMswBcBh8y',\n },\n sentry: {\n dsn: '',\n name: '',\n release: '',\n environment: ''\n },\n environment: ApplicationEnvironment.Edge\n} as EnvironmentConfiguration;\n","import { ApplicationEnvironment } from '../../entities/catalog/application.environment';\nimport { EnvironmentConfiguration } from './environment.configuration';\n\nexport const environmentVnext = {\n locale: 'en-AU',\n production: false,\n api: '/api',\n domain: 'workbuddy.io',\n auth: {\n local: {\n callbackUrl: 'http://{0}:4000/callback',\n }\n },\n jms: {\n loginHref: 'https://id.workbuddy.io',\n logoutHref: 'https://id.workbuddy.io/logout',\n captcha: '6LfQ01oUAAAAAFfG2a8ZR509QugrxclKGsINjcKN',\n captchaSecret: '6LfQ01oUAAAAAFfjjGsSDeMfCc9ZPTAMswBcBh8y',\n },\n sentry: {\n dsn: '',\n name: '',\n release: '',\n environment: ''\n },\n environment: ApplicationEnvironment.Nightly,\n} as EnvironmentConfiguration;\n","import { ApplicationEnvironment } from '../../entities/catalog/application.environment';\nimport { EnvironmentConfiguration } from './environment.configuration';\n\nexport const environmentDev = {\n locale: 'en-AU',\n production: false,\n api: '/api',\n domain: 'workbuddy.dev',\n auth: {\n local: {\n callbackUrl: 'http://{0}/callback',\n }\n },\n jms: {\n loginHref: 'https://id.workbuddy.dev',\n logoutHref: 'https://id.workbuddy.dev/logout',\n captcha: '6LfQ01oUAAAAAFfG2a8ZR509QugrxclKGsINjcKN',\n captchaSecret: '6LfQ01oUAAAAAFfjjGsSDeMfCc9ZPTAMswBcBh8y',\n },\n sentry: {\n dsn: 'https://7df8035db1df47deaa8135fe3b9f5bbf@sentry.io/295277',\n name: '',\n release: '',\n environment: ''\n },\n environment: ApplicationEnvironment.Development,\n appinsights: {\n instrumentationKey: '975abbed-a6ad-432d-bc6e-18ad756484b9'\n }\n} as EnvironmentConfiguration;\n","\nexport enum ApplicationTokens {\n JMS = 'JMS',\n ID = 'ID',\n Console = 'Console',\n Compliance = 'Compliance',\n JmsWorker = 'ActivityWorker',\n PdfWorker = 'PDF',\n Portal = 'Portal',\n GlobalWorker = 'GlobalWorker',\n\n Functions = 'Functions',\n FunctionZip = 'FunctionZip',\n FunctionCopyBlob = 'FunctionCopyBlob',\n\n MicroservicePricing = 'Pricing',\n MicroserviceConnect = 'Connect',\n MicroserviceSideEffects = 'SideEffects',\n\n CustomisationAssett = 'CustomisationAssett',\n}\n","import { EnvironmentConfiguration, environmentDev, environmentVnext, environmentProd, environmentEdge, environmentReleaseCandidate } from '../configuration';\nimport { ApplicationEnvironment } from '../entities/catalog/application.environment';\nimport { ApplicationTokens } from '../entities/catalog/application.tokens';\n\nexport enum DomainType {\n Id = 'id',\n Console = 'console',\n Register = 'register',\n Tenant = 'tenant',\n Compliance = 'compliance',\n ClientPortal = 'clients',\n ContractorPortal = 'contractors',\n TrackingPortal = 'tracking',\n PdfViewer = 'pdf-viewer',\n Mobile = 'mobile'\n}\n\n\nexport class DomainUtility {\n\n public static getEnvironmentConfiguration(environment: ApplicationEnvironment = null): EnvironmentConfiguration {\n\n if (!environment) {\n environment = ApplicationEnvironment.Development;\n }\n\n switch (environment) {\n\n case ApplicationEnvironment.Production:\n return environmentProd;\n\n case ApplicationEnvironment.Staging:\n case ApplicationEnvironment.ReleaseCandidate:\n return environmentReleaseCandidate;\n\n case ApplicationEnvironment.Nightly:\n case ApplicationEnvironment.Vnext:\n return environmentVnext;\n\n case ApplicationEnvironment.Regression:\n case ApplicationEnvironment.Edge:\n return environmentEdge;\n\n default:\n return environmentDev;\n }\n }\n\n public static getFriendlyEnvironment(environment: ApplicationEnvironment = null): string {\n\n switch (environment) {\n\n case ApplicationEnvironment.Production:\n return 'Production';\n\n case ApplicationEnvironment.Staging:\n case ApplicationEnvironment.ReleaseCandidate:\n return 'Release Candidate';\n\n case ApplicationEnvironment.Nightly:\n case ApplicationEnvironment.Vnext:\n return 'Nightly';\n\n case ApplicationEnvironment.Regression:\n case ApplicationEnvironment.Edge:\n return 'Edge';\n\n default:\n return 'Development';\n }\n }\n\n public static isProduction(environment: ApplicationEnvironment = null): boolean {\n const env = DomainUtility.getEnvironmentConfiguration(environment);\n return env.production;\n }\n\n public static getDomain(environment: ApplicationEnvironment): string {\n\n const env = DomainUtility.getEnvironmentConfiguration(environment);\n return env.domain;\n }\n\n public static getDatabaseName(application: ApplicationTokens, environment: ApplicationEnvironment, tenant: string = null): string {\n\n switch (application) {\n case ApplicationTokens.ID:\n return this.replaceAll(`${environment}-id`, '.', '-');\n\n case ApplicationTokens.Console:\n return this.replaceAll(`${environment}-console`, '.', '-');\n\n case ApplicationTokens.JMS:\n case ApplicationTokens.MicroservicePricing:\n case ApplicationTokens.MicroserviceConnect:\n case ApplicationTokens.MicroserviceSideEffects:\n case ApplicationTokens.CustomisationAssett:\n return this.replaceAll(`${environment}-t-${tenant}`, '.', '-');\n\n case ApplicationTokens.Compliance:\n return this.replaceAll(`${environment}-compliance`, '.', '-');\n\n case ApplicationTokens.Portal:\n return this.replaceAll(`${environment}-portal`, '.', '-');\n }\n }\n\n public static getConnectionString(databaseServer: string, databaseName: string) {\n return databaseServer && databaseServer.toLocaleLowerCase().startsWith('mongodb+srv://')\n ? databaseServer\n : `${databaseServer}/${databaseName}`; // ?retryWrites=true\n }\n\n public static getDomainType(domain: string): DomainType {\n\n let domainType = null;\n\n if (domain.startsWith('id.'))\n domainType = DomainType.Id;\n else if (domain.startsWith('register.'))\n domainType = DomainType.Register;\n else if (domain.startsWith('console.'))\n domainType = DomainType.Console;\n else if (domain.startsWith('clients.'))\n domainType = DomainType.ClientPortal;\n else if (domain.startsWith('contractors.'))\n domainType = DomainType.ContractorPortal;\n else if (domain.startsWith('tracking.'))\n domainType = DomainType.TrackingPortal;\n else if (domain.startsWith('compliance.'))\n domainType = DomainType.Compliance;\n else if (domain.startsWith('mobile.'))\n domainType = DomainType.Mobile;\n else if (domain.startsWith('pdf-viewer.'))\n domainType = DomainType.PdfViewer;\n else\n domainType = DomainType.Tenant;\n\n return domainType;\n }\n\n public static getApplicationToken(app: string): ApplicationTokens {\n\n switch (app) {\n case 'id':\n return ApplicationTokens.ID;\n\n case 'jms':\n return ApplicationTokens.JMS;\n\n case 'jms-ms-pricing':\n return ApplicationTokens.MicroservicePricing;\n\n case 'jms-ms-connect':\n return ApplicationTokens.MicroserviceConnect;\n\n case 'jms-ms-side-effects':\n return ApplicationTokens.MicroserviceSideEffects;\n\n case 'compliance':\n return ApplicationTokens.Compliance;\n\n case 'portal':\n return ApplicationTokens.Portal;\n\n case 'console':\n return ApplicationTokens.Console;\n\n case 'pdf':\n return ApplicationTokens.PdfWorker;\n\n case 'global-worker':\n return ApplicationTokens.GlobalWorker;\n\n case 'functions':\n return ApplicationTokens.Functions;\n\n case 'functionsZip':\n return ApplicationTokens.FunctionZip;\n\n case 'functionsCopyBlob':\n return ApplicationTokens.FunctionCopyBlob;\n\n case 'jms-customisation-assett':\n return ApplicationTokens.CustomisationAssett;\n\n\n }\n }\n\n private static replaceAll(data: string, find: string, replace: string) {\n return data.split(find).join(replace);\n }\n}\n\nexport function isPortal(domainType: DomainType): boolean {\n return [DomainType.ClientPortal, DomainType.ContractorPortal].includes(domainType);\n}\n\nexport function isClientPortal(domainType: DomainType): boolean {\n return [DomainType.ClientPortal].includes(domainType);\n}\n\nexport function isContractorPortal(domainType: DomainType): boolean {\n return [DomainType.ContractorPortal].includes(domainType);\n}\n\n// export function isTenant(domainType: DomainType): boolean {\n// return [DomainType.Tenant].includes(domainType);\n// }\n\nexport function isConsole(domainType: DomainType): boolean {\n return [DomainType.Console].includes(domainType);\n}","import { ApplicationEnvironment } from '../catalog';\n\nexport enum DeviceType {\n Phone = 'Phone',\n Tablet = 'Tablet',\n Desktop = 'Desktop',\n Other = 'Other'\n}\n\nexport interface UserDeviceInfo {\n _id?: string;\n hash?: string;\n browser?: string;\n browserVersion?: string;\n os?: string;\n deviceType: DeviceType;\n device?: string;\n userAgent?: string;\n osVersion?: string;\n ipAddress?: string;\n lat?: number;\n lgn?: number;\n location?: string;\n isMobileApp?: boolean;\n isDistrbution?: boolean;\n isLogin?: boolean;\n environment?: ApplicationEnvironment;\n}\n","\nexport enum SystemPriority {\n P1 = 'P1',\n P2 = 'P2',\n P3 = 'P3',\n P4 = 'P4',\n P5 = 'P5'\n}\n\nexport enum SystemPriorityName {\n Urgent = 'Urgent',\n High = 'High',\n Medium = 'Medium',\n Low = 'Low',\n VeryLow = 'Very Low'\n}\n","import { Entity } from '../index';\n\nexport enum AddressType {\n /** @deprecated use Standard */\n Lookup = 'Lookup',\n Standard = 'Standard',\n Coordinates = 'Coordinates',\n What3Words = 'What3Words'\n}\n\nexport interface Address extends Entity {\n // fullAddress?: string,\n street1?: string;\n street2?: string;\n suburb?: string;\n county?: string;\n state?: string;\n postcode?: number;\n postalCode?: string;\n country?: string;\n lat?: number;\n lgn?: number;\n timezone?: string;\n matchKey?: string;\n type?: AddressType;\n //This property is not saved to the address, but instead used by\n //other entities that want a friendly name for the address\n //At this stage, only the address validation will set this property\n //friendlyName?: string;\n}\n\nexport interface ValidatedAddress extends Address {\n validationResult?: any;\n}\n\nexport interface StructuredAddress {\n state: string;\n postcode: string;\n localityName: string;\n streetName: string;\n streetType: string;\n streetSuffix: string;\n streetNumber1: string;\n streetNumberSuffix1: string;\n flatNumber: string;\n lotNumber: string;\n postalType: string;\n addressId: string;\n houseNo1: string;\n houseSuffix1: string;\n houseNo2: string;\n houseSuffix2: string;\n flatType: string;\n flatNo: string;\n levelType: string;\n levelNo: string;\n buildingName1: string;\n buildingName2: string;\n lotNo: string;\n postalNo: string;\n postalPrefix: string;\n postalSuffix: string;\n flag: string;\n flagString: string;\n preAddress1: string;\n preAddress2: string;\n addressLine1: string;\n addressLine2: string;\n addressLine3: string;\n postAddress: string;\n amendedFlag: string;\n latitude: string;\n longitude: string;\n reliability: string;\n MB: string;\n CD: string;\n SLA: string;\n gifFields: GifFields;\n}\n\n\nexport interface StandarizeAddress {\n state: string;\n postCode: string;\n locality: string;\n streetName: string;\n streetType: string;\n houseNo1: string;\n houseSuffix1: string;\n houseNo2: string;\n houseSuffix2: string;\n flatType: string;\n flatNo: string;\n flatNumber: string;\n address1: string;\n address2: string;\n address3: string;\n latitude: string;\n longitude: string;\n}\n\nexport interface GifFields {\n 'LatLong.Latitude': string;\n 'LatLong.Longitude': string;\n 'LatLong.Reliability': string;\n 'LatLong.Latitude.flag': string;\n 'LatLong.Longitude.flag': string;\n 'LatLong.Reliability.flag': string;\n}\n\nexport const AustraliaTimezones = {\n NSW: 'Australia/Sydney', // New South Wales\n VIC: 'Australia/Melbourne', // Victoria\n QLD: 'Australia/Brisbane', // Queensland\n TAS: 'Australia/Hobart', // Tasmania\n SA: 'Australia/Adelaide', // South Australia\n WA: 'Australia/Perth', // Western Australia\n NT: 'Australia/Darwin', // Northern Territory\n ACT: 'Australia/Canberra', // Australian Capital Territory (same as NSW, but there's no separate IANA timezone)\n};","export enum ActivityEntityName {\n Job = 'Job',\n JobCreate = 'Job Create',\n WorkOrder = 'WorkOrder',\n Customer = 'Customer',\n Quote = 'Quote',\n QuoteJob = 'Quote Job',\n QuoteOpportunity = 'Quote Opportunity',\n QuotePro = 'Quote Pro',\n\n PurchaseOrder = 'PO',\n PurchaseOrderLine = 'PO Line',\n PurchaseOrderLines = 'PO Lines',\n PurchaseOrderSupplier = 'PO Supplier',\n PurchaseOrderDeliveryAddress = 'PO Delivery Address',\n\n Invoice = 'Invoice',\n BulkInvoice = 'BulkInvoice',\n BulkInvoiceJob = 'BulkInvoiceJob',\n\n /** This is a variant of invoice used for entity data provider */\n InvoiceSite = 'InvoiceSite',\n\n InvoiceContact = 'InvoiceContact',\n InvoiceBillingCompany = 'InvoiceBillingCompany',\n\n PrepaymentInvoice = 'Prepayment Invoice',\n PrepaymentSupplier = 'Prepayment Supplier',\n\n CreditNote = 'Credit Note',\n CreditNoteSupplier = 'Credit Note Supplier',\n\n Bill = 'Bill',\n None = 'None',\n Compliance = 'Compliance',\n\n AccountingPackage = 'Accounting Package',\n\n Payment = 'Payment',\n\n Contact = 'Contact',\n Employee = 'Employee',\n ContactEmployee = 'Contact Employee',\n ContactInvite = 'Contact Invite',\n\n Account = 'Account',\n Zone = 'Zone',\n Allocation = 'Allocation',\n CreditAllocation = 'Credit Allocation',\n Code = 'Code',\n EmbeddedCode = 'Embedded Code',\n Item = 'Item',\n ItemPending = 'Item Pending',\n Utility = 'Utility',\n\n Asset = 'Asset',\n AssetLink = 'AssetLink',\n\n EquipmentLink = 'EquipmentLink',\n Equipment = 'Equipment',\n EquipmentCreate = 'Equipment Create',\n EquipmentSerialised = 'Serialised Equipment',\n EquipmentSerialisedCreate = 'Serialised Equipment Create',\n StockLocationEquipment = 'Stock Location Equipment',\n StockLocation = 'Stock Location',\n StockMovement = \"Stock Movement\",\n StockLevel = 'Stock Level',\n\n Defect = 'Defect',\n WorkRole = 'Work Role',\n Resource = 'Resource',\n JobTemplate = 'Job Template',\n Lead = 'Lead',\n Opportunity = 'Opportunity',\n OpportunityStage = 'Opportunity Stage',\n OpportunityAccount = 'Opportunity Account',\n //DO NOT REMOVE, NEED TO USE THIS AS IT CORRESPONDS TO THE OLD CONTACT TYPE OF SITE, WHICH IS USED IN THE CRM\n Site = 'Site',\n ///\n SitePro = 'Site Pro',\n ManagedSite = 'Managed Site',\n AccountSite = 'Account Site',\n SiteProValidated = 'Site Pro Validated',\n SiteContactValidated = 'Site Contact Validated',\n\n Company = 'Company',\n CustomFields = 'Custom Fields',\n Variation = 'Variation',\n SaleOrder = \"Sale Order\",\n SaleOrderItems = \"Sale Order Items\",\n\n JobType = 'JobType',\n Supplier = 'Supplier',\n Contractor = 'Contractor',\n PriceList = 'PriceList',\n TaxRate = 'TaxRate',\n Address = 'Address',\n Activity = 'Activity',\n Form = 'Form',\n FormResponse = 'FormResponse',\n FormResponseLink = 'FormResponseLink',\n FormTemplate = 'FormTemplate',\n SecurityRole = 'Security Role',\n TenantSetting = 'Tenant Setting',\n Catalogue = 'Catalogue',\n\n Project = 'Project',\n CodeCategory = 'Code Category',\n UoM = 'UoM',\n AssetType = 'Asset Type',\n Priority = 'Priority',\n\n Task = 'Task',\n Attachment = \"Attachment\",\n\n QuoteTemplate = 'Quote Template',\n DocumentTheme = 'Document Theme',\n UOM = 'UOM',\n JobStatus = 'Job Status',\n WorkOrderStatus = 'Work Order Status',\n BasicContact = 'Basic Contact',\n LoginContact = 'Login Contact',\n JobPolicy = \"Job Policy\",\n QuotePolicy = \"Quote Policy\",\n File = \"File\",\n Tag = \"Tag\",\n JobStages = \"Job Stages\",\n WorkBuddyCompany = \"WorkBuddyCompany\",\n\n RecurringJob = \"Recurring-Job\",\n RecurringService = \"Recurring-Service\",\n RecurringNextService = \"RecurringNextService\",\n RecurringLastService = \"RecurringLastService\",\n RecurringSchedule = \"RecurringSchedule\",\n RecurringRule = \"RecurringRule\",\n RecurringConfirmation = 'RecurringConfirmation',\n\n EntityStatus = 'Entity Status',\n EntitySubStatus = 'Entity Sub Status',\n ContactLink = \"ContactLink\",\n ServiceConfirmation = 'Service Confirmation',\n\n /** This is used to provide entity pickers for operations based on the view */\n LegacyJob = 'LegacyJob',\n ServiceEntity = \"ServiceEntity\",\n\n WorkOrderDispatch = 'WorkOrderDispatch',\n PurchaseOrderBillingCompany = \"PurchaseOrderBillingCompany\",\n PurchaseOrderAccountingPackage = \"PurchaseOrderAccountingPackage\", // Use in document theme\n\n /** Virtual Entity: use for entity data */\n JobAsset = 'Job Asset',\n AssetRecurringJob = 'Asset Recurring Job',\n\n Agreement = 'Agreement',\n\n HomesNSWNotice = 'HomesNSWNotice',\n HomesNSWNoticeLineItem = 'HomesNSWNoticeLineItem',\n\n Tenant = 'Tenant',\n}\n\n","import { Category, CodeType, Entity, SupervisorCheck, UoM, CodeUoM, TaxRate, PriceListCategory, CustomFieldValue, InvoiceStatus, EntitySubStatus } from '../index';\nimport { Source } from '../../enums/enum.source';\nimport { ItemLinkEntity } from '../entity';\nimport { EntityType, PagingOptions, SystemLabels } from '.';\nimport { WorkOrderStatus } from '../job';\nimport { ContactEntity } from '../contact';\n\nexport enum CostSource {\n StandardCost = 'Standard Cost',\n TradePrice = 'Trade',\n // Manual = 'Manual'\n}\n\nexport enum CodeStatus {\n Normal = 'Normal',\n Variation = 'Variation',\n Cancelled = 'Cancelled',\n\n /** @deprecated Use 'Requested' instead */\n Pending = 'Pending',\n\n Requested = 'Requested',\n PendingReview = 'Pending Review',\n Declined = 'Declined',\n\n Deleted = 'Deleted',\n}\n\nexport enum CodeInvoiceStatus {\n Billable = 'Billable',\n NoCharge = 'No Charge',\n NotBillable = 'Not Billable'\n}\n\nexport interface GroupCodeCategory {\n categoryName: string;\n subcategories: Category[];\n}\n\nexport interface CodeCategory {\n _id?: string;\n name: string;\n categoryId: string;\n categoryName: string;\n subCategoryId: string;\n subCategoryName: string;\n}\n\n\nexport const recentCodeCategory = {\n _id: 'recent',\n name: 'System | Recently Added',\n categoryName: '',\n categoryId: 'systemRecent',\n subCategoryName: 'Recently Added',\n subCategoryId: 'recent',\n} as CodeCategory;\n\nexport const zeroPriceCodeCategory = {\n _id: 'zero',\n name: 'System | Items with Zero Price',\n categoryName: '',\n categoryId: 'systemZero',\n subCategoryName: 'Items with Zero Price',\n subCategoryId: 'zero',\n} as CodeCategory;\n\nexport const searchCodeCategory = {\n _id: 'search',\n name: 'System | Search',\n categoryName: '',\n categoryId: 'systemSearch',\n subCategoryName: 'Search',\n subCategoryId: 'search',\n} as CodeCategory;\n\nexport interface CodePriceBook {\n _id: string;\n name: string;\n category?: PriceListCategory;\n price: number;\n codeId?: string;\n\n updatedAt?: Date;\n // updatedBy?: Entity;\n}\n\n\nexport interface JobCodeExport {\n workOrderNumber?: string;\n name: string;\n location: string;\n quantity: number;\n note: string;\n buyPrice: number;\n sellPrice: number;\n status: CodeStatus;\n codeUoM: CodeUoM;\n}\n\nexport interface Code extends Entity {\n type: CodeType;\n tenantName?: string;\n parentType?: CodeType;\n category: CodeCategory;\n description: string;\n longDescription?: string;\n jobNumber?: string;\n childCodes?: ChildCode[];\n uoms?: CodeUoM[];\n location?: string;\n quantity?: number;\n customFields?: any;\n suppliedBySubcontractor?: boolean;\n // priceBooks?: CodePriceBook[];\n\n autoCreateTask?: boolean;\n isClaimCode?: boolean;\n}\nexport interface CatalogueCode extends Code {\n //jobNumber?: string;\n childCodes?: ChildCode[];\n //locked?: boolean;\n labels?: number;\n uoms?: CodeUoM[]; // Additional uom list\n baseUoM?: UoM;\n manufacturer?: string;\n retailPrice?: number;\n tradePrice?: number;\n standardCost?: number;\n economicOrderQty?: number;\n safetyStockQty?: number;\n leadTimeDays?: number;\n longDescription?: string;\n upc?: string;\n\n itemSold?: boolean;\n saleGlCode?: string;\n saleTaxRate?: TaxRate;\n codeInvoicingStatus?: CodeInvoiceStatus;\n\n itemPurchased?: boolean;\n purchaseGlCode?: string;\n purchaseTaxRate?: TaxRate;\n\n canOverrideDesc?: boolean;\n\n trackingCategory1?: string;\n trackingCategory2?: string;\n\n}\n\nexport interface CodeFinance {\n _id: string;\n name: string;\n\n itemSold?: boolean;\n saleGlCode?: string;\n saleTaxRate?: TaxRate;\n\n itemPurchased?: boolean;\n purchaseGlCode?: string;\n purchaseTaxRate?: TaxRate;\n}\n\nexport function ToEmbeddedCode(c: CatalogueCode): EmbeddedCodeLike {\n\n const item = {\n type: c.type,\n parentType: c.parentType,\n category: c.category,\n description: c.description,\n longDescription: c.longDescription,\n // priceBooks: c.priceBooks,\n quantity: c.quantity ?? 1,\n location: c.location ?? '',\n customFields: c.customFields,\n name: c?.name?.trim(),\n _id: c._id,\n suppliedBySubcontractor: c.suppliedBySubcontractor,\n codeUoM: c?.['codeUoM'] ?? { uom: c.baseUoM, conversionRate: 1 },\n\n manufacturer: c.manufacturer,\n\n itemSold: c.itemSold,\n saleGlCode: c.saleGlCode,\n saleTaxRate: c.saleTaxRate,\n\n itemPurchased: c.itemPurchased,\n purchaseGlCode: c.purchaseGlCode,\n purchaseTaxRate: c.purchaseTaxRate,\n\n autoCreateTask: c.autoCreateTask,\n canOverrideDesc: c.canOverrideDesc,\n data: c.data\n } as EmbeddedCode;\n\n if (item.parentType === 'BUNDLE') {\n item.codeInvoicingStatus = c.codeInvoicingStatus ?? CodeInvoiceStatus.Billable;\n }\n else {\n item.codeInvoicingStatus = c?.itemSold\n ? c?.codeInvoicingStatus ?? CodeInvoiceStatus.Billable\n : c?.codeInvoicingStatus ?? CodeInvoiceStatus.Billable\n }\n\n return item;\n}\n\nexport type AdjustmentType = 'Value' | 'Percent';\n\nexport interface EmbeddedCode extends Code {\n source?: Source;\n buyPrice?: number;\n sellPrice?: number;\n customBuyPrice?: boolean;\n customSellPrice?: boolean;\n completed?: boolean;\n answered?: boolean;\n supervisorCheck?: SupervisorCheck;\n status?: CodeStatus;\n integrationId?: string;\n location?: string;\n note?: string;\n codeUoM?: CodeUoM;\n baseQuantity?: number;\n codeInvoicingStatus?: CodeInvoiceStatus;\n suppliedBySubcontractor?: boolean;\n customFields?: any;\n upc?: string;\n uom?: string;\n bill?: ItemLinkEntity;\n invoice?: ItemLinkEntity;\n purchaseOrder?: ItemLinkEntity;\n stage?: ItemLinkEntity;\n\n itemSold?: boolean;\n saleGlCode?: string;\n saleTaxRate?: TaxRate;\n\n itemPurchased?: boolean;\n purchaseGlCode?: string;\n purchaseTaxRate?: TaxRate;\n defectCount?: number;\n timesheetIds?: string[];\n\n manufacturer?: string;\n\n /** Id Code from Setting > Items */\n catalogueCodeId?: string;\n sortOrder?: number;\n\n canOverrideDesc?: boolean;\n adjustmentType?: AdjustmentType;\n adjustment?: number;\n adjustedSell?: number;\n\n totalBuy?: number;\n totalSellEx?: number;\n totalAdjustment?: number;\n totalTax?: number;\n totalSellInc?: number;\n itemTaskCompleted?: boolean;\n\n auditDetails?: CodeAuditDetails;\n claimLinked?: boolean;\n claimImport?: boolean;\n isReadonly?: boolean;\n}\n\nexport interface PendingCode extends Omit {\n itemStatus?: EntitySubStatus;\n}\n\nexport interface ApprovedCode extends EmbeddedCode {\n}\n\nexport type EmbeddedCodeLike = EmbeddedCode & PendingCode & ApprovedCode;\n\nexport interface ChildCode extends Entity {\n description?: string;\n category?: CodeCategory;\n quantity?: number;\n codeUoM?: CodeUoM;\n codeInvoicingStatus?: CodeInvoiceStatus;\n suppliedBySubcontractor?: boolean;\n}\n\nexport interface CodeImportSystemResponse {\n name: string;\n message: string[];\n index: number;\n expanded?: boolean;\n}\n\nexport interface PatchJobCodeRequest {\n jobId?: string;\n workOrderId: string;\n codeId: string;\n defectCount?: number;\n}\n\nexport interface PatchItemsRequest {\n jobId?: string;\n workOrderItemPatchData: PatchWorkOrderItemsRequest[]\n}\n\nexport interface PatchWorkOrderItemsRequest {\n workOrderId: string;\n codes: EmbeddedCodeLike[];\n}\n\nexport interface WorkOrderCodeEntity extends Entity {\n workOrderNumber: string;\n technician: Entity;\n resources: ContactEntity[];\n status: WorkOrderStatus;\n jobSystemLabels: SystemLabels[];\n workOrderName?: string;\n workCategory?: Entity;\n sortOrder?: string;\n}\nexport interface EmbeddedCodeGroup extends EmbeddedCodeLike {\n job: Entity;\n workOrder: WorkOrderCodeEntity;\n location: string;\n entityType?: EntityType;\n selected?: boolean;\n\n canEdit?: boolean;\n canDelete?: boolean;\n canEditFields?: Partial>;\n\n billApproved?: boolean;\n billStatus?: InvoiceStatus;\n\n invoiceApproved?: boolean;\n invoiceStatus?: InvoiceStatus;\n}\n\n\nexport interface EmbeddedCodeMetadataTab {\n job: Entity;\n workOrder: WorkOrderCodeEntity;\n dateFormat: string;\n timezone: string;\n type: EntityType;\n workOrders?: WorkOrderCodeEntity[];\n sellPricebook?: Entity;\n workOrderUpdatedAt?: Date;\n currentUser?: Entity;\n woReadOnlyAfterFinalised: boolean;\n jobSystemLabels?: Entity[];\n}\n\nexport interface CodeAndCustomFieldResponse {\n customFields: CustomFieldValue[];\n codeSummary: Partial;\n}\n\nexport interface KitItemEntity extends Entity {\n category: CodeCategory;\n}\n\nexport interface CodeCategoryEntity extends Entity {\n description: string;\n type: CodeType;\n}\n\nexport interface GetCodeCategoryEntitiesRequest {\n category?: string;\n excludePricebook?: string;\n isCodeItem?: boolean;\n isSold?: boolean;\n isPurchased?: boolean;\n excludeTypes: CodeType[];\n paging?: PagingOptions;\n\n}\n\nexport interface CodeAuditDetails {\n completedBy?: ContactEntity;\n completedAt?: Date;\n actualQuantity?: number;\n comply?: CodeAuditComply;\n complyNote?: string;\n}\n\nexport enum CodeAuditComply {\n Pass = 'Pass',\n Fail = 'Fail',\n NA = 'NA'\n}\n\nexport enum EmbeddedCodeGroupBy {\n WorkOrders = 'Stages',\n Location = 'Location',\n Status = 'Status',\n None = 'None'\n}\n\nexport enum EmbeddedCodeFilterDefinition {\n AllActive = 'All Active',\n AllInactive = 'All Inactive',\n AllPending = 'All Pending',\n Normal = 'Normal',\n Variation = 'Variation',\n Cancelled = 'Cancelled',\n AllPendingActive = 'All Pending Active',\n AllPendingInactive = 'All Pending Inactive',\n}\n\nexport enum EmbeddedCodeStateFilterDefinition {\n All = \"All\",\n Complete = \"Complete\",\n Incomplete = \"Incomplete\",\n SuppliedByContactor = \"Supplied By Contractor\",\n NotSuppliedByContractor = \"Not Supplied By Contractor\",\n CanBePurchased = \"Items to Purchase\",\n ItemsOrdered = \"Items Ordered\",\n}\n\nexport interface EmbeddedCodeViewOptions {\n groupBy: EmbeddedCodeGroupBy;\n statusFilters: EmbeddedCodeFilterDefinition[];\n stateFilter: EmbeddedCodeStateFilterDefinition;\n search?: string,\n\n isTextSearch?: boolean;\n}","import { WorkOrderStatus } from '../job';\n\nexport interface Location {\n lat?: number;\n lgn?: number;\n}\n\nexport interface LocationInfo {\n _id: string;\n status: WorkOrderStatus;\n jobNumber: string;\n stageNumber: string;\n}\n\nexport const MAPSTYLE = [\n {\n 'featureType': 'administrative',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#d6e2e6'\n }\n ]\n },\n {\n 'featureType': 'administrative',\n 'elementType': 'geometry.stroke',\n 'stylers': [\n {\n 'color': '#cfd4d5'\n }\n ]\n },\n {\n 'featureType': 'administrative',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n {\n 'color': '#7492a8'\n }\n ]\n },\n {\n 'featureType': 'administrative.neighborhood',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n {\n 'lightness': 25\n }\n ]\n },\n {\n 'featureType': 'landscape.man_made',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#dde2e3'\n }\n ]\n },\n {\n 'featureType': 'landscape.man_made',\n 'elementType': 'geometry.stroke',\n 'stylers': [\n {\n 'color': '#cfd4d5'\n }\n ]\n },\n {\n 'featureType': 'landscape.natural',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#dde2e3'\n }\n ]\n },\n {\n 'featureType': 'landscape.natural',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n {\n 'color': '#7492a8'\n }\n ]\n },\n {\n 'featureType': 'landscape.natural.terrain',\n 'elementType': 'all',\n 'stylers': [\n {\n 'visibility': 'off'\n }\n ]\n },\n {\n 'featureType': 'poi',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#dde2e3'\n }\n ]\n },\n {\n 'featureType': 'poi',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n {\n 'color': '#588ca4'\n }\n ]\n },\n {\n 'featureType': 'poi',\n 'elementType': 'labels.icon',\n 'stylers': [\n {\n 'saturation': -100\n }\n ]\n },\n {\n 'featureType': 'poi',\n 'stylers': [\n {\n 'hue': '#00FF6A'\n },\n {\n 'saturation': -1.0989010989011234\n },\n {\n 'lightness': 11.200000000000017\n },\n {\n 'gamma': 1\n }\n ]\n },\n {\n 'featureType': 'poi.sports_complex',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#c6e8b3'\n }\n ]\n },\n {\n 'featureType': 'poi.sports_complex',\n 'elementType': 'geometry.stroke',\n 'stylers': [\n {\n 'color': '#bae6a1'\n }\n ]\n },\n {\n 'featureType': 'road',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n {\n 'color': '#41626b'\n }\n ]\n },\n {\n 'featureType': 'road',\n 'elementType': 'labels.icon',\n 'stylers': [\n {\n 'saturation': -45\n },\n {\n 'lightness': 10\n },\n {\n 'visibility': 'on'\n }\n ]\n },\n {\n 'featureType': 'road.highway',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#c1d1d6'\n }\n ]\n },\n {\n 'featureType': 'road.highway',\n 'elementType': 'geometry.stroke',\n 'stylers': [\n {\n 'color': '#a6b5bb'\n }\n ]\n },\n {\n 'featureType': 'road.highway',\n 'elementType': 'labels.icon',\n 'stylers': [\n {\n 'visibility': 'on'\n }\n ]\n },\n {\n 'featureType': 'road.highway.controlled_access',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#9fb6bd'\n }\n ]\n },\n {\n 'featureType': 'road.arterial',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#ffffff'\n }\n ]\n },\n {\n 'featureType': 'road.local',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#ffffff'\n }\n ]\n },\n {\n 'featureType': 'transit',\n 'elementType': 'labels.icon',\n 'stylers': [\n {\n 'saturation': -70\n }\n ]\n },\n {\n 'featureType': 'transit.line',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#b4cbd4'\n }\n ]\n },\n {\n 'featureType': 'transit.line',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n {\n 'color': '#588ca4'\n }\n ]\n },\n {\n 'featureType': 'transit.station',\n 'elementType': 'all',\n 'stylers': [\n {\n 'visibility': 'off'\n }\n ]\n },\n {\n 'featureType': 'transit.station',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n {\n 'color': '#008cb5'\n },\n {\n 'visibility': 'on'\n }\n ]\n },\n {\n 'featureType': 'transit.station.airport',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'saturation': -100\n },\n {\n 'lightness': -5\n }\n ]\n },\n {\n 'featureType': 'water',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#a6cbe3'\n }\n ]\n }\n] as any[];","\nexport enum ActivityType {\n EntityComment = 'EntityComment',\n EntityAttachment = 'EntityAttachment',\n EntityCreated = 'EntityCreated',\n EntityDeleted = 'EntityDeleted',\n EntityUpdated = 'EntityUpdated',\n EntityMerged = 'EntityMerged',\n WorkOrderAssigned = 'WorkOrderAssigned',\n WorkOrderUnassigned = 'WorkOrderUnassigned',\n WorkOrderDispatched = 'WorkOrderDispatched',\n WorkOrderSubcontractorDispatched = 'SubcontractorWorkOrderDispatched',\n WorkOrderStarted = 'WorkOrderStarted',\n WorkOrderCheckIn = 'WorkOrderCheckIn',\n WorkOrderCheckout = 'WorkOrderCheckout',\n WorkOrderInProgress = 'WorkOrderInProgress',\n WorkOrderCompleted = 'WorkOrderCompleted',\n WorkOrderCancelled = 'WorkOrderCancelled',\n WorkOrderClosed = 'WorkOrderClosed',\n WorkOrderStop = 'WorkOrderStop',\n WorkOrderHold = 'WorkOrderHold',\n WorkOrderFinalised = 'WorkOrderFinalised',\n WorkOrderResumeNew = 'WorkOrderResumeNew',\n WorkOrderResumeAssigned = 'WorkOrderResumeAssigned',\n WorkOrderResumeDispatched = 'WorkOrderResumeDispatched',\n WorkOrderReissued = 'WorkOrderReissued',\n WorkOrderUpdated = 'WorkOrderUpdated',\n WorkOrderSendEmail = 'WorkOrderSendEmail',\n WorkOrderEnroute = 'WorkOrderEnroute',\n WorkOrderOnsite = 'WorkOrderOnsite',\n JobBilled = 'JobBilled',\n JobPaid = 'JobPaid',\n JobCompleted = 'JobCompleted',\n JobFinalised = 'JobFinalised',\n JobClosed = 'JobClosed',\n JobCancelled = 'JobCancelled',\n JobOnHold = 'JobOnHold',\n JobInProgress = 'JobInProgress',\n JobReOpen = 'JobReOpen',\n JobImport = 'JobImport',\n JobUpdateThresholds = 'UpdateJobThresholds',\n JobChanged = 'JobChanged',\n ChecklistConfirmation = 'ChecklistConfirmation',\n ChecklistAttachment = 'ChecklistAttachment',\n ChecklistSignature = 'ChecklistSignature',\n ChecklistComment = 'ChecklistComment',\n ChecklistBeforePhoto = 'ChecklistBeforePhoto',\n ChecklistDuringPhoto = 'ChecklistDuriingPhoto',\n ChecklistAfterPhoto = 'ChecklistAfterPhoto',\n ChecklistMandatory = 'ChecklistMandatory',\n WorkOrderDeleted = 'WorkOrderDeleted',\n WorkOrderBill = 'WorkOrderBill',\n WorkOrderAddCode = 'WorkOrderAddCode',\n WorkOrderUpdatedCode = 'WorkOrderUpdatedCode',\n WorkOrderDeletedCode = 'WorkOrderDeletedCode',\n JobResumeNew = 'JobResumeNew',\n JobUpdated = 'JobUpdated',\n AnswerQuestion = 'AnswerQuestion',\n WorkOrderUpdateCompletedDate = 'UpdateWorkOrderCompletedDate',\n WorkOrderUpdateFinalisedDate = 'UpdateWorkOrderFinalisedDate',\n WorkOrderUpdateThresholds = 'UpdateWorkOrderThresholds',\n WorkOrderUpdateBuyPriceBook = 'WorkOrderUpdateBuyPriceBook',\n Form = 'Form',\n InvoiceUpdated = 'Invoice Updated',\n InvoiceApproved = 'Invoice Approved',\n InvoiceError = 'Invoice Error',\n InvoiceCreated = 'Invoice Created',\n InvoiceVoid = 'Invoice Voided',\n InvoiceReissue = 'Invoice Reissue',\n InvoiceSynced = 'Invoice Synced',\n InvoicePayment = 'Invoice Payment',\n InvoiceEditedAfterApproval = 'Invoice Edited After Approval',\n BillUpdated = 'Bill Updated',\n BillApproved = 'Bill Approved',\n BillError = 'Bill Error',\n BillCreated = 'Bill Created',\n BillVoid = 'Bill Voided',\n BillReissue = 'Bill Reissue',\n BillSynced = 'Bill Synced',\n BillPayment = 'Bill Payment',\n BillEditedAfterApproval = 'Bill Edited After Approval',\n ComplianceSendRequest = 'Compliance Send Request',\n QuoteWon = 'Quote Won',\n QuoteLost = 'Quote Lost',\n\n QuoteCreated = 'Quote Created',\n QuoteApproved = 'Quote Approved',\n QuoteAccepted = 'Quote Accepted',\n QuoteDeclined = 'Quote Declined',\n QuoteRevised = 'Quote Revised',\n QuoteDeleted = 'Quote Deleted',\n QuoteSubmitForApproval = 'Quote Submit For Approval',\n QuoteChangesRequired = 'Quote Changes Required',\n QuoteConverted = 'Quote Converted',\n\n\n Incomplete = 'Incomplete',\n ClearFinalisation = 'ClearFinalisation',\n Reverse = 'Reverse',\n Integration = 'Integration',\n Allocation = 'Allocation',\n Utility = 'Utility',\n Defect = 'Defect',\n ClaimSubmitted = 'Claim Submitted',\n ClaimApproved = 'Claim Approved',\n ClaimRework = 'Claim Rework',\n\n WorkBuddyConnectWorkOrderCompleted = 'WorkBuddy Connect: Work Order Completed',\n WorkBuddyConnectWorkOrderCompletedResponse = 'WorkBuddy Connect: Work Order Completed Response',\n WorkBuddyConnectError = 'WorkBuddy Connect: Error',\n Timesheet = 'Timesheet',\n EmailEditor = 'EmailEditor',\n SendEmailNotification = 'Send Email Notification',\n SendSmsNotification = 'Send Sms Notification',\n SendEmailTemplate = 'Send Email Template',\n SendSmsTemplate = 'Send Sms Template',\n OpportunityCreated = 'Opportunity Created',\n OpportunityStageChanged = 'Opportunity Stage Changed',\n OpportunityWon = 'Opportunity Won',\n OpportunityLost = 'Opportunity Lost',\n OpportunityDeleted = 'Opportunity Deleted',\n\n LeadCreated = 'Lead Created',\n LeadStageChanged = 'Lead Stage Changed',\n LeadConverted = 'Lead Won',\n LeadDeleted = 'Lead Deleted',\n\n ProjectCreated = \"Project Created\",\n ProjectDeleted = \"Project Deleted\",\n ProjectStatusChanged = \"Project Status Changed\",\n ProjectClosed = \"Project Closed\",\n\n File = 'File',\n Notification = 'Notification',\n Reminder = 'Reminder',\n\n SaleOrderCreated = 'SaleOrder Created',\n SaleOrderUpdateStatus = 'SaleOrder Update Status',\n SaleOrderInvoiced = 'SaleOrder Invoiced',\n SaleOrderDeleted = 'SaleOrder Deleted',\n\n EntityStatusUpdated = 'Entity Status Updated',\n\n RecurringJobUpdated = 'Recurring Job Updated',\n\n SiteIntegrationSync = 'Site Integration Sync',\n}\n\nexport enum ActivityKind {\n Email = 'Email',\n SMS = 'SMS',\n Integration = 'Integration',\n Phone = 'Phone',\n System = 'System',\n Appointment = 'Appointment',\n Note = 'Note',\n Form = 'Form',\n File = 'File',\n View = \"View\",\n}\n\nexport const ActivityKinds = Object.values(ActivityKind);","// 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 * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n\n};\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n\n};\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s\n};\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n\n};\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l\n};\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n\n};\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n\n};\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s\n};\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l\n};\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\"\n};\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\"\n};\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s\n};\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l\n};\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n\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};\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: 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};\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};\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s\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};\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};\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};","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nclass 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 * The IANA name of this zone.\n * Defaults to `name` if not overwritten by a subclass.\n * @abstract\n * @type {string}\n */\n get ianaName() {\n return this.name;\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 isUniversal() {\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}\nexport { Zone as default };","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nclass SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, {\n format,\n locale\n }) {\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 === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\nexport { SystemZone as default };","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\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 era: \"short\"\n });\n }\n return dtfCache[zone];\n}\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6\n};\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const {\n type,\n value\n } = formatted[i];\n const pos = typeToPos[type];\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nclass 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(\"Sport~~blorp\") //=> false\n * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\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 if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", {\n timeZone: zone\n }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /**\n * The type of zone. `iana` for all instances of `IANAZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"iana\";\n }\n\n /**\n * The name of this zone (i.e. the IANA zone name).\n * @override\n * @type {string}\n */\n get name() {\n return this.zoneName;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns false for all IANA zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return false;\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @override\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, {\n format,\n locale\n }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /**\n * Returns the offset's value as a string\n * @override\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 return formatOffset(this.offset(ts), format);\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @override\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n const date = new Date(ts);\n if (isNaN(date)) return NaN;\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date);\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0\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 /**\n * Return whether this Zone is equal to another zone\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /**\n * Return whether this Zone is valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return this.valid;\n }\n}\nexport { IANAZone as default };","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\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}\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}\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const {\n base,\n ...cacheKeyOpts\n } = 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}\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\nlet weekInfoCache = {};\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache[locString];\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n weekInfoCache[locString] = data;\n }\n return data;\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 // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n const {\n numberingSystem,\n calendar\n } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\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}\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return loc.numberingSystem === \"latn\" || !loc.locale || loc.locale.startsWith(\"en\") || new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\";\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 const {\n padTo,\n floor,\n ...otherOpts\n } = opts;\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = {\n useGrouping: false,\n ...opts\n };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\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.originalZone = undefined;\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\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 if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({\n minutes: dt.offset\n });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({\n minutes: dt.offset\n });\n this.originalZone = dt.zone;\n }\n const intlOpts = {\n ...this.opts\n };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts().map(({\n value\n }) => value).join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map(part => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName\n });\n return {\n ...part,\n value: offsetName\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = {\n style: \"long\",\n ...opts\n };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\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 formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7]\n};\n\n/**\n * @private\n */\n\nclass Locale {\n static fromOpts(opts) {\n return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.weekSettings, opts.defaultToEN);\n }\n static create(locale, numberingSystem, outputCalendar, weekSettings, 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 const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n static fromObject({\n locale,\n numberingSystem,\n outputCalendar,\n weekSettings\n } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n this.weekdaysCache = {\n format: {},\n standalone: {}\n };\n this.monthsCache = {\n format: {},\n standalone: {}\n };\n this.meridiemCache = null;\n this.eraCache = {};\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n return this.fastNumbersCached;\n }\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === \"latn\") && (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, validateWeekSettings(alts.weekSettings) || this.weekSettings, alts.defaultToEN || false);\n }\n }\n redefaultToEN(alts = {}) {\n return this.clone({\n ...alts,\n defaultToEN: true\n });\n }\n redefaultToSystem(alts = {}) {\n return this.clone({\n ...alts,\n defaultToEN: false\n });\n }\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n const intl = format ? {\n month: length,\n day: \"numeric\"\n } : {\n month: length\n },\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 weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format ? {\n weekday: length,\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\"\n } : {\n weekday: length\n },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays(dt => this.extract(dt, intl, \"weekday\"));\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n meridiems() {\n return listStuff(this, undefined, () => English.meridiems, () => {\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 = {\n hour: \"numeric\",\n hourCycle: \"h12\"\n };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(dt => this.extract(dt, intl, \"dayperiod\"));\n }\n return this.meridiemCache;\n });\n }\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = {\n era: length\n };\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 => this.extract(dt, intl, \"era\"));\n }\n return this.eraCache[length];\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 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 dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n isEnglish() {\n return this.locale === \"en\" || this.locale.toLowerCase() === \"en-us\" || new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\");\n }\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n equals(other) {\n return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar;\n }\n toString() {\n return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n }\n}\nexport { Locale as default };","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nclass 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 constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /**\n * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"fixed\";\n }\n\n /**\n * The name of this zone.\n * All fixed zones' names always start with \"UTC\" (plus optional offset)\n * @override\n * @type {string}\n */\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /**\n * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n *\n * @override\n * @type {string}\n */\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /**\n * Returns the offset's common name at the specified timestamp.\n *\n * For fixed offset zones this equals to the zone name.\n * @override\n */\n offsetName() {\n return this.name;\n }\n\n /**\n * Returns the offset's value as a string\n * @override\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 return formatOffset(this.fixed, format);\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns true for all fixed offset zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return true;\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n *\n * For fixed offset zones, this is constant and does not depend on a timestamp.\n * @override\n * @return {number}\n */\n offset() {\n return this.fixed;\n }\n\n /**\n * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /**\n * Return whether this Zone is valid:\n * All fixed offset zones are valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return true;\n }\n}\nexport { FixedOffsetZone as default };","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 */\nclass 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 isUniversal() {\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}\nexport { InvalidZone as default };","/**\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\";\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\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 === \"default\") return defaultZone;else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\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}","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};\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};\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\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 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\n// cache of {numberingSystem: {append: regex}}\nlet digitRegexCache = {};\nexport function resetDigitRegexCache() {\n digitRegexCache = {};\n}\nexport function digitRegex({\n numberingSystem\n}, append = \"\") {\n const ns = numberingSystem || \"latn\";\n if (!digitRegexCache[ns]) {\n digitRegexCache[ns] = {};\n }\n if (!digitRegexCache[ns][append]) {\n digitRegexCache[ns][append] = new RegExp(`${numberingSystems[ns]}${append}`);\n }\n return digitRegexCache[ns][append];\n}","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\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 */\nclass 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 * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.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 * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\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 DateTime.resetCache();\n resetDigitRegexCache();\n }\n}\nexport { Settings as default };","class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\nexport { Invalid as default };","import { integerBetween, isLeapYear, timeObject, daysInYear, daysInMonth, weeksInWeekYear, isInteger, isUndefined } from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\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];\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\"unit out of range\", `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`);\n}\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n const js = d.getUTCDay();\n return js === 0 ? 7 : js;\n}\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\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 {\n month: month0 + 1,\n day\n };\n}\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return (isoWeekday - startOfWeek + 7) % 7 + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const {\n year,\n month,\n day\n } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n return {\n weekYear,\n weekNumber,\n weekday,\n ...timeObject(gregObj)\n };\n}\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const {\n weekYear,\n weekNumber,\n weekday\n } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\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 const {\n month,\n day\n } = uncomputeOrdinal(year, ordinal);\n return {\n year,\n month,\n day,\n ...timeObject(weekData)\n };\n}\nexport function gregorianToOrdinal(gregData) {\n const {\n year,\n month,\n day\n } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return {\n year,\n ordinal,\n ...timeObject(gregData)\n };\n}\nexport function ordinalToGregorian(ordinalData) {\n const {\n year,\n ordinal\n } = ordinalData;\n const {\n month,\n day\n } = uncomputeOrdinal(year, ordinal);\n return {\n year,\n month,\n day,\n ...timeObject(ordinalData)\n };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData = !isUndefined(obj.localWeekday) || !isUndefined(obj.localWeekNumber) || !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData = !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\"Cannot mix locale-based week fields with ISO-based week fields\");\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek()\n };\n } else {\n return {\n minDaysInFirstWeek: 4,\n startOfWeek: 1\n };\n }\n}\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\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 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}\nexport function hasInvalidTimeData(obj) {\n const {\n hour,\n minute,\n second,\n millisecond\n } = obj;\n const validHour = integerBetween(hour, 0, 23) || 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 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 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\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\nexport function isString(o) {\n return typeof o === \"string\";\n}\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\nexport function hasLocaleWeekInfo() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.Locale && (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype);\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}\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}\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (!integerBetween(settings.firstDay, 1, 7) || !integerBetween(settings.minimalDays, 1, 7) || !Array.isArray(settings.weekend) || settings.weekend.some(v => !integerBetween(v, 1, 7))) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend)\n };\n }\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}\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\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}\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}\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\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// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond);\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 // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 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 hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\"\n };\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n const modified = {\n timeZoneName: offsetFormat,\n ...intlOpts\n };\n const parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(m => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\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 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)) throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\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\n/**\n * Returns the offset's value as a string\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 */\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 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}\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nexport const monthsShort = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\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}\nexport const weekdaysLong = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"];\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\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}\nexport const meridiems = [\"AM\", \"PM\"];\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\nexport const erasShort = [\"BC\", \"AD\"];\nexport const erasNarrow = [\"B\", \"A\"];\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}\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\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 const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\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 const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\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, [\"weekday\", \"era\", \"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"timeZoneName\", \"hourCycle\"]),\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}","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\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}\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\nclass Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\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({\n literal: bracketed || /^\\s+$/.test(currentFull),\n val: currentFull\n });\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({\n literal: /^\\s+$/.test(currentFull),\n val: currentFull\n });\n }\n currentFull = c;\n current = c;\n }\n }\n if (currentFull.length > 0) {\n splits.push({\n literal: bracketed || /^\\s+$/.test(currentFull),\n val: currentFull\n });\n }\n return splits;\n }\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, {\n ...this.opts,\n ...opts\n });\n return df.format();\n }\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, {\n ...this.opts,\n ...opts\n });\n }\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\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 const opts = {\n ...this.opts\n };\n if (p > 0) {\n opts.padTo = p;\n }\n return this.loc.numberFormatter(opts).format(n);\n }\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\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 return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () => knownEnglish ? English.meridiemForDateTime(dt) : string({\n hour: \"numeric\",\n hourCycle: \"h12\"\n }, \"dayperiod\"),\n month = (length, standalone) => knownEnglish ? English.monthForDateTime(dt, length) : string(standalone ? {\n month: length\n } : {\n month: length,\n day: \"numeric\"\n }, \"month\"),\n weekday = (length, standalone) => knownEnglish ? English.weekdayForDateTime(dt, length) : string(standalone ? {\n weekday: length\n } : {\n weekday: length,\n month: \"long\",\n day: \"numeric\"\n }, \"weekday\"),\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 => knownEnglish ? English.eraForDateTime(dt, length) : string({\n era: length\n }, \"era\"),\n tokenToString = token => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\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 // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\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({\n format: \"narrow\",\n allowZ: this.opts.allowZ\n });\n case \"ZZ\":\n // like +06:00\n return formatOffset({\n format: \"short\",\n allowZ: this.opts.allowZ\n });\n case \"ZZZ\":\n // like +0600\n return formatOffset({\n format: \"techie\",\n allowZ: this.opts.allowZ\n });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, {\n format: \"short\",\n locale: this.loc.locale\n });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, {\n format: \"long\",\n locale: this.loc.locale\n });\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({\n day: \"numeric\"\n }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({\n day: \"2-digit\"\n }, \"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 ? string({\n month: \"numeric\",\n day: \"numeric\"\n }, \"month\") : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter ? string({\n month: \"2-digit\",\n day: \"numeric\"\n }, \"month\") : 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 ? string({\n month: \"numeric\"\n }, \"month\") : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter ? string({\n month: \"2-digit\"\n }, \"month\") : 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({\n year: \"numeric\"\n }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter ? string({\n year: \"2-digit\"\n }, \"year\") : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter ? string({\n year: \"numeric\"\n }, \"year\") : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter ? string({\n year: \"numeric\"\n }, \"year\") : 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 \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\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 return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\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 \"w\":\n return \"week\";\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((found, {\n literal,\n val\n }) => literal ? found : found.concat(val), []),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter(t => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\nexport { Formatter as default };","import { untruncateYear, signedOffset, parseInteger, parseMillis, isUndefined, parseFloating } 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\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\nfunction combineExtractors(...extractors) {\n return m => extractors.reduce(([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{\n ...mergedVals,\n ...val\n }, zone || mergedZone, next];\n }, [{}, null, 1]).slice(0, 2);\n}\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\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}\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\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))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(`${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\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 return [item, null, cursor + 3];\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 return [item, null, cursor + 4];\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}\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,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] = match;\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n const maybeNegate = (num, force = false) => num !== undefined && (force || num && hasNegativePrefix) ? -num : num;\n return [{\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds)\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};\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 if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday = weekdayStr.length > 3 ? English.weekdaysLong.indexOf(weekdayStr) + 1 : English.weekdaysShort.indexOf(weekdayStr) + 1;\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)))$/;\nfunction extractRFC2822(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr, obsOffset, milOffset, offHourStr, offMinuteStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\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 return [result, new FixedOffsetZone(offset)];\n}\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^()]*\\)|[\\n\\t]/g, \" \").replace(/(\\s\\s+)/g, \" \").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|Wednesday|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})$/;\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}\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}\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\nconst extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone);\nconst extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset, extractIANAZone);\nconst extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset, extractIANAZone);\nconst extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]);\n}\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\nexport function parseHTTPDate(s) {\n return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]);\n}\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone);\nexport function parseSQL(s) {\n return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]);\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 { asNumber, hasOwnProperty, isNumber, isUndefined, normalizeObject, roundTo } from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const 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: {\n minutes: 60,\n seconds: 60 * 60,\n milliseconds: 60 * 60 * 1000\n },\n minutes: {\n seconds: 60,\n milliseconds: 60 * 1000\n },\n seconds: {\n milliseconds: 1000\n }\n },\n casualMatrix = {\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 ...lowOrderMatrix\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\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 ...lowOrderMatrix\n };\n\n// units ordered by size\nconst orderedUnits = [\"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\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 : {\n ...dur.values,\n ...(alts.values || {})\n },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix\n };\n return new Duration(conf);\n}\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\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 */\nclass Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n if (config.matrix) {\n matrix = config.matrix;\n }\n\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 = matrix;\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({\n milliseconds: count\n }, 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 {Object} [opts=[]] - options for creating this Duration\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 preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(`Duration.fromObject: argument expected to be an object, got ${obj === null ? \"null\" : typeof obj}`);\n }\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(`Unknown duration argument ${durationLike} of type ${typeof durationLike}`);\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 preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset 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 return Duration.fromObject(parsed, opts);\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 preset conversion system to use\n * @param {string} [opts.matrix=Object] - 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 return Duration.fromObject(parsed, opts);\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 const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({\n invalid\n });\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 if (!normalized) throw new InvalidUnitError(unit);\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 * * `w` for weeks\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 * * Tokens can be escaped by wrapping with single quotes.\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 = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false\n };\n return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @example\n * ```js\n * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 day, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 day, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 day, 5 hr, 6 min'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n const l = orderedUnits.map(unit => {\n const val = this.values[unit];\n if (isUndefined(val)) {\n return null;\n }\n return this.loc.numberFormatter({\n style: \"unit\",\n unitDisplay: \"long\",\n ...opts,\n unit: unit.slice(0, -1)\n }).format(val);\n }).filter(n => n);\n return this.loc.listFormatter({\n type: \"conjunction\",\n style: opts.listStyle || \"narrow\",\n ...opts\n }).format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return {\n ...this.values\n };\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 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) 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 const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false\n };\n const dateTime = DateTime.fromMillis(millis, {\n zone: \"UTC\"\n });\n return dateTime.toISOTime(opts);\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 a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n return durationToMillis(this.matrix, this.values);\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 const dur = Duration.fromDurationLike(duration),\n result = {};\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 return clone(this, {\n values: result\n }, 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 const dur = Duration.fromDurationLike(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 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? 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, {\n values: result\n }, 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 const mixed = {\n ...this.values,\n ...normalizeObject(values, Duration.normalizeUnit)\n };\n return clone(this, {\n values: mixed\n });\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({\n locale,\n numberingSystem,\n conversionAccuracy,\n matrix\n } = {}) {\n const loc = this.loc.clone({\n locale,\n numberingSystem\n });\n const opts = {\n loc,\n matrix,\n conversionAccuracy\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 * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\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, {\n values: vals\n }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, {\n values: vals\n }, 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 if (units.length === 0) {\n return this;\n }\n units = units.map(u => Duration.normalizeUnit(u));\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\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 // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\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] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n normalizeValues(this.matrix, built);\n return clone(this, {\n values: built\n }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\");\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] === 0 ? 0 : -this.values[k];\n }\n return clone(this, {\n values: negated\n }, 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 if (!this.loc.equals(other.loc)) {\n return false;\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 for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\nexport { Duration as default };","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\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(\"end before start\", `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`);\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 Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nclass 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 const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({\n invalid\n });\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 const validateError = validateStartEnd(builtStart, builtEnd);\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 = Duration.fromDurationLike(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 = Duration.fromDurationLike(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 `/`, `/`, and `/` 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 let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\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 Interval#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 * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({\n locale: start.locale\n });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\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({\n start,\n end\n } = {}) {\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 {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes.map(friendlyDateTime).filter(d => this.contains(d)).sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let {\n s\n } = this,\n i = 0;\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 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 {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n let {\n s\n } = this,\n idx = 1,\n next;\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 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 {Array}\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 * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\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 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 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 {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(([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 }, [[], null]);\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 {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map(i => [{\n time: i.s,\n type: \"s\"\n }, {\n time: i.e,\n type: \"e\"\n }]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\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 start = null;\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 {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals)).map(i => this.intersection(i)).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 a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) : INVALID;\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\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * 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\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, {\n separator = \" – \"\n } = {}) {\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}\nexport { Interval as default };","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\";\nimport { hasLocaleWeekInfo, 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 */\nclass 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().setZone(zone).set({\n month: 12\n });\n return !zone.isUniversal && proto.offset !== proto.set({\n month: 6\n }).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.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 * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({\n locale = null,\n locObj = null\n } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({\n locale = null,\n locObj = null\n } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({\n locale = null,\n locObj = null\n } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\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 {Array}\n */\n static months(length = \"long\", {\n locale = null,\n numberingSystem = null,\n locObj = null,\n 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 Info#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 {Array}\n */\n static monthsFormat(length = \"long\", {\n locale = null,\n numberingSystem = null,\n locObj = null,\n 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 {Array}\n */\n static weekdays(length = \"long\", {\n locale = null,\n numberingSystem = null,\n locObj = null\n } = {}) {\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 Info#weekdays}\n * @param {string} [length='long'] - the length of the month 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 {Array}\n */\n static weekdaysFormat(length = \"long\", {\n locale = null,\n numberingSystem = null,\n 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 {Array}\n */\n static meridiems({\n locale = null\n } = {}) {\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 {Array}\n */\n static eras(length = \"short\", {\n locale = null\n } = {}) {\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, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return {\n relative: hasRelative(),\n localeWeek: hasLocaleWeekInfo()\n };\n }\n}\nexport { Info as default };","import Duration from \"../duration.js\";\nfunction dayDiff(earlier, later) {\n const utcDayStart = dt => dt.toUTC(0, {\n keepLocalTime: true\n }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [[\"years\", (a, b) => b.year - a.year], [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4], [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12], [\"weeks\", (a, b) => {\n const days = dayDiff(a, b);\n return (days - days % 7) / 7;\n }], [\"days\", dayDiff]];\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n return [cursor, results, highWater, lowestOrder];\n}\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n const remainingMillis = later - cursor;\n const lowerOrderUnits = units.filter(u => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0);\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({\n [lowestOrder]: 1\n });\n }\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n const duration = Duration.fromObject(results, opts);\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts).shiftTo(...lowerOrderUnits).plus(duration);\n } else {\n return duration;\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\";\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\nfunction intUnit(regex, post = i => i) {\n return {\n regex,\n deser: ([s]) => post(parseDigits(s))\n };\n}\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\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}\nfunction stripInsensitivities(s) {\n return s.replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\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]) => strings.findIndex(i => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex\n };\n }\n}\nfunction offset(regex, groups) {\n return {\n regex,\n deser: ([, h, m]) => signedOffset(h, m),\n groups\n };\n}\nfunction simple(regex) {\n return {\n regex,\n deser: ([s]) => s\n };\n}\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\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 => ({\n regex: RegExp(escapeToken(t.val)),\n deser: ([s]) => s,\n literal: true\n }),\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\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 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), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 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), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", 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 case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\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), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 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 // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP\n };\n unit.token = token;\n return unit;\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 hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\"\n },\n hour24: {\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 timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\"\n }\n};\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const {\n type,\n value\n } = part;\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value\n };\n }\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n if (val) {\n return {\n literal: false,\n val\n };\n }\n return undefined;\n}\nfunction buildRegex(units) {\n const re = units.map(u => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\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}\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 let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\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 if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\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 return r;\n }, {});\n return [vals, zone, specificOffset];\n}\nlet dummyDateTimeCache = null;\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n return dummyDateTimeCache;\n}\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n return tokens;\n}\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map(t => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n constructor(locale, format) {\n this.locale = locale;\n this.format = format;\n this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n this.units = this.tokens.map(t => unitForToken(t, locale));\n this.disqualifyingUnit = this.units.find(t => t.invalidReason);\n if (!this.disqualifyingUnit) {\n const [regexString, handlers] = buildRegex(this.units);\n this.regex = RegExp(regexString, \"i\");\n this.handlers = handlers;\n }\n }\n explainFromTokens(input) {\n if (!this.isValid) {\n return {\n input,\n tokens: this.tokens,\n invalidReason: this.invalidReason\n };\n } else {\n const [rawMatches, matches] = match(input, this.regex, this.handlers),\n [result, zone, specificOffset] = matches ? dateTimeFromMatches(matches) : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\"Can't include meridiem when specifying 24-hour format\");\n }\n return {\n input,\n tokens: this.tokens,\n regex: this.regex,\n rawMatches,\n matches,\n result,\n zone,\n specificOffset\n };\n }\n }\n get isValid() {\n return !this.disqualifyingUnit;\n }\n get invalidReason() {\n return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n }\n}\nexport function explainFromTokens(locale, input, format) {\n const parser = new TokenParser(locale, format);\n return parser.explainFromTokens(input);\n}\nexport function parseFromTokens(locale, input, format) {\n const {\n result,\n zone,\n specificOffset,\n invalidReason\n } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map(p => tokenForPart(p, formatOpts, resolvedOpts));\n}","import Duration 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 { isUndefined, maybeArray, isDate, isNumber, bestBy, daysInMonth, daysInYear, isLeapYear, weeksInWeekYear, normalizeObject, roundTo, objToLocalTS, padStart } 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, formatOptsToTokens, expandMacroTokens, TokenParser } from \"./impl/tokenParser.js\";\nimport { gregorianToWeek, weekToGregorian, gregorianToOrdinal, ordinalToGregorian, hasInvalidGregorianData, hasInvalidWeekData, hasInvalidOrdinalData, hasInvalidTimeData, usesLocalWeekValues, isoWeekdayToLocal } from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport { InvalidArgumentError, ConflictingSpecificationError, InvalidUnitError, InvalidDateTimeError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\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\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(dt.c, dt.loc.getMinDaysInFirstWeek(), dt.loc.getStartOfWeek());\n }\n return dt.localWeekData;\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({\n ...current,\n ...alts,\n old: current\n });\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 const d = new Date(ts);\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 = {\n ...inst.c,\n year,\n month,\n day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + 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 let [ts, o] = fixOffset(localTS, oPre, inst.zone);\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 return {\n ts,\n o\n };\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, specificOffset) {\n const {\n setZone,\n zone\n } = opts;\n if (parsed && Object.keys(parsed).length !== 0 || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`));\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 ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true\n }).formatDateTimeFromString(dt, format) : null;\n}\nfunction toISODate(o, extended) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n c += \"-\";\n c += padStart(o.c.day);\n } else {\n c += padStart(o.c.month);\n c += padStart(o.c.day);\n }\n return c;\n}\nfunction toISOTime(o, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone) {\n let c = padStart(o.c.hour);\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += \":\";\n }\n } else {\n c += padStart(o.c.minute);\n }\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += padStart(o.c.second);\n if (o.c.millisecond !== 0 || !suppressMilliseconds) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\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 = [\"weekYear\", \"weekNumber\", \"weekday\", \"hour\", \"minute\", \"second\", \"millisecond\"],\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 if (!normalized) throw new InvalidUnitError(unit);\n return normalized;\n}\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\nfunction guessOffsetForZone(zone) {\n if (!zoneOffsetGuessCache[zone]) {\n if (zoneOffsetTs === undefined) {\n zoneOffsetTs = Settings.now();\n }\n zoneOffsetGuessCache[zone] = zone.offset(zoneOffsetTs);\n }\n return zoneOffsetGuessCache[zone];\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, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n }\n const loc = Locale.fromObject(opts);\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n const offsetProvis = guessOffsetForZone(zone);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = Settings.now();\n }\n return new DateTime({\n ts,\n zone,\n loc,\n o\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.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\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}\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nlet zoneOffsetGuessCache = {};\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 DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#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 */\nclass DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n let invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) || (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\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 if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n // If an offset has been passed and we have not been called from\n // clone(), we can trust it and avoid the offset calculation.\n const ot = isNumber(config.o) && !config.old ? config.o : 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.localWeekData = 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({ zone: \"America/New_York\" }) //~> now, in US east coast time\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, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\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() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n }, opts);\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 * @param {Object} options - configuration options for the DateTime\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 * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\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, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\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, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n }, opts);\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 const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\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 * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(`fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`);\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect 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 * @param {string} options.weekSettings - the week settings 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.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\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 {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.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} [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 * @param {string} opts.weekSettings - the week settings 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 * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const {\n minDaysInFirstWeek,\n startOfWeek\n } = usesLocalWeekValues(normalized, loc);\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : zoneToUse.offset(tsNow),\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 // 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(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");\n }\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\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, minDaysInFirstWeek, startOfWeek);\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 ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? ordinalToGregorian(normalized) : 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(\"mismatched weekday\", `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`);\n }\n if (!inst.isValid) {\n return DateTime.invalid(inst.invalid);\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 * @param {string} [opts.weekSettings] - the week settings 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 * @param {string} opts.weekSettings - the week settings 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 * @param {string} opts.weekSettings - the week settings 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. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=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.weekSettings - the week settings to set on the resulting DateTime instance\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 const {\n locale = null,\n numberingSystem = null\n } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\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.weekSettings - the week settings to set on the resulting DateTime instance\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 const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({\n invalid\n });\n }\n }\n\n /**\n * Check if an object is an instance of 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 /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map(t => t ? t.val : null).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map(t => t.val).join(\"\");\n }\n static resetCache() {\n zoneOffsetTs = undefined;\n zoneOffsetGuessCache = {};\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 * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : 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\", {\n locObj: this.loc\n })[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\", {\n locObj: this.loc\n })[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\", {\n locObj: this.loc\n })[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\", {\n locObj: this.loc\n })[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.isUniversal : 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 this.offset > this.set({\n month: 1,\n day: 1\n }).offset || this.offset > this.set({\n month: 5\n }).offset;\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (c1.hour === c2.hour && c1.minute === c2.minute && c1.second === c2.second && c1.millisecond === c2.millisecond) {\n return [clone(this, {\n ts: ts1\n }), clone(this, {\n ts: ts2\n })];\n }\n return [this];\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 number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid ? weeksInWeekYear(this.localWeekYear, this.loc.getMinDaysInFirstWeek(), this.loc.getStartOfWeek()) : 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 resolvedLocaleOptions(opts = {}) {\n const {\n locale,\n numberingSystem,\n calendar\n } = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this);\n return {\n locale,\n numberingSystem,\n outputCalendar: calendar\n };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#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 DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#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 DateTime#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, {\n keepLocalTime = false,\n keepCalendarTime = false\n } = {}) {\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, {\n ts: newTS,\n zone\n });\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({\n locale,\n numberingSystem,\n outputCalendar\n } = {}) {\n const loc = this.loc.clone({\n locale,\n numberingSystem,\n outputCalendar\n });\n return clone(this, {\n loc\n });\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({\n locale\n });\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 DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\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 const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const {\n minDaysInFirstWeek,\n startOfWeek\n } = usesLocalWeekValues(normalized, this.loc);\n const settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !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 if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");\n }\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian({\n ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek),\n ...normalized\n }, minDaysInFirstWeek, startOfWeek);\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({\n ...gregorianToOrdinal(this.c),\n ...normalized\n });\n } else {\n mixed = {\n ...this.toObject(),\n ...normalized\n };\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 const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, {\n ts,\n o\n });\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 = Duration.fromDurationLike(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 DateTime#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 = Duration.fromDurationLike(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 * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\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 useLocaleWeeks = false\n } = {}) {\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 if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const {\n weekday\n } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\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 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 * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\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, opts) {\n return this.isValid ? this.plus({\n [unit]: 1\n }).startOf(unit, opts).minus(1) : 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 DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\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 ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : 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 formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\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', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : 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 ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : [];\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 {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1983, 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({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n const ext = format === \"extended\";\n let c = toISODate(this, ext);\n c += \"T\";\n c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);\n return c;\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({\n format = \"extended\"\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, format === \"extended\");\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.extendedZone=true] - add the time zone format extension\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 extendedZone = false,\n format = \"extended\"\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n let c = includePrefix ? \"T\" : \"\";\n return c + toISOTime(this, format === \"extended\", suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\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. The output is always expressed in GMT.\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 if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\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 * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -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({\n includeOffset = true,\n includeZone = false,\n includeOffsetSpace = true\n } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n return toTechFormat(this, fmt, true);\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 * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -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 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 a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#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 the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(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 const base = {\n ...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(\"created by diffing an invalid DateTime\");\n }\n const durOpts = {\n locale: this.locale,\n numberingSystem: this.numberingSystem,\n ...opts\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 return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#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 DateTime#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 * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\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, opts) {\n if (!this.isValid) return false;\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, {\n keepLocalTime: true\n });\n return adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts);\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if 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 this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc);\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({}, {\n zone: this.zone\n }),\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(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit\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 return diffRelative(options.base || DateTime.fromObject({}, {\n zone: this.zone\n }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true\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 {\n locale = null,\n numberingSystem = null\n } = 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 /**\n * Build a parser for `fmt` using the given locale. This parser can be passed\n * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n * can be used to optimize cases where many dates need to be parsed in a\n * specific format.\n *\n * @param {String} fmt - the format the string is expected to be in (see\n * description)\n * @param {Object} options - options used to set locale and numberingSystem\n * for parser\n * @returns {TokenParser} - opaque object to be used\n */\n static buildFormatParser(fmt, options = {}) {\n const {\n locale = null,\n numberingSystem = null\n } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n });\n return new TokenParser(localeToUse, fmt);\n }\n\n /**\n * Create a DateTime from an input string and format parser.\n *\n * The format parser must have been created with the same locale as this call.\n *\n * @param {String} text - the string to parse\n * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n * @param {Object} opts - options taken by fromFormat()\n * @returns {DateTime}\n */\n static fromFormatParser(text, formatParser, opts = {}) {\n if (isUndefined(text) || isUndefined(formatParser)) {\n throw new InvalidArgumentError(\"fromFormatParser requires an input string and a format parser\");\n }\n const {\n locale = null,\n numberingSystem = null\n } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n });\n if (!localeToUse.equals(formatParser.locale)) {\n throw new InvalidArgumentError(`fromFormatParser called with a locale of ${localeToUse}, ` + `but the format parser was created for ${formatParser.locale}`);\n }\n const {\n result,\n zone,\n specificOffset,\n invalidReason\n } = formatParser.explainFromTokens(text);\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(result, zone, opts, `format ${formatParser.format}`, text, specificOffset);\n }\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 DateTime#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 { DateTime as default };\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(`Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`);\n }\n}","import { DateTime, Interval } from 'luxon';\n\n\nexport enum CustomFormat {\n YYYYMMDD = 'YYYYMMDD',\n DDMMYYY = 'DDMMYYY'\n}\n\n// Settings.defaultLocale = \"en-AU\";\n\n\nexport class DateUtility {\n\n public static readonly minDateTime = DateTime.fromISO('1900-01-01T00:00:00.000Z');\n public static readonly maxDateTime = DateTime.fromISO('2100-12-31T23:59:59.999Z');\n\n public static getStartOfDay(value: DateTime | Date | string, timezone = 'utc'): DateTime {\n return this.getDateTime(value, timezone).startOf('day');\n }\n\n public static getEndOfDay(value: DateTime | Date | string, timezone = 'utc'): DateTime {\n return this.getDateTime(value, timezone).endOf('day');\n }\n\n public static getDateTime(value: DateTime | Date | string | number, timezone = 'utc', keepLocalTime = false): DateTime {\n\n let date: DateTime = null;\n if (value instanceof Date) {\n date = DateTime.fromJSDate(value);\n } else if (typeof value === 'number') {\n date = DateTime.fromMillis(value);\n } else if (typeof (value) === 'string' || value instanceof String) {\n date = DateTime.fromISO(value.toString());\n } else if (value instanceof DateTime) {\n date = value;\n }\n\n if (date) {\n timezone = timezone ?? 'utc';\n date = date.setZone(timezone, { keepLocalTime: keepLocalTime });\n }\n\n return date;\n }\n\n public static getDateTimeFromISO(value: string, timezone = 'utc'): DateTime {\n return DateTime.fromISO(value, { zone: timezone });\n }\n\n /// Given a datetime and a timezone\n // Convert it to the appropriate time\n // Then, set the timezone to UTC and keep the local time\n public static getTimezoneIndependentDateTime(value: DateTime | Date | string, timezone: string): DateTime {\n\n //This date has been correctly converted to the appropriate timezone\n const date = this.getDateTime(value, timezone);\n //Now, we want to construct this time as a UTC time, with everything the same\n const tzIndependent = date.setZone('utc', { keepLocalTime: true });\n return tzIndependent;\n\n }\n\n public static fromFormat(value: string, format: string, timezone = 'utc', keepLocalTime = false, formatLocale: string = ''): DateTime {\n\n if (!value || value === '')\n return null;\n\n let date: DateTime = null;\n if (formatLocale)\n date = DateTime.fromFormat(value, format, { locale: formatLocale });\n else\n date = DateTime.fromFormat(value, format);\n\n if (date) {\n date = date.setZone(timezone, { keepLocalTime: keepLocalTime });\n }\n\n return date;\n }\n\n //Only works client side, on server, it will be the server local timezone\n public static getLocalToday(): DateTime {\n return DateTime.local().setZone(this.getLocalTimeZone());\n }\n\n //Method to ensure a day for a specific month makes sense\n //This method is not useful for when you want to ADD days, its only for setting\n //days\n public static getValidDayForMonthAndYear(day: number, month: number, year: number): number {\n let saneDay = day;\n if (month == 2 && day > 28) {\n saneDay = this.isLeapYear(year) ? 29 : 28;\n }\n else if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30)\n saneDay = 30;\n else if (day > 31)\n saneDay = 31;\n return saneDay;\n }\n\n public static isLeapYear(year: number): boolean {\n let leapYear = false;\n if ((year % 4) == 0) {\n if ((year % 100) == 0) {\n if ((year % 400) == 0) {\n leapYear = true;\n }\n }\n else {\n leapYear = true;\n }\n }\n else {\n leapYear = false;\n }\n return leapYear;\n }\n\n public static getDate(value: DateTime | Date | string): Date {\n\n let date: Date = null;\n\n if (value instanceof Date) {\n date = value;\n } else if (typeof (value) === 'string' || value instanceof String) {\n date = new Date(value as string);\n } else if (value instanceof DateTime) {\n date = new Date(value.toJSDate());\n }\n\n return date;\n }\n\n public static getDateByAddMoreHours(value: DateTime | Date | string, hours: number): Date {\n\n let date: Date = null;\n\n if (value instanceof Date) {\n date = value;\n } else if (typeof (value) === 'string' || value instanceof String) {\n date = new Date(value as string);\n } else if (value instanceof DateTime) {\n date = new Date(value.toJSDate());\n }\n\n\n\n return new Date(date.getTime() + hours * 60 * 60 * 1000);\n }\n\n public static formatDateTime(value: DateTime | Date | string, timezone: string, dateFormat: string): string {\n const dt = this.getDateTime(value, timezone);\n\n return dt\n ? dt.toFormat(dateFormat)\n : null;\n }\n\n public static formatShortDate(value: DateTime | Date | string, timezone: string): string {\n const dt = this.getDateTime(value, timezone);\n\n return dt\n ? dt.toLocaleString(DateTime.DATE_SHORT)\n : null;\n }\n\n public static formatSimpleTime(value: DateTime | Date | string, timezone: string): string {\n\n const dt = this.getDateTime(value, timezone);\n\n return dt\n ? dt.toLocaleString(DateTime.TIME_SIMPLE)\n : null;\n }\n\n public static formatSimpleTime24(value: DateTime | Date | string, timezone: string): string {\n\n const dt = this.getDateTime(value, timezone);\n\n return dt\n ? dt.toLocaleString(DateTime.TIME_24_SIMPLE)\n : null;\n }\n\n public static customFormat(value: DateTime | Date | string, timezone: string, format: CustomFormat): string {\n\n const dt = this.getDateTime(value, timezone);\n\n const day = dt.get('day') < 10\n ? `0${dt.get('day')}`\n : `${dt.get('day')}`;\n\n const month = dt.get('month') < 10\n ? `0${dt.get('month')}`\n : `${dt.get('month')}`;\n\n const year = dt.get('year');\n\n switch (format) {\n case CustomFormat.YYYYMMDD: {\n return `${year}${month}${day}`;\n }\n case CustomFormat.DDMMYYY: {\n return `${day}${month}${year}`;\n }\n }\n\n\n }\n\n public static getNowAsUtcWithCurrentTime(): DateTime {\n const now = new Date().toISOString();\n const nowAsUtc = DateTime\n .fromISO(now)\n .setZone(DateUtility.getLocalTimeZone())\n .setZone('utc', { keepLocalTime: true });\n return nowAsUtc;\n }\n\n public static getTodayAsUtcWithCurrentTime(): DateTime {\n const now = new Date().toISOString();\n const nowAsUtc = DateTime\n .fromISO(now)\n .setZone(DateUtility.getLocalTimeZone())\n .set({ hour: 0, minute: 0, second: 0 })\n .setZone('utc', { keepLocalTime: true });\n return nowAsUtc;\n }\n\n public static getLocalTimeZone(): string {\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return timezone;\n }\n\n public static getDateTimeAsUtc(value: DateTime): DateTime {\n\n const asUtc = DateTime\n .fromISO(value.toString())\n .setZone(DateUtility.getLocalTimeZone())\n .setZone('utc', { keepLocalTime: true });\n\n return asUtc;\n }\n\n public static getSimpleTime(value: DateTime | Date | string, timezone = 'utc'): string {\n\n let date: DateTime = null;\n\n if (value instanceof Date) {\n date = DateTime.fromJSDate(value);\n } else if (typeof (value) === 'string' || value instanceof String) {\n date = DateTime.fromISO(value.toString());\n } else if (value instanceof DateTime) {\n date = value;\n }\n\n if (date) {\n date = date.setZone(timezone);\n }\n\n return date.toLocaleString(DateTime.TIME_SIMPLE);\n }\n\n public static getDateMed(value: DateTime | Date | string, timezone = 'utc'): string {\n\n let date: DateTime = null;\n\n if (value instanceof Date) {\n date = DateTime.fromJSDate(value);\n } else if (typeof (value) === 'string' || value instanceof String) {\n date = DateTime.fromISO(value.toString());\n } else if (value instanceof DateTime) {\n date = value;\n }\n\n if (date) {\n date = date.setZone(timezone);\n }\n\n return date.toLocaleString(DateTime.DATE_MED);\n }\n\n private static convertToDateTime(value: DateTime | Date | string, timezone = 'utc') {\n let date: DateTime = null;\n\n if (value instanceof Date) {\n date = DateTime.fromJSDate(value);\n } else if (typeof (value) === 'string' || value instanceof String) {\n date = DateTime.fromISO(value.toString());\n } else if (value instanceof DateTime) {\n date = value;\n }\n\n if (date) {\n date = date.setZone(timezone);\n }\n return date;\n }\n\n //Given two date objects, take the date from one and the time from the ohter\n //and create a new date\n //The time parameter is ALWAYS assumed to be UTC as we do not want to do any conversion here\n public static setDateAndTimeFromValues(value: DateTime | Date | string, timeValue: DateTime | Date | string, timezone = 'utc'): DateTime {\n let date: DateTime = null;\n\n date = this.convertToDateTime(value, timezone);\n\n let time: DateTime = null;\n time = this.convertToDateTime(timeValue, 'utc');\n\n date = date.set({\n hour: time.hour,\n minute: time.minute\n });\n return date;\n\n }\n\n public static calcStartOfDayToEndTime(date: DateTime): number {\n return Interval.fromDateTimes(date.startOf('day'), date).length('second');\n }\n\n public static calcStartTimeToEndOfDay(date: DateTime): number {\n return Interval.fromDateTimes(date, date.endOf('day')).length('second');\n }\n\n}\n\n","import * as Enumerable from 'linq';\n\nimport { Source } from '../../enums';\nimport { Entity, ShareableEntity } from '../entity';\nimport { ActivityEntityName } from './activity.entity.name';\n\nexport enum LabelType {\n Job = 'Job',\n Quote = 'Quote',\n Customer = 'Customer',\n User = 'User',\n Overheads = 'Overheads',\n KnowledgeBase = 'Knowledge Base',\n Form = 'Form',\n Finance = 'Finance',\n System = 'System',\n WorkOrderSystem = 'WorkOrderSystem',\n Account = 'Account',\n Contact = 'Contact',\n Zone = 'Zone',\n WorkCategory = 'Work Categories',\n LeadSource = 'Lead Source',\n Lead = 'Lead',\n Opportunity = 'Opportunity',\n OpportunityLost = 'Opportunity Lost',\n Project = 'Project',\n ProjectType = 'Project Type',\n PaymentType = 'Payment Type',\n File = 'File',\n Asset = 'Asset',\n ItemLocation = 'Item Location',\n Task = 'Task',\n Phase = 'Phase',\n Site = 'Site',\n Scheduling = 'Scheduling',\n ServiceType = 'Service Type',\n Subscriptions = 'Subscriptions',\n Agreement = 'Agreement',\n}\n\nexport enum AlertPriority {\n Critical = 'Critical',\n High = 'High',\n Medium = 'Medium',\n Low = 'Low'\n}\n\nexport interface AlertOptions {\n enable: boolean;\n icon?: string;\n priority?: AlertPriority;\n message?: string;\n allowCustomNote?: boolean;\n alertDisplay?: DisplayOptions;\n entitiesDisplay?: ActivityEntityName[];\n}\n\nexport interface DisplayOptions {\n showInFieldApp: boolean;\n showInClientPortal: boolean;\n showInContractorPortal: boolean;\n}\n\nexport interface Label extends LabelEntity {\n alert?: AlertOptions;\n display?: DisplayOptions;\n}\n\nexport interface ServiceTypeTag extends Label {\n data?: {\n /** Only allow single service - can only add this service to a site or asset once. */\n multipleInstances?: boolean\n }\n}\n\n\nexport interface LabelEntity extends ShareableEntity {\n icon?: string;\n type: LabelType;\n}\n\n\nexport class SystemLabels {\n\n /** This appears for Jobs and WorkOrders that are participating in claims. In upstream tenancy (eg. Asset) this will be on the WorkOrder and for downstream (Contractor i.e Alectrix) this will be on the job. All claim tags are mutually exclusive i.e none or only 1 */\n public static claimPending: Label = { _id: '00000000-0000-0000-0000-00000000003', name: 'Claim Pending', type: LabelType.WorkOrderSystem };\n\n /** This label will be set on the Job when a downstream contractor (Alextrix) submits a claim upstream (Assett). All claim tags are mutually exclusive i.e none or only 1*/\n public static claimSubmitted: Label = { _id: '00000000-0000-0000-0000-00000000004', name: 'Claim Submitted', type: LabelType.WorkOrderSystem };\n\n /** This label will be on the WorkOrder for upstream tenancy ie. This occurs when a downstream tenancy (Alextrix) or a contractor using the portal submits a claim. All claim tags are mutually exclusive i.e none or only 1 */\n public static claimReceived: Label = { _id: '00000000-0000-0000-0000-00000000007', name: 'Claim Received', type: LabelType.WorkOrderSystem };\n\n /** This label will be on the WorkOrder when an upstream contractor (Assett) approves a claim. It will also appear on the Job for a downstream tenancy (Alectrix) All claim tags are mutually exclusive i.e none or only 1*/\n public static claimApproved: Label = { _id: '00000000-0000-0000-0000-00000000005', name: 'Claim Approved', type: LabelType.WorkOrderSystem };\n\n /** This label will be on the WorkOrder when an upstream contractor (Assett) rejects a claim. It will also appear on the Job for a downstream tenancy (Alectrix) All claim tags are mutually exclusive i.e none or only 1*/\n public static claimReturned: Label = { _id: '00000000-0000-0000-0000-00000000006', name: 'Claim Returned', type: LabelType.WorkOrderSystem };\n\n public static jobBulkInvoiceLocked: Label = { _id: '00000000-0000-0000-0000-00000000007', name: 'Bulk Invoice Processing', type: LabelType.Job };\n\n public static tenant = {\n //This unassigned is different to the contractor unassigned (i.e. not even assigned to a contractor)\n unassignedWorkOrder: { _id: '00000000-0000-0000-0000-00000000001', name: 'Unassigned', type: LabelType.WorkOrderSystem } as Label,\n claimPending: this.claimPending,\n claimSubmitted: this.claimSubmitted,\n claimApproved: this.claimApproved,\n claimReturned: this.claimReturned,\n claimReceived: this.claimReceived\n };\n\n public static contractor = {\n //This unassigned is different to the tenant unassigned (i.e. its been assigned to a contractor but we dont have a login contact on it yet, only relevant in portal)\n unassignedWorkOrder: { _id: '00000000-0000-0000-0000-00000000002', name: 'Unassigned', type: LabelType.WorkOrderSystem, showOn: [Source.ContractorPortal] } as Label,\n claimPending: this.claimPending,\n claimSubmitted: this.claimSubmitted,\n claimReceived: this.claimReceived, //Don't remove this, this is used in the contractor portal\n claimApproved: this.claimApproved,\n claimReturned: this.claimReturned\n }\n\n public static claimLabels = [\n this.claimPending,\n this.claimSubmitted,\n this.claimReceived,\n this.claimApproved,\n this.claimReturned\n ]\n\n public static claimLabelMap = new Map(this.claimLabels.map(x => [x._id, x]));\n\n public static client = {};\n\n public static isVisible(entity: Entity, destination: Source): boolean {\n\n if (!entity || !destination) return false;\n\n switch (destination) {\n case Source.Web: {\n return Enumerable\n .from(SystemLabels.tenant)\n .any(x => (x.value as Label)?._id === entity._id);\n }\n\n case Source.ContractorPortal: {\n return Enumerable\n .from(SystemLabels.contractor)\n .any(x => (x.value as Label)?._id === entity._id);\n }\n\n default:\n return false;\n }\n }\n\n public static forDestination(labels: Entity[], destination: Source) {\n return Enumerable\n .from(labels)\n .where(l => SystemLabels.isVisible(l, destination))\n .toArray();\n }\n\n}\n\nexport const getClaimActivityName = (label: Entity, upstream: boolean) => {\n\n let labels: Record = null;\n\n if (upstream) {\n\n labels = {\n [SystemLabels.claimReceived._id]: `Claim was received from contractor`,\n [SystemLabels.claimApproved._id]: `Claim was approved`,\n [SystemLabels.claimReturned._id]: `Claim was returned to contractor`,\n };\n\n } else {\n\n labels = {\n [SystemLabels.claimSubmitted._id]: `Claim was submitted`,\n [SystemLabels.claimApproved._id]: `Claim was approved`,\n [SystemLabels.claimReturned._id]: `Claim was returned for rework`,\n }\n\n }\n\n return labels[label._id];\n}","export class CodePriceType {\n static STANDARD_COST_PRICEBOOK = 'STANDARD_COST';\n static TRADE_PRICE_PRICEBOOK = 'TRADE_PRICE';\n static RETAIL_PRICE_PRICEBOOK = 'RETAIL_PRICE';\n static ZERO_PRICE_PRICEBOOK = 'ZERO_PRICE';\n\n static ALL = [CodePriceType.STANDARD_COST_PRICEBOOK, CodePriceType.TRADE_PRICE_PRICEBOOK, CodePriceType.RETAIL_PRICE_PRICEBOOK];\n}","export enum Source {\n Web = 'Web',\n ClientPortal = 'ClientPortal',\n ContractorPortal = 'ContractorPortal',\n ConnectContractor = 'ConnectContractor',\n Mobile = 'Mobile',\n Import = 'Import',\n Manager = \"Manager\",\n Field = \"Field\",\n}\n","import { ActivityEntityName } from './activity.entity.name';\nimport { AlertPriority } from './label';\n\nexport enum AlertType {\n Tag = \"Tag\",\n LimitExceed = \"LimitExceed\",\n BlockLimitExceed = \"BlockLimitExceed\",\n MarginThresholdNotMet = \"MarginThresholdNotMet\"\n}\n\nexport interface Alert {\n name: string;\n message: string;\n color: string;\n icon?: string;\n allowCustomNote: boolean;\n important?: boolean;\n type?: AlertType;\n priority?: AlertPriority;\n}\n\n\nexport const AlertDisplayEntities = [\n // Account, Site, Contact/Employee, Job/Stage, Opportunity & Quote.\n ActivityEntityName.Account,\n ActivityEntityName.Site,\n ActivityEntityName.ContactEmployee,\n ActivityEntityName.Job,\n ActivityEntityName.WorkOrder,\n ActivityEntityName.Opportunity,\n ActivityEntityName.Quote,\n];","export class LexoRank {\n\n constructor(\n readonly value: string,\n readonly bucket = '0'\n ) {\n\n if (!LexoRank.isValidLexValue(value)) {\n throw `Invalid lex value \"${value}\"`;\n }\n\n if (!LexoRank.isValidLexBucket(bucket)) {\n throw `Invalid lex bucket \"${bucket}\"`;\n }\n\n this.value = value;\n this.bucket = bucket;\n\n }\n\n public static first(): Lex {\n return new LexoRank('1').toString();\n }\n\n public static from(lex: Lex) {\n\n if (lex instanceof LexoRank) {\n return new LexoRank(lex.value, lex.bucket);\n }\n\n const { value, bucket } = this.parse(lex);\n return new LexoRank(value, bucket);\n\n }\n\n public static nextBucket(bucket: string) {\n\n if (!this.isValidLexBucket(bucket)) {\n throw `Invalid lex bucket \"${bucket}\"`;\n }\n\n if (bucket === '2') return '0';\n return String.fromCharCode(bucket.charCodeAt(0) + 1);\n\n }\n\n public static prevBucket(bucket: string) {\n if (!this.isValidLexBucket(bucket)) {\n throw `Invalid lex bucket \"${bucket}\"`;\n }\n\n if (bucket === '0') return '2';\n return String.fromCharCode(bucket.charCodeAt(0) - 1);\n }\n\n public static between(lexBefore: Lex | null | undefined, lexAfter: Lex): LexoRank;\n public static between(lexBefore: Lex, lexAfter: Lex | null | undefined): LexoRank;\n public static between(lexBefore: Lex, lexAfter: Lex): LexoRank {\n if (!lexBefore && !lexAfter) {\n throw 'Only one argument may be null';\n }\n\n if (!lexAfter) {\n return LexoRank.from(lexBefore).increment();\n }\n\n if (!lexBefore) {\n return LexoRank.from(lexAfter).decrement();\n }\n\n const before = LexoRank.from(lexBefore);\n const after = LexoRank.from(lexAfter);\n\n if (before.bucket !== after.bucket) {\n throw 'Lex buckets must be the same';\n }\n\n if (!before.lessThan(after)) {\n throw `${before.value} is not less than ${after.value}`;\n }\n\n const incremented = before.increment();\n if (incremented.lessThan(after)) return incremented;\n\n const plus1 = before.append('1');\n if (plus1.lessThan(after)) return plus1;\n\n let pre = '0';\n let plus01 = before.append(`${pre}1`);\n\n while (!plus01.lessThan(after)) {\n pre += '0';\n plus01 = before.append(`${pre}1`);\n }\n\n return plus01;\n }\n\n public toString() {\n return `${this.bucket}|${this.value}`;\n }\n\n public lessThan(lex: Lex) {\n const other = LexoRank.from(lex);\n const len = Math.max(this.value.length, other.value.length);\n\n for (let idx = 0; idx < len; idx++) {\n const charA = this.value[idx];\n const charB = other.value[idx];\n\n if (!charB) return false; // a is more specific\n if (!charA) return true; // b is more specific\n\n if (charA < charB) return true;\n if (charA > charB) return false;\n }\n\n return false;\n }\n\n public increment() {\n for (let idx = this.value.length - 1; idx >= 0; idx--) {\n const char = this.value[idx];\n if (char === 'z') continue;\n\n const newVal = this.value.substring(0, idx) + LexoRank.incrementChar(char);\n return new LexoRank(newVal, this.bucket);\n }\n\n const newVal = this.value + '1';\n return new LexoRank(newVal, this.bucket);\n }\n\n public decrement() {\n const length = this.value.length;\n const char = this.value[length - 1];\n\n if (char !== '1') {\n const newVal = this.value.substring(0, length - 1) + LexoRank.decrementChar(char);\n return new LexoRank(newVal, this.bucket);\n }\n\n if (this.hasNonZeroLeadingChars()) {\n const newVal = LexoRank.cleanTrailingZeros(this.value.substring(0, length - 1));\n return new LexoRank(newVal, this.bucket);\n }\n\n const newVal = '0' + this.value;\n return new LexoRank(newVal, this.bucket);\n }\n\n private hasNonZeroLeadingChars() {\n return this.value.length > 1 && !this.value.substr(0, this.value.length - 1).match(/^0+$/);\n }\n\n private append(str: string) {\n return new LexoRank(this.value + str, this.bucket);\n }\n\n private static parse(lex: string) {\n\n const regex = /^(?[0-2])\\|(?[0-9a-z]*[1-9a-z])$/;\n const match = regex.exec(lex);\n\n if (!match) {\n throw 'Invalid lex string';\n }\n\n return { value: match.groups!.value, bucket: match.groups!.bucket };\n }\n\n private static isValidLexValue(value: string) {\n const regex = /^[0-9a-z]*[1-9a-z]$/;\n return regex.test(value);\n }\n\n private static isValidLexBucket(bucket: string) {\n const regex = /^[0-2]$/;\n return regex.test(bucket);\n }\n\n private static cleanTrailingZeros(str: string) {\n const regex = /^(?[0-9a-z]*[1-9a-z])0*$/;\n const match = regex.exec(str);\n if (!match) {\n throw 'Invalid lex string';\n }\n return match.groups!.value;\n }\n\n private static incrementChar(char: String) {\n if (char === 'z') return '-1';\n if (char === '9') return 'a';\n\n return String.fromCharCode(char.charCodeAt(0) + 1);\n }\n\n private static decrementChar(char: String) {\n if (char === '1') return '-1';\n if (char === 'a') return '9';\n\n return String.fromCharCode(char.charCodeAt(0) - 1);\n }\n}\n\nexport type Lex = LexoRank | string;","import * as Enumerable from 'linq';\n\nimport { Entity, EntityLink } from '../entity';\nimport { WorkOrderStatusSystemName } from '../job';\nimport { Activity } from './activity';\nimport { ActivityType } from './activity.type';\nimport { Location } from './location';\n\nexport interface ActivityLocation {\n _id: string;\n location: Location;\n links: EntityLink[];\n date: Date;\n contact: Entity;\n status: string;\n}\n\nexport const allowTrackingLocationTypes = [\n ActivityType.WorkOrderCheckIn,\n ActivityType.WorkOrderCheckout,\n ActivityType.WorkOrderCompleted,\n ActivityType.WorkOrderStop,\n ActivityType.WorkOrderHold,\n ActivityType.WorkOrderEnroute,\n ActivityType.WorkOrderOnsite,\n]\n\nexport function toActivityLocations(activities: Activity[]): ActivityLocation[] {\n\n if (!activities?.length)\n return [];\n\n const type = {\n [ActivityType.WorkOrderCheckout]: WorkOrderStatusSystemName.CheckedOut,\n [ActivityType.WorkOrderOnsite]: WorkOrderStatusSystemName.Onsite,\n [ActivityType.WorkOrderEnroute]: WorkOrderStatusSystemName.Enroute,\n [ActivityType.WorkOrderCompleted]: WorkOrderStatusSystemName.Completed,\n [ActivityType.WorkOrderHold]: WorkOrderStatusSystemName.OnHold,\n }\n\n const locations = Enumerable.from(activities)\n .where(x => !!x?._id)\n .select(a => {\n\n const location: ActivityLocation = {\n _id: a._id,\n contact: a.createdBy,\n date: a.createdDate,\n location: a.location,\n links: a.links,\n status: type[a.type],\n }\n\n return location;\n\n }).toArray();\n\n\n return locations;\n\n}\n","import { JobBudget } from './job.budget';\nimport { SupervisorEntity } from '../contact';\nimport { Entity, EntityLink, SearchableEntity } from '../entity';\nimport { JobMode } from '../enums';\nimport { Activity, Address, Attachment, Site, SiteTiny } from '../shared';\nimport { InvoiceTiny } from './finance';\nimport { PriorityTiny } from './priority.tiny';\nimport { SystemWorkOrderStatus } from './system.workorder.status';\nimport { WorkFile } from './work.file';\nimport { WorkOrder, WorkOrderWithTechnician } from './workorder';\nimport { JobPolicyThresholds } from '../policies';\nexport interface TinyWorkOrder {\n status: string;\n technician: Entity;\n}\n\nexport interface JobSummary {\n _id: string;\n jobNumber: string;\n dueDate: Date;\n createdDate?: Date;\n startDate?: Date;\n completedDate?: Date;\n priority: Entity;\n address: Address;\n customer: Entity;\n priceBook?: Entity;\n priceBookId: string;\n jobType?: Entity;\n jobTypeId: string;\n status: string;\n owner?: Entity;\n workOrders?: TinyWorkOrder[];\n completed?: number;\n technician?: Entity;\n jobStartDate?: Date;\n jobDueDate?: Date;\n labels?: Entity[];\n}\n\nexport interface JobListView {\n _id: string;\n jobNumber: string;\n dueDate: Date;\n createdAt?: Date;\n updatedAt?: Date;\n startDate?: Date;\n priority: Entity;\n jobType?: Entity;\n priceBook?: Entity;\n contactPhone: String;\n contactName: String;\n address: Address;\n customer: Entity;\n status: String;\n workOrderCount: number;\n completed?: number;\n owner?: Entity;\n labels?: Entity[],\n customerWO?: String,\n billingCompany?: Entity;\n}\n\nexport interface JobWithWorkOrdersView extends JobListView {\n workOrders?: WorkOrderWithTechnician[];\n}\n\nexport interface ChildJob {\n _id: string;\n jobNumber?: string;\n dueDate?: Date;\n note?: string;\n}\n\nexport interface JobDateSort {\n asc: Date;\n desc: Date;\n}\n\nexport interface JobSorting {\n dueDate: JobDateSort;\n completedDate: JobDateSort;\n priority: number;\n}\n\n\nexport interface Job extends SearchableEntity {\n\n // tenantId?: string;\n mode: JobMode;\n createdBy: Entity;\n createdAt?: Date;\n updatedAt?: Date;\n imported?: boolean;\n status?: SystemWorkOrderStatus;\n source?: JobSource;\n\n jobNumber: string;\n startDate?: Date;\n dueDate: Date;\n completedDate?: Date;\n completedNote?: string;\n invoice?: InvoiceTiny;\n invoices?: string[];\n\n description: string;\n customer?: Entity;\n customerPO?: string;\n customerWO?: string;\n owner?: Entity;\n fieldSupervisor?: Entity;\n pricebook?: Entity;\n billingCompany?: Entity;\n site?: SiteTiny;\n\n attachments?: Attachment[];\n\n priority?: PriorityTiny;\n type?: Entity;\n\n supervisor?: SupervisorEntity;\n workOrders?: WorkOrder[];\n workFiles?: WorkFile[];\n\n buyPrice?: number;\n sellPrice?: number;\n\n quoteId?: string;\n quoteNumber?: string;\n\n additionalNote?: string;\n finalisedDate?: Date;\n finalisedNote?: string;\n labels?: Entity[];\n\n sorting?: JobSorting;\n customFields?: any;\n zones?: Entity[];\n integrationId?: string;\n defectCount?: number;\n\n connectToken?: string; // used to store the workbuddy connect token.\n recurringJob?: Entity;\n recurrenceDate?: Date;\n template?: Entity;\n\n budget?: JobBudget;\n\n opportunity?: Entity;\n quote?: Entity;\n\n firstDispatchDate?: Date;\n\n agreement?: Entity;\n policy?: Entity;\n thresholds?: JobPolicyThresholds;\n workorderDispatchTheme?: Entity;\n\n claimToken?: string;\n systemLabels?: Entity[];\n\n links?: EntityLink[];\n\n idempotentKey?: string;\n\n integrationFields?: any;\n}\n\n\nexport interface ArchiveJob extends Job {\n archive: boolean;\n activity?: Activity;\n}\n\nexport enum JobSource {\n Active = 'jobs',\n Closed = 'closed',\n Archive = 'archive',\n Export = 'export',\n Manually = 'manually',\n Imported = 'imported',\n Recurring = 'recurring',\n BulkImport = 'bulkImport',\n}\n\nexport enum JobCommandIds {\n GetJobAddresses = 'GetJobAddress',\n}","\nexport enum SystemWorkOrderStatus {\n Open = 'Open',\n InProgress = 'In Progress',\n OnHold = 'On Hold',\n Completed = 'Completed',\n Finalised = 'Finalised',\n Closed = 'Closed',\n Canceled = 'Canceled'\n}\n\n//Status values that are still considered 'Open'\nexport const OpenSystemWorkOrderStatusValues = [SystemWorkOrderStatus.Open, SystemWorkOrderStatus.InProgress, SystemWorkOrderStatus.OnHold];\n\n","export enum WorkOrderStatusSystemName {\n New = 'New',\n Assigned = 'Assigned',\n Dispatched = 'Dispatched',\n SubcontractorDispatched = 'Subcontractor Dispatched',\n Enroute = 'Enroute',\n Onsite = 'Onsite',\n CheckedOut = 'Checked Out',\n InProgress = 'In Progress',\n OnHold = 'On Hold',\n Billed = 'Billed',\n Completed = 'Completed',\n Closed = 'Closed',\n Canceled = 'Canceled',\n Paid = 'Paid',\n Finalised = 'Finalised',\n ResumeAllocation = 'Resume',\n Reverse = 'Reverse'\n}\n\nexport const ActiveJobStatus = [\n WorkOrderStatusSystemName.Enroute,\n WorkOrderStatusSystemName.Onsite\n];\n","\nimport { FiltersRelativeDateMethod } from '../../utilities';\nimport { WorkOrderFilters } from '../../shared/workorder.filters';\nimport { FilterValue } from '../shared/filter';\nimport { JobGroupBy, JobSource, JobViewType } from './index';\nimport { SortJobOptions } from './job.sort.options';\nimport { SystemWorkOrderStatus } from './system.workorder.status';\n\nexport interface UserFilterValue extends FilterValue {\n technician?: boolean;\n}\n\nexport interface StatusFilterValue extends FilterValue {\n isSystemStatus: boolean;\n systemStatus: SystemWorkOrderStatus;\n sortOrder: number;\n systemName: string;\n}\n\nexport interface JobViewFilters extends WorkOrderFilters {\n\n _id?: string;\n\n viewType?: JobViewType;\n groupBy?: JobGroupBy;\n totalWorkOrders?: number;\n total?: number;\n sort?: SortJobOptions;\n displayType?: string;\n\n // Multi - Need to check data inside\n labels?: FilterValue[];\n text?: string;\n\n // Job Filters\n customers?: FilterValue[];\n priceBooks?: FilterValue[];\n billingCompanies?: FilterValue[];\n workCategories?: FilterValue[];\n jobTypes?: FilterValue[];\n priorities?: FilterValue[];\n zones?: FilterValue[];\n owners?: UserFilterValue[];\n fieldSupervisors?: UserFilterValue[];\n\n createdAt?: FiltersRelativeDateMethod;\n dueDate?: FiltersRelativeDateMethod;\n completedDate?: FiltersRelativeDateMethod;\n finalisedDate?: FiltersRelativeDateMethod;\n\n // Work Order Filters\n resources?: UserFilterValue[];\n statuses?: StatusFilterValue[];\n timezones?: string[];\n states?: string[];\n\n // Not Implemented\n overDueDate?: Date;\n dueBeforeDate?: Date;\n unassigned?: boolean;\n employees?: UserFilterValue[];\n technicians?: UserFilterValue[];\n\n claimTags?: FilterValue[];\n\n // Not sure what this is for\n finance?: FilterValue[];\n\n\n}\n\n\nexport interface JobViewFiltersRaw extends JobViewFilters {\n jobNumbers: string[];\n}\n\nexport interface WorkOrderFiltersRequest {\n source: JobSource;\n filter: WorkOrderFilters;\n}\n\nexport interface SelectedItemRequest {\n source: JobSource;\n id: string;\n}\n\nexport enum FilterFieldName {\n Customer = 'Customer',\n PriceBook = 'PriceBook',\n JobType = 'JobType',\n Priority = 'Priority',\n Technician = 'Technician',\n Owner = 'Owner',\n FieldSupervisor = 'FieldSupervisor',\n Status = 'Status',\n Label = 'Label',\n Zones = 'Zones',\n Resources = 'Resources',\n BillingCompanies = 'BillingCompanies',\n WorkCategories = 'WorkCategories',\n CreatedAt = 'CreatedAt',\n DueDate = 'DueDate',\n CompletedDate = 'CompletedDate',\n FinalisedDate = 'FinalisedDate',\n}\n\nexport enum FinanceFilter {\n Invoiced = 'Invoiced',\n Billed = 'Billed'\n}\n\nexport function isJobViewFiltersRefined(refinements: JobViewFilters): boolean {\n if (!refinements) return false;\n if (refinements.text && (refinements.text !== null || refinements.text === '')) return true;\n if (refinements.customers && refinements.customers.length) return true;\n if (refinements.billingCompanies && refinements.billingCompanies.length) return true;\n if (refinements.owners && refinements.owners.length) return true;\n if (refinements.priceBooks && refinements.priceBooks.length) return true;\n if (refinements.priorities && refinements.priorities.length) return true;\n if (refinements.statuses && refinements.statuses.length) return true;\n if (refinements.resources && refinements.resources.length) return true;\n if (refinements.jobTypes && refinements.jobTypes.length) return true;\n if (refinements.labels && refinements.labels.length) return true;\n if (refinements.zones && refinements.zones.length) return true;\n if (refinements.finance && refinements.finance.length) return true;\n if (refinements.fieldSupervisors && refinements.fieldSupervisors.length) return true;\n if (refinements.workCategories && refinements.workCategories.length) return true;\n\n if (refinements.createdAt) return true;\n if (refinements.dueDate) return true;\n if (refinements.completedDate) return true;\n if (refinements.finalisedDate) return true;\n return false;\n}\n\n\n","\nexport enum JobViewType {\n Job = 'Job',\n WorkOrder = 'WorkOrder'\n}\n","export enum JobGroupBy {\n None = 'None',\n Job = 'Job',\n}\n","import { TenantEntity } from '../entity';\nimport { Entity, JobSource, JobViewFilters } from '../index';\n\n\nexport interface JobViewSummary {\n _id: string;\n name: string;\n isDefault: boolean;\n system: boolean;\n selected: boolean;\n filters?: JobViewFilters;\n ownerId?: string;\n canEditView?: boolean;\n}\n\nexport enum DefaultView {\n Active = 'active',\n ActivePro = 'activepro',\n Overdue = 'overdue',\n DueIn7Days = 'duein7days',\n Unassigned = 'unassigned',\n NotDispatched = 'notdispatched',\n Closed = 'closed',\n Archive = 'archive',\n Export = 'export',\n Empty = 'empty'\n}\n\nexport interface JobView extends TenantEntity {\n description: string;\n filters: JobViewFilters;\n owner: Entity;\n isDefault?: boolean;\n isPublic?: boolean;\n system?: boolean;\n source?: JobSource;\n visibility?: JobViewVisibility;\n sharedWith?: Entity[];\n canEditView?: boolean;\n}\n\nexport enum JobSearchMode {\n CurrentJob = 'CurrentJob',\n ArchiveJob = 'ArchiveJob'\n}\n\nexport enum JobViewVisibility {\n Public = 'public',\n Private = 'private',\n Shared = 'shared'\n}\n","export enum JobDisplay {\n Kanban = 'Kanban',\n List = 'List'\n}\n","export type SortType = 'ASC' | 'DESC';\n\nexport enum SortJobBy {\n None = 'none',\n CreatedDate = 'createdDate',\n DueDate = 'dueDate',\n CompletedDate = 'completedDate',\n SystemPriority = 'systemPriority'\n}\n\nexport interface SortJobOptions {\n sortBy: SortJobBy;\n sortType: SortType;\n}\n","\nexport enum AccountingStatus {\n Pending = 'Pending',\n Success = 'Success',\n Error = 'Error'\n}\n\nexport enum AccountingSystem {\n Xero = 'Xero',\n MYOB = 'Myob',\n QuickBooks = 'QuickBooks',\n Manual = 'Manual',\n Jobpac = 'Viewpoint Jobpac Connect'\n}\n\nexport enum TaxType {\n GSTOnImport = 'GSTONIMPORTS',\n TaxOnPurchase = 'INPUT',\n TaxExempt = 'NONE',\n TaxOnSale = 'OUTPUT'\n}\n\nexport enum TrackingCategory {\n JobType = 'Job Type',\n Customer = 'Customer',\n JobPriority = 'Job Priority',\n StageCategory = 'Stage Category',\n ItemCategory = 'Item Category',\n ItemSubCategory = 'Item Subcategory',\n CatalogueTracking1 = 'Item Tracking Category 1',\n CatalogueTracking2 = 'Item Tracking Category 2'\n}\n\nexport enum MappingTrackingCategory {\n TrackingCategory1 = 'trackingCategory1',\n TrackingCategory2 = 'trackingCategory2'\n}\n\n","import * as Enumerable from 'linq';\nimport { AccountingSystemMapping, Entity, InvoiceContact, QuickbookTaxInclusiveOption, TaxInclusiveOption, TaxRateMapping } from '../entities';\n\nexport class AccountingSystemMappingUtility {\n\n public static getInvoiceGL(mapping: AccountingSystemMapping): Entity {\n if (!mapping || !mapping.invoiceGL) return this.getNotMapped();\n return mapping.invoiceGL;\n }\n\n public static getItemRef(mapping: AccountingSystemMapping): Entity {\n if (!mapping || !mapping.item) return this.getNotMapped();\n return mapping.item;\n }\n\n public static getBillGL(mapping: AccountingSystemMapping): Entity {\n if (!mapping || !mapping.billGL) return this.getNotMapped();\n return mapping.billGL;\n }\n\n public static getPurchaseGL(mapping: AccountingSystemMapping): Entity {\n if (!mapping || !mapping.purchaseGL)\n return this.getNotMapped();\n\n return mapping.purchaseGL;\n }\n\n public static getQuickbookTaxInclusiveOption(option: TaxInclusiveOption): QuickbookTaxInclusiveOption {\n\n switch (option) {\n case TaxInclusiveOption.Exclusive:\n return QuickbookTaxInclusiveOption.Exclusive;\n case TaxInclusiveOption.Inclusive:\n return QuickbookTaxInclusiveOption.Inclusive;\n case TaxInclusiveOption.NoTax:\n return QuickbookTaxInclusiveOption.NoTax;\n\n }\n\n }\n\n public static getTaxType(mapping: AccountingSystemMapping, taxRateId: string): string {\n if (!mapping || !taxRateId) return null;\n\n const tr = Enumerable\n .from(mapping.incomeTaxRates)\n .concat(mapping.expenseTaxRates)\n .where(x => x.taxRateId === taxRateId)\n .select(x => x.integrationId ? x.integrationId._id : null)\n .firstOrDefault();\n\n return tr;\n }\n\n public static getTaxTypeMapping(mapping: AccountingSystemMapping, taxRateId: string): TaxRateMapping {\n if (!mapping || !taxRateId) return null;\n\n const tr = Enumerable\n .from(mapping.incomeTaxRates)\n .concat(mapping.expenseTaxRates)\n .where(x => x.taxRateId === taxRateId)\n .firstOrDefault();\n\n return tr;\n }\n\n public static getCustomer(mapping: AccountingSystemMapping, customerId: string): string {\n if (!mapping) return null;\n\n const customer = Enumerable.from(mapping.customers).firstOrDefault(x => x.customerId === customerId);\n\n return customer\n ? customer?.contactId\n : null;\n\n }\n\n public static getSubcontractor(mapping: AccountingSystemMapping, technicianId: string): string {\n if (!mapping) return null;\n\n const technician = Enumerable.from(mapping.technicians).firstOrDefault(x => x.technicianId === technicianId);\n\n return technician\n ? technician?.contactId\n : null;\n\n }\n\n public static getSupplier(mapping: AccountingSystemMapping, supplierId: string): string {\n if (!mapping) return null;\n\n const supplier = Enumerable.from(mapping.suppliers).firstOrDefault(x => x.supplierId === supplierId);\n\n return supplier\n ? supplier?.contactId\n : null;\n\n }\n\n public static getContact(mapping: AccountingSystemMapping, contact: InvoiceContact, isBill: boolean) {\n let contactId: string;\n if (isBill) {\n contactId = contact.type === 'Supplier'\n ? AccountingSystemMappingUtility.getSupplier(mapping, contact._id)\n : AccountingSystemMappingUtility.getSubcontractor(mapping, contact._id)\n } else {\n contactId = AccountingSystemMappingUtility.getCustomer(mapping, contact._id);\n }\n return contactId\n }\n\n private static getNotMapped(): Entity {\n return {\n _id: null,\n name: 'Not Mapped'\n } as Entity;\n }\n\n}\n","import * as Enumerable from 'linq';\nimport { EmbeddedCode, CodeStatus, LabourCodeId, TimesheetEntry, FinanceSettings, CodeInvoiceStatus, PrepaymentSetting, PrepaymentCodeId, PrepaymentCodeName, ClaimItem, CatalogueCode, ToEmbeddedCode } from '../entities';\nimport { WorkOrderUtility } from './workorder.utility';\nimport { Source } from '../enums';\nimport Decimal from 'decimal.js';\nimport { v4 } from 'uuid';\n\nexport interface TotalCodeInfo {\n totalSell: number;\n totalBuy: number;\n totalCodes: number;\n}\n\nexport class CodeUtility {\n\n public static expandUploadedCode(code: CatalogueCode, excludeCancelled: boolean = true): EmbeddedCode[] {\n\n let builtCodes: EmbeddedCode[] = [];\n\n switch (code.type) {\n case 'SERVICE':\n case 'INVENTORY':\n case 'NON-INVENTORY':\n case 'INCENTIVE': {\n builtCodes = [code];\n break;\n }\n\n case 'BUNDLE': {\n let childCodes = [...(code?.childCodes ?? [])] as CatalogueCode[];\n const parentCode = { ...code, quantity: code?.quantity ?? 1, childCodes: [], type: 'BUNDLE', data: { beforeId: code?._id } } as CatalogueCode;\n\n childCodes = Enumerable\n .from(childCodes)\n .select(x => {\n\n const safeChildQuantity = x?.quantity ?? 1;\n const childQuantity = safeChildQuantity * parentCode.quantity;\n\n return {\n ...x,\n parentType: 'BUNDLE',\n quantity: childQuantity,\n data: { parentCodeId: parentCode._id }\n } as CatalogueCode;\n })\n .toArray();\n\n\n builtCodes = [...builtCodes, { ...parentCode }, ...childCodes];\n break;\n }\n\n case 'KIT': {\n let childCodes = [...(code?.childCodes ?? [])] as CatalogueCode[];\n const parentCode = { ...code, quantity: code?.quantity ?? 1, childCodes: [], type: 'KIT', data: { beforeId: code?._id } } as CatalogueCode;\n\n childCodes = Enumerable\n .from(childCodes)\n .select(x => {\n const safeChildQuantity = x?.quantity ?? 1;\n const childQuantity = safeChildQuantity * parentCode.quantity;\n\n return {\n ...x,\n parentType: 'KIT',\n quantity: childQuantity,\n data: { parentCodeId: parentCode._id }\n };\n })\n .toArray() as CatalogueCode[];\n\n\n builtCodes = [...builtCodes, { ...parentCode }, ...(childCodes ?? [])] as CatalogueCode[];\n break;\n }\n }\n\n builtCodes = Enumerable\n .from(builtCodes)\n .select(x => {\n //Do it in one select so we dont lose the\n //extra fields from code that is passed in\n\n //Not sure why we need to do this, but it's here\n //This change broke a bunch of stuff and this is the second attempt to fix it\n //previously, we never made the call to ToEmbeddedCode\n const catalogueCode = ToEmbeddedCode(x);\n const catalogueCodeId = catalogueCode._id;\n const item = {\n ...catalogueCode,\n ...x,\n _id: v4(),\n status: x.status ?? CodeStatus.Normal,\n customBuyPrice: x.customBuyPrice ?? false,\n customSellPrice: x.customSellPrice ?? false,\n buyPrice: x.buyPrice ?? 0,\n sellPrice: x.sellPrice ?? 0,\n quantity: x.quantity ?? 1,\n location: x.location,\n note: x.note,\n // codeUoM: x.codeUoM ?? ,\n catalogueCodeId,\n };\n return item;\n })\n .toArray();\n //Allow cancelled codes to come through, because some awesome AGS integration\n //will send cancelled codes on creation and they need to be seen :\\\n const validItems = WorkOrderUtility.sortCodes(builtCodes, excludeCancelled);\n\n return validItems;\n }\n\n public static isExcludedForSellPrice(code: EmbeddedCode): boolean {\n if (!code) return false;\n return (!code.parentType || code.parentType !== 'BUNDLE');\n }\n\n public static isExcludedForBuyPrice(code: EmbeddedCode): boolean {\n if (!code) return false;\n return (!code.type || code.type !== 'BUNDLE');\n }\n\n public static addSourceToCodes(codes: EmbeddedCode[], source: Source): EmbeddedCode[] {\n\n return Enumerable.from(codes)\n .select(x => {\n\n if (!x['source']) {\n x['source'] = source;\n }\n\n return x;\n })\n .toArray();\n }\n\n // HUY Le: When update the logic in this method, please update the method getTotalOneCodeInfo as well. \n // I was scare to update this method because, so I create the getTotalOneCodeInfo to calculate the subTotalPrice of one code.\n public static getTotalCodesInfo(codes: EmbeddedCode[], appliedUoM = false): TotalCodeInfo {\n\n if (!codes?.length)\n return { totalSell: 0, totalBuy: 0, totalCodes: 0 } as TotalCodeInfo;\n\n const safeCodes = Enumerable.from(codes)\n .where(x => !!x?._id)\n .where(x => x.status !== CodeStatus.Cancelled && x.type !== 'INCENTIVE');\n\n const totalSell = safeCodes\n .select(x => {\n\n const qty = x?.quantity ?? 1;\n\n const price = new Decimal(x?.sellPrice ?? 0).toDP(4).toNumber();\n\n const conversionRate = x?.codeUoM?.conversionRate ?? 1;\n const lineSellPrice = appliedUoM\n ? qty * price\n : qty * conversionRate * price;\n\n const round = new Decimal(lineSellPrice ?? 0).toDP(2).toNumber();\n\n return round;\n })\n .sum();\n\n\n const totalBuy = safeCodes\n .select(x => {\n\n const qty = x?.quantity ?? 1;\n\n const price = new Decimal(x?.buyPrice ?? 0).toDP(4).toNumber();\n const conversionRate = x?.codeUoM?.conversionRate ?? 1;\n const lineBuyPrice = appliedUoM\n ? qty * price\n : qty * conversionRate * price;\n\n\n const round = new Decimal(lineBuyPrice ?? 0).toDP(2).toNumber();\n\n return round;\n })\n .sum();\n\n const info: TotalCodeInfo = { totalSell, totalBuy, totalCodes: codes?.length ?? 0 };\n\n return info;\n }\n\n public static getTotalOneCodeInfo(code: EmbeddedCode, appliedUoM = false): TotalCodeInfo {\n\n if (!code) {\n return { totalSell: 0, totalBuy: 0, totalCodes: 0 } as TotalCodeInfo;\n }\n\n const conversionRate = code?.codeUoM?.conversionRate ?? 1;\n const qty = code?.quantity ?? 1;\n\n const sellPrice = new Decimal(code?.sellPrice ?? 0).toDP(4).toNumber();\n const lineSellPrice = appliedUoM\n ? qty * sellPrice\n : qty * conversionRate * sellPrice;\n const totalSell = new Decimal(lineSellPrice ?? 0).toDP(2).toNumber();\n\n const buyPrice = new Decimal(code?.buyPrice ?? 0).toDP(4).toNumber();\n const lineBuyPrice = appliedUoM\n ? qty * buyPrice\n : qty * conversionRate * buyPrice;\n const totalBuy = new Decimal(lineBuyPrice ?? 0).toDP(2).toNumber();\n\n const info: TotalCodeInfo = { totalSell, totalBuy, totalCodes: 1 };\n return info;\n }\n\n public static getClaimItemsTotal(items: ClaimItem[]): number {\n\n if (!items?.length)\n return 0;\n\n const total = Enumerable.from(items)\n .where(x => !!x?._id)\n .where(x => x.status !== CodeStatus.Cancelled && x.type !== 'INCENTIVE')\n .select(x => {\n\n const qty = x?.quantity ?? 1;\n const price = x?.price ?? 0;\n const conversionRate = x?.codeUoM?.conversionRate ?? 1;\n\n const lineSellPrice = qty * conversionRate * price;\n\n const round = new Decimal(lineSellPrice ?? 0).toDP(2).toNumber();\n\n return round;\n })\n .sum();\n\n return total;\n }\n\n public static filterClaimItems(items: ClaimItem[], filter: string): ClaimItem[] {\n\n if (!filter) return items;\n\n const searchRegex = new RegExp(filter, 'i');\n\n const filteredItems = items.filter(item => {\n const propertiesToSearch = [\n item.name,\n item.description,\n item.note,\n item.status,\n item.price?.toString(),\n item.category?.name,\n item.category?.subCategoryName\n ].filter(Boolean); // Remove undefined/null properties\n\n return propertiesToSearch.some(property => searchRegex.test(property));\n });\n\n return filteredItems;\n }\n\n\n public static getLabourCode(timesheets: Partial[], finance: FinanceSettings): EmbeddedCode {\n\n if (!timesheets?.length)\n return null;\n\n const totalSell = Enumerable.from(timesheets).select(x => x.total?.amount).sum();\n const timesheetIds = Enumerable.from(timesheets)\n .select(x => x?._id)\n .toArray();\n\n const { labour, defaultUoM } = finance;\n\n const code = {\n _id: LabourCodeId,\n name: labour?.name,\n description: 'Not Set',\n buyPrice: 0,\n sellPrice: totalSell,\n customBuyPrice: true,\n customSellPrice: true,\n codeInvoicingStatus: CodeInvoiceStatus.Billable,\n active: true,\n uom: defaultUoM?.name,\n codeUoM: {\n _id: defaultUoM?._id,\n uom: defaultUoM,\n conversionRate: 1\n },\n quantity: 1,\n type: 'LABOUR',\n status: CodeStatus.Normal,\n timesheetIds: timesheetIds\n } as EmbeddedCode;\n\n\n return code;\n }\n\n public static getPrepaymentInvoiceCode(setting: PrepaymentSetting, name: string, description: string, totalSell: number): EmbeddedCode {\n\n const code: EmbeddedCode = {\n _id: setting?._id || PrepaymentCodeId || v4(),\n name: name || setting?.name || PrepaymentCodeName,\n description,\n buyPrice: 0,\n sellPrice: totalSell,\n customBuyPrice: true,\n customSellPrice: true,\n codeInvoicingStatus: CodeInvoiceStatus.Billable,\n active: true,\n quantity: 1,\n type: 'LABOUR',\n status: undefined,\n category: undefined\n };\n\n\n\n return code;\n }\n\n}\n","/*!\r\n * decimal.js v10.5.0\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js\r\n * Copyright (c) 2025 Michael Mclaughlin \r\n * MIT Licence\r\n */\n\n// ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\n\n// The maximum exponent magnitude.\n// The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\nvar EXP_LIMIT = 9e15,\n // 0 to 9e15\n\n // The limit on the value of `precision`, and on the value of the first argument to\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\n MAX_DIGITS = 1e9,\n // 0 to 1e9\n\n // Base conversion alphabet.\n NUMERALS = '0123456789abcdef',\n // The natural logarithm of 10 (1025 digits).\n LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\n // Pi (1025 digits).\n PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\n // The initial configuration properties of the Decimal constructor.\n DEFAULTS = {\n // These values must be integers within the stated ranges (inclusive).\n // Most of these values can be changed at run-time using the `Decimal.config` method.\n\n // The maximum number of significant digits of the result of a calculation or base conversion.\n // E.g. `Decimal.config({ precision: 20 });`\n precision: 20,\n // 1 to MAX_DIGITS\n\n // The rounding mode used when rounding to `precision`.\n //\n // ROUND_UP 0 Away from zero.\n // ROUND_DOWN 1 Towards zero.\n // ROUND_CEIL 2 Towards +Infinity.\n // ROUND_FLOOR 3 Towards -Infinity.\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\n //\n // E.g.\n // `Decimal.rounding = 4;`\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\n rounding: 4,\n // 0 to 8\n\n // The modulo mode used when calculating the modulus: a mod n.\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\n // The remainder (r) is calculated as: r = a - n * q.\n //\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\n // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\n // HALF_EVEN 6 The IEEE 754 remainder function.\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\n //\n // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\n // division (9) are commonly used for the modulus operation. The other rounding modes can also\n // be used, but they may not give useful results.\n modulo: 1,\n // 0 to 9\n\n // The exponent value at and beneath which `toString` returns exponential notation.\n // JavaScript numbers: -7\n toExpNeg: -7,\n // 0 to -EXP_LIMIT\n\n // The exponent value at and above which `toString` returns exponential notation.\n // JavaScript numbers: 21\n toExpPos: 21,\n // 0 to EXP_LIMIT\n\n // The minimum exponent value, beneath which underflow to zero occurs.\n // JavaScript numbers: -324 (5e-324)\n minE: -EXP_LIMIT,\n // -1 to -EXP_LIMIT\n\n // The maximum exponent value, above which overflow to Infinity occurs.\n // JavaScript numbers: 308 (1.7976931348623157e+308)\n maxE: EXP_LIMIT,\n // 1 to EXP_LIMIT\n\n // Whether to use cryptographically-secure random number generation, if available.\n crypto: false // true/false\n },\n // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\n\n inexact,\n quadrant,\n external = true,\n decimalError = '[DecimalError] ',\n invalidArgument = decimalError + 'Invalid argument: ',\n precisionLimitExceeded = decimalError + 'Precision limit exceeded',\n cryptoUnavailable = decimalError + 'crypto unavailable',\n tag = '[object Decimal]',\n mathfloor = Math.floor,\n mathpow = Math.pow,\n isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\n isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\n isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\n BASE = 1e7,\n LOG_BASE = 7,\n MAX_SAFE_INTEGER = 9007199254740991,\n LN10_PRECISION = LN10.length - 1,\n PI_PRECISION = PI.length - 1,\n // Decimal.prototype object\n P = {\n toStringTag: tag\n };\n\n// Decimal prototype methods\n\n/*\r\n * absoluteValue abs\r\n * ceil\r\n * clampedTo clamp\r\n * comparedTo cmp\r\n * cosine cos\r\n * cubeRoot cbrt\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy divToInt\r\n * equals eq\r\n * floor\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * hyperbolicCosine cosh\r\n * hyperbolicSine sinh\r\n * hyperbolicTangent tanh\r\n * inverseCosine acos\r\n * inverseHyperbolicCosine acosh\r\n * inverseHyperbolicSine asinh\r\n * inverseHyperbolicTangent atanh\r\n * inverseSine asin\r\n * inverseTangent atan\r\n * isFinite\r\n * isInteger isInt\r\n * isNaN\r\n * isNegative isNeg\r\n * isPositive isPos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * [maximum] [max]\r\n * [minimum] [min]\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * round\r\n * sine sin\r\n * squareRoot sqrt\r\n * tangent tan\r\n * times mul\r\n * toBinary\r\n * toDecimalPlaces toDP\r\n * toExponential\r\n * toFixed\r\n * toFraction\r\n * toHexadecimal toHex\r\n * toNearest\r\n * toNumber\r\n * toOctal\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits toSD\r\n * toString\r\n * truncated trunc\r\n * valueOf toJSON\r\n */\n\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\nP.absoluteValue = P.abs = function () {\n var x = new this.constructor(this);\n if (x.s < 0) x.s = 1;\n return finalise(x);\n};\n\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\nP.ceil = function () {\n return finalise(new this.constructor(this), this.e + 1, 2);\n};\n\n/*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\nP.clampedTo = P.clamp = function (min, max) {\n var k,\n x = this,\n Ctor = x.constructor;\n min = new Ctor(min);\n max = new Ctor(max);\n if (!min.s || !max.s) return new Ctor(NaN);\n if (min.gt(max)) throw Error(invalidArgument + max);\n k = x.cmp(min);\n return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\n};\n\n/*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value,\r\n * NaN if the value of either Decimal is NaN.\r\n *\r\n */\nP.comparedTo = P.cmp = function (y) {\n var i,\n j,\n xdL,\n ydL,\n x = this,\n xd = x.d,\n yd = (y = new x.constructor(y)).d,\n xs = x.s,\n ys = y.s;\n\n // Either NaN or ±Infinity?\n if (!xd || !yd) {\n return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\n }\n\n // Either zero?\n if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\n\n // Signs differ?\n if (xs !== ys) return xs;\n\n // Compare exponents.\n if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\n xdL = xd.length;\n ydL = yd.length;\n\n // Compare digit by digit.\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\n if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\n }\n\n // Compare lengths.\n return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\n};\n\n/*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0) = 1\r\n * cos(-0) = 1\r\n * cos(Infinity) = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN) = NaN\r\n *\r\n */\nP.cosine = P.cos = function () {\n var pr,\n rm,\n x = this,\n Ctor = x.constructor;\n if (!x.d) return new Ctor(NaN);\n\n // cos(0) = cos(-0) = 1\n if (!x.d[0]) return new Ctor(1);\n pr = Ctor.precision;\n rm = Ctor.rounding;\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\n Ctor.rounding = 1;\n x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\n Ctor.precision = pr;\n Ctor.rounding = rm;\n return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\n};\n\n/*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * cbrt(0) = 0\r\n * cbrt(-0) = -0\r\n * cbrt(1) = 1\r\n * cbrt(-1) = -1\r\n * cbrt(N) = N\r\n * cbrt(-I) = -I\r\n * cbrt(I) = I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\nP.cubeRoot = P.cbrt = function () {\n var e,\n m,\n n,\n r,\n rep,\n s,\n sd,\n t,\n t3,\n t3plusx,\n x = this,\n Ctor = x.constructor;\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\n external = false;\n\n // Initial estimate.\n s = x.s * mathpow(x.s * x, 1 / 3);\n\n // Math.cbrt underflow/overflow?\n // Pass x to Math.pow as integer, then adjust the exponent of the result.\n if (!s || Math.abs(s) == 1 / 0) {\n n = digitsToString(x.d);\n e = x.e;\n\n // Adjust n exponent so it is a multiple of 3 away from x exponent.\n if (s = (e - n.length + 1) % 3) n += s == 1 || s == -2 ? '0' : '00';\n s = mathpow(n, 1 / 3);\n\n // Rarely, e may be one less than the result exponent value.\n e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\n if (s == 1 / 0) {\n n = '5e' + e;\n } else {\n n = s.toExponential();\n n = n.slice(0, n.indexOf('e') + 1) + e;\n }\n r = new Ctor(n);\n r.s = x.s;\n } else {\n r = new Ctor(s.toString());\n }\n sd = (e = Ctor.precision) + 3;\n\n // Halley's method.\n // TODO? Compare Newton's method.\n for (;;) {\n t = r;\n t3 = t.times(t).times(t);\n t3plusx = t3.plus(x);\n r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\n\n // TODO? Replace with for-loop and checkRoundingDigits.\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\n n = n.slice(sd - 3, sd + 1);\n\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\n // , i.e. approaching a rounding boundary, continue the iteration.\n if (n == '9999' || !rep && n == '4999') {\n // On the first iteration only, check to see if rounding up gives the exact result as the\n // nines may infinitely repeat.\n if (!rep) {\n finalise(t, e + 1, 0);\n if (t.times(t).times(t).eq(x)) {\n r = t;\n break;\n }\n }\n sd += 4;\n rep = 1;\n } else {\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\n // If not, then there are further digits and m will be truthy.\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\n // Truncate to the first rounding digit.\n finalise(r, e + 1, 1);\n m = !r.times(r).times(r).eq(x);\n }\n break;\n }\n }\n }\n external = true;\n return finalise(r, e, Ctor.rounding, m);\n};\n\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\nP.decimalPlaces = P.dp = function () {\n var w,\n d = this.d,\n n = NaN;\n if (d) {\n w = d.length - 1;\n n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\n\n // Subtract the number of trailing zeros of the last word.\n w = d[w];\n if (w) for (; w % 10 == 0; w /= 10) n--;\n if (n < 0) n = 0;\n }\n return n;\n};\n\n/*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\nP.dividedBy = P.div = function (y) {\n return divide(this, new this.constructor(y));\n};\n\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\nP.dividedToIntegerBy = P.divToInt = function (y) {\n var x = this,\n Ctor = x.constructor;\n return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\n};\n\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\nP.equals = P.eq = function (y) {\n return this.cmp(y) === 0;\n};\n\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\nP.floor = function () {\n return finalise(new this.constructor(this), this.e + 1, 3);\n};\n\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\nP.greaterThan = P.gt = function (y) {\n return this.cmp(y) > 0;\n};\n\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\nP.greaterThanOrEqualTo = P.gte = function (y) {\n var k = this.cmp(y);\n return k == 1 || k === 0;\n};\n\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0) = 1\r\n * cosh(-0) = 1\r\n * cosh(Infinity) = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN) = NaN\r\n *\r\n * x time taken (ms) result\r\n * 1000 9 9.8503555700852349694e+433\r\n * 10000 25 4.4034091128314607936e+4342\r\n * 100000 171 1.4033316802130615897e+43429\r\n * 1000000 3817 1.5166076984010437725e+434294\r\n * 10000000 abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\nP.hyperbolicCosine = P.cosh = function () {\n var k,\n n,\n pr,\n rm,\n len,\n x = this,\n Ctor = x.constructor,\n one = new Ctor(1);\n if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\n if (x.isZero()) return one;\n pr = Ctor.precision;\n rm = Ctor.rounding;\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\n Ctor.rounding = 1;\n len = x.d.length;\n\n // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\n // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\n\n // Estimate the optimum number of times to use the argument reduction.\n // TODO? Estimation reused from cosine() and may not be optimal here.\n if (len < 32) {\n k = Math.ceil(len / 3);\n n = (1 / tinyPow(4, k)).toString();\n } else {\n k = 16;\n n = '2.3283064365386962890625e-10';\n }\n x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\n\n // Reverse argument reduction\n var cosh2_x,\n i = k,\n d8 = new Ctor(8);\n for (; i--;) {\n cosh2_x = x.times(x);\n x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\n }\n return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\n};\n\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0) = 0\r\n * sinh(-0) = -0\r\n * sinh(Infinity) = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN) = NaN\r\n *\r\n * x time taken (ms)\r\n * 10 2 ms\r\n * 100 5 ms\r\n * 1000 14 ms\r\n * 10000 82 ms\r\n * 100000 886 ms 1.4033316802130615897e+43429\r\n * 200000 2613 ms\r\n * 300000 5407 ms\r\n * 400000 8824 ms\r\n * 500000 13026 ms 8.7080643612718084129e+217146\r\n * 1000000 48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\nP.hyperbolicSine = P.sinh = function () {\n var k,\n pr,\n rm,\n len,\n x = this,\n Ctor = x.constructor;\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\n pr = Ctor.precision;\n rm = Ctor.rounding;\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\n Ctor.rounding = 1;\n len = x.d.length;\n if (len < 3) {\n x = taylorSeries(Ctor, 2, x, x, true);\n } else {\n // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\n // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\n // 3 multiplications and 1 addition\n\n // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\n // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\n // 4 multiplications and 2 additions\n\n // Estimate the optimum number of times to use the argument reduction.\n k = 1.4 * Math.sqrt(len);\n k = k > 16 ? 16 : k | 0;\n x = x.times(1 / tinyPow(5, k));\n x = taylorSeries(Ctor, 2, x, x, true);\n\n // Reverse argument reduction\n var sinh2_x,\n d5 = new Ctor(5),\n d16 = new Ctor(16),\n d20 = new Ctor(20);\n for (; k--;) {\n sinh2_x = x.times(x);\n x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\n }\n }\n Ctor.precision = pr;\n Ctor.rounding = rm;\n return finalise(x, pr, rm, true);\n};\n\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0) = 0\r\n * tanh(-0) = -0\r\n * tanh(Infinity) = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN) = NaN\r\n *\r\n */\nP.hyperbolicTangent = P.tanh = function () {\n var pr,\n rm,\n x = this,\n Ctor = x.constructor;\n if (!x.isFinite()) return new Ctor(x.s);\n if (x.isZero()) return new Ctor(x);\n pr = Ctor.precision;\n rm = Ctor.rounding;\n Ctor.precision = pr + 7;\n Ctor.rounding = 1;\n return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\n};\n\n/*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0) = pi/2\r\n * acos(-0) = pi/2\r\n * acos(1) = 0\r\n * acos(-1) = pi\r\n * acos(1/2) = pi/3\r\n * acos(-1/2) = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN) = NaN\r\n *\r\n */\nP.inverseCosine = P.acos = function () {\n var x = this,\n Ctor = x.constructor,\n k = x.abs().cmp(1),\n pr = Ctor.precision,\n rm = Ctor.rounding;\n if (k !== -1) {\n return k === 0\n // |x| is 1\n ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\n // |x| > 1 or x is NaN\n : new Ctor(NaN);\n }\n if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\n\n // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\n\n Ctor.precision = pr + 6;\n Ctor.rounding = 1;\n\n // See https://github.com/MikeMcl/decimal.js/pull/217\n x = new Ctor(1).minus(x).div(x.plus(1)).sqrt().atan();\n Ctor.precision = pr;\n Ctor.rounding = rm;\n return x.times(2);\n};\n\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1) = NaN\r\n * acosh(NaN) = NaN\r\n * acosh(Infinity) = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0) = NaN\r\n * acosh(-0) = NaN\r\n * acosh(1) = 0\r\n * acosh(-1) = NaN\r\n *\r\n */\nP.inverseHyperbolicCosine = P.acosh = function () {\n var pr,\n rm,\n x = this,\n Ctor = x.constructor;\n if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\n if (!x.isFinite()) return new Ctor(x);\n pr = Ctor.precision;\n rm = Ctor.rounding;\n Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\n Ctor.rounding = 1;\n external = false;\n x = x.times(x).minus(1).sqrt().plus(x);\n external = true;\n Ctor.precision = pr;\n Ctor.rounding = rm;\n return x.ln();\n};\n\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN) = NaN\r\n * asinh(Infinity) = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0) = 0\r\n * asinh(-0) = -0\r\n *\r\n */\nP.inverseHyperbolicSine = P.asinh = function () {\n var pr,\n rm,\n x = this,\n Ctor = x.constructor;\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\n pr = Ctor.precision;\n rm = Ctor.rounding;\n Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\n Ctor.rounding = 1;\n external = false;\n x = x.times(x).plus(1).sqrt().plus(x);\n external = true;\n Ctor.precision = pr;\n Ctor.rounding = rm;\n return x.ln();\n};\n\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1) = NaN\r\n * atanh(NaN) = NaN\r\n * atanh(Infinity) = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0) = 0\r\n * atanh(-0) = -0\r\n * atanh(1) = Infinity\r\n * atanh(-1) = -Infinity\r\n *\r\n */\nP.inverseHyperbolicTangent = P.atanh = function () {\n var pr,\n rm,\n wpr,\n xsd,\n x = this,\n Ctor = x.constructor;\n if (!x.isFinite()) return new Ctor(NaN);\n if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\n pr = Ctor.precision;\n rm = Ctor.rounding;\n xsd = x.sd();\n if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\n Ctor.precision = wpr = xsd - x.e;\n x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\n Ctor.precision = pr + 4;\n Ctor.rounding = 1;\n x = x.ln();\n Ctor.precision = pr;\n Ctor.rounding = rm;\n return x.times(0.5);\n};\n\n/*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0) = 0\r\n * asin(-0) = -0\r\n * asin(1/2) = pi/6\r\n * asin(-1/2) = -pi/6\r\n * asin(1) = pi/2\r\n * asin(-1) = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN) = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\nP.inverseSine = P.asin = function () {\n var halfPi,\n k,\n pr,\n rm,\n x = this,\n Ctor = x.constructor;\n if (x.isZero()) return new Ctor(x);\n k = x.abs().cmp(1);\n pr = Ctor.precision;\n rm = Ctor.rounding;\n if (k !== -1) {\n // |x| is 1\n if (k === 0) {\n halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\n halfPi.s = x.s;\n return halfPi;\n }\n\n // |x| > 1 or x is NaN\n return new Ctor(NaN);\n }\n\n // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\n\n Ctor.precision = pr + 6;\n Ctor.rounding = 1;\n x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\n Ctor.precision = pr;\n Ctor.rounding = rm;\n return x.times(2);\n};\n\n/*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0) = 0\r\n * atan(-0) = -0\r\n * atan(1) = pi/4\r\n * atan(-1) = -pi/4\r\n * atan(Infinity) = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN) = NaN\r\n *\r\n */\nP.inverseTangent = P.atan = function () {\n var i,\n j,\n k,\n n,\n px,\n t,\n r,\n wpr,\n x2,\n x = this,\n Ctor = x.constructor,\n pr = Ctor.precision,\n rm = Ctor.rounding;\n if (!x.isFinite()) {\n if (!x.s) return new Ctor(NaN);\n if (pr + 4 <= PI_PRECISION) {\n r = getPi(Ctor, pr + 4, rm).times(0.5);\n r.s = x.s;\n return r;\n }\n } else if (x.isZero()) {\n return new Ctor(x);\n } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\n r = getPi(Ctor, pr + 4, rm).times(0.25);\n r.s = x.s;\n return r;\n }\n Ctor.precision = wpr = pr + 10;\n Ctor.rounding = 1;\n\n // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\n\n // Argument reduction\n // Ensure |x| < 0.42\n // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\n\n k = Math.min(28, wpr / LOG_BASE + 2 | 0);\n for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\n external = false;\n j = Math.ceil(wpr / LOG_BASE);\n n = 1;\n x2 = x.times(x);\n r = new Ctor(x);\n px = x;\n\n // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\n for (; i !== -1;) {\n px = px.times(x2);\n t = r.minus(px.div(n += 2));\n px = px.times(x2);\n r = t.plus(px.div(n += 2));\n if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\n }\n if (k) r = r.times(2 << k - 1);\n external = true;\n return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\n};\n\n/*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\nP.isFinite = function () {\n return !!this.d;\n};\n\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\nP.isInteger = P.isInt = function () {\n return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\n};\n\n/*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\nP.isNaN = function () {\n return !this.s;\n};\n\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\nP.isNegative = P.isNeg = function () {\n return this.s < 0;\n};\n\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\nP.isPositive = P.isPos = function () {\n return this.s > 0;\n};\n\n/*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\nP.isZero = function () {\n return !!this.d && this.d[0] === 0;\n};\n\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\nP.lessThan = P.lt = function (y) {\n return this.cmp(y) < 0;\n};\n\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\nP.lessThanOrEqualTo = P.lte = function (y) {\n return this.cmp(y) < 1;\n};\n\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a) = NaN\r\n * log[0](a) = NaN\r\n * log[1](a) = NaN\r\n * log[NaN](a) = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0) = -Infinity\r\n * log[b](-0) = -Infinity\r\n * log[b](-a) = NaN\r\n * log[b](1) = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN) = NaN\r\n *\r\n * [base] {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\nP.logarithm = P.log = function (base) {\n var isBase10,\n d,\n denominator,\n k,\n inf,\n num,\n sd,\n r,\n arg = this,\n Ctor = arg.constructor,\n pr = Ctor.precision,\n rm = Ctor.rounding,\n guard = 5;\n\n // Default base is 10.\n if (base == null) {\n base = new Ctor(10);\n isBase10 = true;\n } else {\n base = new Ctor(base);\n d = base.d;\n\n // Return NaN if base is negative, or non-finite, or is 0 or 1.\n if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\n isBase10 = base.eq(10);\n }\n d = arg.d;\n\n // Is arg negative, non-finite, 0 or 1?\n if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\n return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\n }\n\n // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\n // integer power of 10.\n if (isBase10) {\n if (d.length > 1) {\n inf = true;\n } else {\n for (k = d[0]; k % 10 === 0;) k /= 10;\n inf = k !== 1;\n }\n }\n external = false;\n sd = pr + guard;\n num = naturalLogarithm(arg, sd);\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\n\n // The result will have 5 rounding digits.\n r = divide(num, denominator, sd, 1);\n\n // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\n // calculate 10 further digits.\n //\n // If the result is known to have an infinite decimal expansion, repeat this until it is clear\n // that the result is above or below the boundary. Otherwise, if after calculating the 10\n // further digits, the last 14 are nines, round up and assume the result is exact.\n // Also assume the result is exact if the last 14 are zero.\n //\n // Example of a result that will be incorrectly rounded:\n // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\n // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\n // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\n // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\n // place is still 2.6.\n if (checkRoundingDigits(r.d, k = pr, rm)) {\n do {\n sd += 10;\n num = naturalLogarithm(arg, sd);\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\n r = divide(num, denominator, sd, 1);\n if (!inf) {\n // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\n if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\n r = finalise(r, pr + 1, 0);\n }\n break;\n }\n } while (checkRoundingDigits(r.d, k += 10, rm));\n }\n external = true;\n return finalise(r, pr, rm);\n};\n\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.max = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, -1);\r\n};\r\n */\n\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.min = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, 1);\r\n};\r\n */\n\n/*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\nP.minus = P.sub = function (y) {\n var d,\n e,\n i,\n j,\n k,\n len,\n pr,\n rm,\n xd,\n xe,\n xLTy,\n yd,\n x = this,\n Ctor = x.constructor;\n y = new Ctor(y);\n\n // If either is not finite...\n if (!x.d || !y.d) {\n // Return NaN if either is NaN.\n if (!x.s || !y.s) y = new Ctor(NaN);\n\n // Return y negated if x is finite and y is ±Infinity.\n else if (x.d) y.s = -y.s;\n\n // Return x if y is finite and x is ±Infinity.\n // Return x if both are ±Infinity with different signs.\n // Return NaN if both are ±Infinity with the same sign.\n else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\n return y;\n }\n\n // If signs differ...\n if (x.s != y.s) {\n y.s = -y.s;\n return x.plus(y);\n }\n xd = x.d;\n yd = y.d;\n pr = Ctor.precision;\n rm = Ctor.rounding;\n\n // If either is zero...\n if (!xd[0] || !yd[0]) {\n // Return y negated if x is zero and y is non-zero.\n if (yd[0]) y.s = -y.s;\n\n // Return x if y is zero and x is non-zero.\n else if (xd[0]) y = new Ctor(x);\n\n // Return zero if both are zero.\n // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\n else return new Ctor(rm === 3 ? -0 : 0);\n return external ? finalise(y, pr, rm) : y;\n }\n\n // x and y are finite, non-zero numbers with the same sign.\n\n // Calculate base 1e7 exponents.\n e = mathfloor(y.e / LOG_BASE);\n xe = mathfloor(x.e / LOG_BASE);\n xd = xd.slice();\n k = xe - e;\n\n // If base 1e7 exponents differ...\n if (k) {\n xLTy = k < 0;\n if (xLTy) {\n d = xd;\n k = -k;\n len = yd.length;\n } else {\n d = yd;\n e = xe;\n len = xd.length;\n }\n\n // Numbers with massively different exponents would result in a very high number of\n // zeros needing to be prepended, but this can be avoided while still ensuring correct\n // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\n if (k > i) {\n k = i;\n d.length = 1;\n }\n\n // Prepend zeros to equalise exponents.\n d.reverse();\n for (i = k; i--;) d.push(0);\n d.reverse();\n\n // Base 1e7 exponents equal.\n } else {\n // Check digits to determine which is the bigger number.\n\n i = xd.length;\n len = yd.length;\n xLTy = i < len;\n if (xLTy) len = i;\n for (i = 0; i < len; i++) {\n if (xd[i] != yd[i]) {\n xLTy = xd[i] < yd[i];\n break;\n }\n }\n k = 0;\n }\n if (xLTy) {\n d = xd;\n xd = yd;\n yd = d;\n y.s = -y.s;\n }\n len = xd.length;\n\n // Append zeros to `xd` if shorter.\n // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\n\n // Subtract yd from xd.\n for (i = yd.length; i > k;) {\n if (xd[--i] < yd[i]) {\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\n --xd[j];\n xd[i] += BASE;\n }\n xd[i] -= yd[i];\n }\n\n // Remove trailing zeros.\n for (; xd[--len] === 0;) xd.pop();\n\n // Remove leading zeros and adjust exponent accordingly.\n for (; xd[0] === 0; xd.shift()) --e;\n\n // Zero?\n if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\n y.d = xd;\n y.e = getBase10Exponent(xd, e);\n return external ? finalise(y, pr, rm) : y;\n};\n\n/*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\nP.modulo = P.mod = function (y) {\n var q,\n x = this,\n Ctor = x.constructor;\n y = new Ctor(y);\n\n // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.\n if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\n\n // Return x if y is ±Infinity or x is ±0.\n if (!y.d || x.d && !x.d[0]) {\n return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\n }\n\n // Prevent rounding of intermediate calculations.\n external = false;\n if (Ctor.modulo == 9) {\n // Euclidian division: q = sign(y) * floor(x / abs(y))\n // result = x - q * y where 0 <= result < abs(y)\n q = divide(x, y.abs(), 0, 3, 1);\n q.s *= y.s;\n } else {\n q = divide(x, y, 0, Ctor.modulo, 1);\n }\n q = q.times(y);\n external = true;\n return x.minus(q);\n};\n\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\nP.naturalExponential = P.exp = function () {\n return naturalExponential(this);\n};\n\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\nP.naturalLogarithm = P.ln = function () {\n return naturalLogarithm(this);\n};\n\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\nP.negated = P.neg = function () {\n var x = new this.constructor(this);\n x.s = -x.s;\n return finalise(x);\n};\n\n/*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\nP.plus = P.add = function (y) {\n var carry,\n d,\n e,\n i,\n k,\n len,\n pr,\n rm,\n xd,\n yd,\n x = this,\n Ctor = x.constructor;\n y = new Ctor(y);\n\n // If either is not finite...\n if (!x.d || !y.d) {\n // Return NaN if either is NaN.\n if (!x.s || !y.s) y = new Ctor(NaN);\n\n // Return x if y is finite and x is ±Infinity.\n // Return x if both are ±Infinity with the same sign.\n // Return NaN if both are ±Infinity with different signs.\n // Return y if x is finite and y is ±Infinity.\n else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\n return y;\n }\n\n // If signs differ...\n if (x.s != y.s) {\n y.s = -y.s;\n return x.minus(y);\n }\n xd = x.d;\n yd = y.d;\n pr = Ctor.precision;\n rm = Ctor.rounding;\n\n // If either is zero...\n if (!xd[0] || !yd[0]) {\n // Return x if y is zero.\n // Return y if y is non-zero.\n if (!yd[0]) y = new Ctor(x);\n return external ? finalise(y, pr, rm) : y;\n }\n\n // x and y are finite, non-zero numbers with the same sign.\n\n // Calculate base 1e7 exponents.\n k = mathfloor(x.e / LOG_BASE);\n e = mathfloor(y.e / LOG_BASE);\n xd = xd.slice();\n i = k - e;\n\n // If base 1e7 exponents differ...\n if (i) {\n if (i < 0) {\n d = xd;\n i = -i;\n len = yd.length;\n } else {\n d = yd;\n e = k;\n len = xd.length;\n }\n\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\n k = Math.ceil(pr / LOG_BASE);\n len = k > len ? k + 1 : len + 1;\n if (i > len) {\n i = len;\n d.length = 1;\n }\n\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\n d.reverse();\n for (; i--;) d.push(0);\n d.reverse();\n }\n len = xd.length;\n i = yd.length;\n\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\n if (len - i < 0) {\n i = len;\n d = yd;\n yd = xd;\n xd = d;\n }\n\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\n for (carry = 0; i;) {\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\n xd[i] %= BASE;\n }\n if (carry) {\n xd.unshift(carry);\n ++e;\n }\n\n // Remove trailing zeros.\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\n for (len = xd.length; xd[--len] == 0;) xd.pop();\n y.d = xd;\n y.e = getBase10Exponent(xd, e);\n return external ? finalise(y, pr, rm) : y;\n};\n\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\nP.precision = P.sd = function (z) {\n var k,\n x = this;\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\n if (x.d) {\n k = getPrecision(x.d);\n if (z && x.e + 1 > k) k = x.e + 1;\n } else {\n k = NaN;\n }\n return k;\n};\n\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\nP.round = function () {\n var x = this,\n Ctor = x.constructor;\n return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\n};\n\n/*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0) = 0\r\n * sin(-0) = -0\r\n * sin(Infinity) = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN) = NaN\r\n *\r\n */\nP.sine = P.sin = function () {\n var pr,\n rm,\n x = this,\n Ctor = x.constructor;\n if (!x.isFinite()) return new Ctor(NaN);\n if (x.isZero()) return new Ctor(x);\n pr = Ctor.precision;\n rm = Ctor.rounding;\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\n Ctor.rounding = 1;\n x = sine(Ctor, toLessThanHalfPi(Ctor, x));\n Ctor.precision = pr;\n Ctor.rounding = rm;\n return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\n};\n\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n */\nP.squareRoot = P.sqrt = function () {\n var m,\n n,\n sd,\n r,\n rep,\n t,\n x = this,\n d = x.d,\n e = x.e,\n s = x.s,\n Ctor = x.constructor;\n\n // Negative/NaN/Infinity/zero?\n if (s !== 1 || !d || !d[0]) {\n return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\n }\n external = false;\n\n // Initial estimate.\n s = Math.sqrt(+x);\n\n // Math.sqrt underflow/overflow?\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\n if (s == 0 || s == 1 / 0) {\n n = digitsToString(d);\n if ((n.length + e) % 2 == 0) n += '0';\n s = Math.sqrt(n);\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\n if (s == 1 / 0) {\n n = '5e' + e;\n } else {\n n = s.toExponential();\n n = n.slice(0, n.indexOf('e') + 1) + e;\n }\n r = new Ctor(n);\n } else {\n r = new Ctor(s.toString());\n }\n sd = (e = Ctor.precision) + 3;\n\n // Newton-Raphson iteration.\n for (;;) {\n t = r;\n r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\n\n // TODO? Replace with for-loop and checkRoundingDigits.\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\n n = n.slice(sd - 3, sd + 1);\n\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\n if (n == '9999' || !rep && n == '4999') {\n // On the first iteration only, check to see if rounding up gives the exact result as the\n // nines may infinitely repeat.\n if (!rep) {\n finalise(t, e + 1, 0);\n if (t.times(t).eq(x)) {\n r = t;\n break;\n }\n }\n sd += 4;\n rep = 1;\n } else {\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\n // If not, then there are further digits and m will be truthy.\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\n // Truncate to the first rounding digit.\n finalise(r, e + 1, 1);\n m = !r.times(r).eq(x);\n }\n break;\n }\n }\n }\n external = true;\n return finalise(r, e, Ctor.rounding, m);\n};\n\n/*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0) = 0\r\n * tan(-0) = -0\r\n * tan(Infinity) = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN) = NaN\r\n *\r\n */\nP.tangent = P.tan = function () {\n var pr,\n rm,\n x = this,\n Ctor = x.constructor;\n if (!x.isFinite()) return new Ctor(NaN);\n if (x.isZero()) return new Ctor(x);\n pr = Ctor.precision;\n rm = Ctor.rounding;\n Ctor.precision = pr + 10;\n Ctor.rounding = 1;\n x = x.sin();\n x.s = 1;\n x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\n Ctor.precision = pr;\n Ctor.rounding = rm;\n return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\n};\n\n/*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\nP.times = P.mul = function (y) {\n var carry,\n e,\n i,\n k,\n r,\n rL,\n t,\n xdL,\n ydL,\n x = this,\n Ctor = x.constructor,\n xd = x.d,\n yd = (y = new Ctor(y)).d;\n y.s *= x.s;\n\n // If either is NaN, ±Infinity or ±0...\n if (!xd || !xd[0] || !yd || !yd[0]) {\n return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\n\n // Return NaN if either is NaN.\n // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.\n ? NaN\n\n // Return ±Infinity if either is ±Infinity.\n // Return ±0 if either is ±0.\n : !xd || !yd ? y.s / 0 : y.s * 0);\n }\n e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\n xdL = xd.length;\n ydL = yd.length;\n\n // Ensure xd points to the longer array.\n if (xdL < ydL) {\n r = xd;\n xd = yd;\n yd = r;\n rL = xdL;\n xdL = ydL;\n ydL = rL;\n }\n\n // Initialise the result array with zeros.\n r = [];\n rL = xdL + ydL;\n for (i = rL; i--;) r.push(0);\n\n // Multiply!\n for (i = ydL; --i >= 0;) {\n carry = 0;\n for (k = xdL + i; k > i;) {\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\n r[k--] = t % BASE | 0;\n carry = t / BASE | 0;\n }\n r[k] = (r[k] + carry) % BASE | 0;\n }\n\n // Remove trailing zeros.\n for (; !r[--rL];) r.pop();\n if (carry) ++e;else r.shift();\n y.d = r;\n y.e = getBase10Exponent(r, e);\n return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\n};\n\n/*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\nP.toBinary = function (sd, rm) {\n return toStringBinary(this, 2, sd, rm);\n};\n\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\nP.toDecimalPlaces = P.toDP = function (dp, rm) {\n var x = this,\n Ctor = x.constructor;\n x = new Ctor(x);\n if (dp === void 0) return x;\n checkInt32(dp, 0, MAX_DIGITS);\n if (rm === void 0) rm = Ctor.rounding;else checkInt32(rm, 0, 8);\n return finalise(x, dp + x.e + 1, rm);\n};\n\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\nP.toExponential = function (dp, rm) {\n var str,\n x = this,\n Ctor = x.constructor;\n if (dp === void 0) {\n str = finiteToString(x, true);\n } else {\n checkInt32(dp, 0, MAX_DIGITS);\n if (rm === void 0) rm = Ctor.rounding;else checkInt32(rm, 0, 8);\n x = finalise(new Ctor(x), dp + 1, rm);\n str = finiteToString(x, true, dp + 1);\n }\n return x.isNeg() && !x.isZero() ? '-' + str : str;\n};\n\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\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 * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\nP.toFixed = function (dp, rm) {\n var str,\n y,\n x = this,\n Ctor = x.constructor;\n if (dp === void 0) {\n str = finiteToString(x);\n } else {\n checkInt32(dp, 0, MAX_DIGITS);\n if (rm === void 0) rm = Ctor.rounding;else checkInt32(rm, 0, 8);\n y = finalise(new Ctor(x), dp + x.e + 1, rm);\n str = finiteToString(y, false, dp + y.e + 1);\n }\n\n // To determine whether to add the minus sign look at the value before it was rounded,\n // i.e. look at `x` rather than `y`.\n return x.isNeg() && !x.isZero() ? '-' + str : str;\n};\n\n/*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|bigint|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\nP.toFraction = function (maxD) {\n var d,\n d0,\n d1,\n d2,\n e,\n k,\n n,\n n0,\n n1,\n pr,\n q,\n r,\n x = this,\n xd = x.d,\n Ctor = x.constructor;\n if (!xd) return new Ctor(x);\n n1 = d0 = new Ctor(1);\n d1 = n0 = new Ctor(0);\n d = new Ctor(d1);\n e = d.e = getPrecision(xd) - x.e - 1;\n k = e % LOG_BASE;\n d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\n if (maxD == null) {\n // d is 10**e, the minimum max-denominator needed.\n maxD = e > 0 ? d : n1;\n } else {\n n = new Ctor(maxD);\n if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\n maxD = n.gt(d) ? e > 0 ? d : n1 : n;\n }\n external = false;\n n = new Ctor(digitsToString(xd));\n pr = Ctor.precision;\n Ctor.precision = e = xd.length * LOG_BASE * 2;\n for (;;) {\n q = divide(n, d, 0, 1, 1);\n d2 = d0.plus(q.times(d1));\n if (d2.cmp(maxD) == 1) break;\n d0 = d1;\n d1 = d2;\n d2 = n1;\n n1 = n0.plus(q.times(d2));\n n0 = d2;\n d2 = d;\n d = n.minus(q.times(d2));\n n = d2;\n }\n d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\n n0 = n0.plus(d2.times(n1));\n d0 = d0.plus(d2.times(d1));\n n0.s = n1.s = x.s;\n\n // Determine which fraction is closer to x, n0/d0 or n1/d1?\n r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\n Ctor.precision = pr;\n external = true;\n return r;\n};\n\n/*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\nP.toHexadecimal = P.toHex = function (sd, rm) {\n return toStringBinary(this, 16, sd, rm);\n};\n\n/*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|bigint|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\nP.toNearest = function (y, rm) {\n var x = this,\n Ctor = x.constructor;\n x = new Ctor(x);\n if (y == null) {\n // If x is not finite, return x.\n if (!x.d) return x;\n y = new Ctor(1);\n rm = Ctor.rounding;\n } else {\n y = new Ctor(y);\n if (rm === void 0) {\n rm = Ctor.rounding;\n } else {\n checkInt32(rm, 0, 8);\n }\n\n // If x is not finite, return x if y is not NaN, else NaN.\n if (!x.d) return y.s ? x : y;\n\n // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\n if (!y.d) {\n if (y.s) y.s = x.s;\n return y;\n }\n }\n\n // If y is not zero, calculate the nearest multiple of y to x.\n if (y.d[0]) {\n external = false;\n x = divide(x, y, 0, rm, 1).times(y);\n external = true;\n finalise(x);\n\n // If y is zero, return zero with the sign of x.\n } else {\n y.s = x.s;\n x = y;\n }\n return x;\n};\n\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\nP.toNumber = function () {\n return +this;\n};\n\n/*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\nP.toOctal = function (sd, rm) {\n return toStringBinary(this, 8, sd, rm);\n};\n\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n * pow(x, NaN) = NaN\r\n * pow(x, ±0) = 1\r\n\r\n * pow(NaN, non-zero) = NaN\r\n * pow(abs(x) > 1, +Infinity) = +Infinity\r\n * pow(abs(x) > 1, -Infinity) = +0\r\n * pow(abs(x) == 1, ±Infinity) = NaN\r\n * pow(abs(x) < 1, +Infinity) = +0\r\n * pow(abs(x) < 1, -Infinity) = +Infinity\r\n * pow(+Infinity, y > 0) = +Infinity\r\n * pow(+Infinity, y < 0) = +0\r\n * pow(-Infinity, odd integer > 0) = -Infinity\r\n * pow(-Infinity, even integer > 0) = +Infinity\r\n * pow(-Infinity, odd integer < 0) = -0\r\n * pow(-Infinity, even integer < 0) = +0\r\n * pow(+0, y > 0) = +0\r\n * pow(+0, y < 0) = +Infinity\r\n * pow(-0, odd integer > 0) = -0\r\n * pow(-0, even integer > 0) = +0\r\n * pow(-0, odd integer < 0) = -Infinity\r\n * pow(-0, even integer < 0) = +Infinity\r\n * pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|bigint|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\nP.toPower = P.pow = function (y) {\n var e,\n k,\n pr,\n r,\n rm,\n s,\n x = this,\n Ctor = x.constructor,\n yn = +(y = new Ctor(y));\n\n // Either ±Infinity, NaN or ±0?\n if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\n x = new Ctor(x);\n if (x.eq(1)) return x;\n pr = Ctor.precision;\n rm = Ctor.rounding;\n if (y.eq(1)) return finalise(x, pr, rm);\n\n // y exponent\n e = mathfloor(y.e / LOG_BASE);\n\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\n if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\n r = intPow(Ctor, x, k, pr);\n return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\n }\n s = x.s;\n\n // if x is negative\n if (s < 0) {\n // if y is not an integer\n if (e < y.d.length - 1) return new Ctor(NaN);\n\n // Result is positive if x is negative and the last digit of integer y is even.\n if ((y.d[e] & 1) == 0) s = 1;\n\n // if x.eq(-1)\n if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\n x.s = s;\n return x;\n }\n }\n\n // Estimate result exponent.\n // x^y = 10^e, where e = y * log10(x)\n // log10(x) = log10(x_significand) + x_exponent\n // log10(x_significand) = ln(x_significand) / ln(10)\n k = mathpow(+x, yn);\n e = k == 0 || !isFinite(k) ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1)) : new Ctor(k + '').e;\n\n // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\n\n // Overflow/underflow?\n if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\n external = false;\n Ctor.rounding = x.s = 1;\n\n // Estimate the extra guard digits needed to ensure five correct rounding digits from\n // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\n // new Decimal(2.32456).pow('2087987436534566.46411')\n // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\n k = Math.min(12, (e + '').length);\n\n // r = x^y = exp(y*ln(x))\n r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\n\n // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\n if (r.d) {\n // Truncate to the required precision plus five rounding digits.\n r = finalise(r, pr + 5, 1);\n\n // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\n // the result.\n if (checkRoundingDigits(r.d, pr, rm)) {\n e = pr + 10;\n\n // Truncate to the increased precision plus five rounding digits.\n r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\n\n // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\n if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\n r = finalise(r, pr + 1, 0);\n }\n }\n }\n r.s = s;\n external = true;\n Ctor.rounding = rm;\n return finalise(r, pr, rm);\n};\n\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return 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_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\nP.toPrecision = function (sd, rm) {\n var str,\n x = this,\n Ctor = x.constructor;\n if (sd === void 0) {\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\n } else {\n checkInt32(sd, 1, MAX_DIGITS);\n if (rm === void 0) rm = Ctor.rounding;else checkInt32(rm, 0, 8);\n x = finalise(new Ctor(x), sd, rm);\n str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\n }\n return x.isNeg() && !x.isZero() ? '-' + str : str;\n};\n\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\nP.toSignificantDigits = P.toSD = function (sd, rm) {\n var x = this,\n Ctor = x.constructor;\n if (sd === void 0) {\n sd = Ctor.precision;\n rm = Ctor.rounding;\n } else {\n checkInt32(sd, 1, MAX_DIGITS);\n if (rm === void 0) rm = Ctor.rounding;else checkInt32(rm, 0, 8);\n }\n return finalise(new Ctor(x), sd, rm);\n};\n\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\nP.toString = function () {\n var x = this,\n Ctor = x.constructor,\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\n return x.isNeg() && !x.isZero() ? '-' + str : str;\n};\n\n/*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\nP.truncated = P.trunc = function () {\n return finalise(new this.constructor(this), this.e + 1, 1);\n};\n\n/*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\nP.valueOf = P.toJSON = function () {\n var x = this,\n Ctor = x.constructor,\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\n return x.isNeg() ? '-' + str : str;\n};\n\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\n\n/*\r\n * digitsToString P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n * finiteToString, naturalExponential, naturalLogarithm\r\n * checkInt32 P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n * P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n * checkRoundingDigits P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n * convertBase toStringBinary, parseOther\r\n * cos P.cos\r\n * divide P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n * P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n * P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n * taylorSeries, atan2, parseOther\r\n * finalise P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n * P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n * P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n * P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n * P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n * P.truncated, divide, getLn10, getPi, naturalExponential,\r\n * naturalLogarithm, ceil, floor, round, trunc\r\n * finiteToString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n * toStringBinary\r\n * getBase10Exponent P.minus, P.plus, P.times, parseOther\r\n * getLn10 P.logarithm, naturalLogarithm\r\n * getPi P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n * getPrecision P.precision, P.toFraction\r\n * getZeroString digitsToString, finiteToString\r\n * intPow P.toPower, parseOther\r\n * isOdd toLessThanHalfPi\r\n * maxOrMin max, min\r\n * naturalExponential P.naturalExponential, P.toPower\r\n * naturalLogarithm P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n * P.toPower, naturalExponential\r\n * nonFiniteToString finiteToString, toStringBinary\r\n * parseDecimal Decimal\r\n * parseOther Decimal\r\n * sin P.sin\r\n * taylorSeries P.cosh, P.sinh, cos, sin\r\n * toLessThanHalfPi P.cos, P.sin\r\n * toStringBinary P.toBinary, P.toHexadecimal, P.toOctal\r\n * truncate intPow\r\n *\r\n * Throws: P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n * naturalLogarithm, config, parseOther, random, Decimal\r\n */\n\nfunction digitsToString(d) {\n var i,\n k,\n ws,\n indexOfLastWord = d.length - 1,\n str = '',\n w = d[0];\n if (indexOfLastWord > 0) {\n str += w;\n for (i = 1; i < indexOfLastWord; i++) {\n ws = d[i] + '';\n k = LOG_BASE - ws.length;\n if (k) str += getZeroString(k);\n str += ws;\n }\n w = d[i];\n ws = w + '';\n k = LOG_BASE - ws.length;\n if (k) str += getZeroString(k);\n } else if (w === 0) {\n return '0';\n }\n\n // Remove trailing zeros of last w.\n for (; w % 10 === 0;) w /= 10;\n return str + w;\n}\nfunction checkInt32(i, min, max) {\n if (i !== ~~i || i < min || i > max) {\n throw Error(invalidArgument + i);\n }\n}\n\n/*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\nfunction checkRoundingDigits(d, i, rm, repeating) {\n var di, k, r, rd;\n\n // Get the length of the first word of the array d.\n for (k = d[0]; k >= 10; k /= 10) --i;\n\n // Is the rounding digit in the first word of d?\n if (--i < 0) {\n i += LOG_BASE;\n di = 0;\n } else {\n di = Math.ceil((i + 1) / LOG_BASE);\n i %= LOG_BASE;\n }\n\n // i is the index (0 - 6) of the rounding digit.\n // E.g. if within the word 3487563 the first rounding digit is 5,\n // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\n k = mathpow(10, LOG_BASE - i);\n rd = d[di] % k | 0;\n if (repeating == null) {\n if (i < 3) {\n if (i == 0) rd = rd / 100 | 0;else if (i == 1) rd = rd / 10 | 0;\n r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\n } else {\n r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) && (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 || (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\n }\n } else {\n if (i < 4) {\n if (i == 0) rd = rd / 1000 | 0;else if (i == 1) rd = rd / 100 | 0;else if (i == 2) rd = rd / 10 | 0;\n r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\n } else {\n r = ((repeating || rm < 4) && rd + 1 == k || !repeating && rm > 3 && rd + 1 == k / 2) && (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\n }\n }\n return r;\n}\n\n// Convert string of `baseIn` to an array of numbers of `baseOut`.\n// Eg. convertBase('255', 10, 16) returns [15, 15].\n// Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\nfunction convertBase(str, baseIn, baseOut) {\n var j,\n arr = [0],\n arrL,\n i = 0,\n strL = str.length;\n for (; i < strL;) {\n for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\n arr[0] += NUMERALS.indexOf(str.charAt(i++));\n for (j = 0; j < arr.length; j++) {\n if (arr[j] > baseOut - 1) {\n if (arr[j + 1] === void 0) arr[j + 1] = 0;\n arr[j + 1] += arr[j] / baseOut | 0;\n arr[j] %= baseOut;\n }\n }\n }\n return arr.reverse();\n}\n\n/*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\nfunction cosine(Ctor, x) {\n var k, len, y;\n if (x.isZero()) return x;\n\n // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\n // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\n\n // Estimate the optimum number of times to use the argument reduction.\n len = x.d.length;\n if (len < 32) {\n k = Math.ceil(len / 3);\n y = (1 / tinyPow(4, k)).toString();\n } else {\n k = 16;\n y = '2.3283064365386962890625e-10';\n }\n Ctor.precision += k;\n x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\n\n // Reverse argument reduction\n for (var i = k; i--;) {\n var cos2x = x.times(x);\n x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\n }\n Ctor.precision -= k;\n return x;\n}\n\n/*\r\n * Perform division in the specified base.\r\n */\nvar divide = function () {\n // Assumes non-zero x and k, and hence non-zero result.\n function multiplyInteger(x, k, base) {\n var temp,\n carry = 0,\n i = x.length;\n for (x = x.slice(); i--;) {\n temp = x[i] * k + carry;\n x[i] = temp % base | 0;\n carry = temp / base | 0;\n }\n if (carry) x.unshift(carry);\n return x;\n }\n function compare(a, b, aL, bL) {\n var i, r;\n if (aL != bL) {\n r = aL > bL ? 1 : -1;\n } else {\n for (i = r = 0; i < aL; i++) {\n if (a[i] != b[i]) {\n r = a[i] > b[i] ? 1 : -1;\n break;\n }\n }\n }\n return r;\n }\n function subtract(a, b, aL, base) {\n var i = 0;\n\n // Subtract b from a.\n for (; aL--;) {\n a[aL] -= i;\n i = a[aL] < b[aL] ? 1 : 0;\n a[aL] = i * base + a[aL] - b[aL];\n }\n\n // Remove leading zeros.\n for (; !a[0] && a.length > 1;) a.shift();\n }\n return function (x, y, pr, rm, dp, base) {\n var cmp,\n e,\n i,\n k,\n logBase,\n more,\n prod,\n prodL,\n q,\n qd,\n rem,\n remL,\n rem0,\n sd,\n t,\n xi,\n xL,\n yd0,\n yL,\n yz,\n Ctor = x.constructor,\n sign = x.s == y.s ? 1 : -1,\n xd = x.d,\n yd = y.d;\n\n // Either NaN, Infinity or 0?\n if (!xd || !xd[0] || !yd || !yd[0]) {\n return new Ctor(\n // Return NaN if either NaN, or both Infinity or 0.\n !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\n // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.\n xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\n }\n if (base) {\n logBase = 1;\n e = x.e - y.e;\n } else {\n base = BASE;\n logBase = LOG_BASE;\n e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\n }\n yL = yd.length;\n xL = xd.length;\n q = new Ctor(sign);\n qd = q.d = [];\n\n // Result exponent may be one less than e.\n // The digit array of a Decimal from toStringBinary may have trailing zeros.\n for (i = 0; yd[i] == (xd[i] || 0); i++);\n if (yd[i] > (xd[i] || 0)) e--;\n if (pr == null) {\n sd = pr = Ctor.precision;\n rm = Ctor.rounding;\n } else if (dp) {\n sd = pr + (x.e - y.e) + 1;\n } else {\n sd = pr;\n }\n if (sd < 0) {\n qd.push(1);\n more = true;\n } else {\n // Convert precision in number of base 10 digits to base 1e7 digits.\n sd = sd / logBase + 2 | 0;\n i = 0;\n\n // divisor < 1e7\n if (yL == 1) {\n k = 0;\n yd = yd[0];\n sd++;\n\n // k is the carry.\n for (; (i < xL || k) && sd--; i++) {\n t = k * base + (xd[i] || 0);\n qd[i] = t / yd | 0;\n k = t % yd | 0;\n }\n more = k || i < xL;\n\n // divisor >= 1e7\n } else {\n // Normalise xd and yd so highest order digit of yd is >= base/2\n k = base / (yd[0] + 1) | 0;\n if (k > 1) {\n yd = multiplyInteger(yd, k, base);\n xd = multiplyInteger(xd, k, base);\n yL = yd.length;\n xL = xd.length;\n }\n xi = yL;\n rem = xd.slice(0, yL);\n remL = rem.length;\n\n // Add zeros to make remainder as long as divisor.\n for (; remL < yL;) rem[remL++] = 0;\n yz = yd.slice();\n yz.unshift(0);\n yd0 = yd[0];\n if (yd[1] >= base / 2) ++yd0;\n do {\n k = 0;\n\n // Compare divisor and remainder.\n cmp = compare(yd, rem, yL, remL);\n\n // If divisor < remainder.\n if (cmp < 0) {\n // Calculate trial digit, k.\n rem0 = rem[0];\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\n\n // k will be how many times the divisor goes into the current remainder.\n k = rem0 / yd0 | 0;\n\n // Algorithm:\n // 1. product = divisor * trial digit (k)\n // 2. if product > remainder: product -= divisor, k--\n // 3. remainder -= product\n // 4. if product was < remainder at 2:\n // 5. compare new remainder and divisor\n // 6. If remainder > divisor: remainder -= divisor, k++\n\n if (k > 1) {\n if (k >= base) k = base - 1;\n\n // product = divisor * trial digit.\n prod = multiplyInteger(yd, k, base);\n prodL = prod.length;\n remL = rem.length;\n\n // Compare product and remainder.\n cmp = compare(prod, rem, prodL, remL);\n\n // product > remainder.\n if (cmp == 1) {\n k--;\n\n // Subtract divisor from product.\n subtract(prod, yL < prodL ? yz : yd, prodL, base);\n }\n } else {\n // cmp is -1.\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\n if (k == 0) cmp = k = 1;\n prod = yd.slice();\n }\n prodL = prod.length;\n if (prodL < remL) prod.unshift(0);\n\n // Subtract product from remainder.\n subtract(rem, prod, remL, base);\n\n // If product was < previous remainder.\n if (cmp == -1) {\n remL = rem.length;\n\n // Compare divisor and new remainder.\n cmp = compare(yd, rem, yL, remL);\n\n // If divisor < new remainder, subtract divisor from remainder.\n if (cmp < 1) {\n k++;\n\n // Subtract divisor from remainder.\n subtract(rem, yL < remL ? yz : yd, remL, base);\n }\n }\n remL = rem.length;\n } else if (cmp === 0) {\n k++;\n rem = [0];\n } // if cmp === 1, k will be 0\n\n // Add the next digit, k, to the result array.\n qd[i++] = k;\n\n // Update the remainder.\n if (cmp && rem[0]) {\n rem[remL++] = xd[xi] || 0;\n } else {\n rem = [xd[xi]];\n remL = 1;\n }\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\n more = rem[0] !== void 0;\n }\n\n // Leading zero?\n if (!qd[0]) qd.shift();\n }\n\n // logBase is 1 when divide is being used for base conversion.\n if (logBase == 1) {\n q.e = e;\n inexact = more;\n } else {\n // To calculate q.e, first get the number of digits of qd[0].\n for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\n q.e = i + e * logBase - 1;\n finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\n }\n return q;\n };\n}();\n\n/*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\nfunction finalise(x, sd, rm, isTruncated) {\n var digits,\n i,\n j,\n k,\n rd,\n roundUp,\n w,\n xd,\n xdi,\n Ctor = x.constructor;\n\n // Don't round if sd is null or undefined.\n out: if (sd != null) {\n xd = x.d;\n\n // Infinity/NaN.\n if (!xd) return x;\n\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\n // w: the word of xd containing rd, a base 1e7 number.\n // xdi: the index of w within xd.\n // digits: the number of digits of w.\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\n // they had leading zeros)\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\n\n // Get the length of the first word of the digits array xd.\n for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\n i = sd - digits;\n\n // Is the rounding digit in the first word of xd?\n if (i < 0) {\n i += LOG_BASE;\n j = sd;\n w = xd[xdi = 0];\n\n // Get the rounding digit at index j of w.\n rd = w / mathpow(10, digits - j - 1) % 10 | 0;\n } else {\n xdi = Math.ceil((i + 1) / LOG_BASE);\n k = xd.length;\n if (xdi >= k) {\n if (isTruncated) {\n // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\n for (; k++ <= xdi;) xd.push(0);\n w = rd = 0;\n digits = 1;\n i %= LOG_BASE;\n j = i - LOG_BASE + 1;\n } else {\n break out;\n }\n } else {\n w = k = xd[xdi];\n\n // Get the number of digits of w.\n for (digits = 1; k >= 10; k /= 10) digits++;\n\n // Get the index of rd within w.\n i %= LOG_BASE;\n\n // Get the index of rd within w, adjusted for leading zeros.\n // The number of leading zeros of w is given by LOG_BASE - digits.\n j = i - LOG_BASE + digits;\n\n // Get the rounding digit at index j of w.\n rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\n }\n }\n\n // Are there any non-zero digits after the rounding digit?\n isTruncated = isTruncated || sd < 0 || xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\n\n // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\n // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\n // will give 714.\n\n roundUp = rm < 4 ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\n // Check whether the digit to the left of the rounding digit is odd.\n (i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10 & 1 || rm == (x.s < 0 ? 8 : 7));\n if (sd < 1 || !xd[0]) {\n xd.length = 0;\n if (roundUp) {\n // Convert sd to decimal places.\n sd -= x.e + 1;\n\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\n x.e = -sd || 0;\n } else {\n // Zero.\n xd[0] = x.e = 0;\n }\n return x;\n }\n\n // Remove excess digits.\n if (i == 0) {\n xd.length = xdi;\n k = 1;\n xdi--;\n } else {\n xd.length = xdi + 1;\n k = mathpow(10, LOG_BASE - i);\n\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\n // j > 0 means i > number of leading zeros of w.\n xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\n }\n if (roundUp) {\n for (;;) {\n // Is the digit to be rounded up in the first word of xd?\n if (xdi == 0) {\n // i will be the length of xd[0] before k is added.\n for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\n j = xd[0] += k;\n for (k = 1; j >= 10; j /= 10) k++;\n\n // if i != k the length has increased.\n if (i != k) {\n x.e++;\n if (xd[0] == BASE) xd[0] = 1;\n }\n break;\n } else {\n xd[xdi] += k;\n if (xd[xdi] != BASE) break;\n xd[xdi--] = 0;\n k = 1;\n }\n }\n }\n\n // Remove trailing zeros.\n for (i = xd.length; xd[--i] === 0;) xd.pop();\n }\n if (external) {\n // Overflow?\n if (x.e > Ctor.maxE) {\n // Infinity.\n x.d = null;\n x.e = NaN;\n\n // Underflow?\n } else if (x.e < Ctor.minE) {\n // Zero.\n x.e = 0;\n x.d = [0];\n // Ctor.underflow = true;\n } // else Ctor.underflow = false;\n }\n return x;\n}\nfunction finiteToString(x, isExp, sd) {\n if (!x.isFinite()) return nonFiniteToString(x);\n var k,\n e = x.e,\n str = digitsToString(x.d),\n len = str.length;\n if (isExp) {\n if (sd && (k = sd - len) > 0) {\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\n } else if (len > 1) {\n str = str.charAt(0) + '.' + str.slice(1);\n }\n str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\n } else if (e < 0) {\n str = '0.' + getZeroString(-e - 1) + str;\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\n } else if (e >= len) {\n str += getZeroString(e + 1 - len);\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\n } else {\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\n if (sd && (k = sd - len) > 0) {\n if (e + 1 === len) str += '.';\n str += getZeroString(k);\n }\n }\n return str;\n}\n\n// Calculate the base 10 exponent from the base 1e7 exponent.\nfunction getBase10Exponent(digits, e) {\n var w = digits[0];\n\n // Add the number of digits of the first word of the digits array.\n for (e *= LOG_BASE; w >= 10; w /= 10) e++;\n return e;\n}\nfunction getLn10(Ctor, sd, pr) {\n if (sd > LN10_PRECISION) {\n // Reset global state in case the exception is caught.\n external = true;\n if (pr) Ctor.precision = pr;\n throw Error(precisionLimitExceeded);\n }\n return finalise(new Ctor(LN10), sd, 1, true);\n}\nfunction getPi(Ctor, sd, rm) {\n if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\n return finalise(new Ctor(PI), sd, rm, true);\n}\nfunction getPrecision(digits) {\n var w = digits.length - 1,\n len = w * LOG_BASE + 1;\n w = digits[w];\n\n // If non-zero...\n if (w) {\n // Subtract the number of trailing zeros of the last word.\n for (; w % 10 == 0; w /= 10) len--;\n\n // Add the number of digits of the first word.\n for (w = digits[0]; w >= 10; w /= 10) len++;\n }\n return len;\n}\nfunction getZeroString(k) {\n var zs = '';\n for (; k--;) zs += '0';\n return zs;\n}\n\n/*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\nfunction intPow(Ctor, x, n, pr) {\n var isTruncated,\n r = new Ctor(1),\n // Max n of 9007199254740991 takes 53 loop iterations.\n // Maximum digits array length; leaves [28, 34] guard digits.\n k = Math.ceil(pr / LOG_BASE + 4);\n external = false;\n for (;;) {\n if (n % 2) {\n r = r.times(x);\n if (truncate(r.d, k)) isTruncated = true;\n }\n n = mathfloor(n / 2);\n if (n === 0) {\n // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\n n = r.d.length - 1;\n if (isTruncated && r.d[n] === 0) ++r.d[n];\n break;\n }\n x = x.times(x);\n truncate(x.d, k);\n }\n external = true;\n return r;\n}\nfunction isOdd(n) {\n return n.d[n.d.length - 1] & 1;\n}\n\n/*\r\n * Handle `max` (`n` is -1) and `min` (`n` is 1).\r\n */\nfunction maxOrMin(Ctor, args, n) {\n var k,\n y,\n x = new Ctor(args[0]),\n i = 0;\n for (; ++i < args.length;) {\n y = new Ctor(args[i]);\n\n // NaN?\n if (!y.s) {\n x = y;\n break;\n }\n k = x.cmp(y);\n if (k === n || k === 0 && x.s === n) {\n x = y;\n }\n }\n return x;\n}\n\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(Infinity) = Infinity\r\n * exp(-Infinity) = 0\r\n * exp(NaN) = NaN\r\n * exp(±0) = 1\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n * The result will always be correctly rounded.\r\n *\r\n */\nfunction naturalExponential(x, sd) {\n var denominator,\n guard,\n j,\n pow,\n sum,\n t,\n wpr,\n rep = 0,\n i = 0,\n k = 0,\n Ctor = x.constructor,\n rm = Ctor.rounding,\n pr = Ctor.precision;\n\n // 0/NaN/Infinity?\n if (!x.d || !x.d[0] || x.e > 17) {\n return new Ctor(x.d ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0 : x.s ? x.s < 0 ? 0 : x : 0 / 0);\n }\n if (sd == null) {\n external = false;\n wpr = pr;\n } else {\n wpr = sd;\n }\n t = new Ctor(0.03125);\n\n // while abs(x) >= 0.1\n while (x.e > -2) {\n // x = x / 2^5\n x = x.times(t);\n k += 5;\n }\n\n // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\n // necessary to ensure the first 4 rounding digits are correct.\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\n wpr += guard;\n denominator = pow = sum = new Ctor(1);\n Ctor.precision = wpr;\n for (;;) {\n pow = finalise(pow.times(x), wpr, 1);\n denominator = denominator.times(++i);\n t = sum.plus(divide(pow, denominator, wpr, 1));\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\n j = k;\n while (j--) sum = finalise(sum.times(sum), wpr, 1);\n\n // Check to see if the first 4 rounding digits are [49]999.\n // If so, repeat the summation with a higher precision, otherwise\n // e.g. with precision: 18, rounding: 1\n // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\n // `wpr - guard` is the index of first rounding digit.\n if (sd == null) {\n if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\n Ctor.precision = wpr += 10;\n denominator = pow = t = new Ctor(1);\n i = 0;\n rep++;\n } else {\n return finalise(sum, Ctor.precision = pr, rm, external = true);\n }\n } else {\n Ctor.precision = pr;\n return sum;\n }\n }\n sum = t;\n }\n}\n\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * ln(-n) = NaN\r\n * ln(0) = -Infinity\r\n * ln(-0) = -Infinity\r\n * ln(1) = 0\r\n * ln(Infinity) = Infinity\r\n * ln(-Infinity) = NaN\r\n * ln(NaN) = NaN\r\n *\r\n * ln(n) (n != 1) is non-terminating.\r\n *\r\n */\nfunction naturalLogarithm(y, sd) {\n var c,\n c0,\n denominator,\n e,\n numerator,\n rep,\n sum,\n t,\n wpr,\n x1,\n x2,\n n = 1,\n guard = 10,\n x = y,\n xd = x.d,\n Ctor = x.constructor,\n rm = Ctor.rounding,\n pr = Ctor.precision;\n\n // Is x negative or Infinity, NaN, 0 or 1?\n if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\n return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\n }\n if (sd == null) {\n external = false;\n wpr = pr;\n } else {\n wpr = sd;\n }\n Ctor.precision = wpr += guard;\n c = digitsToString(xd);\n c0 = c.charAt(0);\n if (Math.abs(e = x.e) < 1.5e15) {\n // Argument reduction.\n // The series converges faster the closer the argument is to 1, so using\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\n // later be divided by this number, then separate out the power of 10 using\n // ln(a*10^b) = ln(a) + b*ln(10).\n\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\n // max n is 6 (gives 0.7 - 1.3)\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\n x = x.times(y);\n c = digitsToString(x.d);\n c0 = c.charAt(0);\n n++;\n }\n e = x.e;\n if (c0 > 1) {\n x = new Ctor('0.' + c);\n e++;\n } else {\n x = new Ctor(c0 + '.' + c.slice(1));\n }\n } else {\n // The argument reduction method above may result in overflow if the argument y is a massive\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\n // function using ln(x*10^e) = ln(x) + e*ln(10).\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\n x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\n Ctor.precision = pr;\n return sd == null ? finalise(x, pr, rm, external = true) : x;\n }\n\n // x1 is x reduced to a value near 1.\n x1 = x;\n\n // Taylor series.\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\n // where x = (y - 1)/(y + 1) (|x| < 1)\n sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\n x2 = finalise(x.times(x), wpr, 1);\n denominator = 3;\n for (;;) {\n numerator = finalise(numerator.times(x2), wpr, 1);\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\n sum = sum.times(2);\n\n // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\n // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\n sum = divide(sum, new Ctor(n), wpr, 1);\n\n // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\n // been repeated previously) and the first 4 rounding digits 9999?\n // If so, restart the summation with a higher precision, otherwise\n // e.g. with precision: 12, rounding: 1\n // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\n // `wpr - guard` is the index of first rounding digit.\n if (sd == null) {\n if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\n Ctor.precision = wpr += guard;\n t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\n x2 = finalise(x.times(x), wpr, 1);\n denominator = rep = 1;\n } else {\n return finalise(sum, Ctor.precision = pr, rm, external = true);\n }\n } else {\n Ctor.precision = pr;\n return sum;\n }\n }\n sum = t;\n denominator += 2;\n }\n}\n\n// ±Infinity, NaN.\nfunction nonFiniteToString(x) {\n // Unsigned.\n return String(x.s * x.s / 0);\n}\n\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\nfunction parseDecimal(x, str) {\n var e, i, len;\n\n // TODO BigInt str: no need to check for decimal point, exponential form or leading zeros.\n // Decimal point?\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\n\n // Exponential form?\n if ((i = str.search(/e/i)) > 0) {\n // Determine exponent.\n if (e < 0) e = i;\n e += +str.slice(i + 1);\n str = str.substring(0, i);\n } else if (e < 0) {\n // Integer.\n e = str.length;\n }\n\n // Determine leading zeros.\n for (i = 0; str.charCodeAt(i) === 48; i++);\n\n // Determine trailing zeros.\n for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\n str = str.slice(i, len);\n if (str) {\n len -= i;\n x.e = e = e - i - 1;\n x.d = [];\n\n // Transform base\n\n // e is the base 10 exponent.\n // i is where to slice str to get the first word of the digits array.\n i = (e + 1) % LOG_BASE;\n if (e < 0) i += LOG_BASE;\n if (i < len) {\n if (i) x.d.push(+str.slice(0, i));\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\n str = str.slice(i);\n i = LOG_BASE - str.length;\n } else {\n i -= len;\n }\n for (; i--;) str += '0';\n x.d.push(+str);\n if (external) {\n // Overflow?\n if (x.e > x.constructor.maxE) {\n // Infinity.\n x.d = null;\n x.e = NaN;\n\n // Underflow?\n } else if (x.e < x.constructor.minE) {\n // Zero.\n x.e = 0;\n x.d = [0];\n // x.constructor.underflow = true;\n } // else x.constructor.underflow = false;\n }\n } else {\n // Zero.\n x.e = 0;\n x.d = [0];\n }\n return x;\n}\n\n/*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\nfunction parseOther(x, str) {\n var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\n if (str.indexOf('_') > -1) {\n str = str.replace(/(\\d)_(?=\\d)/g, '$1');\n if (isDecimal.test(str)) return parseDecimal(x, str);\n } else if (str === 'Infinity' || str === 'NaN') {\n if (!+str) x.s = NaN;\n x.e = NaN;\n x.d = null;\n return x;\n }\n if (isHex.test(str)) {\n base = 16;\n str = str.toLowerCase();\n } else if (isBinary.test(str)) {\n base = 2;\n } else if (isOctal.test(str)) {\n base = 8;\n } else {\n throw Error(invalidArgument + str);\n }\n\n // Is there a binary exponent part?\n i = str.search(/p/i);\n if (i > 0) {\n p = +str.slice(i + 1);\n str = str.substring(2, i);\n } else {\n str = str.slice(2);\n }\n\n // Convert `str` as an integer then divide the result by `base` raised to a power such that the\n // fraction part will be restored.\n i = str.indexOf('.');\n isFloat = i >= 0;\n Ctor = x.constructor;\n if (isFloat) {\n str = str.replace('.', '');\n len = str.length;\n i = len - i;\n\n // log[10](16) = 1.2041... , log[10](88) = 1.9444....\n divisor = intPow(Ctor, new Ctor(base), i, i * 2);\n }\n xd = convertBase(str, base, BASE);\n xe = xd.length - 1;\n\n // Remove trailing zeros.\n for (i = xe; xd[i] === 0; --i) xd.pop();\n if (i < 0) return new Ctor(x.s * 0);\n x.e = getBase10Exponent(xd, xe);\n x.d = xd;\n external = false;\n\n // At what precision to perform the division to ensure exact conversion?\n // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\n // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\n // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\n // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\n // Therefore using 4 * the number of digits of str will always be enough.\n if (isFloat) x = divide(x, divisor, len * 4);\n\n // Multiply by the binary exponent part if present.\n if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\n external = true;\n return x;\n}\n\n/*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\nfunction sine(Ctor, x) {\n var k,\n len = x.d.length;\n if (len < 3) {\n return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\n }\n\n // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\n // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\n // and sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\n\n // Estimate the optimum number of times to use the argument reduction.\n k = 1.4 * Math.sqrt(len);\n k = k > 16 ? 16 : k | 0;\n x = x.times(1 / tinyPow(5, k));\n x = taylorSeries(Ctor, 2, x, x);\n\n // Reverse argument reduction\n var sin2_x,\n d5 = new Ctor(5),\n d16 = new Ctor(16),\n d20 = new Ctor(20);\n for (; k--;) {\n sin2_x = x.times(x);\n x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\n }\n return x;\n}\n\n// Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\nfunction taylorSeries(Ctor, n, x, y, isHyperbolic) {\n var j,\n t,\n u,\n x2,\n i = 1,\n pr = Ctor.precision,\n k = Math.ceil(pr / LOG_BASE);\n external = false;\n x2 = x.times(x);\n u = new Ctor(y);\n for (;;) {\n t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\n u = isHyperbolic ? y.plus(t) : y.minus(t);\n y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\n t = u.plus(y);\n if (t.d[k] !== void 0) {\n for (j = k; t.d[j] === u.d[j] && j--;);\n if (j == -1) break;\n }\n j = u;\n u = y;\n y = t;\n t = j;\n i++;\n }\n external = true;\n t.d.length = k + 1;\n return t;\n}\n\n// Exponent e must be positive and non-zero.\nfunction tinyPow(b, e) {\n var n = b;\n while (--e) n *= b;\n return n;\n}\n\n// Return the absolute value of `x` reduced to less than or equal to half pi.\nfunction toLessThanHalfPi(Ctor, x) {\n var t,\n isNeg = x.s < 0,\n pi = getPi(Ctor, Ctor.precision, 1),\n halfPi = pi.times(0.5);\n x = x.abs();\n if (x.lte(halfPi)) {\n quadrant = isNeg ? 4 : 1;\n return x;\n }\n t = x.divToInt(pi);\n if (t.isZero()) {\n quadrant = isNeg ? 3 : 2;\n } else {\n x = x.minus(t.times(pi));\n\n // 0 <= x < pi\n if (x.lte(halfPi)) {\n quadrant = isOdd(t) ? isNeg ? 2 : 3 : isNeg ? 4 : 1;\n return x;\n }\n quadrant = isOdd(t) ? isNeg ? 1 : 4 : isNeg ? 3 : 2;\n }\n return x.minus(pi).abs();\n}\n\n/*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\nfunction toStringBinary(x, baseOut, sd, rm) {\n var base,\n e,\n i,\n k,\n len,\n roundUp,\n str,\n xd,\n y,\n Ctor = x.constructor,\n isExp = sd !== void 0;\n if (isExp) {\n checkInt32(sd, 1, MAX_DIGITS);\n if (rm === void 0) rm = Ctor.rounding;else checkInt32(rm, 0, 8);\n } else {\n sd = Ctor.precision;\n rm = Ctor.rounding;\n }\n if (!x.isFinite()) {\n str = nonFiniteToString(x);\n } else {\n str = finiteToString(x);\n i = str.indexOf('.');\n\n // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\n // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\n // minBinaryExponent = floor(decimalExponent * log[2](10))\n // log[2](10) = 3.321928094887362347870319429489390175864\n\n if (isExp) {\n base = 2;\n if (baseOut == 16) {\n sd = sd * 4 - 3;\n } else if (baseOut == 8) {\n sd = sd * 3 - 2;\n }\n } else {\n base = baseOut;\n }\n\n // Convert the number as an integer then divide the result by its base raised to a power such\n // that the fraction part will be restored.\n\n // Non-integer.\n if (i >= 0) {\n str = str.replace('.', '');\n y = new Ctor(1);\n y.e = str.length - i;\n y.d = convertBase(finiteToString(y), 10, base);\n y.e = y.d.length;\n }\n xd = convertBase(str, 10, base);\n e = len = xd.length;\n\n // Remove trailing zeros.\n for (; xd[--len] == 0;) xd.pop();\n if (!xd[0]) {\n str = isExp ? '0p+0' : '0';\n } else {\n if (i < 0) {\n e--;\n } else {\n x = new Ctor(x);\n x.d = xd;\n x.e = e;\n x = divide(x, y, sd, rm, 0, base);\n xd = x.d;\n e = x.e;\n roundUp = inexact;\n }\n\n // The rounding digit, i.e. the digit after the digit that may be rounded up.\n i = xd[sd];\n k = base / 2;\n roundUp = roundUp || xd[sd + 1] !== void 0;\n roundUp = rm < 4 ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2)) : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 || rm === (x.s < 0 ? 8 : 7));\n xd.length = sd;\n if (roundUp) {\n // Rounding up may mean the previous digit has to be rounded up and so on.\n for (; ++xd[--sd] > base - 1;) {\n xd[sd] = 0;\n if (!sd) {\n ++e;\n xd.unshift(1);\n }\n }\n }\n\n // Determine trailing zeros.\n for (len = xd.length; !xd[len - 1]; --len);\n\n // E.g. [4, 11, 15] becomes 4bf.\n for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\n\n // Add binary exponent suffix?\n if (isExp) {\n if (len > 1) {\n if (baseOut == 16 || baseOut == 8) {\n i = baseOut == 16 ? 4 : 3;\n for (--len; len % i; len++) str += '0';\n xd = convertBase(str, base, baseOut);\n for (len = xd.length; !xd[len - 1]; --len);\n\n // xd[0] will always be be 1\n for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\n } else {\n str = str.charAt(0) + '.' + str.slice(1);\n }\n }\n str = str + (e < 0 ? 'p' : 'p+') + e;\n } else if (e < 0) {\n for (; ++e;) str = '0' + str;\n str = '0.' + str;\n } else {\n if (++e > len) for (e -= len; e--;) str += '0';else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\n }\n }\n str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\n }\n return x.s < 0 ? '-' + str : str;\n}\n\n// Does not strip trailing zeros.\nfunction truncate(arr, len) {\n if (arr.length > len) {\n arr.length = len;\n return true;\n }\n}\n\n// Decimal methods\n\n/*\r\n * abs\r\n * acos\r\n * acosh\r\n * add\r\n * asin\r\n * asinh\r\n * atan\r\n * atanh\r\n * atan2\r\n * cbrt\r\n * ceil\r\n * clamp\r\n * clone\r\n * config\r\n * cos\r\n * cosh\r\n * div\r\n * exp\r\n * floor\r\n * hypot\r\n * ln\r\n * log\r\n * log2\r\n * log10\r\n * max\r\n * min\r\n * mod\r\n * mul\r\n * pow\r\n * random\r\n * round\r\n * set\r\n * sign\r\n * sin\r\n * sinh\r\n * sqrt\r\n * sub\r\n * sum\r\n * tan\r\n * tanh\r\n * trunc\r\n */\n\n/*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction abs(x) {\n return new this(x).abs();\n}\n\n/*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction acos(x) {\n return new this(x).acos();\n}\n\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\nfunction acosh(x) {\n return new this(x).acosh();\n}\n\n/*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\nfunction add(x, y) {\n return new this(x).plus(y);\n}\n\n/*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction asin(x) {\n return new this(x).asin();\n}\n\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\nfunction asinh(x) {\n return new this(x).asinh();\n}\n\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction atan(x) {\n return new this(x).atan();\n}\n\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\nfunction atanh(x) {\n return new this(x).atanh();\n}\n\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|bigint|Decimal} The y-coordinate.\r\n * x {number|string|bigint|Decimal} The x-coordinate.\r\n *\r\n * atan2(±0, -0) = ±pi\r\n * atan2(±0, +0) = ±0\r\n * atan2(±0, -x) = ±pi for x > 0\r\n * atan2(±0, x) = ±0 for x > 0\r\n * atan2(-y, ±0) = -pi/2 for y > 0\r\n * atan2(y, ±0) = pi/2 for y > 0\r\n * atan2(±y, -Infinity) = ±pi for finite y > 0\r\n * atan2(±y, +Infinity) = ±0 for finite y > 0\r\n * atan2(±Infinity, x) = ±pi/2 for finite x\r\n * atan2(±Infinity, -Infinity) = ±3*pi/4\r\n * atan2(±Infinity, +Infinity) = ±pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\nfunction atan2(y, x) {\n y = new this(y);\n x = new this(x);\n var r,\n pr = this.precision,\n rm = this.rounding,\n wpr = pr + 4;\n\n // Either NaN\n if (!y.s || !x.s) {\n r = new this(NaN);\n\n // Both ±Infinity\n } else if (!y.d && !x.d) {\n r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\n r.s = y.s;\n\n // x is ±Infinity or y is ±0\n } else if (!x.d || y.isZero()) {\n r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\n r.s = y.s;\n\n // y is ±Infinity or x is ±0\n } else if (!y.d || x.isZero()) {\n r = getPi(this, wpr, 1).times(0.5);\n r.s = y.s;\n\n // Both non-zero and finite\n } else if (x.s < 0) {\n this.precision = wpr;\n this.rounding = 1;\n r = this.atan(divide(y, x, wpr, 1));\n x = getPi(this, wpr, 1);\n this.precision = pr;\n this.rounding = rm;\n r = y.s < 0 ? r.minus(x) : r.plus(x);\n } else {\n r = this.atan(divide(y, x, wpr, 1));\n }\n return r;\n}\n\n/*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction cbrt(x) {\n return new this(x).cbrt();\n}\n\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction ceil(x) {\n return finalise(x = new this(x), x.e + 1, 2);\n}\n\n/*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\nfunction clamp(x, min, max) {\n return new this(x).clamp(min, max);\n}\n\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n * maxE {number}\r\n * minE {number}\r\n * modulo {number}\r\n * crypto {boolean|number}\r\n * defaults {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\nfunction config(obj) {\n if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\n var i,\n p,\n v,\n useDefaults = obj.defaults === true,\n ps = ['precision', 1, MAX_DIGITS, 'rounding', 0, 8, 'toExpNeg', -EXP_LIMIT, 0, 'toExpPos', 0, EXP_LIMIT, 'maxE', 0, EXP_LIMIT, 'minE', -EXP_LIMIT, 0, 'modulo', 0, 9];\n for (i = 0; i < ps.length; i += 3) {\n if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\n if ((v = obj[p]) !== void 0) {\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;else throw Error(invalidArgument + p + ': ' + v);\n }\n }\n if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\n if ((v = obj[p]) !== void 0) {\n if (v === true || v === false || v === 0 || v === 1) {\n if (v) {\n if (typeof crypto != 'undefined' && crypto && (crypto.getRandomValues || crypto.randomBytes)) {\n this[p] = true;\n } else {\n throw Error(cryptoUnavailable);\n }\n } else {\n this[p] = false;\n }\n } else {\n throw Error(invalidArgument + p + ': ' + v);\n }\n }\n return this;\n}\n\n/*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\nfunction cos(x) {\n return new this(x).cos();\n}\n\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\nfunction cosh(x) {\n return new this(x).cosh();\n}\n\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\nfunction clone(obj) {\n var i, p, ps;\n\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * v {number|string|bigint|Decimal} A numeric value.\r\n *\r\n */\n function Decimal(v) {\n var e,\n i,\n t,\n x = this;\n\n // Decimal called without new.\n if (!(x instanceof Decimal)) return new Decimal(v);\n\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\n // which points to Object.\n x.constructor = Decimal;\n if (isDecimalInstance(v)) {\n x.s = v.s;\n if (external) {\n if (!v.d || v.e > Decimal.maxE) {\n // Infinity.\n x.e = NaN;\n x.d = null;\n } else if (v.e < Decimal.minE) {\n // Zero.\n x.e = 0;\n x.d = [0];\n } else {\n x.e = v.e;\n x.d = v.d.slice();\n }\n } else {\n x.e = v.e;\n x.d = v.d ? v.d.slice() : v.d;\n }\n return;\n }\n t = typeof v;\n if (t === 'number') {\n if (v === 0) {\n x.s = 1 / v < 0 ? -1 : 1;\n x.e = 0;\n x.d = [0];\n return;\n }\n if (v < 0) {\n v = -v;\n x.s = -1;\n } else {\n x.s = 1;\n }\n\n // Fast path for small integers.\n if (v === ~~v && v < 1e7) {\n for (e = 0, i = v; i >= 10; i /= 10) e++;\n if (external) {\n if (e > Decimal.maxE) {\n x.e = NaN;\n x.d = null;\n } else if (e < Decimal.minE) {\n x.e = 0;\n x.d = [0];\n } else {\n x.e = e;\n x.d = [v];\n }\n } else {\n x.e = e;\n x.d = [v];\n }\n return;\n }\n\n // Infinity or NaN?\n if (v * 0 !== 0) {\n if (!v) x.s = NaN;\n x.e = NaN;\n x.d = null;\n return;\n }\n return parseDecimal(x, v.toString());\n }\n if (t === 'string') {\n if ((i = v.charCodeAt(0)) === 45) {\n // minus sign\n v = v.slice(1);\n x.s = -1;\n } else {\n if (i === 43) v = v.slice(1); // plus sign\n x.s = 1;\n }\n return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\n }\n if (t === 'bigint') {\n if (v < 0) {\n v = -v;\n x.s = -1;\n } else {\n x.s = 1;\n }\n return parseDecimal(x, v.toString());\n }\n throw Error(invalidArgument + v);\n }\n Decimal.prototype = P;\n Decimal.ROUND_UP = 0;\n Decimal.ROUND_DOWN = 1;\n Decimal.ROUND_CEIL = 2;\n Decimal.ROUND_FLOOR = 3;\n Decimal.ROUND_HALF_UP = 4;\n Decimal.ROUND_HALF_DOWN = 5;\n Decimal.ROUND_HALF_EVEN = 6;\n Decimal.ROUND_HALF_CEIL = 7;\n Decimal.ROUND_HALF_FLOOR = 8;\n Decimal.EUCLID = 9;\n Decimal.config = Decimal.set = config;\n Decimal.clone = clone;\n Decimal.isDecimal = isDecimalInstance;\n Decimal.abs = abs;\n Decimal.acos = acos;\n Decimal.acosh = acosh; // ES6\n Decimal.add = add;\n Decimal.asin = asin;\n Decimal.asinh = asinh; // ES6\n Decimal.atan = atan;\n Decimal.atanh = atanh; // ES6\n Decimal.atan2 = atan2;\n Decimal.cbrt = cbrt; // ES6\n Decimal.ceil = ceil;\n Decimal.clamp = clamp;\n Decimal.cos = cos;\n Decimal.cosh = cosh; // ES6\n Decimal.div = div;\n Decimal.exp = exp;\n Decimal.floor = floor;\n Decimal.hypot = hypot; // ES6\n Decimal.ln = ln;\n Decimal.log = log;\n Decimal.log10 = log10; // ES6\n Decimal.log2 = log2; // ES6\n Decimal.max = max;\n Decimal.min = min;\n Decimal.mod = mod;\n Decimal.mul = mul;\n Decimal.pow = pow;\n Decimal.random = random;\n Decimal.round = round;\n Decimal.sign = sign; // ES6\n Decimal.sin = sin;\n Decimal.sinh = sinh; // ES6\n Decimal.sqrt = sqrt;\n Decimal.sub = sub;\n Decimal.sum = sum;\n Decimal.tan = tan;\n Decimal.tanh = tanh; // ES6\n Decimal.trunc = trunc; // ES6\n\n if (obj === void 0) obj = {};\n if (obj) {\n if (obj.defaults !== true) {\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\n }\n }\n Decimal.config(obj);\n return Decimal;\n}\n\n/*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\nfunction div(x, y) {\n return new this(x).div(y);\n}\n\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\nfunction exp(x) {\n return new this(x).exp();\n}\n\n/*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction floor(x) {\n return finalise(x = new this(x), x.e + 1, 3);\n}\n\n/*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\nfunction hypot() {\n var i,\n n,\n t = new this(0);\n external = false;\n for (i = 0; i < arguments.length;) {\n n = new this(arguments[i++]);\n if (!n.d) {\n if (n.s) {\n external = true;\n return new this(1 / 0);\n }\n t = n;\n } else if (t.d) {\n t = t.plus(n.times(n));\n }\n }\n external = true;\n return t.sqrt();\n}\n\n/*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\nfunction isDecimalInstance(obj) {\n return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\n}\n\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction ln(x) {\n return new this(x).ln();\n}\n\n/*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|bigint|Decimal} The argument of the logarithm.\r\n * y {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\nfunction log(x, y) {\n return new this(x).log(y);\n}\n\n/*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction log2(x) {\n return new this(x).log(2);\n}\n\n/*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction log10(x) {\n return new this(x).log(10);\n}\n\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\nfunction max() {\n return maxOrMin(this, arguments, -1);\n}\n\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\nfunction min() {\n return maxOrMin(this, arguments, 1);\n}\n\n/*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\nfunction mod(x, y) {\n return new this(x).mod(y);\n}\n\n/*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\nfunction mul(x, y) {\n return new this(x).mul(y);\n}\n\n/*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The base.\r\n * y {number|string|bigint|Decimal} The exponent.\r\n *\r\n */\nfunction pow(x, y) {\n return new this(x).pow(y);\n}\n\n/*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\nfunction random(sd) {\n var d,\n e,\n k,\n n,\n i = 0,\n r = new this(1),\n rd = [];\n if (sd === void 0) sd = this.precision;else checkInt32(sd, 1, MAX_DIGITS);\n k = Math.ceil(sd / LOG_BASE);\n if (!this.crypto) {\n for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\n\n // Browsers supporting crypto.getRandomValues.\n } else if (crypto.getRandomValues) {\n d = crypto.getRandomValues(new Uint32Array(k));\n for (; i < k;) {\n n = d[i];\n\n // 0 <= n < 4294967296\n // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\n if (n >= 4.29e9) {\n d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\n } else {\n // 0 <= n <= 4289999999\n // 0 <= (n % 1e7) <= 9999999\n rd[i++] = n % 1e7;\n }\n }\n\n // Node.js supporting crypto.randomBytes.\n } else if (crypto.randomBytes) {\n // buffer\n d = crypto.randomBytes(k *= 4);\n for (; i < k;) {\n // 0 <= n < 2147483648\n n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\n\n // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\n if (n >= 2.14e9) {\n crypto.randomBytes(4).copy(d, i);\n } else {\n // 0 <= n <= 2139999999\n // 0 <= (n % 1e7) <= 9999999\n rd.push(n % 1e7);\n i += 4;\n }\n }\n i = k / 4;\n } else {\n throw Error(cryptoUnavailable);\n }\n k = rd[--i];\n sd %= LOG_BASE;\n\n // Convert trailing digits to zeros according to sd.\n if (k && sd) {\n n = mathpow(10, LOG_BASE - sd);\n rd[i] = (k / n | 0) * n;\n }\n\n // Remove trailing words which are zero.\n for (; rd[i] === 0; i--) rd.pop();\n\n // Zero?\n if (i < 0) {\n e = 0;\n rd = [0];\n } else {\n e = -1;\n\n // Remove leading words which are zero and adjust exponent accordingly.\n for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\n\n // Count the digits of the first word of rd to determine leading zeros.\n for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\n\n // Adjust the exponent for leading zeros of the first word of rd.\n if (k < LOG_BASE) e -= LOG_BASE - k;\n }\n r.e = e;\n r.d = rd;\n return r;\n}\n\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction round(x) {\n return finalise(x = new this(x), x.e + 1, this.rounding);\n}\n\n/*\r\n * Return\r\n * 1 if x > 0,\r\n * -1 if x < 0,\r\n * 0 if x is 0,\r\n * -0 if x is -0,\r\n * NaN otherwise\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction sign(x) {\n x = new this(x);\n return x.d ? x.d[0] ? x.s : 0 * x.s : x.s || NaN;\n}\n\n/*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\nfunction sin(x) {\n return new this(x).sin();\n}\n\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\nfunction sinh(x) {\n return new this(x).sinh();\n}\n\n/*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction sqrt(x) {\n return new this(x).sqrt();\n}\n\n/*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\nfunction sub(x, y) {\n return new this(x).sub(y);\n}\n\n/*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\nfunction sum() {\n var i = 0,\n args = arguments,\n x = new this(args[i]);\n external = false;\n for (; x.s && ++i < args.length;) x = x.plus(args[i]);\n external = true;\n return finalise(x, this.precision, this.rounding);\n}\n\n/*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\nfunction tan(x) {\n return new this(x).tan();\n}\n\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\nfunction tanh(x) {\n return new this(x).tanh();\n}\n\n/*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\nfunction trunc(x) {\n return finalise(x = new this(x), x.e + 1, 1);\n}\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toString;\nP[Symbol.toStringTag] = 'Decimal';\n\n// Create and configure initial Decimal constructor.\nexport var Decimal = P.constructor = clone(DEFAULTS);\n\n// Create the internal constants from their string values.\nLN10 = new Decimal(LN10);\nPI = new Decimal(PI);\nexport default Decimal;","import { Decimal } from 'decimal.js';\nimport * as Enumerable from 'linq';\nimport { MobileAllocationSummary, TaxRate, TenantUser } from '../entities';\nimport { Job, SystemWorkOrderStatus, WorkOrder, WorkOrderStatus } from '../entities/job';\nimport { EmbeddedCode, CodeStatus, CodeInvoiceStatus } from '../entities/shared/';\nimport { WorkOrderUpdateResponse } from '..';\nimport { WorkOrderStatusUtility } from './workorder.status.utility'\nimport { v4 } from 'uuid';\n\nexport class WorkOrderUtility {\n\n\n public static compareStatus(status: WorkOrderStatus, statusName: string): boolean {\n if (!status)\n return false;\n\n return status.systemName === statusName;\n }\n\n public static compareSystemStatus(status: WorkOrderStatus, statusName: string): boolean {\n return WorkOrderUtility.systemStatusCompare(status,\n statusName as SystemWorkOrderStatus);\n }\n\n public static isSystemStatusOpen(status: WorkOrderStatus): boolean {\n return WorkOrderUtility.systemStatusCompare(status, SystemWorkOrderStatus.Open);\n }\n\n public static isSystemStatusClosed(status: WorkOrderStatus): boolean {\n return WorkOrderUtility.systemStatusCompare(status, SystemWorkOrderStatus.Closed);\n }\n\n public static isSystemStatusFinalised(status: WorkOrderStatus): boolean {\n return WorkOrderUtility.systemStatusCompare(status, SystemWorkOrderStatus.Finalised);\n }\n\n public static isSystemStatusCompleted(status: WorkOrderStatus): boolean {\n return WorkOrderUtility.systemStatusCompare(status, SystemWorkOrderStatus.Completed);\n }\n\n public static isSystemStatusInProgress(status: WorkOrderStatus): boolean {\n return WorkOrderUtility.systemStatusCompare(status, SystemWorkOrderStatus.InProgress);\n }\n\n public static isSystemStatusOnHold(status: WorkOrderStatus): boolean {\n return WorkOrderUtility.systemStatusCompare(status, SystemWorkOrderStatus.OnHold);\n }\n\n private static systemStatusCompare(status: WorkOrderStatus, systemStatus: SystemWorkOrderStatus): boolean {\n if (!status)\n return false;\n if (!systemStatus)\n return false;\n return status.systemStatus ? status.systemStatus === systemStatus : false;\n }\n\n public static sortCodes(codes: T[], excludeCancelled = false): T[] {\n\n if (!codes) return [];\n\n return Enumerable\n .from(codes)\n .where(x => excludeCancelled\n ? x.status !== CodeStatus.Cancelled\n : true)\n .select(x => {\n x.location = x.location ? x.location : '';\n x.sortOrder = WorkOrderUtility.getCodeSortOrder(x.status);\n return x;\n })\n .orderBy(x => x.sortOrder)\n .thenBy(x => x.location)\n .thenBy(x => x.name)\n .toArray();\n }\n\n public static clientCodes(codes: T[]): T[] {\n\n if (!codes) return [];\n\n return Enumerable\n .from(codes)\n .where(x => {\n const validStatus = [CodeStatus.Normal, CodeStatus.Variation].includes(x.status);\n const validInvoicing = x.codeInvoicingStatus !== CodeInvoiceStatus.NotBillable;\n return validStatus && validInvoicing;\n })\n .select(x => {\n if (x.codeInvoicingStatus === CodeInvoiceStatus.NoCharge) {\n x.sellPrice = 0;\n }\n x.location = x.location || '';\n x.sortOrder = WorkOrderUtility.getCodeSortOrder(x.status);\n return x;\n })\n .orderBy(x => x.sortOrder)\n .thenBy(x => x.location)\n .thenBy(x => x.name)\n .toArray();\n }\n\n public static addCodesUoM(codes: EmbeddedCode[], excludeCancelled = false): EmbeddedCode[] {\n\n if (!codes) return [];\n\n return Enumerable\n .from(codes)\n .where(x => excludeCancelled\n ? x.status !== CodeStatus.Cancelled\n : true)\n .select(x => {\n //x.uoms.push({ conversionRate: 1, uom: x.baseUoM })\n const code = { ...x };\n return code;\n })\n .toArray();\n }\n\n public static getCodeSortOrder(status: CodeStatus): number {\n status = status ? status : CodeStatus.Normal;\n let sortOrder = 0;\n switch (status) {\n case CodeStatus.Variation:\n sortOrder = 20;\n break;\n case CodeStatus.Cancelled:\n sortOrder = 30;\n break;\n default:\n sortOrder = 10;\n break;\n }\n return sortOrder;\n }\n\n public static getBillTotal(workOrder: WorkOrder, taxRate: TaxRate): InvoiceTotals {\n\n let total = 0;\n let subTotal = 0;\n let gst = 0;\n\n const taxRateValue = taxRate\n ? taxRate.rate / 100\n : 0;\n\n Enumerable\n .from(WorkOrderUtility.sortCodes(workOrder.codes, true))\n .forEach(p => {\n const price = p.buyPrice ? p.buyPrice : 0;\n const amountExGST = (price * p.quantity);\n const amountGST = amountExGST * taxRateValue;\n // const final = amountExGST + amountGST;\n // total += final;\n subTotal += amountExGST;\n gst += amountGST;\n });\n\n subTotal = new Decimal(subTotal).toDecimalPlaces(2).toNumber();\n gst = new Decimal(gst).toDecimalPlaces(2).toNumber();\n total = subTotal + gst;\n\n return {\n subTotal: subTotal || 0,\n tax: gst || 0,\n total: total || 0\n };\n }\n\n public static getInvoiceTotal(job: Job, taxRate: TaxRate): InvoiceTotals {\n\n let total = 0;\n let subTotal = 0;\n let gst = 0;\n\n const taxRateValue = taxRate\n ? taxRate.rate / 100\n : 0;\n\n Enumerable\n .from(job.workOrders)\n .forEach(workOrder => {\n\n Enumerable\n .from(WorkOrderUtility.sortCodes(workOrder.codes, true))\n .forEach(p => {\n const price = p.sellPrice ? p.sellPrice : 0;\n const amountExGST = (price * p.quantity);\n const amountGST = amountExGST * taxRateValue;\n // const final = amountExGST + amountGST;\n // total += final;\n subTotal += amountExGST;\n gst += amountGST;\n });\n\n });\n\n subTotal = new Decimal(subTotal).toDecimalPlaces(2).toNumber();\n gst = new Decimal(gst).toDecimalPlaces(2).toNumber();\n total = subTotal + gst;\n\n return {\n subTotal: subTotal || 0,\n tax: gst || 0,\n total: total || 0\n };\n }\n\n public static getWorkOrderWithVersion(workOrder: WorkOrder) {\n if (!workOrder.version) return `${workOrder.workOrderNumber} (V1)`;\n\n return `${workOrder.workOrderNumber} (V${workOrder.version})`;\n }\n\n public static convertWorkOrderToResponse(workOrder: WorkOrder, allocation?: MobileAllocationSummary): WorkOrderUpdateResponse {\n\n if (!workOrder) return null;\n\n const status = WorkOrderStatusUtility.convertToValidStatus(workOrder?.status);\n\n return {\n jobId: workOrder?.jobId,\n workOrderId: workOrder?._id,\n name: workOrder?.name,\n status: status,\n dueDate: workOrder?.dueDate,\n startDate: workOrder?.startDate,\n description: workOrder.description,\n technician: workOrder?.technician,\n subcontractor: workOrder?.subcontractor,\n type: workOrder.jobType,\n owner: workOrder.owner,\n customerPO: workOrder.customerWO,\n customerWO: workOrder.customerWO,\n updatedAt: workOrder.updatedAt,\n customFields: workOrder.customFields,\n alternateSite: workOrder.alternateSite,\n resources: workOrder.resources,\n allocation: allocation\n };\n\n }\n\n /**\n * Use for converting Quote / Opportunity to WorkOrder\n * \n * This logic is merged from ```JobTemplateUtility.getJobTemplateCode(JobTemplateUtility.getJobCode(i))```\n */\n public static buildCodes(codes: EmbeddedCode[], options?: { keepId?: boolean, costOnly?: boolean }): EmbeddedCode[] {\n\n const keepId = options?.keepId ?? false;\n\n const result = Enumerable\n .from(codes)\n .where(x => !!x)\n .select(x => {\n const code: EmbeddedCode = {\n _id: keepId ? x._id : v4(),\n\n sellPrice: x.adjustedSell,\n customSellPrice: true,\n\n name: x.name,\n quantity: x.quantity,\n location: x.location,\n description: x.description,\n longDescription: x.longDescription,\n canOverrideDesc: x.canOverrideDesc,\n category: x.category,\n codeUoM: x.codeUoM,\n buyPrice: x.buyPrice,\n customBuyPrice: x.customBuyPrice,\n note: x.note,\n codeInvoicingStatus: x.codeInvoicingStatus,\n suppliedBySubcontractor: x.suppliedBySubcontractor,\n type: x.type,\n };\n\n if (options?.costOnly === true) {\n code.customSellPrice = false;\n code.sellPrice = 0;\n code.codeInvoicingStatus = CodeInvoiceStatus.NotBillable;\n }\n\n return code;\n })\n .toArray();\n\n return result;\n\n }\n}\n\nexport interface InvoiceTotals {\n subTotal: number;\n tax: number;\n total: number;\n}\n","import * as Enumerable from 'linq';\nimport { StatusFilterValue, SystemWorkOrderStatus, WorkOrderStatus, WorkOrderStatusSystemName } from '../entities/job';\nimport { ColorUtility } from './color.utility';\n\nexport interface HasSystemStatus {\n systemStatus: SystemWorkOrderStatus;\n}\n\nexport class WorkOrderStatusUtility {\n\n public static getColor(status: HasSystemStatus): string {\n if (!status) return 'transparent';\n\n return this.getSystemColor(status.systemStatus);\n }\n\n public static getSystemColor(status: SystemWorkOrderStatus): string {\n if (!status) return 'transparent';\n\n switch (status) {\n case SystemWorkOrderStatus.Open:\n return '#58c43a'; // '#ec3324';\n\n case SystemWorkOrderStatus.InProgress:\n return '#f29d39';\n\n case SystemWorkOrderStatus.OnHold:\n return '#ec3324'; // '#fffe55';\n\n case SystemWorkOrderStatus.Completed:\n return '#347ff7'; // '#347ff7';\n\n case SystemWorkOrderStatus.Finalised:\n return '#2458ac'; // '#347ff7';\n\n case SystemWorkOrderStatus.Closed:\n return '#fffe55'; // '#58c43a';\n\n }\n }\n\n public static getTextColor(status: WorkOrderStatus): string {\n const color = this.getColor(status);\n return ColorUtility.idealTextColor(color);\n }\n\n public static getSystemTextColor(status: SystemWorkOrderStatus): string {\n const color = this.getSystemColor(status);\n return ColorUtility.idealTextColor(color);\n }\n\n public static getSortOrder(status: HasSystemStatus): number {\n if (!status) return 0;\n\n switch (status.systemStatus) {\n case SystemWorkOrderStatus.Open:\n return 1000;\n\n case SystemWorkOrderStatus.InProgress:\n return 2000;\n\n case SystemWorkOrderStatus.OnHold:\n return 3000;\n\n case SystemWorkOrderStatus.Completed:\n return 4000;\n\n case SystemWorkOrderStatus.Finalised:\n return 5000;\n\n case SystemWorkOrderStatus.Closed:\n return 6000;\n\n }\n }\n\n public static getAll(): string[] {\n return [\n SystemWorkOrderStatus.Open,\n SystemWorkOrderStatus.InProgress,\n SystemWorkOrderStatus.OnHold,\n SystemWorkOrderStatus.Completed,\n SystemWorkOrderStatus.Finalised,\n SystemWorkOrderStatus.Closed\n ];\n }\n\n public static getAllSystem(excludeClosed = true): string[] {\n const items = [\n SystemWorkOrderStatus.Open,\n SystemWorkOrderStatus.InProgress,\n SystemWorkOrderStatus.OnHold,\n SystemWorkOrderStatus.Completed,\n SystemWorkOrderStatus.Finalised,\n ];\n\n if (!excludeClosed)\n items.push(SystemWorkOrderStatus.Closed);\n\n return items;\n }\n\n public static jobStatusCalculation(statuses: WorkOrderStatus[]): WorkOrderStatus {\n\n return statuses[0];\n }\n\n public static isCompletedOrAfter(status: WorkOrderStatus | SystemWorkOrderStatus) {\n\n const systemStatus = status['systemStatus']\n ? status['systemStatus'] as SystemWorkOrderStatus\n : status as SystemWorkOrderStatus;\n\n return Enumerable\n .from([\n SystemWorkOrderStatus.Completed,\n SystemWorkOrderStatus.Finalised,\n SystemWorkOrderStatus.Closed,\n ])\n .any(x => x === systemStatus);\n }\n\n public static isDispatchedOrAfter(status: WorkOrderStatus) {\n\n return Enumerable\n .from([\n WorkOrderStatusSystemName.Dispatched,\n WorkOrderStatusSystemName.SubcontractorDispatched,\n SystemWorkOrderStatus.InProgress,\n SystemWorkOrderStatus.Completed,\n SystemWorkOrderStatus.Finalised,\n SystemWorkOrderStatus.Closed,\n ])\n .any(x => status.systemStatus === x || status.systemName === x);\n }\n\n public static shouldSendEmailToTechnician(status: WorkOrderStatus) {\n\n return Enumerable\n .from([\n WorkOrderStatusSystemName.Dispatched,\n WorkOrderStatusSystemName.SubcontractorDispatched,\n SystemWorkOrderStatus.InProgress\n ])\n .any(x => status.systemStatus === x || status.systemName === x);\n }\n\n public static convertToValidStatus(status: WorkOrderStatus): WorkOrderStatus {\n\n if (status.systemName !== WorkOrderStatusSystemName.SubcontractorDispatched)\n return status;\n\n status.name = WorkOrderStatusSystemName.Dispatched;\n status.systemName = WorkOrderStatusSystemName.Dispatched;\n\n return status;\n }\n\n\n public static getHackFilterStatus(status: StatusFilterValue[], allStatus: StatusFilterValue[]): StatusFilterValue[] {\n\n if (!status?.length)\n return [];\n\n const dispatched = Enumerable.from(status)\n .firstOrDefault(x => x.systemName === WorkOrderStatusSystemName.Dispatched);\n\n if (dispatched) {\n const subcontractorDispatched = Enumerable.from(allStatus)\n .firstOrDefault(x => x.systemName === WorkOrderStatusSystemName.SubcontractorDispatched);\n status.push(subcontractorDispatched);\n }\n\n return status;\n }\n\n public static getStatusDictionary(statuses: StatusFilterValue[]) {\n\n const statusDictionary = Enumerable\n .from(statuses)\n .where(x => !x.isSystemStatus)\n .groupBy(x => x.systemStatus)\n .toDictionary(x => x.key(), x => x.toArray());\n\n return statusDictionary;\n }\n\n public static canBeCustomStatus(status: string): boolean {\n return status === SystemWorkOrderStatus.OnHold || status === SystemWorkOrderStatus.Completed || status === SystemWorkOrderStatus.InProgress;\n }\n\n}\n","export class ColorUtility {\n public static hexToRgb(hex: string) {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n }\n\n public static colorIsLight(hex: string): boolean {\n const { r, g, b } = this.hexToRgb(hex);\n const o = Math.round(((r * 299) + (g * 587) + (b * 114)) / 1000);\n return (o > 180);\n }\n\n public static idealTextColor(hex: string): string {\n const darkText = '#444';\n const lightText = '#fff';\n\n if (!hex || hex.toLocaleLowerCase() === 'transparent')\n return darkText;\n\n return this.colorIsLight(hex)\n ? darkText\n : lightText;\n }\n}","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]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + 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;","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}","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n 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;","import * as Enumerable from 'linq';\nimport { DateTime } from 'luxon';\nimport { ComplianceDocument, ComplianceDocumentStatus, ComplianceDocumentSummary, IndividualComplianceRule, IndividualComplianceRuleApplyTo } from '../entities';\nimport { DateUtility } from './date.utility';\nimport { Contact, ContactSummary } from '../entities/contact';\n\nexport class IndividualComplianceUtility {\n\n public static identifyMissingCompliance(rules: IndividualComplianceRule[], compliance: ComplianceDocumentSummary[]): ComplianceDocumentSummary[] {\n\n const complianceGroup = Enumerable\n .from(compliance)\n .groupBy(x => x.definitionId)\n .toDictionary(x => x.key(), x => x.toArray());\n\n const missing = [] as ComplianceDocumentSummary[];\n\n Enumerable.from(rules)\n .forEach(rule => {\n const definitionId = rule.definition._id;\n const isMissing = !complianceGroup.contains(definitionId);\n\n if (isMissing) {\n missing.push({\n _id: definitionId,\n definitionId: definitionId,\n status: ComplianceDocumentStatus.Missing,\n category: rule.definition.category,\n name: rule.definition.name,\n end: null,\n start: null,\n number: null,\n definition: rule.definition,\n blockAssignment: rule.blockAssignment\n } as ComplianceDocumentSummary);\n } else {\n complianceGroup\n .get(definitionId)\n .forEach(x => {\n x.blockAssignment = rule.blockAssignment;\n });\n }\n });\n\n const all = Enumerable\n .from([...compliance, ...missing])\n .orderBy(x => x.category)\n .thenBy(x => x.name)\n .toArray();\n\n return all;\n\n }\n\n public static calculateComplianceExpiry(rules: IndividualComplianceRule[], compliance: ComplianceDocumentSummary[]): Date {\n\n const complianceGroup = Enumerable\n .from(compliance)\n .groupBy(x => x.definitionId)\n .toDictionary(x => x.key(), x => x.toArray());\n\n const expiryDates: Date[] = [];\n\n const minDate = new Date(1970, 1, 1);\n const maxDate = new Date(2100, 12, 31);\n\n Enumerable.from(rules)\n .forEach(rule => {\n const definitionId = rule.definition._id;\n\n const isMissing = !complianceGroup.contains(definitionId);\n\n if (isMissing) {\n // We are missing to add min date to array\n expiryDates.push(rule.blockAssignment ? minDate : maxDate);\n return;\n }\n\n // if (!rule.definition.end.enable) {\n // // The rule does not require end dates so just add max date to array\n // expiryDates.push(maxDate);\n // return;\n // }\n\n // We need an end date so we need to check the end date;\n const complianceForRule = complianceGroup.get(definitionId);\n Enumerable.from(complianceForRule)\n .forEach(item => {\n\n if (!item.end || !item.end.value) {\n expiryDates.push(rule.blockAssignment ? minDate : maxDate);\n return;\n }\n\n // Calculate the date and grace period then add to the expiry dates\n const endDate = new Date(item.end.value);\n\n const endWithGrace = new Date(endDate);\n endWithGrace.setDate(endDate.getDate() + rule.gracePeriodDays);\n expiryDates.push(rule.blockAssignment ? endWithGrace : maxDate);\n // expiryDates.push(endWithGrace);\n });\n\n\n\n });\n\n const time = expiryDates.length\n ? Enumerable.from(expiryDates).min(x => x.getTime())\n : maxDate.getTime();\n\n const complianceExpiry = new Date(time);\n\n return complianceExpiry;\n\n }\n\n public static getComplianceSummary(item: ComplianceDocument): ComplianceDocumentSummary {\n\n const emptyDefinition = {\n category: 'Not Provided',\n name: 'Invalid',\n start: { enable: false, label: null as string },\n end: { enable: false, label: null as string },\n number: { enable: false, label: null as string }\n };\n\n const dayTicks = 24 * 60 * 60 * 1000;\n\n const definition = item?.definition\n ? item?.definition\n : emptyDefinition;\n\n const end = item.end\n ? item.end\n : new Date(2100, 12, 31);\n\n const today = new Date();\n const thirtyDaysFromToday = new Date(today.valueOf() + (30 * dayTicks));\n\n let status = ComplianceDocumentStatus.Valid;\n\n if (end < today)\n status = ComplianceDocumentStatus.Expired;\n else if (end >= today && end <= thirtyDaysFromToday)\n status = ComplianceDocumentStatus.ExpiresSoon;\n\n const realStatus = status;\n\n if (item?.disabled)\n status = ComplianceDocumentStatus.Inactive;\n\n const summary = {\n category: definition?.category,\n name: definition?.name,\n start: definition?.start?.enable\n ? { label: definition?.start?.label, value: item?.start }\n : null,\n end: definition?.end?.enable\n ? { label: definition?.end?.label, value: item?.end }\n : null,\n number: definition?.number?.enable\n ? { label: definition?.number?.label, value: item?.number }\n : null,\n status: status,\n realStatus: realStatus,\n _id: item?._id,\n definitionId: item?.definition?._id,\n owner: item?.owner,\n } as ComplianceDocumentSummary;\n\n return summary;\n }\n\n public static getComplianceStatus(compliance: ComplianceDocument): ComplianceDocumentStatus {\n\n if (!compliance) return ComplianceDocumentStatus.Expired;\n\n const today = DateTime.utc().startOf('day');\n const warningDate = today.plus({ days: 60 });\n\n const end = compliance.end\n ? DateUtility.getDateTime(compliance.end)\n : null;\n\n switch (true) {\n\n case !!compliance.supersededBy: {\n return ComplianceDocumentStatus.Superseded;\n }\n\n case compliance.end && end < today: {\n return ComplianceDocumentStatus.Expired;\n }\n\n case compliance.end && end <= warningDate: {\n return ComplianceDocumentStatus.ExpiresSoon;\n }\n\n default:\n return ComplianceDocumentStatus.Valid;\n }\n\n\n }\n\n public static hasNewCompliance(user: Partial): boolean {\n if (!user || !user.newComplianceAdded) return false;\n\n const last7Days = new Date(new Date().getTime() - (8 * 24 * 60 * 60 * 1000));\n const newAdded = new Date(user.newComplianceAdded);\n\n return newAdded >= last7Days;\n }\n\n public static identifyComplianceStatusForContacts(rules: IndividualComplianceRule[], compliance: ComplianceDocumentSummary[], contacts: ContactSummary[]): ContactSummary[] {\n const complianceGroupByOwner = Enumerable.from(compliance ?? []).groupBy(x => x.owner._id).toDictionary(x => x.key(), x => x.toArray());\n const ruleGroupByDefinition = Enumerable.from(rules ?? []).where(e => !!e.definition?._id).groupBy(x => x.definition._id).toDictionary(x => x.key(), x => x.toArray());\n\n for (const contact of contacts) {\n contact.disabled = false;\n const complianceFound = complianceGroupByOwner.get(contact._id) || [];\n\n if (!complianceFound?.length) {\n continue;\n }\n\n const rules: IndividualComplianceRule[] = [];\n\n for (const item of complianceFound) {\n const ruleItems = ruleGroupByDefinition.get(item.definitionId)\n if (ruleItems?.length) {\n const validRules = this.filterRules(ruleItems, contact);\n rules.push(...validRules);\n }\n }\n\n const identifiedItems = this.identifyMissingCompliance(rules, complianceFound);\n\n contact.disabled = identifiedItems.some(x => x.blockAssignment && x.status === ComplianceDocumentStatus.Expired);\n }\n\n return contacts;\n }\n\n private static filterRules(rules: IndividualComplianceRule[], contact: ContactSummary): IndividualComplianceRule[] {\n const valid: IndividualComplianceRule[] = [];\n const contactLabelMap = Enumerable.from(contact.labels ?? []).toDictionary(x => x._id, x => x);\n\n for (const rule of rules) {\n if (!rule.applyToRestrictions?.length) {\n continue;\n }\n\n if (rule.applyTo === IndividualComplianceRuleApplyTo.UserLabels) {\n if (!contact.labels?.length) {\n continue;\n }\n\n const found = rule.applyToRestrictions.some(l => contactLabelMap.contains(l._id));\n if (found) {\n valid.push(rule);\n }\n\n continue;\n }\n\n if (rule.applyTo === IndividualComplianceRuleApplyTo.UserTypes) {\n const found = rule.applyToRestrictions?.some(l => l._id === contact.type);\n if (found) {\n valid.push(rule);\n }\n }\n }\n\n return valid;\n }\n}\n\n","import * as Enumerable from 'linq';\nimport { PriorityUtility } from './priority.utility';\nimport { WorkOrderUtility } from './workorder.utility';\nimport { WorkOrderUpdateResponse } from '../responses';\nimport { SystemWorkOrderStatus } from '../entities/job/system.workorder.status';\nimport { WorkOrder } from '../entities/job/workorder';\nimport { WorkOrderStatus } from '../entities/job/workorder.status';\nimport { FilterFieldName, JobViewFilters, StatusFilterValue } from '../entities/job/job.filters';\nimport { Address } from '../entities/shared/address';\nimport { DefaultView, Job, JobDateSort, JobDisplay, JobGroupBy, JobSorting, JobSource, JobViewSummary, JobViewType, SortJobBy, WorkOrderStatusSystemName } from '../entities/job';\nimport { Priority } from '../entities/tenant/priority';\nimport { DateUtility } from './date.utility';\nimport { SitePro, SiteTiny } from '../entities';\n\nexport interface JobProcessingResponse {\n jobRes: {\n jobId: string;\n workOrderId: string;\n status: SystemWorkOrderStatus;\n workOrders?: WorkOrder[];\n completedDate?: Date;\n completedNote?: string;\n finalisedDate?: Date;\n };\n workorderRes: WorkOrderUpdateResponse[];\n}\n\nexport interface RequestStatus {\n status: WorkOrderStatus;\n openStatus: WorkOrderStatus;\n}\n\nexport interface WorkOrderLike {\n _id: string;\n status: WorkOrderStatus;\n}\n\nexport class JobUtility {\n public static allowAutomaticUpdate(wo: WorkOrder) {\n if (wo.manuallyUpdated) return false;\n if (wo.status && (wo.status.systemStatus === 'Completed' || wo.status.systemStatus === 'Closed')) return false;\n\n return true;\n }\n\n public static buildJobStatus(workOrders: WorkOrderLike[]): SystemWorkOrderStatus {\n const wos = Enumerable.from(workOrders).where((e: WorkOrderLike) => e._id !== '0');\n\n if (wos.all((p: WorkOrderLike) => WorkOrderUtility.isSystemStatusClosed(p.status))) return SystemWorkOrderStatus.Closed;\n\n if (wos.all((p: WorkOrderLike) => WorkOrderUtility.isSystemStatusFinalised(p.status) || WorkOrderUtility.isSystemStatusClosed(p.status))) return SystemWorkOrderStatus.Finalised;\n\n if (wos.any((p: WorkOrderLike) => WorkOrderUtility.isSystemStatusOnHold(p.status))) return SystemWorkOrderStatus.OnHold;\n\n if (wos.any((p: WorkOrderLike) => WorkOrderUtility.isSystemStatusInProgress(p.status))) return SystemWorkOrderStatus.InProgress;\n\n if (wos.any((p: WorkOrderLike) => WorkOrderUtility.isSystemStatusOpen(p.status))) return SystemWorkOrderStatus.Open;\n\n if (wos.all((p: WorkOrderLike) => WorkOrderUtility.isSystemStatusCompleted(p.status) || WorkOrderUtility.isSystemStatusFinalised(p.status) || WorkOrderUtility.isSystemStatusClosed(p.status))) return SystemWorkOrderStatus.Completed;\n\n return SystemWorkOrderStatus.Open;\n }\n\n public static enableFilterField(fieldName: FilterFieldName, filters: JobViewFilters) {\n if (!filters) return false;\n\n switch (fieldName) {\n case FilterFieldName.Customer: {\n return !!filters.customers?.length;\n }\n case FilterFieldName.BillingCompanies: {\n return !!filters.billingCompanies?.length;\n }\n case FilterFieldName.Status: {\n return !!filters.statuses?.length;\n }\n case FilterFieldName.JobType: {\n return !!filters.jobTypes?.length;\n }\n case FilterFieldName.PriceBook: {\n return !!filters.priceBooks?.length;\n }\n case FilterFieldName.Priority: {\n return !!filters.priorities?.length;\n }\n case FilterFieldName.Owner: {\n return !!filters.owners?.length;\n }\n case FilterFieldName.FieldSupervisor: {\n return !!filters.fieldSupervisors?.length;\n }\n case FilterFieldName.Technician: {\n return !!filters.technicians?.length;\n }\n case FilterFieldName.Label: {\n return !!filters.labels?.length;\n }\n case FilterFieldName.Zones: {\n return !!filters.zones?.length;\n }\n case FilterFieldName.Resources: {\n return !!filters.resources?.length;\n }\n case FilterFieldName.WorkCategories: {\n return !!filters.workCategories?.length;\n }\n\n case FilterFieldName.CreatedAt:\n case FilterFieldName.DueDate:\n case FilterFieldName.CompletedDate:\n case FilterFieldName.FinalisedDate: {\n return true;\n }\n\n }\n }\n\n /// Used in job.sorting.dueDate\n public static getSortableDate(date?: Date): JobDateSort {\n return {\n asc: date ? date : new Date(2100, 12, 31, 0, 0),\n desc: date ? date : new Date(1980, 1, 1, 0, 0),\n };\n }\n\n /// Used in job.sorting.priority\n public static getSortablePriority(priority?: Priority): number {\n const sort = PriorityUtility.getSortOrder(priority);\n return sort;\n }\n\n public static getSortable(priority: Priority, dueDate: Date, completedDate: Date): JobSorting {\n return {\n priority: this.getSortablePriority(priority),\n dueDate: this.getSortableDate(dueDate),\n completedDate: this.getSortableDate(completedDate)\n } as JobSorting;\n }\n\n public static address(address: Address): string {\n if (!address) return '';\n\n if (address.name)\n return address.name;\n\n const street1 = address.street1 ? address.street1.trim() : '';\n const street2 = address.street2 ? address.street2.trim() : '';\n const suburb = address.suburb ? address.suburb.trim() : '';\n\n const state = address?.state?.trim() ?? '';\n const county = address?.county?.trim() ?? '';\n\n const postcode = address.postcode\n ? address.postcode?.toString().trim()\n : '';\n\n const postalCode = address?.postalCode?.trim() ?? '';\n\n const safePostalCode = postalCode\n ? postalCode\n : postcode;\n\n const components = [];\n if (street2) components.push(street2);\n if (street1) components.push(street1);\n if (suburb) components.push(suburb);\n if (county) components.push(county);\n if (state) components.push(state);\n if (safePostalCode) components.push(safePostalCode);\n\n return components.join(' ')?.trim();\n\n //return `${street1} ${suburb}`.trim() + ' ' + `${state} ${postcode}`.trim();\n }\n\n public static getAddress1(address: Address): string {\n if (address == null) return '';\n\n //hack for street standarising where rubbish is put into street 1\n //and the correct details are are in street 2\n let addressLine1 = (address?.street2 ? address.street2 : address.street1) ?? '';\n\n return addressLine1;\n }\n\n public static getAddress2(address: Address): string {\n\n if (address == null) return '';\n\n const components = [];\n\n const postCode = address?.postcode?.toString()?.trim();\n const postalCode = address?.postalCode?.trim();\n const safePostalCode = postalCode\n ? postalCode\n : postCode;\n\n if (address.suburb) components.push(address?.suburb?.trim());\n // if (address.state) components.push(address?.state?.trim());\n if (address.state) components.push(address?.state?.trim());\n if (safePostalCode) components.push(safePostalCode);\n if (address.country) components.push(address.country);\n\n //address2 = [address.suburb ? address.suburb : '', address.state ? address.state : '', address.postcode ? address.postcode : '', address.country ? address.country : ''].join(' ').trim();\n const address2 = components.join(' ').trim();\n\n return address2;\n }\n\n public static getSiteAddress(item: SitePro | SiteTiny): string {\n const addressName = item?.address?.name?.trim();\n const addressAutoName = JobUtility.address(item.address);\n return addressName || addressAutoName;\n }\n\n public static convertToJobResponse(job: Job): JobProcessingResponse {\n if (!job) return null;\n\n const dbWorkorders: WorkOrderUpdateResponse[] = [];\n\n Enumerable.from(job.workOrders).forEach((w) => {\n const workorder = {\n jobId: job._id,\n workOrderId: w._id,\n status: w.status,\n } as WorkOrderUpdateResponse;\n\n return dbWorkorders.push(workorder);\n });\n\n const dbJob = {\n jobId: job._id,\n workOrderId: job._id,\n status: job.status,\n workOrders: job.workOrders,\n completedDate: job.completedDate,\n completedNote: job.completedNote,\n finalisedDate: job.finalisedDate,\n updatedAt: job?.updatedAt,\n };\n\n return { jobRes: dbJob, workorderRes: dbWorkorders } as JobProcessingResponse;\n }\n\n public static createEmptyView(name = 'Not Configured'): JobViewSummary {\n\n return {\n _id: DefaultView.Empty,\n name,\n isDefault: true,\n system: true,\n selected: false,\n description: '',\n owner: null,\n source: JobSource.Active,\n filters: null\n } as JobViewSummary;\n\n }\n\n public static createDefaultViews(statuses: StatusFilterValue[]): JobViewSummary[] {\n const defaultViews = [];\n\n defaultViews.push({\n _id: DefaultView.Active,\n name: 'Active Jobs',\n isDefault: false,\n system: true,\n selected: false,\n description: '',\n owner: null,\n source: JobSource.Active,\n filters: {\n groupBy: JobGroupBy.Job,\n viewType: JobViewType.WorkOrder,\n displayType: JobDisplay.Kanban,\n sort: { sortBy: SortJobBy.CreatedDate, sortType: 'DESC' },\n statuses: Enumerable.from(statuses)\n .where((e) => {\n if (!e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.Open) return true;\n if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.InProgress) return true;\n if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.OnHold) return true;\n if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.Completed) return true;\n\n if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.Finalised) return true;\n return false;\n })\n .toArray(),\n },\n } as JobViewSummary);\n\n // defaultViews.push({\n // _id: DefaultView.ActivePro,\n // name: 'Active Jobs Pro',\n // isDefault: false,\n // system: true,\n // selected: false,\n // description: '',\n // owner: null,\n // source: JobSource.Active,\n // filters: {\n // groupBy: JobGroupBy.Job,\n // viewType: JobViewType.WorkOrder,\n // displayType: JobDisplay.Kanban,\n // statuses: Enumerable.from(statuses)\n // .where((e) => {\n // if (!e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.Open) return true;\n // if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.InProgress) return true;\n // if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.OnHold) return true;\n // if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.Completed) return true;\n\n // if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.Finalised) return true;\n // return false;\n // })\n // .toArray(),\n // },\n // } as JobViewSummary);\n\n defaultViews.push({\n _id: DefaultView.Overdue,\n name: 'Overdue',\n isDefault: false,\n system: true,\n selected: false,\n description: '',\n owner: null,\n source: JobSource.Active,\n filters: {\n overDueDate: new Date(),\n groupBy: JobGroupBy.Job,\n viewType: JobViewType.WorkOrder,\n displayType: JobDisplay.Kanban,\n statuses: Enumerable.from(statuses)\n .where((e) => {\n if (!e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.Open) return true;\n if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.InProgress) return true;\n if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.OnHold) return true;\n return false;\n })\n .toArray(),\n } as JobViewFilters,\n } as JobViewSummary);\n\n defaultViews.push({\n _id: DefaultView.DueIn7Days,\n name: 'Due In Next 7 Days',\n isDefault: false,\n system: true,\n selected: false,\n description: '',\n owner: null,\n source: JobSource.Active,\n filters: {\n dueBeforeDate: DateUtility.getDateTime(new Date()).plus({ days: 7 }).endOf('day').toJSDate(),\n viewType: JobViewType.WorkOrder,\n groupBy: JobGroupBy.Job,\n displayType: JobDisplay.Kanban,\n sort: { sortBy: SortJobBy.CreatedDate, sortType: 'DESC' },\n statuses: Enumerable.from(statuses)\n .where((e) => {\n if (!e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.Open) return true;\n if (!e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.InProgress) return true;\n if (e.isSystemStatus && e.systemStatus === SystemWorkOrderStatus.OnHold) return true;\n return false;\n })\n .toArray(),\n } as JobViewFilters,\n } as JobViewSummary);\n\n defaultViews.push({\n _id: DefaultView.Unassigned,\n name: 'Not Assigned',\n isDefault: false,\n system: true,\n selected: false,\n description: '',\n owner: null,\n source: JobSource.Active,\n filters: {\n unassigned: true,\n viewType: JobViewType.WorkOrder,\n groupBy: JobGroupBy.Job,\n displayType: JobDisplay.List,\n sort: { sortBy: SortJobBy.CreatedDate, sortType: 'DESC' },\n statuses: Enumerable.from(statuses)\n .where((e) => e.systemName === WorkOrderStatusSystemName.New && !e.isSystemStatus)\n .toArray(),\n } as JobViewFilters,\n } as JobViewSummary);\n\n defaultViews.push({\n _id: DefaultView.NotDispatched,\n name: 'Not Dispatched',\n isDefault: false,\n system: true,\n selected: false,\n description: '',\n owner: null,\n source: JobSource.Active,\n sort: { sortBy: SortJobBy.CreatedDate, sortType: 'DESC' },\n filters: {\n statuses: Enumerable.from(statuses)\n .where((e) => e.systemName === WorkOrderStatusSystemName.Assigned)\n .toArray(),\n viewType: JobViewType.WorkOrder,\n groupBy: JobGroupBy.Job,\n displayType: JobDisplay.List,\n } as JobViewFilters,\n } as JobViewSummary);\n\n defaultViews.push({\n _id: DefaultView.Closed,\n name: 'Closed Jobs',\n isDefault: false,\n system: true,\n selected: false,\n description: '',\n owner: null,\n source: JobSource.Closed,\n sort: { sortBy: SortJobBy.CreatedDate, sortType: 'DESC' },\n filters: {\n displayType: JobDisplay.List,\n viewType: JobViewType.Job,\n statuses: Enumerable.from(statuses)\n .where((e) => (e.systemStatus === SystemWorkOrderStatus.Closed || e.systemStatus === SystemWorkOrderStatus.Canceled) && !e.isSystemStatus)\n .toArray(),\n },\n } as JobViewSummary);\n\n // defaultViews.push({\n // _id: DefaultView.Archive,\n // name: 'Archived Jobs',\n // isDefault: false,\n // system: true,\n // selected: false,\n // description: '',\n // owner: null,\n // source: JobSource.Archive,\n // filters: {\n // displayType: JobDisplay.List,\n // viewType: JobViewType.Job,\n // statuses: Enumerable\n // .from(statuses)\n // .where(e =>\n // (e.systemStatus === SystemWorkOrderStatus.Closed || e.systemStatus === SystemWorkOrderStatus.Canceled) && !e.isSystemStatus)\n // .toArray()\n // }\n // } as JobViewSummary);\n\n return defaultViews;\n }\n}\n","\nimport { SystemPriority, SystemPriorityName } from '../entities/shared/system.priority';\nimport { Priority } from '../entities/tenant/priority';\nimport { ColorUtility } from './color.utility';\n\nexport interface HasSystemPriority {\n systemPriority?: SystemPriority;\n}\n\nexport class PriorityUtility {\n\n public static getColor(priority: HasSystemPriority): string {\n if (!priority) return 'transparent';\n return this.getSystemColor(priority.systemPriority);\n }\n\n public static getSystemColor(systemPriority: SystemPriority): string {\n if (!systemPriority) return 'transparent';\n\n switch (systemPriority) {\n case SystemPriority.P1:\n return '#ec3324';\n\n case SystemPriority.P2:\n return '#f29d39';\n\n case SystemPriority.P3:\n return '#fffe55';\n\n case SystemPriority.P4:\n return '#347ff7';\n\n case SystemPriority.P5:\n return '#58c43a';\n\n }\n }\n\n public static getSystemColorByName(systemPriority: SystemPriorityName): string {\n if (!systemPriority) return 'transparent';\n\n switch (systemPriority) {\n case SystemPriorityName.Urgent:\n return '#ec3324';\n\n case SystemPriorityName.High:\n return '#f29d39';\n\n case SystemPriorityName.Medium:\n return '#fffe55';\n\n case SystemPriorityName.Low:\n return '#347ff7';\n\n case SystemPriorityName.VeryLow:\n return '#58c43a';\n\n }\n }\n\n public static getTextColor(priority: Priority): string {\n const color = this.getColor(priority);\n return ColorUtility.idealTextColor(color);\n }\n\n public static getSortOrder(priority: HasSystemPriority): number {\n if (!priority) return 100000;\n\n const fullPriority = priority as Priority;\n\n const systemSortOrder = this.getSystemSortOrder(priority.systemPriority);\n const priorityOrder = fullPriority.sortOrder && !isNaN(fullPriority.sortOrder)\n ? fullPriority.sortOrder\n : 0;\n\n return systemSortOrder + priorityOrder;\n }\n\n public static getSystemSortOrder(systemPriority: SystemPriority): number {\n if (!systemPriority) return 100000;\n\n switch (systemPriority) {\n case SystemPriority.P1:\n return 1000;\n\n case SystemPriority.P2:\n return 2000;\n\n case SystemPriority.P3:\n return 3000;\n\n case SystemPriority.P4:\n return 4000;\n\n case SystemPriority.P5:\n return 5000;\n\n }\n }\n\n public static getAll(): SystemPriority[] {\n return [\n SystemPriority.P1,\n SystemPriority.P2,\n SystemPriority.P3,\n SystemPriority.P4,\n SystemPriority.P5\n ];\n }\n}\n","\nimport * as Enumerable from 'linq';\nimport { PriceBook, PriceListCategory, PriceListCoverageParameters, PriceListEntity, PriceListEntityCoverage } from '../entities/price.book';\nimport { DateUtility } from './date.utility';\n\nexport enum PricebookStatus {\n Valid = 'Valid',\n ExpiresSoon = 'Expires Soon',\n Expired = 'Expired',\n Pending = 'Pending'\n}\n\nexport enum PricebookGroupName {\n Global = 'Global',\n Customer = 'Customer',\n Technician = 'Technician'\n}\n\nexport type PriceBookLike = { name?: string, dateStart: Date, dateEnd: Date };\n\nexport class PricebookUtility {\n\n public static getValidPricebooks(pricebooks: PriceBookLike[]): any[] {\n\n if (!pricebooks?.length)\n return [];\n\n const today = DateUtility.getDateTime(new Date()).startOf('day');\n const defaultStartDate = new Date(1980, 1, 1, 12, 0, 0);\n\n const validPriceboos = Enumerable.from(pricebooks)\n .where(x => {\n\n if (!x?.dateEnd)\n return true;\n\n const pricebookEnd = DateUtility.getDateTime(x?.dateEnd).endOf('day');\n const pricebookStart = DateUtility.getDateTime(x?.dateStart ?? defaultStartDate).startOf('day');\n\n if (pricebookEnd < today)\n return false;\n\n if (pricebookStart > today)\n return false;\n\n return true;\n })\n .orderBy(x => x.name)\n .toArray();\n\n return validPriceboos;\n\n }\n\n\n public static getPricebookStatus(pricebook: PriceBook): PricebookStatus {\n\n if (!pricebook) return PricebookStatus.Expired;\n\n const today = DateUtility.getDateTime(new Date()).startOf('day');\n\n const warningDate = today.plus({ day: 60 }).endOf('day');\n\n const end = pricebook?.dateEnd\n ? DateUtility.getDateTime(pricebook?.dateEnd).endOf('day')\n : null;\n\n const start = pricebook?.dateStart\n ? DateUtility.getDateTime(pricebook?.dateStart).startOf('day')\n : null;\n\n switch (true) {\n\n case end < today: {\n return PricebookStatus.Expired;\n }\n\n case end <= warningDate: {\n return PricebookStatus.ExpiresSoon;\n }\n\n case start > today: {\n return PricebookStatus.Pending;\n }\n\n default:\n return PricebookStatus.Valid;\n }\n\n }\n\n public static getStatusColor(status: PricebookStatus) {\n switch (status) {\n\n case PricebookStatus.Expired: {\n return '#f65177';\n }\n\n case PricebookStatus.ExpiresSoon: {\n return 'rgb(242, 157, 57)';\n }\n\n case PricebookStatus.Pending: {\n return 'rgb(255, 254, 85)';\n }\n\n default:\n return 'rgb(88, 196, 58)';\n }\n }\n\n public static getGroupingBuyPricebooks(pricebooks: PriceBook[]): PriceBook[] {\n\n return Enumerable.from(pricebooks)\n .select(p => {\n\n const groupName = !!p.technician?._id ? PricebookGroupName.Technician : PricebookGroupName.Global;\n\n return { ...p, groupName: groupName };\n })\n .orderBy(x => {\n if (x['groupName'] === PricebookGroupName.Technician)\n return 1;\n\n if (x['groupName'] === PricebookGroupName.Global)\n return 2;\n })\n .thenBy(o => o.name)\n .toArray();\n\n }\n\n public static getGroupingSellPricebooks(pricebooks: PriceBook[]): PriceBook[] {\n\n const sellPricebooks = Enumerable.from(pricebooks)\n .select(p => {\n\n const groupName = !!p.customer?._id ? PricebookGroupName.Customer : PricebookGroupName.Global;\n\n return { ...p, groupName: groupName };\n })\n .orderBy(x => {\n if (x['groupName'] === PricebookGroupName.Customer)\n return 1;\n\n if (x['groupName'] === PricebookGroupName.Global)\n return 2;\n })\n .thenBy(o => o.name)\n .toArray();\n\n return sellPricebooks;\n\n }\n\n public static isRecommended(pricebook: PriceBook | PriceListEntityCoverage, coverageParameters: PriceListCoverageParameters, category: PriceListCategory): boolean {\n //A pricebook will be recommended if and only if\n //The pricebook has a particular coverage parameter, and we match also have supplied that coverage parameter.\n\n //This is different from the import, as we are not trying to select a pricebook, only float up ones that match\n\n const sets = [\n {\n has: pricebook?.jobTypes?.length > 0,\n matches: Enumerable.from(pricebook?.jobTypes ?? []).any(j => j._id === coverageParameters?.jobType?._id),\n },\n {\n has: pricebook?.priorities?.length > 0,\n matches: Enumerable.from(pricebook?.priorities ?? []).any(p => p._id === coverageParameters?.jobPriority?._id),\n },\n {\n has: pricebook?.zones?.length > 0,\n matches: Enumerable.from(pricebook?.zones ?? []).any(pZone => Enumerable.from(coverageParameters?.zones ?? []).any(zone => pZone._id === zone._id)),\n },\n ];\n\n if (category === PriceListCategory.Contractor || category === PriceListCategory.Supplier) {\n const matches = [\n {\n has: pricebook?.companyCoverages?.length > 0,\n matches: Enumerable.from(pricebook?.companyCoverages ?? []).any(c => c._id === coverageParameters?.company?._id),\n },\n {\n has: pricebook?.customerCoverages?.length > 0,\n matches: Enumerable.from(pricebook?.customerCoverages ?? []).any(c => c._id === coverageParameters?.customer?._id),\n },\n {\n has: pricebook?.workCategoryCoverages?.length > 0,\n matches: Enumerable.from(pricebook?.workCategoryCoverages ?? []).any(c => c._id === coverageParameters?.workCategory?._id),\n },\n ]\n\n sets.push(...matches);\n }\n\n const matchingSets = sets.filter(s => s.has && s.matches);\n\n const allSetsMatch = matchingSets.length != 0 && matchingSets.length === sets.filter(s => s.has).length;\n\n return allSetsMatch;\n }\n\n public static pickRecommendedPriceBookForAutoSet(pricebooks: PriceListEntity[]): { pricebook: PriceListEntity, message?: string } {\n\n if (pricebooks.length === 0) {\n return { pricebook: null };\n }\n\n const available = pricebooks.filter(x => x.group === 'Recommended');\n\n if (!available?.length) {\n return { pricebook: null };\n }\n\n // ge the recommended pricebook, because it match the coverage\n if (available?.length === 1) {\n return { pricebook: available[0] };\n }\n\n return { pricebook: null, message: 'Multiple pricebooks found.' };\n }\n}","import { Entity, CodeType, CodeCategory, ActivityEntityName } from './index';\n\n/// Legacy will be deleted in the future\n// export enum PriceBookType {\n// Sell = 'SELL',\n// Buy = 'BUY'\n// }\n\nexport enum PriceListMode {\n Static = 'Static',\n Dynamic = 'Dynamic'\n}\n\nexport enum PricingMethod {\n //Markup % on Cost, only for catalogue option\n CostPlus = 'CostPlus',\n //Markup % on Trade, only for catalogue option\n TradePlus = 'TradePlus',\n //Markdown % on Sale, only for catalogue option\n SellLess = 'SellLess',\n //Markup % - only appears for reference pricebook\n Markup = 'Markup',\n //Margin % - appears for reference pricebook\n Margin = 'Margin',\n\n PriceList = 'PriceList',\n RetailPrice = 'Retail Price',\n MarkupOnRetailPrice = \"Markup On Retail Price\",\n Manual = 'Manual'\n}\n\nexport const PricingMethods = {\n [PricingMethod.CostPlus]: {\n label: 'Markup % on Cost',\n showForCatalog: true,\n showForReference: false\n },\n [PricingMethod.TradePlus]: {\n label: 'Markup % on Trade',\n showForCatalog: true,\n showForReference: false\n },\n\n [PricingMethod.SellLess]: {\n label: 'Markdown % on Sell',\n showForCatalog: true,\n showForReference: false\n },\n\n [PricingMethod.Markup]: {\n label: 'Markup %',\n showForCatalog: false,\n showForReference: true\n },\n\n [PricingMethod.Margin]: {\n label: 'Margin %',\n showForCatalog: true,\n showForReference: true\n },\n}\n\nexport enum PriceListCategory {\n\n // Special Case\n Catalogue = 'Catalogue',\n\n Customer = 'Customer',\n Contractor = 'Contractor',\n Supplier = 'Supplier'\n}\n\nexport enum PricelistStatus {\n All = 'All',\n Current = 'Current',\n Future = 'Future',\n Expired = 'Expired'\n}\n\nexport interface PriceBookCategory {\n _id: string;\n category: Entity;\n priceVariance: number;\n}\n\n\nexport interface PriceBookCodeException {\n _id: string;\n code: Entity;\n price: number;\n}\n\nexport interface PriceBookGeneralLedger {\n _id: string;\n expenseGL: string;\n incomeGL: string;\n}\n\nexport interface PriceListRule extends Entity {\n itemType?: CodeType;\n codeCategories?: CodeCategory[];\n pricingMethod: PricingMethod,\n pricingValue?: number,\n pricingReference?: Entity,\n sortOrder: number;\n}\n\nexport interface WorkRoleOverride {\n _id: string;\n role: Entity;\n sellRate: number;\n}\n\nexport interface PriceBook extends Entity {\n\n tenantId: string;\n // type: PriceBookType;\n mode: PriceListMode;\n category: PriceListCategory;\n description: string;\n\n dateStart: Date;\n dateEnd: Date;\n company?: Entity;\n\n // This is being used to store supplier\n // We will migrate custoemr and technician into this field when we go to CRM PRo\n account?: Entity;\n\n customer?: Entity;\n technician?: Entity;\n\n parentOnly: boolean;\n\n parent?: Entity;\n defaultPriceVariance: number;\n isDefault: boolean;\n\n zones?: Entity[];\n jobTypes?: Entity[];\n priorities?: Entity[];\n categoryCoverages?: Entity[];\n customerCoverages?: Entity[];\n companyCoverages?: Entity[];\n workCategoryCoverages?: Entity[];\n\n categories?: PriceBookCategory[];\n\n dynamicRules?: PriceListRule[];\n workRoleOverrides?: WorkRoleOverride[];\n}\n\n\nexport interface PriceListSummary extends Entity {\n\n category: PriceListCategory;\n status: PricelistStatus;\n mode: PriceListMode;\n // type: PriceBookType;\n description: string;\n\n account: Entity;\n company: Entity;\n\n dateStart: Date;\n dateEnd: Date;\n\n parentOnly: boolean;\n group?: PriceListCategory | 'Global';\n}\n\nexport interface PriceListEntityRequest {\n includeGlobal: boolean,\n accountId: string,\n companyId: string,\n category: PriceListCategory,\n coverage?: PriceListCoverageParameters\n}\n\nexport interface PriceListEntity extends Entity {\n category: PriceListCategory;\n group: PriceListCategory | 'Global' | 'Recommended';\n dateStart: Date;\n dateEnd: Date;\n company: Entity;\n}\n\nexport interface PriceListEntityCoverage extends PriceListEntity {\n zones?: Entity[];\n jobTypes?: Entity[];\n priorities?: Entity[];\n categoryCoverages?: Entity[];\n customerCoverages?: Entity[];\n companyCoverages?: Entity[];\n workCategoryCoverages?: Entity[];\n}\n\n// export const typeFromCategory = {\n// [PriceListCategory.Contractor]: PriceBookType.Buy,\n// [PriceListCategory.Supplier]: PriceBookType.Buy,\n// [PriceListCategory.Customer]: PriceBookType.Sell,\n// };\n\n\nexport enum PricingReloadType {\n All = 'All',\n Codes = 'Codes',\n DynamicRules = 'DynamicRules',\n CodePrices = 'CodePrices'\n}\n\nexport interface PriceListCoverageParameters {\n zones?: Entity[];\n jobType?: Entity;\n jobPriority?: Entity;\n itemCategories?: Entity[];\n company: Entity;\n customer: Entity;\n workCategory: Entity;\n}\n\nexport type DefaultPriceListRequest = {\n\n /** @description ActivityEntityName.JobTemplate | ActivityEntityName.Account | ActivityEntityName.SitePro */\n entity?: ActivityEntityName;\n\n jobTemplateId?: string;\n customerId?: string;\n siteId?: string;\n}\n\nexport interface DefaultPriceListResponse {\n pricelist: Entity,\n billingCompanyOverride?: Entity;\n source?: ActivityEntityName.JobTemplate | ActivityEntityName.Account | ActivityEntityName.SitePro;\n}","import { PaymentType } from '../entities';\nimport { AccountingSystem } from '../entities/accounting/accounting.enums';\n\nexport enum AccountingSystemAction {\n\n // invoice prepayment\n CreatePrepayment = 'CreatePrepayment',\n\n // invoice payment\n CreatePayment = 'CreatePayment',\n DeletePayment = 'DeletePayment',\n\n // invoice credit refund\n CreateRefundPrepayment = 'CreateRefundPrepayment',\n DeleteRefundPrepayment = 'DeleteRefundPrepayment',\n\n CreateRefundCreditNote = 'CreateRefundCreditNote',\n DeleteRefundCreditNote = 'DeleteRefundCreditNote',\n\n // invoice allocation\n CreateInvoiceAllocation = 'CreateInvoiceAllocation',\n DeleteInvoiceAllocation = 'DeleteInvoiceAllocation',\n\n\n}\n\nexport class AccountingSystemUtility {\n\n private static supportMap: Record = {\n\n [AccountingSystem.Xero]: [\n\n AccountingSystemAction.CreatePrepayment,\n\n AccountingSystemAction.CreatePayment,\n AccountingSystemAction.DeletePayment,\n\n AccountingSystemAction.CreateRefundPrepayment,\n AccountingSystemAction.DeleteRefundPrepayment,\n\n AccountingSystemAction.CreateRefundCreditNote,\n AccountingSystemAction.DeleteRefundCreditNote,\n\n AccountingSystemAction.CreateInvoiceAllocation,\n ],\n\n [AccountingSystem.MYOB]: [\n\n AccountingSystemAction.CreatePrepayment,\n\n AccountingSystemAction.CreatePayment,\n AccountingSystemAction.DeletePayment,\n\n AccountingSystemAction.CreateRefundCreditNote,\n AccountingSystemAction.DeleteRefundCreditNote,\n\n AccountingSystemAction.CreateInvoiceAllocation,\n AccountingSystemAction.DeleteInvoiceAllocation,\n ],\n\n [AccountingSystem.QuickBooks]: [\n\n AccountingSystemAction.CreatePrepayment,\n\n AccountingSystemAction.CreatePayment,\n AccountingSystemAction.DeletePayment,\n\n AccountingSystemAction.CreateInvoiceAllocation,\n AccountingSystemAction.DeleteInvoiceAllocation,\n ],\n\n [AccountingSystem.Jobpac]: [],\n\n [AccountingSystem.Manual]: [],\n\n }\n\n\n public static isSupport(system: AccountingSystem, actions: AccountingSystemAction | Array) {\n\n if (!system) return false;\n\n if (Array.isArray(actions)) {\n return actions?.every(action => this.supportMap[system]?.includes(action));\n }\n\n return this.supportMap[system]?.includes(actions);\n }\n\n\n public static getPaymentAction(type: PaymentType, action: 'create' | 'delete'): AccountingSystemAction {\n\n switch (type) {\n\n case PaymentType.Payable:\n case PaymentType.Receivable: {\n\n const map = {\n ['create']: AccountingSystemAction.CreatePayment,\n ['delete']: AccountingSystemAction.DeletePayment,\n }\n\n return map[action];\n }\n\n case PaymentType.PayableCredit:\n case PaymentType.ReceivableCredit: {\n\n const map = {\n ['create']: AccountingSystemAction.CreateRefundCreditNote,\n ['delete']: AccountingSystemAction.DeleteRefundCreditNote,\n }\n\n return map[action];\n }\n\n case PaymentType.PayablePrepayment:\n case PaymentType.ReceivablePrepayment: {\n const map = {\n ['create']: AccountingSystemAction.CreateRefundPrepayment,\n ['delete']: AccountingSystemAction.DeleteRefundPrepayment,\n }\n\n return map[action];\n }\n\n default:\n return null;\n }\n }\n\n\n}","import * as Enumerable from 'linq';\n\nexport interface DateFormat {\n id: string;\n name: string;\n}\n\nexport interface DateFormatGroup {\n name: string;\n formats: DateFormat[];\n}\n\n\nexport class DateFormatUtility {\n\n public static getDateFormats(seperator = '/'): DateFormat[] {\n\n const mediumFormats = [\n 'dd.MM.yyyy',\n 'MM.dd.yyyy',\n 'yyyy.MM.dd'\n ];\n\n return Enumerable\n .from(mediumFormats)\n .select(x => {\n const formatted = this.replaceAll(x, '.', seperator);\n return {\n id: formatted,\n name: formatted\n };\n }).toArray();\n\n }\n\n public static getDefaultDateFormat(seperator = '/') {\n return Enumerable.from(this.getDateFormats(seperator)).select(x => x.id).firstOrDefault();\n }\n\n public static getTimeFormats(): DateFormat[] {\n\n const mediumFormats = [\n 'hh:mm a',\n 'HH:mm'\n ];\n\n return Enumerable\n .from(mediumFormats)\n .select(x => {\n return {\n id: x,\n name: x\n };\n }).toArray();\n\n }\n\n public static getDefaultTimeFormat() {\n return Enumerable.from(this.getTimeFormats()).select(x => x.id).firstOrDefault();\n }\n\n private static replaceAll(data: string, find: string, replace: string) {\n return data.split(find).join(replace);\n }\n\n}\n","\nimport Decimal from 'decimal.js';\nimport * as Enumerable from 'linq';\n\nexport enum RoundingUnit {\n Second = 's',\n Minute = 'm',\n Hour = 'h',\n Day = 'd',\n Week = 'w',\n Year = 'y',\n Millisecond = 'ms',\n Microsecond = 'µs',\n Nanosecond = 'ns'\n}\n\nexport const RoundingUnits = Object.values(RoundingUnit);\n\nconst s = 1;\nconst m = s * 60;\nconst h = m * 60;\nconst d = h * 24;\nconst w = d * 7;\nconst y = d * 365.25;\nconst ms = s / 1000;\nconst us = ms / 1000;\nconst ns = us / 1000;\n\nconst timeUnitsList = [\n { unit: RoundingUnit.Year, amount: y },\n { unit: RoundingUnit.Week, amount: w },\n { unit: RoundingUnit.Day, amount: d },\n { unit: RoundingUnit.Hour, amount: h },\n { unit: RoundingUnit.Minute, amount: m },\n { unit: RoundingUnit.Second, amount: s },\n { unit: RoundingUnit.Millisecond, amount: ms },\n { unit: RoundingUnit.Microsecond, amount: us },\n { unit: RoundingUnit.Nanosecond, amount: ns }\n];\n\nconst timeUnits = Enumerable\n .from(timeUnitsList)\n .toObject(x => x.unit, x => x.amount) as { [key: string]: number };\n\n\nexport class DurationUtility {\n\n /**\n * Formats a number of seconds.\n * @param {number} seconds The number to stringify.\n * @param {string} rounding The unit used for rounding. Defaults to 'ms'.\n * @return {string} The formatted and normalized string.\n */\n public static stringify(seconds: number, rounding = RoundingUnit.Hour) {\n\n if (!seconds)\n seconds = 0;\n\n let str = seconds < 0\n ? '-'\n : '';\n\n let nbr = Math.abs(seconds);\n let shouldStop = false;\n\n Enumerable\n .from(timeUnitsList)\n .forEach((el) => {\n if (shouldStop) {\n return\n }\n\n if (el.unit === rounding) {\n shouldStop = true\n }\n\n const tmp = el.unit === rounding ? new Decimal(nbr / el?.amount).toDecimalPlaces(2).toNumber() : Math.floor(nbr / el.amount);\n nbr -= tmp * el.amount;\n\n if (tmp !== 0) {\n str += `${tmp}${el.unit} `\n }\n\n });\n return str.length > 0 ? str.trim() : `0${rounding}`\n }\n\n\n /**\n * Parses a string using the Simple Duration Format and returns the number of seconds\n * corresponding to it.\n * @param {string} str The string to parse\n * @return {number} The number of seconds\n */\n public static parse(str: string): number {\n\n if (!str || !Enumerable.from(RoundingUnits).any(x => str.indexOf(x) != -1)) {\n if (!str) {\n str = `0${RoundingUnit.Hour}`;\n } else {\n str += RoundingUnit.Hour;\n }\n }\n\n const wsRegex = '[ \\\\t]'\n const positiveNumberRegex = '(?:0|[1-9]\\\\d*)(?:\\\\.\\\\d+)?'\n const unitRegex = '(?:ns|µs|ms|s|m|h|d|w|y)'\n const elementRegex = `(?:(${positiveNumberRegex})${wsRegex}*(${unitRegex}))`\n const wholeRegex = `^${wsRegex}*(-)?((?:${wsRegex}*${elementRegex}${wsRegex}*)+)$`\n\n const element = new RegExp(elementRegex)\n const whole = new RegExp(wholeRegex)\n\n const match = str.match(whole);\n\n if (!match) {\n throw new Error(`${str} is not a valid Duration Format`);\n }\n\n const negative = match[1] === '-';\n const elements = match[2];\n\n const re = new RegExp(element.source, 'g');\n let nmatch;\n let counter = 0;\n\n while ((nmatch = re.exec(elements)) !== null) {\n\n const nbr = parseFloat(nmatch[1])\n const unit = nmatch[2]\n counter += nbr * timeUnits[unit];\n }\n\n return (negative ? -1 : 1) * counter\n }\n\n public static formatDurationForFullCalendar(durationInSeconds: number): string {\n const hours = Math.floor(durationInSeconds / 3600);\n const minutes = Math.floor((durationInSeconds % 3600) / 60);\n\n const formattedHours = hours.toString().padStart(2, '0');\n const formattedMinutes = minutes.toString().padStart(2, '0');\n\n return `${formattedHours}:${formattedMinutes}`;\n }\n\n}\n\n","import * as Enumerable from 'linq';\nimport { EntityForm } from '../entities';\nimport { MetadataEntityFieldData, MetadataEntityFieldGroup } from '../metadata';\n\nexport class EntityFormUtility {\n\n public static isValid(entityForm: EntityForm, fields: MetadataEntityFieldGroup[]) {\n\n const iFields = Enumerable.from(fields).selectMany(x => x.fields).where(x => !x.readonly);\n\n const optionFields = iFields.where(x => this.isInitOptionField(x)).toArray();\n const defaultFields = iFields.where(x => this.isDefaultField(x)).toArray();\n\n // Check if options field error\n\n const isValidRequiredField = Enumerable.from(optionFields)\n .all(x => {\n return Enumerable.from(entityForm.options)\n .any(path => path === x.path)\n });\n\n\n // Check if default field error\n\n const defaultValue = entityForm.defaultValue ?? {};\n const isValidDefaultField = Enumerable.from(defaultFields)\n .any(x => {\n return !!defaultValue[x.path]\n });\n\n\n return isValidRequiredField && isValidDefaultField\n }\n\n public static getFieldOptions(options: string[], fields: MetadataEntityFieldGroup[]) {\n const flatFields = Enumerable.from(fields).selectMany(x => x.fields);\n\n const result = Enumerable.from(options).select(path => {\n return flatFields.singleOrDefault(x => x.path === path);\n }).where(x => !!x).toArray()\n\n return result;\n }\n\n public static isInitOptionField(field: MetadataEntityFieldData) {\n return field.webForm && field.required;\n }\n\n public static isDefaultField(field: MetadataEntityFieldData) {\n return !field.webForm && field.required;\n }\n\n}","import { Activity, ActivityEntityName, ActivityType, Bill, BulkInvoiceLineValue, CodeFinance, CodeInvoiceStatus, CodeStatus, Company, Contact, ConvertToInvoiceRequest, CreditAmount, DueDateOptions, DueDateType, EmbeddedCode, EmbeddedCodeGroup, EntityLink, Invoice, InvoiceBillingCompany, InvoiceCalculationDomain, InvoiceContact, InvoiceCreatedType, InvoiceLine, InvoiceStatus, InvoiceType, InvoiceViewSummary, InvoicingSummary, InvoicingViewByDays, ItemLinkEntity, Job, LabourCodeId, LineAccounting, PrepaymentSetting, PurchaseOrderLine, SitePro, TaxInclusiveOption, TaxRate, TimesheetTable, WorkOrder } from '../entities';\nimport { DateUtility } from './date.utility';\nimport { Decimal } from 'decimal.js';\nimport { DateTime } from 'luxon';\nimport { LinkRelationship } from '../enums';\nimport * as Enumerable from 'linq';\nimport { AddressUtility } from './address.utility';\nimport { JobUtility } from './job.utility';\n\nexport class InvoiceUtility {\n\n\n public static getManualInvoice(request: ConvertToInvoiceRequest): Invoice {\n request.invoiceType = InvoiceType.Invoice;\n request.createdType = InvoiceCreatedType.Default;\n const invoice = this.get(request);\n return invoice;\n }\n\n public static getInvoiceFromJob(request: ConvertToInvoiceRequest): Invoice {\n request.invoiceType = InvoiceType.Invoice;\n request.createdType = InvoiceCreatedType.FromJob;\n const invoice = this.get(request);\n return invoice;\n }\n\n public static getInvoiceFromWorkOrder(request: ConvertToInvoiceRequest): Invoice {\n request.invoiceType = InvoiceType.Invoice;\n request.createdType = InvoiceCreatedType.FromWorkOrder;\n const invoice = this.get(request);\n return invoice;\n }\n\n public static getBill(request: ConvertToInvoiceRequest, isPrepayment: boolean, settings: PrepaymentSetting): Bill {\n if (isPrepayment) {\n request.invoiceType = InvoiceType.PrepaymentSupplier;\n }\n else {\n request.invoiceType = InvoiceType.Bill;\n }\n\n request = { ...request, company: request.company };\n const bill = this.get(request);\n\n if (isPrepayment) {\n return this.buildBillLinePrepayment(bill, request.taxRate, settings);\n }\n\n return bill;\n }\n\n private static buildBillLinePrepayment(bill: Bill, taxRate: TaxRate, settings: PrepaymentSetting): Bill {\n const line: InvoiceLine = {\n _id: undefined,\n name: settings?.name ?? 'Prepayment',\n description: null,\n quantity: 1,\n price: 0,\n subTotal: 0,\n tax: 0,\n total: 0,\n taxRate,\n codeInvoicingStatus: CodeInvoiceStatus.Billable,\n };\n\n bill.lines = [line];\n return bill;\n }\n\n public static getInvoiceContact(customer: Contact, site: SitePro): InvoiceContact {\n const { billTo } = customer;\n\n const contact = customer ?\n {\n _id: billTo?.company?._id,\n name: billTo?.company?.legalName,\n friendlyName: billTo?.company?.name,\n address: billTo?.site?.address,\n email: billTo?.contact?.email,\n phone: billTo?.contact?.mobile,\n contactId: billTo?.contact?._id,\n contactName: billTo?.contact?.name,\n originalAccount: {\n _id: customer?._id,\n name: customer?.name\n },\n type: 'Customer',\n invoiceTheme: site?.invoiceTheme ?? customer?.invoiceTheme ?? null\n } as InvoiceContact\n : null;\n\n return contact;\n }\n\n public static getBillContact(technician: Contact): InvoiceContact {\n const contact = technician ?\n {\n _id: technician?.billTo?.company?._id,\n name: technician?.billTo?.company?.legalName,\n address: technician.billTo?.site?.address,\n email: technician.billTo?.contact?.email,\n phone: technician.billTo?.contact?.mobile,\n contactId: technician.billTo?.contact?._id,\n contactName: technician.billTo?.contact?.name,\n friendlyName: technician.billTo?.company?.name,\n originalAccount: {\n _id: technician._id,\n name: technician.name\n },\n type: 'Technician',\n billTheme: technician?.billTheme\n } as InvoiceContact\n : null;\n\n return contact;\n }\n\n private static get(request: ConvertToInvoiceRequest): T {\n\n const { job, workOrder, purchaseOrder, company, taxRate, customer, technician, invoiceType: invoicingType, createdType, codesFinance, labourCode, defaultIncomeTaxRate, site } = request;\n\n let contact: InvoiceContact = null;\n let lines: InvoiceLine[] = [];\n let links: EntityLink[] = [];\n let taxInclusiveOption = TaxInclusiveOption.Exclusive;\n\n let timezone = job?.site?.address?.timezone ?? Intl.DateTimeFormat().resolvedOptions().timeZone;\n const jobAddress = job?.site?.address;\n\n const billingCompany = InvoiceUtility.buildInvoiceCompany(company);\n\n\n switch (invoicingType) {\n\n case InvoiceType.Bill: {\n\n contact = this.getBillContact(technician);\n\n switch (createdType) {\n\n case InvoiceCreatedType.FromWorkOrder: {\n lines = Enumerable\n .from(workOrder?.codes)\n .where(x => InvoiceUtility.validBillCode(x, request?.suppliedByContractor))\n .select(code => {\n\n const financeInfo = Enumerable.from(codesFinance).firstOrDefault(x => x?.name === code?.name);\n\n const { glCode, codeTaxRate, codeRate } = this.getCodeFinanceDetails(financeInfo, invoicingType, taxRate);\n\n const qty = code?.quantity ?? 1;\n const price = new Decimal(code?.buyPrice ?? 0).toDP(4).toNumber();\n const lineSubTotal = new Decimal(qty * price).toDP(2).toNumber();\n const lineTax = new Decimal(lineSubTotal * codeRate).toDP(2).toNumber();\n const lineTotal = new Decimal(lineSubTotal + lineTax).toDP(2).toNumber();\n\n const desc = request?.appendLongDescription && code?.longDescription ? `${code.description} - ${code.longDescription}`.trim() : code.description;\n return {\n name: code.name,\n description: desc,\n notes: code.note,\n location: code.location,\n codeStatus: code.status,\n quantity: qty,\n price: price,\n subTotal: lineSubTotal,\n tax: lineTax,\n total: lineTotal,\n uom: code.uom,\n codeUoM: code.codeUoM,\n itemLink: {\n _id: workOrder._id,\n name: workOrder.name,\n lineId: code._id\n },\n glCode,\n taxRate: codeTaxRate,\n type: code?.type,\n } as InvoiceLine;\n\n\n }).toArray();\n\n break;\n }\n\n case InvoiceCreatedType.FromPurchaseOrder: {\n\n const { billTo } = customer;\n\n contact = customer ?\n {\n _id: billTo?.company?._id,\n name: billTo?.company?.legalName,\n friendlyName: billTo?.company?.name,\n address: billTo?.site?.address,\n email: billTo?.contact?.email,\n phone: billTo?.contact?.mobile,\n contactId: billTo?.contact?._id,\n contactName: billTo?.contact?.name,\n originalAccount: {\n _id: customer?._id,\n name: customer?.name\n },\n type: 'Customer',\n invoiceTheme: site?.invoiceTheme ?? customer?.invoiceTheme ?? null\n } as InvoiceContact\n : null;\n\n links = [\n ...links,\n {\n _id: purchaseOrder._id,\n name: purchaseOrder.poNumber,\n type: ActivityEntityName.PurchaseOrder,\n relationship: LinkRelationship.From\n } as EntityLink\n ];\n\n lines = Enumerable\n .from(purchaseOrder?.lines)\n .where(x => x.createFromCode)\n .select(line => {\n\n const financeInfo = Enumerable.from(codesFinance).firstOrDefault(x => x?.name === line?.name);\n const { glCode } = this.getCodeFinanceDetails(financeInfo, invoicingType, taxRate);\n\n return {\n _id: line._id,\n name: line.name,\n description: line.description,\n notes: line.notes,\n location: line.location,\n codeStatus: CodeStatus.Normal,\n quantity: line.quantity,\n price: line.price,\n subTotal: line.subTotal,\n tax: line.tax,\n total: line.total,\n uom: line.uom,\n codeUoM: line.codeUoM,\n itemLink: line.itemLink,\n glCode,\n taxRate: line.taxRate,\n type: line.type,\n } as InvoiceLine;\n\n\n })\n .toArray();\n\n taxInclusiveOption = purchaseOrder.taxInclusiveOption;\n timezone = company?.address?.timezone ?? timezone;\n\n break;\n }\n\n case InvoiceCreatedType.Default: {\n\n lines = [];\n break;\n\n }\n\n }\n\n break;\n }\n\n case InvoiceType.Invoice: {\n\n contact = this.getInvoiceContact(customer, site);\n // const { billTo } = customer;\n\n // contact = customer ?\n // {\n // _id: billTo?.company?._id,\n // name: billTo?.company?.legalName,\n // friendlyName: billTo?.company?.name,\n // address: billTo?.site?.address,\n // email: billTo?.contact?.email,\n // phone: billTo?.contact?.mobile,\n // contactId: billTo?.contact?._id,\n // contactName: billTo?.contact?.name,\n // originalAccount: {\n // _id: customer?._id,\n // name: customer?.name\n // },\n // type: 'Supplier',\n // invoiceTheme: customer?.invoiceTheme ?? null\n // } as InvoiceContact\n // : null;\n\n\n\n switch (createdType) {\n\n case InvoiceCreatedType.FromJob: {\n //Need to make sure that we only add the labour code once\n let labourCodeAdded = false;\n lines = Enumerable\n .from(job.workOrders)\n .select(w => {\n let codes = [];\n if (labourCodeAdded) {\n codes = w?.codes;\n }\n else {\n labourCodeAdded = true;\n //Add the labour code as the first code\n codes = labourCode ? [labourCode, ...(w?.codes ?? [])] : w?.codes;\n }\n\n return Enumerable.from(codes)\n .where(x => InvoiceUtility.validInvoiceCode(x))\n .select(code => {\n\n const itemLink = {\n _id: w._id,\n name: w.name,\n lineId: code._id\n } as ItemLinkEntity;\n\n return this.createInvoiceLine(code, codesFinance, invoicingType, taxRate, itemLink, defaultIncomeTaxRate, request.appendLongDescription);\n\n }).toArray();\n })\n .selectMany(x => [...x])\n .toArray();\n break;\n }\n\n case InvoiceCreatedType.FromWorkOrder: {\n\n lines = Enumerable\n .from(job.workOrders)\n .where(x => x._id === workOrder._id)\n .selectMany(w => {\n\n const codes = labourCode\n ? [labourCode, ...(w?.codes ?? [])]\n : w?.codes\n\n return codes;\n })\n .where(x => InvoiceUtility.validInvoiceCode(x))\n .select(code => {\n\n const itemLink = {\n _id: workOrder._id,\n name: workOrder.name,\n lineId: code._id\n } as ItemLinkEntity;\n\n return this.createInvoiceLine(code, codesFinance, invoicingType, taxRate, itemLink, defaultIncomeTaxRate, request.appendLongDescription);\n }).toArray();\n\n break;\n }\n\n case InvoiceCreatedType.Default: {\n\n lines = [];\n\n break;\n }\n }\n\n break;\n }\n }\n\n let subTotal = 0;\n let tax = 0;\n let total = 0;\n\n Enumerable\n .from(lines)\n .forEach(l => {\n subTotal += l.subTotal;\n tax += l.tax;\n total += l.total;\n });\n\n const now = new Date();\n const today = DateUtility.getDateTime(now, timezone).startOf('day');\n\n const account = invoicingType === InvoiceType.Bill\n ? technician\n : customer;\n\n const dueDate = this.getDueDateFromAccount(account?.credit?.dueDate, today).toJSDate();\n\n const invoice = {\n _id: null,\n active: true,\n status: InvoiceStatus.Draft,\n invoiceDate: now,\n generatedDate: now,\n dueDate,\n lines,\n contact,\n billingCompany: billingCompany,\n customerReference: job?.customerWO,\n job: job ? { _id: job._id, name: job.jobNumber } : null,\n workOrder: workOrder?._id ? { _id: workOrder._id, name: workOrder.workOrderNumber } : null,\n subTotal: new Decimal(subTotal).toDP(2).toNumber(),\n tax: new Decimal(tax).toDP(2).toNumber(),\n total: new Decimal(total).toDP(2).toNumber(),\n taxInclusiveOption,\n terms: billingCompany?.invoiceDetails,\n notes: null,\n taxRate,\n timezone,\n jobAddress,\n timesheetIds: labourCode?.timesheetIds ?? [],\n theme: invoicingType === InvoiceType.Bill\n ? contact?.billTheme\n : contact?.invoiceTheme,\n links\n } as Invoice;\n\n if (invoicingType === InvoiceType.Bill) {\n\n const bill = {\n ...invoice,\n workOrder: workOrder\n ? { _id: workOrder._id, name: workOrder.workOrderNumber }\n : null,\n customerReference: workOrder?.workOrderNumber ?? null,\n theme: contact?.billTheme\n };\n\n return bill as T;\n }\n\n return invoice as T;\n }\n\n public static createInvoiceLine(code: EmbeddedCode, codesFinance: CodeFinance[], invoicingType: InvoiceType, taxRate: TaxRate, itemLink: ItemLinkEntity, defaultIncomeTaxRate: TaxRate, appendLongDescription: boolean = false): InvoiceLine {\n const financeInfo = codesFinance?.find(x => x.name === code.name);\n const { glCode, codeTaxRate, codeRate } = this.getCodeFinanceDetails(financeInfo, invoicingType, taxRate);\n\n const noCharge = code.codeInvoicingStatus === CodeInvoiceStatus.NoCharge;\n const qty = code?.quantity ?? 1;\n const price = noCharge\n ? 0\n : new Decimal(code?.sellPrice ?? 0).toDP(4).toNumber();\n const lineSubTotal = new Decimal(qty * price).toDP(2).toNumber();\n const lineTax = new Decimal(lineSubTotal * codeRate).toDP(2).toNumber();\n const lineTotal = new Decimal(lineSubTotal + lineTax).toDP(2).toNumber();\n const desc = appendLongDescription && code?.longDescription ? `${code.description} - ${code.longDescription}`.trim() : code.description;\n\n const line = {\n name: code.name,\n description: desc,\n notes: code.note,\n location: code.location,\n codeStatus: code.status,\n quantity: qty,\n price: price,\n subTotal: lineSubTotal,\n tax: lineTax,\n total: lineTotal,\n uom: code.uom,\n codeUoM: code.codeUoM,\n itemLink: itemLink,\n glCode,\n taxRate: codeTaxRate,\n type: code?.type\n } as InvoiceLine;\n\n if (code?._id === LabourCodeId) {\n line.taxRate = defaultIncomeTaxRate;\n }\n\n\n return line;\n }\n\n public static getDueDateFromAccount(dueDateOptions: DueDateOptions, relativeDate: DateTime): DateTime {\n\n //Default behaviour is last day of next month\n const method = dueDateOptions?.type ?? DueDateType.XDayFollowingMonth;\n const days = dueDateOptions?.value ?? 31;\n let dueDate = relativeDate;\n switch (method) {\n case DueDateType.DueOnReceipt:\n {\n dueDate = relativeDate;\n break;\n }\n case DueDateType.XDayAfterEndOfBillInvoiceMonth:\n {\n dueDate = dueDate.endOf('month').plus({ day: days }).startOf('day'); //.toJSDate();\n break;\n }\n case DueDateType.XDayAfterTheBillInvoiceDate:\n {\n dueDate = dueDate.plus({ day: days }); //.toJSDate();\n break;\n }\n case DueDateType.XDayCurrentMonth:\n {\n const month = dueDate.month;\n const year = dueDate.year;\n const currentDay = dueDate.day;\n const safeDay = DateUtility.getValidDayForMonthAndYear(days, month, year);\n //This mode could result in a due date prior to invoice date - prevent that\n dueDate = dueDate.set({ day: safeDay > currentDay ? safeDay : currentDay });\n break;\n }\n case DueDateType.XDayFollowingMonth:\n {\n dueDate = dueDate.endOf('month').plus({ day: 1 }).startOf('day');\n const month = dueDate.month;\n const year = dueDate.year;\n const safeDay = DateUtility.getValidDayForMonthAndYear(days, month, year);\n dueDate = dueDate.set({ day: safeDay });\n break;\n }\n default:\n {\n dueDate = dueDate.endOf('month').plus({ month: 1 }).startOf('day');\n break;\n }\n }\n return dueDate;\n }\n\n public static getDefaultLine(): InvoiceLine {\n return {\n name: null,\n description: null,\n quantity: 1,\n notes: null,\n price: 0,\n tax: 0,\n subTotal: 0,\n total: 0,\n codeUoM: null,\n glCode: null,\n taxRate: null,\n } as InvoiceLine;\n }\n\n public static getInvoiceSummary(invoice: Invoice | Bill): InvoicingSummary {\n\n let invoiceSummary: InvoicingSummary = {\n _id: invoice._id,\n type: invoice.type,\n address: invoice?.jobAddress ?? invoice.contact?.address,\n jobAddress: invoice?.jobAddress,\n status: invoice.status,\n contact: invoice.contact?.name,\n invoiceNumber: invoice.invoiceNumber,\n invoiceDate: invoice.invoiceDate,\n dueDate: invoice.dueDate,\n total: invoice.total,\n subTotal: invoice.subTotal,\n version: invoice.version,\n job: invoice?.job?.name,\n integration: {\n success: invoice?.integration?.success,\n type: invoice?.integration?.type,\n integrationInvoiceId: invoice?.integration?.integrationInvoiceId\n },\n company: undefined,\n billingCompany: undefined,\n prepaymentSubTotal: invoice.prepaymentSubTotal,\n prepaymentTotal: invoice.prepaymentTotal,\n creditAmount: invoice.creditAmount,\n amountPaid: invoice.amountPaid,\n };\n\n return invoiceSummary;\n }\n\n private static getCodeFinanceDetails(financeInfo: CodeFinance, invType: InvoiceType, defaultTaxRate: TaxRate) {\n\n let glCode: string = null;\n let codeTaxRate: TaxRate = null;\n let codeRate: number = 0;\n\n if (invType == InvoiceType.Bill) {\n glCode = financeInfo?.itemPurchased ? financeInfo?.purchaseGlCode : null;\n codeTaxRate = (financeInfo?.itemPurchased ? financeInfo?.purchaseTaxRate : null) ?? defaultTaxRate;\n }\n else if (invType == InvoiceType.Invoice) {\n glCode = financeInfo?.itemSold ? financeInfo?.saleGlCode : null;\n codeTaxRate = (financeInfo?.itemSold ? financeInfo?.saleTaxRate : null) ?? defaultTaxRate;\n }\n //If we have an empty string for the glCode, force it to be null\n if (!glCode)\n glCode = null;\n codeRate = (codeTaxRate?.rate ?? 0) / 100;\n return {\n glCode,\n codeTaxRate,\n codeRate\n };\n }\n\n public static getDefaultInvoicing(): any {\n\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n const today = DateUtility.getDateTime(new Date(), timezone).startOf('day');\n\n const defaultData: Partial = {\n _id: null,\n invoiceNumber: null,\n invoiceDate: today.toJSDate(),\n dueDate: today.endOf('month').plus({ day: 1 }).endOf('month').toJSDate(),\n contact: null,\n customerReference: null,\n notes: null,\n integration: null,\n job: null,\n workOrder: null,\n taxInclusiveOption: TaxInclusiveOption.Exclusive,\n billingCompany: null,\n status: InvoiceStatus.Draft,\n createdBy: null,\n taxRate: null,\n attachments: [],\n terms: null,\n timezone: timezone,\n lines: [],\n subTotal: 0,\n tax: 0,\n total: 0,\n\n amountPaid: 0,\n lastPaymentDate: null,\n isReconcile: false,\n roundingAmount: 0,\n };\n return defaultData;\n }\n\n public static getDefaultViews(): InvoiceViewSummary[] {\n\n const defaultViews = [];\n\n defaultViews.push({\n _id: InvoicingViewByDays.Last30Days,\n name: InvoicingViewByDays.Last30Days,\n isDefault: true,\n system: true,\n selected: false,\n ownerId: null,\n filters: {\n dayRange: InvoicingViewByDays.Last30Days\n }\n } as InvoiceViewSummary);\n\n defaultViews.push({\n _id: InvoicingViewByDays.Last60Days,\n name: InvoicingViewByDays.Last60Days,\n isDefault: false,\n system: true,\n selected: false,\n ownerId: null,\n filters: {\n dayRange: InvoicingViewByDays.Last60Days\n }\n } as InvoiceViewSummary);\n\n defaultViews.push({\n _id: InvoicingViewByDays.Last90Days,\n name: InvoicingViewByDays.Last90Days,\n isDefault: false,\n system: true,\n selected: false,\n ownerId: null,\n filters: {\n dayRange: InvoicingViewByDays.Last90Days\n }\n } as InvoiceViewSummary);\n\n defaultViews.push({\n _id: InvoicingViewByDays.Last90PlusDays,\n name: InvoicingViewByDays.Last90PlusDays,\n isDefault: false,\n system: true,\n selected: false,\n ownerId: null,\n filters: {\n dayRange: InvoicingViewByDays.Last90PlusDays\n }\n } as InvoiceViewSummary);\n\n return defaultViews;\n }\n\n public static formatLinesPrice(lines: InvoiceLine[] = []): InvoiceLine[] {\n\n lines = Enumerable.from(lines).select(x => {\n x.price = Math.abs(new Decimal(x?.price ?? 0).toDP(4).toNumber());\n\n return x;\n }).toArray()\n\n return lines;\n\n }\n\n public static calculatePaymentAmount(total = 0, amountPaid = 0, isReconcile = false): { outstandingAmount: number, roundingAmount: number } {\n let outstandingAmount = 0;\n let roundingAmount = 0;\n total = total || 0;\n amountPaid = amountPaid || 0;\n const diffAmount = new Decimal(total - amountPaid).toDP(2).toNumber();\n\n if (isReconcile) {\n roundingAmount = diffAmount;\n outstandingAmount = 0;\n } else {\n roundingAmount = 0;\n outstandingAmount = diffAmount;\n }\n\n return { outstandingAmount, roundingAmount };\n }\n\n\n public static getInvoiceLineTotal(lines: InvoiceLine[], defaultTaxRate: TaxRate, taxInclusiveOption: TaxInclusiveOption): LineAccounting {\n\n\n let subTotal = new Decimal(0);\n let tax = new Decimal(0);\n let total = new Decimal(0);\n\n Enumerable.from(lines)\n .forEach(line => {\n\n const rate = this.getTaxRate(line.taxRate, defaultTaxRate);\n\n const qty = line.quantity ?? 1;\n\n const price = new Decimal(line?.price ?? 0).toDP(4).toNumber();\n\n const lineSubTotal = new Decimal(qty * price).toDP(2).toNumber();\n\n let lineTax = 0;\n let lineTotal = 0;\n\n switch (taxInclusiveOption) {\n case TaxInclusiveOption.Exclusive:\n lineTax = new Decimal(Number(lineSubTotal * rate)).toDP(2).toNumber();\n lineTotal = new Decimal(lineSubTotal + lineTax).toDP(2).toNumber();\n break;\n\n case TaxInclusiveOption.Inclusive:\n const taxPlus = 1 + rate;\n lineTax = new Decimal((lineSubTotal / taxPlus) * rate).toDP(2).toNumber();\n lineTotal = lineSubTotal;\n break;\n }\n\n line.subTotal = lineSubTotal;\n line.tax = lineTax;\n line.total = lineTotal;\n\n subTotal = subTotal.plus(line.subTotal);\n tax = tax.plus(line.tax);\n total = total.plus(line.total);\n });\n\n return {\n lines: lines,\n subTotal: subTotal.toDP(4).toNumber(),\n tax: tax.toDP(4).toNumber() ?? 0,\n total: total.toDP(4).toNumber() ?? 0\n };\n }\n\n ///Need to review the rounding issues when working backwards from the tax inclusive option\n //Theres a difference where we are using this to calculate the ex-tax unit price\n public static calculateTax(subTotal: number, taxRate: TaxRate, taxInclusiveOption: TaxInclusiveOption, defaultTaxRate: TaxRate) {\n const rate = this.getTaxRate(taxRate, defaultTaxRate);\n let lineTax = 0;\n switch (taxInclusiveOption) {\n case TaxInclusiveOption.Exclusive:\n lineTax = new Decimal(Number(subTotal * rate)).toDP(2).toNumber();\n break;\n\n case TaxInclusiveOption.Inclusive:\n const taxPlus = 1 + rate;\n lineTax = new Decimal((subTotal / taxPlus) * rate).toDP(2).toNumber();\n break;\n }\n return lineTax;\n }\n\n public static calculateExTaxUnitPrice(unitPrice: number, taxRate: TaxRate, taxInclusiveOption: TaxInclusiveOption, defaultTaxRate: TaxRate) {\n const rate = this.getTaxRate(taxRate, defaultTaxRate);\n let exTaxUnitPrice = 0;\n switch (taxInclusiveOption) {\n case TaxInclusiveOption.Exclusive:\n exTaxUnitPrice = unitPrice;\n break;\n case TaxInclusiveOption.Inclusive:\n const taxPlus = 1 + rate;\n const lineTax = new Decimal((unitPrice / taxPlus) * rate).toDP(4).toNumber();\n exTaxUnitPrice = unitPrice - lineTax;\n break;\n }\n return exTaxUnitPrice;\n }\n\n public static getPurchaseOrderLineTotal(lines: PurchaseOrderLine[], defaultTaxRate: TaxRate, taxInclusiveOption: TaxInclusiveOption, markupPercent: number): LineAccounting {\n\n\n const markupRate = markupPercent ? markupPercent / 100 : 0;\n\n let tax = 0;\n let subTotal = 0;\n let total = 0;\n let supplierMarkup = 0;\n\n Enumerable.from(lines)\n .forEach(line => {\n const rate = this.getTaxRate(line.taxRate, defaultTaxRate);\n\n const qty = line.quantity ?? 1;\n\n const price = new Decimal(+line?.price).toDP(4).toNumber();\n\n const lineSubTotal = new Decimal(qty * price).toDP(2).toNumber();;\n\n let lineTax = 0;\n let lineTotal = 0;\n let lineMarkup = 0;\n\n switch (taxInclusiveOption) {\n case TaxInclusiveOption.Exclusive:\n lineTax = Number(lineSubTotal * rate);\n lineTotal = lineSubTotal + lineTax;\n break;\n\n case TaxInclusiveOption.Inclusive:\n const taxPlus = 1 + rate;\n lineTax = (lineSubTotal / taxPlus) * rate;\n lineTotal = lineSubTotal;\n break;\n }\n\n lineMarkup = Number(lineSubTotal * markupRate);\n // add code\n line.subTotal = lineSubTotal;\n line.tax = lineTax;\n line.total = lineTotal;\n\n supplierMarkup += lineMarkup;\n subTotal += lineSubTotal;\n tax += lineTax;\n total += lineTotal + lineMarkup;\n });\n\n\n return {\n lines: lines,\n supplierMarkup: supplierMarkup ?? 0,\n subTotal: subTotal ?? 0,\n tax: tax ?? 0,\n total: total ?? 0\n };\n }\n\n public static sortedInvoiceActivities(activities: Activity[]): Activity[] {\n\n const sorted = Enumerable.from(activities)\n .orderByDescending(x => x.createdDate)\n .thenBy(x => {\n\n switch (x.type) {\n case ActivityType.JobBilled:\n return 6;\n case ActivityType.InvoiceCreated:\n return 5;\n case ActivityType.InvoiceApproved:\n return 4;\n case ActivityType.InvoiceReissue:\n return 3;\n case ActivityType.InvoiceError:\n return 2;\n case ActivityType.InvoiceVoid:\n return 1;\n }\n\n }).toArray();\n\n return sorted;\n\n }\n\n public static sortedBillActivities(activities: Activity[]): Activity[] {\n\n const sorted = Enumerable.from(activities)\n .orderBy(x => x.createdDate)\n .thenBy(x => {\n\n switch (x.type) {\n case ActivityType.WorkOrderBill:\n return 6;\n case ActivityType.BillCreated:\n return 5;\n case ActivityType.BillApproved:\n return 4;\n case ActivityType.BillReissue:\n return 3;\n case ActivityType.BillError:\n return 2;\n case ActivityType.BillVoid:\n return 1;\n }\n\n }).toArray();\n\n return sorted;\n\n }\n\n public static getCreditAmount(invoices: Invoice[]): CreditAmount {\n\n if (!invoices?.length) {\n return {\n outstanding: 0,\n overdue: 0\n } as CreditAmount;\n }\n\n let total = 0;\n let payments = 0;\n let rounding = 0;\n let overdueTotal = 0;\n let overduePayments = 0;\n let overdueRounding = 0;\n\n\n\n Enumerable\n .from(invoices)\n .forEach(x => {\n total += x?.total ?? 0;\n payments += x?.amountPaid ?? 0;\n rounding += x?.roundingAmount ?? 0;\n\n const timezone = x?.jobAddress?.timezone ?? x?.timezone;\n const dueDate = DateUtility.getDateTime(x.dueDate, timezone);\n const today = DateUtility.getDateTime(new Date(), timezone).startOf('day');\n\n if (dueDate < today) {\n overdueTotal += x?.total ?? 0;\n overduePayments += x?.amountPaid ?? 0;\n overdueRounding += x?.roundingAmount ?? 0;\n }\n });\n\n return {\n outstanding: new Decimal((total - (payments + rounding))).toDP(2).toNumber(),\n overdue: new Decimal((overdueTotal - (overduePayments + overdueRounding))).toDP(2).toNumber()\n } as CreditAmount;\n\n }\n\n private static validInvoiceCode(code: EmbeddedCode, options?: { bypassInvoiceCheck: boolean }): boolean {\n\n if (code?.status === CodeStatus.Cancelled)\n return false;\n\n if (code?.codeInvoicingStatus === CodeInvoiceStatus.NotBillable)\n return false;\n\n if (!options?.bypassInvoiceCheck && code?.invoice)\n return false;\n\n //Do not add a labour code with a zero total\n if (code.type === \"LABOUR\" && code.sellPrice == 0)\n return false;\n\n return true;\n }\n\n\n public static validBillCode(code: EmbeddedCode, suppliedByContractor: boolean = true): boolean {\n\n if (code?.status === CodeStatus.Cancelled)\n return false;\n\n if (suppliedByContractor && !code?.suppliedBySubcontractor)\n return false;\n\n if (!suppliedByContractor && code?.suppliedBySubcontractor)\n return false;\n\n if (code.bill)\n return false;\n\n if (!!code?.purchaseOrder?._id)\n return false;\n\n return true;\n\n }\n\n public static getTaxRate(lineTax: TaxRate, defaultTax: TaxRate): number {\n const rate = lineTax?.rate ?? defaultTax?.rate ?? 0;\n return rate / 100;\n }\n\n\n public static updateInvoices(invoice: Invoice, items: InvoicingSummary[]): InvoicingSummary[] {\n\n const index = Enumerable.from(items).indexOf((x) => x._id === invoice._id);\n\n const newItem = this.getInvoiceSummary(invoice);\n const item: any = {\n ...newItem,\n // contact: invoice.contact.friendlyName,\n contactId: invoice.contact._id,\n job: invoice.job?.name,\n workOrder: invoice.workOrder?.name\n }\n\n const newItems = index === -1 ? [...items, item] : [...items.slice(0, index), item, ...items.slice(index + 1)];\n return newItems;\n }\n\n public static getFinanceToolTip(item: EmbeddedCodeGroup): string {\n\n if (item?.invoiceApproved && item?.billApproved) {\n return `Invoice/Bill ${item.invoice.name}/${item.bill.name} is linked to this item. Editing is locked.`;\n }\n\n if (item?.invoiceApproved) {\n return `Invoice ${item.invoice.name} is linked to this item. Editing is locked.`;\n }\n\n if (item?.billApproved) {\n return `Bill ${item.bill.name} is linked to this item. Editing is locked.`;\n }\n\n return \"\";\n }\n\n public static getTimesheetFinanceToolTip(item: TimesheetTable): string {\n\n if (item?.invoiceApproved) {\n return `Invoice ${item.invoice.name} is linked to this item. Editing is locked.`;\n }\n\n return \"\";\n }\n\n public static getFinanceRecordRights(record: T, canManageRecord: boolean, canManageApprovedRecord: boolean, canAccessPayment: boolean, canManagePayment: boolean): FinanceRecordRights {\n\n const draft = record?.status === InvoiceStatus.Draft;\n const approved = record?.status === InvoiceStatus.Approved;\n const typePrepayment = [InvoiceType.PrepaymentInvoice, InvoiceType.PrepaymentSupplier].includes(record?.type);\n const typeCreditNote = [InvoiceType.CreditNote, InvoiceType.CreditNoteSupplier].includes(record?.type) || record?.total < 0;\n\n const noPayments = !record?.hasPayments\n const noAllocation = !record?.hasAllocation\n\n const showButtonSync = canAccessPayment && canManagePayment && approved && !typePrepayment; // TODO: maybe enable sync prepayment invoice later, show when paid amount == prepayment total\n const showButtonEdit = ((canManageRecord && draft) || (canManageRecord && approved && canManageApprovedRecord && noPayments && noAllocation))\n && !typePrepayment; // TODO: enable edit prepayment invoice, can change the lines but the prepayment total should be the same\n const showButtonProcessing = canManageRecord && noPayments;\n const showButtonReissue = approved && !typePrepayment;\n const showTabPayment = canAccessPayment && !draft;\n\n const showUpdateAndRecalculate = showButtonEdit && !typeCreditNote;\n const showEditForPrepayment = typePrepayment && noPayments && noAllocation;\n\n\n const rights: FinanceRecordRights = {\n showButtonSync,\n showButtonEdit,\n showButtonProcessing,\n showButtonReissue,\n showTabPayment,\n showUpdateAndRecalculate,\n showEditForPrepayment: showEditForPrepayment,\n };\n\n return rights;\n }\n\n public static canEditCustomer(invoice: Invoice, canManageApproved: boolean) {\n const domain = InvoiceCalculationDomain.from(invoice, false);\n const isDraft = invoice.status === InvoiceStatus.Draft;\n const isApproved = invoice.status === InvoiceStatus.Approved;\n const isValidType = domain.isType(InvoiceType.Invoice) || domain.isType(InvoiceType.CreditNote);\n\n return isValidType && (isDraft || (isApproved && canManageApproved));\n }\n\n public static recalculateCreditNote(item: Invoice | Bill, isBill: boolean) {\n if (!item) {\n return item;\n }\n\n if (item.type === InvoiceType.CreditNote || item.type === InvoiceType.CreditNoteSupplier) {\n for (const line of item.lines) {\n\n if (line.price < 0) {\n line.price = Math.abs(line.price);\n }\n\n if (line.quantity > 0) {\n line.quantity = line.quantity * -1;\n }\n else {\n line.quantity = Math.abs(line.quantity);\n }\n }\n\n const totalModel = InvoiceUtility.getInvoiceLineTotal(item.lines, item.taxRate, item.taxInclusiveOption);\n const domain = InvoiceCalculationDomain.from({ ...item, ...totalModel }, isBill);\n\n const calculated = domain.calculateAmounts();\n item = {\n ...item,\n ...totalModel,\n ...calculated,\n } as any\n }\n\n return item;\n }\n\n /**\n * add un-invoiced items from job to invoice\n * update unvoiced items\n * update invoice total, subTotal, tax\n * update invoice billing company\n * update labour line\n */\n public static updateAndRecalculateInvoice(options: {\n invoice: Invoice,\n job: Job,\n company: Company,\n codesFinance: CodeFinance[],\n labourCode: EmbeddedCode,\n appendLongDescription?: boolean\n }): Invoice {\n\n const { invoice, job, labourCode, company, codesFinance, appendLongDescription } = options;\n\n const stageId = invoice.workOrder?._id;\n const jobId = invoice.job?._id;\n const stage = job?.workOrders?.find(x => x._id === stageId);\n\n if (!jobId)\n return invoice;\n\n\n const laborLink: ItemLinkEntity = stage\n ? {\n _id: stage._id,\n name: stage.name,\n lineId: labourCode?._id\n }\n : {\n _id: jobId,\n name: job.name,\n lineId: labourCode?._id\n };\n\n const laborLine = labourCode\n ? this.createInvoiceLine(labourCode, codesFinance, InvoiceType.Invoice, invoice.taxRate, laborLink, invoice.taxRate, appendLongDescription)\n : null;\n\n const codeMap = new Map();\n\n const newLines = Enumerable\n .from(job.workOrders)\n .where(x => {\n return stageId\n ? x._id === invoice.workOrder._id\n : true;\n })\n .select(stage => {\n\n return Enumerable\n .from(stage.codes)\n .doAction(x => {\n if (x.invoice?._id === invoice._id)\n codeMap.set(x._id, x);\n })\n .where(x => InvoiceUtility.validInvoiceCode(x))\n .select(code => {\n const itemLink: ItemLinkEntity = {\n _id: stage._id,\n name: stage.name,\n lineId: code._id\n };\n\n const invoiceLine = this.createInvoiceLine(code, codesFinance, InvoiceType.Invoice, invoice.taxRate, itemLink, invoice.taxRate, appendLongDescription);\n return invoiceLine;\n })\n .toArray();\n })\n .selectMany(x => x)\n .toArray();\n\n const oldLine = Enumerable\n .from(invoice.lines)\n .where(x => x.type !== 'LABOUR')\n .select(x => {\n if (!x.itemLink) {\n return x;\n }\n\n const code = codeMap.get(x.itemLink.lineId);\n\n if (code.status === CodeStatus.Cancelled)\n return null;\n\n if (code.codeInvoicingStatus === CodeInvoiceStatus.NotBillable)\n return null;\n\n const invoiceLine = this.createInvoiceLine(code, codesFinance, InvoiceType.Invoice, invoice.taxRate, x.itemLink, invoice.taxRate, appendLongDescription);\n return invoiceLine;\n })\n .where(x => !!x)\n .toArray();\n\n\n const lines = [\n laborLine,\n ...oldLine,\n ...newLines,\n ].filter(x => !!x);\n\n const { total, subTotal, tax } = InvoiceUtility.getInvoiceLineTotal(lines, invoice.taxRate, invoice.taxInclusiveOption);\n\n const updatedInvoice: Invoice = {\n ...invoice,\n lines,\n total,\n subTotal,\n tax,\n timesheetIds: labourCode?.timesheetIds ?? invoice.timesheetIds,\n }\n\n if (company) {\n updatedInvoice.billingCompany = InvoiceUtility.buildInvoiceCompany(company);\n }\n\n return updatedInvoice;\n\n }\n\n public static buildInvoiceCompany(company: Company): InvoiceBillingCompany {\n\n if (!company) return null;\n\n return {\n _id: company._id,\n name: company.name,\n address: company.address,\n phone: company.phone,\n email: company.email,\n taxId: company.taxId,\n invoiceDetails: company.invoiceDetails\n };\n }\n}\n\nexport interface FinanceRecordRights {\n showButtonSync: boolean;\n showButtonEdit: boolean;\n showButtonProcessing: boolean;\n showButtonReissue: boolean;\n showTabPayment: boolean;\n showUpdateAndRecalculate: boolean;\n showEditForPrepayment: boolean;\n}\n","import { AdditionalFile, Attachment, ComplianceQuestionType, File, JobMediaItem, JobMediaSource, WorkComplianceAnswer } from '../entities';\nimport * as Enumerable from 'linq';\nimport { Configuration } from '../configuration';\n\nexport class JobMediaUtility {\n\n public static convertToComplianceMedia(answers: WorkComplianceAnswer[], configuration: Configuration): JobMediaItem[] {\n\n let counter = 1;\n\n const items = Enumerable.from(answers)\n .selectMany(a => {\n\n const signature = JobMediaUtility.buildSignatureMedia(a, counter);\n const form = JobMediaUtility.buildFormMedia(a, configuration);\n const files = JobMediaUtility.buildMedia(a?.files, a, 'Files');\n const additionalFiles = JobMediaUtility.buildMedia(a?.attachments, a, 'Additional Files');\n\n const media = [\n ...additionalFiles,\n ...signature,\n ...form,\n ...files\n ] as JobMediaItem[];\n\n counter += 1;\n\n return JobMediaUtility.setWorkOrderNumber(media, a?.workOrderNumber);\n\n })\n .select(x => {\n\n x.source = JobMediaSource.Compliance;\n\n return x;\n })\n .toArray();\n\n return items;\n\n }\n\n public static convertToTaskMedia(answers: any[], configuration: Configuration): JobMediaItem[] {\n\n let counter = 1;\n\n const items = Enumerable.from(answers)\n .selectMany(a => {\n\n const signature = JobMediaUtility.buildSignatureMedia(a, counter);\n const form = JobMediaUtility.buildFormMedia(a, configuration);\n const files = JobMediaUtility.buildMedia(a?.files, a, 'Files');\n const beforePhotos = JobMediaUtility.buildMedia(a?.beforePhotos, a, ComplianceQuestionType.Before);\n const duringPhotos = JobMediaUtility.buildMedia(a?.duringPhotos, a, ComplianceQuestionType.During);\n const afterPhotos = JobMediaUtility.buildMedia(a?.afterPhotos, a, ComplianceQuestionType.After);\n const additionalFiles = JobMediaUtility.buildMedia(a?.attachments, a, 'Additional Files');\n\n const media = [\n ...additionalFiles,\n ...signature,\n ...form,\n ...files,\n ...beforePhotos,\n ...duringPhotos,\n ...afterPhotos\n ] as JobMediaItem[];\n\n counter += 1;\n\n return media;\n\n })\n .select(x => {\n\n x.source = JobMediaSource.Task;\n\n return x;\n })\n .toArray();\n\n return items;\n\n }\n\n public static convertToActivityMedia(activities: JobMediaItem[]): JobMediaItem[] {\n\n const items = Enumerable.from(activities)\n .where(x => x?.type !== 'Form')\n .select((a: any) => {\n\n const uploadedBy = a?.updateBy?.name ?? a?.createdBy?.name;\n const uploadedDate = a?.updateDate ?? a?.createdAt;\n\n return {\n ...a,\n properties: [\n { key: 'File name', value: a?.title },\n { key: 'File type', value: a?.type },\n { key: 'Uploaded by', value: uploadedBy ?? 'Not Set' },\n { key: 'Uploaded At', value: uploadedDate ?? null },\n ]\n\n }\n\n })\n .select(x => {\n x.source = JobMediaSource.Activity;\n return x;\n })\n .toArray();\n\n return items;\n\n }\n\n public static convertToFileMedia(files: File[]): JobMediaItem[] {\n\n\n return Enumerable.from(files).select(file => {\n\n const uploadedBy = file.createdBy?.name;\n const uploadedDate = file?.createdAt;\n\n const attachment = file.attachment;\n return {\n ...attachment,\n source: JobMediaSource.File,\n properties: [\n { key: 'File name', value: attachment?.title },\n { key: 'File type', value: attachment?.type },\n { key: 'Uploaded by', value: uploadedBy ?? 'Not Set' },\n { key: 'Uploaded At', value: uploadedDate ?? null },\n ]\n\n } as any;\n\n }).toArray();\n\n\n }\n\n public static convertToCodeMedia(answers: WorkComplianceAnswer[], configuration: Configuration): JobMediaItem[] {\n\n let counter = 1;\n\n const items = Enumerable.from(answers)\n .selectMany(a => {\n\n const beforePhotos = JobMediaUtility.buildMedia(a?.beforePhotos, a, ComplianceQuestionType.Before);\n const duringPhotos = JobMediaUtility.buildMedia(a?.duringPhotos, a, ComplianceQuestionType.During);\n const afterPhotos = JobMediaUtility.buildMedia(a?.afterPhotos, a, ComplianceQuestionType.After);\n const additionalFiles = JobMediaUtility.buildMedia(a?.attachments, a, 'Additional Files');\n const signature = JobMediaUtility.buildSignatureMedia(a, counter);\n const form = JobMediaUtility.buildFormMedia(a, configuration);\n const files = JobMediaUtility.buildMedia(a?.files, a, 'Files');\n\n const media = [\n ...beforePhotos,\n ...duringPhotos,\n ...afterPhotos,\n ...additionalFiles,\n ...signature,\n ...form,\n ...files\n ];\n\n counter += 1;\n\n return media;\n\n })\n .select(x => {\n x.source = JobMediaSource.Code;\n return x;\n })\n .toArray();\n\n return items;\n\n }\n\n public static convertToAdditionalMedia(addtionalFiles: AdditionalFile[]): JobMediaItem[] {\n\n const attachments = Enumerable.from(addtionalFiles)\n .selectMany(x => x.attachments)\n .toArray();\n\n const items = Enumerable\n .from(attachments)\n .select(x => {\n\n const media = {\n ...x,\n properties: null\n } as any;\n\n media.properties = [\n { key: 'File name', value: x?.title },\n { key: 'Evidence Type', value: 'Additional File' },\n { key: 'File type', value: x?.type },\n ];\n\n media.source = JobMediaSource.Code;\n\n return media;\n })\n .toArray();\n\n return items;\n\n }\n\n private static buildSignatureMedia(answer: WorkComplianceAnswer, counter: number): JobMediaItem[] {\n\n const signature = answer.signatureAnswered;\n\n if (!signature)\n return [];\n\n const media = {\n _id: `${answer?._id}::signature::${counter}`,\n type: 'Signature',\n title: `Signature`,\n path: signature,\n name: `Signature_${counter}`,\n fileName: `${answer?.workOrderNumber}_Signature_${counter}.jpg`,\n properties: null\n } as any;\n\n media.properties = JobMediaUtility.getMediaProperties(media, answer, 'Signature');\n\n return [media];\n }\n\n\n private static buildFormMedia(answer: WorkComplianceAnswer, configuration: Configuration): JobMediaItem[] {\n\n const formResponse = answer?.formResponse;\n\n if (!formResponse)\n return [];\n\n const urlEncodeForm = encodeURI(`https://${configuration.tenant}.${configuration.domain}/forms/${formResponse}`);\n const urlGeneratePdf = `/pdf?url=${urlEncodeForm}`;\n const data = `https://pdf.${configuration.domain}${urlGeneratePdf}`;\n\n\n const media = {\n _id: `${answer?._id}::form`,\n type: 'Form',\n title: answer.formTemplate?.name,\n path: formResponse,\n data: data,\n fileName: answer.formTemplate?.name,\n properties: null\n } as any;\n\n answer.type = 'Form' as any;\n\n media.properties = JobMediaUtility.getMediaProperties(media, answer, 'Form');\n\n return [media];\n\n\n }\n\n private static buildMedia(attachments: Attachment[], answer: WorkComplianceAnswer, type: string): JobMediaItem[] {\n\n if (!attachments?.length)\n return [];\n\n const listMedia = Enumerable.from(attachments)\n .select(x => {\n const media = {\n ...x,\n properties: null\n } as any;\n\n media.properties = JobMediaUtility.getMediaProperties(media, answer, type);\n\n return media;\n })\n .toArray();\n\n return listMedia;\n\n }\n\n public static setWorkOrderNumber(media: JobMediaItem[], workOrderNumber: string): JobMediaItem[] {\n\n if (!media?.length)\n return [];\n\n return Enumerable.from(media)\n .select(x => {\n\n x.workOrderNumber = workOrderNumber;\n\n return x;\n }).toArray()\n }\n\n\n private static getMediaProperties(attachment: Attachment, answer: WorkComplianceAnswer, type: string): any {\n\n const uploadedBy = answer?.updatedBy?.name || attachment.createdBy || 'Not Set';\n const uploadedAt = answer?.updatedAt || attachment.createdDate || null;\n\n return [\n { key: 'File name', value: attachment?.title },\n { key: 'Evidence Type', value: type },\n { key: 'File type', value: attachment?.type },\n { key: 'Uploaded by', value: uploadedBy },\n { key: 'Uploaded At', value: uploadedAt },\n ];\n\n }\n}","import * as Enumerable from 'linq';\n\n\nexport interface LetterAvatarInfo {\n fontSize: number;\n color: string;\n text: string;\n font: string;\n size: number;\n}\n\n\nexport class LetterAvatar {\n\n public static readonly colors = ['#1abc9c', '#16a085', '#f1c40f', '#f39c12', '#2ecc71', '#27ae60', '#e67e22', '#d35400', '#3498db', '#2980b9', '#e74c3c', '#c0392b', '#9b59b6', '#8e44ad', '#bdc3c7', '#34495e', '#2c3e50', '#95a5a6', '#7f8c8d', '#ec87bf', '#d870ad', '#f69785', '#9ba37e', '#b49255', '#b49255', '#a94136'];\n\n public static generateSvg(text: string, size: number = 60): string {\n\n const info = LetterAvatar.generateInfo(text, size);\n\n const template = [\n '',\n '' + info.text.toUpperCase() + '',\n ''\n ];\n\n return template.join('');\n }\n\n public static generateInfo(text: string, size: number): LetterAvatarInfo {\n if (!text)\n text = '??';\n\n // Ensure we have intials\n const split = text.split(' ');\n text = split.length > 1\n ? Enumerable.from(split.map(x => x[0])).take(2).toArray().join('')\n : text;\n\n const textSize = Math.ceil(size / 2.5);\n const font = 'Proxima Nova, proxima-nova, HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif';\n const colorIndex = Math.floor((text.charCodeAt(0) - 65) % LetterAvatar.colors.length);\n const finalColor = LetterAvatar.colors[colorIndex];\n\n return {\n fontSize: textSize,\n text: text,\n color: finalColor,\n font: font,\n size: size\n };\n\n }\n\n}\n","import { DateTime } from 'luxon';\nimport { Entity, ItemLinkEntity, LinkableEntity } from '../entity';\nimport { AccountingSystem, Job, WorkOrder } from '../job';\nimport { ActivityEntityName, Address, CodeStatus, CodeType, CodeUoM, EmbeddedCode } from '../shared';\nimport { TaxRate } from '../taxrate';\nimport * as Enumerable from 'linq';\nimport { ContactEntity } from '../contact';\nimport { Company } from '../tenant';\nimport { LinkRelationship } from '../../enums';\n\nexport enum PurchaseOrderStatus {\n Draft = 'Draft',\n\n /** @deprecated never used */\n Submitted = 'Submitted',\n\n /** @deprecated use Approved */\n Authorised = 'Authorised',\n Approved = 'Approved',\n\n /** @deprecated use Billed */\n Reconciled = 'Reconciled',\n Billed = 'Billed',\n\n Void = 'Void',\n\n /** @deprecated use Billed */\n Error = 'Error'\n}\n\nexport enum PurchaseOrderViewType {\n All = 'All',\n Job = 'Job',\n Global = 'Global'\n}\n\nexport enum QuickbookTaxInclusiveOption {\n Exclusive = 'TaxExcluded',\n Inclusive = 'TaxInclusive',\n NoTax = 'NotApplicable'\n}\n\nexport enum TaxInclusiveOption {\n Exclusive = 'Tax Exclusive',\n Inclusive = 'Tax Inclusive',\n NoTax = 'No Tax'\n}\n\nexport enum PurchaseOrderLinkType {\n Job = 'Job',\n WorkOrder = 'WorkOrder',\n}\nexport interface PurchaseOrderLinkEntity extends Entity {\n type: PurchaseOrderLinkType;\n}\n\nexport type PurchaseOrderDeliverOptions = 'pickup' | 'company' | 'job' | 'other';\n\nexport interface PurchaseOrder extends LinkableEntity {\n\n poNumber?: string;\n poDate?: Date;\n billingCompany: PurchaseOrderBillingCompany;\n supplier?: PurchaseOrderSupplier;\n comment?: string;\n status: PurchaseOrderStatus;\n lines?: PurchaseOrderLine[];\n job?: Entity;\n createdBy?: Entity;\n\n deliveryOptions?: PurchaseOrderDeliverOptions;\n deliveryAddress?: DeliveryAddress;\n taxInclusiveOption: TaxInclusiveOption;\n subTotal?: number;\n total?: number;\n tax?: number;\n\n createdAt?: Date;\n updatedAt?: Date;\n\n\n // links?: PurchaseOrderLinkEntity[];\n theme?: Entity;\n\n priceBook?: Entity;\n\n pdf?: string;\n\n /** @deprecated */\n supplierMarkup?: number;\n\n /** @deprecated */\n taxRate?: TaxRate;\n\n /** @deprecated */\n chargeable?: boolean;\n\n /** @deprecated */\n accounting?: PurchaseOrderAccounting; // Purchase Order Accounting is belong to company therefore if company have many accounting, the integration will in Array for tracking one by one\n}\n\nexport interface PurchaseOrderAccounting {\n type: AccountingSystem;\n poAccountingId: string;\n deepLink?: string;\n success?: boolean;\n error?: any;\n}\n\nexport interface PurchaseOrderLine {\n _id?: string\n name?: string;\n description?: string;\n quantity?: number;\n price?: number;\n customPrice?: boolean;\n\n tax: number;\n subTotal: number;\n total: number;\n location?: string;\n notes?: string;\n codeStatus?: CodeStatus;\n uom?: string;\n codeUoM?: CodeUoM;\n itemLink?: ItemLinkEntity;\n // billLink?: ItemLinkEntity;\n\n glCode?: string;\n taxRate?: TaxRate;\n type?: CodeType;\n createFromCode?: boolean;\n canOverrideDesc?: boolean;\n}\n\nexport interface DeliveryAddress {\n name: string;\n company: string;\n phone: string;\n address: Address;\n}\n\nexport interface PurchaseOrderJob extends Entity {\n jobNumber: string;\n address: Address;\n}\n\nexport interface PurchaseOrderSupplier extends Entity {\n address: Address;\n phone: string;\n email: string;\n markupPercent?: number;\n contactName: string;\n}\n\nexport interface PurchaseOrderBillingCompany extends Entity {\n address: Address;\n phone: string;\n email: string;\n taxRate: number;\n taxId: string;\n}\n\nexport interface PurchaseOrderSummary {\n _id: string;\n poDate: Date;\n poNumber: string;\n billingCompany: Entity;\n supplier: Entity;\n createdBy: Entity;\n total: number;\n subTotal: number;\n job?: PurchaseOrderJob;\n status: PurchaseOrderStatus;\n}\n\nexport interface PurchaseOrderCreateResponse {\n message?: string;\n accountingId: string;\n deepLink?: string;\n createdDate?: Date;\n success?: boolean;\n}\n\nfunction buildPurchaseOrderLineFromEmbeddedCode(workOrder: WorkOrder, taxRate: TaxRate, code: EmbeddedCode): PurchaseOrderLine {\n\n // const price = 0 ?? 0;\n // const taxRateValue = taxRate?.rate || 0;\n // const quantity = code.quantity || 1;\n // const subTotal = new Decimal(quantity * price).toDecimalPlaces(4).toNumber();\n // const tax = new Decimal(subTotal * taxRateValue).toDecimalPlaces(4).toNumber();\n // const total = new Decimal(subTotal + tax).toDecimalPlaces(4).toNumber();\n\n const line: PurchaseOrderLine = {\n _id: code._id,\n name: code.name,\n description: code.description,\n quantity: code.quantity,\n customPrice: true,\n price: 0,\n subTotal: 0,\n total: 0,\n tax: 0,\n location: code.location,\n notes: code.note,\n codeStatus: code.status,\n uom: code.uom,\n codeUoM: code.codeUoM,\n glCode: null,\n taxRate: taxRate,\n type: code.type,\n createFromCode: true,\n canOverrideDesc: !!code.canOverrideDesc,\n itemLink: {\n _id: workOrder._id,\n name: workOrder.workOrderNumber,\n lineId: code._id\n },\n };\n\n return line;\n}\n\nexport function buildPurchaseOrder(company: Company, user: ContactEntity): PurchaseOrder {\n\n const billingCompany = {\n _id: company._id,\n name: company.name,\n address: company.address,\n phone: company.phone,\n email: company.email,\n taxRate: company.taxRate,\n taxId: company.taxId\n } as PurchaseOrderBillingCompany;\n\n return {\n _id: null,\n poNumber: null,\n poDate: DateTime.now().setZone(company?.address.timezone ?? 'utc').toJSDate(),\n billingCompany: billingCompany,\n supplier: null,\n supplierMarkup: 0,\n comment: null,\n status: PurchaseOrderStatus.Draft,\n lines: [],\n createdBy: user,\n chargeable: true,\n taxRate: null,\n deliveryOptions: 'pickup',\n deliveryAddress: null,\n taxInclusiveOption: TaxInclusiveOption.Exclusive,\n subTotal: 0,\n total: 0,\n tax: 0,\n links: [],\n theme: null\n };\n}\n\nexport function buildPurchaseOrderFromJob(job: Job, company: Company, taxRate: TaxRate, user: ContactEntity, codesIds: string[] = []): PurchaseOrder {\n\n const template = buildPurchaseOrder(company, user);\n\n const lines = codesIds?.length\n ? Enumerable\n .from(job.workOrders)\n .selectMany(wo => {\n const codes = Enumerable\n .from(wo.codes)\n .where(c => codesIds?.length\n ? codesIds.includes(c._id)\n : true\n )\n .select(c => buildPurchaseOrderLineFromEmbeddedCode(wo, taxRate, c))\n .toArray();\n return codes;\n })\n .toArray()\n : [];\n\n return {\n ...template,\n job: {\n _id: job._id,\n name: job.jobNumber\n },\n poDate: DateTime.now().setZone(job?.site?.address?.timezone).toJSDate(),\n lines: lines,\n links: [\n {\n _id: job._id,\n type: ActivityEntityName.Job,\n name: job.jobNumber,\n relationship: LinkRelationship.From\n }\n ]\n }\n}\n\nexport enum PurchaseOrderCommandId {\n Approve = 'Approve',\n Bill = 'Bill',\n GenerateBill = 'GenerateBill',\n Void = 'Void',\n NewTemplate = 'NewTemplate',\n GetAttachment = 'GetAttachment',\n}\n\nexport type PurchaseOrderCommandStatus = PurchaseOrderCommandId.Approve | PurchaseOrderCommandId.Bill | PurchaseOrderCommandId.Void;\n\nexport type PurchaseOrderCommandRequest =\n {\n commandId: PurchaseOrderCommandId.Approve;\n data: { _id: string };\n } |\n {\n commandId: PurchaseOrderCommandId.Bill;\n data: { _id: string };\n } |\n {\n commandId: PurchaseOrderCommandId.Void;\n data: { _id: string };\n } |\n {\n commandId: PurchaseOrderCommandId.GenerateBill;\n data: { _id: string };\n } |\n {\n commandId: PurchaseOrderCommandId.NewTemplate;\n data: { _id: string, jobId?: string, codeIds?: string[] };\n } |\n {\n commandId: PurchaseOrderCommandId.GetAttachment;\n data: { _id: string };\n };\n","import * as Enumerable from 'linq';\nimport { PurchaseOrder, TaxInclusiveOption } from '../entities';\n\n\nexport class PurchaseOrderUtility {\n\n\n public static sumTotalPrice(purchaseOrder: PurchaseOrder): PurchaseOrder {\n\n let sumBuyPrice = 0;\n\n Enumerable\n .from(purchaseOrder.lines)\n .forEach(line => {\n sumBuyPrice += line.quantity * line.price;\n });\n\n purchaseOrder.total = sumBuyPrice;\n\n return purchaseOrder;\n\n }\n\n public static sumTotal(purchaseOrder: PurchaseOrder, taxRate: number): PurchaseOrder {\n\n const { lines, taxInclusiveOption } = purchaseOrder;\n\n const isNotMapping = taxRate < 0;\n\n const rate = taxRate / 100;\n purchaseOrder.total = 0;\n purchaseOrder.tax = 0;\n purchaseOrder.subTotal = 0;\n // purchaseOrder.taxAmount = 0;\n // purchaseOrder.taxIncludedAmount = 0;\n\n Enumerable\n .from(lines)\n .forEach(line => {\n\n const lineValue = line.quantity * line.price;\n let lineTax = 0;\n\n // current now TaxOption is apply all. Therefore typing here for sometime it's move to each line\n switch (taxInclusiveOption) {\n case TaxInclusiveOption.Exclusive:\n lineTax = lineValue * rate;\n break;\n\n case TaxInclusiveOption.Inclusive:\n const divider = 100 + taxRate;\n const includedTax = (lineValue / divider) * taxRate;\n lineTax = includedTax;\n break;\n }\n\n purchaseOrder.subTotal += lineValue;\n purchaseOrder.tax += lineTax;\n\n });\n\n purchaseOrder.total = taxInclusiveOption === TaxInclusiveOption.Exclusive\n ? purchaseOrder.subTotal + purchaseOrder.tax\n : purchaseOrder.subTotal;\n\n return purchaseOrder;\n }\n\n public static sumAllTotalPrices(purchaseOrders: PurchaseOrder[]): number {\n\n let sum = 0;\n\n Enumerable\n .from(purchaseOrders)\n .forEach(purchaseOrder => {\n const { total, subTotal, tax, taxInclusiveOption } = purchaseOrder;\n\n let totalEx = 0;\n\n switch (taxInclusiveOption) {\n\n case TaxInclusiveOption.Inclusive:\n totalEx = total - tax;\n break;\n\n default:\n totalEx = subTotal;\n break;\n }\n\n sum += totalEx;\n\n });\n\n return sum;\n\n }\n\n}\n","\nimport * as Enumerable from 'linq';\n\nimport { FiltersNumberMethod, FiltersRelativeDateMethod } from '../../utilities';\nimport { Entity } from '../entity';\nimport { QuoteSimpleStatus } from './quote.pro';\n\nexport interface QuoteProViewLookups {\n\n account?: Entity[];\n owner?: Entity[];\n company?: Entity[];\n status?: QuoteSimpleStatus[];\n\n jobType?: Entity[];\n}\n\nexport interface QuoteProViewFilters extends QuoteProViewLookups {\n _id?: string;\n\n search?: string;\n prepaymentOnly?: boolean;\n status?: QuoteSimpleStatus[];\n\n totalSellEx?: FiltersNumberMethod;\n date?: FiltersRelativeDateMethod;\n expiryDate?: FiltersRelativeDateMethod;\n createdAt?: FiltersRelativeDateMethod;\n\n}\n\nexport function effectiveQuoteProViewFilters(view: QuoteProViewFilters, refinements: QuoteProViewFilters) {\n\n const effective: { [k in keyof QuoteProViewFilters] } = {} as QuoteProViewFilters;\n const keys = Object.keys(new QuoteProViewFiltersClass())\n\n Enumerable.from(keys)\n .forEach(key => {\n\n const refinement = refinements[key];\n const viewValue = view[key];\n\n if (Array.isArray(refinement) || Array.isArray(viewValue)) {\n effective[key] = refinement?.length\n ? refinement\n : viewValue;\n } else {\n effective[key] = refinement\n ? refinement\n : view[key];\n }\n\n if (effective[key] == null ||\n (typeof effective[key] !== 'boolean' && Object.keys(effective[key])?.length == 0)\n ) {\n delete effective[key];\n }\n });\n\n return effective;\n\n}\n\nexport function isQuoteProViewFiltersRefined(refinements: QuoteProViewFilters): boolean {\n\n if (!refinements) return false;\n if (refinements.search && (refinements.search !== null || refinements.search === '')) return true;\n\n if (refinements?.account?.length) return true;\n if (refinements?.owner?.length) return true;\n if (refinements?.company?.length) return true;\n if (refinements?.jobType?.length) return true;\n\n if (refinements.date) return true;\n if (refinements.expiryDate) return true;\n if (refinements.createdAt) return true;\n if (refinements.status?.length) return true;\n if (refinements.prepaymentOnly) return true;\n if (refinements.totalSellEx) return true;\n\n return false;\n}\n\n\nclass QuoteProViewFiltersClass implements Required {\n _id = null\n\n // Multi - Need to check data inside\n search: string = null;\n prepaymentOnly: boolean = false;\n\n account: Entity[] = [];\n status: QuoteSimpleStatus[] = [];\n owner: Entity[] = [];\n company: Entity[] = [];\n\n jobType: Entity[] = [];\n\n totalSellEx: FiltersNumberMethod = null;\n date: FiltersRelativeDateMethod = null;\n expiryDate: FiltersRelativeDateMethod = null;\n createdAt: FiltersRelativeDateMethod = null;\n}\n","import * as Enumerable from 'linq';\nimport { DateUtility } from '.';\nimport { JobTemplateJob, JobTemplateWorkOrder, RecurringJob, RecurringJobStatus, RecurringJobTable, RecurringJobType } from '../entities';\nimport { v4 } from 'uuid';\n\nexport class RecurringJobUtility {\n\n\n public static getRecurringJobs(jobs: any[]): RecurringJobTable[] {\n\n\n const result = Enumerable.from(jobs)\n .select(x => {\n\n const job = x['recurringJob'] ?? x;\n\n job['status'] = RecurringJobUtility.getRecurringJobStatus(job);\n\n return job;\n })\n .where(x => !!x?._id)\n .distinct(x => x?._id)\n .orderBy(x => x?.name)\n .toArray() as any[];\n\n\n return result;\n }\n\n public static getRecurringJobStatus(job: RecurringJob): RecurringJobStatus {\n\n const today = DateUtility.getDateTime(new Date).startOf('day');\n\n const endDate = DateUtility.getDateTime(job?.end);\n\n if (!endDate && job.type === RecurringJobType.Service) {\n return job?.turnOn ? RecurringJobStatus.Active : RecurringJobStatus.Inactive;\n }\n\n if (endDate < today) {\n return RecurringJobStatus.Expired;\n }\n\n if (job?.turnOn && endDate >= today)\n return RecurringJobStatus.Active;\n\n if (!job?.turnOn && endDate >= today)\n return RecurringJobStatus.Inactive;\n\n }\n\n public static getAdhocTemplate(): JobTemplateJob {\n\n return {\n _id: v4(),\n workOrders: [{\n _id: v4(),\n name: 'Default Stage',\n codes: []\n } as JobTemplateWorkOrder]\n } as JobTemplateJob;\n\n }\n\n}","\nexport enum MetadataEntityFieldType {\n _Action_ = '_Action_',\n\n Date = 'Date',\n\n /** @deprecated use date and specify in editor options */\n DateTime = 'DateTime',\n\n /** @deprecated use date and specify in editor options */\n Time = 'Time',\n\n String = 'String',\n\n /** @deprecated use string and specify in editor options */\n StringAlphaNumeric = 'StringAlphaNumeric',\n\n /** @deprecated use string and specify in editor options */\n StringAlpha = 'StringAlpha',\n\n /** @deprecated use string and specify in editor options */\n Phone = 'Phone',\n\n /** @deprecated use string and specify in editor options */\n Email = 'Email',\n\n /** @deprecated use string and specify in editor options */\n Url = 'Url',\n\n Boolean = 'Boolean',\n Flag = 'Flag',\n\n Number = 'Number',\n\n /** @deprecated use number and specify in editor options */\n Percentage = 'Percentage',\n\n /** @deprecated use number and specify in editor options */\n Currency = 'Currency',\n\n Address = 'Address',\n Attachment = 'Attachment',\n EmbeddedEntity = 'EmbeddedEntity',\n\n Enum = 'Enum',\n Lookup = 'Lookup',\n Tag = 'Tag',\n Parent = 'Parent',\n\n CustomFields = 'CustomFields',\n CustomField = 'CustomField',\n\n Image = 'Image',\n QR = 'QR',\n\n Format = 'Format',\n\n Duration = 'Duration',\n\n EntityStatus = 'EntityStatus',\n\n CustomFieldDropdown = 'CustomFieldDropdown',\n\n None = 'None',\n\n\n}\n\nexport type MetadataEntityField = T | [T];\n\n\nexport enum MetadataEntityFieldEditorType {\n Dropdown = 'Dropdown',\n AutoComplete = 'AutoComplete',\n Calendar = 'Date',\n Date = 'Date',\n RelativeDate = 'RelativeDate',\n Input = 'Input',\n TextArea = 'TextArea',\n RichText = 'RichText',\n Number = 'Number',\n Switch = 'Switch',\n EntityPicker = 'EntityPicker',\n Address = 'Address',\n Label = 'Label',\n Custom = 'Custom',\n}\n\n\n","import { Entity } from '../entity';\nimport { DateUtility } from '../../utilities/date.utility';\nimport { JobUtility } from '../../utilities/job.utility';\nimport { CodeCategory, CodeType } from '../shared';\nimport { CustomFieldParent } from './custom.field.parent';\nimport { MetadataEntityFieldType } from '../../metadata/entity/decorators/model/metadata.entity.field.types';\nimport * as Enumerable from 'linq';\n\n\nexport enum CustomFieldType {\n Email = 'em',\n Phone = 'ph',\n Text = 'txt',\n Note = 'nt',\n Number = 'num',\n Date = 'd',\n DateTime = 'dt',\n Dropdown = 'dd',\n DropdownMulti = 'ddm',\n Boolean = 'bool',\n Address = 'add',\n Image = 'img',\n // PickerEmployee = 'pemp',\n None = 'None'\n}\n\nexport enum CustomFieldHost {\n Web,\n FieldApp,\n ContractorPortal,\n ClientPortal\n}\n\nexport interface CustomField extends Entity {\n type: CustomFieldType;\n options: any;\n\n createdAt?: Date;\n updatedAt?: Date;\n\n uses?: number;\n}\n\nexport interface CustomFieldMapping {\n _id: string;\n active?: boolean;\n name: string;\n fieldId: string;\n parent: CustomFieldParent;\n defaultValue: any;\n\n jobTypes: Entity[];\n priorities: Entity[];\n itemTypes?: CodeType[];\n codeCategories?: CodeCategory[];\n workCategories?: Entity[];\n projectType?: Entity[];\n\n showOnNew: boolean;\n showInQuickView: boolean;\n showInFieldApp: boolean;\n allowEditInFieldApp: boolean;\n showInClientPortal: boolean;\n showInContractorPortal: boolean;\n allowEditInContractorPortal: boolean;\n required: boolean;\n readonly: boolean;\n searchable: boolean;\n sortOrder: number;\n\n createdAt?: Date;\n updatedAt?: Date;\n}\n\nexport interface CustomFieldMappingEnriched extends CustomFieldMapping {\n field: CustomField;\n readonly: boolean;\n}\n\nexport interface CustomFieldsDropdownGroup {\n name: string;\n items: string;\n}\n\nexport interface CustomFieldsDropdownOptions {\n groups: CustomFieldsDropdownGroup[];\n doNotSort: boolean;\n}\n\nexport interface CustomFieldsPickerOptions {\n multiple: boolean;\n}\n\nexport interface CustomFieldsNumberOptions {\n min: number;\n max: number;\n}\n\nexport interface CustomFieldValue {\n _id: string;\n name: string;\n value: string;\n type: CustomFieldType;\n}\n\nexport interface CustomFieldTypeItem {\n _id: string;\n name: string;\n}\n\nexport class CustomFieldUtility {\n\n private static readonly _types = [\n { _id: CustomFieldType.Address, name: 'Address' },\n { _id: CustomFieldType.Boolean, name: 'Boolean' },\n { _id: CustomFieldType.Date, name: 'Date' },\n { _id: CustomFieldType.DateTime, name: 'Date & Time' },\n { _id: CustomFieldType.Dropdown, name: 'Dropdown' },\n { _id: CustomFieldType.DropdownMulti, name: 'Dropdown Multi' },\n { _id: CustomFieldType.Email, name: 'Email' },\n { _id: CustomFieldType.Note, name: 'Note' },\n { _id: CustomFieldType.Number, name: 'Number' },\n { _id: CustomFieldType.Phone, name: 'Phone' },\n { _id: CustomFieldType.Text, name: 'Text' },\n { _id: CustomFieldType.Image, name: 'Image' },\n // { _id: CustomFieldType.PickerEmployee, name: 'Employee' },\n ] as CustomFieldTypeItem[];\n\n public static getFieldId(type: CustomFieldType, name: string): string {\n name = name ?? '';\n return `${type.toLowerCase()}_${name.toLowerCase()}`;\n }\n\n public static getMappingId(fieldId: string, parent: CustomFieldParent): string {\n return `${fieldId}_${parent}`.toLowerCase();\n }\n\n public static getFieldType(fieldId: string): CustomFieldType {\n if (!fieldId || !fieldId?.length) return CustomFieldType.None;\n\n const typeKey = fieldId.split('_')[0];\n const type = Enumerable.from(this.types).where(x => x._id.toLocaleLowerCase() === typeKey).select(x => x._id).firstOrDefault() as CustomFieldType ?? CustomFieldType.None;\n\n return type;\n }\n\n private static readonly _customFieldMetadataType = {\n [CustomFieldType.Address]: MetadataEntityFieldType.Address,\n [CustomFieldType.Boolean]: MetadataEntityFieldType.Boolean,\n [CustomFieldType.Date]: MetadataEntityFieldType.Date,\n [CustomFieldType.DateTime]: MetadataEntityFieldType.DateTime,\n [CustomFieldType.Dropdown]: MetadataEntityFieldType.CustomFieldDropdown,\n [CustomFieldType.DropdownMulti]: MetadataEntityFieldType.CustomFieldDropdown,\n [CustomFieldType.Email]: MetadataEntityFieldType.Email,\n [CustomFieldType.Note]: MetadataEntityFieldType.String,\n [CustomFieldType.Number]: MetadataEntityFieldType.Number,\n [CustomFieldType.Phone]: MetadataEntityFieldType.Phone,\n [CustomFieldType.Text]: MetadataEntityFieldType.String,\n [CustomFieldType.Image]: MetadataEntityFieldType.Image,\n // { _id: CustomFieldType.PickerEmployee, name: 'Employee' },\n };\n\n public static getMetadataFieldType(fieldId: string): MetadataEntityFieldType {\n const type = this.getFieldType(fieldId);\n return this._customFieldMetadataType[type] ?? MetadataEntityFieldType.None;\n }\n\n public static getFieldValue(type: CustomFieldType, value: any): string {\n\n if (type !== CustomFieldType.Boolean && type !== CustomFieldType.Address && type !== CustomFieldType.Image) {\n\n // ignore the image type if no value\n if (!value) {\n return 'Not Set';\n }\n\n if (Array.isArray(value)) {\n if (!value?.length) return 'Not Set';\n }\n }\n\n switch (type) {\n case CustomFieldType.Boolean:\n return value ? 'Yes' : 'No';\n case CustomFieldType.Date:\n return DateUtility.formatDateTime(value, 'utc', 'dd/MM/yy');\n case CustomFieldType.DateTime:\n return DateUtility.formatDateTime(value, 'utc', 'dd/MM/yy hh:mm a');\n case CustomFieldType.Address: {\n const address = JobUtility.address(value);\n return address ? address : 'Not Set';\n }\n case CustomFieldType.DropdownMulti: {\n return (value as string[])?.join(', ');\n }\n // case CustomFieldType.PickerEmployee: {\n // let result = 'Not Set';\n // if (Array.isArray(value)) {\n // const emps = Enumerable.from(value as Entity[]).select(x => x.name).toArray();\n // if (emps?.length > 0) result = emps.join(', ');\n // } else {\n // const emp = (value as Entity)?.name;\n // if (emp) result = emp;\n // }\n // return result;\n // }\n default:\n return value;\n }\n }\n\n public static getFieldMergeValues(customFields: any): CustomFieldValue[] {\n\n const fieldValues = customFields\n ? Enumerable\n .from(Object.keys(customFields))\n .select(key => {\n const fieldValue = customFields[key];\n const fieldType = CustomFieldUtility.getFieldType(key);\n const fieldMergeValue = CustomFieldUtility.getFieldValue(fieldType, fieldValue);\n return { name: key, value: fieldMergeValue } as CustomFieldValue;\n })\n .toArray()\n : [];\n\n return fieldValues;\n }\n\n public static get types(): CustomFieldTypeItem[] {\n return CustomFieldUtility._types;\n }\n\n /**\n * \n * @param inputCustomFieldsValues Source custom fields values\n * @param allowedCustomFields Custom fields definitions for destination model\n * @returns custom fields values which match destination model allowed field formats, return undefined if no match was found\n */\n public static cloneCustomFieldsValue(inputCustomFieldsValues: null | Object, allowedCustomFields: CustomFieldMapping[]): any {\n\n if (!inputCustomFieldsValues) return undefined;\n\n const result = allowedCustomFields.reduce((acc, curr) => {\n if (inputCustomFieldsValues.hasOwnProperty(curr.fieldId)) {\n acc[curr.fieldId] = inputCustomFieldsValues[curr.fieldId];\n }\n return acc;\n }, {});\n\n return Object.keys(result).length > 0 ? result : undefined;\n }\n\n}\n","\nimport { AttributeFilter } from '../entities/entity';\nimport { CustomFieldType, CustomFieldUtility } from '../entities/fields/custom.field';\nimport { Job, WorkOrder } from '../entities/job';\nimport { SystemPriority } from '../entities/shared/system.priority';\nimport { Priority } from '../entities/tenant/priority';\nimport { DateUtility } from './date.utility';\nimport { JobUtility } from './job.utility';\n\nimport * as Enumerable from 'linq';\n\nexport type JobSort = Record;\n\nexport class JobIndexUtility {\n\n private static readonly systemPrioritySort = {\n [SystemPriority.P1]: 1000,\n [SystemPriority.P2]: 2000,\n [SystemPriority.P3]: 3000,\n [SystemPriority.P4]: 4000,\n [SystemPriority.P5]: 5000,\n };\n\n public static getAttributeFilter(job: Job): AttributeFilter[] {\n\n const filters: AttributeFilter[] = [];;\n\n filters.push({ k: 'active', v: job?.active });\n\n if (job.status)\n filters.push({ k: 'jobStatus', v: job?.status, n: job?.status });\n\n if (job.type)\n filters.push({ k: 'type', v: job?.type?._id, n: job?.type?.name });\n\n if (job.priority)\n filters.push({ k: 'priority', v: job?.priority?._id, n: job?.priority?.name });\n\n if (job.customer)\n filters.push({ k: 'customer', v: job?.customer?._id, n: job?.customer?.name });\n\n if (job.billingCompany)\n filters.push({ k: 'company', v: job?.billingCompany?._id, n: job?.billingCompany?.name });\n\n if (job.owner)\n filters.push({ k: 'owner', v: job?.owner?._id, n: job?.owner?.name });\n\n if (job.fieldSupervisor)\n filters.push({ k: 'fieldSupervisor', v: job?.fieldSupervisor?._id, n: job?.fieldSupervisor?.name });\n\n if (job.createdAt)\n filters.push({ k: 'createdAt', v: DateUtility.getDate(job.createdAt) });\n\n if (job.dueDate)\n filters.push({ k: 'dueDate', v: DateUtility.getDate(job.dueDate) });\n\n if (job.completedDate)\n filters.push({ k: 'completedDate', v: DateUtility.getDate(job.completedDate) });\n\n if (job.finalisedDate)\n filters.push({ k: 'finalisedDate', v: DateUtility.getDate(job.finalisedDate) });\n\n if (job?.labels?.length)\n filters.push(...job?.labels?.map(label => ({ k: 'tag', v: label._id, n: label.name })));\n\n if (job?.systemLabels?.length)\n filters.push(...job?.systemLabels?.map(label => ({ k: 'tag', v: label._id, n: label.name })));\n\n if (job?.zones?.length)\n filters.push(...job?.zones?.map(zone => ({ k: 'zone', v: zone._id, n: zone.name })));\n\n // if (job.createdAt)\n // filters.push({ k: 'createdAt', v: DateUtility.getDate(job.createdAt) });\n\n if (job.policy)\n filters.push({ k: 'policy', v: job?.policy?._id, n: job?.policy?.name });\n\n if (job.recurringJob)\n filters.push({ k: 'recurringJob', v: job.recurringJob._id, n: job.recurringJob.name });\n\n if (job.customFields)\n this.addCustomFieldFilters(filters, job.customFields);\n\n\n filters.push({ k: 'invoiced', v: (!!job?.invoice || !!job?.invoices?.length) });\n\n const textFields = [];\n\n // Text Filters\n if (job.jobNumber) {\n textFields.push(job.jobNumber);\n\n const friendlyJobNumber = job?.jobNumber?.replace(/^[A-Za-z]*0*/, '')\n if (friendlyJobNumber?.length) textFields.push(friendlyJobNumber);\n //filters.push({ k: 'text', v: job.jobNumber });\n }\n\n if (job.customerPO) {\n const parts = this.getTextParts(job.customerPO);\n textFields.push(...parts);\n }\n //filters.push({ k: 'text', v: job.customerPO });\n\n if (job.customerWO) {\n const parts = this.getTextParts(job.customerWO);\n textFields.push(...parts);\n }\n //filters.push({ k: 'text', v: job.customerWO });\n\n if (job?.customer)\n textFields.push(job?.customer?.name);\n //filters.push({ k: 'text', v: job?.customer?.name });\n\n if (job.site) {\n textFields.push(job?.site?.name);\n textFields.push(job?.site?.placeId);\n textFields.push(job?.site?.address?.name ?? JobUtility.address(job?.site?.address));\n\n // filters.push({ k: 'text', v: job?.site?.name });\n // filters.push({ k: 'text', v: job?.site?.placeId });\n // filters.push({ k: 'text', v: JobUtility.address(job?.site?.address) });\n\n filters.push({\n k: 'timezone',\n v: job.site?.address?.timezone,\n });\n\n filters.push({\n k: 'state',\n v: job.site?.address?.state,\n });\n\n filters.push({\n k: 'siteId',\n v: job.site?._id,\n });\n\n }\n\n Enumerable\n .from(job?.workOrders)\n .forEach(wo => {\n\n filters.push({ k: 'workOrderActive', v: wo?.active });\n\n if (wo.status)\n filters.push({ k: 'workOrderStatus', v: wo?.status._id, n: wo?.status?.name });\n\n if (wo.workCategory)\n filters.push({ k: 'workCategory', v: wo.workCategory._id, n: wo.workCategory.name });\n\n if (wo?.labels?.length)\n filters.push(...wo?.labels?.map(label => ({ k: 'tag', v: label._id, n: label.name })));\n\n if (wo?.systemLabels?.length)\n filters.push(...wo?.systemLabels?.map(label => ({ k: 'tag', v: label._id, n: label.name })));\n\n if (wo?.resources?.length)\n filters.push(...wo?.resources?.map(resource => ({ k: 'resource', v: resource._id, n: resource.name })));\n\n if (wo.customFields)\n this.addCustomFieldFilters(filters, wo.customFields);\n\n if (wo?.workOrderNumber) {\n\n textFields.push(wo?.workOrderNumber);\n const friendlyWoNumber = wo?.workOrderNumber?.replace(/^[A-Za-z]*0*/, '')\n\n if (friendlyWoNumber?.length)\n textFields.push(friendlyWoNumber);\n\n const splitWoNumber = wo?.workOrderNumber?.split('-');\n const lastWoNumber = splitWoNumber?.length\n ? splitWoNumber[splitWoNumber.length - 1]\n : null;\n\n if (lastWoNumber) textFields.push(lastWoNumber);\n }\n\n if (wo?.stageOwner)\n filters.push({ k: 'owner', v: wo.stageOwner._id, n: wo.stageOwner.name });\n\n if (wo?.alternateSite) {\n textFields.push(wo?.alternateSite?.address?.name ?? JobUtility.address(wo.alternateSite?.address));\n // const address = JobUtility.address(wo.alternateSite?.address);\n // filters.push({ k: 'text', v: address });\n\n filters.push({\n k: 'timezone',\n v: wo.alternateSite?.address?.timezone,\n });\n\n filters.push({\n k: 'state',\n v: wo.alternateSite?.address?.state,\n });\n\n filters.push({\n k: 'siteId',\n v: wo.alternateSite?._id,\n });\n\n }\n\n filters.push({ k: 'billed', v: (!!wo?.bill || !!wo?.bills?.length) });\n\n\n });\n\n const text = textFields\n .filter(x => x?.length)\n .map(x => {\n const words = x\n .toLowerCase()\n .split(' ');\n\n const extendedWords = words\n .map(x => {\n\n const ew = x.indexOf('/') > -1\n ? [x, ...x.split('/').map(x => x.trim()).flat()]\n : [x];\n\n return ew;\n\n })\n .flat();\n\n return [...extendedWords];\n })\n .flat();\n\n filters.push({ k: 'text', v: text });\n\n return Enumerable\n .from(filters)\n .where(x => x.v !== undefined && x.v !== null && x.v !== '')\n .distinct(x => `${x.k}:${x.v}`)\n .toArray();\n\n // return filters;\n\n }\n\n public static getTextParts(value: string): string[] {\n let parts = [value];\n const guidPattern = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\n if (guidPattern.test(value)) {\n //if its a guid, we do not want to split it\n return parts;\n }\n //otherwise, lets try to split it\n const regex = /([A-Za-z]+|\\d+)/g;\n const matches = value.match(regex);\n\n if (matches) {\n const results = matches.map(segment => {\n if (/^\\d+$/.test(segment)) {\n // If the segment is all digits, keep the original and the version without leading zeros\n const noLeadingZeros = segment.replace(/^0+/, '') || '0'; // Keep a single zero if the segment was \"000\"\n return { original: segment, noLeadingZeros: noLeadingZeros };\n }\n return { original: segment, noLeadingZeros: null };\n });\n const allOriginals = Enumerable.from(results).select(x => x.original).toArray();\n const allNoLeadingZeros = Enumerable.from(results).where(x => x.noLeadingZeros != x.original).select(x => x.noLeadingZeros).toArray();\n parts = [...parts, ...allOriginals, ...allNoLeadingZeros];\n }\n return parts;\n }\n\n\n public static getSort(job: Job, priorityMap: Enumerable.IDictionary): JobSort {\n\n const sort: JobSort = {} as any;\n\n this.addSortableDates(sort, 'dueDate', job.dueDate);\n this.addSortableDates(sort, 'finalisedDate', job.finalisedDate);\n this.addSortableDates(sort, 'completedDate', job.completedDate);\n\n if (job?.priority?._id && priorityMap.contains(job?.priority._id)) {\n const priority = priorityMap.get(job?.priority._id);\n const prioritySort = this.systemPrioritySort[priority?.systemPriority] + priority?.sortOrder;\n sort.priority = prioritySort;\n } else {\n sort.priority = 100_000_000;\n }\n\n return sort;\n }\n\n public static getPriorityMap(priorities: Priority[]): Enumerable.IDictionary {\n\n const priorityMap = Enumerable\n .from(priorities)\n .toDictionary(x => x._id, x => x);\n\n return priorityMap;\n }\n\n private static addSortableDates(sort: JobSort, namePrefix: string, date: Date) {\n\n const asc = `${namePrefix}_asc`;\n const desc = `${namePrefix}_desc`;\n\n sort[asc] = date ? date : new Date('2100-12-31T00:00:10.000Z')\n sort[desc] = date ? date : new Date('1980-01-01T00:00:10.000Z');\n\n }\n\n private static addCustomFieldFilters(filters: AttributeFilter[], customFields: any[]) {\n\n if (!customFields)\n return;\n\n const items = Object\n .keys(customFields)\n .map(key => {\n const value = customFields[key];\n\n switch (CustomFieldUtility.getFieldType(key)) {\n case CustomFieldType.Date:\n case CustomFieldType.DateTime: {\n return value\n ? { k: key, v: DateUtility.getDate(value) }\n : null;\n }\n\n case CustomFieldType.Number: {\n return { k: key, v: Number(value ?? 0) };\n }\n\n case CustomFieldType.Boolean: {\n return { k: key, v: !!value };\n }\n\n case CustomFieldType.Address: {\n return value\n ? { k: key, v: JobUtility.address(value) }\n : null;\n }\n\n case CustomFieldType.DropdownMulti: {\n return (!!value && Array.isArray(value))\n ? { k: key, v: value.map(x => x) }\n : null\n }\n\n default: {\n return value\n ? { k: key, v: value }\n : null;\n }\n }\n })\n .filter(x => !!x);\n\n filters.push(...items);\n }\n}","import * as Enumerable from 'linq';\nimport { AdditionalFile, ComplianceAnswerMetadata, ComplianceQuestion, ComplianceQuestionType, Entity, WorkComplianceAnswer, WorkComplianceCode, WorkComplianceItem } from '../entities';\nimport { EmbeddedCode } from '../entities/shared';\nimport { ComplianceAnswerType, ComplianceQuestionUnique } from '../requests';\n\nexport class WorkComplianceUtility {\n\n public static isAnswered(complianceQnA: WorkComplianceAnswer): boolean {\n\n const { beforePhotos, afterPhotos, duringPhotos, attachments, commentAnswered, signatureAnswered, forms, files, confirmation } = complianceQnA;\n\n const answerd = !!beforePhotos?.length ||\n !!afterPhotos?.length ||\n !!duringPhotos?.length ||\n !!attachments?.length ||\n !!commentAnswered ||\n !!signatureAnswered ||\n !!files?.length ||\n !!forms?.length ||\n confirmation;\n\n return answerd;\n }\n\n public static restrictedGenerateComplianceFields(fieldName: string): boolean {\n const allowedFields = [\n 'priority',\n 'type',\n ];\n\n return allowedFields.includes(fieldName);\n }\n\n public static restrictedFieldEmpty(fieldName: ComplianceAnswerType): boolean {\n const fields = [\n ComplianceAnswerType.Confirmation,\n ComplianceAnswerType.Signature,\n ComplianceAnswerType.Comment\n ];\n\n return fields.includes(fieldName);\n }\n\n\n public static isAttachmentField(fieldName: string): boolean {\n\n const attachmentFields = [\n 'attachments',\n 'beforePhotos',\n 'duringPhotos',\n 'afterPhotos',\n 'forms',\n 'files'\n ];\n\n return attachmentFields.includes(fieldName);\n\n }\n\n public static convertAnswerToWorkItem(answer: WorkComplianceAnswer): WorkComplianceItem {\n return {\n _id: answer._id,\n code: answer?.code,\n codeId: answer?.codeId,\n workOrderId: answer?.workOrderId,\n name: answer?.name,\n completed: answer?.completed ?? false,\n answered: answer?.answered ?? false,\n questionId: answer.questionId,\n type: answer.type\n } as WorkComplianceItem;\n }\n\n public static updateCodeToWorkComplianceCode(complianceItem: WorkComplianceItem, code: EmbeddedCode): WorkComplianceItem {\n const complianceCode = {\n _id: code._id,\n name: code.name,\n quantity: code.quantity,\n location: code.location,\n description: code.description,\n note: code.note,\n status: code.status,\n codeUoM: code.codeUoM\n } as WorkComplianceCode;\n\n const updatedWorkItem = { ...complianceItem, code: complianceCode, supervisorCheck: code.supervisorCheck, };\n return updatedWorkItem;\n }\n\n public static convertCodeToWorkItem(code: EmbeddedCode, workOrderId: string): WorkComplianceItem {\n const complianceCode = {\n _id: code._id,\n name: code.name,\n quantity: code.quantity,\n location: code.location,\n description: code.description,\n note: code.note,\n status: code.status,\n codeUoM: code.codeUoM\n } as WorkComplianceCode;\n\n return {\n _id: this.getKey(workOrderId, ComplianceQuestionUnique, code._id),\n code: complianceCode,\n codeId: code._id,\n workOrderId: workOrderId,\n name: code?.name,\n completed: code.completed ?? false,\n answered: code.completed ?? false,\n questionId: ComplianceQuestionUnique,\n type: ComplianceQuestionType.Requirement,\n supervisorCheck: code.supervisorCheck,\n mandatory: false,\n hasMedia: false\n } as WorkComplianceItem;\n }\n\n public static checkAllCodeAnswersAreAnswered(answers: any[], additionalFile: AdditionalFile) {\n\n const isAnswered = Enumerable.from(answers).any(x => x.answered);\n\n return isAnswered || !!additionalFile?.attachments?.length;\n }\n\n public static mapCodeCompletedToCompliance(codes: EmbeddedCode[], workItems: WorkComplianceItem[]): WorkComplianceItem[] {\n\n const codeMap = Enumerable.from(codes).groupBy(x => x._id).toDictionary(x => x.key(), x => x.first());\n\n const mapped: WorkComplianceItem[] = [];\n Enumerable\n .from(workItems)\n .forEach(item => {\n\n if (!item.codeId) {\n mapped.push(item);\n return;\n }\n\n const code = codeMap.get(item.codeId);\n if (!code) return;\n\n item.completed = code?.completed;\n item.answered = code?.answered;\n item.code.description = code?.description;\n item.code.quantity = code?.quantity;\n item.code.location = code?.location;\n item.code.note = code?.note;\n item.code.supervisorCheck = code?.supervisorCheck;\n item.mandatory = item?.mandatory ?? false;\n item.hasMedia = item?.hasMedia ?? false;\n\n mapped.push(item);\n });\n\n return mapped;\n }\n\n public static getKey(workOrderId: string, questionId: string, codeId: string = null): string {\n\n const parts: string[] = [\n workOrderId,\n questionId\n ];\n\n if (codeId)\n parts.push(codeId);\n\n return parts.join('::');\n\n }\n\n public static getAnswer(meta: ComplianceAnswerMetadata, question: ComplianceQuestion, code: Entity = null): WorkComplianceAnswer {\n\n const codeId = code\n ? code._id\n : null;\n\n const name = question.name\n ? question.name\n : code.name;\n\n const answer = {\n ...question,\n _id: WorkComplianceUtility.getKey(meta.workOrderId, question._id, code ? code._id : null),\n active: true,\n name: name.trim(),\n workOrderId: meta.workOrderId,\n questionId: question._id,\n codeId: codeId,\n code: code,\n answered: false,\n completed: false,\n confirmationAnswered: false,\n commentAnswered: null,\n signatureAnswered: null,\n mandatoryAnswered: false,\n forms: [],\n beforePhotos: [],\n duringPhotos: [],\n afterPhotos: [],\n attachments: [],\n mandatory: question?.mandatory\n } as WorkComplianceAnswer;\n\n return answer;\n }\n}\n\n","import * as CryptoJS from 'crypto-js';\n\n\nexport enum AroFloZone {\n Task = 'tasks',\n TaskNotes = 'tasknotes',\n TaskExpense = 'expenses',\n DocumentsPhotos = 'documentsandphotos',\n CustomFields = 'customfields',\n Assets = 'assets',\n Schedules = 'schedules',\n Invoices = 'invoices',\n //SHIT AROFLO API\n TaskJoin = 'task'\n}\n\nexport enum AroFloWhereOperator {\n Equal = '=',\n NotEqual = '!=',\n GreaterThan = '>',\n GreaterThanEq = '>=',\n LessThan = '<',\n In = 'IN',\n NotIn = 'NOT IN',\n}\n\nexport enum AroFloLogicalOperator {\n And = 'and',\n Or = 'or'\n}\n\nexport interface AroFloCredentials {\n uEncoded: string;\n pEncoded: string;\n orgEncoded: string;\n secret: string;\n}\n\nexport interface AroFloWhereCondition {\n propertyName: string;\n operator: AroFloWhereOperator;\n value: any;\n}\n\nexport interface AroFloRequest {\n url: string;\n headers: any;\n}\n\nexport enum AroFloHeaders {\n RateLimitRemaining = 'x-ratelimit-remaining',\n RateLimitDailyRemaining = 'x-ratelimit-daily-remaining',\n RateLimitSecondaryDailyRemaining = 'x-ratelimit-secondary-daily-remaining',\n Status = 'statuscode'\n}\n\nexport interface AroFloHeaderValues {\n remaining: number;\n dailyRemaining: number;\n secondaryDailyRemaining: number;\n status: AroFloStatusCodes;\n\n}\n\nexport enum AroFloStatusCodes {\n Success = 0,\n AuthFailed = -99999,\n LoginFailedRequest = 1,\n LoginFailedInvalid = 2,\n LoginFailedPermission = 3,\n LoginFailedAPI = 4,\n InvalidRequest = 5,\n RateLimitMinuteOrSecondsExceeded = 6,\n RateLimitDailyExceeded = 7,\n PayloadSizeExceeded = 8\n}\n\nexport class AroFloRequestUtility {\n private static readonly _baseUrl = 'https://api.aroflo.com';\n\n public static buildGetRequest(credentials: AroFloCredentials, zone: AroFloZone, joins: AroFloZone[], whereClause: string[], pageNumber: number = 1): AroFloRequest {\n let request = `zone=${encodeURIComponent(zone)}`;\n if (joins.length) {\n request += `&join=${encodeURIComponent(joins.join(','))}`;\n }\n\n if (whereClause.length) {\n whereClause.forEach((clause, wi) => {\n request += `&where=${encodeURIComponent(clause)}`;\n });\n }\n\n request += `&page=${encodeURIComponent(pageNumber)}`;\n\n const headers = AroFloRequestUtility.buildArofloHeaders(credentials, 'GET', request);\n\n return {\n url: `${this._baseUrl}?${request}`,\n headers: headers\n } as AroFloRequest;\n }\n\n\n private static buildArofloHeaders(credentials: AroFloCredentials, requestType: string, urlVarString: string): any {\n const isoDate = new Date().toISOString();\n //we dont do host ip\n const urlPath = '';\n const accept = 'text/json';\n const auth = `uencoded=${encodeURIComponent(credentials.uEncoded)}&pencoded=${encodeURIComponent(credentials.pEncoded)}&orgEncoded=${encodeURIComponent(credentials.orgEncoded)}`;\n\n const payload = [requestType];\n payload.push(urlPath);\n payload.push(accept);\n payload.push(auth);\n payload.push(isoDate);\n payload.push(urlVarString);\n\n //Create a hash of the payload\n const hash = CryptoJS.HmacSHA512(payload.join('+'), credentials.secret);\n return {\n urlPath: urlPath,\n accept: accept,\n Authorization: auth,\n Authentication: 'HMAC ' + hash.toString(),\n af_hmac_signature: hash.toString(),\n afdatetimeutc: isoDate\n };\n }\n\n\n public static buildWhereClause(conditions: AroFloWhereCondition[], logicalOperator: AroFloLogicalOperator = AroFloLogicalOperator.And): string[] {\n const clauses = [];\n conditions.forEach((condition, index) => {\n let whereClause = '';\n whereClause += logicalOperator === AroFloLogicalOperator.And ? 'and|' : 'or|';\n //The value property of the condition might be an array of values\n //If it is, we need to turn it into a string separated by the * character\n let valueString = '';\n if (condition.value instanceof Array) {\n condition.value.forEach((value, i) => {\n valueString += value;\n if (i < condition.value.length - 1) {\n valueString += '*';\n }\n });\n }\n else {\n valueString = condition.value;\n }\n\n whereClause += `${condition.propertyName}|${condition.operator}|${valueString}`;\n // if (index < conditions.length - 1) {\n // whereClause += '|';\n // }\n clauses.push(whereClause);\n });\n\n return clauses;\n }\n\n public static readHeaders(headers: any): AroFloHeaderValues {\n const values: AroFloHeaderValues = {\n remaining: parseInt(headers[AroFloHeaders.RateLimitRemaining] ?? 0),\n dailyRemaining: parseInt(headers[AroFloHeaders.RateLimitDailyRemaining] ?? 0),\n secondaryDailyRemaining: parseInt(headers[AroFloHeaders.RateLimitSecondaryDailyRemaining] ?? 0),\n status: parseInt(headers[AroFloHeaders.Status] ?? AroFloStatusCodes.AuthFailed)\n };\n return values;\n }\n\n}\n\n","import * as CryptoJS from 'crypto-js';\n\nconst defaultIv = CryptoJS.enc.Utf8.parse(\"\\0\".repeat(16));\n\nexport class NonceUtility {\n\n public static hash(secret: string): string {\n return CryptoJS.SHA1(secret).toString();\n }\n\n public static encrypt(secret: string, password: string): string {\n\n const encryption = CryptoJS.DES\n .encrypt(\n secret,\n /// Have to pass password as an WordArray otherwise it will be treated with a key derivation function\n CryptoJS.enc.Utf8.parse(password),\n {\n iv: defaultIv,\n })\n .toString();\n\n return encryption;\n }\n\n public static decrypt(secret: string, password: string): string {\n\n return CryptoJS.DES\n .decrypt(\n secret,\n CryptoJS.enc.Utf8.parse(password),\n {\n iv: defaultIv,\n })\n .toString(CryptoJS.enc.Utf8);\n }\n\n public static tryDecrypt(secret: string, password: string): string {\n try {\n return NonceUtility.decrypt(secret, password);\n } catch (error) {\n return null;\n }\n }\n\n}","var toString = Object.prototype.toString;\nfunction isFunc(obj) {\n return toString.call(obj) === \"[object Function]\";\n}\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction icPart(str) {\n return str.split(\"\").map(function (c) {\n return \"(?:\" + c.toUpperCase() + \"|\" + c.toLowerCase() + \")\";\n }).join(\"\");\n}\nfunction remove(arr, elem) {\n for (var i = arr.length - 1; i >= 0; i--) {\n if (arr[i] === elem) {\n Array.prototype.splice.call(arr, i, 1);\n }\n }\n}\nfunction hasProp(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nvar instances = {};\nvar Inflector = function () {\n createClass(Inflector, null, [{\n key: \"getInstance\",\n value: function getInstance(locale) {\n instances[locale] = instances[locale] || new Inflector();\n return instances[locale];\n }\n }]);\n function Inflector() {\n classCallCheck(this, Inflector);\n this.plurals = [];\n this.singulars = [];\n this.uncountables = [];\n this.humans = [];\n this.acronyms = {};\n this.acronymRegex = /(?=a)b/;\n }\n createClass(Inflector, [{\n key: \"acronym\",\n value: function acronym(word) {\n this.acronyms[word.toLowerCase()] = word;\n var values = [];\n for (var key in this.acronyms) {\n if (hasProp(this.acronyms, key)) {\n values.push(this.acronyms[key]);\n }\n }\n this.acronymRegex = new RegExp(values.join(\"|\"));\n }\n }, {\n key: \"plural\",\n value: function plural(rule, replacement) {\n if (typeof rule === \"string\") {\n remove(this.uncountables, rule);\n }\n remove(this.uncountables, replacement);\n this.plurals.unshift([rule, replacement]);\n }\n }, {\n key: \"singular\",\n value: function singular(rule, replacement) {\n if (typeof rule === \"string\") {\n remove(this.uncountables, rule);\n }\n remove(this.uncountables, replacement);\n this.singulars.unshift([rule, replacement]);\n }\n }, {\n key: \"irregular\",\n value: function irregular(singular, plural) {\n remove(this.uncountables, singular);\n remove(this.uncountables, plural);\n var s0 = singular[0];\n var sRest = singular.substr(1);\n var p0 = plural[0];\n var pRest = plural.substr(1);\n if (s0.toUpperCase() === p0.toUpperCase()) {\n this.plural(new RegExp(\"(\" + s0 + \")\" + sRest + \"$\", \"i\"), \"$1\" + pRest);\n this.plural(new RegExp(\"(\" + p0 + \")\" + pRest + \"$\", \"i\"), \"$1\" + pRest);\n this.singular(new RegExp(\"(\" + s0 + \")\" + sRest + \"$\", \"i\"), \"$1\" + sRest);\n this.singular(new RegExp(\"(\" + p0 + \")\" + pRest + \"$\", \"i\"), \"$1\" + sRest);\n } else {\n var sRestIC = icPart(sRest);\n var pRestIC = icPart(pRest);\n this.plural(new RegExp(s0.toUpperCase() + sRestIC + \"$\"), p0.toUpperCase() + pRest);\n this.plural(new RegExp(s0.toLowerCase() + sRestIC + \"$\"), p0.toLowerCase() + pRest);\n this.plural(new RegExp(p0.toUpperCase() + pRestIC + \"$\"), p0.toUpperCase() + pRest);\n this.plural(new RegExp(p0.toLowerCase() + pRestIC + \"$\"), p0.toLowerCase() + pRest);\n this.singular(new RegExp(s0.toUpperCase() + sRestIC + \"$\"), s0.toUpperCase() + sRest);\n this.singular(new RegExp(s0.toLowerCase() + sRestIC + \"$\"), s0.toLowerCase() + sRest);\n this.singular(new RegExp(p0.toUpperCase() + pRestIC + \"$\"), s0.toUpperCase() + sRest);\n this.singular(new RegExp(p0.toLowerCase() + pRestIC + \"$\"), s0.toLowerCase() + sRest);\n }\n }\n }, {\n key: \"uncountable\",\n value: function uncountable() {\n for (var _len = arguments.length, words = Array(_len), _key = 0; _key < _len; _key++) {\n words[_key] = arguments[_key];\n }\n this.uncountables = this.uncountables.concat(words);\n }\n }, {\n key: \"human\",\n value: function human(rule, replacement) {\n this.humans.unshift([rule, replacement]);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"all\";\n if (scope === \"all\") {\n this.plurals = [];\n this.singulars = [];\n this.uncountables = [];\n this.humans = [];\n } else {\n this[scope] = [];\n }\n }\n }]);\n return Inflector;\n}();\nfunction en(inflector) {\n inflector.plural(/$/, \"s\");\n inflector.plural(/s$/i, \"s\");\n inflector.plural(/^(ax|test)is$/i, \"$1es\");\n inflector.plural(/(octop|vir)us$/i, \"$1i\");\n inflector.plural(/(octop|vir)i$/i, \"$1i\");\n inflector.plural(/(alias|status)$/i, \"$1es\");\n inflector.plural(/(bu)s$/i, \"$1ses\");\n inflector.plural(/(buffal|tomat)o$/i, \"$1oes\");\n inflector.plural(/([ti])um$/i, \"$1a\");\n inflector.plural(/([ti])a$/i, \"$1a\");\n inflector.plural(/sis$/i, \"ses\");\n inflector.plural(/(?:([^f])fe|([lr])f)$/i, \"$1$2ves\");\n inflector.plural(/(hive)$/i, \"$1s\");\n inflector.plural(/([^aeiouy]|qu)y$/i, \"$1ies\");\n inflector.plural(/(x|ch|ss|sh)$/i, \"$1es\");\n inflector.plural(/(matr|vert|ind)(?:ix|ex)$/i, \"$1ices\");\n inflector.plural(/^(m|l)ouse$/i, \"$1ice\");\n inflector.plural(/^(m|l)ice$/i, \"$1ice\");\n inflector.plural(/^(ox)$/i, \"$1en\");\n inflector.plural(/^(oxen)$/i, \"$1\");\n inflector.plural(/(quiz)$/i, \"$1zes\");\n inflector.singular(/s$/i, \"\");\n inflector.singular(/(ss)$/i, \"$1\");\n inflector.singular(/(n)ews$/i, \"$1ews\");\n inflector.singular(/([ti])a$/i, \"$1um\");\n inflector.singular(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i, \"$1sis\");\n inflector.singular(/(^analy)(sis|ses)$/i, \"$1sis\");\n inflector.singular(/([^f])ves$/i, \"$1fe\");\n inflector.singular(/(hive)s$/i, \"$1\");\n inflector.singular(/(tive)s$/i, \"$1\");\n inflector.singular(/([lr])ves$/i, \"$1f\");\n inflector.singular(/([^aeiouy]|qu)ies$/i, \"$1y\");\n inflector.singular(/(s)eries$/i, \"$1eries\");\n inflector.singular(/(m)ovies$/i, \"$1ovie\");\n inflector.singular(/(x|ch|ss|sh)es$/i, \"$1\");\n inflector.singular(/^(m|l)ice$/i, \"$1ouse\");\n inflector.singular(/(bus)(es)?$/i, \"$1\");\n inflector.singular(/(o)es$/i, \"$1\");\n inflector.singular(/(shoe)s$/i, \"$1\");\n inflector.singular(/(cris|test)(is|es)$/i, \"$1is\");\n inflector.singular(/^(a)x[ie]s$/i, \"$1xis\");\n inflector.singular(/(octop|vir)(us|i)$/i, \"$1us\");\n inflector.singular(/(alias|status)(es)?$/i, \"$1\");\n inflector.singular(/^(ox)en/i, \"$1\");\n inflector.singular(/(vert|ind)ices$/i, \"$1ex\");\n inflector.singular(/(matr)ices$/i, \"$1ix\");\n inflector.singular(/(quiz)zes$/i, \"$1\");\n inflector.singular(/(database)s$/i, \"$1\");\n inflector.irregular(\"person\", \"people\");\n inflector.irregular(\"man\", \"men\");\n inflector.irregular(\"child\", \"children\");\n inflector.irregular(\"sex\", \"sexes\");\n inflector.irregular(\"move\", \"moves\");\n inflector.irregular(\"zombie\", \"zombies\");\n inflector.uncountable(\"equipment\", \"information\", \"rice\", \"money\", \"species\", \"series\", \"fish\", \"sheep\", \"jeans\", \"police\");\n}\nvar defaults$1 = {\n en: en\n};\nfunction inflections(locale, fn) {\n if (isFunc(locale)) {\n fn = locale;\n locale = null;\n }\n locale = locale || \"en\";\n if (fn) {\n fn(Inflector.getInstance(locale));\n } else {\n return Inflector.getInstance(locale);\n }\n}\nfor (var locale in defaults$1) {\n inflections(locale, defaults$1[locale]);\n}\nfunction applyInflections(word, rules) {\n var result = \"\" + word,\n rule,\n regex,\n replacement;\n if (result.length === 0) {\n return result;\n } else {\n var match = result.toLowerCase().match(/\\b\\w+$/);\n if (match && inflections().uncountables.indexOf(match[0]) > -1) {\n return result;\n } else {\n for (var i = 0, ii = rules.length; i < ii; i++) {\n rule = rules[i];\n regex = rule[0];\n replacement = rule[1];\n if (result.match(regex)) {\n result = result.replace(regex, replacement);\n break;\n }\n }\n return result;\n }\n }\n}\nfunction pluralize(word) {\n var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"en\";\n return applyInflections(word, inflections(locale).plurals);\n}\nfunction singularize(word) {\n var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"en\";\n return applyInflections(word, inflections(locale).singulars);\n}\nfunction capitalize(str) {\n var result = str === null || str === undefined ? \"\" : String(str);\n return result.charAt(0).toUpperCase() + result.slice(1);\n}\nfunction camelize(term, uppercaseFirstLetter) {\n if (uppercaseFirstLetter === null || uppercaseFirstLetter === undefined) {\n uppercaseFirstLetter = true;\n }\n var result = \"\" + term;\n if (uppercaseFirstLetter) {\n result = result.replace(/^[a-z\\d]*/, function (a) {\n return inflections().acronyms[a] || capitalize(a);\n });\n } else {\n result = result.replace(new RegExp(\"^(?:\" + inflections().acronymRegex.source + \"(?=\\\\b|[A-Z_])|\\\\w)\"), function (a) {\n return a.toLowerCase();\n });\n }\n result = result.replace(/(?:_|(\\/))([a-z\\d]*)/gi, function (match, a, b, idx, string) {\n a || (a = \"\");\n return \"\" + a + (inflections().acronyms[b] || capitalize(b));\n });\n return result;\n}\nfunction underscore(camelCasedWord) {\n var result = \"\" + camelCasedWord;\n result = result.replace(new RegExp(\"(?:([A-Za-z\\\\d])|^)(\" + inflections().acronymRegex.source + \")(?=\\\\b|[^a-z])\", \"g\"), function (match, $1, $2) {\n return \"\" + ($1 || \"\") + ($1 ? \"_\" : \"\") + $2.toLowerCase();\n });\n result = result.replace(/([A-Z\\d]+)([A-Z][a-z])/g, \"$1_$2\");\n result = result.replace(/([a-z\\d])([A-Z])/g, \"$1_$2\");\n result = result.replace(/-/g, \"_\");\n return result.toLowerCase();\n}\nfunction humanize(lowerCaseAndUnderscoredWord, options) {\n var result = \"\" + lowerCaseAndUnderscoredWord;\n var humans = inflections().humans;\n var human = void 0,\n rule = void 0,\n replacement = void 0;\n options = options || {};\n if (options.capitalize === null || options.capitalize === undefined) {\n options.capitalize = true;\n }\n for (var i = 0, ii = humans.length; i < ii; i++) {\n human = humans[i];\n rule = human[0];\n replacement = human[1];\n if (rule.test && rule.test(result) || result.indexOf(rule) > -1) {\n result = result.replace(rule, replacement);\n break;\n }\n }\n result = result.replace(/_id$/, \"\");\n result = result.replace(/_/g, \" \");\n result = result.replace(/([a-z\\d]*)/gi, function (match) {\n return inflections().acronyms[match] || match.toLowerCase();\n });\n if (options.capitalize) {\n result = result.replace(/^\\w/, function (match) {\n return match.toUpperCase();\n });\n }\n return result;\n}\nfunction titleize(word) {\n return humanize(underscore(word)).replace(/(^|[\\s¿/]+)([a-z])/g, function (match, boundary, letter, idx, string) {\n return match.replace(letter, letter.toUpperCase());\n });\n}\nfunction tableize(className) {\n return pluralize(underscore(className));\n}\nfunction classify(tableName) {\n return camelize(singularize(tableName.replace(/.*\\./g, \"\")));\n}\nfunction dasherize(underscoredWord) {\n return underscoredWord.replace(/_/g, \"-\");\n}\nfunction foreignKey(className) {\n var separateWithUnderscore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return \"\" + underscore(className) + (separateWithUnderscore ? \"_id\" : \"id\");\n}\nfunction ordinal(number) {\n var absNumber = Math.abs(Number(number));\n var mod100 = absNumber % 100;\n if (mod100 === 11 || mod100 === 12 || mod100 === 13) {\n return \"th\";\n } else {\n switch (absNumber % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n }\n}\nfunction ordinalize(number) {\n return \"\" + number + ordinal(number);\n}\n\n// prettier-ignore\nvar DEFAULT_APPROXIMATIONS = {\n 'À': 'A',\n 'Á': 'A',\n 'Â': 'A',\n 'Ã': 'A',\n 'Ä': 'A',\n 'Å': 'A',\n 'Æ': 'AE',\n 'Ç': 'C',\n 'È': 'E',\n 'É': 'E',\n 'Ê': 'E',\n 'Ë': 'E',\n 'Ì': 'I',\n 'Í': 'I',\n 'Î': 'I',\n 'Ï': 'I',\n 'Ð': 'D',\n 'Ñ': 'N',\n 'Ò': 'O',\n 'Ó': 'O',\n 'Ô': 'O',\n 'Õ': 'O',\n 'Ö': 'O',\n '×': 'x',\n 'Ø': 'O',\n 'Ù': 'U',\n 'Ú': 'U',\n 'Û': 'U',\n 'Ü': 'U',\n 'Ý': 'Y',\n 'Þ': 'Th',\n 'ß': 'ss',\n 'à': 'a',\n 'á': 'a',\n 'â': 'a',\n 'ã': 'a',\n 'ä': 'a',\n 'å': 'a',\n 'æ': 'ae',\n 'ç': 'c',\n 'è': 'e',\n 'é': 'e',\n 'ê': 'e',\n 'ë': 'e',\n 'ì': 'i',\n 'í': 'i',\n 'î': 'i',\n 'ï': 'i',\n 'ð': 'd',\n 'ñ': 'n',\n 'ò': 'o',\n 'ó': 'o',\n 'ô': 'o',\n 'õ': 'o',\n 'ö': 'o',\n 'ø': 'o',\n 'ù': 'u',\n 'ú': 'u',\n 'û': 'u',\n 'ü': 'u',\n 'ý': 'y',\n 'þ': 'th',\n 'ÿ': 'y',\n 'Ā': 'A',\n 'ā': 'a',\n 'Ă': 'A',\n 'ă': 'a',\n 'Ą': 'A',\n 'ą': 'a',\n 'Ć': 'C',\n 'ć': 'c',\n 'Ĉ': 'C',\n 'ĉ': 'c',\n 'Ċ': 'C',\n 'ċ': 'c',\n 'Č': 'C',\n 'č': 'c',\n 'Ď': 'D',\n 'ď': 'd',\n 'Đ': 'D',\n 'đ': 'd',\n 'Ē': 'E',\n 'ē': 'e',\n 'Ĕ': 'E',\n 'ĕ': 'e',\n 'Ė': 'E',\n 'ė': 'e',\n 'Ę': 'E',\n 'ę': 'e',\n 'Ě': 'E',\n 'ě': 'e',\n 'Ĝ': 'G',\n 'ĝ': 'g',\n 'Ğ': 'G',\n 'ğ': 'g',\n 'Ġ': 'G',\n 'ġ': 'g',\n 'Ģ': 'G',\n 'ģ': 'g',\n 'Ĥ': 'H',\n 'ĥ': 'h',\n 'Ħ': 'H',\n 'ħ': 'h',\n 'Ĩ': 'I',\n 'ĩ': 'i',\n 'Ī': 'I',\n 'ī': 'i',\n 'Ĭ': 'I',\n 'ĭ': 'i',\n 'Į': 'I',\n 'į': 'i',\n 'İ': 'I',\n 'ı': 'i',\n 'IJ': 'IJ',\n 'ij': 'ij',\n 'Ĵ': 'J',\n 'ĵ': 'j',\n 'Ķ': 'K',\n 'ķ': 'k',\n 'ĸ': 'k',\n 'Ĺ': 'L',\n 'ĺ': 'l',\n 'Ļ': 'L',\n 'ļ': 'l',\n 'Ľ': 'L',\n 'ľ': 'l',\n 'Ŀ': 'L',\n 'ŀ': 'l',\n 'Ł': 'L',\n 'ł': 'l',\n 'Ń': 'N',\n 'ń': 'n',\n 'Ņ': 'N',\n 'ņ': 'n',\n 'Ň': 'N',\n 'ň': 'n',\n 'ʼn': '\\'n',\n 'Ŋ': 'NG',\n 'ŋ': 'ng',\n 'Ō': 'O',\n 'ō': 'o',\n 'Ŏ': 'O',\n 'ŏ': 'o',\n 'Ő': 'O',\n 'ő': 'o',\n 'Œ': 'OE',\n 'œ': 'oe',\n 'Ŕ': 'R',\n 'ŕ': 'r',\n 'Ŗ': 'R',\n 'ŗ': 'r',\n 'Ř': 'R',\n 'ř': 'r',\n 'Ś': 'S',\n 'ś': 's',\n 'Ŝ': 'S',\n 'ŝ': 's',\n 'Ş': 'S',\n 'ş': 's',\n 'Š': 'S',\n 'š': 's',\n 'Ţ': 'T',\n 'ţ': 't',\n 'Ť': 'T',\n 'ť': 't',\n 'Ŧ': 'T',\n 'ŧ': 't',\n 'Ũ': 'U',\n 'ũ': 'u',\n 'Ū': 'U',\n 'ū': 'u',\n 'Ŭ': 'U',\n 'ŭ': 'u',\n 'Ů': 'U',\n 'ů': 'u',\n 'Ű': 'U',\n 'ű': 'u',\n 'Ų': 'U',\n 'ų': 'u',\n 'Ŵ': 'W',\n 'ŵ': 'w',\n 'Ŷ': 'Y',\n 'ŷ': 'y',\n 'Ÿ': 'Y',\n 'Ź': 'Z',\n 'ź': 'z',\n 'Ż': 'Z',\n 'ż': 'z',\n 'Ž': 'Z',\n 'ž': 'z',\n 'А': 'A',\n 'Б': 'B',\n 'В': 'V',\n 'Г': 'G',\n 'Д': 'D',\n 'Е': 'E',\n 'Ё': 'E',\n 'Ж': 'ZH',\n 'З': 'Z',\n 'И': 'I',\n 'Й': 'J',\n 'К': 'K',\n 'Л': 'L',\n 'М': 'M',\n 'Н': 'N',\n 'О': 'O',\n 'П': 'P',\n 'Р': 'R',\n 'С': 'S',\n 'Т': 'T',\n 'У': 'U',\n 'Ф': 'F',\n 'Х': 'KH',\n 'Ц': 'C',\n 'Ч': 'CH',\n 'Ш': 'SH',\n 'Щ': 'SHCH',\n 'Ъ': '',\n 'Ы': 'Y',\n 'Ь': '',\n 'Э': 'E',\n 'Ю': 'YU',\n 'Я': 'YA',\n 'а': 'a',\n 'б': 'b',\n 'в': 'v',\n 'г': 'g',\n 'д': 'd',\n 'е': 'e',\n 'ё': 'e',\n 'ж': 'zh',\n 'з': 'z',\n 'и': 'i',\n 'й': 'j',\n 'к': 'k',\n 'л': 'l',\n 'м': 'm',\n 'н': 'n',\n 'о': 'o',\n 'п': 'p',\n 'р': 'r',\n 'с': 's',\n 'т': 't',\n 'у': 'u',\n 'ф': 'f',\n 'х': 'kh',\n 'ц': 'c',\n 'ч': 'ch',\n 'ш': 'sh',\n 'щ': 'shch',\n 'ъ': '',\n 'ы': 'y',\n 'ь': '',\n 'э': 'e',\n 'ю': 'yu',\n 'я': 'ya'\n};\nvar DEFAULT_REPLACEMENT_CHAR = \"?\";\nvar instances$1 = {};\nvar Transliterator = function () {\n createClass(Transliterator, null, [{\n key: 'getInstance',\n value: function getInstance(locale) {\n instances$1[locale] = instances$1[locale] || new Transliterator();\n return instances$1[locale];\n }\n }]);\n function Transliterator() {\n classCallCheck(this, Transliterator);\n this.approximations = {};\n for (var char in DEFAULT_APPROXIMATIONS) {\n this.approximate(char, DEFAULT_APPROXIMATIONS[char]);\n }\n }\n createClass(Transliterator, [{\n key: 'approximate',\n value: function approximate(char, replacement) {\n this.approximations[char] = replacement;\n }\n }, {\n key: 'transliterate',\n value: function transliterate(string, replacement) {\n var _this = this;\n return string.replace(/[^\\u0000-\\u007f]/g, function (c) {\n return _this.approximations[c] || replacement || DEFAULT_REPLACEMENT_CHAR;\n });\n }\n }]);\n return Transliterator;\n}();\nfunction transliterations(locale, fn) {\n if (isFunc(locale)) {\n fn = locale;\n locale = null;\n }\n locale = locale || \"en\";\n if (fn) {\n fn(Transliterator.getInstance(locale));\n } else {\n return Transliterator.getInstance(locale);\n }\n}\nfunction transliterate(string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var locale = options.locale || \"en\";\n var replacement = options.replacement || \"?\";\n return transliterations(locale).transliterate(string, replacement);\n}\nfunction parameterize(string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (options.separator === undefined) {\n options.separator = \"-\";\n }\n if (options.separator === null) {\n options.separator = \"\";\n }\n\n // replace accented chars with their ascii equivalents\n var result = transliterate(string, options);\n result = result.replace(/[^a-z0-9\\-_]+/ig, options.separator);\n if (options.separator.length) {\n var separatorRegex = new RegExp(options.separator);\n\n // no more than one of the separator in a row\n result = result.replace(new RegExp(separatorRegex.source + \"{2,}\"), options.separator);\n\n // remove leading/trailing separator\n result = result.replace(new RegExp(\"^\" + separatorRegex.source + \"|\" + separatorRegex.source + \"$\", \"i\"), \"\");\n }\n if (options.preserveCase) {\n return result;\n }\n return result.toLowerCase();\n}\nfunction constantify(word) {\n return underscore(word).toUpperCase().replace(/\\s+/g, \"_\");\n}\nexport { pluralize, singularize, camelize, underscore, humanize, titleize, tableize, classify, dasherize, foreignKey, ordinal, ordinalize, transliterate, parameterize, capitalize, inflections, transliterations, constantify };","\nimport { DateUtility } from '../../utilities';\nimport { ActivitySource, Asset, Contact, ContactEntity, EntitySubStatus, JobTemplate, JobType, Label, LabelEntity, PagingOptions, ServiceTypeTag, SitePro, SiteTiny } from '../';\nimport { Entity } from '../entity';\nimport { RecurringJobSchedule } from './recurring.job.schedule';\nimport * as Enumerable from 'linq';\n\nexport interface RecurringJobRule {\n _id: string; // The rule string definition\n name: string;// the rule english description;\n}\n\n\nexport enum RecurringJobRoute {\n All = 'all',\n Active = 'active',\n Inactive = 'inactive',\n Expired = 'expired'\n}\n\nexport enum RecurringJobStatus {\n Active = 'Active',\n Inactive = 'Inactive',\n Expired = 'Expired'\n}\n\nexport enum RecurringJobStatusSystemName {\n Active = 'Active',\n ActiveStarted = 'Active-Started',\n Inactive = 'Inactive',\n Expired = 'Expired'\n}\n\nexport enum RecurringJobType {\n Standard = 'Standard',\n Service = 'Service'\n}\n\nexport const SiteEmptyId = 'Site-00000000-0000-0000-0000-000000000000';\n\nexport interface RecurringJob extends Entity {\n notes: string;\n account: Entity;\n site: SiteTiny;\n zones?: Entity[];\n\n start?: Date;\n /** if empty then it is Never; else it is on Date */\n end?: Date;\n\n resource?: ContactEntity;\n schedule?: RecurringJobSchedule[];\n\n jobTemplate?: JobTemplate;\n\n assets?: Asset[];\n\n createdAt?: Date;\n createdBy?: Entity;\n\n updatedAt?: Date;\n updatedBy?: Entity;\n\n turnOn: boolean;\n //status?: RecurringJobStatus;\n\n status?: EntitySubStatus;\n\n /** @description generated up to date */\n lastGeneratedDate?: Date;\n\n type?: RecurringJobType;\n\n lastService?: RecurringJobLastService;\n\n nextService?: RecurringJobNextService\n\n confirmation?: RecurringJobConfirmation;\n\n\n // readonly\n serviceType?: ServiceTypeTag;\n\n //for bulk import\n batchId?: string;\n\n}\n\nexport interface RecurringJobNextService {\n dueOn?: Date;\n job?: Entity;\n}\n\nexport interface RecurringJobLastService {\n completedOn?: Date;\n completedBy?: Entity;\n job?: Entity;\n}\n\nexport interface RecurringJobConfirmation {\n required: boolean; // copied from job template and can visible and editable\n confirmedOn?: Date;\n confirmedBy?: Entity;\n}\n\n\nexport interface RecurringJobTable extends Entity {\n account: Entity;\n customer: string;\n start: Date;\n end: Date;\n template: string;\n status: RecurringJobStatus;\n timezone: string;\n lastGeneratedDate: Date;\n}\n\nexport interface RecurringJobRefinement {\n customerIds?: string[];\n search?: string;\n}\n\nexport interface RecurringJobRequest {\n refinement?: RecurringJobRefinement;\n paging?: PagingOptions;\n}\n\nexport interface RecurringJobResponse {\n data: RecurringJobTable[];\n metadata: { total: number; }\n\n}\n\nexport interface ReccurringJobSchedule {\n job: RecurringJob;\n instances: RecurringJobInstance[];\n}\n\nexport interface RecurringJobInstance {\n date: Date;\n createAppointment?: boolean;\n startTime?: Date;\n endTime?: Date;\n resources?: ContactEntity[];\n contractor?: ContactEntity;\n scheduleId: string;\n}\n\n\nexport interface RecurringJobShortCreateRequest {\n siteId: string;\n template: Entity;\n baselineDate: Date;\n knowLastServiceDate: boolean;\n source: ActivitySource;\n forceConfirmation: boolean;\n reactiveServiceId?: string;\n}\n\nexport interface RecurringJobQuickCreateRequest {\n name: string;\n\n account: Contact;\n site: SitePro;\n contact: Contact;\n\n owner: Contact;\n jobType?: JobType;\n tags?: Label[];\n\n schedule: RecurringJobSchedule;\n}\n\n\nexport interface ServiceEntity extends Entity {\n requiresConfirmation: boolean;\n nextServiceDate?: Date;\n nextConfirmationDate?: Date;\n nextServiceJob?: Entity;\n serviceType?: LabelEntity;\n status?: EntitySubStatus;\n}\n\nexport enum EntityRecurringJobCommandIds {\n QuickCreate = 'QuickCreate',\n}\n\nexport type RecurringJobCommands =\n {\n commandId: EntityRecurringJobCommandIds.QuickCreate,\n data: RecurringJobQuickCreateRequest\n }\n\nexport type AssetRecurringJobCommands =\n {\n commandId: 'Unlink' | 'CreateAndLink',\n data: AssetRecurringJobUnlinkRequest | CreateAssetRecurringJobAndLinkRequest\n };\n\nexport interface AssetRecurringJobUnlinkRequest {\n jobId: string,\n assetId: string,\n}\n\nexport interface CreateAssetRecurringJobAndLinkRequest {\n createRequest: Partial;\n assetId: string;\n}\n\nexport function getRequireConfirmationDateFromSite(site: SitePro) {\n\n const requiresConfirmationDate = Enumerable\n .from(site?.services)\n .select(service => getRequireConfirmationDateFromServiceEntity(service))\n .where(x => x !== null)\n .orderBy(x => x)\n .firstOrDefault();\n\n return requiresConfirmationDate ?? DateUtility.maxDateTime.toJSDate();\n}\n\nexport function getRequireConfirmationDateFromServiceEntity(service: ServiceEntity) {\n\n const requiresConfirmation = service?.requiresConfirmation;\n const noNextServiceJob = !service?.nextServiceJob;\n const futureDate = DateUtility.maxDateTime.toJSDate();\n const safeNextConfirmationDate = DateUtility.getDate(service?.nextConfirmationDate ?? futureDate);\n\n return (requiresConfirmation && noNextServiceJob)\n ? safeNextConfirmationDate\n : futureDate\n}\n\nexport function toServiceEntity(job: RecurringJob) {\n return {\n _id: job?._id,\n name: job?.name,\n serviceType: job?.serviceType,\n requiresConfirmation: !job?.turnOn,\n nextConfirmationDate: job?.nextService?.dueOn\n ? DateUtility.getDateTime(job?.nextService?.dueOn).endOf('day').minus({ days: 60 }).toJSDate()\n : null,\n nextServiceDate: job?.nextService?.dueOn,\n nextServiceJob: job?.nextService?.job ?? null,\n } as ServiceEntity\n}","import { JobBudget } from './job.budget';\n\nexport interface RevenueAndProfitability {\n\n type: FinanceCodeType | 'Total',\n cost?: number;\n revenue?: number;\n profit?: number;\n margin?: number;\n\n}\n\nexport enum FinanceNumberType {\n Negative = 'Negative',\n Positive = 'Positive',\n}\n\nexport enum FinanceCodeType {\n Service = 'Service',\n Labour = 'Labour',\n Material = 'Material'\n}\n\nexport const FinancialRecapColor: { [key: string]: string } = {\n [FinanceCodeType.Labour]: '#5EC641',\n [FinanceCodeType.Material]: '#4F92E1',\n [FinanceCodeType.Service]: '#006EA6',\n\n [FinanceNumberType.Negative]: '#EC3324',\n [FinanceNumberType.Positive]: '#4F92E1',\n}\n\nexport interface JobFinancialRecapResponse {\n\n\n // TODO: can split into 1 props, to make many lightweight API, so UI wont block if the calculation is slow\n totalInvoiced?: number;\n totalPaid?: number;\n totalOutstanding?: number;\n totalOverdue?: number;\n\n totalProfit?: number;\n totalMargin?: number;\n totalRevenue?: number;\n totalCost?: number;\n\n budget?: JobBudget;\n cost?: JobBudget;\n revenue?: JobBudget;\n\n gridData?: RevenueAndProfitability[]\n\n\n}","export enum ClaimProcessingSystemName {\n ApproveClaim = 'approveclaim',\n ApproveClaimFinalise = 'approveClaimFinalise',\n RejectClaim = 'rejectclaim',\n SubmitClaim = 'submitclaim',\n ForceApproveClaim = 'forceApproveClaim'\n}\n\nexport enum ClaimProcessingStatus {\n ClaimReceived = 'Claim Received',\n ClaimPending = 'Claim Pending',\n ClaimSubmitted = 'Claim Submitted',\n ClaimReturned = 'Claim Returned',\n ClaimApproved = 'Claim Approved'\n};\n\nexport const ClaimProcessingActions = Object.values(ClaimProcessingSystemName) as string[];","import { DateUtility } from '../../utilities';\nimport * as Enumerable from 'linq';\nimport { ActivityLocation } from './activity.location';\n\n\nexport enum DailyLogDateType {\n Day = 'day',\n Week = 'week'\n}\n\nexport interface DailyLogRequest {\n date: Date;\n groupBy: DailyLogGroupBy;\n jobId: string;\n dateType: DailyLogDateType;\n}\n\nexport interface DailyLogResponse {\n logs: ActivityLocationGroup[];\n date: Date;\n}\n\nexport enum DailyLogGroupBy {\n Date = 'Date',\n Resource = 'Resource'\n}\n\nexport interface ActivityLocationGroup extends ActivityLocation {\n path: string[];\n}\n\n\nexport function toDailyLogGroup(locations: ActivityLocation[], groupBy: DailyLogGroupBy, dateFormat: string): ActivityLocationGroup[] {\n\n const groupItems = Enumerable\n .from(locations)\n .select(x => {\n if (groupBy === DailyLogGroupBy.Date) {\n\n const onlyDate = DateUtility.getDateTime(x.date).toFormat(dateFormat);\n\n return onlyDate;\n }\n\n return `${x.contact?._id}::${x.contact?.name}`;\n })\n .distinct(e => e)\n .select(x => {\n\n\n return {\n _id: x,\n path: [x]\n } as any;\n })\n .toArray();\n\n const items = Enumerable\n .from(locations)\n .groupBy(x => {\n if (groupBy === DailyLogGroupBy.Date) {\n\n const onlyDate = DateUtility.getDateTime(x.date).toFormat(dateFormat);\n\n return onlyDate;\n }\n\n return `${x.contact?._id}::${x.contact?.name}`;\n })\n .selectMany(e => {\n\n const items = Enumerable.from(e.getSource())\n .select(i => {\n\n return {\n ...i,\n path: [e.key(), i._id]\n }\n });\n\n return items;\n })\n .toArray();\n\n return [...groupItems, ...items];\n}","export type JMSDRIVER = 'Mongo' | 'SQL';\n\nexport enum TenantStatus {\n Created = 'Created',// 'Tenant is created',\n Confirmed = 'Confirmed',// 'Tenant is confirmed',\n Initializing = 'Initializing',// 'Tenant is initiating data',\n Initialized = 'Initialized',// 'Tenant is initiated data',\n Ready = 'Ready'// 'Tenant is using'\n}\n\nexport enum TenantSubscription {\n System = 'System',\n Core = 'Core',\n Professional = 'Professional',\n Enterprise = 'Enterprise',\n Developer = 'Developer',\n Custom = 'Custom'\n}\n\nexport interface TenantInvitation {\n _id: string;\n url: string;\n email: string;\n inviteDate?: Date;\n expireDate?: Date;\n confirmedDate?: Date;\n}\n\nexport interface Tenant {\n\n _id?: string;\n name?: string;\n url?: string;\n logo?: string;\n\n // timezone?: string;\n // dateFormat?: string;\n // timeFormat?: string;\n // locale?: string;\n\n // workDayStart?: string;\n // workDayEnd?: string;\n // workDefaultTime?: WorkDefaultTime;\n // workWeek?: DayShortName[];\n\n driver?: JMSDRIVER;\n showWizard?: boolean;\n wizardPage?: number;\n\n invoiceLines?: string;\n pricing?: string;\n package?: TenantSubscription;\n\n electronicPayment?: boolean;\n paymentMethod?: string[];\n paymentTerm?: string;\n\n businessSize?: number;\n industry?: string;\n\n status: TenantStatus;\n trial: boolean;\n trialExpiryDate?: Date;\n\n}\n","import { Entity } from '../entity';\n\nexport enum BillableType {\n Billable = 'Billable',\n NoCharge = 'No Charge',\n NotBillable = 'Not Billable'\n}\n\nexport interface WorkType extends Entity {\n billable: BillableType;\n increment: number;\n multiplier: number;\n minimumDuration: number;\n system?: boolean;\n}\n","import { DateTime } from 'luxon';\nimport { Source } from '../../enums';\nimport { Entity } from '../entity';\nimport { InvoiceStatus } from '../invoicing';\nimport { ActivityEntityName, ActivityTag, FilterValue, PagingOptions } from '../shared';\nimport { Location } from '../shared/location';\nimport { BillableType, WorkRole } from '../tenant';\nimport { FieldWorkOrder } from '../../mobile';\n\nexport enum TimesheetEntryState {\n Active = 'Active',\n Paused = 'Paused',\n}\n\nexport enum TimesheetEntryStatus {\n Approved = 'Approved',\n Incomplete = 'Incomplete',\n ReviewRequired = 'Review Required'\n}\n\nexport enum TimesheetMode {\n Job = 'Job',\n Tenant = 'Tenant'\n}\n\nexport enum TimesheetDateType {\n Week = 'Week',\n Month = 'Month',\n Year = 'Year'\n}\n\n\nexport enum DayOfWeek {\n Monday = 'Mon',\n Tuesday = 'Tue',\n Wednesday = 'Wed',\n Thursday = 'Thu',\n Friday = 'Fri',\n Saturday = 'Sat',\n Sunday = 'Sun'\n}\n\n\nexport interface TimesheetDuration {\n deductible: number;\n duration: number;\n billable: number;\n customBillable: number;\n capture: number;\n}\n\nexport interface TimesheetRate {\n cost: number;\n sell: number;\n}\n\nexport interface TimesheetTotal {\n cost: number;\n amount: number;\n}\n\nexport interface TimesheetLog {\n time: Date;\n location: Location;\n autoCompleted?: boolean;\n}\n\nexport interface TimesheetBillingOptions {\n increment: number;\n multiplier: number;\n minimumDuration: number;\n}\n\nexport interface TimesheetLinkEntity extends Entity {\n type: ActivityEntityName;\n}\n\nexport interface TimesheetJobViewFilter {\n date?: Date;\n resources: FilterValue[];\n workTypes: FilterValue[];\n workRoles: FilterValue[];\n paging?: PagingOptions;\n}\n\nexport interface TimesheetJobViewResponse {\n refinenemts: TimesheetJobViewFilter;\n timesheets: TimesheetTable[];\n totalRecords?: number;\n}\n\nexport interface TimesheetEntry {\n _id: string;\n active: boolean;\n status: TimesheetEntryStatus;\n resource: Entity;\n date: Date;\n workType: Entity,\n workRole: Entity,\n billable: BillableType;\n billingOptions: TimesheetBillingOptions;\n entity: TimesheetLinkEntity;\n links: ActivityTag[];\n source: Source;\n notes: string;\n duration?: TimesheetDuration;\n total?: TimesheetTotal;\n rate?: TimesheetRate;\n start: TimesheetLog;\n end: TimesheetLog;\n updatedAt?: Date;\n updatedBy?: Entity;\n createdAt?: Date;\n createdBy?: Entity;\n actualStart?: TimesheetLog;\n actualEnd?: TimesheetLog;\n timezone: string;\n invoice?: string;\n invoiceApproved?: boolean;\n incompleteState?: TimesheetEntryState;\n}\n\nexport interface TimesheetTable {\n _id: string;\n date: Date;\n workType: string;\n workRole: string;\n resource: Entity;\n duration: number;\n billable: number;\n workId: string;\n invoiced: boolean;\n status: TimesheetEntryStatus;\n links: ActivityTag[];\n invoiceApproved: boolean;\n invoice: Entity;\n notes: string;\n}\n\nexport interface TimesheetDayLog {\n value: number;\n review: boolean;\n date: DateTime;\n invoiced: boolean;\n}\n\nexport interface TimesheetResourceTable {\n _id: string;\n groupPath: string[];\n resource: TimesheetLinkEntity;\n duration: number;\n actual?: number;\n mon: TimesheetDayLog;\n tue: TimesheetDayLog;\n wed: TimesheetDayLog;\n thu: TimesheetDayLog;\n fri: TimesheetDayLog;\n sat: TimesheetDayLog;\n sun: TimesheetDayLog;\n day?: TimesheetDayLog;\n}\n\nexport interface ResourceTimesheetViewResponse {\n rowData: TimesheetResourceTable[];\n totalTimesheets: number;\n loggedHours: number;\n billableHours: number;\n date: DateTime;\n}\n\nexport interface ResourceTimesheetViewRequest {\n date: DateTime;\n type: TimesheetDateType;\n grouped: boolean;\n onlyRetrieveForUserId?: string;\n}\n\nexport interface TimesheetExportRequest {\n fromDate: DateTime;\n toDate: DateTime;\n onlyRetrieveForUserId?: string;\n}\n\nexport interface TimesheetBreakdownRequest {\n resource: Entity;\n date: DateTime;\n}\n\nexport interface FieldTimesheetRequest extends Entity {\n start?: TimesheetLog;\n end?: TimesheetLog;\n resource: Entity;\n entity?: TimesheetLinkEntity;\n workRole?: Entity;\n workType?: Entity;\n source?: Source;\n duration?: TimesheetDuration;\n location?: Location;\n date: Date;\n notes: string;\n links: ActivityTag[];\n rate: TimesheetRate;\n incompleteState?: TimesheetEntryState;\n deductible?: number;\n\n // Enable to override the current incomplete timesheet\n override?: boolean;\n}\n\n\nexport interface TimesheetResource extends Entity {\n workRole?: WorkRole;\n hourlyCostRate?: number;\n timezone?: string;\n}\n\nexport const billableOptions = [\n { value: BillableType.Billable, label: BillableType.Billable },\n { value: BillableType.NoCharge, label: BillableType.NoCharge },\n { value: BillableType.NotBillable, label: BillableType.NotBillable },\n];\n\nexport const timesheetStatus = [\n { _id: TimesheetEntryStatus.Approved, name: TimesheetEntryStatus.Approved },\n { _id: TimesheetEntryStatus.ReviewRequired, name: TimesheetEntryStatus.ReviewRequired }\n]\n\nexport interface MobileTimesheetEntry extends TimesheetEntry {\n invoiceStatus?: InvoiceStatus\n workOrder?: FieldWorkOrder;\n}","\nimport * as Enumerable from 'linq';\nimport { FormSection } from './form.section';\nimport { FormQuestionResponseExport, FormResponse, FormResponseExport } from './form.response';\n\n\nexport class FormExportUtility {\n\n public static getExportResponse(fullResponse: FormResponse): FormResponseExport {\n\n const { response, template, completed } = fullResponse;\n\n const exportResponse = {\n id: fullResponse._id,\n name: template?.title,\n templateId: template?._id,\n templateVersion: template?.version,\n completed: completed,\n responses: []\n } as FormResponseExport;\n\n const getFormQuestionResponses = (pageName: string, templateSection: FormSection, responseSection: any): FormQuestionResponseExport[] => {\n\n if (!pageName || !templateSection || !responseSection) return [];\n\n return Enumerable\n .from(Object.keys(responseSection))\n .select(questionName => {\n\n const templateQuestion = Enumerable.from(templateSection.fields).firstOrDefault(x => x.name === questionName);\n const responseQuestion = responseSection[questionName];\n\n if (!templateQuestion) return;\n\n let safeAnswer: any;\n\n switch (templateQuestion.type) {\n case 'Multiple':\n safeAnswer = Array.isArray(responseQuestion) ? responseQuestion : [responseQuestion];\n break;\n\n default:\n safeAnswer = responseQuestion;\n break;\n\n }\n\n return {\n id: `${pageName}.${templateSection.name}.${questionName}`,\n type: templateQuestion.type,\n question: templateQuestion.title,\n answer: safeAnswer\n } as FormQuestionResponseExport;\n })\n .where(x => x !== null)\n .toArray();\n }\n\n Enumerable\n .from(Object.keys(response))\n .forEach(pageName => {\n\n const templatePage = Enumerable.from(template.pages).firstOrDefault(x => x.name === pageName);\n const responsePage = response[pageName];\n\n if (!templatePage || !responsePage) return;\n\n Enumerable\n .from(Object.keys(responsePage))\n .forEach(sectionName => {\n\n const templateSection = Enumerable.from(templatePage.sections).firstOrDefault(x => x.name === sectionName);\n const responseSection = responsePage[sectionName];\n\n if (!templateSection || !responseSection) return;\n\n let exportAnswers: FormQuestionResponseExport[];\n\n if (templateSection?.options?.repeat) {\n\n // We need to do some cool stuff to turn into a field\n const repeatingSectionAnswer = {\n id: `${pageName}.${sectionName}`,\n type: 'repeatingSection',\n question: '',\n answer: []\n }\n\n Enumerable\n .from(responseSection)\n .forEach(responseSectionRepeat => {\n const repeatAnswers = getFormQuestionResponses(pageName, templateSection, responseSectionRepeat);\n repeatingSectionAnswer.answer.push(repeatAnswers);\n });\n\n exportAnswers = [repeatingSectionAnswer];\n\n } else {\n exportAnswers = getFormQuestionResponses(pageName, templateSection, responseSection);\n }\n\n if (exportAnswers?.length) {\n exportResponse.responses = [...exportResponse.responses, ...exportAnswers];\n }\n\n });\n\n });\n\n return exportResponse;\n\n }\n}","import * as Enumerable from 'linq';\nimport { EntityLink } from '../entity';\nimport { BillAllocation, InvoiceAllocation } from './invoice.allocation';\n\nexport class InvoiceAllocationUtility {\n\n public static getAllInvoices(allocations: Array): EntityLink[] {\n\n if (!allocations?.length) return [];\n\n const listInvoiceId = Enumerable\n .from(allocations)\n .where(item => !!item.fromInvoice && !!item.toInvoice)\n .select(item => [item.fromInvoice, item.toInvoice])\n .selectMany(item => item)\n .distinct(item => item._id)\n .toArray();\n\n return listInvoiceId;\n }\n\n public static getAllBill(allocations: Array): EntityLink[] {\n\n if (!allocations?.length) return [];\n\n const listInvoiceId = Enumerable\n .from(allocations)\n .where(item => !!item.fromBill && !!item.toBill)\n .select(item => [item.fromBill, item.toBill])\n .selectMany(item => item)\n .distinct(item => item._id)\n .toArray();\n\n return listInvoiceId;\n }\n}","\nimport { Entity } from '../entity';\nimport * as Enumerable from 'linq';\nimport { FiltersRelativeDateMethod } from '../../utilities';\nimport { PaymentMethodEntity } from './payment';\n\nexport interface PaymentViewLookups {\n account?: Entity[];\n company?: Entity[];\n method?: PaymentMethodEntity[];\n}\n\nexport interface PaymentViewFilters extends PaymentViewLookups {\n\n _id?: string;\n\n // Multi - Need to check data inside\n search?: string;\n date?: FiltersRelativeDateMethod;\n}\n\nexport function effectivePaymentViewFilters(view: PaymentViewFilters, refinements: PaymentViewFilters) {\n\n const effective: { [k in keyof PaymentViewFilters] } = {} as PaymentViewFilters;\n const keys = Object.keys(new PaymentViewFiltersClass())\n\n Enumerable.from(keys)\n .forEach(key => {\n\n const refinement = refinements[key];\n const viewValue = view[key];\n\n if (Array.isArray(refinement) || Array.isArray(viewValue)) {\n effective[key] = refinement?.length\n ? refinement\n : viewValue;\n } else {\n effective[key] = refinement\n ? refinement\n : view[key];\n }\n\n if (effective[key] == null || Object.keys(effective[key])?.length == 0) {\n delete effective[key];\n }\n });\n\n return effective;\n\n}\n\nexport function isPaymentViewFiltersRefined(refinements: PaymentViewFilters): boolean {\n\n if (!refinements) return false;\n\n if (refinements.search && (refinements.search !== null || refinements.search === '')) return true;\n\n if (refinements?.account?.length) return true;\n if (refinements?.company?.length) return true;\n\n if (refinements?.method?.length) return true;\n\n if (refinements.date) return true;\n\n return false;\n}\n\n\nexport class PaymentViewFiltersClass implements PaymentViewFilters {\n\n _id?: string;\n\n search?: string = null;\n\n account?: Entity[] = [];\n method?: PaymentMethodEntity[] = [];\n date?: FiltersRelativeDateMethod = null;\n company?: Entity[] = [];\n}\n","import { AccountingSystem } from '../accounting';\nimport { Entity, AuditDetails } from '../entity';\n\nexport enum PaymentType {\n\n // ACCRECPAYMENT\tAccounts Receivable Payment\n // ACCPAYPAYMENT\tAccounts Payable Payment\n Receivable = 'Accounts Receivable',\n Payable = 'Accounts Payable',\n\n\n // ARCREDITPAYMENT\tAccounts Receivable Credit Payment (Refund)\n // APCREDITPAYMENT\tAccounts Payable Credit Payment(Refund)\n ReceivableCredit = 'Accounts Receivable Credit',\n PayableCredit = 'Accounts Payable Credit',\n\n\n // ARPREPAYMENTPAYMENT\tAccounts Receivable Prepayment Payment(Refund)\n // APPREPAYMENTPAYMENT\tAccounts Payable Prepayment Payment(Refund)\n ReceivablePrepayment = 'Accounts Receivable Prepayment',\n PayablePrepayment = 'Accounts Payable Prepayment',\n\n\n // AROVERPAYMENTPAYMENT\tAccounts Receivable Overpayment Payment(Refund)\n // APOVERPAYMENTPAYMENT\tAccounts Payable Overpayment Payment(Refund)\n ReceivableOverpayment = 'Accounts Receivable Overpayment',\n PayableOverpayment = 'Accounts Payable Overpayment',\n}\n\nexport enum PaymentStatus {\n Pending = 'Pending',\n Success = 'Success',\n Error = 'Error',\n IntegrationError = 'Integration Error',\n WorkBuddyError = 'WorkBuddy Error'\n}\n\nexport enum PaymentMethodType {\n Manual = 'Manual',\n Online = 'Online'\n}\n\nexport enum ReconciliationStatus {\n Reconciled = 'Reconciled',\n NotReconciled = 'Not Reconciled',\n}\n\nexport enum PaymentSource {\n Xero = 'Xero',\n WorkBuddy = 'WorkBuddy',\n Stripe = 'Stripe',\n QuickBooks = 'QuickBooks',\n MYOB = 'MYOB',\n WBBulkImport = 'WB Bulk Import',\n Jobpac = 'Jobpac'\n}\n\nexport interface PaymentMethodEntity extends Entity {\n type: PaymentMethodType;\n requiresReconcile: boolean;\n}\n\nexport interface PaymentMethod extends PaymentMethodEntity {\n availableOnFieldApp: boolean;\n isServiceConnection: boolean;\n companies: Entity[];\n inUse?: boolean;\n}\n\nexport interface Payment extends Entity, AuditDetails {\n entity: Entity;\n amount: number;\n date: Date;\n note?: string;\n reference: string;\n method: PaymentMethodEntity;\n account?: Entity;\n type: PaymentType;\n status: PaymentStatus;\n merchant?: any;\n receiver?: Entity;\n company?: Entity;\n payer?: string;\n timezone?: string;\n reconciled?: ReconciliationStatus;\n integrationId?: string;\n source?: PaymentSource;\n accountingSystem?: AccountingSystem;\n}\n\n\nexport interface PaymentIntentResult {\n success: boolean;\n intent: any;\n message: string;\n}\n\n\nexport interface PaymentEditorInfo {\n amount: number;\n amountEditable: boolean,\n type: PaymentType,\n title?: 'Receive' | 'Refund' | 'Pay',\n}\n\nexport interface TerminalTokenResult {\n success: boolean;\n token: string;\n message: string;\n}\n\nexport interface TerminalLocationResult {\n success: boolean;\n locationId: string;\n message: string;\n}","import * as Enumerable from 'linq';\nimport { Payment } from './payment';\nimport { PaymentSummary } from './payment.view';\nimport { Entity } from '../entity';\n\n\n\nexport class PaymentUtility {\n\n public static getReconcileDataTree(payments: Payment[]): PaymentSummary[] {\n\n const receiverGroup = Enumerable\n .from(payments)\n .where(e => !!e.receiver?._id)\n .select(e => e.receiver)\n .distinct(e => e._id)\n .select(x => {\n\n const amount = Enumerable.from(payments)\n .where(p => p.receiver?._id === x?._id)\n .sum(p => p?.amount);\n\n return {\n _id: x._id,\n path: [x.name],\n amount: amount ?? 0,\n receiver: x,\n status: null\n } as any;\n })\n .toArray();\n\n const methodGroup = Enumerable\n .from(payments)\n .where(e => !!e.receiver?._id && !!e.method?._id)\n .select(e => {\n\n const amount = Enumerable.from(payments)\n .where(p => p.receiver?._id === e.receiver?._id && p.method?._id === e.method?._id)\n .sum(p => p?.amount);\n\n\n return {\n _id: `${e?.receiver?._id}::${e.method?._id}`,\n receiver: e.receiver,\n method: e.method,\n amount: amount\n } as any\n })\n .distinct(e => e._id)\n .select(x => {\n\n return {\n _id: x._id,\n path: [x.receiver?.name, x.method?.name],\n amount: x.amount ?? 0,\n receiver: x.receiver,\n method: x.method,\n status: null\n };\n })\n .toArray();\n\n const paymentGroup = Enumerable\n .from(payments)\n .where(e => !!e.receiver?._id && !!e.receiver?._id)\n .groupBy(e => `${e.receiver?._id}-${e.method?._id}`)\n .selectMany(e => {\n\n const items = Enumerable.from(e.getSource())\n .select(i => {\n\n return {\n ...i,\n path: [i.receiver?.name, i.method?.name, i._id]\n }\n });\n\n return items;\n })\n .toArray();\n\n return [...receiverGroup, ...methodGroup, ...paymentGroup];\n }\n\n public static getValidPayment(payment: Payment, currentUser: Entity): Payment {\n\n return {\n ...payment,\n createdBy: {\n _id: currentUser?._id,\n name: currentUser?.name\n }\n }\n }\n\n}","import { Site, Address, Entity, PhotoSettings, Company, InvoiceContact, SiteIntegrationMapping, EntitySubStatus, SearchableEntity } from '..';\nimport { ActivityTag, ComplianceDocument, TimesheetEntry, Flag } from '../';\nimport { Location } from '../shared';\nimport { ActiveWorkOrderResource } from '../workorder.resources';\n\nexport enum ContactType {\n ServiceProvider = 'Service Provider',\n Business = 'Business',\n Individual = 'Individual',\n Supplier = 'Supplier',\n Employee = 'Employee',\n Subcontractor = 'Subcontractor',\n LoginContact = 'Login Contact',\n BasicContact = 'Basic Contact',\n SystemAdministrator = 'System Administrator',\n System = 'System',\n Contact = 'Contact',\n WorkBuddyCompany = 'WorkBuddyCompany',\n Equipment = 'Equipment',\n Run = 'Run',\n External = 'External',\n Site = 'Site',\n Adhoc = 'Adhoc',\n}\n\nexport const AccountTypes = [\n ContactType.ServiceProvider,\n ContactType.Business,\n ContactType.Individual,\n ContactType.Subcontractor,\n ContactType.Supplier,\n ContactType.WorkBuddyCompany,\n ContactType.Site\n];\n\nexport const CustomerAccountTypes = [\n ContactType.ServiceProvider,\n ContactType.Business,\n ContactType.Individual,\n];\n\nexport const ContactTypes = [\n ContactType.Employee,\n ContactType.LoginContact,\n ContactType.BasicContact\n];\n\nexport const CompanyTypes = [\n ContactType.WorkBuddyCompany,\n];\n\nexport enum CreditAccountType {\n Prepaid = 'Prepaid',\n Credit = 'Credit'\n}\n\nexport enum CreditLimitOption {\n Warning = 'Warning',\n Block = 'Block'\n}\n\nexport enum DueDateType {\n DueOnReceipt = 'Due on Receipt',\n XDayAfterTheBillInvoiceDate = 'X day(s) after the bill/invoice date',\n XDayAfterEndOfBillInvoiceMonth = 'X day(s) after end of bill/invoice month',\n XDayCurrentMonth = 'Xth day of the current month',\n XDayFollowingMonth = 'Xth day of the following month'\n}\n\nexport enum ContactGroup {\n Customer = 'Customer',\n Supplier = 'Supplier',\n Invited = 'Invited',\n User = 'User'\n}\n\nexport enum ContactCounterName {\n ServiceProvider = 'Service Provider',\n Business = 'Business',\n Individual = 'Individual',\n Supplier = 'Supplier',\n Employee = 'Employee',\n Subcontractor = 'Subcontractor',\n Invited = 'Invited'\n}\n\nexport enum SubContactType {\n Job = 'Job',\n Billing = 'Billing'\n}\n\nexport enum InviteType {\n Invalid = 'Invalid',\n Valid = 'Valid',\n Connect = 'Connect',\n Enable = 'Enable',\n Invite = 'Invite',\n Resend = 'Resend',\n EnableLogin = 'Enable Login',\n None = 'None'\n}\n\nexport enum AccessType {\n Employee = 'Employee',\n Subcontractor = 'Subcontractor',\n Client = 'Client'\n}\n\nexport enum ContactDialogType {\n Edit = 'Edit',\n Add = 'Add',\n Site = 'Site',\n AddBasic = 'Add Basic',\n AddLogin = 'Add Login',\n EditChildContact = 'Edit Child Contact',\n None = 'None',\n InviteSuccess = 'Invite Success',\n ConnectSuccess = 'Connect Success'\n}\n\nexport enum ContactFilterType {\n AllCustomers = 'All Customers',\n ServiceProvider = 'Service Providers',\n Businesses = 'Businesses',\n Residential = 'Residential',\n Suppliers = 'Suppliers',\n Companies = 'Companies',\n Contractors = 'Contractors',\n AllEmployees = 'All Employees',\n ActiveEmployees = 'Active Employees',\n InvitedEmployees = 'Invited Employees',\n AllContacts = 'All Contacts',\n AllUsers = 'All Users',\n ActiveUsers = 'Active Users',\n InvitedUsers = 'Invited Users',\n Sites = 'Sites',\n}\n\nexport enum CrmCounterName {\n AllCustomers = 'All Customers',\n ServiceProvider = 'Service Providers',\n Businesses = 'Businesses',\n Residential = 'Residential',\n Suppliers = 'Suppliers',\n Companies = 'Companies',\n Contractors = 'All Contractors',\n Active = 'Active',\n Invited = 'Invited',\n Contacts = 'Contacts',\n Sites = 'Sites'\n}\n\n\nexport interface InvoiceOptions {\n enabled: boolean;\n email?: string;\n emailCC?: string[];\n address?: Address;\n}\n\nexport interface SchedulingOptions {\n enabled: boolean;\n address?: Address;\n timezone?: string;\n tags?: Entity[];\n}\n\nexport interface LoginOptions {\n invite: boolean;\n lastLogin?: Date;\n lastSeen?: Date;\n system?: boolean;\n locked?: boolean;\n showWizard?: boolean;\n}\n\nexport interface DispatchOptions {\n enabled?: boolean;\n email?: string;\n sendJsonFile?: boolean;\n sendPDFFile?: boolean;\n autoDispatch?: boolean;\n}\n\nexport interface AccountingOptions {\n salesTaxRate?: Entity;\n purchaseTaxRate?: Entity;\n markupPercent?: number;\n}\n\nexport interface ContactLocation {\n date: Date;\n location: Location;\n}\n\nexport interface ParentContact extends Entity {\n type: ContactType;\n role?: Entity;\n login?: LoginOptions;\n primary?: boolean;\n companies?: Entity[];\n}\n\nexport interface PrimaryContact extends Entity {\n firstName?: string;\n lastName?: string;\n title?: string;\n phone?: string;\n mobile?: string;\n email?: string;\n note?: string;\n}\n\nexport interface SocialNetwork {\n facebook?: string;\n linkedin?: string;\n instagram?: string;\n twitter?: string;\n}\n\nexport interface DueDateOptions {\n value: number;\n type?: DueDateType;\n disabled?: boolean;\n min?: number;\n max?: number;\n}\n\nexport interface CreditOptions {\n type: CreditAccountType;\n limitAmount?: number;\n limitBlock?: Entity;\n dueDate?: DueDateOptions;\n enforceOverdue?: boolean;\n}\n\nexport interface BillToContact extends Entity {\n mobile?: string;\n email?: string;\n}\n\nexport interface BillToAccount extends Entity {\n legalName?: string;\n phone?: string;\n email?: string;\n}\n\nexport interface BillToOptions {\n company?: BillToAccount;\n site?: Site;\n contact?: BillToContact;\n}\n\nexport interface WorkBuddyConnectOptions {\n _id: string;\n enabled: boolean;\n restrictJobTypes?: Entity[];\n}\n\nexport interface ContactEntity extends Entity {\n type: ContactType;\n}\n\nexport interface LoginContactEntity extends ContactEntity {\n dispatching?: DispatchOptions;\n}\n\nexport interface SmsContactEntity extends ContactEntity {\n mobile?: string;\n}\n\nexport interface EmailContactEntity extends ContactEntity {\n email?: string;\n}\n\nexport interface NotifiableContactEntity extends SmsContactEntity, EmailContactEntity { }\n\n// Please only use in Job - This was created becasue the whole contact was incorreclty being stored in supervisor field\nexport interface SupervisorEntity extends Entity {\n type: ContactType;\n mobile: string;\n phone: string;\n email: string;\n}\n\nexport interface CreditAmount {\n overdue: number;\n outstanding: number;\n}\n\nexport interface TimesheetOptions {\n workRole?: Entity;\n hourlyCostRate?: number;\n}\n\nexport interface Contact extends ContactEntity, SmsContactEntity, EmailContactEntity, SearchableEntity {\n legalName?: string;\n type: ContactType;\n subType?: SubContactType;\n firstName?: string;\n lastName?: string;\n businessName?: string;\n phone?: string;\n mobile?: string;\n workPhone?: string;\n email: string;\n username?: string;\n address?: Address;\n contact?: PrimaryContact;\n owner?: Entity;\n primary?: boolean;\n taxId?: string;\n stockLocation?: boolean;\n\n /**\n * @deprecated\n * Sites are now stored in the sites collection\n */\n sites?: Site[];\n parents?: ParentContact[];\n role?: Entity;\n labels?: Entity[];\n workCategories?: Entity[];\n companies?: Entity[];\n scheduling?: SchedulingOptions;\n dispatching?: DispatchOptions;\n invoices?: InvoiceOptions;\n bills?: InvoiceOptions;\n accounting?: AccountingOptions;\n createdBy?: Entity;\n createdAt?: Date;\n updatedAt?: Date;\n updatedBy?: Entity;\n hidePrices?: boolean;\n pricebook?: Entity;\n tags?: ActivityTag[];\n complianceExpiry?: Date;\n newComplianceAdded?: Date;\n password?: string;\n login?: LoginOptions;\n billingAddress?: Address;\n shippingAddress?: Address;\n recentLocation?: ContactLocation;\n recentLocations?: ContactLocation[];\n feedUserId?: string;\n website?: string;\n description?: string;\n title?: string;\n primarySite?: Site;\n credit?: CreditOptions;\n billTo?: BillToOptions;\n financeTags?: Entity[];\n customFields?: any;\n socialNetwork?: SocialNetwork;\n activeWorkOrder?: ActiveWorkOrderResource;\n fieldImageSettings?: ContactPhotoSettings;\n creditAmount?: CreditAmount;\n timesheet?: TimesheetOptions;\n /** @description credit limit block */\n isBlock?: boolean;\n annualRevenue?: number;\n industry?: string;\n employees?: number;\n zones?: Entity[];\n importId?: string;\n\n invoiceTheme?: Entity;\n bulkInvoiceTheme?: Entity;\n billTheme?: Entity;\n allowOnlinePayment?: boolean;\n\n integrationId?: string;\n alternativeEmail?: string; //// This email is using to send password and resend password\n\n note?: string;\n\n /** @description job templates */\n defaultServices?: Entity[];\n\n siteIntegrationMapping?: SiteIntegrationMapping;\n\n status?: EntitySubStatus;\n emailReminder?: Flag;\n\n subscriptionTags?: Entity[];\n connectOptions?: WorkBuddyConnectOptions;\n\n /** @description Settings for type=ServiceProvider only */\n enableSelectAnySite?: boolean;\n}\n\nexport interface ContactSummary extends Entity {\n username?: string;\n firstName?: string;\n lastName?: string;\n phone?: string;\n mobile?: string;\n workPhone?: string;\n email?: string;\n address?: Address;\n type?: ContactType;\n active?: boolean;\n disabled?: boolean;\n complianceExpiry?: Date;\n subType?: SubContactType;\n scheduling?: SchedulingOptions;\n dispatching?: DispatchOptions;\n billingAddress?: Address;\n bills?: InvoiceOptions;\n billingContacts?: ContactSummary[];\n recentLocation?: ContactLocation;\n timezone?: string;\n //sites?: Site[];\n labels?: any[];\n workCategories?: Entity[];\n title?: string;\n primarySite?: Site;\n accounts?: Entity[];\n parents?: ParentContact[];\n contact?: PrimaryContact;\n billTo?: BillToOptions;\n fieldImageSettings?: ContactPhotoSettings;\n zones?: Entity[];\n\n invoiceTheme?: Entity;\n billTheme?: Entity;\n accounting?: AccountingOptions;\n\n invoicingContact?: InvoiceContact;\n credit?: CreditOptions;\n\n note?: string;\n firstParent?: Entity;\n companies?: Entity[];\n}\n\nexport interface ContactGroupedSummary {\n _id: string;\n type?: ContactType;\n name: string;\n phone?: string;\n mobile?: string;\n workPhone?: string;\n email?: string;\n parent?: Entity;\n}\n\n\nexport interface CustomerPicker extends ContactSummary {\n salesTaxRate?: Entity;\n}\n\nexport interface SupplierPicker extends ContactSummary {\n purchaseTaxRate?: Entity;\n markupPercent?: number;\n}\n\nexport interface SubcontractorPicker extends ContactSummary {\n purchaseTaxRate?: Entity;\n}\n\nexport interface BillAccount extends ContactSummary {\n purchaseTaxRate?: Entity;\n}\n\n\n\nexport interface ContactWithCompliance extends Contact {\n compliances: ComplianceDocument[];\n}\n\nexport interface ContactWithTimesheets extends Contact {\n timesheets: TimesheetEntry[];\n}\n\nexport interface ContactInfo {\n _id?: string;\n name?: string;\n address: Address;\n phone: string;\n email: string;\n contactName: string;\n originalAccount?: Entity;\n friendlyName?: string;\n}\n\nexport interface ContactPhotoSettings {\n overrideGlobalSettings: boolean;\n customPhotoSettings: PhotoSettings;\n}\n\nexport interface RecommendedContactSummary extends ContactSummary {\n group: 'Recommended' | 'Partially Recommended' | string;\n groupOrder: number;\n}\n\nexport enum AccountUploadField {\n Type = 'Type',\n AccountName = 'Name',\n LegalName = 'Legal Name',\n TaxID = 'TaxId',\n Phone = 'Phone',\n Email = 'Email',\n Website = 'Website',\n Notes = 'Notes',\n PrimaryContactFirstName = 'Primary Contact First Name',\n PrimaryContactLastName = 'Primary Contact Last Name',\n PrimaryContactMobile = 'Primary Contact Mobile',\n PrimaryContactEmail = 'Primary Contact Email',\n PrimaryContactJobTitle = 'Primary Contact Job Title',\n PrimarySiteStreet = 'Primary Site Street',\n PrimarySiteSuburb = 'Primary Site Suburb',\n PrimarySiteState = 'Primary Site State',\n PrimarySitePostCode = 'Primary Site Post Code'\n}\n\nexport enum SiteUploadField {\n Name = 'name',\n Street = 'street',\n Suburb = 'suburb',\n State = 'state',\n Postcode = 'postcode',\n ContactFirstName = 'contactFirstName',\n ContactLastName = 'contactLastName',\n ContactMobile = 'contactMobile',\n ContactEmail = 'contactEmail'\n}\n\nexport const pendingInviteKey: string = 'pendingInvite';\n\nexport function getAccountFromCompany(company: Company): Contact {\n\n const primarySite = {\n _id: company._id,\n name: 'Primary Site',\n system: true\n };\n\n const contact: Contact = {\n _id: company._id,\n type: ContactType.WorkBuddyCompany,\n name: company.name,\n legalName: company?.legalName ?? company.name,\n phone: company?.phone,\n email: company?.email,\n website: company?.website,\n system: true,\n contact: {\n _id: company._id,\n name: 'Primary Contact',\n firstName: 'Primary ',\n lastName: 'Contact',\n phone: company?.phone,\n email: company?.email,\n system: true\n },\n sites: [\n {\n ...primarySite,\n address: company.address,\n phone: company.phone,\n website: company.website,\n } as Site\n ],\n billTo: {\n company: {\n _id: company._id,\n name: company.name,\n },\n contact: {\n _id: company._id,\n name: `Primary Contact`\n },\n site: {\n ...primarySite\n } as Site\n },\n primarySite: primarySite as Site,\n emailReminder: null,\n };\n\n return contact;\n}\n\nexport function getContactFromCompany(company: Company): Contact {\n return {\n _id: company._id,\n type: ContactType.WorkBuddyCompany,\n name: company.name,\n legalName: company.legalName,\n phone: company.phone,\n email: company.email,\n address: company.address,\n website: company.website,\n contact: {\n _id: null,\n type: ContactType.BasicContact,\n firstName: 'Primary',\n lastName: 'Contact',\n phone: company.phone,\n email: company.email,\n } as any,\n }\n}\n\nexport type ContactCommands =\n {\n commandId: 'ResendInvite',\n data: {\n contact: Contact;\n parentId: string;\n }\n } |\n {\n commandId: 'DeleteInvite',\n data: {\n contactId: string;\n parentId: string;\n }\n\n };\n","import { Contact, ContactType, ParentContact } from './contact';\nimport { UserImportRequest } from '../../requests';\nimport { RoleEntity, SecurityRole } from '../../security';\nimport { Entity } from '../';\nimport * as uuid from 'uuid';\nimport * as Enumerable from 'linq';\n\nexport class ContactImportUtility {\n\n\n public static getContactsFromImport(user: UserImportRequest, role: SecurityRole, pricebook: Entity): Contact[] {\n\n const parentId = uuid.v4();\n\n const employee = ContactImportUtility.getEmployeeContact(user, role);\n const subcontractor = ContactImportUtility.getSubcontractor(user, pricebook, parentId);\n const loginContact = ContactImportUtility.getLoginContact(user, role, parentId);\n\n const contacts = Enumerable.from([employee, subcontractor, loginContact])\n .where(x => !!x?._id)\n .toArray();\n\n return contacts;\n }\n\n private static getEmployeeContact(user: UserImportRequest, role: RoleEntity): Contact {\n\n if (user.type !== ContactType.Employee)\n return null;\n\n const contact = {\n _id: user._id,\n active: true,\n type: ContactType.Employee,\n name: `${user.firstName} ${user.lastName}`,\n firstName: user.firstName,\n lastName: user.lastName,\n mobile: user.mobile,\n email: user.email,\n username: user.email,\n address: null,\n role: role,\n dispatching: {\n enabled: user.emailOnly\n },\n scheduling: {\n enabled: false,\n address: null\n },\n login: {\n invite: false\n },\n hideBuyPrice: user.hidePrices\n } as Contact;\n\n return contact;\n }\n\n private static getSubcontractor(user: UserImportRequest, pricebook: Entity, parentId: string): Contact {\n\n if (user.type === ContactType.Employee)\n return null;\n\n const name = user?.companyName ?? `${user.firstName} ${user.lastName}`;\n\n const contact = {\n _id: parentId,\n active: true,\n type: user.type,\n name: name,\n phone: user.phone,\n email: user.email,\n username: user.email,\n address: null,\n pricebook: pricebook,\n dispatching: {\n enabled: user.emailOnly\n },\n scheduling: {\n enabled: true,\n address: null\n },\n hideBuyPrice: user.hidePrices\n } as Contact;\n\n return contact;\n }\n\n private static getLoginContact(user: UserImportRequest, role: SecurityRole, parentId: string): Contact {\n\n if (user.type === ContactType.Employee)\n return null;\n\n const parent = {\n _id: parentId,\n type: user.type,\n role: {\n _id: role._id,\n type: role.type,\n name: role.name\n },\n login: {\n invite: false\n },\n companies: []\n } as ParentContact;\n\n const name = user?.companyName ?? `${user.firstName} ${user.lastName}`;\n\n const contact = {\n _id: user._id,\n active: true,\n type: ContactType.LoginContact,\n name: name,\n firstName: user.firstName,\n lastName: user.lastName,\n mobile: user.mobile,\n email: user.email,\n username: user.email,\n address: null,\n parents: [parent]\n } as Contact;\n\n return contact;\n }\n\n}","import { ContactType, Contact, ContactSummary, AccessType, CreditAccountType, CreditLimitOption } from './contact';\nimport * as Enumerable from 'linq';\n\nexport class ContactUtility {\n\n public static getContactSummary(contact: Contact): ContactSummary {\n\n if (!contact?._id)\n return null;\n\n return {\n _id: contact._id,\n name: contact?.name,\n firstName: contact?.firstName,\n lastName: contact?.lastName,\n phone: contact.phone,\n mobile: contact.mobile,\n workPhone: contact.workPhone,\n email: contact.email,\n address: contact?.address,\n type: contact.type,\n active: contact.active,\n subType: contact.subType,\n labels: contact?.labels,\n // sites: contact?.sites,\n title: contact?.title,\n primarySite: contact?.primarySite,\n username: contact?.username,\n parents: contact.parents,\n note: contact?.note,\n dispatching: contact?.dispatching\n };\n }\n\n public static getFullName(contact: Partial): string {\n\n if (!contact) return null;\n\n const name = contact?.name === '' ? null : contact.name;\n\n return name ?? `${contact?.firstName ?? ''} ${contact?.lastName ?? ''}`.trim();\n }\n\n public static isCustomer(type: ContactType): boolean {\n\n const customerType = [\n ContactType.ServiceProvider,\n ContactType.Individual,\n ContactType.Business\n ];\n\n return customerType.includes(type);\n }\n\n public static sendEmailByContactType(type: ContactType): boolean {\n\n const customerType = [\n ContactType.Employee,\n ContactType.LoginContact\n ];\n\n return customerType.includes(type);\n }\n\n public static getAccessType(contact: Contact): AccessType {\n\n const parent = Enumerable.from(contact.parents).firstOrDefault();\n\n const type = contact.type === ContactType.Employee\n ? ContactType.Employee\n : parent.type;\n\n let accessType = AccessType.Client;\n\n switch (type) {\n case ContactType.Employee: {\n accessType = AccessType.Employee;\n break;\n }\n case ContactType.Subcontractor: {\n accessType = AccessType.Subcontractor;\n break;\n }\n\n case ContactType.ServiceProvider:\n case ContactType.Individual:\n case ContactType.Business: {\n accessType = AccessType.Client;\n break;\n }\n\n }\n\n return accessType;\n\n }\n\n public static isSubcontractor(contact: Contact): boolean {\n\n const subcontractor = contact?.type === ContactType.LoginContact && Enumerable.from(contact?.parents).any(x => x.type === ContactType.Subcontractor);\n\n return subcontractor;\n\n\n }\n\n public static stringIsEmptyOrUndefined(value: string): boolean {\n\n if (!value) return true;\n\n if (value?.trim() === '') return true;\n\n return false;\n\n }\n\n public static filterUsers(users: Partial[], searchText: string): Partial[] | ContactSummary[] {\n searchText = searchText ? searchText.toLowerCase() : null;\n\n return Enumerable\n .from(users)\n .where(user => {\n\n if (!searchText) return true;\n\n const nameIndex = user.name\n ? user.name.toLowerCase().indexOf(searchText, 0)\n : -1;\n\n const emailIndex = user.email\n ? user.email.toLowerCase().indexOf(searchText, 0)\n : -1;\n\n const mobileIndex = user.mobile\n ? user.mobile.toLowerCase().indexOf(searchText, 0)\n : -1;\n\n const phoneIndex = user.phone\n ? user.phone.toLowerCase().indexOf(searchText, 0)\n : -1;\n\n return nameIndex > -1 || emailIndex > -1 || mobileIndex > -1 || phoneIndex > -1;\n })\n .orderBy(x => x.name)\n .toArray();\n }\n\n public static getUserIdWithTenantPrefix(userId: string, tenantName: string): string {\n return `${tenantName}-${userId}`;\n }\n\n\n public static isBlock(customer: Contact): boolean {\n if (!customer?.credit) {\n return false;\n }\n\n const { limitBlock, type } = customer?.credit;\n\n if (limitBlock?._id !== CreditLimitOption.Block || type === CreditAccountType.Prepaid) {\n return false;\n }\n\n const exceededLimit = this.exceedCreditLimit(customer);\n\n return exceededLimit;\n }\n\n public static isWarning(customer: Contact, treatBlockAsWarning = false) {\n if (!customer?.credit) {\n return false;\n }\n\n const { limitBlock, type } = customer?.credit;\n\n if ((limitBlock?._id === CreditLimitOption.Block && !treatBlockAsWarning) || type === CreditAccountType.Prepaid) {\n return false;\n }\n\n const exceededLimit = this.exceedCreditLimit(customer);\n\n return exceededLimit;\n }\n\n private static exceedCreditLimit(customer: Contact): boolean {\n\n const { limitAmount, enforceOverdue } = customer?.credit;\n\n if (limitAmount === 0) {\n return false;\n }\n\n const creditAmount = customer?.creditAmount;\n\n const hasOverDue = creditAmount?.overdue > 0;\n\n if (enforceOverdue && hasOverDue) {\n\n return hasOverDue;\n }\n\n return creditAmount?.outstanding > limitAmount;\n }\n\n public static contactGrouping(contacts: ContactSummary[]): ContactSummary[] {\n return Enumerable\n .from(contacts)\n .select((e: any) => {\n\n e.groupType = e.type === ContactType.Subcontractor\n ? 'Contractor(s)' as any\n : `${e.type}(s)`;\n\n return e;\n })\n .orderBy(e => e?.type)\n .thenBy(e => e?.name)\n .toArray();\n }\n\n}\n","import { EmbeddedCode, Lex, LexoRank } from '../shared';\nimport { JobTemplateCode } from './job.template.workorder';\nimport { Entity } from '../entity';\nimport { OpportunityStage } from '../opportunities';\n\nexport enum JobTemplateQuestionType {\n Text = 'Text',\n Numeric = 'Numeric',\n Date = 'Date',\n Attachment = 'Attachment',\n Dropdown = 'Dropdown',\n Boolean = 'Boolean',\n}\n\nfunction setSupportedActions(defaultAction: boolean, actions?: Partial): JobTemplateQuestionAllowedActions {\n return {\n addItems: defaultAction,\n appendToJobDescription: defaultAction,\n setTag: defaultAction,\n setJobType: defaultAction,\n setPriority: defaultAction,\n setPriceList: defaultAction,\n setFieldSupervisor: defaultAction,\n setCustomFields: defaultAction,\n setOwner: defaultAction,\n setFiles: defaultAction,\n ...actions\n };\n}\n\nexport function newJobTemplateQuestion(type: JobTemplateQuestionType, name: string): JobTemplateQuestion {\n\n const defaultQuestion = {\n _id: null,\n name: name,\n description: null,\n type: type,\n options: [],\n multiple: false,\n sortOrder: LexoRank.first()\n };\n\n switch (type) {\n case JobTemplateQuestionType.Boolean: {\n return {\n ...defaultQuestion,\n options: [\n { _id: null, name: 'Yes', sortOrder: LexoRank.first(), system: true },\n { _id: null, name: 'No', sortOrder: LexoRank.from(LexoRank.first()).increment().value, system: true }\n ]\n }\n break;\n }\n case JobTemplateQuestionType.Date: {\n return {\n ...defaultQuestion,\n options: [\n { _id: null, name: 'Default', sortOrder: LexoRank.first(), system: true, hidden: true }\n ]\n }\n break;\n }\n case JobTemplateQuestionType.Numeric: {\n return {\n ...defaultQuestion,\n options: [\n { _id: null, name: 'Default', sortOrder: LexoRank.first(), system: true, hidden: false, setLimit: true, min: 0 }\n ]\n }\n break;\n }\n case JobTemplateQuestionType.Text: {\n return {\n ...defaultQuestion,\n options: [\n { _id: null, name: 'Default', sortOrder: LexoRank.first(), system: true, hidden: true, setLimit: true, min: 0 }\n ]\n }\n break;\n }\n case JobTemplateQuestionType.Dropdown: {\n return {\n ...defaultQuestion,\n options: [\n { _id: null, name: 'Option 1', sortOrder: LexoRank.first(), system: true },\n ]\n }\n break;\n }\n }\n}\n\nexport const JobTemplateQuestionTypeAllowedActions = {\n [JobTemplateQuestionType.Attachment]: setSupportedActions(false, { setFiles: true }),\n [JobTemplateQuestionType.Boolean]: setSupportedActions(true, { setOpportunityStage: true, setOpportunitySource: true, }),\n [JobTemplateQuestionType.Date]: setSupportedActions(false, { appendToJobDescription: true, setCustomFields: true, setOpportunityExpectedCloseDate: true }),\n [JobTemplateQuestionType.Dropdown]: setSupportedActions(true, { setOpportunityStage: true, setOpportunitySource: true, }),\n [JobTemplateQuestionType.Numeric]: setSupportedActions(false, { appendToJobDescription: true, setCustomFields: true, addItems: true, setOpportunityEstimatedAmount: true }),\n [JobTemplateQuestionType.Text]: setSupportedActions(false, { appendToJobDescription: true, setCustomFields: true }),\n}\n\nexport interface JobTemplateQuestionAllowedActions {\n addItems?: boolean;\n appendToJobDescription?: boolean;\n setTag?: boolean;\n setJobType?: boolean;\n setPriority?: boolean;\n setPriceList?: boolean;\n setFieldSupervisor?: boolean;\n setCustomFields?: boolean;\n setOwner?: boolean;\n setFiles?: boolean;\n\n setOpportunityStage?: boolean;\n setOpportunitySource?: boolean;\n setOpportunityEstimatedAmount?: boolean;\n setOpportunityExpectedCloseDate?: boolean;\n}\n\nexport type JobTemplateCodeLike = JobTemplateCode | EmbeddedCode;\nexport interface JobTemplateQuestionOption extends Entity {\n _id: string;\n name: string;\n description?: string;\n system?: boolean;\n hidden?: boolean;\n sortOrder: Lex;\n\n setLimit?: boolean;\n min?: number;\n max?: number;\n\n appendToJobDescription?: boolean;\n jobDescription?: string;\n jobType?: Entity;\n priority?: Entity;\n priceList?: Entity;\n fieldSupervisor?: Entity;\n owner?: Entity;\n tags?: Entity[];\n addToDuration?: number;\n items?: JobTemplateCodeLike[];\n customFields?: Record;\n setCustomField?: string;\n\n opportunityStage?: OpportunityStage;\n opportunitySource?: Entity;\n opportunityEstimatedAmount?: number;\n opportunityExpectedCloseDate?: Date;\n}\n\nexport interface JobTemplateQuestionVisibilityCondition {\n question: string;\n value: string;\n}\n\nexport interface JobTemplateQuestion extends Entity {\n _id: string;\n name: string;\n description: string;\n type: JobTemplateQuestionType;\n options?: JobTemplateQuestionOption[];\n multiple?: boolean;\n sortOrder: Lex;\n showCondition?: JobTemplateQuestionVisibilityCondition;\n}\n\nexport interface JobTemplateQuestionAnswer {\n question: JobTemplateQuestion;\n value: any;\n passedCondition?: boolean;\n}\n","\nimport { Entity } from '../entity';\nimport { JobCreateRequest } from '../../requests';\nimport { PriorityTiny } from '../job/priority.tiny';\nimport { JobTemplate } from './job.template'\nimport { JobTemplateJob } from './job.template.job';\nimport { JobTemplateQuestionAnswer, JobTemplateQuestionOption, JobTemplateQuestionType, JobTemplateQuestionTypeAllowedActions } from './job.template.questions';\nimport { Activity, ActivityEntityName } from '../shared';\nimport * as Enumerable from 'linq';\nimport { DateUtility } from '../../utilities';\nimport { Opportunity } from '../opportunities';\nimport { QuotePro, QuoteSimpleStatus } from '../quotes';\nimport { v4 } from 'uuid';\nimport { PricingMethod } from '../price.book';\n\n\ninterface JobTemplateQuestionOptionWithValue extends JobTemplateQuestionOption {\n value?: any;\n}\n\nexport class DynamicJobTemplateDomain {\n\n private jobTemplate: JobTemplateJob;\n private questionAnswers: JobTemplateQuestionAnswer[] = [];\n\n private request: Partial;\n private activity: Partial;\n\n private constructor(\n private template: JobTemplate,\n private timezone: string = 'utc',\n private dateFormat: string = 'dd/MM/yyyy',\n ) {\n this.jobTemplate = template?.template as JobTemplateJob;\n }\n\n public static from(template: JobTemplate, timezone = 'utc', dateFormat = 'dd/MM/yyyy'): DynamicJobTemplateDomain {\n\n if (template?.templateMode === 'Static') {\n throw new Error('Cannot create a dynamic job template domain from a static job template');\n }\n\n return new DynamicJobTemplateDomain(template, timezone);\n }\n\n public addAnswer(answer: JobTemplateQuestionAnswer): void {\n this.questionAnswers.push(answer);\n this.build();\n }\n\n public toJobCreateRequest(): Partial {\n console.log('Pricelist =>', this.request?.priceBook?.name)\n return this.request;\n }\n\n private buildCreateRequest(): Partial {\n const request: Partial = {\n mode: this?.template?.mode,\n description: null,\n type: this?.jobTemplate?.type,\n priority: this?.jobTemplate?.priority as PriorityTiny,\n owner: this?.jobTemplate?.owner,\n fieldSupervisor: this?.jobTemplate?.fieldSupervisor,\n priceBook: this?.jobTemplate?.priceBook as Entity,\n labels: this?.jobTemplate?.labels as any ?? [],\n codes: [],\n customFields: this.jobTemplate?.customFields ?? {},\n duration: this?.jobTemplate?.duration ?? 0,\n }\n\n if (this?.jobTemplate?.opportunityStage) {\n request.opportunityStage = this?.jobTemplate?.opportunityStage;\n }\n\n if (this?.jobTemplate?.opportunitySource) {\n request.opportunitySource = this?.jobTemplate?.opportunitySource;\n }\n\n return request;\n }\n\n private build() {\n\n let request = this.buildCreateRequest();\n\n const jobDescription = this.jobTemplate?.description?.trim()\n ? [this?.jobTemplate?.description?.trim(), '\\n\\n']\n : [];\n\n Enumerable\n .from(this.questionAnswers)\n .forEach(answer => {\n\n const question = answer.question;\n const questionType = answer.question.type;\n const answerValue = answer.value;\n\n this.isConditionMet(answer);\n\n if (answer.passedCondition === false) {\n if (question.multiple) {\n answer.value = [];\n\n if (questionType === JobTemplateQuestionType.Numeric) {\n Enumerable\n .from(question.options)\n .forEach((o, i) => {\n answer.value[i] = 0;\n });\n }\n }\n else {\n if (questionType === JobTemplateQuestionType.Numeric) {\n answer.value = 0;\n }\n else {\n answer.value = null;\n }\n }\n return\n }\n\n\n const allowedActions = JobTemplateQuestionTypeAllowedActions[questionType];\n\n let safeValues: JobTemplateQuestionOptionWithValue[] = [];\n\n switch (questionType) {\n\n case JobTemplateQuestionType.Date: {\n const defaultOption = Enumerable.from(question.options).firstOrDefault();\n safeValues.push({ ...defaultOption, value: DateUtility.getDate(answerValue) });\n break;\n }\n\n case JobTemplateQuestionType.Numeric: {\n if (question.multiple) {\n\n let safeNumberValues = answerValue ?? [];\n Enumerable\n .from(question.options)\n .forEach((o, i) => {\n const value = safeNumberValues[i] ?? 0;\n if (value)\n safeValues.push({ ...o, value });\n //safeValues.push({ ...o, value: answerValue[i] });\n });\n\n } else {\n const defaultOption = Enumerable.from(question.options).firstOrDefault();\n safeValues.push({ ...defaultOption, value: answerValue });\n }\n break;\n }\n\n case JobTemplateQuestionType.Text: {\n const defaultOption = Enumerable.from(question.options).firstOrDefault();\n safeValues.push({ ...defaultOption, value: answerValue });\n break;\n }\n\n case JobTemplateQuestionType.Boolean: {\n const safeValue = answerValue ?? Enumerable.from(question.options).lastOrDefault();\n if (safeValue) safeValues.push(safeValue);\n break;\n }\n\n case JobTemplateQuestionType.Dropdown: {\n\n if (!question.multiple && answerValue) {\n safeValues.push(answerValue)\n break;\n }\n\n let arrayAnswerValue = answerValue ?? [];\n safeValues.push(...arrayAnswerValue)\n break;\n }\n }\n\n\n let questionJobDescription = [question?.name?.trim(), '\\n'];\n\n Enumerable\n .from(safeValues)\n .forEach(option => {\n\n const optionName = option?.name?.trim();\n let optionValue = option?.value ?? null\n\n switch (questionType) {\n case JobTemplateQuestionType.Date: {\n optionValue = DateUtility.formatDateTime(optionValue as any, this.timezone, this.dateFormat);\n break;\n }\n }\n\n let optionAnswer = null;\n if (option?.value) {\n if (safeValues?.length === 1) {\n optionAnswer = ['- ', optionValue].join('')\n }\n else {\n optionAnswer = ['- ', optionName, '\\n', optionValue].join('');\n }\n }\n else {\n optionAnswer = ['- ', optionName].join('');\n }\n\n if (optionAnswer) {\n questionJobDescription.push(optionAnswer + '\\n');\n }\n\n if (allowedActions.appendToJobDescription && option?.appendToJobDescription) {\n if (option?.jobDescription) {\n questionJobDescription.push(option?.jobDescription + '\\n');\n }\n }\n\n questionJobDescription.push('\\n');\n\n if (allowedActions.setJobType && option?.jobType) {\n request.type = option.jobType;\n }\n\n if (allowedActions.setPriority && option?.priority) {\n request.priority = option?.priority as PriorityTiny;\n }\n\n if (allowedActions.setPriceList && option?.priceList) {\n request.priceBook = option?.priceList as PriorityTiny;\n }\n\n if (allowedActions.setOwner && option?.owner) {\n request.owner = option?.owner as PriorityTiny;\n }\n\n if (option?.fieldSupervisor) {\n request.fieldSupervisor = option?.fieldSupervisor as PriorityTiny;\n }\n\n if (allowedActions.setTag && option?.tags) {\n const distinctTags = Enumerable\n .from([...request?.labels as Entity[], ...option.tags as Entity[]])\n .distinct(x => x._id)\n .toArray();\n request.labels = distinctTags;\n }\n\n if (allowedActions.setCustomFields && option?.customFields) {\n\n const customFields = option.customFields;\n\n Object\n .keys(customFields)\n .forEach(key => {\n const value = customFields[key];\n request.customFields[key] = value;\n });\n\n }\n\n if (allowedActions.setOpportunityStage && option?.opportunityStage) {\n request.opportunityStage = option?.opportunityStage;\n }\n\n if (allowedActions.setOpportunitySource && option?.opportunitySource) {\n request.opportunitySource = option?.opportunitySource;\n }\n\n if (allowedActions.setOpportunityEstimatedAmount && option?.opportunityEstimatedAmount) {\n request.opportunityAmount = option?.opportunityEstimatedAmount;\n }\n\n if (allowedActions.setOpportunityExpectedCloseDate && option?.opportunityExpectedCloseDate) {\n request.opportunityExpectedClose = option?.opportunityExpectedCloseDate;\n }\n\n if (allowedActions.addItems && option?.items?.length) {\n\n const processNumeric = (value: number | number[]) => {\n\n const saveValues = Array.isArray(value) ? value : [value];\n\n const allItems = Enumerable\n .from(saveValues)\n .select(safeValue => {\n\n const items = Enumerable\n .from(option.items)\n .where(_ => safeValue > 0)\n .select(code => {\n\n const safeQuantity = ((safeValue ?? 1) * (code?.quantity ?? 1));\n\n return {\n ...code,\n quantity: safeQuantity ? safeQuantity : 1\n }\n })\n .toArray();\n\n return items;\n })\n .selectMany(x => x)\n .toArray();\n\n return allItems;\n }\n\n const answerCodes = questionType === JobTemplateQuestionType.Numeric\n ? processNumeric(option?.value)\n : option.items;\n\n request.codes = Enumerable\n .from(request.codes as any[])\n .concat(answerCodes)\n .toArray();\n }\n\n if (option?.addToDuration) {\n const optionValue = option?.value ?? 1;\n const safeValue = Number.isNaN(optionValue)\n ? 1\n : optionValue;\n\n if (safeValue && !Number.isNaN(safeValue)) {\n request.duration += (option.addToDuration * safeValue);\n }\n }\n\n if (option?.setCustomField) {\n request.customFields[option.setCustomField] = option.value;\n }\n\n });\n\n if (questionJobDescription?.length) {\n jobDescription.push(...questionJobDescription.join(''));\n }\n\n });\n\n request.description = jobDescription.join('').trim();\n\n this.request = request;\n\n }\n\n public isConditionMet(qa: JobTemplateQuestionAnswer): boolean {\n return DynamicJobTemplateDomain.isConditionMet(this.questionAnswers, qa);\n }\n\n public static isConditionMet(questionAnswers: JobTemplateQuestionAnswer[], questionAnswer: JobTemplateQuestionAnswer): boolean {\n\n const { question, value } = questionAnswer;\n questionAnswer.passedCondition = true;\n\n if (!question?.showCondition) return true;\n\n const { question: conditionQuestionId, value: conditionValueId } = question?.showCondition;\n\n const conditionAnswer = Enumerable\n .from(questionAnswers)\n .where(x => x.question._id !== question._id)\n .firstOrDefault(x => x.question._id === conditionQuestionId);\n\n if (!conditionAnswer) {\n return false;\n }\n\n const conditionArray = Array.isArray(conditionAnswer?.value ?? [])\n ? conditionAnswer?.value\n : [conditionAnswer?.value];\n\n const passed = Enumerable\n .from(conditionArray)\n .any(x => x['_id'] === conditionValueId);\n\n questionAnswer.passedCondition = passed;\n return passed;\n\n }\n}\n\ninterface OpportunityWithQuote {\n opportunity: Partial;\n quote: Partial;\n}\n\nexport function getOpportunityWithQuoteFromJobCreateRequest(\n request: Partial,\n quoteTemplate: QuotePro,\n jobTemplate: JobTemplate\n): OpportunityWithQuote {\n\n const opportunity = {\n _id: v4(),\n\n opportunityNumber: null,\n name: jobTemplate.name,\n description: request.description ?? jobTemplate?.template?.description,\n amount: request.opportunityAmount ?? 0,\n\n account: request.customer,\n contact: request.contact,\n\n owner: request.owner ?? jobTemplate?.template?.owner,\n // priceBook: request.priceBook,\n jobType: request.type ?? jobTemplate?.template?.type,\n tags: request.labels ?? jobTemplate?.template?.labels,\n customFields: request.customFields ?? jobTemplate?.template?.customFields,\n\n site: request.site,\n template: {\n _id: jobTemplate._id,\n name: jobTemplate.name\n },\n\n stage: request.opportunityStage ?? jobTemplate?.template?.opportunityStage,\n source: request.opportunitySource ?? jobTemplate?.template?.opportunitySource,\n expectedClose: request.opportunityExpectedClose,\n } as Partial;\n\n // if (!opportunity.stage) {\n // delete opportunity.stage;\n // }\n\n // if (!opportunity.source) {\n // delete opportunity.source;\n // }\n\n // if (!opportunity.expectedClose) {\n // delete opportunity.expectedClose;\n // }\n\n if (!opportunity.account)\n delete opportunity.account;\n\n if (!opportunity.contact)\n delete opportunity.contact;\n\n if (!opportunity.site)\n delete opportunity.site;\n\n const quote = {\n ...quoteTemplate,\n _id: null,\n status: QuoteSimpleStatus.Draft,\n name: jobTemplate.name,\n date: new Date(),\n owner: request.owner,\n sections: [\n {\n _id: v4(),\n name: '',\n items: request?.codes ?? []\n },\n ...(quoteTemplate?.sections ?? [])\n ],\n links: [\n {\n _id: opportunity._id,\n type: ActivityEntityName.Opportunity\n }\n ],\n\n priceList: request.priceBook,\n pricingMethod: PricingMethod.PriceList\n\n } as Partial;\n\n return {\n opportunity,\n quote\n }\n\n}","import { JobCreateRequest } from '../../requests/job/job.create.request';\nimport { JobTemplate, JobTemplateSummary } from './job.template';\nimport { v4 } from 'uuid';\nimport * as Enumerable from 'linq';\nimport { ActivityEntityName, EmbeddedCode } from '../shared';\nimport { JobTemplateCode } from './job.template.workorder';\n\n\nexport class JobTemplateUtility {\n\n public static toJobRequest(template: JobTemplate): JobCreateRequest {\n if (!template) return null;\n\n const job = template?.template;\n\n const request = {\n mode: template?.mode ?? 'Advanced',\n type: job?.type,\n priority: job?.priority,\n description: job?.description,\n //If this has been specified on the template or recurring job, we should use it\n billingCompany: job?.company,\n priceBook: job?.priceBook,\n customFields: job?.customFields,\n labels: job?.labels,\n owner: job?.owner,\n fieldSupervisor: job?.fieldSupervisor,\n workOrders: job?.workOrders,\n templateName: template?.name,\n duration: job?.duration as any,\n\n startDate: null,\n endDate: null,\n dueDate: null,\n customer: {},\n updateCustomer: false,\n contact: {},\n address: null,\n technician: null,\n dispatch: false,\n createAppointment: false,\n usePrimaryContact: false,\n appointment: {},\n\n supervisor: null,\n quoteId: null,\n activity: null,\n placeId: null,\n quoteNumber: null,\n notifyTechnician: false,\n keepQuotedSellPrice: false,\n codes: [],\n\n\n } as JobCreateRequest;\n\n if (!request.customFields) {\n request.customFields = {};\n }\n\n request.workOrders.forEach(item => {\n if (!item.customFields) {\n item.customFields = {};\n }\n })\n\n\n return request;\n\n }\n\n public static getDefaultTemplate(): JobTemplate {\n return {\n _id: null,\n name: null,\n description: null,\n mode: 'Advanced',\n templateMode: 'Static',\n templateEntity: ActivityEntityName.Job,\n public: false,\n template: {\n _id: v4(),\n workOrders: [\n {\n _id: v4(),\n name: 'Default Stage',\n codes: [],\n customFields: null,\n workCategory: null,\n }\n ],\n questions: [],\n duration: null\n },\n\n };\n }\n\n public static getJobTemplateSummary(template: JobTemplate): JobTemplateSummary {\n\n const workOrders = template?.template?.workOrders ?? [];\n\n const summary = {\n _id: template._id,\n name: template.name,\n public: template.public,\n mode: template.mode,\n description: template.description,\n workOrderCount: workOrders.length ?? 0,\n priority: template?.template?.priority,\n codeCount: Enumerable.from(workOrders).selectMany(x => x?.codes).count(),\n templateMode: template.templateMode,\n templateEntity: template.templateEntity,\n\n } as JobTemplateSummary;\n\n return summary;\n }\n\n public static getJobTemplateCode(code: EmbeddedCode): JobTemplateCode {\n return {\n _id: code?._id,\n name: code?.name,\n quantity: code?.quantity,\n location: code?.location,\n description: code?.description,\n longDescription: code?.longDescription,\n canOverrideDesc: code?.canOverrideDesc,\n selected: false,\n category: code?.category,\n codeUoM: code?.codeUoM,\n buyPrice: code?.buyPrice,\n sellPrice: code?.sellPrice,\n customBuyPrice: code?.customBuyPrice,\n customSellPrice: code?.customSellPrice,\n note: code?.note,\n codeInvoicingStatus: code?.codeInvoicingStatus,\n suppliedBySubcontractor: code?.suppliedBySubcontractor,\n type: code?.type,\n }\n }\n\n public static getJobCode(x: EmbeddedCode) {\n\n const code = { ...x, sellPrice: x.adjustedSell, customSellPrice: true, customBuyPrice: x.customBuyPrice, adjustedSell: 0, totalAdjustment: 0, totalBuy: 0, totalSellEx: 0, totalSellInc: 0, totalTax: 0 } as EmbeddedCode;\n\n ['adjustedSell', 'totalAdjustment', 'totalBuy', 'totalSellEx', 'totalSellInc', 'totalTax']\n .forEach(field => delete code[field]);\n\n return code;\n }\n\n}\n","import { Source } from '../../enums';\nimport { ItemDeletedResponse } from '../../responses';\nimport { ContactEntity, ContactType } from '../contact';\nimport { Entity, EntityLink, TimestampDetails } from '../entity';\nimport { Job, WorkOrder, WorkOrderStatus } from '../job';\nimport { Address, Lex, Location, SimpleGoogleRoute, SiteTiny } from '../shared';\nimport { AppointmentPro } from './appointment.pro';\n\nexport function getJobEntity(job: Job) {\n if (!job) return null;\n return { _id: job._id, name: job.jobNumber } as Entity;\n}\n\nexport function getWorkOrderEntity(job: WorkOrder) {\n if (!job) return null;\n return { _id: job._id, name: job.workOrderNumber } as Entity;\n}\n\nexport const UnallocatedUserId = '00000000-0000-0000-0000-1000000000';\n\nexport const UnallocatedUser: ContactEntity = {\n _id: UnallocatedUserId,\n name: '',\n type: ContactType.System\n};\n\nexport enum AllocationStatus {\n Open = 'Open',\n Enroute = 'Enroute',\n OnSite = 'Onsite',\n CheckedOut = 'Checked Out',\n Completed = 'Completed',\n Cancelled = 'Cancelled',\n Overhead = 'Overhead'\n}\n\nexport const AllocationStatuses = [\n AllocationStatus.Open,\n AllocationStatus.Enroute,\n AllocationStatus.OnSite,\n AllocationStatus.CheckedOut,\n AllocationStatus.Completed,\n AllocationStatus.Cancelled,\n AllocationStatus.Overhead\n];\n\nexport enum AllocationType {\n PhoneCall = 'Phone Call',\n Meeting = 'Meeting',\n Onsite = 'Onsite'\n}\n\nexport enum BookingStatus {\n Confirmed = 'Confirmed',\n Tentative = 'Tentative'\n}\n\nexport enum AllocationReminderStatus {\n NotRequired = 'Not Required',\n Pending = 'Pending',\n Sent = 'Sent'\n}\n\nexport type RunLifeCycle = 'Pre' | 'Post' | 'None';\n\n\nexport const AllocationBookingStatus = [BookingStatus.Confirmed, BookingStatus.Tentative];\n\nexport type AllocationStatusInfo = {\n reason?: string;\n on?: Date;\n by?: Entity;\n note?: string;\n}\n\nexport type AllocationRule = {\n\n /** rule string, eg: RRULE:FREQ=WEEKLY;COUNT=30;INTERVAL=1;WKST=MO */\n _id: string;\n\n /** rule text, eg: every week for 30 times */\n name: string;\n\n start?: Date;\n end?: Date;\n exclude?: Date[];\n}\n\nexport interface Allocation extends Entity, TimestampDetails {\n _id: string;\n active?: boolean;\n run: Entity;\n runOrder?: Lex;\n resource: ContactEntity;\n startDate: Date;\n endDate: Date;\n status: AllocationStatus;\n\n booking?: Entity;\n job?: Entity;\n workOrder?: Entity;\n\n opportunity?: Entity;\n\n site?: SiteTiny;\n overhead?: AppointmentPro;\n clusterColor?: string;\n note?: string;\n type?: AllocationType;\n\n dateCompleted?: Date;\n completedNote?: string;\n\n allocations?: OtherAllocation[];\n\n createdAt?: Date;\n updatedAt?: Date;\n createdBy?: Entity;\n updatedBy?: Entity;\n contractorResource?: ContactEntity;\n source: Source;\n\n resourceMigration?: any;\n notificationSent?: boolean;\n\n additionalDays?: number;\n bookingStatus?: BookingStatus;\n\n locked?: boolean;\n allDay?: boolean;\n\n /** TODO: [Question] This field isn't saved to DB, what it for? */\n timezone?: string;\n\n // handle create allocation for equipment\n groupId?: string;\n\n // Route Information\n estimatedDuration?: number;\n travelDistance?: number;\n travelDuration?: number;\n travelDistanceString?: string;\n travelDurationString?: string;\n\n policy?: Entity;\n reminderStatus?: AllocationReminderStatus;\n\n statusInfo?: AllocationStatusInfo;\n\n rule?: AllocationRule;\n parentId?: string;\n\n integrationId?: string;\n\n\n /** Not save to db: \n * calculation field for displaying, \n * if resource.scheduling.tags not exactly equal allocation.workOrder.schedulingTags */\n isConflict?: boolean;\n\n // Not save to db: \n // This field is a flag to indicate that the allocation is created by selecting multiple slots from the calendar.\n selectedMultipleSlots?: boolean;\n\n\n /** @description virtual allocation for some-entity-type */\n virtualEntity?: EntityLink;\n}\n\nexport interface AllocationWithMeta extends Allocation {\n meta: AllocationMeta;\n}\n\nexport interface AllocationMeta {\n name?: string;\n type: Entity;\n priority: Entity;\n tags: Entity[];\n schedulingTags?: Entity[];\n customer: string;\n customerWO: string;\n category: Entity;\n status?: WorkOrderStatus;\n site: {\n _id: string;\n address: string;\n contactName: string;\n contactPhone: string;\n };\n\n}\n\nexport interface AllocationCard extends Pick<\n Allocation,\n '_id'\n | 'resource'\n | 'startDate'\n | 'endDate'\n | 'status'\n | 'contractorResource'\n | 'overhead'\n | 'job'\n | 'workOrder'\n | 'opportunity'\n | 'run'\n | 'source'\n | 'note'\n | 'bookingStatus'\n | 'groupId'\n | 'locked'\n | 'rule'\n | 'parentId'\n | 'allDay'\n | 'isConflict'\n | 'virtualEntity'\n> {\n meta?: AllocationMeta;\n metaOpportunity?: AllocationMeta;\n site?: SiteTiny;\n}\n\nexport interface BasicAllocation {\n resource: string,\n startDate: string,\n endDate: string,\n note: string\n}\n\n\nexport interface OtherAllocation {\n _id: string;\n resource: Entity;\n status: AllocationStatus;\n startDate: Date;\n}\n\nexport interface AllocationSummary {\n _id: string;\n startDate: Date;\n endDate: Date;\n resource: Entity;\n canDelete?: boolean;\n status: AllocationStatus;\n}\n\nexport interface AllocationPatch extends Partial> {\n}\n\n\nexport interface AllocationBatchRequest {\n deleted: string[];\n modified: AllocationPatch[];\n new: Allocation[];\n portal?: boolean;\n runLifeCycle?: RunLifeCycle;\n canSendNotification?: boolean;\n}\n\nexport interface AllocationBatchResponse {\n deleted: ItemDeletedResponse[];\n modified: Allocation[];\n new: Allocation[];\n success: boolean;\n}\n\nexport interface AllocationTrackingContact {\n _id: string;\n name: string;\n phone?: string;\n mobile?: string;\n location: Location;\n}\n\nexport interface AllocationTrackable {\n trackable: boolean;\n expired?: boolean;\n refresh?: boolean;\n}\n\nexport interface AllocationTracking extends AllocationTrackable {\n estTimeMinutes: number;\n estDistance: string;\n jobNumber: string;\n workOrderNumber: string;\n customerWO: string;\n address: Address;\n resource: AllocationTrackingContact;\n message: string;\n status: AllocationStatus;\n logo?: string;\n route?: SimpleGoogleRoute;\n}\n\n","import { Allocation } from './allocation';\nimport * as Enumerable from 'linq';\nimport { LexoRank } from '../shared';\nimport { Run, RunTemplateEntity } from './run';\n\nexport class RunUtility {\n\n public static getRunOrder(allocations: Allocation[], insertedId: string, insertedIndex: number) {\n\n allocations = allocations?.filter(x => x._id != insertedId);\n\n const first = Enumerable.from(allocations).firstOrDefault();\n const last = Enumerable.from(allocations).lastOrDefault();\n\n if (!first || !last) {\n return LexoRank.first().toString();\n }\n\n if (!allocations?.length) {\n\n const lex = LexoRank.first().toString();\n return lex;\n\n } else if (insertedIndex == 0) {\n\n const lex = first?.runOrder\n ? LexoRank.from(first?.runOrder).decrement().toString()\n : LexoRank.first().toString();\n\n return lex;\n\n } else if (insertedIndex == allocations.length) {\n\n const lex = last?.runOrder\n ? LexoRank.from(last?.runOrder).increment().toString()\n : LexoRank.first().toString();\n\n return lex;\n\n } else {\n\n const previous = allocations[insertedIndex - 1];\n const next = allocations[insertedIndex];\n\n const lex = LexoRank.between(previous?.runOrder, next?.runOrder).toString();\n\n return lex;\n }\n\n }\n\n public static getRunTemplateEntity(run: Run): RunTemplateEntity {\n return {\n _id: run._id,\n name: run.name,\n resources: run.resources,\n start: {\n name: run?.start?.name,\n description: run?.start?.description,\n address: run?.start?.address,\n },\n finish: {\n name: run?.finish?.name,\n description: run?.finish?.description,\n address: run?.finish?.address,\n }\n };\n }\n}","import * as Enumerable from 'linq';\nimport { AttributeFilter } from '../../entity';\nimport { Contact } from '../../contact/contact';\n\n\nexport class ContactIndexUtility {\n\n public static getAttributeFilter(contact: Contact): AttributeFilter[] {\n\n const filters: AttributeFilter[] = [];;\n\n filters.push({ k: 'active', v: !!contact?.active });\n\n if (contact?.type)\n filters.push({ k: 'type', v: contact?.type });\n\n const safeParents = Enumerable.from(contact?.parents)?.where(x => !!x?._id).toArray();\n const safeLabels = Enumerable.from(contact?.labels)?.where(x => !!x?._id).toArray();\n const safeWorkCategories = Enumerable.from(contact?.workCategories)?.where(x => !!x?._id).toArray();\n const safeZones = Enumerable.from(contact?.zones)?.where(x => !!x?._id).toArray();\n\n if (safeParents?.length)\n filters.push(...safeParents.map(p => ({ k: 'parent', v: p?._id, n: p?.name })));\n\n if (safeLabels?.length)\n filters.push(...safeLabels?.map(label => ({ k: 'tags', v: label?._id, n: label?.name })));\n\n if (safeWorkCategories?.length)\n filters.push(...safeWorkCategories?.map(label => ({ k: 'workCategories', v: label?._id, n: label?.name })));\n\n if (safeZones?.length)\n filters.push(...safeZones?.map(label => ({ k: 'zones', v: label?._id, n: label?.name })));\n\n const text = [\n contact.name?.trim() ?? null,\n contact.legalName?.trim() ?? null,\n contact?.phone?.trim().replace(' ', '') ?? null,\n contact?.workPhone?.trim().replace(' ', '') ?? null,\n contact?.mobile?.trim().replace(' ', '') ?? null,\n contact?.email?.trim() ?? null,\n ]\n .filter(x => !!x?.length)\n .map(x => x?.toLowerCase()?.split(' '))\n .filter(x => !!x?.length)\n .flat() as string[];\n\n if (text?.length)\n filters.push({ k: 'text', v: text });\n\n return Enumerable\n .from(filters)\n .where(x => x.v !== undefined && x.v !== null && x.v !== '')\n .distinct(x => `${x.k}:${x.v}`)\n .toArray();\n\n }\n\n}","import * as Enumerable from 'linq';\nimport { DateUtility, JobUtility } from '../../../utilities';\nimport { AttributeFilter } from '../../entity';\nimport { SitePro } from './site.pro';\nimport { DateTime } from 'luxon';\nimport { getRequireConfirmationDateFromSite } from '../../job';\n\nexport class SiteProIndexUtility {\n\n public static getAttributeFilter(site: SitePro): AttributeFilter[] {\n\n const filters: AttributeFilter[] = [];;\n\n filters.push({ k: 'active', v: site?.active });\n\n if (site?.type)\n filters.push({ k: 'type', v: site?.type, n: site?.type });\n\n if (site?.parent) {\n filters.push({ k: 'parent', v: site?.parent?._id, n: site?.parent?.name });\n filters.push({ k: 'parent_type', v: site?.parent?.type, n: site?.parent?.type });\n }\n\n if (site?.owner)\n filters.push({ k: 'owner', v: site?.owner?._id, n: site?.owner?.name });\n\n if (site?.billTo)\n filters.push({ k: 'billTo', v: site?.billTo?._id, n: site?.billTo?.name });\n\n if (site?.manager)\n filters.push({ k: 'manager', v: site?.manager?._id, n: site?.manager?.name });\n\n if (site.createdAt)\n filters.push({ k: 'createdAt', v: DateUtility.getDate(site.createdAt) });\n\n if (site.updatedAt)\n filters.push({ k: 'updatedAt', v: DateUtility.getDate(site.updatedAt) });\n\n if (site?.tags?.length)\n filters.push(...site?.tags?.filter(l => !!l)?.map(label => ({ k: 'tag', v: label._id, n: label.name })));\n\n if (site?.schedulingTags?.length)\n filters.push(...site?.schedulingTags?.filter(l => !!l)?.map(label => ({ k: 'scheduling', v: label._id, n: label.name })));\n\n if (site?.status) {\n const status = site?.status;\n filters.push({ k: 'status', v: status?.parent?._id, n: status?.parent?.name });\n filters.push({ k: 'statusType', v: status?.statusType, n: status?.statusType });\n filters.push({ k: 'statusSubStatus', v: status?._id, n: status?.name });\n }\n\n if (site?.services?.length) {\n const serviceTypes = site?.services?.map(service => service?.serviceType?._id);\n\n const nextServiceDates = Enumerable\n .from(site?.services)\n .where(x => !!x.nextServiceDate)\n .select(service => DateUtility.getDate(service?.nextServiceDate))\n .toArray();\n\n const nextConfirmationDates = Enumerable\n .from(site?.services)\n .where(x => !!x.nextConfirmationDate)\n .select(service => DateUtility.getDate(service?.nextConfirmationDate))\n .toArray();\n\n const requiresConfirmation = Enumerable.from(site?.services).any(x => x.requiresConfirmation);\n filters.push({ k: 'requiresConfirmation', v: requiresConfirmation });\n\n if (nextServiceDates.length) {\n filters.push({ k: 'nextServiceDate', v: nextServiceDates });\n }\n\n if (nextConfirmationDates.length) {\n filters.push({ k: 'nextConfirmationDate', v: nextConfirmationDates });\n }\n\n if (serviceTypes?.length) filters.push({ k: 'serviceType', v: serviceTypes });\n\n\n filters.push({ k: 'requiresConfirmationDate', v: getRequireConfirmationDateFromSite(site) });\n }\n\n filters.push({ k: 'processingConfirmationDate', v: site?.processingConfirmationDate ?? DateUtility.minDateTime.toJSDate() });\n filters.push({ k: 'actionRequired', v: site?.actionRequired?.value ?? false });\n filters.push({ k: 'responseReceived', v: site?.responseReceived?.value ?? false });\n\n // Text Filters\n // if (site?.name?.length)\n // filters.push({ k: 'text', v: site?.name?.toLowerCase() });\n\n // if (site?.placeId?.length) {\n // filters.push({ k: 'text', v: site?.placeId?.toLowerCase() });\n // }\n\n const addressName = site?.address?.name?.trim() ?? JobUtility.address(site?.address);\n\n const text = [addressName, site.name, site.placeId, site?.parent?.name]\n .filter(x => x?.length)\n .map(x => {\n const words = x\n .toLowerCase()\n .split(' ');\n\n const extendedWords = words\n .map(x => {\n\n const ew = x.indexOf('/') > -1\n ? [x, ...x.split('/').map(x => x.trim()).flat()]\n : [x];\n\n return ew;\n\n })\n .flat();\n\n return [...extendedWords];\n })\n .flat();\n\n filters.push({ k: 'text', v: text });\n\n // if (site?.address?.street1?.length) {\n // filters.push({ k: 'address', v: site?.address?.street1?.toLowerCase()?.trim() });\n // }\n\n // if (site?.address?.street2?.length) {\n // filters.push({ k: 'address', v: site?.address?.street2?.toLowerCase()?.trim() });\n // }\n\n // if (site?.address?.suburb.length) {\n // filters.push({ k: 'address', v: site?.address?.suburb?.toLowerCase()?.trim() });\n // }\n\n // if (site?.address?.state?.length) {\n // filters.push({ k: 'address', v: site?.address?.state?.toLowerCase()?.trim() });\n // }\n\n // if (site?.address?.postalCode?.length) {\n // filters.push({ k: 'address', v: site?.address?.postalCode?.toLowerCase()?.trim() });\n // }\n\n // if (site?.address?.postcode) {\n // filters.push({ k: 'address', v: site?.address?.postcode.toString()?.toLowerCase()?.trim() });\n // }\n\n return Enumerable\n .from(filters)\n .where(x => x.v !== undefined && x.v !== null && x.v !== '')\n .distinct(x => `${x.k}:${x.v}`)\n .toArray();\n\n }\n\n}","export enum ReportFieldType {\n Date = 'date',\n String = 'string',\n Number = 'number',\n Decimal = 'decimal',\n Currency = 'currency',\n Boolean = 'boolean',\n\n RichText = 'richText',\n\n Customer = 'customer',\n Uom = 'uom',\n Priority = 'priority',\n Company = 'company',\n Pricebook = 'pricebook',\n JobLabel = 'jobLabel',\n JobType = 'jobType',\n FieldSupervisor = 'fieldSupervisor',\n Owner = 'owner',\n CustomerPO = 'customerPO',\n CustomerSupervisor = 'customerSupervisor',\n Zone = 'zone',\n Contractor = 'contractor',\n WorkCategory = 'workCategory',\n WOLabel = 'woLabel',\n WOResource = 'woResource',\n WOStatus = 'woStatus',\n Category = 'category',\n\n //Status not fully supported yet due to being a string in db and not an actual object\n Status = 'status',\n\n /** Mostly use for filter, and simple display (by **name** property) */\n EntityStatus = 'entityStatus',\n\n Suburb = 'suburb',\n State = 'state',\n Postcode = 'postcode',\n Address = 'address',\n\n Link = 'link',\n\n Tag = 'tag',\n}","import { ReportFieldType } from './report.field.type'\n\n\nexport enum Operator {\n\n Today = 'Today',\n Yesterday = 'Yesterday',\n\n On = 'On',\n OnOrBefore = 'On Or Before',\n OnOrAfter = 'On Or After',\n\n LastXDays = 'Last X Days',\n NextXDays = 'Next X Days',\n\n ThisWeek = 'This Week',\n ThisMonth = 'This Month',\n ThisYear = 'This Year',\n\n LastXWeeks = 'Last X Weeks',\n LastXMonths = 'Last X Months',\n LastXYears = 'Last X Year',\n\n NextXWeeks = 'Next X Weeks',\n NextXMonths = 'Next X Months',\n NextXYears = 'Next X Years',\n\n ContainsData = 'Contains Data',\n DoesNotContainData = 'Does Not Contain Data',\n\n Equal = '=',\n NotEqual = '!=',\n Greater = '>',\n Less = '<',\n GreaterOrEqual = '>=',\n LessOrEqual = '<=',\n\n In = 'In',\n NotIn = 'Not In',\n\n Contains = 'Contains',\n DoesNotContain = 'Does Not Contain',\n\n CurrentUser = 'Current User'\n}\n\n\nexport class QueryOperators {\n static readonly DateOperators = [\n Operator.Today,\n Operator.Yesterday,\n Operator.On,\n Operator.OnOrBefore,\n Operator.OnOrAfter,\n Operator.LastXDays,\n Operator.NextXDays,\n Operator.ThisWeek,\n Operator.LastXWeeks,\n Operator.NextXWeeks,\n Operator.ThisMonth,\n Operator.LastXMonths,\n Operator.NextXMonths,\n Operator.ThisYear,\n Operator.LastXYears,\n Operator.NextXYears,\n Operator.ContainsData,\n Operator.DoesNotContainData\n ]\n\n static readonly NumberOperators = [\n Operator.Equal,\n Operator.NotEqual,\n Operator.Greater,\n Operator.Less,\n Operator.GreaterOrEqual,\n Operator.LessOrEqual,\n Operator.ContainsData,\n Operator.DoesNotContainData\n ]\n\n static readonly LookupOperators = [\n Operator.In,\n Operator.NotIn,\n Operator.ContainsData,\n Operator.DoesNotContainData\n ]\n static readonly OwnerOperators = [\n Operator.In,\n Operator.NotIn,\n Operator.ContainsData,\n Operator.DoesNotContainData,\n Operator.CurrentUser\n ]\n\n\n static readonly StringOperators = [\n Operator.Equal,\n Operator.NotEqual,\n Operator.Contains,\n Operator.DoesNotContain,\n Operator.ContainsData,\n Operator.DoesNotContainData\n ]\n\n static readonly BooleanOperators = [\n Operator.Equal,\n Operator.NotEqual,\n Operator.ContainsData,\n Operator.DoesNotContainData\n ]\n\n static getOperators(fieldType: ReportFieldType): Operator[] {\n switch (fieldType) {\n case ReportFieldType.Date:\n return QueryOperators.DateOperators;\n\n case ReportFieldType.Number:\n case ReportFieldType.Currency:\n case ReportFieldType.Decimal:\n return QueryOperators.NumberOperators;\n\n case ReportFieldType.String:\n case ReportFieldType.Link:\n case ReportFieldType.RichText:\n return QueryOperators.StringOperators;\n case ReportFieldType.WOResource:\n case ReportFieldType.FieldSupervisor:\n case ReportFieldType.Owner: {\n return QueryOperators.OwnerOperators;\n }\n case ReportFieldType.Boolean: {\n return QueryOperators.BooleanOperators;\n }\n\n default: {\n return QueryOperators.LookupOperators;\n }\n\n }\n }\n}\n","export enum VariationStatus {\n Draft = 'Draft',\n PendingForApproval = 'Pending For Approval',\n Approved = 'Approved',\n Rejected = 'Rejected'\n}\n\nexport const VariationStatusMap: { [key: string]: any } = {\n 'draft': VariationStatus.Draft,\n 'pending': VariationStatus.PendingForApproval,\n 'approved': VariationStatus.Approved,\n 'rejected': VariationStatus.Rejected,\n\n [VariationStatus.Draft]: 'draft',\n [VariationStatus.PendingForApproval]: 'pending',\n [VariationStatus.Approved]: 'approved',\n [VariationStatus.Rejected]: 'rejected',\n\n}\n\nexport const VariationStatusColorMap: { [key: string]: string } = {\n [VariationStatus.Draft]: '#AAAAAA',\n [VariationStatus.PendingForApproval]: '#F39226',\n [VariationStatus.Approved]: '#5EC641',\n [VariationStatus.Rejected]: '#EC3324',\n}\n","\nexport enum TaskStatus {\n Open = 'Open',\n Completed = 'Completed',\n}\n\nexport enum TaskPhaseName {\n Before = 'Before',\n During = 'During',\n After = 'After',\n}\n\nexport enum DailyPhaseName {\n CheckIn = 'Daily Check-In',\n CheckOut = 'Daily Check-Out',\n}\n\nexport type TaskPhaseType = TaskPhaseName | DailyPhaseName;\n\nexport enum TaskTarget {\n Office = 'Office',\n Supervisor = 'Supervisor',\n Field = 'Field'\n}\n\nexport enum TaskGroupBy {\n None = 'None',\n //Legacy = 'Legacy',\n Stage = 'Stage',\n Phase = 'Phase',\n Assignee = 'Assignee',\n Location = 'Location',\n Tags = 'Tags',\n Target = 'Target',\n Type = 'Type',\n Status = 'Status',\n}\n\nexport const TaskPhaseNames = Object.values(TaskPhaseName);\nexport const DailyPhaseNames = Object.values(DailyPhaseName);\nexport const TaskTargets = Object.values(TaskTarget);\nexport const TaskGroupBys = Object.values(TaskGroupBy);\n\nexport enum TaskLinkType {\n Project = 'Project',\n Job = 'Job',\n WorkOrder = 'WorkOrder',\n Employee = 'Employee',\n JobTemplate = 'Job Template',\n Opportunity = \"Opportunity\",\n Contact = 'Contact',\n\n Task = 'Task',\n // Code = 'Code',\n Phase = 'Phase',\n Daily = 'Daily',\n Checklist = 'Checklist',\n Compliance = 'Compliance',\n LegacyCompliance = 'Legacy Compliance',\n\n Item = 'Item',\n ItemTask = 'Item Task',\n\n // This is using on group by stuff\n Group = 'Group',\n Assignee = 'Assignee',\n Location = 'Location',\n Type = 'Type',\n Tags = 'Tags',\n Target = 'Target',\n Status = 'Status',\n Site = 'Site',\n IntegrationId = 'IntegrationId',\n}\n\nexport enum TaskCopyDestination {\n Job = 'Job',\n WorkOrder = 'WorkOrder',\n Code = 'Code',\n Checklist = 'Checklist',\n}","import { TaskLinkEntity } from './task.props.type';\n\nimport * as Enumerable from 'linq';\nimport { DailyPhaseName, TaskGroupBy, TaskLinkType, TaskPhaseName, TaskStatus, TaskTarget } from './task.enum';\nimport { getEntityTaskLink, getPhaseTag } from './task.utility';\nimport { NestedTask, Task } from './task';\nimport { v4 } from 'uuid';\nimport { LabelEntity, LabelType } from '../shared';\nimport { TaskViewOptions, defaultViewOptions } from './task.options';\nimport { ContactEntity } from '../contact';\nimport { FiltersRelativeDateUtility, DateUtility } from '../../utilities'\n\nexport class TaskGroupUtility {\n\n public static noLocation = \"No Location\";\n\n public static createNestedTask(task: Task, currentGroupBy: TaskGroupBy): NestedTask {\n\n const groupLinks: Record = {} as any;\n\n if (task.assignee) {\n groupLinks[TaskLinkType.Assignee] = getEntityTaskLink({ ...task.assignee, data: task.assignee?.name ?? \"\" }, TaskLinkType.Assignee);\n }\n\n if (task?.data?.location) {\n const location = task.data.location.toUpperCase();\n groupLinks[TaskLinkType.Location] = getEntityTaskLink({ _id: location, name: location, data: location }, TaskLinkType.Location);\n }\n\n if (task.target) {\n groupLinks[TaskLinkType.Target] = getEntityTaskLink({ _id: task.target, name: task.target, data: task.target }, TaskLinkType.Type);\n }\n\n if (task.type) {\n groupLinks[TaskLinkType.Type] = getEntityTaskLink({ _id: task.type, name: task.type, data: task.type }, TaskLinkType.Type);\n }\n\n if (task.status) {\n groupLinks[TaskLinkType.Status] = getEntityTaskLink({ _id: task.status, name: task.status, data: task.status }, TaskLinkType.Type);\n }\n else {\n groupLinks[TaskLinkType.Status] = getEntityTaskLink({ _id: TaskStatus.Open, name: TaskStatus.Open, data: TaskStatus.Open }, TaskLinkType.Type);\n }\n\n Enumerable\n .from(task.links as TaskLinkEntity[])\n .forEach(x => {\n groupLinks[x.type] = x;\n });\n\n Enumerable\n .from(task.tags)\n .forEach(x => {\n\n switch (x.type) {\n case LabelType.Phase:\n groupLinks[x._id] = getEntityTaskLink({ ...x, data: x.name ?? \"\" }, TaskLinkType.Phase);\n groupLinks[TaskLinkType.Phase] = getEntityTaskLink({ ...x, data: x.name ?? \"\" }, TaskLinkType.Phase);\n return;\n\n case LabelType.File:\n groupLinks[x._id] = getEntityTaskLink({ ...x, data: x.name ?? \"\" }, TaskLinkType.Tags);\n return;\n\n default:\n groupLinks[x.type] = getEntityTaskLink({ ...x, data: x.name ?? \"\" }, TaskLinkType[x.type]);\n }\n });\n\n const newTask = {\n ...task,\n groupLinks,\n children: [],\n currentGroupBy: currentGroupBy,\n } as NestedTask;\n\n return newTask;\n }\n\n public static build(tasks: Task[], options: TaskViewOptions, includesDailyGroup: boolean = true, linkLevel?: TaskLinkEntity): NestedTask[] {\n\n const safeOptions = options ?? defaultViewOptions;\n let result: NestedTask[];\n\n const start = new Date();\n //console.log((new Date()).getTime() - start.getTime());\n\n switch (safeOptions.groupBy) {\n case TaskGroupBy.Stage:\n result = this.groupByStage(tasks, safeOptions);\n break;\n case TaskGroupBy.Phase:\n result = this.groupByPhase(tasks, safeOptions, includesDailyGroup, linkLevel);\n break;\n case TaskGroupBy.Assignee:\n result = this.groupByAssignee(tasks, safeOptions);\n break;\n case TaskGroupBy.Tags:\n result = this.groupByTags(tasks, safeOptions);\n break;\n case TaskGroupBy.Location:\n result = this.groupByField(TaskLinkType.Location, tasks, safeOptions, this.createGroupTask(TaskGroupBy.Location, this.noLocation, this.noLocation), null);\n break;\n case TaskGroupBy.Target:\n const targetMap = new Map([TaskTarget.Field, TaskTarget.Office, TaskTarget.Supervisor].map(e => [e, null]));\n result = this.groupByField(TaskLinkType.Target, tasks, safeOptions, this.createGroupTask(TaskGroupBy.Target, \"No Target\", \"No Target\"), targetMap);\n break;\n case TaskGroupBy.Type:\n result = this.groupByField(TaskLinkType.Type, tasks, safeOptions, this.createGroupTask(TaskGroupBy.Type, \"No Type\", \"No Type\"), null);\n break;\n case TaskGroupBy.Status:\n const statusMap = new Map([TaskStatus.Open, TaskStatus.Completed].map(e => [e, null]));\n result = this.groupByField(TaskLinkType.Status, tasks, safeOptions, this.createGroupTask(TaskGroupBy.Status, \"No Status\", \"No Status\"), statusMap);\n break;\n default:\n result = this.groupByNone(tasks, safeOptions);\n break;\n }\n\n //console.log((new Date()).getTime() - start.getTime());\n if (!safeOptions.showEmptyGroups) {\n\n result = Enumerable\n .from(result)\n .where(e => {\n\n if (e.type === TaskLinkType.Group) {\n\n if ([DailyPhaseName.CheckIn, DailyPhaseName.CheckOut].includes(e._id as any)) {\n // We are dealing with the daily task groups adn we need to check the children have children\n e.children = e.children.filter(x => x.children.length > 0);\n }\n\n return e.children.length > 0;\n }\n\n return true;\n\n })\n .toArray();\n }\n\n\n return result;\n }\n\n private static groupByStage(tasks: Task[], options: TaskViewOptions): NestedTask[] {\n\n let rootParents = [];\n const taskMap = new Map(tasks.map(e => [e._id, this.createNestedTask(e, TaskGroupBy.Stage)]))\n const parents = new Map(tasks.filter(e => !!e.parent).map(e => [e.parent._id, taskMap.get(e.parent._id)]));\n\n for (const task of taskMap.values()) {\n if (!task.parent) {\n rootParents.push(task);\n continue;\n }\n\n let parent = parents.get(task.parent._id);\n if (!parent) {\n continue;\n }\n\n if (!parent?.children) {\n parent.children = [];\n }\n\n parent.children.push(task);\n }\n\n this.filterAndSortChildInParents([...Array.from(parents.values()), ...Array.from(parents.values())], options);\n\n const groups: NestedTask[] = [];\n\n if (options.sortBy === TaskGroupBy.Stage) {\n rootParents = this.sortByStage(rootParents, options);\n } else {\n rootParents = this.sortBySortOrder(rootParents, options);\n }\n\n for (const parent of rootParents) {\n const id = parent._id;\n if (!taskMap.has(id)) {\n continue;\n }\n\n groups.push({\n ...taskMap.get(id),\n currentGroupBy: TaskGroupBy.Stage\n });\n }\n\n return groups;\n }\n\n private static groupByPhase(tasks: Task[], options: TaskViewOptions, includesDailyGroup: boolean = true, linkLevel: TaskLinkEntity): NestedTask[] {\n\n const addDailyToStage = linkLevel?.type === TaskLinkType.Job\n const virtualStageTasks: Map = new Map();\n\n let enumerable = Enumerable.empty();\n if (addDailyToStage && includesDailyGroup) {\n // create stage tasks in daily group\n enumerable = Enumerable.from(tasks).where(x => x.type !== TaskLinkType.Job)\n .selectMany(e => {\n if (e.type === TaskLinkType.WorkOrder) {\n const stagesInDaily = [DailyPhaseName.CheckIn, DailyPhaseName.CheckOut].map(x => {\n const fake = this.createNestedTask(e, TaskGroupBy.Phase)\n fake._id = `${e._id}+${x}`;\n fake.children = [];\n fake.parent = {\n _id: x,\n name: x,\n type: TaskLinkType.Phase\n }\n return fake\n });\n\n for (const item of stagesInDaily) {\n virtualStageTasks.set(item._id, item);\n }\n\n return stagesInDaily;\n }\n\n return [this.createNestedTask(e, TaskGroupBy.Phase)];\n });\n }\n else {\n enumerable = Enumerable.from(tasks).where(x => !x.virtual).select(e => this.createNestedTask(e, TaskGroupBy.Phase));\n }\n\n const taskList = enumerable.toArray();\n const noPhaseTasks = this.createGroupTask(TaskGroupBy.Phase, \"No Phase\", \"No Phase\");\n const parents = new Map(taskList.map(e => [e._id, e]));\n const phaseName: string[] = [TaskPhaseName.Before, TaskPhaseName.During, TaskPhaseName.After];\n\n if (includesDailyGroup) {\n phaseName.push(DailyPhaseName.CheckIn, DailyPhaseName.CheckOut);\n }\n\n const phases = new Map(phaseName\n .map(e => {\n const phase = this.createGroupTask(TaskGroupBy.Phase, e, e, getPhaseTag(e), null);\n parents.set(e, phase);\n return [e, phase];\n }));\n\n const foundParents = new Map();\n\n for (const task of taskList) {\n\n let parent = parents.get(task.parent._id);\n if (parent) {\n if (!parent?.children) {\n parent.children = [];\n }\n\n parent.children.push(task);\n if (task.type === TaskLinkType.Compliance) {\n parent.hasComplianceSubtask = true;\n }\n\n if (!foundParents.has(parent._id)) {\n foundParents.set(parent._id, parent);\n }\n\n continue;\n }\n\n let inGroup = false;\n for (const key of phases.keys()) {\n const tag = task.groupLinks[key];\n if (!tag) {\n continue;\n }\n\n inGroup = true;\n const group = phases.get(key)\n\n if (virtualStageTasks.size > 0 && (group._id === DailyPhaseName.CheckIn || group._id === DailyPhaseName.CheckOut)) {\n const found = virtualStageTasks.get(`${task.parent._id}+${group._id}`);\n if (found) {\n found.children.push(task);\n continue;\n }\n }\n\n // Set the group by as the parent for the task. this is use on field app\n task.virtualParent = { ...group, children: [] };\n group.children.push(task);\n }\n\n if (!inGroup) {\n task.virtualParent = { ...noPhaseTasks, children: [] };\n noPhaseTasks.children.push(task);\n }\n }\n\n this.filterAndSortChildInParents([...(Array.from(foundParents.values()))], options);\n\n if (noPhaseTasks.children.length === 0) {\n return Array.from(phases.values());\n }\n\n return [...Array.from(phases.values()), noPhaseTasks];\n }\n\n private static groupByAssignee(tasks: Task[], options: TaskViewOptions): NestedTask[] {\n\n let assignees: NestedTask[] = [];\n const noVirtual = Enumerable\n .from(tasks)\n .where(x => {\n if (x.daily) {\n return x.instance;\n }\n\n return !x.virtual\n })\n .select(e => {\n if (e.assignee) {\n assignees.push(this.createGroupTask(TaskGroupBy.Assignee, e.assignee.name, e.assignee._id, null, e.assignee));\n }\n\n return this.createNestedTask(e, TaskGroupBy.Assignee)\n })\n .toArray();\n\n const enumerable = Enumerable.from(assignees).distinct(e => e._id);\n if (options.sortOrder === 'asc') {\n assignees = enumerable.orderBy(e => e.name).toArray();\n }\n else {\n assignees = enumerable.orderByDescending(e => e.name).toArray();\n }\n\n const assigneeMap = new Map(assignees.map(e => [e._id, e]));\n const noAssigneeTasks = this.createGroupTask(TaskGroupBy.Assignee, \"No Assignee\", \"No Assignee\");\n const parents = new Map(noVirtual.map(e => [e._id, e]));\n\n for (const task of noVirtual) {\n\n const foundParent = parents.get(task.parent._id);\n if (foundParent) {\n task.fullParent = foundParent;\n }\n\n const assignee = task.groupLinks[TaskLinkType.Assignee]?._id;\n const found = assigneeMap.get(assignee);\n if (found) {\n found.children.push(task);\n }\n else {\n noAssigneeTasks.children.push(task);\n }\n }\n\n let groups: NestedTask[];\n if (noAssigneeTasks.children.length === 0) {\n groups = Array.from(assigneeMap.values());\n }\n else {\n groups = [...Array.from(assigneeMap.values()), noAssigneeTasks];\n }\n\n this.filterAndSortChildInParents(groups, options);\n\n return groups.filter(e => !!e.children?.length);\n }\n\n private static groupByNone(tasks: Task[], options: TaskViewOptions): NestedTask[] {\n\n const noVirtual = Enumerable\n .from(tasks)\n .where(x => !x.virtual)\n .select(e => this.createNestedTask(e, TaskGroupBy.None))\n .toArray();\n\n const taskMap = new Map(noVirtual.map(e => [e._id, e]));\n const foundParent = new Map();\n\n for (const task of noVirtual) {\n\n let parent = taskMap.get(task.parent._id);\n\n if (!parent) {\n continue;\n }\n\n taskMap.delete(task._id);\n\n if (!parent?.children) {\n parent.children = [];\n }\n\n parent.children.push(task);\n\n if (!foundParent.has(parent._id)) {\n foundParent.set(parent._id, parent);\n }\n }\n\n const temp = { children: Array.from(taskMap.values()) } as NestedTask;\n this.filterAndSortChildInParents([...Array.from(foundParent.values()), temp], options);\n\n const items = temp.children;;\n\n return items;\n }\n\n private static groupByTags(tasks: Task[], options: TaskViewOptions): NestedTask[] {\n\n const tagGroups = new Map();\n\n const noVirtual = Enumerable\n .from(tasks)\n .where(x => {\n if (x.daily) {\n return x.instance;\n }\n\n return !x.virtual\n })\n .select(e => {\n const nested = this.createNestedTask(e, TaskGroupBy.Tags);\n\n if (e.tags?.length > 0) {\n for (const tag of e.tags) {\n if (tag.type !== LabelType.File || tagGroups.has(tag._id)) {\n continue;\n }\n\n tagGroups.set(tag._id, this.createGroupTask(TaskGroupBy.Tags, tag.name, tag.name, tag, null));\n }\n }\n\n return nested;\n })\n .toArray();\n\n const noTagTasks = this.createGroupTask(TaskGroupBy.Tags, \"No Tag\", \"No Tag\",);\n const parents = new Map(noVirtual.map(e => [e._id, e]));\n\n for (const task of noVirtual) {\n\n const foundParent = parents.get(task.parent._id);\n if (foundParent) {\n task.fullParent = foundParent;\n }\n\n let inGroup = false;\n for (const key of tagGroups.keys()) {\n const tag = task.groupLinks[key];\n if (!tag) {\n continue;\n }\n\n inGroup = true;\n const group = tagGroups.get(key)\n group.children.push(task);\n }\n\n if (!inGroup) {\n noTagTasks.children.push(task);\n }\n }\n\n let groups: NestedTask[];\n\n if (noTagTasks.children.length === 0) {\n groups = Array.from(tagGroups.values());\n }\n else {\n groups = [...Array.from(tagGroups.values()), noTagTasks];\n }\n\n this.filterAndSortChildInParents(groups, options);\n\n\n return groups;\n }\n\n private static groupByField(groupByField: TaskLinkType, tasks: Task[], options: TaskViewOptions, emptyGroup: NestedTask, groupByFieldMap: Map): NestedTask[] {\n if (!groupByFieldMap) {\n groupByFieldMap = new Map();\n }\n\n const noVirtual = Enumerable\n .from(tasks)\n .where(x => !x.virtual)\n .select(e => {\n return this.createNestedTask(e, TaskGroupBy[groupByField])\n })\n .select(e => {\n const field = e.groupLinks[groupByField];\n\n if (field && !groupByFieldMap.get(field._id)) {\n\n const fieldTask =\n {\n ...field,\n children: [],\n type: TaskLinkType.Group,\n currentGroupBy: TaskGroupBy[groupByField]\n } as NestedTask;\n\n if (groupByField === TaskLinkType.Target) {\n fieldTask['target'] = TaskTarget[field._id];\n }\n\n groupByFieldMap.set(field._id, fieldTask)\n }\n\n return e;\n })\n .toArray();\n\n const parents = new Map(noVirtual.map(e => [e._id, e]));\n const foundParents = new Map();\n\n for (const task of noVirtual) {\n let parent = parents.get(task.parent._id);\n if (parent) {\n parents.delete(task._id);\n\n if (!parent?.children) {\n parent.children = [];\n }\n\n parent.children.push(task);\n if (!foundParents.has(parent._id)) {\n foundParents.set(parent._id, parent);\n }\n continue;\n }\n\n const value = task.groupLinks[groupByField]?._id;\n const found = groupByFieldMap.get(value);\n if (found) {\n found.children.push(task);\n }\n else {\n emptyGroup.children.push(task);\n }\n }\n\n const groups = [...(Array.from(groupByFieldMap.values())).filter(e => !!e?.children?.length), emptyGroup];\n this.filterAndSortChildInParents([...(Array.from(foundParents.values())), ...groups], options);\n\n return groups.filter(e => !!e.children?.length);\n }\n\n private static createGroupTask(currentGroupBy: TaskGroupBy, name: string, id: string = null, tag: LabelEntity = null, assignee: ContactEntity = null): NestedTask {\n return {\n name: name,\n _id: id ?? v4(),\n type: TaskLinkType.Group,\n tags: !tag ? null : [tag],\n assignee: assignee,\n children: [],\n currentGroupBy: currentGroupBy\n } as NestedTask;\n }\n\n private static filterAndSortChildInParents(parents: NestedTask[], taskViewOptions: TaskViewOptions) {\n if (!parents?.length) {\n return [];\n }\n\n let sortField = TaskLinkType[taskViewOptions.sortBy];\n if (taskViewOptions.sortBy === TaskGroupBy.None) {\n sortField = 'sortOrder';\n }\n\n for (const parent of parents) {\n if (!parent?.children) {\n continue;\n }\n\n // sort work orders under check in / check out group when group by phase\n if ((parent.name === DailyPhaseName.CheckIn || parent.name === DailyPhaseName.CheckOut) && parent.currentGroupBy === TaskGroupBy.Phase) {\n const sortedWorkOrders = Enumerable\n .from(parent.children)\n .orderBy(e => e.sortOrder)\n .toArray();\n\n parent.children = sortedWorkOrders;\n continue;\n }\n\n const tasks = parent.children;\n let enumerable = Enumerable.from(tasks)\n\n if (taskViewOptions.filterValue) {\n enumerable = enumerable.where(e => {\n const match = e.children?.length > 0 || this.filter(e, taskViewOptions);\n return match;\n });\n }\n\n // wont sort if the sort by is stage\n if (taskViewOptions.sortBy === TaskGroupBy.Stage) {\n parent.children = enumerable.toArray();\n continue;\n }\n\n if (taskViewOptions.sortOrder === 'asc') {\n parent.children = enumerable\n .orderBy(e => {\n const data = e.groupLinks[sortField]?.data ?? \"\";\n return data;\n }).toArray();\n continue;\n }\n\n parent.children = enumerable\n .orderByDescending(e => {\n const data = e.groupLinks[sortField]?.data ?? \"\";\n return data;\n }).toArray();\n }\n }\n\n private static sortByStage(parents: NestedTask[], taskViewOptions: TaskViewOptions): NestedTask[] {\n if (taskViewOptions.sortOrder === 'asc') {\n parents = Enumerable.from(parents)\n .orderBy(e => {\n if (e.type === TaskLinkType.WorkOrder) {\n // return e.name;\n return e.sortOrder;\n }\n\n return ' ';\n }).toArray();\n }\n else {\n parents = Enumerable.from(parents)\n .orderByDescending(e => {\n if (e.type === TaskLinkType.WorkOrder) {\n // return e.name;\n return e.sortOrder;\n }\n\n return ' ';\n }).toArray();\n }\n\n return parents;\n }\n\n private static sortBySortOrder(parents: NestedTask[], taskViewOptions: TaskViewOptions): NestedTask[] {\n if (taskViewOptions.sortOrder === 'asc') {\n parents = Enumerable\n .from(parents)\n .orderBy(e => e.sortOrder)\n .toArray();\n }\n else {\n parents = Enumerable\n .from(parents)\n .orderByDescending(e => e.sortOrder)\n .toArray();\n }\n\n return parents;\n }\n\n private static filter(task: NestedTask, taskViewOptions: TaskViewOptions): boolean {\n if (!taskViewOptions.filterValue) {\n return true;\n }\n\n const filterValue = taskViewOptions.filterValue;\n const result: boolean[] = [];\n for (const field in filterValue) {\n if (!filterValue[field]) {\n result.push(true);\n continue;\n }\n\n if (!task[field]) {\n result.push(false);\n }\n\n\n let match: boolean = true;\n switch (field) {\n case 'tags': {\n\n const arr = filterValue[field] as any[];\n if (arr.length === 0) {\n break;\n }\n\n const arrFieldValue = task[field] as LabelEntity[];\n match = arr.some(e => arrFieldValue.findIndex(l => l._id === e._id) > -1);\n result.push(match);\n break;\n }\n\n case 'assignee':\n case \"completedBy\": {\n const arr = filterValue[field] as any[];\n if (arr.length === 0) {\n break;\n }\n\n match = arr.some(e => e._id === task[field]?._id);\n result.push(match);\n break;\n }\n\n case \"completedOn\":\n case 'dueDate':\n\n const createdDateFilter = !!filterValue[field]\n ? FiltersRelativeDateUtility.getFilter(filterValue[field]) as any\n : null;\n\n if (createdDateFilter) {\n const dt = DateUtility.getDateTime(task[field], 'utc').toJSDate();\n const { $gte, $lte, $lt } = createdDateFilter;\n\n const isGTE = $gte\n ? $gte && dt >= $gte\n : true;\n\n const isLTE = $lte\n ? $lte && dt <= $lte\n : true;\n\n const isLT = $lt\n ? $lt && dt < $lt\n : true;\n\n match = isGTE && isLTE && isLT;\n }\n break;\n\n case \"daily\":\n case 'answered':\n match = task[field] === filterValue[field];\n break;\n\n case 'name':\n match = task.name?.includes(filterValue[field]);\n break;\n\n\n case \"status\":\n case 'target':\n case 'type': {\n const arr = filterValue[field] as any[];\n if (arr.length === 0) {\n break;\n }\n\n match = arr.some(e => e._id === task[field]);\n break;\n }\n }\n\n result.push(match);\n }\n\n return !result.some(e => !e);\n }\n}\n","import { DailyPhaseName, TaskLinkType, TaskPhaseName } from './task.enum';\nimport { LabelEntity, LabelType, LexoRank } from '../shared';\nimport * as Enumerable from 'linq';\nimport { Task } from './task';\nimport { Entity, TaskLinkEntity } from '..';\n\n// remove build crash\nexport const BeforePhase = { _id: '00000000-0000-0000-0000-000000000001', name: TaskPhaseName.Before, sortOrder: new LexoRank('1').toString(), type: TaskLinkType.Phase };\nexport const DuringPhase = { _id: '00000000-0000-0000-0000-000000000002', name: TaskPhaseName.During, sortOrder: new LexoRank('2').toString(), type: TaskLinkType.Phase };\nexport const AfterPhase = { _id: '00000000-0000-0000-0000-000000000003', name: TaskPhaseName.After, sortOrder: new LexoRank('3').toString(), type: TaskLinkType.Phase };\n\n\nexport const CheckInPhase = { _id: '00000000-0000-0000-0000-000000000100', name: DailyPhaseName.CheckIn, sortOrder: new LexoRank('1').decrement().toString(), type: TaskLinkType.Phase };\nexport const CheckOutPhase = { _id: '00000000-0000-0000-0000-000000000101', name: DailyPhaseName.CheckOut, sortOrder: new LexoRank('3').increment().toString(), type: TaskLinkType.Phase };\n\nexport function getNoTaskGroupLink(groupName: string) {\n return { _id: '00000000-0000-0000-0000-000000001000', name: groupName, sortOrder: new LexoRank('100001', '0').toString(), type: TaskLinkType.Group } as TaskLinkEntity;\n};\n\nexport function getEntityTaskLink(entity: Entity, type: TaskLinkType) {\n return { ...entity, sortOrder: new LexoRank('1').toString(), type } as TaskLinkEntity;\n};\n\n\nexport type HasTags = {\n tags?: LabelEntity[];\n}\n\nexport function insertPhaseTag(task: HasTags, phase: TaskPhaseName | string) {\n\n if (!phase)\n return task?.tags ?? [];\n\n const taskTags = task?.tags ?? [];\n const tags = phase\n ? [...taskTags, getPhaseTag(phase)]\n : taskTags;\n\n const safeTags = Enumerable\n .from(tags)\n .distinct(x => {\n return `${x._id}-${x.type}`;\n })\n .toArray();\n\n return safeTags;\n\n // return { _id: phase, name: phase, type: LabelType.Phase } as LabelEntity\n}\n\nexport function getPhaseTag(phase: string) {\n const phaseTag = { _id: phase, name: phase, type: LabelType.Phase } as LabelEntity;\n return phaseTag;\n}\n\nexport const JobTaskPhases = [\n CheckInPhase,\n BeforePhase,\n DuringPhase,\n AfterPhase,\n CheckOutPhase\n];\n\nexport class TaskUtility {\n\n public static getDefaultPhase(key: string) {\n return JobTaskPhases.find(x => x.name === key || x._id === key);\n }\n\n /// Need to update fallback values if integrate task within another module. e.g Opportunity\n public static getTaskLink(task: Partial): TaskLinkEntity {\n const linkGroups = Enumerable\n .from(task.links)\n .groupBy(x => x.type)\n .toDictionary(x => x.key(), x => x.firstOrDefault());\n\n const type = linkGroups.get(TaskLinkType.WorkOrder) ?? linkGroups.get(TaskLinkType.Job) ?? linkGroups.get(TaskLinkType.Opportunity);\n return type;\n }\n}","import { TaskGroupBy, TaskLinkType } from './task.enum';\n\nexport interface TaskViewOptions {\n groupBy: TaskGroupBy;\n sortBy: TaskGroupBy;\n sortOrder: 'asc' | 'desc';\n filterValue: any;\n entityName: TaskLinkType;\n showEmptyGroups?: boolean;\n\n /** #WBS-2956 Not sure what is for */\n options: {\n showEmptyGroups: boolean\n }\n}\n\nexport const defaultViewOptions: TaskViewOptions = {\n groupBy: TaskGroupBy.None,\n sortBy: TaskGroupBy.None,\n sortOrder: 'asc',\n filterValue: null,\n entityName: null,\n showEmptyGroups: false,\n\n /** #WBS-2956 Not sure what this for */\n options: {\n showEmptyGroups: false\n }\n}","import { TaskNode } from './task.node';\nimport { Entity } from '../entity';\nimport { TaskLinkEntity } from './task.props.type';\n\nimport * as Enumerable from 'linq';\nimport { TaskLinkType } from './task.enum';\nimport { DateUtility } from '../../utilities';\n\ninterface TaskLike extends Entity {\n parent?: TaskLinkEntity,\n daily?: boolean;\n instance?: boolean;\n createdAt?: Date;\n}\n\nexport class TaskNodeUtility {\n\n public static build(tasks: TaskLike[], dateFormat: string = 'dd/MM/yyyy', timezone = 'utc'): TaskNode[] {\n\n const parentMap = new Map();\n\n const parentIds = Enumerable\n .from(tasks)\n .where(e => !!e.parent)\n .select(e => e.parent)\n .distinct(e => e._id)\n .toArray();\n\n const itemsMap = Enumerable\n .from(tasks)\n .toDictionary(e => e._id, e => e);\n\n const rootParent = new Map();\n\n // create all the parents first\n parentIds\n .forEach(e => {\n\n const parent = this.createTaskModel(e);\n // the root parent won't here, it is the WO, JOb or Project....\n\n if (!itemsMap.contains(e._id)) {\n rootParent.set(e._id, parent);\n }\n\n parentMap.set(e._id, parent);\n });\n\n tasks.forEach(e => {\n const parent = parentMap.get(e.parent._id);\n\n if (e.daily && e.instance) {\n // We have an instance of a daily task\n const dateName = DateUtility.getDateTime(e.createdAt, timezone).toFormat(dateFormat);\n // const parentName = e.parent.name;;\n e.name = `${dateName}`;\n }\n\n //if it is a parent\n if (parentMap.has(e._id)) {\n // because the data in item has more detail. so replace the parent one with its detail\n const item = this.createTaskModel(e);\n parentMap.set(e._id, item);\n\n //get its parent and add it to its parent\n this.addChild(parent, parentMap.get(e._id));\n\n return;\n }\n\n this.addChild(parent, this.createTaskModel(e));\n })\n\n const nodes = Array.from(rootParent.values());\n return nodes;\n }\n\n private static createTaskModel(task: TaskLike): TaskNode {\n return {\n _id: task._id,\n name: task.name,\n taskData: task,\n children: [],\n } as TaskNode;\n }\n\n private static addChild(parent: TaskNode, child: TaskNode) {\n parent.children.push(child);\n\n // parent.children = Enumerable\n // .from(parent.children)\n // .orderBy(x => x.taskData?.sortOrder)\n // .toArray();\n\n if (parent.taskData?.type === TaskLinkType.Item) {\n parent.hasComplianceSubtask = Enumerable.from(parent.children).any(x => x.taskData.type === TaskLinkType.Compliance)\n }\n\n child.parent = { ...parent, children: [] };\n }\n\n}","export enum OpportunitySystemStage {\n Open = 'Open',\n Closed = 'Closed'\n}\n\nexport const OpportunitySystemStages = Object.values(OpportunitySystemStage);\n\nexport enum OpportunityStageSystemName {\n OpenNew = 'New',\n ClosedWon = 'Won',\n ClosedLost = 'Lost'\n}\n","\n\nimport { Entity } from '../entity';\nimport * as Enumerable from 'linq';\nimport { OpportunityStage } from '..';\nimport { FiltersNumberMethod, FiltersRelativeDateMethod } from '../../utilities';\n\nexport interface OpportunityViewLookups {\n timezones?: string[];\n\n // Job Filters\n tags?: Entity[];\n account?: Entity[];\n owner?: Entity[];\n jobType?: Entity[];\n source?: Entity[];\n stage?: OpportunityStage[];\n zones?: Entity[];\n company?: Entity[];\n}\n\nexport interface OpportunityViewFilters extends OpportunityViewLookups {\n\n _id?: string;\n\n total?: number;\n prepaymentOnly?: boolean;\n\n // Multi - Need to check data inside\n search?: string;\n\n amount?: FiltersNumberMethod;\n createdAt?: FiltersRelativeDateMethod;\n expectedClose?: FiltersRelativeDateMethod;\n lastActivityDate?: FiltersRelativeDateMethod;\n stageUpdatedAt?: FiltersRelativeDateMethod;\n\n}\n\nexport function effectiveOpportunityViewFilters(view: OpportunityViewFilters, refinements: OpportunityViewFilters) {\n\n const effective: { [k in keyof OpportunityViewFilters] } = {} as OpportunityViewFilters;\n const keys = Object.keys(new OpportunityViewFiltersClass())\n\n Enumerable.from(keys)\n .forEach(key => {\n\n const refinement = refinements[key];\n const viewValue = view[key];\n\n if (Array.isArray(refinement) || Array.isArray(viewValue)) {\n effective[key] = refinement?.length\n ? refinement\n : viewValue;\n } else {\n effective[key] = refinement\n ? refinement\n : viewValue;\n }\n\n if (effective[key] == null ||\n (typeof effective[key] !== 'boolean' && Object.keys(effective[key])?.length == 0)\n ) {\n delete effective[key];\n }\n });\n\n return effective;\n\n}\n\nexport function isOpportunityViewFiltersRefined(refinements: OpportunityViewFilters): boolean {\n\n if (!refinements) return false;\n if (refinements.search && (refinements.search !== null || refinements.search === '')) return true;\n\n if (refinements?.account?.length) return true;\n if (refinements?.owner?.length) return true;\n if (refinements?.jobType?.length) return true;\n if (refinements?.tags?.length) return true;\n if (refinements?.source?.length) return true;\n if (refinements?.stage?.length) return true;\n if (refinements?.zones?.length) return true;\n if (refinements?.company?.length) return true;\n if (refinements?.timezones?.length) return true;\n\n if (refinements.expectedClose) return true;\n if (refinements.lastActivityDate) return true;\n if (refinements.createdAt) return true;\n if (refinements.amount) return true;\n\n return false;\n}\n\n\nclass OpportunityViewFiltersClass implements Required {\n _id = null\n\n total: number;\n prepaymentOnly: boolean = false;\n\n // Multi - Need to check data inside\n search: string = null;\n\n timezones: string[] = [];\n\n // Job Filters\n tags: Entity[] = [];\n account: Entity[] = [];\n owner: Entity[] = [];\n jobType: Entity[] = [];\n source: Entity[] = [];\n zones: Entity[] = [];\n company: Entity[] = [];\n stage: OpportunityStage[] = [];\n\n amount: FiltersNumberMethod = null;\n expectedClose: FiltersRelativeDateMethod = null;\n createdAt: FiltersRelativeDateMethod = null;\n lastActivityDate: FiltersRelativeDateMethod = null;\n stageUpdatedAt: FiltersRelativeDateMethod = null;\n}\n","\n\nimport { Entity } from '../entity';\nimport { FiltersNumberMethod, FiltersRelativeDateMethod } from '../../utilities';\nimport { LeadSystemStage } from './lead.stage';\nimport * as Enumerable from 'linq';\n\nexport interface LeadViewLookups {\n // Lead Filters\n tags?: Entity[];\n owner?: Entity[];\n company?: Entity[];\n source?: Entity[];\n stage?: LeadSystemStage[];\n jobType?: Entity[];\n}\n\nexport interface LeadViewFilters extends LeadViewLookups {\n _id?: string;\n total?: number;\n\n // Multi - Need to check data inside\n search?: string;\n\n amount?: FiltersNumberMethod;\n createdAt?: FiltersRelativeDateMethod;\n expectedClose?: FiltersRelativeDateMethod;\n lastActivity?: FiltersRelativeDateMethod;\n\n}\n\nexport function effectiveLeadViewFilters(view: LeadViewFilters, refinements: LeadViewFilters) {\n\n const effective: { [k in keyof LeadViewFilters] } = {} as LeadViewFilters;\n const keys = Object.keys(new LeadViewFiltersClass())\n\n Enumerable.from(keys)\n .forEach(key => {\n\n const refinement = refinements[key];\n const viewValue = view[key];\n\n if (Array.isArray(refinement) || Array.isArray(viewValue)) {\n effective[key] = refinement?.length\n ? refinement\n : viewValue;\n } else {\n effective[key] = refinement\n ? refinement\n : view[key];\n }\n\n if (effective[key] == null || Object.keys(effective[key])?.length == 0) {\n delete effective[key];\n }\n });\n\n return effective;\n\n}\n\nexport function isLeadViewFiltersRefined(refinements: LeadViewFilters): boolean {\n\n if (!refinements) return false;\n if (refinements.search && (refinements.search !== null || refinements.search === '')) return true;\n\n if (refinements?.owner?.length) return true;\n if (refinements?.tags?.length) return true;\n if (refinements?.company?.length) return true;\n if (refinements?.source?.length) return true;\n if (refinements?.stage?.length) return true;\n if (refinements?.jobType?.length) return true;\n\n if (refinements.expectedClose) return true;\n if (refinements.lastActivity) return true;\n if (refinements.createdAt) return true;\n if (refinements.amount) return true;\n\n return false;\n}\n\n\nclass LeadViewFiltersClass implements LeadViewFilters {\n _id = null;\n\n // Multi - Need to check data inside\n search?: string = null;\n\n // Job Filters\n tags?: Entity[] = [];\n company?: Entity[] = [];\n owner?: Entity[] = [];\n source?: Entity[] = [];\n stage?: LeadSystemStage[] = [];\n jobType?: Entity[] = [];\n\n amount?: FiltersNumberMethod = null;\n expectedClose?: FiltersRelativeDateMethod = null;\n createdAt?: FiltersRelativeDateMethod = null;\n lastActivity?: FiltersRelativeDateMethod = null;\n}\n","\nexport enum LeadSystemStage {\n\n /* default after creating */\n New = 'New',\n InProgress = 'In Progress',\n\n /* Qualified: indicates the possibility of converting to a customer */\n Qualified = 'Qualified',\n\n /* Indicates the lost of a lead */\n Disqualified = 'Disqualified'\n\n}\n\nexport const LeadSystemStages = Object.values(LeadSystemStage);\n\n\n\n// export interface LeadStage extends Entity {\n// system?: boolean; // This is determines if item can be deleted\n// systemStage: OpportunitySystemStage;\n// systemName: OpportunityStageSystemName | string;\n// description: string;\n// probability: number;\n// }","export interface DocumentThemeFinancialHeaderOptions {\n\n /* Show Job Number - displays the Job Number from the parent job */\n showJobNumber: boolean;\n\n /* Show Customer WO - displays the Customer WO from the parent job */\n // showCustomerWO: boolean;\n\n /* Show Site - displays the site from the parent Job */\n showSite: boolean;\n\n /* Show Reference - displays the reference */\n showReference: boolean;\n\n /* Allows overwriting the name quote useful for creating Estimates etc */\n entityName: string;\n}\n\n\nexport interface DocumentThemeFinancialItemOptions {\n /* \n Show Quantity - if false, no quantity will be displayed\n */\n showQuantity: boolean;\n\n /* \n Show Unit Price - if false, no unit price will be displayed \n */\n showUnitPrice: boolean;\n\n /* \n Show Tax - if false, no adjustments will be displayed.the adjustment will either be the percentage or dollar value\n */\n showTax: boolean;\n\n /*\n Show Total - if false, no line total will be displayed.If true, display the tax amount of the line and the total ex tax\n */\n showTotals: boolean;\n\n showLocation: boolean,\n showNotes: boolean,\n\n}\n\nexport interface DocumentThemeFinancialAppendixOptions {\n pageBreakBefore: boolean;\n showBillableItems: boolean;\n showActivities: boolean;\n showAttachments: boolean;\n showImagePreview: boolean;\n}\n\nexport interface DocumentThemeFinancialOptions {\n header: DocumentThemeFinancialHeaderOptions;\n items: DocumentThemeFinancialItemOptions;\n appendix: DocumentThemeFinancialAppendixOptions;\n}\n\nexport const defaultFinancialOptions = {\n header: {\n entityName: 'Sale Order',\n showJobNumber: true,\n showReference: true,\n showSite: true,\n },\n items: {\n showQuantity: true,\n showUnitPrice: true,\n showTax: true,\n showTotals: true,\n },\n appendix: {\n pageBreakBefore: true,\n showBillableItems: false,\n showActivities: false,\n showAttachments: false,\n showImagePreview: false\n }\n} as DocumentThemeFinancialOptions;","export interface DocumentThemeInvoiceHeaderOptions {\n\n /* Show Job Number - displays the Job Number from the parent job */\n showJobNumber: boolean;\n\n /* Show Customer WO - displays the Customer WO from the parent job */\n // showCustomerWO: boolean;\n\n /* Show Site - displays the site from the parent Job */\n showSite: boolean;\n\n /* Show Reference - displays the reference */\n showReference: boolean;\n\n /* Show Terms & Conditions - displays the terms & conditions section and the relevant text */\n showTerms: boolean;\n\n /* Show Notes - displays the notes */\n showNotes: boolean;\n\n // /* Show Owner Details - displays the owner, contact number and email address of the parent contact(e.g.opportunity owner) */\n // showOwnerDetails: boolean;\n\n /* Show Payments sections */\n showPayments: boolean;\n\n /* Allows overwriting the name quote useful for creating Estimates etc */\n entityName: string;\n\n}\n\n\nexport interface DocumentThemeInvoiceItemOptions {\n\n /* \n Show Quantity - if false, no quantity will be displayed\n */\n showQuantity: boolean;\n\n /* \n Show Unit Price - if false, no unit price will be displayed \n */\n showUnitPrice: boolean;\n\n /* \n Show Tax - if false, no adjustments will be displayed.the adjustment will either be the percentage or dollar value\n */\n showTax: boolean;\n\n\n /*\n Show Total - if false, no line total will be displayed.If true, display the tax amount of the line and the total ex tax\n */\n showTotals: boolean;\n\n /* Show Zero Price Items*/\n showZeroPrice: boolean;\n\n showLocation: boolean,\n showNotes: boolean,\n showStatus: boolean\n\n}\n\nexport interface DocumentThemeInvoiceAppendixOptions {\n pageBreakBefore: boolean;\n showBillableItems: boolean;\n showActivities: boolean;\n showAttachments: boolean;\n showImagePreview: boolean;\n}\n\nexport interface DocumentThemeInvoiceOptions {\n header: DocumentThemeInvoiceHeaderOptions;\n items: DocumentThemeInvoiceItemOptions;\n appendix: DocumentThemeInvoiceAppendixOptions;\n}\n\nexport const defaultInvoiceOptions = {\n header: {\n entityName: 'Tax Invoice',\n showJobNumber: true,\n showReference: true,\n showTerms: true,\n showSite: true,\n showNotes: true,\n showPayments: true,\n // showOwnerDetails: true\n },\n items: {\n showQuantity: true,\n showUnitPrice: true,\n showTax: true,\n showTotals: true,\n showZeroPrice: true\n },\n appendix: {\n pageBreakBefore: true,\n showBillableItems: false,\n showActivities: false,\n showAttachments: false,\n showImagePreview: false\n }\n} as DocumentThemeInvoiceOptions;\n\nexport const defaultBillOptions = {\n ...defaultInvoiceOptions,\n header: {\n ...defaultInvoiceOptions.header,\n entityName: 'Recipient Created Tax Invoice',\n }\n} as DocumentThemeInvoiceOptions;","export interface DocumentThemeQuoteHeaderOptions {\n\n /* Show Contact - displays the contact from the parent entity(e.g.opportunity contact) */\n showContact: boolean;\n\n /* Show Site - displays the site from the parent entity (e.g. opportunity site) */\n showSite: boolean;\n\n /* Show Description - displays the quote description */\n showDescription: boolean;\n\n /* Show Terms & Conditions - displays the terms & conditions section and the relevant text */\n showTerms: boolean;\n\n /* Show Owner Details - displays the owner, contact number and email address of the parent contact(e.g.opportunity owner) */\n showOwnerDetails: boolean;\n\n /* Allows overwriting the name quote useful for creating Estimates etc */\n entityName: string;\n\n showCustomerReference: boolean;\n\n showPO: boolean;\n}\n\nexport interface DocumentThemeQuoteSectionOptions {\n\n /* \n Show Sections\n -- if false, all options below these are also set to false and are not editable.If this is false, we only send across a single line with the total of the entire quote.There will be no lines, it will just be the footer totals(e.g.sub total, tax, total)\n -- if true, sections are sent across as a table, with their name as their description, in the order that they are in the quote.\n */\n show: boolean;\n\n /*\n Show Section Totals\n -- if on, display a section sub - total after each section, incl.a tax value for the section and an amount ex - tax\n */\n showTotals: boolean;\n\n /* \n Show Section Items\n -- if on, the items under a section will be visible under each section\n -- if false, the items under a section will not be displayed and a single item will be sent across with the section\n */\n showItems: boolean;\n\n /* \n Show Section Description\n -- if on, the description under a section will be visible under each section\n -- if false, the description under a section will not be displayed.\n */\n showDescription: boolean;\n}\n\nexport interface DocumentThemeQuoteItemOptions {\n\n /* \n Show Quantity - if false, no quantity will be displayed\n */\n showQuantity: boolean;\n\n /* \n Show Unit Price - if false, no unit price will be displayed \n */\n showUnitPrice: boolean;\n\n /* \n Show Adjustments - if false, no adjustments will be displayed.the adjustment will either be the percentage or dollar value\n */\n showAdjustments: boolean;\n\n /*\n Show Total - if false, no line total will be displayed.If true, display the tax amount of the line and the total ex tax\n */\n showTotals: boolean;\n\n showLongDescription: boolean;\n\n}\n\nexport interface DocumentThemeQuoteOptions {\n\n header: DocumentThemeQuoteHeaderOptions;\n sections: DocumentThemeQuoteSectionOptions;\n items: DocumentThemeQuoteItemOptions;\n}\n\nexport const defaultQuoteOptions = {\n header: {\n entityName: 'Quote',\n showContact: true,\n showSite: true,\n showDescription: true,\n showTerms: true,\n showOwnerDetails: true,\n showCustomerReference: true,\n showPO: true\n },\n sections: {\n show: true,\n showTotals: true,\n showItems: true,\n showDescription: false,\n },\n items: {\n showQuantity: true,\n showUnitPrice: true,\n showAdjustments: true,\n showTotals: true,\n showLongDescription: false\n }\n} as DocumentThemeQuoteOptions;","export enum PageSize {\n A4 = 'a4',\n Letter = 'letter',\n Legal = 'legal'\n}\n\nexport enum PageOrientation {\n Portrait = 'Portrait',\n Landscape = 'Landscape',\n}\n\nexport enum ThemeTemplateMode {\n Default = 'Default',\n Word = 'Word',\n Html = 'Html',\n}\n","import { Entity, EntityLink } from '../entity';\nimport { ActivityEntityName } from '../shared';\nimport { defaultFinancialOptions } from './document.theme.financial.options';\nimport { defaultBillOptions, defaultInvoiceOptions } from './document.theme.invoice.options';\nimport { defaultQuoteOptions } from './document.theme.quote.options';\nimport { PageOrientation, PageSize, ThemeTemplateMode } from './enums';\n\nexport interface DocumentTheme extends Entity {\n entity: ActivityEntityName;\n isDefault: boolean;\n options: T;\n\n templateMode: ThemeTemplateMode;\n templateContent: any;\n templatePath: string;\n\n pageSize: PageSize;\n pageOrientation: PageOrientation;\n\n copyId?: string;\n inUse?: boolean;\n\n //scope\n companies?: Entity[];\n jobTypes?: Entity[];\n workCategories?: Entity[];\n}\n\nexport type DocumentThemeAny = DocumentTheme;\n\nexport const DocumentThemeEntities = [\n { _id: ActivityEntityName.Bill.toLowerCase(), name: 'Bills' } as Entity,\n { _id: ActivityEntityName.Invoice.toLowerCase(), name: 'Invoices' } as Entity,\n { _id: ActivityEntityName.Quote.toLowerCase(), name: 'Quotes' } as Entity,\n { _id: ActivityEntityName.SaleOrder.toLowerCase(), name: 'Sales Order' } as Entity,\n { _id: ActivityEntityName.PurchaseOrder.toLowerCase(), name: 'Purchase Order' } as Entity,\n { _id: ActivityEntityName.PrepaymentInvoice.toLowerCase(), name: 'Prepayment - Customer' } as Entity,\n { _id: ActivityEntityName.PrepaymentSupplier.toLowerCase(), name: 'Prepayment - Supplier' } as Entity,\n { _id: ActivityEntityName.CreditNote.toLowerCase(), name: 'Credit Note - Customer' } as Entity,\n { _id: ActivityEntityName.CreditNoteSupplier.toLowerCase(), name: 'Credit Note - Supplier' } as Entity,\n { _id: ActivityEntityName.WorkOrder.toLowerCase(), name: 'Stage' } as Entity,\n { _id: ActivityEntityName.WorkOrderDispatch.toLowerCase(), name: 'Stage Work Order' } as Entity,\n { _id: ActivityEntityName.Job.toLowerCase(), name: 'Job' } as Entity,\n]\n\nexport const defaultDocumentTheme = {\n _id: null,\n active: true,\n templateMode: ThemeTemplateMode.Default,\n pageSize: PageSize.A4,\n pageOrientation: PageOrientation.Portrait\n}\n\nexport const defaultDocumentThemes = {\n [ActivityEntityName.Quote.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.Quote,\n options: defaultQuoteOptions\n },\n [ActivityEntityName.Invoice.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.Invoice,\n options: defaultInvoiceOptions\n },\n [ActivityEntityName.Bill.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.Bill,\n options: defaultBillOptions\n },\n [ActivityEntityName.SaleOrder.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.SaleOrder,\n options: defaultFinancialOptions\n },\n [ActivityEntityName.Job.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.Job,\n },\n [ActivityEntityName.WorkOrder.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.WorkOrder,\n },\n [ActivityEntityName.WorkOrderDispatch.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.WorkOrderDispatch,\n },\n [ActivityEntityName.PurchaseOrder.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.PurchaseOrder,\n },\n [ActivityEntityName.PrepaymentInvoice.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.PrepaymentInvoice,\n },\n [ActivityEntityName.PrepaymentSupplier.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.PrepaymentSupplier,\n },\n [ActivityEntityName.CreditNote.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.CreditNote,\n },\n [ActivityEntityName.CreditNoteSupplier.toLocaleLowerCase()]: {\n ...defaultDocumentTheme,\n entity: ActivityEntityName.CreditNoteSupplier,\n }\n\n}\n\nexport interface DocumentThemeScopeRequest {\n companyIds: string[];\n jobTypes: string[];\n workCategories: string[];\n entityLink?: EntityLink;\n entities: ActivityEntityName[];\n}","\nexport enum AlignType {\n Left = 'Left',\n Center = 'Center',\n Right = 'Right',\n}\n\nexport enum InputStyleType {\n Default = 'Default',\n Linear = 'Linear',\n Round = 'Round',\n Sharp = 'Sharp'\n}\n\nexport enum AfterSubmitType {\n Thank,\n Redirect\n}","import { ActivityEntityName, Attachment, AuditDetails, Entity } from '..';\nimport { AfterSubmitType, AlignType, InputStyleType } from './enums';\nimport { MetadataEntityFieldData } from '../../metadata';\n\nexport interface EntityForm extends Entity, AuditDetails {\n\n description?: string;\n entity: ActivityEntityName;\n\n showLogo?: boolean;\n logoSource?: Entity;\n logo?: Attachment;\n\n showTitle?: boolean;\n title?: string;\n\n afterSubmit: AfterSubmitType;\n redirectUrl?: string;\n thankMessage?: string;\n\n options: string[]; // path\n optionsOverride?: EntityOptionOverride;\n defaultValue?: any; // { [path: string]: any}\n\n style: EntityStyleOption;\n\n copyId?: string;\n\n\n}\n\nexport interface EntityFieldOption extends MetadataEntityFieldData {\n\n description?: string;\n placeholder?: string;\n defaultValue?: any;\n\n}\n\n\n\nexport interface EntityStyleOption {\n inputStyle: InputStyleType;\n\n textFont: string;\n textSize: string;\n\n titleFontSize: string;\n\n buttonStyle: EntityButtonStyle;\n}\n\n\nexport interface EntityButtonStyle {\n label?: string;\n labelColor?: string;\n backgroundColor?: string;\n align?: AlignType;\n}\n\n\nexport type EntityOptionOverride = { [path: string]: Partial }\n\n/*== DEFAULT VALUE ==*/\n\nexport const defaultSubmitButtonStyle: EntityButtonStyle = {\n label: 'Submit',\n labelColor: '#FFF',\n backgroundColor: '#4F92E1',\n align: AlignType.Center,\n}\n\nexport const defaultStyle: EntityStyleOption = {\n inputStyle: InputStyleType.Default,\n textFont: 'inter',\n textSize: '8pt',\n titleFontSize: '12pt',\n buttonStyle: defaultSubmitButtonStyle,\n}\n\nexport const defaultEntityForm: Partial = {\n _id: null,\n active: true,\n options: undefined,\n style: defaultStyle,\n\n afterSubmit: AfterSubmitType.Thank,\n thankMessage: 'Thank you for submitting the form.',\n}\n\nexport const defaultEntityForms: { [key: string]: Partial } = {\n [ActivityEntityName.Lead.toLocaleLowerCase()]: {\n ...defaultEntityForm,\n entity: ActivityEntityName.Lead,\n },\n}","export enum ProjectSystemStatus {\n Open = 'Open',\n Closed = 'Closed'\n}\n\nexport const ProjectSystemStatues = Object.values(ProjectSystemStatus);\n\nexport enum ProjectSystemStatusName {\n Open = 'Open',\n Closed = 'Closed',\n}\n","\nimport { Entity } from '../entity';\nimport * as Enumerable from 'linq';\nimport { ProjectStatus } from './project.status';\nimport { FiltersRelativeDateMethod } from '../../utilities';\n\nexport interface ProjectViewLookups {\n\n tags?: Entity[];\n account?: Entity[];\n owner?: Entity[];\n type?: Entity[];\n status?: ProjectStatus[];\n}\n\nexport interface ProjectViewFilters extends ProjectViewLookups {\n\n _id?: string;\n\n total?: number;\n\n // Multi - Need to check data inside\n search?: string;\n\n start?: FiltersRelativeDateMethod;\n end?: FiltersRelativeDateMethod;\n\n}\n\nexport function effectiveProjectViewFilters(view: ProjectViewFilters, refinements: ProjectViewFilters) {\n\n const effective: { [k in keyof ProjectViewFilters] } = {} as ProjectViewFilters;\n const keys = Object.keys(new ProjectViewFiltersClass())\n\n Enumerable.from(keys)\n .forEach(key => {\n\n const refinement = refinements[key];\n const viewValue = view[key];\n\n if (Array.isArray(refinement) || Array.isArray(viewValue)) {\n effective[key] = refinement?.length\n ? refinement\n : viewValue;\n } else {\n effective[key] = refinement\n ? refinement\n : view[key];\n }\n\n if (effective[key] == null || Object.keys(effective[key])?.length == 0) {\n delete effective[key];\n }\n });\n\n return effective;\n\n}\n\nexport function isProjectViewFiltersRefined(refinements: ProjectViewFilters): boolean {\n\n if (!refinements) return false;\n if (refinements.search && (refinements.search !== null || refinements.search === '')) return true;\n\n if (refinements?.account?.length) return true;\n if (refinements?.owner?.length) return true;\n if (refinements?.type?.length) return true;\n if (refinements?.tags?.length) return true;\n if (refinements?.status?.length) return true;\n\n if (refinements.start) return true;\n if (refinements.end) return true;\n\n return false;\n}\n\n\nclass ProjectViewFiltersClass implements ProjectViewFilters {\n _id = null\n\n // Multi - Need to check data inside\n search?: string = null;\n\n // Job Filters\n tags?: Entity[] = [];\n account?: Entity[] = [];\n owner?: Entity[] = [];\n type?: Entity[] = [];\n source?: Entity[] = [];\n status?: ProjectStatus[] = [];\n\n start?: FiltersRelativeDateMethod = null;\n end?: FiltersRelativeDateMethod = null;\n}\n","import { Entity } from '../entity';\nimport { ActivityEntityName, ActivitySource, Lex, LexoRank, } from '../shared';\nimport { Source } from '../../enums';\nimport { v4 } from 'uuid';\n\nexport enum JobSharingPolicySource {\n\n /* These are items from the client portal */\n Customer = 'Customer',\n\n /* These are items from the contractor portal and field app */\n Field = 'Field',\n\n /* These are items from the Tenant and Manager App */\n Office = 'Office',\n\n /* These are items that are not known - Pro Mode*/\n Unknown = 'Unknown'\n}\n\nexport interface JobSharingPolicyConditions {\n _id?: string;\n entity: ActivityEntityName;\n source: JobSharingPolicySource,\n customers: Entity[];\n tags: Entity[];\n}\n\nexport interface JobSharingPolicyActions {\n _id?: string;\n shareWithField: boolean;\n shareWithCustomer: boolean;\n markSensitive: boolean;\n}\n\nexport interface JobSharingPolicy extends Entity {\n name: string;\n conditions: JobSharingPolicyConditions;\n actions: JobSharingPolicyActions;\n sortOrder: Lex;\n}\n\nexport const JobSharingPolicySources = Object.keys(JobSharingPolicySource).filter(x => x !== JobSharingPolicySource.Unknown);\n\nexport const toJobSharingPolicySource = (source: Source | ActivitySource): JobSharingPolicySource => {\n\n switch (source) {\n\n case Source.ClientPortal:\n case ActivitySource.ClientPortal:\n return JobSharingPolicySource.Customer;\n\n case Source.ContractorPortal:\n case Source.Mobile:\n case Source.Field:\n case ActivitySource.ContractorPortal:\n case ActivitySource.Mobile:\n return JobSharingPolicySource.Field;\n\n case Source.Import:\n case Source.Manager:\n case Source.Web:\n case ActivitySource.Tenant:\n return JobSharingPolicySource.Office;\n\n default:\n return JobSharingPolicySource.Office;\n }\n}\n\nexport const notSharedPolicyAction = () => {\n return {\n _id: v4(),\n shareWithCustomer: false,\n shareWithField: false,\n markSensitive: false\n } as JobSharingPolicyActions;\n}\n\nexport const defaultSharingPolicies: JobSharingPolicy[] = [\n Object.freeze({\n _id: '0',\n active: true,\n name: 'Default Customer Sharing',\n sortOrder: LexoRank.first(),\n conditions: {\n source: JobSharingPolicySource.Customer,\n customers: [],\n entity: null,\n tags: [],\n },\n actions: {\n shareWithCustomer: true,\n shareWithField: false,\n markSensitive: false,\n }\n }),\n Object.freeze({\n _id: '1',\n active: true,\n name: 'Default Field Sharing',\n sortOrder: LexoRank.first(),\n conditions: {\n source: JobSharingPolicySource.Field,\n customers: [],\n entity: null,\n tags: [],\n },\n actions: {\n shareWithCustomer: false,\n shareWithField: true,\n markSensitive: false,\n }\n })\n];","import { EmailContactEntity } from '../contact';\nimport { Entity } from '../entity';\n\nexport enum PolicyOptionVisibility {\n Disabled = 'Disabled',\n Required = 'Required',\n Optional = 'Optional'\n}\n\nexport interface PolicyNotification {\n _id: string;\n active: boolean;\n type: T,\n email: boolean;\n emailTo: EmailContactEntity[];\n emailMessage: string;\n emailSubject: string;\n sms: boolean;\n smsFrom: string;\n smsTo: string[];\n smsMessage: string;\n}\n\n\nexport interface Policy extends Entity {\n _id: string;\n isDefault: boolean;\n __v?: number;\n createdBy: Entity;\n updatedBy: Entity;\n}\n\nexport const defaultPolicyNotification: PolicyNotification = {\n _id: null,\n active: true,\n type: null,\n email: true,\n emailTo: [],\n emailMessage: '',\n emailSubject: '',\n sms: false,\n smsFrom: '',\n smsTo: [],\n smsMessage: '',\n}\n","var util;\n(function (util) {\n util.assertEqual = val => val;\n function assertIs(_arg) {}\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = items => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = obj => {\n const validKeys = util.objectKeys(obj).filter(k => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = obj => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? obj => Object.keys(obj) // eslint-disable-line ban/ban\n : object => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item)) return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\" ? val => Number.isInteger(val) // eslint-disable-line ban/ban\n : val => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map(val => typeof val === \"string\" ? `'${val}'` : val).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil = /*#__PURE__*/function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second // second overwrites first\n };\n };\n return objectUtil;\n}(objectUtil || {});\nconst ZodParsedType = util.arrayToEnum([\"string\", \"nan\", \"number\", \"integer\", \"float\", \"boolean\", \"date\", \"bigint\", \"symbol\", \"function\", \"undefined\", \"null\", \"array\", \"object\", \"unknown\", \"promise\", \"void\", \"never\", \"map\", \"set\"]);\nconst getParsedType = data => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\nconst ZodIssueCode = util.arrayToEnum([\"invalid_type\", \"invalid_literal\", \"custom\", \"invalid_union\", \"invalid_union_discriminator\", \"invalid_enum_value\", \"unrecognized_keys\", \"invalid_arguments\", \"invalid_return_type\", \"invalid_date\", \"invalid_string\", \"too_small\", \"too_big\", \"invalid_intersection_types\", \"not_multiple_of\", \"not_finite\"]);\nconst quotelessJson = obj => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nlet ZodError = /*#__PURE__*/(() => {\n class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = sub => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n } else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper || function (issue) {\n return issue.message;\n };\n const fieldErrors = {\n _errors: []\n };\n const processError = error => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n } else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n } else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n } else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n } else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || {\n _errors: []\n };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n } else {\n curr[el] = curr[el] || {\n _errors: []\n };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = issue => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n } else {\n formErrors.push(mapper(sub));\n }\n }\n return {\n formErrors,\n fieldErrors\n };\n }\n get formErrors() {\n return this.flatten();\n }\n }\n ZodError.create = issues => {\n const error = new ZodError(issues);\n return error;\n };\n return ZodError;\n})();\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n } else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n } else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n } else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n } else {\n util.assertNever(issue.validation);\n }\n } else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n } else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\") message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;else if (issue.type === \"string\") message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;else if (issue.type === \"number\") message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;else if (issue.type === \"date\") message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;else message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\") message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;else if (issue.type === \"string\") message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;else if (issue.type === \"number\") message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;else if (issue.type === \"bigint\") message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;else if (issue.type === \"date\") message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;else message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return {\n message\n };\n};\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\nconst makeIssue = params => {\n const {\n data,\n path,\n errorMaps,\n issueData\n } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps.filter(m => !!m).slice().reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, {\n data,\n defaultError: errorMessage\n }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap,\n // contextual error map is first priority\n ctx.schemaErrorMap,\n // then schema-bound map if available\n overrideMap,\n // then global override map\n overrideMap === errorMap ? undefined : errorMap // then global default map\n ].filter(x => !!x)\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\") this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\") this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\") return INVALID;\n if (s.status === \"dirty\") status.dirty();\n arrayValue.push(s.value);\n }\n return {\n status: status.value,\n value: arrayValue\n };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const {\n key,\n value\n } = pair;\n if (key.status === \"aborted\") return INVALID;\n if (value.status === \"aborted\") return INVALID;\n if (key.status === \"dirty\") status.dirty();\n if (value.status === \"dirty\") status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return {\n status: status.value,\n value: finalObject\n };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\"\n});\nconst DIRTY = value => ({\n status: \"dirty\",\n value\n});\nconst OK = value => ({\n status: \"valid\",\n value\n});\nconst isAborted = x => x.status === \"aborted\";\nconst isDirty = x => x.status === \"dirty\";\nconst isValid = x => x.status === \"valid\";\nconst isAsync = x => typeof Promise !== \"undefined\" && x instanceof Promise;\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n}\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\nvar errorUtil = /*#__PURE__*/function (errorUtil) {\n errorUtil.errToObj = message => typeof message === \"string\" ? {\n message\n } : message || {};\n errorUtil.toString = message => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n return errorUtil;\n}(errorUtil || {});\nvar _ZodEnum_cache, _ZodNativeEnum_cache;\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n } else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return {\n success: true,\n data: result.value\n };\n } else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error) return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n }\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params) return {};\n const {\n errorMap,\n invalid_type_error,\n required_error,\n description\n } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap) return {\n errorMap: errorMap,\n description\n };\n const customMap = (iss, ctx) => {\n var _a, _b;\n const {\n message\n } = params;\n if (iss.code === \"invalid_enum_value\") {\n return {\n message: message !== null && message !== void 0 ? message : ctx.defaultError\n };\n }\n if (typeof ctx.data === \"undefined\") {\n return {\n message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError\n };\n }\n if (iss.code !== \"invalid_type\") return {\n message: ctx.defaultError\n };\n return {\n message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError\n };\n };\n return {\n errorMap: customMap,\n description\n };\n}\nclass ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent\n };\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent\n }\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success) return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data)\n };\n const result = this._parseSync({\n data,\n path: ctx.path,\n parent: ctx\n });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n var _a, _b;\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data)\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({\n data,\n path: [],\n parent: ctx\n });\n return isValid(result) ? {\n value: result.value\n } : {\n issues: ctx.common.issues\n };\n } catch (err) {\n if ((_b = (_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true\n };\n }\n }\n return this._parseAsync({\n data,\n path: [],\n parent: ctx\n }).then(result => isValid(result) ? {\n value: result.value\n } : {\n issues: ctx.common.issues\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success) return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data)\n };\n const maybeAsyncResult = this._parse({\n data,\n path: ctx.path,\n parent: ctx\n });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = val => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return {\n message\n };\n } else if (typeof message === \"function\") {\n return message(val);\n } else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val)\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then(data => {\n if (!data) {\n setError();\n return false;\n } else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n } else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n } else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: {\n type: \"refinement\",\n refinement\n }\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: data => this[\"~validate\"](data)\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: {\n type: \"transform\",\n transform\n }\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def)\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n // let regex = `\\\\d{2}:\\\\d{2}:\\\\d{2}`;\n let regex = `([01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d`;\n if (args.precision) {\n regex = `${regex}\\\\.\\\\d{${args.precision}}`;\n } else if (args.precision == null) {\n regex = `${regex}(\\\\.\\\\d+)?`;\n }\n return regex;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset) opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt)) return false;\n try {\n const [header] = jwt.split(\".\");\n // Convert base64url to base64\n const base64 = header.replace(/-/g, \"+\").replace(/_/g, \"/\").padEnd(header.length + (4 - header.length % 4) % 4, \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null) return false;\n if (!decoded.typ || !decoded.alg) return false;\n if (alg && decoded.alg !== alg) return false;\n return true;\n } catch (_a) {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nlet ZodString = /*#__PURE__*/(() => {\n class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message\n });\n } else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message\n });\n }\n status.dirty();\n }\n } else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n } catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n } else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: {\n includes: check.value,\n position: check.position\n },\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n } else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n } else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: {\n startsWith: check.value\n },\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: {\n endsWith: check.value\n },\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: input.data\n };\n }\n _regex(regex, validation, message) {\n return this.refinement(data => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message)\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check]\n });\n }\n email(message) {\n return this._addCheck({\n kind: \"email\",\n ...errorUtil.errToObj(message)\n });\n }\n url(message) {\n return this._addCheck({\n kind: \"url\",\n ...errorUtil.errToObj(message)\n });\n }\n emoji(message) {\n return this._addCheck({\n kind: \"emoji\",\n ...errorUtil.errToObj(message)\n });\n }\n uuid(message) {\n return this._addCheck({\n kind: \"uuid\",\n ...errorUtil.errToObj(message)\n });\n }\n nanoid(message) {\n return this._addCheck({\n kind: \"nanoid\",\n ...errorUtil.errToObj(message)\n });\n }\n cuid(message) {\n return this._addCheck({\n kind: \"cuid\",\n ...errorUtil.errToObj(message)\n });\n }\n cuid2(message) {\n return this._addCheck({\n kind: \"cuid2\",\n ...errorUtil.errToObj(message)\n });\n }\n ulid(message) {\n return this._addCheck({\n kind: \"ulid\",\n ...errorUtil.errToObj(message)\n });\n }\n base64(message) {\n return this._addCheck({\n kind: \"base64\",\n ...errorUtil.errToObj(message)\n });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message)\n });\n }\n jwt(options) {\n return this._addCheck({\n kind: \"jwt\",\n ...errorUtil.errToObj(options)\n });\n }\n ip(options) {\n return this._addCheck({\n kind: \"ip\",\n ...errorUtil.errToObj(options)\n });\n }\n cidr(options) {\n return this._addCheck({\n kind: \"cidr\",\n ...errorUtil.errToObj(options)\n });\n }\n datetime(options) {\n var _a, _b;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)\n });\n }\n date(message) {\n return this._addCheck({\n kind: \"date\",\n message\n });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)\n });\n }\n duration(message) {\n return this._addCheck({\n kind: \"duration\",\n ...errorUtil.errToObj(message)\n });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message)\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message)\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message)\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message)\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message)\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message)\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, {\n kind: \"trim\"\n }]\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, {\n kind: \"toLowerCase\"\n }]\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, {\n kind: \"toUpperCase\"\n }]\n });\n }\n get isDatetime() {\n return !!this._def.checks.find(ch => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find(ch => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find(ch => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find(ch => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find(ch => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find(ch => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find(ch => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find(ch => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find(ch => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find(ch => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find(ch => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find(ch => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find(ch => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find(ch => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find(ch => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find(ch => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return max;\n }\n }\n ZodString.create = params => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params)\n });\n };\n // https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\n return ZodString;\n})();\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return valInt % stepInt / Math.pow(10, decCount);\n}\nlet ZodNumber = /*#__PURE__*/(() => {\n class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message\n });\n status.dirty();\n }\n } else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: input.data\n };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message)\n }]\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check]\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message)\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message)\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message)\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message)\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message)\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message)\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message)\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message)\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message)\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find(ch => ch.kind === \"int\" || ch.kind === \"multipleOf\" && util.isInteger(ch.value));\n }\n get isFinite() {\n let max = null,\n min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n } else if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n } else if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n }\n ZodNumber.create = params => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params)\n });\n };\n return ZodNumber;\n})();\nlet ZodBigInt = /*#__PURE__*/(() => {\n class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n } catch (_a) {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message\n });\n status.dirty();\n }\n } else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: input.data\n };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message)\n }]\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check]\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message)\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message)\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message)\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message)\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message)\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return max;\n }\n }\n ZodBigInt.create = params => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params)\n });\n };\n return ZodBigInt;\n})();\nlet ZodBoolean = /*#__PURE__*/(() => {\n class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType\n });\n return INVALID;\n }\n return OK(input.data);\n }\n }\n ZodBoolean.create = params => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params)\n });\n };\n return ZodBoolean;\n})();\nlet ZodDate = /*#__PURE__*/(() => {\n class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\"\n });\n status.dirty();\n }\n } else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\"\n });\n status.dirty();\n }\n } else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime())\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check]\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message)\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message)\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n }\n ZodDate.create = params => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params)\n });\n };\n return ZodDate;\n})();\nlet ZodSymbol = /*#__PURE__*/(() => {\n class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType\n });\n return INVALID;\n }\n return OK(input.data);\n }\n }\n ZodSymbol.create = params => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params)\n });\n };\n return ZodSymbol;\n})();\nlet ZodUndefined = /*#__PURE__*/(() => {\n class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType\n });\n return INVALID;\n }\n return OK(input.data);\n }\n }\n ZodUndefined.create = params => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params)\n });\n };\n return ZodUndefined;\n})();\nlet ZodNull = /*#__PURE__*/(() => {\n class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType\n });\n return INVALID;\n }\n return OK(input.data);\n }\n }\n ZodNull.create = params => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params)\n });\n };\n return ZodNull;\n})();\nlet ZodAny = /*#__PURE__*/(() => {\n class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n }\n ZodAny.create = params => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params)\n });\n };\n return ZodAny;\n})();\nlet ZodUnknown = /*#__PURE__*/(() => {\n class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n }\n ZodUnknown.create = params => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params)\n });\n };\n return ZodUnknown;\n})();\nlet ZodNever = /*#__PURE__*/(() => {\n class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType\n });\n return INVALID;\n }\n }\n ZodNever.create = params => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params)\n });\n };\n return ZodNever;\n})();\nlet ZodVoid = /*#__PURE__*/(() => {\n class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType\n });\n return INVALID;\n }\n return OK(input.data);\n }\n }\n ZodVoid.create = params => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params)\n });\n };\n return ZodVoid;\n})();\nlet ZodArray = /*#__PURE__*/(() => {\n class ZodArray extends ZodType {\n _parse(input) {\n const {\n ctx,\n status\n } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: tooSmall ? def.exactLength.value : undefined,\n maximum: tooBig ? def.exactLength.value : undefined,\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then(result => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: {\n value: minLength,\n message: errorUtil.toString(message)\n }\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: {\n value: maxLength,\n message: errorUtil.toString(message)\n }\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: {\n value: len,\n message: errorUtil.toString(message)\n }\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n }\n ZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params)\n });\n };\n return ZodArray;\n})();\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape\n });\n } else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element)\n });\n } else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n } else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n } else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map(item => deepPartialify(item)));\n } else {\n return schema;\n }\n}\nlet ZodObject = /*#__PURE__*/(() => {\n class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null) return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return this._cached = {\n shape,\n keys\n };\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType\n });\n return INVALID;\n }\n const {\n status,\n ctx\n } = this._processInputParams(input);\n const {\n shape,\n keys: shapeKeys\n } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: {\n status: \"valid\",\n value: key\n },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: {\n status: \"valid\",\n value: key\n },\n value: {\n status: \"valid\",\n value: ctx.data[key]\n }\n });\n }\n } else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys\n });\n status.dirty();\n }\n } else if (unknownKeys === \"strip\") ;else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n } else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: {\n status: \"valid\",\n value: key\n },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve().then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet\n });\n }\n return syncPairs;\n }).then(syncPairs => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n } else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\") return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError\n };\n return {\n message: defaultError\n };\n }\n } : {})\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\"\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\"\n });\n }\n // const AugmentFactory =\n // (def: Def) =>\n // (\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation\n })\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape()\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({\n [key]: schema\n });\n }\n // merge(\n // merging: Incoming\n // ): //ZodObject = (merging) => {\n // ZodObject<\n // extendShape>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach(key => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach(key => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach(key => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n } else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach(key => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n } else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n }\n ZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params)\n });\n };\n ZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params)\n });\n };\n ZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params)\n });\n };\n return ZodObject;\n})();\nlet ZodUnion = /*#__PURE__*/(() => {\n class ZodUnion extends ZodType {\n _parse(input) {\n const {\n ctx\n } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map(result => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async option => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: []\n },\n parent: null\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx\n }),\n ctx: childCtx\n };\n })).then(handleResults);\n } else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: []\n },\n parent: null\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx\n });\n if (result.status === \"valid\") {\n return result;\n } else if (result.status === \"dirty\" && !dirty) {\n dirty = {\n result,\n ctx: childCtx\n };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map(issues => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n }\n ZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params)\n });\n };\n /////////////////////////////////////////////////////\n /////////////////////////////////////////////////////\n ////////// //////////\n ////////// ZodDiscriminatedUnion //////////\n ////////// //////////\n /////////////////////////////////////////////////////\n /////////////////////////////////////////////////////\n return ZodUnion;\n})();\nconst getDiscriminator = type => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n } else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n } else if (type instanceof ZodLiteral) {\n return [type.value];\n } else if (type instanceof ZodEnum) {\n return type.options;\n } else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n } else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n } else if (type instanceof ZodUndefined) {\n return [undefined];\n } else if (type instanceof ZodNull) {\n return [null];\n } else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n } else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n } else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n } else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n } else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n } else {\n return [];\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const {\n ctx\n } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator]\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n } else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params)\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return {\n valid: true,\n data: a\n };\n } else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter(key => bKeys.indexOf(key) !== -1);\n const newObj = {\n ...a,\n ...b\n };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false\n };\n }\n newObj[key] = sharedValue.data;\n }\n return {\n valid: true,\n data: newObj\n };\n } else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return {\n valid: false\n };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false\n };\n }\n newArray.push(sharedValue.data);\n }\n return {\n valid: true,\n data: newArray\n };\n } else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return {\n valid: true,\n data: a\n };\n } else {\n return {\n valid: false\n };\n }\n}\nlet ZodIntersection = /*#__PURE__*/(() => {\n class ZodIntersection extends ZodType {\n _parse(input) {\n const {\n status,\n ctx\n } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return {\n status: status.value,\n value: merged.data\n };\n };\n if (ctx.common.async) {\n return Promise.all([this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }), this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n })]).then(([left, right]) => handleParsed(left, right));\n } else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }));\n }\n }\n }\n ZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params)\n });\n };\n return ZodIntersection;\n})();\nlet ZodTuple = /*#__PURE__*/(() => {\n class ZodTuple extends ZodType {\n _parse(input) {\n const {\n status,\n ctx\n } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\"\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\"\n });\n status.dirty();\n }\n const items = [...ctx.data].map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema) return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n }).filter(x => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then(results => {\n return ParseStatus.mergeArray(status, results);\n });\n } else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest\n });\n }\n }\n ZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params)\n });\n };\n return ZodTuple;\n})();\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const {\n status,\n ctx\n } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n } else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third)\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second)\n });\n }\n}\nlet ZodMap = /*#__PURE__*/(() => {\n class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const {\n status,\n ctx\n } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"]))\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return {\n status: status.value,\n value: finalMap\n };\n });\n } else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return {\n status: status.value,\n value: finalMap\n };\n }\n }\n }\n ZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params)\n });\n };\n return ZodMap;\n})();\nlet ZodSet = /*#__PURE__*/(() => {\n class ZodSet extends ZodType {\n _parse(input) {\n const {\n status,\n ctx\n } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\") return INVALID;\n if (element.status === \"dirty\") status.dirty();\n parsedSet.add(element.value);\n }\n return {\n status: status.value,\n value: parsedSet\n };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then(elements => finalizeSet(elements));\n } else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: {\n value: minSize,\n message: errorUtil.toString(message)\n }\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: {\n value: maxSize,\n message: errorUtil.toString(message)\n }\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n }\n ZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params)\n });\n };\n return ZodSet;\n})();\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const {\n ctx\n } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), errorMap].filter(x => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error\n }\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), errorMap].filter(x => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error\n }\n });\n }\n const params = {\n errorMap: ctx.common.contextualErrorMap\n };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch(e => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type.parseAsync(result, params).catch(e => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n } else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create())\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: args ? args : ZodTuple.create([]).rest(ZodUnknown.create()),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params)\n });\n }\n}\nlet ZodLazy = /*#__PURE__*/(() => {\n class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const {\n ctx\n } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n }\n }\n ZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params)\n });\n };\n return ZodLazy;\n})();\nlet ZodLiteral = /*#__PURE__*/(() => {\n class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value\n });\n return INVALID;\n }\n return {\n status: \"valid\",\n value: input.data\n };\n }\n get value() {\n return this._def.value;\n }\n }\n ZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params)\n });\n };\n return ZodLiteral;\n})();\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params)\n });\n}\nclass ZodEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodEnum_cache.set(this, void 0);\n }\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\").has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter(opt => !values.includes(opt)), {\n ...this._def,\n ...newDef\n });\n }\n}\n_ZodEnum_cache = new WeakMap();\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodNativeEnum_cache.set(this, void 0);\n }\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\").has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\n_ZodNativeEnum_cache = new WeakMap();\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params)\n });\n};\nlet ZodPromise = /*#__PURE__*/(() => {\n class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const {\n ctx\n } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then(data => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap\n });\n }));\n }\n }\n ZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params)\n });\n };\n return ZodPromise;\n})();\nlet ZodEffects = /*#__PURE__*/(() => {\n class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects ? this._def.schema.sourceType() : this._def.schema;\n }\n _parse(input) {\n const {\n status,\n ctx\n } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: arg => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n } else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n }\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async processed => {\n if (status.value === \"aborted\") return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx\n });\n if (result.status === \"aborted\") return INVALID;\n if (result.status === \"dirty\") return DIRTY(result.value);\n if (status.value === \"dirty\") return DIRTY(result.value);\n return result;\n });\n } else {\n if (status.value === \"aborted\") return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx\n });\n if (result.status === \"aborted\") return INVALID;\n if (result.status === \"dirty\") return DIRTY(result.value);\n if (status.value === \"dirty\") return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = acc => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n if (inner.status === \"aborted\") return INVALID;\n if (inner.status === \"dirty\") status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return {\n status: status.value,\n value: inner.value\n };\n } else {\n return this._def.schema._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }).then(inner => {\n if (inner.status === \"aborted\") return INVALID;\n if (inner.status === \"dirty\") status.dirty();\n return executeRefinement(inner.value).then(() => {\n return {\n status: status.value,\n value: inner.value\n };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n if (!isValid(base)) return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return {\n status: status.value,\n value: result\n };\n } else {\n return this._def.schema._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }).then(base => {\n if (!isValid(base)) return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then(result => ({\n status: status.value,\n value: result\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n }\n ZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params)\n });\n };\n ZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: {\n type: \"preprocess\",\n transform: preprocess\n },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params)\n });\n };\n return ZodEffects;\n})();\nlet ZodOptional = /*#__PURE__*/(() => {\n class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n }\n ZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params)\n });\n };\n return ZodOptional;\n})();\nlet ZodNullable = /*#__PURE__*/(() => {\n class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n }\n ZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params)\n });\n };\n return ZodNullable;\n})();\nlet ZodDefault = /*#__PURE__*/(() => {\n class ZodDefault extends ZodType {\n _parse(input) {\n const {\n ctx\n } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n }\n ZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params)\n });\n };\n return ZodDefault;\n})();\nlet ZodCatch = /*#__PURE__*/(() => {\n class ZodCatch extends ZodType {\n _parse(input) {\n const {\n ctx\n } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: []\n }\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx\n }\n });\n if (isAsync(result)) {\n return result.then(result => {\n return {\n status: \"valid\",\n value: result.status === \"valid\" ? result.value : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data\n })\n };\n });\n } else {\n return {\n status: \"valid\",\n value: result.status === \"valid\" ? result.value : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data\n })\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n }\n ZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params)\n });\n };\n return ZodCatch;\n})();\nlet ZodNaN = /*#__PURE__*/(() => {\n class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType\n });\n return INVALID;\n }\n return {\n status: \"valid\",\n value: input.data\n };\n }\n }\n ZodNaN.create = params => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params)\n });\n };\n return ZodNaN;\n})();\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const {\n ctx\n } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const {\n status,\n ctx\n } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n if (inResult.status === \"aborted\") return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n } else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx\n });\n }\n };\n return handleAsync();\n } else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n if (inResult.status === \"aborted\") return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value\n };\n } else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline\n });\n }\n}\nlet ZodReadonly = /*#__PURE__*/(() => {\n class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = data => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then(data => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n }\n ZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params)\n });\n };\n ////////////////////////////////////////\n ////////////////////////////////////////\n ////////// //////////\n ////////// z.custom //////////\n ////////// //////////\n ////////////////////////////////////////\n ////////////////////////////////////////\n return ZodReadonly;\n})();\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? {\n message: params\n } : params;\n const p2 = typeof p === \"string\" ? {\n message: p\n } : p;\n return p2;\n}\nfunction custom(check, _params = {},\n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check) return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n const r = check(data);\n if (r instanceof Promise) {\n return r.then(r => {\n var _a, _b;\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = (_b = (_a = params.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n ctx.addIssue({\n code: \"custom\",\n ...params,\n fatal: _fatal\n });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = (_b = (_a = params.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n ctx.addIssue({\n code: \"custom\",\n ...params,\n fatal: _fatal\n });\n }\n return;\n });\n return ZodAny.create();\n}\nconst late = {\n object: ZodObject.lazycreate\n};\nvar ZodFirstPartyTypeKind = /*#__PURE__*/function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n return ZodFirstPartyTypeKind;\n}(ZodFirstPartyTypeKind || {});\nconst instanceOfType = (\n// const instanceOfType = any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`\n}) => custom(data => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: arg => ZodString.create({\n ...arg,\n coerce: true\n }),\n number: arg => ZodNumber.create({\n ...arg,\n coerce: true\n }),\n boolean: arg => ZodBoolean.create({\n ...arg,\n coerce: true\n }),\n bigint: arg => ZodBigInt.create({\n ...arg,\n coerce: true\n }),\n date: arg => ZodDate.create({\n ...arg,\n coerce: true\n })\n};\nconst NEVER = INVALID;\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util() {\n return util;\n },\n get objectUtil() {\n return objectUtil;\n },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n datetimeRegex: datetimeRegex,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n ZodReadonly: ZodReadonly,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind() {\n return ZodFirstPartyTypeKind;\n },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, datetimeRegex, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };","import { z } from 'zod';\nimport { Entity } from '../../entities/entity'\nimport { PrepaymentSetting } from '../settings';\nimport { AdjustmentType, Lex, LexoRank } from '../shared';\nimport { Contact } from '../contact';\nimport { QuotePro } from '../quotes';\nimport { Policy, PolicyNotification, PolicyOptionVisibility } from './policy';\n\nexport enum QuotePolicyReminderType {\n Acceptance = 'Acceptance',\n Payment = 'Payment',\n}\n\nexport enum QuotePolicyDates {\n SendDate = 'SendDate',\n ExpiryDate = 'ExpiryDate',\n AcceptedDate = 'AcceptedDate',\n}\n\nexport enum QuotePolicyPrepaymentRuleOperator {\n LessThan = 'LessThan',\n LessThanOrEqual = 'LessThanOrEqual',\n // Equal = 'Equal',\n GreaterThanOrEqual = 'GreaterThanOrEqual',\n GreaterThan = 'GreaterThan',\n}\n\nexport enum QuotePolicyPrepaymentRuleType {\n Percentage = 'Percentage',\n Amount = 'Amount',\n}\n\nexport enum QuotePolicyPrepaymentSkipType {\n NotApplicable = 'Not Applicable',\n Include = 'Include',\n Exclude = 'Exclude',\n}\n\nexport enum QuotePolicyJobConvertSplitType {\n // None = 'None',\n JobTemplate = 'Job Template',\n ItemCategory = 'Item Category',\n QuoteSection = 'Quote Section'\n}\n\nexport enum QuotePolicyNotificationType {\n QuoteAccepted = 'Quote Accepted',\n QuoteDeclined = 'Quote Declined',\n QuotePrepaid = 'Quote Prepaid',\n}\n\nexport interface QuotePolicyAcceptance {\n _id: string;\n poNumber: PolicyOptionVisibility;\n attachments: PolicyOptionVisibility;\n signature: PolicyOptionVisibility;\n allowOnlineAcceptance: boolean;\n // allowOnlinePayment: boolean;\n}\n\nexport interface QuotePolicyJobConversion {\n _id: string;\n autoConvert: boolean;\n copyActivities: boolean;\n split: QuotePolicyJobConvertSplitType;\n jobTemplate: Entity;\n}\n\nexport interface QuotePolicyReminder {\n _id: string;\n active: boolean;\n type: QuotePolicyReminderType,\n date: QuotePolicyDates,\n offset: number;\n message: string;\n subject: string;\n}\n\nexport interface QuotePolicyReminders {\n _id: string;\n enableForAcceptance: boolean;\n acceptance: QuotePolicyReminder[];\n\n enableForPayment: boolean;\n payment: QuotePolicyReminder[];\n}\n\nexport type QuotePolicyNotification = PolicyNotification;\n\nexport interface QuotePolicyNotifications {\n _id: string;\n enabled: boolean;\n accept: QuotePolicyNotification;\n decline: QuotePolicyNotification;\n prepaid: QuotePolicyNotification;\n}\n\nexport interface QuotePolicyPrepaymentRule {\n _id: string;\n quoteValue: number;\n operator: QuotePolicyPrepaymentRuleOperator;\n prepaymentType: QuotePolicyPrepaymentRuleType;\n amount: number;\n sortOrder: Lex | any;\n active: boolean;\n}\n\nexport interface QuotePolicyPrepayments {\n _id: string;\n enabled: boolean;\n allowOverride: boolean;\n rules: QuotePolicyPrepaymentRule[];\n settings: PrepaymentSetting\n}\n\nexport interface QuotePolicyDefaults {\n _id: string;\n adjustmentType: AdjustmentType;\n expiryDays: number;\n}\n\nexport interface QuotePolicy extends Policy {\n acceptance: QuotePolicyAcceptance;\n jobConversion: QuotePolicyJobConversion;\n prepayments: QuotePolicyPrepayments;\n reminders: QuotePolicyReminders;\n notifications: QuotePolicyNotifications;\n defaults: QuotePolicyDefaults;\n}\n\nexport const defaultQuotePolicy: QuotePolicy = {\n _id: null,\n isDefault: false,\n active: true,\n name: '',\n __v: 0,\n updatedBy: null,\n createdBy: null,\n // pricing: {\n // _id: null,\n // costSource: CostSource.StandardCost,\n // pricingMethod: PricingMethod.Margin,\n // multiplier: 30,\n // priceList: null\n // },\n acceptance: {\n _id: null,\n poNumber: PolicyOptionVisibility.Disabled,\n attachments: PolicyOptionVisibility.Disabled,\n signature: PolicyOptionVisibility.Disabled,\n allowOnlineAcceptance: true,\n },\n jobConversion: {\n _id: null,\n autoConvert: false,\n copyActivities: false,\n split: QuotePolicyJobConvertSplitType.ItemCategory,\n jobTemplate: null\n },\n prepayments: {\n _id: null,\n enabled: false,\n allowOverride: false,\n rules: [],\n settings: null\n },\n reminders: {\n _id: null,\n enableForAcceptance: false,\n acceptance: [],\n enableForPayment: false,\n payment: []\n },\n notifications: {\n _id: null,\n enabled: false,\n accept: null,\n decline: null,\n prepaid: null\n },\n defaults: {\n _id: null,\n adjustmentType: 'Percent',\n expiryDays: 30\n },\n}\n\nfunction canProcessPrepaymentRule(rule: QuotePolicyPrepaymentRule, quote: QuotePro) {\n\n const schema = z.object({\n amount: z.number().min(0),\n quoteValue: z.number().min(0),\n totalSellEx: z.number().min(0),\n });\n\n return schema.safeParse({\n amount: rule.amount,\n quoteValue: rule.quoteValue,\n totalSellEx: quote.totalSellEx\n });\n}\n\nfunction calculateRulePrepayment(rule: QuotePolicyPrepaymentRule, quote: QuotePro) {\n if (!canProcessPrepaymentRule(rule, quote)) return 0;\n\n switch (rule.prepaymentType) {\n case QuotePolicyPrepaymentRuleType.Amount:\n return rule.amount;\n case QuotePolicyPrepaymentRuleType.Percentage:\n return (quote.totalSellInc / 100) * rule.amount;\n default:\n return 0;\n }\n}\n\nconst quotePolicyPrepaymentHelper = {\n // [QuotePolicyPrepaymentRuleOperator.Equal]: (rule: QuotePolicyPrepaymentRule, quote: QuotePro) => {\n // return quote.totalSellEx === rule.quoteValue\n // ? calculateRulePrepayment(rule, quote)\n // : 0;\n // },\n\n [QuotePolicyPrepaymentRuleOperator.GreaterThan]: (rule: QuotePolicyPrepaymentRule, quote: QuotePro) => {\n return quote.totalSellInc > rule.quoteValue\n ? calculateRulePrepayment(rule, quote)\n : 0;\n },\n\n [QuotePolicyPrepaymentRuleOperator.GreaterThanOrEqual]: (rule: QuotePolicyPrepaymentRule, quote: QuotePro) => {\n return quote.totalSellInc >= rule.quoteValue\n ? calculateRulePrepayment(rule, quote)\n : 0;\n },\n\n [QuotePolicyPrepaymentRuleOperator.LessThan]: (rule: QuotePolicyPrepaymentRule, quote: QuotePro) => {\n return quote.totalSellInc < rule.quoteValue\n ? calculateRulePrepayment(rule, quote)\n : 0;\n },\n\n [QuotePolicyPrepaymentRuleOperator.LessThanOrEqual]: (rule: QuotePolicyPrepaymentRule, quote: QuotePro) => {\n return quote.totalSellInc <= rule.quoteValue\n ? calculateRulePrepayment(rule, quote)\n : 0;\n }\n\n\n}\n\nexport const calculateQuotePrepayment = (quote: QuotePro) => {\n\n let prepaymentValue = 0;\n\n if (!quote?.policy?.prepayments?.enabled)\n return prepaymentValue;\n\n for (const rule of quote?.policy?.prepayments?.rules) {\n prepaymentValue = quotePolicyPrepaymentHelper[rule.operator](rule, quote);\n\n if (prepaymentValue > 0)\n break;\n }\n\n return prepaymentValue;\n}","import { FiltersNumberMethod, FiltersRelativeDateMethod } from '../../utilities';\nimport { Entity } from '../entity';\nimport { SaleOrderStatus } from './sale.order';\nimport * as Enumerable from 'linq';\n\nexport interface SaleOrderViewLookups {\n\n account?: Entity[];\n owner?: Entity[];\n company?: Entity[];\n billingCompany?: Entity[];\n status?: SaleOrderStatus[];\n createdBy?: Entity[];\n}\n\nexport interface SaleOrderViewFilters extends SaleOrderViewLookups {\n _id?: string;\n search?: string;\n\n totalSellEx?: FiltersNumberMethod;\n date?: FiltersRelativeDateMethod;\n expiryDate?: FiltersRelativeDateMethod;\n createdAt?: FiltersRelativeDateMethod;\n}\n\nclass SaleOrderViewFiltersClass implements Required {\n _id = null\n\n // Multi - Need to check data inside\n search: string = null;\n prepaymentOnly: boolean = false;\n\n account: Entity[] = [];\n status: SaleOrderStatus[] = [];\n owner: Entity[] = [];\n company: Entity[] = [];\n billingCompany: Entity[] = [];\n createdBy: Entity[];\n\n totalSellEx: FiltersNumberMethod = null;\n date: FiltersRelativeDateMethod = null;\n expiryDate: FiltersRelativeDateMethod = null;\n createdAt: FiltersRelativeDateMethod = null;\n}\n\nexport function effectiveSaleOrderViewFilters(view: SaleOrderViewFilters, refinements: SaleOrderViewFilters) {\n\n const effective: { [k in keyof SaleOrderViewFilters] } = {} as SaleOrderViewFilters;\n const keys = Object.keys(new SaleOrderViewFiltersClass())\n\n Enumerable.from(keys)\n .forEach(key => {\n\n const refinement = refinements[key];\n const viewValue = view[key];\n\n if (Array.isArray(refinement) || Array.isArray(viewValue)) {\n effective[key] = refinement?.length\n ? refinement\n : viewValue;\n } else {\n effective[key] = refinement\n ? refinement\n : view[key];\n }\n\n if (effective[key] == null ||\n (typeof effective[key] !== 'boolean' && Object.keys(effective[key])?.length == 0)\n ) {\n delete effective[key];\n }\n });\n\n return effective;\n\n}\n","\nimport { FormResponse, FormTemplate } from '../form';\nimport { WorkOrderStatusSystemName } from '../job';\nimport { Allocation } from '../scheduler';\nimport { Activity, DocumentLibrary, EmbeddedCode } from '../shared';\nimport { Task } from '../tasks';\n\nexport type ClaimDownstreamStatusChange = WorkOrderStatusSystemName.Dispatched | WorkOrderStatusSystemName.InProgress | WorkOrderStatusSystemName.OnHold | WorkOrderStatusSystemName.Completed;\n\nexport type ClaimDownstreamSyncEvent = 'FirstDispatched' | 'StatusUpdated' | 'ActivityDeleted' | 'ActivityUpdated' | 'AllocationDeleted' | 'AllocationUpdated' | 'ItemUpdated' | 'ItemDeleted' | 'TaskUpdated' | 'TasksRequested' | 'FormSubmitted';\nexport type ClaimUpstreamSyncEvent = 'StatusUpdated' | 'ItemCreated' | 'ItemDeleted' | 'ItemUpdated' | 'TaskCreated' | 'TaskUpdated' | 'TaskDeleted';\n\nexport type ClaimUpstreamSyncTaskPayload = {\n task: Task;\n form?: FormTemplate;\n document?: DocumentLibrary;\n}\n\nexport type ClaimDownstreamSyncTaskPayload = {\n task: Task;\n form?: FormResponse;\n}\n\nexport type ClaimDownstreamSyncMessage =\n ({\n event: ClaimDownstreamSyncEvent;\n claimToken: string;\n }) &\n ({\n event: 'StatusUpdated';\n status: ClaimDownstreamStatusChange;\n note: string;\n date: Date;\n } | {\n event: 'ActivityUpdated' | 'ActivityDeleted';\n value: Activity;\n } | {\n event: 'AllocationUpdated' | 'AllocationDeleted';\n value: Allocation;\n } | {\n event: 'ItemUpdated' | 'ItemDeleted';\n value: EmbeddedCode;\n } | {\n event: 'TaskUpdated';\n value: ClaimDownstreamSyncTaskPayload;\n } | {\n event: 'FormSubmitted';\n value: FormResponse;\n } | {\n event: 'TasksRequested';\n });\n\nexport type ClaimUpstreamSyncMessage =\n ({\n claimToken: string;\n event: ClaimUpstreamSyncEvent;\n }) & {\n event: 'StatusUpdated';\n claimToken: string;\n value: ClaimDownstreamStatusChange;\n } | {\n event: 'ItemUpdated' | 'ItemDeleted';\n claimToken: string;\n value: EmbeddedCode;\n } | {\n event: 'TaskUpdated';\n claimToken: string;\n value: ClaimUpstreamSyncTaskPayload;\n } | {\n event: 'TasksDeleted';\n claimToken: string;\n value: string[];\n };\n\nconst t: ClaimDownstreamSyncMessage = {\n event: 'StatusUpdated',\n claimToken: '123',\n status: WorkOrderStatusSystemName.Dispatched,\n note: 'test',\n date: new Date()\n}","import { MetadataEntityFieldData, MetadataEntityFieldEditorType, MetadataEntityFieldType } from '../model';\n\n\nexport function getMetadataEntityFieldType(field: MetadataEntityFieldData): MetadataEntityFieldType {\n if (!field?.type) return null;\n return Array.isArray(field.type)\n ? field.type[0]\n : field.type;\n}\n\nexport function getMetadataEntityFilterType(field: MetadataEntityFieldData): MetadataEntityFieldEditorType {\n\n if (field?.filterType) return field.filterType;\n const type = getMetadataEntityFieldType(field);\n\n switch (type) {\n case MetadataEntityFieldType.Date:\n case MetadataEntityFieldType.DateTime:\n return MetadataEntityFieldEditorType.Calendar;\n\n case MetadataEntityFieldType.Lookup:\n case MetadataEntityFieldType.Tag:\n case MetadataEntityFieldType.Enum:\n return MetadataEntityFieldEditorType.Dropdown;\n\n case MetadataEntityFieldType.Boolean:\n return MetadataEntityFieldEditorType.Switch;\n\n case MetadataEntityFieldType.Number:\n return MetadataEntityFieldEditorType.Number;\n\n default:\n return MetadataEntityFieldEditorType.Input;\n }\n}\n\n\n\n\n// export function shouldServerValidateMetadataEntityField(field: MetadataEntityFieldData): boolean {\n\n// if (field.required) return true;\n\n// const type = getMetadataEntityFieldType(field);\n// if (!type) return false;\n\n// switch (type) {\n// case MetadataEntityFieldType.Lookup:\n// case MetadataEntityFieldType.Tag:\n// return true;\n\n// default:\n// return false;\n\n// }\n// }","/*! *****************************************************************************\r\nCopyright (C) Microsoft. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : Function(\"return this;\")();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n } else {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter);\n function makeExporter(target, previous) {\n return function (key, value) {\n if (typeof target[key] !== \"function\") {\n Object.defineProperty(target, key, {\n configurable: true,\n writable: true,\n value: value\n });\n }\n if (previous) previous(key, value);\n };\n }\n })(function (exporter) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = {\n __proto__: []\n } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate ? function () {\n return MakeDictionary(Object.create(null));\n } : supportsProto ? function () {\n return MakeDictionary({\n __proto__: null\n });\n } : function () {\n return MakeDictionary({});\n },\n has: downLevel ? function (map, key) {\n return hasOwn.call(map, key);\n } : function (map, key) {\n return key in map;\n },\n get: downLevel ? function (map, key) {\n return hasOwn.call(map, key) ? map[key] : undefined;\n } : function (map, key) {\n return map[key];\n }\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var Metadata = new _WeakMap();\n /**\r\n * Applies a set of decorators to a property of a target object.\r\n * @param decorators An array of decorators.\r\n * @param target The target object.\r\n * @param propertyKey (Optional) The property key to decorate.\r\n * @param attributes (Optional) The property descriptor for the target key.\r\n * @remarks Decorators are applied in reverse order.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * Example = Reflect.decorate(decoratorsArray, Example);\r\n *\r\n * // property (on constructor)\r\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * Object.defineProperty(Example, \"staticMethod\",\r\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\r\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\r\n *\r\n * // method (on prototype)\r\n * Object.defineProperty(Example.prototype, \"method\",\r\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\r\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\r\n *\r\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators)) throw new TypeError();\n if (!IsObject(target)) throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes)) throw new TypeError();\n if (IsNull(attributes)) attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n } else {\n if (!IsArray(decorators)) throw new TypeError();\n if (!IsConstructor(target)) throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\r\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\r\n * @param metadataKey The key for the metadata entry.\r\n * @param metadataValue The value for the metadata entry.\r\n * @returns A decorator function.\r\n * @remarks\r\n * If `metadataKey` is already defined for the target and target key, the\r\n * metadataValue for that key will be overwritten.\r\n * @example\r\n *\r\n * // constructor\r\n * @Reflect.metadata(key, value)\r\n * class Example {\r\n * }\r\n *\r\n * // property (on constructor, TypeScript only)\r\n * class Example {\r\n * @Reflect.metadata(key, value)\r\n * static staticProperty;\r\n * }\r\n *\r\n * // property (on prototype, TypeScript only)\r\n * class Example {\r\n * @Reflect.metadata(key, value)\r\n * property;\r\n * }\r\n *\r\n * // method (on constructor)\r\n * class Example {\r\n * @Reflect.metadata(key, value)\r\n * static staticMethod() { }\r\n * }\r\n *\r\n * // method (on prototype)\r\n * class Example {\r\n * @Reflect.metadata(key, value)\r\n * method() { }\r\n * }\r\n *\r\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target)) throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey)) throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\r\n * Define a unique metadata entry on the target.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param metadataValue A value that contains attached metadata.\r\n * @param target The target object on which to define metadata.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\r\n *\r\n * // property (on constructor)\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\r\n *\r\n * // decorator factory as metadata-producing annotation.\r\n * function MyAnnotation(options): Decorator {\r\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\r\n * }\r\n *\r\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError();\n if (!IsUndefined(propertyKey)) propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\r\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError();\n if (!IsUndefined(propertyKey)) propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\r\n * Gets a value indicating whether the target object has the provided metadata key defined.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError();\n if (!IsUndefined(propertyKey)) propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\r\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError();\n if (!IsUndefined(propertyKey)) propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\r\n * Gets the metadata value for the provided metadata key on the target object.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError();\n if (!IsUndefined(propertyKey)) propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\r\n * Gets the metadata keys defined on the target object or its prototype chain.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns An array of unique metadata keys.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.getMetadataKeys(Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\r\n *\r\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target)) throw new TypeError();\n if (!IsUndefined(propertyKey)) propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\r\n * Gets the unique metadata keys defined on the target object.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns An array of unique metadata keys.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.getOwnMetadataKeys(Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\r\n *\r\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target)) throw new TypeError();\n if (!IsUndefined(propertyKey)) propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\r\n * Deletes the metadata entry from the target object with the provided key.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target)) throw new TypeError();\n if (!IsUndefined(propertyKey)) propertyKey = ToPropertyKey(propertyKey);\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/false);\n if (IsUndefined(metadataMap)) return false;\n if (!metadataMap.delete(metadataKey)) return false;\n if (metadataMap.size > 0) return true;\n var targetMetadata = Metadata.get(target);\n targetMetadata.delete(propertyKey);\n if (targetMetadata.size > 0) return true;\n Metadata.delete(target);\n return true;\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated)) throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated)) throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create) return undefined;\n targetMetadata = new _Map();\n Metadata.set(O, targetMetadata);\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create) return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent)) return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/false);\n if (IsUndefined(metadataMap)) return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent)) return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/false);\n if (IsUndefined(metadataMap)) return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null) return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0) return ownKeys;\n if (ownKeys.length <= 0) return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/false);\n if (IsUndefined(metadataMap)) return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n } catch (e) {\n try {\n IteratorClose(iterator);\n } finally {\n throw e;\n }\n }\n k++;\n }\n }\n // 6 ECMAScript Data Typ0es and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null) return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\":\n return 0 /* Undefined */;\n case \"boolean\":\n return 2 /* Boolean */;\n case \"string\":\n return 3 /* String */;\n case \"symbol\":\n return 4 /* Symbol */;\n case \"number\":\n return 5 /* Number */;\n case \"object\":\n return x === null ? 1 /* Null */ : 6 /* Object */;\n default:\n return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */:\n return input;\n case 1 /* Null */:\n return input;\n case 2 /* Boolean */:\n return input;\n case 3 /* String */:\n return input;\n case 4 /* Symbol */:\n return input;\n case 5 /* Number */:\n return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result)) throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result)) return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result)) return result;\n }\n } else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result)) return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result)) return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key)) return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray ? Array.isArray(argument) : argument instanceof Object ? argument instanceof Array : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */:\n return true;\n case 4 /* Symbol */:\n return true;\n default:\n return false;\n }\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null) return undefined;\n if (!IsCallable(func)) throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method)) throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator)) throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f) f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype) return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype) return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype) return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\") return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O) return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () {\n return this;\n };\n MapIterator.prototype[iteratorSymbol] = function () {\n return this;\n };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n } else {\n this._index++;\n }\n return {\n value: result,\n done: false\n };\n }\n return {\n value: undefined,\n done: true\n };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return {\n value: value,\n done: true\n };\n };\n return MapIterator;\n }();\n return function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () {\n return this._keys.length;\n },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) {\n return this._find(key, /*insert*/false) >= 0;\n };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (key === this._cacheKey) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () {\n return new MapIterator(this._keys, this._values, getKey);\n };\n Map.prototype.values = function () {\n return new MapIterator(this._keys, this._values, getValue);\n };\n Map.prototype.entries = function () {\n return new MapIterator(this._keys, this._values, getEntry);\n };\n Map.prototype[\"@@iterator\"] = function () {\n return this.entries();\n };\n Map.prototype[iteratorSymbol] = function () {\n return this.entries();\n };\n Map.prototype._find = function (key, insert) {\n if (this._cacheKey !== key) {\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }();\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n return function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () {\n return this._map.size;\n },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) {\n return this._map.has(value);\n };\n Set.prototype.add = function (value) {\n return this._map.set(value, value), this;\n };\n Set.prototype.delete = function (value) {\n return this._map.delete(value);\n };\n Set.prototype.clear = function () {\n this._map.clear();\n };\n Set.prototype.keys = function () {\n return this._map.keys();\n };\n Set.prototype.values = function () {\n return this._map.values();\n };\n Set.prototype.entries = function () {\n return this._map.entries();\n };\n Set.prototype[\"@@iterator\"] = function () {\n return this.keys();\n };\n Set.prototype[iteratorSymbol] = function () {\n return this.keys();\n };\n return Set;\n }();\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }();\n function CreateUniqueKey() {\n var key;\n do key = \"@@WeakMap@@\" + CreateUUID(); while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create) return undefined;\n Object.defineProperty(target, rootKey, {\n value: HashMap.create()\n });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i) buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n if (typeof crypto !== \"undefined\") return crypto.getRandomValues(new Uint8Array(size));\n if (typeof msCrypto !== \"undefined\") return msCrypto.getRandomValues(new Uint8Array(size));\n return FillRandomBytes(new Uint8Array(size), size);\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8) result += \"-\";\n if (byte < 16) result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","\nimport { MetadataEntityData, MetadataEntityFieldData, MetadataEntityFieldType } from './model';\nimport { getMetadataEntityFieldType } from './utilities';\nimport * as Enumerable from 'linq';\nimport { ActivityEntityName } from '../../../entities/shared';\nimport { SecurityModuleName } from '../../../security';\n\n\nexport interface MetadataEntityGroup {\n name: string;\n displayName: string;\n type: ActivityEntityName;\n groups: MetadataEntityFieldGroup[];\n}\n\nexport interface MetadataEntityFieldGroup {\n name: string;\n fields: MetadataEntityFieldData[];\n}\n\nexport class MetadataCatalog {\n\n public static readonly entities = new Map();\n public static readonly modules = new Map();\n\n public static registerEntity(entity: MetadataEntityData) {\n if (!entity?.type) return;\n this.entities.set(entity.type, entity);\n\n if (entity?.module) {\n if (this.modules.has(entity.module)) {\n const module = this.modules.get(entity.module);\n module.push(entity);\n } else {\n const module = this.modules.set(entity.module, []).get(entity.module);\n module.push(entity);\n }\n }\n }\n\n public static getEntity(type: ActivityEntityName): MetadataEntityData {\n return this.entities.get(type);\n }\n\n public static getEntityFields(type?: ActivityEntityName, entity?: MetadataEntityData): MetadataEntityGroup {\n\n entity = !!entity\n ? entity\n : this.entities.get(type);\n\n if (!entity) return null;\n\n const entityGroupings: MetadataEntityGroup = {\n name: entity?.name,\n displayName: entity?.displayName,\n type: entity?.type,\n groups: []\n };\n\n const entityGrouping: MetadataEntityFieldGroup = {\n name: entity?.name,\n fields: []\n };\n\n let groups: MetadataEntityFieldGroup[] = [];\n\n Enumerable\n .from(entity.fields)\n .forEach(field => {\n\n const type = getMetadataEntityFieldType(field);\n\n switch (type) {\n\n case MetadataEntityFieldType.EmbeddedEntity: {\n\n const fieldEntity = field.typeData as MetadataEntityData;\n\n if (fieldEntity?.fields?.length) {\n\n const fields = Enumerable\n .from(fieldEntity.fields)\n .select(item => {\n return {\n ...item,\n path: `${field.name}.${item.path}`\n };\n })\n .toArray();\n\n const fieldGroup: MetadataEntityFieldGroup = {\n name: fieldEntity.displayName,\n fields: fields\n };\n\n groups.push(fieldGroup);\n }\n\n break;\n }\n\n case MetadataEntityFieldType.CustomFields:\n break;\n\n default: {\n entityGrouping.fields.push(field);\n break;\n }\n\n }\n\n });\n\n entityGrouping.fields = Enumerable\n .from(entityGrouping.fields)\n .orderBy(x => x.displayName)\n .toArray();\n\n groups = Enumerable\n .from(groups)\n .orderBy(x => x.name)\n .select(x => {\n x.fields = Enumerable\n .from(x.fields)\n .orderBy(x => x.displayName)\n .toArray();\n return x;\n })\n .toArray();\n\n entityGroupings.groups = [entityGrouping, ...groups];\n\n return entityGroupings;\n\n }\n\n}\n","import { titleize } from 'inflected';\nimport { MetadataEntityFieldData, MetadataEntityFieldType, defaultMetadataFlagTypeData } from './model';\nimport { getMetadataEntityFieldType, getMetadataEntityFilterType, getMetadataEntityFilterV2 } from './utilities';\nimport { getMetadataEntityFieldDataDefaults } from './utilities/get.entity.field.defaults';\nimport * as Enumerable from 'linq'\n\nexport const MetadataField = (options?: Partial): PropertyDecorator => {\n return (target: any, propertyKey: string | symbol): void => {\n\n const ctor = target.constructor;\n\n if (!Object.getOwnPropertyDescriptor(ctor, '__meta_fields__')) {\n Object.defineProperty(ctor, '__meta_fields__', {\n value: [],\n writable: true,\n enumerable: true,\n });\n }\n\n const field = {\n ...getMetadataEntityFieldDataDefaults(),\n name: propertyKey,\n path: propertyKey,\n displayName: titleize(propertyKey as string),\n ...options\n } as MetadataEntityFieldData;\n\n const type = getMetadataEntityFieldType(field);\n if (type === MetadataEntityFieldType.Flag) {\n field.typeData = defaultMetadataFlagTypeData();\n }\n\n field.filterType = getMetadataEntityFilterType(field);\n field.filter = field?.filter ?? getMetadataEntityFilterV2(type);\n\n const safeSet = new Map();\n Enumerable\n .from((Object?.getPrototypeOf(ctor)?.__meta_fields__ ?? []) as MetadataEntityFieldData[])\n .concat(ctor.__meta_fields__)\n .concat([field])\n .forEach(x => safeSet.set(x.name, x));\n\n // const set = new Set([\n // ...(Object?.getPrototypeOf(ctor)?.__meta_fields__ ?? []),\n // ...ctor.__meta_fields__,\n // field,\n // ]);\n\n ctor.__meta_fields__ = Array.from(safeSet.values());\n };\n};","import { BehaviorSubject } from 'rxjs';\nimport { MetadataEntityFieldData } from '../decorators';\nimport * as Enumerable from 'linq';\n\nexport class MetadataFieldMapper {\n\n private readonly _availableFields = new BehaviorSubject([]);\n public readonly availableFields$ = this._availableFields.asObservable();\n\n private readonly _requiredFields = new BehaviorSubject([]);\n public readonly requiredFields$ = this._requiredFields.asObservable();\n\n public readonly mappings = new Map();\n public readonly reverseMapping = new Map();\n\n constructor(\n public readonly allFields: MetadataEntityFieldData[]\n ) {\n this._availableFields.next(allFields);\n this.updateRequiredFields();\n }\n\n public addMapping(source: string, destination: MetadataEntityFieldData) {\n\n if (destination) {\n // We are setting a mapping\n this.mappings.set(source, destination);\n this.reverseMapping.set(destination.path, source);\n } else {\n // We are probably removing a mapping\n const savedDestination = this.mappings.get(source);\n if (savedDestination) {\n this.mappings.delete(source);\n this.reverseMapping.delete(savedDestination?.path);\n }\n }\n\n const available = Enumerable.from(this.allFields)\n .where(x => !this.reverseMapping.has(x.path))\n .toArray();\n\n this._availableFields.next(available);\n this.updateRequiredFields();\n }\n\n\n private updateRequiredFields() {\n this._requiredFields.next(Enumerable.from(this._availableFields.value).where(x => x.required && x.importable).toArray());\n }\n}","\nimport * as Enumerable from 'linq';\nimport { Observable, Subject } from 'rxjs';\nimport { ActivityEntityName } from '../../../entities';\nimport { SecurityModuleName } from '../../../security';\nimport { MetadataEntityData, MetadataEntityFieldData, MetadataEntityFieldType } from '../decorators';\nimport { MetadataImportConfig } from './metadata.import.config';\nimport { MetadataImportFieldBuilder } from './metadata.import.field.builder';\nimport { metadataImportCellValidator } from './metadata.import.validators';\nimport { MetadataObjectBuilder } from './metadata.object.builder';\n\ninterface MetadataValidationComponent {\n change$: Observable;\n changed(): void;\n parent: MetadataValidationComponent;\n}\n\nexport enum BulkRowAction {\n None = 'None',\n Exclude = 'Exclude',\n Include = 'Include'\n}\n\nexport class MetadataImportValidationCell implements MetadataValidationComponent {\n\n private _change = new Subject();\n public readonly change$ = this._change.asObservable();\n\n private _value: any;\n public get value(): any {\n return this._value;\n }\n\n public set value(value: any) {\n if (this?.field?.type === MetadataEntityFieldType._Action_) {\n // For the first time set the value, we don't need to validate\n if (this._value && this._value !== value) {\n this._value = value;\n this.changed();\n }\n else {\n this._value = value;\n }\n\n return;\n }\n\n this._value = value;\n this.changed();\n }\n\n private _isValid = true;\n public get isValid() {\n return this._isValid;\n }\n\n private _message: string;\n public get message() {\n return this._message;\n }\n\n public parent: MetadataValidationComponent;\n\n constructor(\n value: any,\n private field: MetadataEntityFieldData,\n private config: MetadataImportConfig\n ) {\n this.value = value;\n\n if (!field)\n console.log('Field Not Set', this.value);\n }\n\n public changed(): void {\n // if (this?.field?.type === MetadataEntityFieldType._Action_)\n // return;\n\n const result = metadataImportCellValidator(this.field, this.value, this.config);\n this._value = result.value;\n this._isValid = result.success;\n this._message = result.message;\n\n this?.parent?.changed();\n this._change.next();\n }\n}\n\nexport class MetadataImportValidationRow implements MetadataValidationComponent {\n\n private _change = new Subject();\n public readonly change$ = this._change.asObservable();\n\n public get action(): BulkRowAction {\n return this.cells[0].value;\n }\n\n public get isValid() {\n if (this.action === BulkRowAction.Exclude) return true;\n\n return Enumerable.from(this.cells).all(x => x.isValid);\n }\n\n public parent: MetadataValidationComponent;\n\n constructor(\n public readonly cells: MetadataImportValidationCell[],\n ) {\n Enumerable\n .from(cells)\n .forEach(x => x.parent = this);\n }\n\n public setValue(index: number, value: any) {\n if (index > this.cells.length) return;\n this.cells[index].value = value;\n }\n\n public getValue(index: number): any {\n if (index > this.cells.length) return;\n return this.cells[index].value;\n }\n\n public changed(): void {\n this?.parent?.changed();\n this._change.next();\n }\n}\n\nexport class MetadataImportValidationTransportData {\n\n constructor(data: MetadataImportValidationData) {\n\n this.name = data.name;\n this.entity = data.entity;\n this.module = data.module;\n this.config = data.config;\n\n this.headers = Enumerable\n .from(data.headers)\n .select(x => x.path)\n .toArray();\n\n this.rows = Enumerable\n .from(data?.rows)\n .where(row => [BulkRowAction.Include].includes(row.action))\n .select(row => {\n const rowWithData = Enumerable\n .from(row.cells)\n .select(x => x.value)\n .toArray();\n\n return rowWithData;\n })\n .toArray();\n\n }\n\n name: string;\n module: SecurityModuleName;\n entity: ActivityEntityName;\n headers: string[];\n config: MetadataImportConfig;\n rows: any[][];\n}\n\n/**\n * @class MetadataImportValidationData\n * @description This class is used to hold the mapped data coming from the import file. Like the file it consists of rows and cells. The headers contain the mapping to the\n * WorkBuddy fields.\n * \n * This class will contain utility methods and properties to used validate the data.\n */\nexport class MetadataImportValidationData implements MetadataValidationComponent {\n\n private _change = new Subject();\n public readonly change$ = this._change.asObservable();\n\n private readonly _rows: MetadataImportValidationRow[] = [];\n public get rows(): ReadonlyArray {\n return this._rows;\n }\n\n public get invalidRowCount(): number {\n const count = Enumerable\n .from(this.rows)\n .count(x => !x.isValid);\n\n return count;\n }\n\n\n public get isValid() {\n return Enumerable.from(this.rows).all(x => x.isValid);\n }\n\n public parent: MetadataValidationComponent;\n\n constructor(\n public readonly name: string,\n public readonly module: SecurityModuleName,\n public readonly entity: ActivityEntityName,\n public readonly headers: MetadataEntityFieldData[],\n public readonly config?: MetadataImportConfig\n ) { }\n\n changed(): void {\n this._change.next();\n }\n\n public addRow(row: MetadataImportValidationRow) {\n row.parent = this;\n this._rows.push(row);\n }\n\n /**\n * @description This method will return a distinct list of values in all rows for a cell at a given index.\n * @param cellIndex The index of the cell in the row\n * @returns The distinct list of values\n */\n public getDistinctValues(cellIndex: number): any[] {\n const values = Enumerable\n .from(this.rows)\n .select(x => x.getValue(cellIndex))\n .distinct()\n .toArray();\n\n return values;\n }\n\n /**\n * @description This method converts all of the rows into an object with the shape of the object defined by the metadata.\n * @returns Returns an array of objects with the shape of the object defined by the metadata. Each item in the array is a row of data.\n */\n public toObject() {\n const data = [];\n\n Enumerable\n .from(this.rows)\n .forEach((row, rowIndex) => {\n\n let rowData = {};\n\n Enumerable\n .from(this.headers)\n .forEach((header, headerIndex) => {\n MetadataObjectBuilder.set(rowData, header?.path, row.cells[headerIndex].value);\n });\n\n data.push(rowData);\n });\n\n return data;\n }\n\n /**\n * @description This method is used to serialize the data to a transport object. Ideally this should be used to send the data to the server.\n */\n public serialize(): MetadataImportValidationTransportData {\n return new MetadataImportValidationTransportData(this);\n }\n\n /**\n * @description This method is used to deserialize the data from a transport object. Ideally this should be used to receive the data on the server.\n * @param data \n * @returns A reconstructed MetadataImportValidationData object.\n */\n public static deserialize(data: MetadataImportValidationTransportData, metadataEntity: MetadataEntityData): MetadataImportValidationData {\n\n const fields = MetadataImportFieldBuilder.getAvailableFields(metadataEntity);\n\n // Build a map of the available fields\n const fieldMap = Enumerable.from(fields).toDictionary(x => x.path, x => x);\n\n // Get metadata fields from string to object\n const headers = Enumerable\n .from(data?.headers)\n .select(x => fieldMap.get(x))\n .toArray();\n\n // Reconstruction the action cell\n const actionHeader = {\n type: MetadataEntityFieldType._Action_,\n name: MetadataEntityFieldType._Action_\n } as MetadataEntityFieldData;\n\n headers[0] = actionHeader;\n\n const validator = new MetadataImportValidationData(data.name, data?.module, data?.entity, headers);\n\n Enumerable\n .from(data?.rows)\n .forEach(row => {\n\n const cells = Enumerable\n .from(row)\n .select((cell, i) => {\n return new MetadataImportValidationCell(cell, headers[i], data?.config);\n })\n .toArray();\n\n const metadataRow = new MetadataImportValidationRow(cells);\n validator.addRow(metadataRow);\n });\n\n return validator;\n\n }\n\n}","import { getMetadataEntityFieldType, MetadataEntityData, MetadataEntityFieldData, MetadataEntityFieldType } from '../decorators';\nimport { CustomFieldType } from '../../../entities';\nimport * as Enumerable from 'linq';\n\n\n\n/**\n * @class MetadataImportValidationRow\n * This class is used to recursively loop through the metadata schema and build an flat list of fields that can be imported.\n */\nexport class MetadataImportFieldBuilder {\n\n public static getAvailableFields(entity: MetadataEntityData) {\n\n const available = this.getFields(entity);\n return available;\n\n }\n\n private static getFields(entity: MetadataEntityData, fields: MetadataEntityFieldData[] = []): MetadataEntityFieldData[] {\n\n Enumerable\n .from(entity?.fields)\n .where(x => x.importable && !x.readonly)\n .select(x => {\n if (x?.bulkImportOverrides) {\n return { ...x, ...x.bulkImportOverrides };\n }\n return x;\n })\n .forEach(field => {\n\n const effectiveFieldType = MetadataImportFieldBuilder.getEffectiveFieldType(field);\n\n switch (effectiveFieldType) {\n case MetadataEntityFieldType.EmbeddedEntity: {\n\n const type = field.typeData as MetadataEntityData;\n\n const childEntity = {\n ...type,\n fields: Enumerable\n .from(type?.fields)\n .where(x => x.importable && !x.readonly)\n .where(x => ![MetadataEntityFieldType.Parent].includes(getMetadataEntityFieldType(x)))\n .select(x => {\n return {\n ...x,\n displayName: `${field.displayName} ${x.displayName}`,\n path: `${field.path}.${x.path}`,\n group: `${field.displayName}`\n }\n })\n .toArray()\n };\n\n return this.getFields(childEntity, fields);\n }\n\n case MetadataEntityFieldType.Address: {\n const type = field.typeData;\n const addressFields = (type?.data?.fields ?? type?.fields ?? []) as MetadataEntityFieldData[];\n\n // if (type.type === CustomFieldType.Address as any) {\n // type.fields = MetadataCatalog.getEntity(ActivityEntityName.Address).fields;\n // }\n\n\n fields.push(\n ...Enumerable\n .from(addressFields)\n .select(x => {\n if (x?.bulkImportOverrides) {\n return { ...x, ...x.bulkImportOverrides };\n }\n return x;\n })\n .where(x => x.importable && !x.readonly)\n .select(x => {\n return {\n ...x,\n required: x.required,\n displayName: `${field.displayName} ${x.displayName}`,\n path: `${field.path}.${x.path}`,\n group: `${field.group}`\n }\n })\n .toArray()\n );\n break;\n\n }\n\n\n case MetadataEntityFieldType.CustomFields: {\n const type = field.typeData as MetadataEntityData;\n fields.push(\n ...Enumerable\n .from(type?.fields)\n .where(x => x.importable && !x.readonly)\n .select(x => {\n return {\n ...x,\n displayName: `${field.displayName} ${x.displayName}`,\n path: `${field.path}.${x.path}`,\n group: `${field.group}`\n }\n })\n .toArray()\n );\n break;\n }\n\n\n default: {\n fields.push({ ...field, group: entity.displayName });\n break;\n }\n\n }\n });\n\n return fields;\n\n }\n\n\n\n public static getEffectiveFieldType(field: MetadataEntityFieldData): MetadataEntityFieldType | [MetadataEntityFieldType] {\n\n if (!field.type)\n return MetadataEntityFieldType.None;\n\n if (field.type !== MetadataEntityFieldType.CustomFields && field.type !== MetadataEntityFieldType.CustomField)\n return field.type;\n\n const types = {\n [CustomFieldType.Address]: MetadataEntityFieldType.Address,\n [CustomFieldType.Dropdown]: MetadataEntityFieldType.String,\n [CustomFieldType.DropdownMulti]: [MetadataEntityFieldType.String],\n [CustomFieldType.Note]: MetadataEntityFieldType.String,\n [CustomFieldType.Text]: MetadataEntityFieldType.String,\n [CustomFieldType.Boolean]: MetadataEntityFieldType.Boolean,\n [CustomFieldType.Date]: MetadataEntityFieldType.Date,\n [CustomFieldType.DateTime]: MetadataEntityFieldType.DateTime,\n [CustomFieldType.Email]: MetadataEntityFieldType.Email,\n [CustomFieldType.Number]: MetadataEntityFieldType.Number,\n [CustomFieldType.Phone]: MetadataEntityFieldType.Phone\n }\n\n return types[field.typeData.type];\n }\n}","import { MetadataEntityFieldData, MetadataEntityFieldType, MetadataEntityFieldValidatorType, MetadataEnumTypeData } from '../decorators';\nimport { ZodString, z } from 'zod';\nimport * as Enumerable from 'linq';\nimport { MetadataImportConfig } from './metadata.import.config';\nimport { DateUtility } from '../../../utilities';\nimport { MetadataImportFieldBuilder } from './metadata.import.field.builder';\n\nexport interface MetadataImportValidatorResult {\n value: any;\n success: boolean;\n message: string;\n}\n\nconst evaluateMetadataValidators = (field: MetadataEntityFieldData, existingValidator: T) => {\n\n if (field.type == MetadataEntityFieldType.String ||\n field.type == MetadataEntityFieldType.StringAlpha ||\n field.type == MetadataEntityFieldType.StringAlphaNumeric) {\n let stringValidator = existingValidator as ZodString;\n for (const validator of field.validators) {\n switch (validator.type) {\n case MetadataEntityFieldValidatorType.MinLength: {\n stringValidator = stringValidator.min(validator.data);\n break;\n }\n case MetadataEntityFieldValidatorType.MaxLength: {\n stringValidator = stringValidator.max(validator.data);\n break;\n }\n case MetadataEntityFieldValidatorType.Pattern: {\n stringValidator = stringValidator.regex(new RegExp(validator.data));\n break;\n }\n default:\n break;\n }\n }\n return stringValidator;\n }\n return existingValidator;\n};\n\nexport function metadataImportCellValidator(field: MetadataEntityFieldData, value: any, config?: MetadataImportConfig): MetadataImportValidatorResult {\n\n let result: any;\n\n if (!field)\n return { success: false, message: 'Field Not Set', value };\n\n const entityFieldType = MetadataImportFieldBuilder.getEffectiveFieldType(field);\n\n try {\n switch (entityFieldType) {\n\n case MetadataEntityFieldType.Tag:\n case MetadataEntityFieldType.Lookup:\n case MetadataEntityFieldType.Parent:\n case MetadataEntityFieldType.String: {\n let validator = field.required ? z.string().trim().min(1) : z.string().trim().optional().nullable();\n validator = evaluateMetadataValidators(field, validator);\n result = validator.parse(value);\n break;\n }\n\n case MetadataEntityFieldType.StringAlphaNumeric:\n case MetadataEntityFieldType.StringAlpha: {\n\n const regex = entityFieldType === MetadataEntityFieldType.StringAlphaNumeric\n ? /^\\w+[\\w\\s-]*\\w+$/\n : /^[A-Za-z]+[\\sA-Za-z]*[A-Za-z]+$/;\n\n let validator = field.required\n ? z.string().trim().min(1).regex(regex)\n : z.string().trim().optional().nullable().refine(x => x === null || x === undefined || x === '' || regex.test(x));\n validator = evaluateMetadataValidators(field, validator);\n result = validator.parse(value);\n break;\n }\n\n case MetadataEntityFieldType.Currency:\n case MetadataEntityFieldType.Number: {\n const zNumber = z\n .preprocess(val => {\n if (field.required && (val === '' || val === null || val === undefined))\n return Number.NaN;\n else\n return Number(val);\n }, z.number())\n\n const validator = field.required ? zNumber : zNumber.optional().nullable();\n result = validator.parse(value);\n break;\n }\n\n case MetadataEntityFieldType.Boolean: {\n\n const stringToBoolean = (value: unknown) => {\n\n let safeValue = value;\n\n switch (value) {\n case 'true':\n case 'TRUE':\n case 'True':\n case '1':\n safeValue = true;\n break;\n\n case 'false':\n case 'FALSE':\n case 'False':\n case '0':\n case '-1':\n safeValue = false\n break;\n\n default:\n safeValue = undefined\n break;\n }\n\n if (!field.required && (value === '' || value === null || value === undefined))\n safeValue = false;\n\n return safeValue;\n\n }\n\n const zBoolean = z.preprocess(val => stringToBoolean(val), z.boolean());\n const validator = field.required ? zBoolean : zBoolean.optional().nullable();\n\n result = validator.parse(value);\n break;\n }\n\n case MetadataEntityFieldType.Enum: {\n\n const data = field.typeData as MetadataEnumTypeData[];\n const values = data.map(x => x.value?.toString()?.trim().toLowerCase()) as any;\n const zEnum = z.enum(values,);\n\n const validator = field.required\n ? zEnum\n : zEnum.optional().nullable();\n\n value = value?.trim() === ''\n ? null\n : value?.trim();\n\n result = validator.parse(value?.toLowerCase());\n\n const safeValue = Enumerable.from(field.typeData).select(x => x.value).firstOrDefault(x => x?.toString()?.trim().toLowerCase() === result);\n result = safeValue;\n\n break;\n }\n\n case MetadataEntityFieldType.Phone: {\n const regex = /^[ \\(\\)0-9+-]*$/;\n\n const validator = field.required\n ? z.string().trim().min(1).regex(regex)\n : z.string().trim().regex(regex).optional().nullable();\n\n result = validator.parse(value);\n break;\n }\n\n case MetadataEntityFieldType.Email: {\n\n const validator = field.required\n ? z.string().trim().email().min(1)\n : z.string().trim().email().optional().nullable().or(z.literal(''))\n\n result = validator.parse(value);\n break;\n }\n\n case MetadataEntityFieldType.Url: {\n const regex = new RegExp('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?');\n\n const validator = field.required\n ? z.string().trim().min(1).regex(regex)\n : z.string().trim().regex(regex).optional().nullable().or(z.literal(''));\n\n // const validator = field.required\n // ? z.string().trim().url().min(1)\n // : z.string().trim().url().optional().nullable().or(z.literal(''));\n\n result = validator.parse(value);\n break;\n }\n\n case MetadataEntityFieldType.DateTime:\n case MetadataEntityFieldType.Date: {\n\n const isCustomField = field.type === MetadataEntityFieldType.CustomField;\n\n value = value?.trim() === ''\n ? null\n : value?.trim();\n\n const configs = {\n [MetadataEntityFieldType.DateTime]: config?.dateTimeFormat,\n [MetadataEntityFieldType.Date]: config?.dateFormat,\n [MetadataEntityFieldType.Time]: config?.timeFormat,\n }\n\n const format = configs[entityFieldType as MetadataEntityFieldType];\n\n // This may already be an ISO date if it came from the client side\n let date = DateUtility.getDateTime(value, 'utc', isCustomField);\n\n // Fallback to the format the user wants\n if (!date?.isValid) {\n date = DateUtility.fromFormat(value, format, 'utc', isCustomField);\n }\n\n // If the date is still invalid, try parsing the date without time\n if (!date?.isValid && entityFieldType === MetadataEntityFieldType.DateTime) {\n // Try parsing the date without time\n date = DateUtility.fromFormat(value, configs[MetadataEntityFieldType.Date], 'utc', isCustomField);\n }\n\n const validator = field.required\n ? z.date()\n : z.date().optional().nullable();\n\n result = validator.parse(date?.toJSDate());\n\n break;\n }\n\n }\n\n return {\n value: result ?? value,\n success: true,\n } as MetadataImportValidatorResult\n\n } catch (error) {\n\n console.log(error);\n\n return {\n value: value,\n success: false,\n message: Enumerable.from(error?.issues).select((x: any) => x.message).toArray().join(', '),\n } as MetadataImportValidatorResult\n }\n}\n","\n\n\nimport { MetadataEntityData, MetadataEntityFieldData, MetadataEntityFieldType } from '../decorators';\nimport { MetadataImportValidationCell, MetadataImportValidationData, MetadataImportValidationRow } from './metadata.validation.data';\nimport { MetadataFieldMapper } from './metadata.field.mapper';\nimport { MetadataImportFieldBuilder } from './metadata.import.field.builder';\n\nimport * as Enumerable from 'linq';\nimport { ActivityEntityName } from '../../../entities';\nimport { SecurityModuleName } from '../../../security';\nimport { MetadataImportConfig } from './metadata.import.config';\n\nexport type MappingPreset = { source: string, destination: string };\n\nexport class MetadataImportData {\n\n public readonly destinationModule: SecurityModuleName;\n public readonly destinationEntity: ActivityEntityName;\n public readonly destinationFields: MetadataEntityFieldData[];\n\n public readonly mapper: MetadataFieldMapper;\n\n public readonly sourceRows: any[][];\n\n public readonly duplicateRowCount: number;\n public readonly duplicateHints: any[];\n\n\n public constructor(\n public readonly destination: MetadataEntityData,\n public readonly sourceHeaders: any[],\n public readonly sourceName: string,\n sourceRows: any[][],\n mappingPreset?: MappingPreset[],\n private config?: MetadataImportConfig\n ) {\n\n const deDupe = this.removeDuplicateRows(sourceRows);\n\n this.sourceRows = deDupe.rows;\n this.duplicateRowCount = deDupe.duplicateCount;\n this.duplicateHints = deDupe.duplicateHints;\n\n this.destinationModule = destination.module;\n this.destinationEntity = destination.type;\n this.destinationFields = MetadataImportFieldBuilder.getAvailableFields(this.destination);\n this.mapper = new MetadataFieldMapper(this.destinationFields);\n\n if (mappingPreset?.length) {\n\n const sourceHeaderMap = Enumerable.from(sourceHeaders).toDictionary(x => x);\n const destFieldMap = Enumerable.from(this.destinationFields).toDictionary(x => x.path, x => x);\n\n Enumerable\n .from(mappingPreset)\n .where(x => {\n return sourceHeaderMap.contains(x.source) && destFieldMap.contains(x.destination);\n })\n .forEach(x => {\n this.mapper.addMapping(x.source, destFieldMap.get(x.destination));\n });\n\n }\n\n }\n\n public toValidation(): MetadataImportValidationData {\n\n const indexes = [];\n\n const headers = Enumerable\n .from(this.sourceHeaders)\n .where(header => this.mapper.mappings.has(header))\n .select((header, i) => {\n indexes.push(i);\n return this.mapper.mappings.get(header);\n })\n .toArray();\n\n const actionHeader = {\n type: MetadataEntityFieldType._Action_,\n name: MetadataEntityFieldType._Action_\n } as MetadataEntityFieldData;\n\n const validation = new MetadataImportValidationData(\n this.sourceName,\n this.destinationModule,\n this.destinationEntity,\n [actionHeader, ...headers],\n this.config\n );\n\n Enumerable\n .from(this.sourceRows)\n .forEach((row) => {\n\n const cells = [\n new MetadataImportValidationCell('Include', actionHeader, this.config)\n ];\n\n Enumerable\n .from(this.sourceHeaders)\n .forEach((header, i) => {\n if (this.mapper.mappings.has(header)) {\n const headerField = this.mapper.mappings.get(header);\n cells.push(new MetadataImportValidationCell(row[i], headerField, this.config));\n }\n })\n\n const validationRow = new MetadataImportValidationRow(cells);\n validation.addRow(validationRow)\n\n });\n\n\n return validation;\n }\n\n private removeDuplicateRows(source: any[][]) {\n\n const duplicateHints = [];\n\n const rows = Enumerable\n .from(source)\n .select((row, index) => {\n const hash = row.join(':').toLowerCase();\n return {\n hash,\n index,\n row\n }\n })\n .groupBy(x => x.hash)\n .select(x => {\n const first = x.firstOrDefault();\n\n if (x.count() > 1) {\n duplicateHints.push(x.skip(1).select(d => `Row #${d.index + 1}, starting with: '${first?.row[0]}' was removed because it was an exact duplicate of Row #${first.index + 1}`).toArray());\n }\n\n return first;\n\n })\n .select(x => x.row)\n .toArray();\n\n return {\n duplicateCount: source?.length - rows?.length,\n duplicateHints,\n rows\n }\n }\n\n}","\nimport { MergeDatasetData, MergeFieldData, MergeGroup, MergeSchemaData, MergeSourceData } from './model'\nimport * as Enumerable from 'linq';\nimport { ActivityEntityName } from '../../../entities/shared/activity.entity.name';\nimport { getMergeSourceEntity } from './utilities';\n\nexport class MergeCatalog {\n\n private static readonly sources = new Map();\n private static readonly datasets = new Map();\n private static readonly schemas = new Map();\n\n public static registerDataset(dataset: MergeDatasetData) {\n\n const existingSources = this.sources.get(dataset.entity);\n\n dataset.sources = Enumerable\n .from(dataset.sources)\n //.select(x => ({ ...x, entity: dataset?.entity }))\n .select(x => ({ ...x, entity: getMergeSourceEntity(x.schema) }))\n .toArray();\n\n const sources = Enumerable\n .from(existingSources)\n .concat(dataset.sources)\n .distinct(x => x.name)\n .toArray();\n\n this.datasets.set(dataset.entity, dataset);\n this.sources.set(dataset.entity, sources);\n\n }\n\n public static getDataset(entity: ActivityEntityName): MergeDatasetData {\n return this.datasets.get(entity);\n }\n\n public static getSources(entity: ActivityEntityName): MergeGroup[] {\n\n const mainDataset = this.datasets.get(entity);\n\n const dependsOn = Enumerable\n .from(mainDataset?.dependsOn)\n .select(item => this.datasets.get(item))\n .selectMany(x => x.sources)\n .toArray();\n\n const all = Enumerable\n .from(mainDataset?.sources ?? [])\n .concat(dependsOn)\n .select(x => {\n\n const schema = Array.isArray(x?.schema)\n ? x?.schema[0] as MergeSchemaData\n : x?.schema;\n\n const fields = Enumerable\n .from(schema?.fields)\n .select(f => {\n return {\n ...f,\n name: [x?.name, f?.name]?.join('.'),\n source: x?.displayName\n } as MergeFieldData;\n })\n .toArray();\n\n return {\n name: x?.name,\n displayName: x?.displayName,\n fields: fields,\n entity: x?.entity\n } as MergeGroup\n })\n .toArray();\n\n all.push({\n name: 'Current User',\n displayName: 'Current User',\n fields: [],\n entity: ActivityEntityName.ContactEmployee\n })\n\n return all;\n\n }\n\n public static registerMergeSchema(schema: MergeSchemaData) {\n if (!schema.name) {\n return;\n }\n\n this.schemas.set(schema.name, schema);\n }\n\n public static getMergeSchema(schemaName: string): MergeSchemaData {\n return this.schemas.get(schemaName);\n }\n\n public static test() { }\n\n}","import { MergeDatasetData, MergeDatasetSource } from '../model';\n\nexport function getMergeDataset(target: MergeDatasetSource): MergeDatasetData {\n\n if (!target.__meta__) {\n target.__meta__ = {\n name: null,\n displayName: null,\n sources: []\n } as MergeDatasetData;\n }\n\n return target.__meta__;\n}\n\nexport function getDataset(target: any): MergeDatasetData {\n return getMergeDataset(target.prototype);\n}","import { MergeSchemaData, MergeSchemaSource } from '../model';\n\nexport function getMergeSchema(target: MergeSchemaSource): MergeSchemaData {\n\n if (!target.__meta__) {\n target.__meta__ = {\n name: null,\n displayName: null,\n fields: []\n } as MergeSchemaData;\n }\n\n return target.__meta__;\n}\n\nexport function getSchema(target: any): MergeSchemaData {\n return getMergeSchema(target.prototype);\n}\n","import { MergeSchemaData } from '../model';\n\nexport function getMergeSourceEntity(data: MergeSchemaData | MergeSchemaData[]) {\n return Array.isArray(data)\n ? data[0]?.entity\n : data?.entity;\n}","\nimport { MergeCatalog } from '../merge.catalog';\nimport { MergeDatasetData } from '../model';\nimport { getMergeDataset } from '../utilities';\nimport { titleize } from 'inflected';\n\nexport const MergeDataset = (options?: Partial): ClassDecorator => {\n return (target: Function) => {\n const meta = getMergeDataset(target.prototype);\n\n const dataset = {\n ...meta,\n name: target.name,\n displayName: titleize(target.name),\n\n ...options\n } as MergeDatasetData;\n\n MergeCatalog.registerDataset(dataset);\n };\n};\n","import { titleize } from 'inflected';\nimport { MergeFieldData } from '../model';\nimport { getMergeSchema } from '../utilities';\n\nexport const MergeField = (options?: Partial): PropertyDecorator => {\n return (target: any, propertyKey: string | symbol): void => {\n\n const meta = getMergeSchema(target);\n\n let displayName = titleize(propertyKey as string)\n if ((propertyKey as string).toLowerCase().endsWith('id')) {\n displayName = `${displayName} ID`;\n }\n\n const field = {\n name: propertyKey,\n displayName: displayName,\n hidden: (propertyKey as string).startsWith('_'),\n ...options\n } as MergeFieldData;\n\n meta.fields.push(field);\n\n };\n};","\n\nimport { titleize } from 'inflected';\nimport { MergeSchemaData } from '../model';\nimport { getMergeSchema } from '../utilities/get.merge.schema';\nimport { MergeCatalog } from '../merge.catalog';\n\nexport const MergeSchema = (options?: Partial): ClassDecorator => {\n return (target: Function) => {\n const meta = getMergeSchema(target.prototype);\n meta.entity = options?.entity;\n meta.name = options?.name;\n\n MergeCatalog.registerMergeSchema(meta);\n // meta.displayName = titleize(target.prototype.name)\n\n // const schema = {\n // name: target.prototype.name,\n // displayName: titleize(target.prototype.name),\n // } as MergeSchemaData;\n\n\n };\n};","import { titleize } from 'inflected';\nimport { MergeSourceData } from '../model';\nimport { getMergeDataset } from '../utilities';\n\nexport const MergeSource = (options?: Partial): PropertyDecorator => {\n return (target: any, propertyKey: string | symbol): void => {\n\n const meta = getMergeDataset(target);\n\n const source = {\n name: propertyKey,\n displayName: titleize(propertyKey as string),\n\n ...options\n } as MergeSourceData;\n\n meta.sources.push(source)\n\n };\n};","import { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { ActivityEntityName, Entity } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Contact\n})\nexport class AccountContactMergeData {\n\n @MergeField()\n firstName: string;\n\n @MergeField()\n lastName: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n email: string;\n\n @MergeField()\n mobile: string;\n\n @MergeField()\n workPhone: string;\n\n @MergeField()\n jobTitle: string;\n\n @MergeField({\n hidden: true\n })\n phone: string;\n\n parents: Entity[]\n\n sites: Entity[]\n}\n\nexport const AccountContactMergeSchema = getSchema(AccountContactMergeData);","import { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Account\n})\nexport class AccountMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n legalName: string;\n\n @MergeField()\n phone: string;\n\n @MergeField()\n email: string;\n\n @MergeField({ hidden: true })\n primaryContactId;\n\n @MergeField({ hidden: true })\n primarySiteId: string;\n\n @MergeField()\n taxId: string\n\n customFields: any;\n}\n\nexport const AccountMergeSchema = getSchema(AccountMergeData);\n\nexport const contactMergeDataFromAccount = (account: AccountMergeData) => {\n return {\n _id: account._id,\n name: account.name,\n phone: account.phone,\n mobile: null,\n email: account.email,\n legalName: account.legalName\n };\n};","import { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Site\n})\nexport class AccountSiteMergeData {\n\n @MergeField()\n street: string;\n\n @MergeField()\n suburb: string;\n\n @MergeField()\n state: string;\n\n @MergeField()\n postcode: string;\n\n @MergeField()\n fullAddress: string;\n\n @MergeField()\n contactName: string;\n\n @MergeField()\n contactPhone: string;\n\n @MergeField()\n contactEmail: string;\n\n\n}\n\nexport const AccountSiteMergeSchema = getSchema(AccountSiteMergeData);","import { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName, ActivityKind } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Activity,\n name: 'ActivityMergeSchema',\n})\nexport class ActivityMergeData {\n @MergeField()\n note: string;\n\n @MergeField()\n createdBy: string;\n\n @MergeField()\n createdDate: string;\n\n // @MergeField()\n // attachments: AttachmentMergeData[];\n\n @MergeField({\n arraySchemaName: 'AttachmentMergeSchema',\n ignoreFields: ['thumbnail', 'shared', 'tags']\n })\n attachments: AttachmentMergeData[] = [];\n\n kind: ActivityKind;\n}\n\nexport const ActivityMergeSchema = getSchema(ActivityMergeData);\n\n@MergeSchema({\n entity: ActivityEntityName.Attachment,\n name: 'AttachmentMergeSchema',\n})\nexport class AttachmentMergeData {\n @MergeField()\n title: string;\n\n @MergeField()\n path: string;\n\n @MergeField()\n thumbnail: string;\n\n @MergeField()\n type: string;\n\n @MergeField({\n hidden: true\n })\n data: string;\n\n @MergeField()\n shared?: string;\n\n @MergeField()\n tags?: string;\n}\n\nexport const AttachmentMergeSchema = getSchema(AttachmentMergeData);\n\n@MergeSchema({\n entity: ActivityEntityName.Attachment,\n name: 'AttachmentsMergeSchema',\n})\nexport class AttachmentsMergeData {\n @MergeField({\n arraySchemaName: 'AttachmentMergeSchema',\n ignoreFields: ['thumbnail']\n })\n attachments: AttachmentMergeData[] = [];\n}\n\nexport const AttachmentsMergeSchema = getSchema(AttachmentsMergeData);","import { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { ActivityEntityName, ContactEntity, Entity } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Allocation\n})\nexport class AllocationMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n startDate: string;\n\n @MergeField()\n endDate: string;\n\n @MergeField()\n dateCompleted: string;\n\n @MergeField()\n completedNote: string;\n\n @MergeField()\n note: string;\n\n @MergeField()\n status: string;\n\n @MergeField()\n type: string;\n\n @MergeField()\n bookingStatus: string;\n\n @MergeField()\n source: string;\n\n job?: Entity;\n workOrder?: Entity;\n opportunity?: Entity;\n resource?: ContactEntity;\n}\n\nexport const AllocationMergeSchema = getSchema(AllocationMergeData);","import { ActivityEntityName, AssetTypeEntity, EntitySubStatus } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\n\n@MergeSchema({\n entity: ActivityEntityName.Asset,\n name: 'AssetMergeSchema',\n})\nexport class AssetMergeData {\n @MergeField()\n assetNumber: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n assetType: string;\n\n @MergeField()\n lastServicedJob: string;\n\n @MergeField()\n lastServiceOn: string;\n\n @MergeField()\n status?: string;\n\n @MergeField()\n createdAt: string;\n\n @MergeField()\n childrenCount: number;\n}\n\nexport const AssetMergeSchema = getSchema(AssetMergeData);","\nimport { ActivityEntityName } from '../../../../entities';\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\n\n@MergeSchema({\n entity: ActivityEntityName.Site\n})\n\nexport class BasicSiteMergeData {\n\n @MergeField()\n street: string;\n\n @MergeField()\n suburb: string;\n\n @MergeField()\n state: string;\n\n @MergeField()\n postcode: string;\n\n @MergeField()\n postalCode: string;\n\n @MergeField()\n county: string;\n\n @MergeField()\n country: string;\n\n @MergeField()\n fullAddress: string;\n\n customFields?: any;\n}\n\nexport const BasicSiteMergeSchema = getSchema(BasicSiteMergeData);","import { ActivityEntityName } from '../../../../entities';\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\n\n@MergeSchema({\n entity: ActivityEntityName.Company\n})\nexport class CompanyMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n taxId: string;\n\n @MergeField()\n email: string;\n\n @MergeField()\n phone: string;\n\n @MergeField()\n street: string;\n\n @MergeField()\n suburb: string;\n\n @MergeField()\n state: string;\n\n @MergeField()\n postcode: string;\n\n @MergeField()\n fullAddress: string;\n\n @MergeField()\n accountNumber: string;\n\n @MergeField()\n branchNumber: string;\n\n @MergeField()\n logo: string;\n\n @MergeField({\n displayName: \"Logo Image small (only for html)\"\n })\n logoImageSmall: string;\n\n @MergeField({\n displayName: \"Logo Image Large (only for html)\"\n })\n logoImageLarge: string;\n}\n\nexport const CompanyMergeSchema = getSchema(CompanyMergeData);","\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.ContactLink,\n name: 'ContactLinkMergeSchema'\n})\nexport class ContactLinkMergeData {\n\n entityId: string;\n entityType: string;\n\n @MergeField()\n contactId?: string;\n\n @MergeField()\n contactType?: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n email: string;\n\n @MergeField()\n phone: string;\n\n @MergeField()\n mobile: string;\n\n @MergeField()\n tags: string;\n\n}\n\nexport const ContactLinkMergeSchema = getSchema(ContactLinkMergeData);","import { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Contact,\n name: 'ContactMergeSchema'\n})\nexport class ContactMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n phone: string;\n\n @MergeField()\n mobile: string;\n\n @MergeField()\n email: string;\n\n}\n\nexport const ContactMergeSchema = getSchema(ContactMergeData);","import { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Employee,\n name: 'EmployeeMergeSchema',\n})\nexport class EmployeeMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n firstName: string;\n\n @MergeField()\n lastName: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n mobile: string;\n\n @MergeField()\n workPhone: string;\n\n @MergeField()\n email: string;\n\n @MergeField()\n jobTitle: string;\n\n @MergeField()\n tags: string;\n\n customFields: any;\n}\n\nexport const EmployeeMergeSchema = getSchema(EmployeeMergeData);\n\nexport const contactMergeDataFromEmployee = (employee: EmployeeMergeData) => {\n return {\n _id: employee._id,\n name: employee.name,\n phone: employee.workPhone,\n mobile: employee.mobile,\n email: employee.email\n };\n}","import { ActivityEntityName } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { ContactMergeData } from './contact.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.Item,\n displayName: \"Financial Item\",\n name: \"FinancialItemLineMergeDataSchema\"\n})\nexport class FinancialItemLineMergeData {\n\n @MergeField()\n name: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n longDescription?: string;\n\n @MergeField()\n location?: string;\n\n @MergeField()\n note?: string;\n\n @MergeField()\n codeUoM: string;\n\n @MergeField()\n quantity: string;\n\n @MergeField()\n buyPrice?: string;\n\n @MergeField()\n sellPrice?: string;\n\n @MergeField()\n adjustment?: string;\n\n @MergeField()\n adjustmentType?: string;\n\n @MergeField()\n totalBuy?: string;\n\n @MergeField()\n totalSellEx?: string;\n\n @MergeField()\n totalSellInc?: string;\n\n @MergeField()\n totalAdjustment?: string;\n\n @MergeField()\n totalTax?: string;\n\n @MergeField()\n saleTaxRate?: string;\n\n @MergeField()\n saleGLCode?: string;\n}\n\nexport const FinancialItemLineMergeDataSchema = getSchema(FinancialItemLineMergeData);","import { ActivityEntityName } from '../../../../entities';\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\n\n@MergeSchema({\n entity: ActivityEntityName.Invoice\n})\nexport class InvoiceAccountMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n friendlyName: string;\n\n @MergeField()\n type: string;\n\n @MergeField()\n phone: string;\n\n @MergeField()\n email: string;\n\n @MergeField()\n contactName: string;\n\n @MergeField({ hidden: true })\n contactId: string;\n\n @MergeField()\n taxId: string;\n\n}\n\nexport const InvoiceAccountMergeSchema = getSchema(InvoiceAccountMergeData);","import { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\nimport { ActivityMergeData } from './activity.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.Invoice,\n name: \"InvoiceItemMergeDataSchema\"\n})\nexport class InvoiceItemMergeData {\n\n @MergeField()\n name: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n codeUoM: string;\n\n @MergeField()\n quantity: number;\n\n @MergeField()\n price: string;\n\n @MergeField()\n subTotal: string;\n\n @MergeField()\n tax: string;\n\n @MergeField()\n total: string;\n\n @MergeField()\n location: string;\n\n @MergeField()\n notes: string;\n\n @MergeField()\n status: string;\n\n @MergeField()\n invoicingStatus: string;\n}\n\nexport const InvoiceItemMergeDataSchema = getSchema(InvoiceItemMergeData);\n\n@MergeSchema({\n entity: ActivityEntityName.Invoice\n})\nexport class InvoiceMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n invoiceNumber: string;\n\n @MergeField()\n status: string;\n\n @MergeField()\n invoiceDate: string;\n\n @MergeField()\n dueDate: string;\n\n @MergeField()\n generatedDate?: string;\n\n @MergeField()\n lastIssuedDate?: string;\n\n @MergeField()\n lastPaymentDate?: string;\n\n @MergeField()\n customerReference: string;\n\n @MergeField()\n notes: string;\n\n @MergeField()\n taxInclusiveOption: string;\n\n @MergeField()\n taxRate: string;\n\n @MergeField()\n terms: string;\n\n @MergeField()\n timezone?: string;\n\n // @MergeField()\n // source?: string;\n\n @MergeField()\n createdBy: string;\n\n @MergeField()\n createdAt?: string;\n\n @MergeField()\n updatedAt?: string;\n\n @MergeField()\n updatedBy?: string;\n\n @MergeField()\n version?: string;\n\n @MergeField()\n subTotal?: string;\n\n @MergeField()\n tax?: string;\n\n @MergeField()\n total?: string;\n\n @MergeField()\n amountPaid?: string;\n\n @MergeField()\n creditAmount?: string;\n\n @MergeField()\n roundingAmount?: string;\n\n @MergeField()\n outstandingAmount?: string;\n\n @MergeField()\n jobNumber: string;\n\n @MergeField()\n workOrderNumber: string;\n\n @MergeField({ arraySchemaName: \"InvoiceItemMergeDataSchema\" })\n lines: InvoiceItemMergeData[]\n\n @MergeField({ arraySchemaName: \"InvoiceItemMergeDataSchema\" })\n invoiceLinesExcludeZero: InvoiceItemMergeData[];\n\n @MergeField({ arraySchemaName: \"InvoiceItemMergeDataSchema\" })\n invoiceLinesExZeroByLoc: InvoiceItemMergeData[];\n\n @MergeField({\n arraySchemaName: \"InvoiceItemMergeDataSchema\",\n includeFields: [\"name\", \"description\", \"quantity\", \"price\", \"location\", \"notes\"]\n })\n jobLinesBillable: InvoiceItemMergeData[];\n\n linesNotZero: InvoiceItemMergeData[];\n}\n\nexport const InvoiceMergeSchema = getSchema(InvoiceMergeData);","import { ActivityEntityName } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { StageMergeData } from './stage.merge.data';\nimport { StageItemMergeData } from './stage.items.merge.data';\nimport { AssetMergeData } from './asset.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.Asset,\n})\nexport class JobAssetsMergeData {\n @MergeField({\n arraySchemaName: 'AssetMergeSchema'\n })\n assets: AssetMergeData[] = [];\n}\n\nexport const JobAssetsMergeSchema = getSchema(JobAssetsMergeData)","import { ActivityEntityName } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { StageMergeData } from './stage.merge.data';\nimport { StageItemMergeData } from './stage.items.merge.data';\nimport { AssetMergeData } from './asset.merge.data';\nimport { ContactLinkMergeData } from './contact.link.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.ContactLink,\n})\nexport class JobContactLinksMergeData {\n @MergeField({\n arraySchemaName: 'ContactLinkMergeSchema'\n })\n contacts: ContactLinkMergeData[] = [];\n}\n\nexport const JobContactLinksMergeSchema = getSchema(JobContactLinksMergeData)","\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName, WorkOrder } from '../../../../entities';\nimport { ContactMergeData } from './contact.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.Job\n})\nexport class JobMergeData {\n\n @MergeField()\n _id: string = ''\n\n @MergeField()\n jobNumber: string;\n\n @MergeField()\n status: string;\n\n // @MergeField()\n // name: string;\n\n @MergeField()\n mode: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n customerPO: string;\n\n @MergeField()\n customerWO: string;\n\n @MergeField()\n type: string;\n\n @MergeField()\n priority: string;\n\n @MergeField()\n tags: string;\n\n @MergeField()\n zones: string;\n\n @MergeField()\n startDate: string;\n\n @MergeField()\n dueDate: string;\n\n @MergeField()\n completedDate: string;\n\n @MergeField()\n finalisedDate: string = ''\n\n @MergeField()\n totalSell: string = ''\n\n @MergeField()\n totalBuy: string = ''\n\n @MergeField()\n pricebook: string = ''\n\n @MergeField()\n timezone: string = ''\n\n @MergeField()\n nextAppointmentDate: string = ''\n\n @MergeField()\n nextAppointmentDateTime: string = ''\n\n @MergeField()\n nextAppointmentResourceName: string = ''\n\n workOrders: WorkOrder[];\n\n [key: string]: any;\n}\n\nexport const JobMergeSchema = getSchema(JobMergeData);","\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Site\n})\nexport class JobSiteMergeData {\n\n @MergeField()\n street: string;\n\n @MergeField()\n suburb: string;\n\n @MergeField()\n state: string;\n\n @MergeField()\n postcode: string;\n\n @MergeField()\n fullAddress: string;\n\n @MergeField()\n contactName: string;\n\n @MergeField(\n {\n displayName: \"Contact Phone (Deprecated: use contactHomePhone)\"\n }\n )\n contactPhone: string;\n\n @MergeField()\n contactMobile: string;\n\n @MergeField()\n contactHomePhone: string;\n\n @MergeField()\n contactWorkPhone: string;\n\n @MergeField()\n contactEmail: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n country: string;\n\n @MergeField()\n county: string;\n\n @MergeField()\n postalCode: string;\n\n @MergeField()\n placeId: string;\n\n siteId: string;\n customFields: any;\n}\n\nexport const JobSiteMergeSchema = getSchema(JobSiteMergeData);","import { ActivityEntityName } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { StageIncludeItemsMergeData } from './stage.include.items.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.JobStages\n})\nexport class JobStagesMergeData {\n\n @MergeField({\n arraySchemaName: 'StageIncludeItemsMergeDataSchema'\n })\n stages: StageIncludeItemsMergeData[] = [];\n\n @MergeField()\n itemCount: number;\n}\n\nexport const JobStagesMergeDataSchema = getSchema(JobStagesMergeData);","import { getSchema, MergeField, MergeSchema } from '../../decorators';\n\n@MergeSchema()\nexport class LeadAccountMergeData {\n\n @MergeField()\n type: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n phone: string;\n\n @MergeField()\n email: string;\n}\n\nexport const LeadAccountMergeSchema = getSchema(LeadAccountMergeData);","import { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema()\nexport class LeadContactMergeData {\n\n @MergeField()\n firstName: string;\n\n @MergeField()\n lastName: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n email: string;\n\n @MergeField()\n mobile: string;\n\n @MergeField()\n workPhone: string;\n\n @MergeField()\n jobTitle: string;\n}\n\nexport const LeadContactMergeSchema = getSchema(LeadContactMergeData);","import { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Lead\n})\nexport class LeadMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n stage: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n source: string;\n\n @MergeField()\n tags: string;\n\n @MergeField()\n createdAt: string;\n\n @MergeField()\n lastActivity: string;\n\n @MergeField()\n jobType: string;\n\n\n}\n\nexport const LeadMergeSchema = getSchema(LeadMergeData);","import { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Opportunity\n})\nexport class OpportunityMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n opportunityNumber: string;\n\n @MergeField()\n stage: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n amount: string;\n\n @MergeField()\n probability: string;\n\n @MergeField()\n source: string;\n\n @MergeField()\n jobType: string;\n\n @MergeField()\n tags: string;\n\n @MergeField()\n createdAt: string;\n\n @MergeField()\n expectedClose: string;\n\n @MergeField()\n lastActivity: string;\n\n @MergeField()\n timezone: string;\n\n [key: string]: string;\n}\n\nexport const OpportunityMergeSchema = getSchema(OpportunityMergeData);","import { ActivityEntityName, PurchaseOrderDeliverOptions } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\n\n@MergeSchema({\n entity: ActivityEntityName.PurchaseOrder,\n name: 'PurchaseOrderMergeSchema',\n})\nexport class PurchaseOrderMergeData {\n @MergeField()\n poNumber?: string;\n\n @MergeField()\n poDate?: string;\n\n @MergeField()\n comment?: string;\n\n @MergeField()\n status: string;\n\n @MergeField()\n createdBy?: string;\n\n @MergeField()\n chargeable: string;\n\n @MergeField()\n taxRate?: string;\n\n @MergeField()\n taxInclusiveOption?: string;\n\n @MergeField()\n subTotal?: string;\n\n @MergeField()\n total?: string;\n\n @MergeField()\n tax?: string;\n\n @MergeField()\n createdAt?: string;\n\n @MergeField()\n updatedAt?: string;\n\n @MergeField()\n job?: string;\n\n // @MergeField({ arraySchemaName: \"PurchaseOrderLineMergeSchema\" })\n // lines: PurchaseOrderLinesMergeData[]\n}\n\nexport const PurchaseOrderMergeSchema = getSchema(PurchaseOrderMergeData);\n\n@MergeSchema({\n entity: ActivityEntityName.PurchaseOrderLine,\n name: 'PurchaseOrderLineMergeSchema',\n})\nexport class PurchaseOrderLineMergeData {\n @MergeField()\n name?: string;\n\n @MergeField()\n description?: string;\n\n @MergeField()\n quantity?: string;\n\n @MergeField()\n price?: string;\n\n @MergeField()\n tax: string;\n\n @MergeField()\n subTotal: string;\n\n @MergeField()\n total: string;\n\n @MergeField()\n codeUoM?: string;\n\n @MergeField()\n glCode?: string;\n\n @MergeField()\n taxRate?: string;\n}\n\nexport const PurchaseOrderLineMergeSchema = getSchema(PurchaseOrderLineMergeData);\n\n@MergeSchema({\n entity: ActivityEntityName.PurchaseOrderLines,\n})\nexport class PurchaseOrderLinesMergeData {\n @MergeField(\n {\n displayName: \"Purchase Order Lines\",\n arraySchemaName: 'PurchaseOrderLineMergeSchema'\n }\n )\n lines?: PurchaseOrderLineMergeData[];\n}\n\nexport const PurchaseOrderLinesMergeSchema = getSchema(PurchaseOrderLinesMergeData);\n\n@MergeSchema({\n entity: ActivityEntityName.PurchaseOrderSupplier,\n})\nexport class PurchaseOrderSupplierMergeData {\n @MergeField()\n name?: string;\n\n @MergeField()\n phone?: string;\n\n @MergeField()\n street1?: string;\n\n @MergeField()\n street2?: string;\n\n @MergeField()\n suburb?: string;\n\n @MergeField()\n state?: string;\n\n @MergeField()\n country?: string;\n\n @MergeField()\n postcode?: string;\n\n @MergeField()\n markupPercent?: string;\n\n @MergeField()\n email?: string;\n\n @MergeField()\n contactName?: string;\n}\n\nexport const PurchaseOrderSupplierMergeSchema = getSchema(PurchaseOrderSupplierMergeData);\n\n@MergeSchema({\n entity: ActivityEntityName.PurchaseOrderDeliveryAddress\n})\nexport class PurchaseOrderDeliveryAddressMergeData {\n\n @MergeField()\n street1: string;\n\n @MergeField()\n street2: string;\n\n @MergeField()\n suburb: string;\n\n @MergeField()\n state: string;\n\n @MergeField()\n postcode: string;\n\n @MergeField()\n county: string;\n\n @MergeField()\n country: string;\n\n @MergeField()\n fullAddress: string;\n\n @MergeField()\n contactName: string;\n\n @MergeField()\n contactPhone: string;\n\n @MergeField()\n deliveryOptions: PurchaseOrderDeliverOptions\n}\n\nexport const PurchaseOrderDeliveryAddressMergeSchema = getSchema(PurchaseOrderDeliveryAddressMergeData);","\nimport { ActivityEntityName, Entity, } from '../../../../entities';\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\n\n\nexport class QuoteProItemMergeData {\n\n @MergeField()\n name: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n longDescription?: string;\n\n @MergeField()\n location?: string;\n\n @MergeField()\n note?: string;\n\n @MergeField()\n codeUoM: string;\n\n @MergeField()\n quantity: string;\n\n @MergeField()\n buyPrice: string;\n\n @MergeField()\n sellPrice: string;\n\n @MergeField()\n adjustment: string;\n\n @MergeField()\n adjustmentType: string;\n\n @MergeField()\n totalBuy: string;\n\n @MergeField()\n totalSellEx: string;\n\n @MergeField()\n totalSellInc: string;\n\n @MergeField()\n totalAdjustment: string;\n\n @MergeField()\n totalTax: string;\n\n}\n\nexport class QuoteProSectionMergeData {\n\n @MergeField()\n name: string;\n\n @MergeField()\n totalBuy: string;\n\n @MergeField()\n totalSellEx: string;\n\n @MergeField()\n totalSellInc: string;\n\n @MergeField()\n totalAdjustment: string;\n\n @MergeField()\n totalTax: string;\n\n @MergeField()\n items: QuoteProItemMergeData[];\n\n @MergeField()\n description: string;\n\n costOnly?: boolean;\n}\n\n@MergeSchema({\n entity: ActivityEntityName.Quote\n})\nexport class QuoteProMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n quoteNumber: string;\n\n @MergeField()\n status: string;\n\n @MergeField()\n date: string;\n\n @MergeField()\n expiryDate: string;\n\n @MergeField()\n createdBy: string;\n\n @MergeField()\n createdDate: string;\n\n @MergeField()\n name: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n fullAddress: string;\n\n @MergeField()\n totalBuy: string;\n\n @MergeField()\n totalSellEx: string;\n\n @MergeField()\n totalSellInc: string;\n\n @MergeField()\n totalAdjustment: string;\n\n @MergeField()\n totalTax: string;\n\n @MergeField()\n prepaymentEx: string;\n\n @MergeField()\n prepaymentInc: string;\n\n @MergeField()\n prepaymentTax: string;\n\n @MergeField()\n terms: string;\n\n theme: Entity;\n\n @MergeField()\n sections: QuoteProSectionMergeData[];\n\n @MergeField({\n displayName: \"Customer Reference\"\n })\n customerRef: string;\n\n @MergeField({\n displayName: \"PO Number\"\n })\n poNumber: string;\n\n @MergeField({\n displayName: \"Accepted By\"\n })\n acceptor: string;\n\n @MergeField()\n signature: string;\n\n @MergeField()\n /** description */\n topSection: string;\n\n /** term */\n bottomSection: string;\n\n @MergeField({\n displayName: \"Accepted Date\"\n })\n acceptedDate: string\n}\n\nexport const QuoteProMergeSchema = getSchema(QuoteProMergeData);","import { ActivityEntityName } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { FinancialItemLineMergeData } from './financial.item.line.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.SaleOrderItems,\n name: 'SaleOrderItemsMergeDataSchema',\n})\n\nexport class SaleOrderItemsMergeData {\n @MergeField({\n arraySchemaName: 'FinancialItemLineMergeDataSchema'\n })\n items: FinancialItemLineMergeData[] = [];\n}\n\nexport const SaleOrderItemsMergeDataSchema = getSchema(SaleOrderItemsMergeData)","import { ActivityEntityName, SaleOrderStatus } from '../../../../entities';\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\n\n@MergeSchema({\n entity: ActivityEntityName.SaleOrder,\n displayName: \"Sale Order\",\n})\nexport class SaleOrderMergeData {\n @MergeField()\n _id: string;\n\n @MergeField()\n name: string;\n\n @MergeField({\n displayName: \"Sale Order Number\"\n })\n saleOrderNumber: string;\n\n @MergeField({\n displayName: \"Customer Reference\"\n })\n customerRef: string;\n\n @MergeField()\n date: string;\n\n @MergeField()\n expiryDate: string;\n\n @MergeField()\n totalEx?: string;\n\n @MergeField()\n totalInc?: string;\n\n @MergeField()\n totalTax?: string;\n\n @MergeField()\n status: SaleOrderStatus;\n\n @MergeField()\n createdBy?: string;\n\n @MergeField()\n createdDate?: string;\n\n @MergeField()\n jobNumber: string;\n\n @MergeField()\n workOrderNumber: string;\n}\n\nexport const SaleOrderMergeSchema = getSchema(SaleOrderMergeData);","import { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName, EmbeddedCode } from '../../../../entities';\nimport { EmployeeMergeData } from './employee.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.WorkOrder,\n name: 'StageMergeSchema',\n})\nexport class StageMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField({ hidden: true })\n jobId: string;\n\n @MergeField({ displayName: 'Stage Number' })\n workOrderNumber: string;\n\n @MergeField()\n sortOrder: string = '';\n\n @MergeField()\n version: number;\n\n @MergeField()\n name: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n status: string;\n\n @MergeField()\n createdAt: string;\n\n @MergeField()\n startDate: string;\n\n @MergeField()\n dueDate: string;\n\n @MergeField()\n completedDate: string;\n\n @MergeField()\n finalisedDate: string;\n\n @MergeField()\n completedSignature: string;\n\n @MergeField()\n completedSignatureName: string;\n\n @MergeField()\n completedNote: string;\n\n @MergeField()\n finalisedNote: string;\n\n @MergeField()\n pricebook: string;\n\n @MergeField()\n totalBuyPrice: string;\n\n @MergeField()\n totalSellPrice: string;\n\n @MergeField()\n workCategory: string;\n\n @MergeField()\n tags: string;\n\n @MergeField()\n systemTags: string;\n\n @MergeField({\n arraySchemaName: \"EmployeeMergeSchema\",\n })\n resources: EmployeeMergeData[];\n\n @MergeField()\n timezone: string;\n\n @MergeField()\n nextAppointmentDate: string = ''\n\n @MergeField()\n nextAppointmentDateTime: string = ''\n\n @MergeField()\n nextAppointmentResourceName: string = ''\n\n customFields: any;\n codes?: EmbeddedCode[];\n}\n\nexport const StageMergeSchema = getSchema(StageMergeData);\n","import { ActivityEntityName } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { StageMergeData } from './stage.merge.data';\nimport { StageItemMergeData } from './stage.items.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.WorkOrder,\n name: 'StageIncludeItemsMergeDataSchema',\n})\nexport class StageIncludeItemsMergeData extends StageMergeData {\n @MergeField({\n arraySchemaName: 'StageItemsMergeSchema'\n })\n items: StageItemMergeData[] = [];\n}\n\nexport const StageIncludeItemsMergeDataSchema = getSchema(StageIncludeItemsMergeData)","\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Code,\n name: 'StageItemsMergeSchema',\n})\nexport class StageItemMergeData {\n\n @MergeField()\n _id: string;\n\n @MergeField()\n name?: string;\n\n @MergeField()\n source?: string;\n\n @MergeField()\n buyPrice?: number = 0\n\n @MergeField()\n sellPrice?: number = 0\n\n @MergeField()\n customBuyPrice?: boolean;\n\n @MergeField()\n customSellPrice?: boolean;\n\n @MergeField()\n status?: string;\n\n @MergeField()\n invoicingStatus: string;\n\n @MergeField()\n location?: string;\n\n @MergeField()\n note?: string;\n\n @MergeField()\n codeUoM?: string;\n\n @MergeField()\n baseQuantity?: number;\n\n @MergeField()\n suppliedBySubcontractor?: boolean;\n\n @MergeField()\n upc?: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n longDescription?: string;\n\n @MergeField()\n quantity?: number;\n\n @MergeField({\n displayName: 'Sub Total Buy'\n })\n subTotalBuy: string;\n\n @MergeField({\n displayName: 'Sub Total Sell'\n })\n subTotalSell: string;\n\n @MergeField()\n sellTax?: string;\n\n @MergeField()\n totalSellIncTax?: string;\n\n @MergeField()\n completed?: boolean;\n\n @MergeField()\n itemTaskCompleted?: boolean;\n\n @MergeField()\n comply?: string;\n\n rawValues?: any\n}\n\nexport const StageItemsMergeSchema = getSchema(StageItemMergeData);\n\n","import { ActivityEntityName, Entity } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\n\n@MergeSchema({\n entity: ActivityEntityName.Contact\n})\nexport class ContactFullMergeData {\n @MergeField()\n firstName: string;\n\n @MergeField()\n lastName: string;\n\n @MergeField()\n email: string;\n\n @MergeField()\n mobile: string;\n\n @MergeField()\n jobTitle: string;\n\n @MergeField({\n displayName: \"Full name\"\n })\n name: string;\n\n @MergeField({\n displayName: \"Phone (home)\"\n })\n phone: string;\n\n @MergeField({\n displayName: \"Phone (work)\"\n })\n workPhone: string;\n\n parents: Entity[]\n\n sites: Entity[]\n}\n\nexport const ContactFullMergeSchema = getSchema(ContactFullMergeData);","\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName, Entity } from '../../../../entities';\n\n@MergeSchema({\n entity: ActivityEntityName.Site\n})\nexport class SiteMergeData {\n @MergeField({\n displayName: 'Site Name'\n })\n name: string;\n\n @MergeField()\n fullAddress: string;\n\n @MergeField()\n phone: string;\n\n @MergeField()\n email: string;\n\n @MergeField({\n source: 'Reference (Place Id)'\n })\n placeId: string;\n\n customFields: any;\n manager: Entity;\n owner: Entity;\n contact: Entity;\n parent: Entity;\n}\n\nexport const SiteMergeSchema = getSchema(SiteMergeData);","import { ActivityEntityName } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\n\n@MergeSchema({\n entity: ActivityEntityName.Utility\n})\nexport class OtherMergeData {\n @MergeField()\n documentGeneratedDate: string;\n}\n\nexport const OtherMergeDataSchema = getSchema(OtherMergeData);","import { ActivityEntityName } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { ActivityMergeData, AttachmentMergeData } from './activity.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.Invoice,\n name: 'InvoiceAttachmentsMergeDataSchema',\n})\nexport class InvoiceAttachmentsMergeData {\n @MergeField({\n arraySchemaName: 'AttachmentMergeSchema',\n ignoreFields: ['thumbnail', 'shared', 'tags']\n })\n mediaAttachments: AttachmentMergeData[] = [];\n\n @MergeField({\n arraySchemaName: 'AttachmentMergeSchema',\n ignoreFields: ['thumbnail', 'shared', 'tags']\n })\n fileAttachments: AttachmentMergeData[] = [];\n}\n\nexport const InvoiceAttachmentsMergeDataSchema = getSchema(InvoiceAttachmentsMergeData)\n\n@MergeSchema({\n entity: ActivityEntityName.Invoice,\n})\nexport class InvoiceActivitiesMergeData {\n @MergeField({\n arraySchemaName: 'ActivityMergeSchema'\n })\n activities: ActivityMergeData[] = [];\n}\n\nexport const InvoiceActivitiesMergeDataSchema = getSchema(InvoiceActivitiesMergeData)","\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\nimport { ActivityEntityName } from '../../../../entities';\nimport { StageItemMergeData } from './stage.items.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.Code,\n name: 'JobItemMergeDataSchema',\n})\nexport class JobItemMergeData extends StageItemMergeData {\n\n @MergeField()\n technician: string;\n\n @MergeField()\n stageNumber: string;\n\n @MergeField()\n stageName: string;\n}\n\nexport const JobItemMergeDataSchema = getSchema(JobItemMergeData);\n\n","import { ActivityEntityName } from '../../../../entities';\nimport { MergeField, MergeSchema, getSchema } from '../../decorators';\nimport { JobItemMergeData } from './job.item.merge.data';\n\n@MergeSchema({\n entity: ActivityEntityName.Job,\n})\nexport class JobIncludeItemsMergeData {\n @MergeField({\n arraySchemaName: 'JobItemMergeDataSchema',\n })\n items: JobItemMergeData[] = [];\n\n @MergeField()\n itemCount: number;\n}\n\nexport const JobIncludeItemsMergeDataSchema = getSchema(JobIncludeItemsMergeData)","import { ActivityEntityName } from '@jms/model/entities';\nimport { getSchema, MergeField, MergeSchema } from '../../decorators';\n\n@MergeSchema({\n entity: ActivityEntityName.BulkInvoiceJob,\n name: 'BulkInvoiceJobSchema',\n})\nexport class BulkInvoiceJobMergeData {\n\n @MergeField()\n jobNumber: string;\n\n @MergeField({\n displayName: \"Customer WO\"\n })\n customerWO: string;\n\n @MergeField()\n type: string;\n\n @MergeField()\n description: string;\n\n @MergeField()\n addressName: string;\n\n @MergeField()\n contractors: string;\n\n @MergeField()\n resources: string;\n\n @MergeField()\n appointments: string;\n}\n\nexport const BulkInvoiceJobMergeSchema = getSchema(BulkInvoiceJobMergeData);","import { ActivityEntityName } from '../../../../entities/shared/activity.entity.name';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { AllocationMergeData, AllocationMergeSchema } from '../data/allocation.merge.data';\nimport { ContactMergeData, ContactMergeSchema } from '../data/contact.merge.data';\n\n@MergeDataset({\n entity: ActivityEntityName.Allocation,\n dependsOn: [\n ActivityEntityName.Job,\n ActivityEntityName.WorkOrder\n ]\n})\nexport class AllocationMergeDataset {\n\n @MergeSource({\n schema: AllocationMergeSchema\n })\n allocation: AllocationMergeData;\n\n @MergeSource({\n schema: ContactMergeSchema\n })\n allocationResource: ContactMergeData;\n\n}","\nimport { ActivityEntityName, Entity } from '../../../../entities';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { ActivityMergeSchema, ActivityMergeData, AttachmentMergeSchema, AttachmentMergeData } from '../data/activity.merge.data';\nimport { BasicSiteMergeSchema, BasicSiteMergeData } from '../data/basic.site.merge.data';\nimport { CompanyMergeSchema, CompanyMergeData } from '../data/company.merge.data';\nimport { InvoiceAccountMergeSchema, InvoiceAccountMergeData } from '../data/invoice.account.merge.data';\nimport { InvoiceActivitiesMergeDataSchema, InvoiceActivitiesMergeData, InvoiceAttachmentsMergeDataSchema, InvoiceAttachmentsMergeData } from '../data/invoice.attachments.merge.data';\nimport { InvoiceMergeSchema, InvoiceMergeData } from '../data/invoice.merge.data';\nimport { InvoiceMergeDataset } from './invoice.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.Bill,\n dependsOn: [\n ActivityEntityName.Job,\n ActivityEntityName.WorkOrder,\n ]\n})\nexport class BillMergeDataset {\n @MergeSource({\n schema: InvoiceMergeSchema,\n ignoreFields: ['jobLinesBillable']\n })\n invoice: InvoiceMergeData;\n\n @MergeSource({\n schema: CompanyMergeSchema\n })\n invoiceCompany: CompanyMergeData;\n\n @MergeSource({\n schema: InvoiceAccountMergeSchema\n })\n invoiceAccount: InvoiceAccountMergeData;\n\n @MergeSource({\n schema: BasicSiteMergeSchema\n })\n invoiceAccountSite: BasicSiteMergeData;\n\n @MergeSource({\n schema: BasicSiteMergeSchema\n })\n invoiceJobSite: BasicSiteMergeData;\n\n @MergeSource({\n schema: ActivityMergeSchema,\n displayName: \"Activities (Deprecated)\",\n ignoreFields: ['attachments']\n })\n activities: ActivityMergeData[];\n\n @MergeSource({\n schema: AttachmentMergeSchema,\n displayName: \"Media Attachments (Deprecated)\",\n\n })\n mediaAttachments: AttachmentMergeData[];\n\n @MergeSource({\n schema: AttachmentMergeSchema,\n displayName: \"File Attachments (Deprecated)\"\n })\n fileAttachments: AttachmentMergeData[];\n\n @MergeSource({\n schema: InvoiceActivitiesMergeDataSchema,\n ignoreCustomFields: true,\n })\n invoiceActivities: InvoiceActivitiesMergeData;\n\n @MergeSource({\n schema: InvoiceAttachmentsMergeDataSchema,\n ignoreCustomFields: true,\n })\n invoiceAttachment: InvoiceAttachmentsMergeData;\n\n public theme: Entity;\n}\n\n\n","import { Entity } from '../../../../entities/entity';\nimport { ActivityEntityName } from '../../../../entities/shared/activity.entity.name';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { ActivityMergeData, ActivityMergeSchema, AttachmentMergeData, AttachmentMergeSchema, BasicSiteMergeData, BasicSiteMergeSchema, CompanyMergeData, CompanyMergeSchema, InvoiceAccountMergeData, InvoiceAccountMergeSchema, InvoiceActivitiesMergeData, InvoiceActivitiesMergeDataSchema, InvoiceAttachmentsMergeData, InvoiceAttachmentsMergeDataSchema, InvoiceMergeData, InvoiceMergeSchema } from '../data';\n\n@MergeDataset({\n entity: ActivityEntityName.Invoice,\n dependsOn: [\n ActivityEntityName.Job\n ]\n})\nexport class InvoiceMergeDataset {\n\n @MergeSource({\n schema: InvoiceMergeSchema\n })\n invoice: InvoiceMergeData;\n\n @MergeSource({\n schema: CompanyMergeSchema\n })\n invoiceCompany: CompanyMergeData;\n\n @MergeSource({\n schema: InvoiceAccountMergeSchema\n })\n invoiceAccount: InvoiceAccountMergeData;\n\n @MergeSource({\n schema: BasicSiteMergeSchema\n })\n invoiceAccountSite: BasicSiteMergeData;\n\n @MergeSource({\n schema: BasicSiteMergeSchema\n })\n invoiceJobSite: BasicSiteMergeData;\n\n @MergeSource({\n schema: ActivityMergeSchema,\n displayName: \"Activities (Deprecated)\",\n ignoreFields: ['attachments']\n })\n activities: ActivityMergeData[];\n\n @MergeSource({\n schema: AttachmentMergeSchema,\n displayName: \"Media Attachments (Deprecated)\",\n\n })\n mediaAttachments: AttachmentMergeData[];\n\n @MergeSource({\n schema: AttachmentMergeSchema,\n displayName: \"File Attachments (Deprecated)\"\n })\n fileAttachments: AttachmentMergeData[];\n\n @MergeSource({\n schema: InvoiceActivitiesMergeDataSchema,\n ignoreCustomFields: true,\n })\n invoiceActivities: InvoiceActivitiesMergeData;\n\n @MergeSource({\n schema: InvoiceAttachmentsMergeDataSchema,\n ignoreCustomFields: true,\n })\n invoiceAttachment: InvoiceAttachmentsMergeData;\n\n public theme: Entity;\n}\n\n\n","import { ActivityEntityName } from '../../../../entities/shared/activity.entity.name';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { AccountContactMergeData, AccountMergeData, AttachmentsMergeData, AttachmentsMergeSchema, CompanyMergeData, EmployeeMergeData, JobAssetsMergeData, JobAssetsMergeSchema, JobContactLinksMergeData, JobContactLinksMergeSchema, JobIncludeItemsMergeData, JobIncludeItemsMergeDataSchema, JobMergeData, JobSiteMergeData, JobStagesMergeData, JobStagesMergeDataSchema, OtherMergeData, OtherMergeDataSchema } from '../data';\nimport { AccountContactMergeSchema } from '../data/account.contact.merge.data';\nimport { AccountMergeSchema } from '../data/account.merge.data';\nimport { CompanyMergeSchema } from '../data/company.merge.data';\nimport { EmployeeMergeSchema } from '../data/employee.merge.data';\nimport { JobMergeSchema } from '../data/job.merge.data';\nimport { JobSiteMergeSchema } from '../data/job.site.merge.data';\n\n@MergeDataset({\n entity: ActivityEntityName.Job\n})\nexport class JobMergeDataset {\n\n @MergeSource({\n schema: JobMergeSchema\n })\n job: JobMergeData;\n\n @MergeSource({\n schema: JobStagesMergeDataSchema\n })\n jobStage: JobStagesMergeData;\n\n @MergeSource({\n schema: AccountMergeSchema\n })\n jobCustomer: AccountMergeData;\n\n @MergeSource({\n schema: AccountContactMergeSchema\n })\n jobCustomerContact: AccountContactMergeData;\n\n @MergeSource({\n schema: JobSiteMergeSchema\n })\n jobSite: JobSiteMergeData;\n\n @MergeSource({\n schema: CompanyMergeSchema\n })\n jobBillingCompany: CompanyMergeData;\n\n @MergeSource({\n schema: EmployeeMergeSchema\n })\n jobFieldSupervisor: EmployeeMergeData;\n\n @MergeSource({\n schema: EmployeeMergeSchema\n })\n jobOwner: EmployeeMergeData;\n\n @MergeSource({\n schema: JobContactLinksMergeSchema,\n displayName: 'Job Contacts'\n })\n jobContact: JobContactLinksMergeData;\n\n @MergeSource({\n schema: JobAssetsMergeSchema,\n ignoreCustomFields: true,\n })\n jobAsset: JobAssetsMergeData;\n\n @MergeSource({\n schema: JobIncludeItemsMergeDataSchema,\n ignoreCustomFields: true,\n })\n jobItems: JobIncludeItemsMergeData;\n\n @MergeSource({\n schema: OtherMergeDataSchema,\n })\n other: OtherMergeData;\n\n @MergeSource({\n schema: AttachmentsMergeSchema,\n ignoreCustomFields: true,\n })\n files?: AttachmentsMergeData;\n}","import { CompanyMergeData, CompanyMergeSchema, EmployeeMergeData, EmployeeMergeSchema, LeadAccountMergeData, LeadAccountMergeSchema, LeadContactMergeData, LeadContactMergeSchema, LeadMergeData, LeadMergeSchema, BasicSiteMergeData, BasicSiteMergeSchema } from '../data';\nimport { ActivityEntityName } from '../../../../entities';\nimport { MergeDataset, MergeSource } from '../../decorators';\n\n@MergeDataset({\n entity: ActivityEntityName.Lead\n})\nexport class LeadMergeDataset {\n\n @MergeSource({\n schema: LeadMergeSchema\n })\n lead: LeadMergeData;\n\n @MergeSource({\n schema: LeadAccountMergeSchema\n })\n leadAccount: LeadAccountMergeData;\n\n @MergeSource({\n schema: LeadContactMergeSchema\n })\n leadContact: LeadContactMergeData;\n\n @MergeSource({\n schema: EmployeeMergeSchema\n })\n leadOwner: EmployeeMergeData;\n\n @MergeSource({\n schema: CompanyMergeSchema\n })\n leadCompany: CompanyMergeData;\n\n @MergeSource({\n schema: BasicSiteMergeSchema\n })\n leadSite: BasicSiteMergeData;\n\n}","import { AccountContactMergeData, AccountContactMergeSchema, AccountMergeData, AccountMergeSchema, CompanyMergeData, CompanyMergeSchema, EmployeeMergeData, EmployeeMergeSchema, JobSiteMergeData, JobSiteMergeSchema, OpportunityMergeData, OpportunityMergeSchema } from '../data';\nimport { ActivityEntityName } from '../../../../entities';\nimport { MergeDataset, MergeSource } from '../../decorators';\n\n@MergeDataset({\n entity: ActivityEntityName.Opportunity\n})\nexport class OpportunityMergeDataset {\n\n @MergeSource({\n schema: OpportunityMergeSchema\n })\n opportunity: OpportunityMergeData;\n\n @MergeSource({\n schema: AccountMergeSchema\n })\n opportunityAccount: AccountMergeData;\n\n @MergeSource({\n schema: AccountContactMergeSchema\n })\n opportunityContact: AccountContactMergeData;\n\n @MergeSource({\n schema: JobSiteMergeSchema\n })\n opportunitySite: JobSiteMergeData;\n\n @MergeSource({\n schema: EmployeeMergeSchema\n })\n opportunityOwner: EmployeeMergeData;\n\n @MergeSource({\n schema: CompanyMergeSchema\n })\n opportunityCompany: CompanyMergeData;\n\n public static get empty() {\n return {\n opportunity: new OpportunityMergeData(),\n opportunityAccount: new AccountMergeData(),\n opportunityContact: new AccountContactMergeData(),\n opportunitySite: new JobSiteMergeData(),\n opportunityOwner: new EmployeeMergeData(),\n opportunityCompany: new CompanyMergeData()\n } as OpportunityMergeDataset;\n }\n\n}","import { MergeDataset, MergeSource } from '../../decorators';;\nimport { ActivityEntityName, DocumentTheme, DocumentThemeQuoteOptions } from '../../../../entities';\nimport { CompanyMergeData, CompanyMergeSchema, EmployeeMergeData, EmployeeMergeSchema, QuoteProMergeSchema, QuoteProMergeData, AccountMergeSchema, AccountContactMergeData, AccountContactMergeSchema, AccountMergeData, BasicSiteMergeSchema, BasicSiteMergeData } from '../data';\n\n@MergeDataset({\n entity: ActivityEntityName.QuotePro,\n dependsOn: [ActivityEntityName.Job, ActivityEntityName.Opportunity]\n})\n@MergeDataset({\n entity: ActivityEntityName.Quote,\n dependsOn: [ActivityEntityName.Job, ActivityEntityName.Opportunity]\n})\nexport class QuoteProMergeDataset {\n\n @MergeSource({\n schema: QuoteProMergeSchema\n })\n quote: QuoteProMergeData;\n\n @MergeSource({\n schema: EmployeeMergeSchema\n })\n quoteOwner: EmployeeMergeData;\n\n @MergeSource({\n schema: CompanyMergeSchema\n })\n quoteCompany: CompanyMergeData;\n\n @MergeSource({\n schema: AccountMergeSchema\n })\n quoteAccount: AccountMergeData;\n\n @MergeSource({\n schema: BasicSiteMergeSchema\n })\n quoteSite: BasicSiteMergeData;\n\n @MergeSource({\n schema: AccountContactMergeSchema\n })\n quoteContact: AccountContactMergeData;\n\n theme: DocumentTheme;\n\n public static get empty() {\n return {\n quote: new QuoteProMergeData(),\n quoteOwner: new EmployeeMergeData(),\n quoteContact: new AccountContactMergeData(),\n quoteAccount: new AccountMergeData(),\n quoteSite: new BasicSiteMergeData(),\n quoteCompany: new CompanyMergeData(),\n theme: null\n } as QuoteProMergeDataset;\n }\n}","import { MergeDataset } from '../../decorators';;\nimport { ActivityEntityName } from '../../../../entities';\nimport { CompanyMergeData, EmployeeMergeData, QuoteProMergeData, AccountContactMergeData, AccountMergeData, BasicSiteMergeData } from '../data';\nimport { QuoteProMergeDataset } from './quote.pro.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.QuoteJob,\n dependsOn: [ActivityEntityName.Job]\n})\nexport class QuoteProJobMergeDataset extends QuoteProMergeDataset {\n public static get empty() {\n return {\n quote: new QuoteProMergeData(),\n quoteOwner: new EmployeeMergeData(),\n quoteContact: new AccountContactMergeData(),\n quoteAccount: new AccountMergeData(),\n quoteSite: new BasicSiteMergeData(),\n quoteCompany: new CompanyMergeData(),\n theme: null\n } as QuoteProJobMergeDataset;\n }\n}","import { MergeDataset } from '../../decorators';;\nimport { ActivityEntityName } from '../../../../entities';\nimport { CompanyMergeData, EmployeeMergeData, QuoteProMergeData, AccountContactMergeData, AccountMergeData, BasicSiteMergeData } from '../data';\nimport { QuoteProMergeDataset } from './quote.pro.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.QuoteOpportunity,\n dependsOn: [ActivityEntityName.Opportunity]\n})\nexport class QuoteProOpportunityMergeDataset extends QuoteProMergeDataset {\n public static get empty() {\n return {\n quote: new QuoteProMergeData(),\n quoteOwner: new EmployeeMergeData(),\n quoteContact: new AccountContactMergeData(),\n quoteAccount: new AccountMergeData(),\n quoteSite: new BasicSiteMergeData(),\n quoteCompany: new CompanyMergeData(),\n theme: null\n } as QuoteProOpportunityMergeDataset;\n }\n}","import { ActivityEntityName, Entity } from '../../../../entities';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { AccountContactMergeData, AccountMergeData, AccountMergeSchema, BasicSiteMergeData, BasicSiteMergeSchema, CompanyMergeData, CompanyMergeSchema, ContactMergeData, ContactMergeSchema, SaleOrderItemsMergeData, SaleOrderItemsMergeDataSchema, SaleOrderMergeData, SaleOrderMergeSchema } from '../data';\n\n@MergeDataset({\n entity: ActivityEntityName.SaleOrder,\n dependsOn: [\n ActivityEntityName.Job,\n ActivityEntityName.WorkOrder,\n ]\n})\nexport class SaleOrderMergeDataset {\n\n @MergeSource({\n schema: SaleOrderMergeSchema\n })\n saleOrder?: SaleOrderMergeData;\n\n @MergeSource({\n schema: AccountMergeSchema,\n displayName: \"Sale Order Customer\"\n })\n customer?: AccountMergeData;\n\n @MergeSource({\n schema: ContactMergeSchema,\n displayName: \"Sale Order Customer Contact\"\n })\n customerContact?: AccountContactMergeData;\n\n @MergeSource({\n schema: CompanyMergeSchema,\n displayName: \"Sale Order Billing Company\"\n })\n billingCompany?: CompanyMergeData;\n\n @MergeSource({\n schema: BasicSiteMergeSchema\n })\n saleOrderJobSite?: BasicSiteMergeData;\n\n @MergeSource({\n schema: SaleOrderItemsMergeDataSchema\n })\n saleOrderItem?: SaleOrderItemsMergeData;\n\n public theme: Entity;\n}","import { ActivityEntityName } from '../../../../entities/shared/activity.entity.name';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { AccountContactMergeData, AccountMergeData, AttachmentsMergeData, AttachmentsMergeSchema, CompanyMergeData, EmployeeMergeData, EmployeeMergeSchema, JobSiteMergeData, OtherMergeData, OtherMergeDataSchema, StageIncludeItemsMergeData, StageIncludeItemsMergeDataSchema, StageMergeData } from '../data';\nimport { AccountContactMergeSchema } from '../data/account.contact.merge.data';\nimport { AccountMergeSchema } from '../data/account.merge.data';\nimport { CompanyMergeSchema } from '../data/company.merge.data';\nimport { JobSiteMergeSchema } from '../data/job.site.merge.data';\nimport { StageMergeSchema } from '../data/stage.merge.data';\n\n@MergeDataset({\n entity: ActivityEntityName.WorkOrder,\n dependsOn: [ActivityEntityName.Job]\n})\nexport class StageMergeDataset {\n\n @MergeSource({\n schema: StageMergeSchema,\n ignoreFields: ['items']\n })\n stage: StageMergeData;\n\n @MergeSource({\n schema: JobSiteMergeSchema\n })\n stageSite: JobSiteMergeData;\n\n @MergeSource({\n schema: AccountMergeSchema\n })\n stageContractor: AccountMergeData;\n\n @MergeSource({\n schema: AccountContactMergeSchema\n })\n stageContractorContact: AccountContactMergeData;\n\n @MergeSource({\n schema: CompanyMergeSchema\n })\n stageBillingCompany: CompanyMergeData;\n\n @MergeSource({\n schema: EmployeeMergeSchema\n })\n stageOwner: EmployeeMergeData;\n\n @MergeSource({\n schema: StageIncludeItemsMergeDataSchema,\n includeFields: ['items', 'subTotalBuy', 'subTotalSell'],\n ignoreCustomFields: true,\n })\n stageItem: StageIncludeItemsMergeData;\n\n @MergeSource({\n schema: AttachmentsMergeSchema,\n ignoreCustomFields: true,\n })\n stageAttachment: AttachmentsMergeData;\n\n @MergeSource({\n schema: AttachmentsMergeSchema,\n ignoreCustomFields: true,\n })\n files: AttachmentsMergeData;\n\n @MergeSource({\n schema: OtherMergeDataSchema,\n })\n other: OtherMergeData;\n}\n\n","import { ActivityEntityName } from '../../../../entities/shared/activity.entity.name';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { EmployeeMergeData, EmployeeMergeSchema } from '../data/employee.merge.data';\n\n@MergeDataset({\n entity: ActivityEntityName.Resource,\n dependsOn: [\n ActivityEntityName.Job,\n ActivityEntityName.WorkOrder\n ]\n})\nexport class StageResourceMergeDataset {\n\n @MergeSource({\n schema: EmployeeMergeSchema\n })\n resource: EmployeeMergeData;\n\n}","import { ActivityEntityName, Entity } from '../../../../entities';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { PurchaseOrderDeliveryAddressMergeData, PurchaseOrderDeliveryAddressMergeSchema, PurchaseOrderLinesMergeData, PurchaseOrderLinesMergeSchema, PurchaseOrderMergeData, PurchaseOrderMergeSchema, PurchaseOrderSupplierMergeData, PurchaseOrderSupplierMergeSchema } from '../data/purchase.order.merge.data';\nimport { CompanyMergeData, CompanyMergeSchema } from '../data/company.merge.data';\n\n@MergeDataset({\n entity: ActivityEntityName.PurchaseOrder,\n dependsOn: [\n ActivityEntityName.Job,\n ]\n})\nexport class PurchaseOrderMergeDataSet {\n @MergeSource({\n schema: PurchaseOrderMergeSchema\n })\n purchaseOrder?: PurchaseOrderMergeData;\n\n @MergeSource({\n schema: PurchaseOrderLinesMergeSchema\n })\n purchaseOrderLine?: PurchaseOrderLinesMergeData;\n\n @MergeSource({\n schema: CompanyMergeSchema\n })\n purchaseOrderCompany: CompanyMergeData;\n\n @MergeSource({\n schema: PurchaseOrderDeliveryAddressMergeSchema\n })\n purchaseOrderDeliveryAddress: PurchaseOrderDeliveryAddressMergeData;\n\n @MergeSource({\n schema: PurchaseOrderSupplierMergeSchema\n })\n purchaseOrderSupplier: PurchaseOrderSupplierMergeData;\n\n // @MergeSource({\n // schema: PurchaseOrderDeliveryAddressMergeSchema\n // })\n // purchaseOrderDeliveryAddress: PurchaseOrderDeliveryAddressMergeData;\n\n public theme: Entity;\n}","import { ActivityEntityName } from '../../../../entities/shared/activity.entity.name';\nimport { MergeDataset } from '../../decorators';\nimport { InvoiceMergeDataset } from './invoice.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.CreditNote,\n dependsOn: [\n ActivityEntityName.Job\n ]\n})\nexport class CreditNoteMergeDataset extends InvoiceMergeDataset {\n}\n\n\n","import { ActivityEntityName } from '../../../../entities/shared/activity.entity.name';\nimport { MergeDataset } from '../../decorators';\nimport { BillMergeDataset } from './bill.merge.dataset';\nimport { InvoiceMergeDataset } from './invoice.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.CreditNoteSupplier,\n dependsOn: [\n ActivityEntityName.Job,\n ActivityEntityName.WorkOrder,\n ]\n})\nexport class CreditNoteSupplierMergeDataset extends BillMergeDataset {\n}\n\n\n","import { ActivityEntityName } from '../../../../entities/shared/activity.entity.name';\nimport { MergeDataset } from '../../decorators';\nimport { InvoiceMergeDataset } from './invoice.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.PrepaymentInvoice,\n dependsOn: [\n ActivityEntityName.Job\n ]\n})\nexport class PrepaymentMergeDataset extends InvoiceMergeDataset {\n}\n\n\n","import { ActivityEntityName } from '../../../../entities/shared/activity.entity.name';\nimport { MergeDataset } from '../../decorators';\nimport { BillMergeDataset } from './bill.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.PrepaymentSupplier,\n dependsOn: [\n ActivityEntityName.Job,\n ActivityEntityName.WorkOrder,\n ]\n})\nexport class PrepaymentSupplierMergeDataset extends BillMergeDataset {\n}\n\n\n","import { ActivityEntityName } from '../../../../entities';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { AccountMergeData, AccountMergeSchema, ContactFullMergeData, ContactFullMergeSchema, } from '../data';\n\n@MergeDataset({\n entity: ActivityEntityName.Account,\n})\nexport class AccountMergeDataset {\n @MergeSource({\n schema: AccountMergeSchema,\n ignoreFields: [\"taxId\"]\n })\n account: AccountMergeData;\n\n @MergeSource({\n schema: ContactFullMergeSchema,\n ignoreCustomFields: true,\n ignoreFields: [\"jobTitle\"]\n })\n primaryContact: ContactFullMergeData;\n}","import { ActivityEntityName } from '../../../../entities';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { ContactFullMergeData, ContactFullMergeSchema } from '../data/contact.full.merge.data';\nimport { SiteMergeData, AccountMergeData, AccountMergeSchema, SiteMergeSchema } from '../data';\n\n@MergeDataset({\n entity: ActivityEntityName.Contact,\n})\nexport class ContactMergeDataset {\n @MergeSource({\n schema: ContactFullMergeSchema,\n })\n contact: ContactFullMergeData;\n\n @MergeSource({\n schema: AccountMergeSchema,\n })\n relativeAccount: AccountMergeData\n\n @MergeSource({\n schema: SiteMergeSchema,\n })\n relativeSite: SiteMergeData\n}","import { ActivityEntityName } from '../../../../entities';\nimport { MergeDataset } from '../../decorators';\nimport { AccountMergeDataset } from './account.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.Customer,\n})\nexport class CustomerMergeDataset extends AccountMergeDataset {\n}","import { ActivityEntityName } from '../../../../entities';\nimport { MergeDataset } from '../../decorators';\nimport { AccountMergeDataset } from './account.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.Contractor,\n})\nexport class ContractorMergeDataset extends AccountMergeDataset {\n}","import { ActivityEntityName } from '../../../../entities';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { AccountMergeData, AccountMergeSchema, ContactFullMergeData, ContactFullMergeSchema, SiteMergeData, SiteMergeSchema, } from '../data';\n\n@MergeDataset({\n entity: ActivityEntityName.Site,\n})\nexport class SiteMergeDataset {\n @MergeSource({\n schema: SiteMergeSchema\n })\n site: SiteMergeData;\n\n @MergeSource({\n schema: ContactFullMergeSchema,\n ignoreCustomFields: true,\n ignoreFields: [\"jobTitle\"]\n })\n primaryContact: ContactFullMergeData;\n\n @MergeSource({\n schema: ContactFullMergeSchema,\n ignoreCustomFields: true,\n ignoreFields: ['jobTitle']\n })\n owner: ContactFullMergeData;\n\n @MergeSource({\n schema: ContactFullMergeSchema,\n ignoreCustomFields: true,\n ignoreFields: ['jobTitle']\n })\n siteManager: ContactFullMergeData;\n\n @MergeSource({\n schema: AccountMergeSchema,\n ignoreCustomFields: true,\n })\n relatedTo: AccountMergeData;\n}","import { ActivityEntityName } from '../../../../entities';\nimport { MergeDataset } from '../../decorators';\nimport { ContactMergeDataset } from './contact.merge.dataset';\n\n@MergeDataset({\n entity: ActivityEntityName.LoginContact,\n})\nexport class LoginContactMergeDataset extends ContactMergeDataset {\n}\n","import { ActivityEntityName } from '../../../../entities';\nimport { MergeDataset, MergeSource } from '../../decorators';\nimport { BulkInvoiceJobMergeData, BulkInvoiceJobMergeSchema, ContactMergeData, ContactMergeSchema } from '../data';\n\n@MergeDataset({\n entity: ActivityEntityName.BulkInvoiceJob,\n})\nexport class BulkInvoiceJobMergeDataset {\n @MergeSource({\n schema: BulkInvoiceJobMergeSchema,\n })\n job: BulkInvoiceJobMergeData;\n\n @MergeSource({\n schema: ContactMergeSchema,\n ignoreCustomFields: true,\n })\n jobPrimaryContact: ContactMergeData;\n}","import { EntityViewField } from './entity.view';\nimport { MetadataEntityData, MetadataEntityFieldData, MetadataEntityFieldType, getMetadataEntityFieldType } from '../../../metadata';\nimport * as Enumerable from 'linq';\n\nexport class EntityViewMetadata {\n\n public readonly highlightable: EntityViewField[];\n public readonly groupable: EntityViewField[];\n public readonly sortable: EntityViewField[];\n public readonly customFields: EntityViewField[];\n public readonly textSearchable: EntityViewField[];\n\n public readonly card: EntityViewField[];\n public readonly list: EntityViewField[];\n public readonly filters: EntityViewField[];\n public readonly systemFilters: EntityViewField[];\n\n constructor(\n public readonly metadata: MetadataEntityData\n ) {\n\n const visibleFields = Enumerable\n .from(metadata?.fields);\n //.where(x => !x.hidden);\n\n this.highlightable = visibleFields\n .where(x => {\n const type = getMetadataEntityFieldType(x);\n const isDate = type === MetadataEntityFieldType.Date || type === MetadataEntityFieldType.DateTime;\n const isHighlightable = x.highlightable;\n return isDate && isHighlightable;\n })\n .orderBy(x => x.displayName)\n .select(x => this.getViewField(x))\n .toArray();\n\n this.filters = visibleFields\n .where(x => x.filterable && x.type !== MetadataEntityFieldType.CustomField)\n .select(x => this.getViewField(x))\n .toArray();\n\n this.systemFilters = visibleFields\n .where(x => (x.filterable || x.systemFilterable) && x.type !== MetadataEntityFieldType.CustomField)\n .select(x => this.getViewField(x))\n .toArray();\n\n this.sortable = visibleFields\n .where(x => x.sortable)\n .select(x => this.getViewField(x))\n .toArray();\n\n this.groupable = visibleFields\n .where(x => x.groupable)\n .select(x => this.getViewField(x))\n .toArray();\n\n this.textSearchable = visibleFields\n .where(x => x.textSearchable)\n .select(x => this.getViewField(x))\n .toArray();\n\n this.customFields = visibleFields\n .where(x => x.type === MetadataEntityFieldType.CustomField)\n .select(x => this.getViewField(x))\n .toArray();\n\n this.card = this.list = visibleFields\n .where(x => x.type !== MetadataEntityFieldType.CustomField)\n .select(x => this.getViewField(x))\n .toArray();\n\n }\n\n public getField(field: string | EntityViewField): MetadataEntityFieldData {\n\n const fieldName = typeof field === 'string'\n ? field\n : field._id;\n\n const metadata = this.metadata.fields.find(x => x.name === fieldName);\n\n return metadata;\n }\n\n private getViewField(field: MetadataEntityFieldData) {\n return {\n _id: field.name,\n name: field.displayName,\n attributeFilterName: field.attributeFilterName,\n systemHidden: field.hidden,\n visible: !field.hidden,\n moveable: true,\n sortOrder: null\n } as EntityViewField;\n }\n}","import { EntityPagingInfo } from '../common';\nimport { EntityView, EntityViewFilter, EntityViewRequestOptions, EntityViewSort } from './entity.view';\nimport { EntityViewMetadata } from './entity.view.metadata';\nimport { MetadataEntityData } from '../../../metadata';\nimport { ActivityEntityName } from '../../shared';\nimport { DEFAULT_PAGE_SIZE } from '../../../utilities';\nimport { EntityViewType } from './enums';\nimport * as Enumerable from 'linq';\n\nexport interface EntityViewRequest {\n entity: ActivityEntityName;\n currentUserId?: string;\n domainType?: string;\n}\n\n\nexport interface EntityHeaderRequest {\n viewId?: string;\n isEmbedded?: boolean;\n variant?: string;\n overrideMetadataEntity?: ActivityEntityName;\n overrideViewEntity?: ActivityEntityName;\n}\n\nexport interface EntityItemsRequest {\n viewId?: string;\n parentId?: string;\n companyIds?: string[];\n search?: string;\n filters?: EntityViewFilter[];\n entityIds?: Record;\n sort?: EntityViewSort,\n page?: number;\n pageSize?: number;\n isEmbedded?: boolean;\n variant?: string;\n}\n\nexport interface EntityFilterRequest {\n viewId?: string;\n parentId?: string;\n filterName?: string;\n}\n\n\nexport interface EntityHeaderResponse {\n metadata?: MetadataEntityData,\n views?: EntityView[];\n view?: EntityView;\n}\n\nexport interface EntityItemsResponse extends EntityPagingInfo {\n /** @deprecated */\n metadata?: MetadataEntityData,\n\n /** @deprecated */\n views?: EntityView[];\n\n /** @deprecated */\n view?: EntityView;\n items: T[];\n}\n\nexport interface EntityCommandRequest {\n commandId: string;\n data: T;\n}\n\nexport function emptyEntityHeaderResponse() {\n return {\n metadata: null,\n views: [],\n items: [],\n };\n}\n\nexport function emptyEntityItemsResponse() {\n return {\n total: 0,\n page: 0,\n pageSize: 0,\n views: [],\n items: [],\n metadata: null,\n } as EntityItemsResponse;\n}\n\nexport function emptyEntityItemResponse() {\n return {\n item: null,\n metadata: null,\n };\n}\n\nexport function getEntityItemsRequestFromView(view: EntityView): EntityItemsRequest {\n return {\n filters: view.filters,\n sort: view.sort,\n page: 0,\n pageSize: DEFAULT_PAGE_SIZE\n }\n}\n\nexport function getEffectiveEntityItemsRequest(metadata: EntityViewMetadata, view: EntityView, request: EntityItemsRequest): EntityItemsRequest {\n\n const getSafeId = (path: string) => {\n const safeId = path.endsWith('._id')\n ? path.replace('._id', '')\n : path;\n return safeId;\n }\n\n const viewFilterHash = Enumerable.from(view?.filters || []).toDictionary(f => getSafeId(f._id), f => f);\n const requestFilterHash = Enumerable.from(request?.filters || []).toDictionary(f => getSafeId(f._id), f => f);\n\n const effectiveFilters = [];\n\n Enumerable\n .from(metadata.systemFilters)\n .forEach(f => {\n\n const viewFilter = viewFilterHash.get(f?.attributeFilterName ?? f._id);\n const requestFilter = requestFilterHash.get(f?.attributeFilterName ?? f._id);\n const effectiveFilter = requestFilter || viewFilter;\n\n if (effectiveFilter) {\n effectiveFilters.push(effectiveFilter);\n }\n });\n\n return {\n search: request?.search,\n filters: effectiveFilters,\n entityIds: request?.entityIds,\n parentId: request?.parentId ?? null,\n companyIds: request?.companyIds ?? [],\n sort: request?.sort ?? view?.sort,\n page: request?.page ?? 0,\n pageSize: request?.pageSize ?? DEFAULT_PAGE_SIZE\n }\n}\n\nexport function getViewRequestOptions(request: EntityItemsRequest): EntityViewRequestOptions {\n const options: EntityViewRequestOptions = {};\n if (request?.variant) {\n options.variant = request.variant;\n }\n if (request?.isEmbedded) {\n options.type = EntityViewType.Embedded;\n }\n return options;\n}","export enum EntityFormId {\n Create = 'create',\n QuickCreate = 'quick-create',\n Manage = 'manage',\n ManageFinancial = 'manage-financial',\n}","import { MetadataEntityData } from '../../../metadata';\nimport { Entity } from '../../entity';\nimport { EntityFormDefinition, EntityFormId } from '../forms';\n\nexport const EntityViewNames = {\n [EntityFormId.Create]: 'Create',\n [EntityFormId.QuickCreate]: 'Quick Create',\n}\n\nexport interface EntityDefinition extends Entity {\n name: string;\n metadata: MetadataEntityData;\n forms: EntityFormDefinition[];\n}\n\n\n","export enum EntityStatusType {\n Active = 'Active',\n Inactive = 'Inactive',\n}","import * as Enumerable from 'linq';\nimport { TenantSubscription } from '../entities/tenant';\nimport { RightRule, SecurityModule, SecurityModuleDomain, SecurityRight } from './security.module';\n\nexport abstract class BaseSecurityModule implements SecurityModule {\n\n constructor(\n public name: string,\n public rights: SecurityRight[],\n public domain = SecurityModuleDomain.Web,\n public plan = TenantSubscription.Core,\n public rules: RightRule[] = []) {\n\n this._id = name;\n }\n\n _id: string;\n\n get allRights(): any[] {\n\n const rights = Enumerable.from(this.rights)\n .select(x => x._id)\n .toArray();\n return rights;\n }\n\n public allExceptRights(exceptRights: any[]) {\n\n const rights = Enumerable.from(this.rights)\n .select(x => x._id)\n .where(x => !exceptRights.includes(x))\n .toArray();\n return rights;\n }\n\n}\n","import { TenantSubscription } from '../entities/tenant';\n\nexport enum SecurityModuleDomain {\n Global = 'Global',\n Web = 'Web',\n Mobile = 'Mobile',\n Portals = 'Portals'\n}\n\n\n\n\nexport enum SecurityModuleName {\n Application = 'Application',\n Configuration = 'Configuration',\n Finance = 'Finance',\n IndividualCompliance = 'Individual Compliance',\n WorkCompliance = 'Work Compliance',\n Jobs = 'Jobs',\n Quotes = 'Quotes',\n Timesheets = 'Timesheets',\n Users = 'Users',\n Scheduler = 'Scheduler',\n Contacts = 'Contacts',\n Crm = 'CRM',\n PurchaseOrders = 'Purchase Orders',\n Appointments = 'Appointments',\n Runsheets = 'Runsheets',\n KnowledgeBase = 'Knowledge Base',\n Claims = 'Claims',\n MobileTechnicians = 'Technician Field App',\n PortalContractors = 'Contractor Portal',\n PortalClients = 'Client Portal',\n Reports = 'Reports',\n Variations = 'Variations',\n Assets = 'Assets',\n Defects = 'Defects',\n RecurringJobs = 'Recurring Jobs',\n JobTemplates = 'Job Templates',\n QuoteTemplates = 'Quote Templates',\n Tasks = 'Tasks',\n Sales = 'Sales',\n Dashboards = 'Dashboards',\n Projects = 'Projects',\n Catalogue = \"Catalogue\",\n Forms = 'Forms',\n Shared = 'Shared',\n AddressValidation = \"Address Validation\",\n EnterpriseSearch = \"Enterprise Search\",\n PropertyManagement = \"Property Management\",\n WorkBuddyConnect = 'WorkBuddy Connect',\n Equipment = 'Equipment & Hire Billing',\n Tenant = 'Tenant',\n}\n\nexport interface SecurityModule {\n _id: string;\n name: string;\n domain: SecurityModuleDomain;\n rights: SecurityRight[];\n plan?: TenantSubscription;\n rules?: RightRule[];\n}\n\n\nexport interface SecurityRight {\n _id: T;\n name: string;\n basic: boolean;\n subscription?: TenantSubscription;\n module?: SecurityModuleName;\n}\n\nexport interface RightRule {\n _id: number;\n value: boolean;\n action: RightRuleAction;\n target: number[];\n}\n\nexport enum RightRuleAction {\n Enable = 'Enable',\n Disable = 'Disable',\n}","import { Entity, TenantSubscription } from '../../entities';\nimport { TenantPlan } from '../../security';\n\nimport * as Enumerable from 'linq';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { AppSecurityModule, ConfigurationSecurityModule, ConfigurationSecurityRight, ConfigurationSubModule, FinanceSecurityModule, IndividualComplianceSecurityModule, IndividualComplianceSecurityRight, JobSecurityModule, MobileTechniciansSecurityModule, PurchaseOrderSecurityModule, QuoteSecurityModule, SchedulerSecurityModule, TimesheetSecurityModule, WorkComplianceSecurityModule, WorkComplianceSecurityRight, PortalClientSecurityModule, PortalContractorSecurityModule, KnowledgeBaseSecurityModule, ClaimSecurityModule, CrmSecurityModule, ReportSecurityModule, VariationSecurityModule, AssetSecurityModule, DefectSecurityModule, RecurringJobSecurityModule, TaskSecurityModule, JobTemplatesSecurityModule, SalesSecurityModule, DashboardSecurityModule, QuoteTemplatesSecurityModule, AppSecurityRight, MobileTechniciansSecurityRight, ProjectsSecurityModule, JobTemplateSecurityRight, CrmSecurityRight, AddressValidationSecurityModule, EnterpriseSearchSecurityModule, PropertyManagementSecurityModule, WorkBuddyConnectSecurityModule, EquipmentSecurityModule } from '../modules';\nimport { FormSecurityModule, FormSecurityRight } from '../modules/form.security.module';\nimport { SecurityModule, SecurityModuleName } from '../security.module';\n\nexport class SecurityModuleUtility {\n\n public static systemModules: BaseSecurityModule[] = [\n new AppSecurityModule(),\n new QuoteSecurityModule(),\n new TimesheetSecurityModule(),\n new TaskSecurityModule(),\n new IndividualComplianceSecurityModule(),\n new ConfigurationSecurityModule(),\n new FinanceSecurityModule(),\n new SchedulerSecurityModule(),\n new CrmSecurityModule(),\n new PurchaseOrderSecurityModule(),\n new WorkComplianceSecurityModule(),\n new MobileTechniciansSecurityModule(),\n new PortalClientSecurityModule(),\n new PortalContractorSecurityModule(),\n new KnowledgeBaseSecurityModule(),\n new ClaimSecurityModule(),\n new ReportSecurityModule(),\n new VariationSecurityModule(),\n new DefectSecurityModule(),\n new AssetSecurityModule(),\n new RecurringJobSecurityModule(),\n new JobTemplatesSecurityModule(),\n new QuoteTemplatesSecurityModule(),\n new SalesSecurityModule(),\n new DashboardSecurityModule(),\n new FormSecurityModule(),\n new ProjectsSecurityModule(),\n new JobSecurityModule(),\n new AddressValidationSecurityModule(),\n new EnterpriseSearchSecurityModule(),\n new PropertyManagementSecurityModule(),\n new WorkBuddyConnectSecurityModule(),\n new EquipmentSecurityModule()\n ];\n\n public static getConfigurationSubAccessModules(rights: number[]): ConfigurationSubModule[] {\n\n if (!rights?.length) return [];\n\n const modules: ConfigurationSubModule[] = [];\n\n Enumerable.from(rights).forEach(x => {\n\n switch (x) {\n case ConfigurationSecurityRight.AccessPricing:\n modules.push(ConfigurationSubModule.Pricing);\n break;\n\n case ConfigurationSecurityRight.AccessMetadata:\n modules.push(ConfigurationSubModule.Metadata);\n break;\n\n case ConfigurationSecurityRight.AccessTemplates:\n modules.push(ConfigurationSubModule.Templates);\n break;\n case ConfigurationSecurityRight.AccessTenancy:\n modules.push(ConfigurationSubModule.Tenancy);\n break;\n case CrmSecurityRight.ManageSecurityRoles:\n modules.push(ConfigurationSubModule.Security);\n break;\n // case UserSecurityRight.CanAccess:\n // modules.push(ConfigurationSubModule.User);\n // break;\n // case UserSecurityRight.ManageSecurityRole:\n // modules.push(ConfigurationSubModule.Security);\n // break;\n\n case IndividualComplianceSecurityRight.ManageComplianceRules:\n modules.push(ConfigurationSubModule.IndividualCompliance);\n break;\n\n case WorkComplianceSecurityRight.ManageComplianceRules:\n modules.push(ConfigurationSubModule.WorkCompliance);\n break;\n\n default:\n break;\n\n\n }\n });\n\n return modules;\n }\n\n public static getModuleById(moduleId: string): SecurityModule {\n\n const selectedModule = Enumerable.from(SecurityModuleUtility.systemModules)\n .firstOrDefault(x => x._id === moduleId);\n\n return selectedModule;\n\n }\n\n public static getPlanModules(): Entity[] {\n\n return Enumerable\n .from(SecurityModuleUtility.systemModules)\n .where(x => x.plan !== TenantSubscription.System)\n .select(x => {\n return {\n _id: x._id,\n name: x.name,\n data: x.plan\n } as Entity;\n })\n .orderBy(x => x.name)\n .toArray();\n }\n\n public static getPlanRightsMask(plan: TenantPlan): number[] {\n\n const disabledRights: number[] = [];\n\n if (!plan) return disabledRights;\n\n const moduleRights = Enumerable\n .from(SecurityModuleUtility.systemModules)\n .where(x => x.plan !== TenantSubscription.System)\n .toDictionary(x => x._id, x => x.allRights);\n\n const disabledModules = this.getPlanDisabledModules(plan);\n\n Enumerable\n .from(disabledModules)\n .forEach(disabledId => {\n if (!moduleRights.contains(disabledId)) return;\n disabledRights.push(...moduleRights.get(disabledId));\n });\n\n if (disabledModules.includes(SecurityModuleName.PortalContractors))\n disabledRights.push(AppSecurityRight.LoginContractor);\n\n if (disabledModules.includes(SecurityModuleName.PortalClients))\n disabledRights.push(AppSecurityRight.LoginClient);\n\n if (disabledModules.includes(SecurityModuleName.Assets)) {\n disabledRights.push(MobileTechniciansSecurityRight.ManageJobManageAssets);\n disabledRights.push(MobileTechniciansSecurityRight.ManageJobViewAssets);\n }\n\n if (disabledModules.includes(SecurityModuleName.Tasks))\n disabledRights.push(MobileTechniciansSecurityRight.ManageJobViewTasks);\n\n if (disabledModules.includes(SecurityModuleName.Defects))\n disabledRights.push(MobileTechniciansSecurityRight.ManageJobViewDefects)\n\n if (disabledModules.includes(SecurityModuleName.Finance))\n disabledRights.push(MobileTechniciansSecurityRight.ManageJobViewInvoices)\n\n switch (plan.subscription) {\n case TenantSubscription.Core:\n disabledRights.push(AppSecurityRight.LoginManager);\n disabledRights.push(JobTemplateSecurityRight.CanAccess, JobTemplateSecurityRight.Manage);\n disabledRights.push(FormSecurityRight.CanAccessForms, FormSecurityRight.CreateEditForms, FormSecurityRight.DeleteForms, FormSecurityRight.ModifyAfterSubmission);\n disabledRights.push(MobileTechniciansSecurityRight.ManagePurchaseOrders, MobileTechniciansSecurityRight.CanAccessPurchaseOrders);\n break;\n\n case TenantSubscription.Professional:\n break;\n\n case TenantSubscription.Enterprise:\n break;\n\n }\n\n return disabledRights;\n }\n\n public static getPlanDisabledModules(plan: TenantPlan): string[] {\n\n if (!plan) return [];\n\n const disabledFeatures = Enumerable\n .from(Object.keys(plan.features))\n .where(featureKey => !plan.features[featureKey])\n .toArray();\n\n const disabledAddons = Enumerable\n .from(Object.keys(plan.addons))\n .where(featureKey => !plan.addons[featureKey])\n .toArray();\n\n const disabledModules = [...disabledFeatures, ...disabledAddons];\n\n return disabledModules;\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleDomain, SecurityModuleName, SecurityRight } from '../security.module';\n\n\nexport enum AppSecurityRight {\n LoginWeb = 1,\n LoginField = 2,\n LoginClient = 3,\n LoginContractor = 4,\n LoginManager = 5,\n\n FeatureSupervisor = 200,\n FeatureScheduler2 = 201,\n FeatureJobRoles = 202,\n FeatureBillTo = 203\n}\n\nexport class AppSecurityModule extends BaseSecurityModule {\n\n constructor() {\n\n super(\n SecurityModuleName.Application,\n [\n { _id: AppSecurityRight.LoginWeb, name: 'Log in Web', basic: true },\n { _id: AppSecurityRight.LoginField, name: 'Log in using Field Application', basic: true },\n { _id: AppSecurityRight.LoginClient, name: 'Log in using Client Portal', basic: true, module: SecurityModuleName.PortalContractors },\n { _id: AppSecurityRight.LoginContractor, name: 'Log in using Contractor Portal', basic: true, subscription: TenantSubscription.Enterprise },\n { _id: AppSecurityRight.LoginManager, name: 'Log in using Manager Application', basic: true, subscription: TenantSubscription.Professional },\n // { _id: AppSecurityRight.FeatureBillTo, name: 'Using BillTo for invoicing', basic: true },\n // { _id: AppSecurityRight.LoginClient, name: 'Log in Client', basic: true }\n ] as SecurityRight[],\n SecurityModuleDomain.Global,\n TenantSubscription.System\n );\n }\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum AssetSecurityRight {\n CanAccess = 18000,\n Manage = 18001,\n}\n\nexport class AssetSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Assets,\n [\n { _id: AssetSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: AssetSecurityRight.Manage, name: 'Manage', basic: true },\n ] as SecurityRight[],\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\n\nexport enum ClaimSecurityRight {\n AccessIncomingClaims = 130000,\n AccessOutgoingClaims = 130001,\n ManageIncomingClaims = 130002,\n ManageOutgoingClaims = 130003\n}\n\nexport class ClaimSecurityModule extends BaseSecurityModule {\n\n constructor() {\n\n super(\n SecurityModuleName.Claims,\n [\n { _id: ClaimSecurityRight.AccessIncomingClaims, name: 'Access Incoming Claims', basic: true },\n { _id: ClaimSecurityRight.AccessOutgoingClaims, name: 'Access Outgoing Claims', basic: true },\n { _id: ClaimSecurityRight.ManageIncomingClaims, name: 'Manage Incoming Claims', basic: false },\n { _id: ClaimSecurityRight.ManageOutgoingClaims, name: 'Manage Outgoing Claims', basic: false }\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n}\n\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum ConfigurationSecurityRight {\n CanAccess = 100000,\n AccessPricing = 100001,\n ManagePricing = 100002,\n AccessMetadata = 100003,\n ManageMetadata = 100004,\n AccessTemplates = 100005,\n ManageTemplates = 100006,\n AccessTenancy = 100007,\n ManageTenancy = 100008,\n AccessCustomFields = 100009,\n ManageCustomFields = 100010,\n AccessJobTemplates = 100011,\n ManageJobTemplates = 100012,\n AccessDocumentThemes = 100013,\n ManageDocumentThemes = 100014,\n AccessBulkImport = 100015,\n // ManageBulkImport = 100016,\n AccessEntityForms = 100020,\n AccessForms = 100021,\n ManageForms = 100022,\n}\n\nexport const ConfigurationSecurityRightAll = Object.keys(ConfigurationSecurityRight).map(x => ConfigurationSecurityRight[x] as number);\n\nexport enum ConfigurationSubModule {\n Pricing = 'Pricing',\n Metadata = 'Metadata',\n Templates = 'Templates',\n Tenancy = 'Tenancy',\n WorkCompliance = 'WorkCompliance',\n IndividualCompliance = 'IndividualCompliance',\n Security = 'Security',\n User = 'User'\n}\n\n\nexport class ConfigurationSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Configuration,\n [\n // { _id: ConfigurationSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: ConfigurationSecurityRight.AccessPricing, name: 'Access Pricing (Items, Categories, Pricelists)', basic: true },\n { _id: ConfigurationSecurityRight.ManagePricing, name: 'Manage Pricing (Items, Categories, Pricelists)', basic: false },\n { _id: ConfigurationSecurityRight.AccessMetadata, name: 'Access Metadata (Types, Priority, Zones, Statuses)', basic: true },\n { _id: ConfigurationSecurityRight.ManageMetadata, name: 'Manage Metadata (Types, Priority, Zones, Statuses)', basic: false },\n { _id: ConfigurationSecurityRight.AccessTemplates, name: 'Access Templates', basic: true },\n { _id: ConfigurationSecurityRight.ManageTemplates, name: 'Manage Templates', basic: false },\n { _id: ConfigurationSecurityRight.AccessCustomFields, name: 'Access Custom Fields', basic: true },\n { _id: ConfigurationSecurityRight.ManageCustomFields, name: 'Manage Custom Fields', basic: false },\n\n // { _id: ConfigurationSecurityRight.AccessJobTemplates, name: 'Access Job Templates', basic: true, subscription: TenantSubscription.Professional },\n // { _id: ConfigurationSecurityRight.ManageJobTemplates, name: 'Manage Job Templates', basic: false, subscription: TenantSubscription.Professional },\n\n { _id: ConfigurationSecurityRight.AccessTenancy, name: 'Access Tenancy (Companies, Tax Tables, Public Holidays, General Settings)', basic: true },\n { _id: ConfigurationSecurityRight.ManageTenancy, name: 'Manage Tenancy (Companies, Tax Tables, Public Holidays, General Settings)', basic: false },\n // { _id: ConfigurationSecurityRight.AccessSecurityRole, name: 'Access Security Role', basic: false },\n // { _id: ConfigurationSecurityRight.ManageSecurityRole, name: 'Manage Security Role', basic: false },\n // { _id: ConfigurationSecurityRight.AccessUser, name: 'Access Users', basic: false },\n // { _id: ConfigurationSecurityRight.ManageUser, name: 'Manage Users', basic: false },\n\n { _id: ConfigurationSecurityRight.AccessDocumentThemes, name: 'Access Document Themes', basic: true },\n { _id: ConfigurationSecurityRight.ManageDocumentThemes, name: 'Manage Document Themes', basic: false },\n { _id: ConfigurationSecurityRight.AccessBulkImport, name: 'Access Bulk Import', basic: true },\n\n { _id: ConfigurationSecurityRight.AccessEntityForms, name: 'Access Entity Forms', basic: true },\n // { _id: ConfigurationSecurityRight.AccessForms, name: 'Access Forms', basic: true, subscription: TenantSubscription.Professional },\n // { _id: ConfigurationSecurityRight.ManageForms, name: 'Manage Forms', basic: false, subscription: TenantSubscription.Professional },\n\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.System;\n }\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum CrmSecurityRight {\n CanAccess = 300000,\n ManageServiceProviders = 300001,\n ManageCustomers = 300002,\n ManageSuppliers = 300003,\n ManageEmployees = 300004,\n ManageSubcontractors = 300005,\n ManageSecurityRoles = 300006,\n ManageCompanies = 300007,\n ManageUsersWithoutEmail = 300008,\n ManageSites = 300009,\n ViewRecurringJobsWithinCustomers = 300010,\n ViewServicesWithinSites = 300011,\n ViewRecurringJobsWithinSites = 300012,\n}\n\nexport class CrmSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Crm,\n [\n { _id: CrmSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: CrmSecurityRight.ManageServiceProviders, name: 'Manage Service Providers', basic: false },\n { _id: CrmSecurityRight.ManageCustomers, name: 'Manage Customers', basic: false },\n { _id: CrmSecurityRight.ManageSuppliers, name: 'Manage Suppliers', basic: false },\n { _id: CrmSecurityRight.ManageEmployees, name: 'Manage Employees', basic: false },\n { _id: CrmSecurityRight.ManageUsersWithoutEmail, name: 'Manage Users Without Email', basic: false },\n { _id: CrmSecurityRight.ManageSubcontractors, name: 'Manage Subcontractors', basic: false },\n { _id: CrmSecurityRight.ManageSecurityRoles, name: 'Manage Security Roles', basic: false },\n { _id: CrmSecurityRight.ManageCompanies, name: 'Manage Companies', basic: false },\n { _id: CrmSecurityRight.ManageSites, name: 'Manage Sites', basic: false },\n { _id: CrmSecurityRight.ViewRecurringJobsWithinCustomers, name: 'View Recurring Jobs within Customers', basic: false },\n { _id: CrmSecurityRight.ViewServicesWithinSites, name: 'View Services within Sites', basic: false },\n { _id: CrmSecurityRight.ViewRecurringJobsWithinSites, name: 'View Recurring Jobs within Sites', basic: false },\n\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.System;\n }\n\n\n}\n","import { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum DashboardSecurityRight {\n // CanViewSystemDashboards = 24000,\n CanCreateDashboards = 24001,\n CanManageOtherUsersDashboards = 24002,\n}\n\nexport class DashboardSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Dashboards,\n [\n // { _id: DashboardSecurityRight.CanViewSystemDashboards, name: 'View System Dashboards', basic: true },\n { _id: DashboardSecurityRight.CanCreateDashboards, name: 'Create Dashboards', basic: true },\n { _id: DashboardSecurityRight.CanManageOtherUsersDashboards, name: 'Manage Other Users Dashboards', basic: true },\n ] as SecurityRight[]\n );\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum DefectSecurityRight {\n CanAccess = 17000,\n Manage = 17001,\n}\n\nexport class DefectSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Defects,\n [\n { _id: DefectSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: DefectSecurityRight.Manage, name: 'Manage', basic: true },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n\n}\n","import { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum FinanceSecurityRight {\n CanAccessPending = 2000,\n CanAccessBills = 2100,\n CanAccessInvoices = 2200,\n ManageInvoices = 2001,\n ManageBills = 2002,\n ManagePayments = 2003,\n\n ManageApprovedInvoices = 2004,\n ManageApprovedBills = 2005,\n\n CanAccessPayments = 27000,\n DeletePayment = 27002,\n\n CanCreatePaymentViews = 27010,\n ManageOtherUsersPaymentViews = 27011,\n\n CanAccessSaleOrder = 27100,\n}\n\nexport class FinanceSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Finance,\n [\n { _id: FinanceSecurityRight.CanAccessPending, name: 'Access Pending', basic: true },\n { _id: FinanceSecurityRight.CanAccessBills, name: 'Access Bills', basic: true },\n { _id: FinanceSecurityRight.CanAccessInvoices, name: 'Access Invoices', basic: true },\n { _id: FinanceSecurityRight.CanAccessPayments, name: 'Access Payments', basic: true },\n { _id: FinanceSecurityRight.CanAccessSaleOrder, name: 'Access Sale Order', basic: true },\n\n { _id: FinanceSecurityRight.ManageBills, name: 'Manage Bills', basic: false },\n { _id: FinanceSecurityRight.ManageInvoices, name: 'Manage Invoices', basic: false },\n { _id: FinanceSecurityRight.ManageApprovedBills, name: 'Manage Approved Bills', basic: false },\n { _id: FinanceSecurityRight.ManageApprovedInvoices, name: 'Manage Approved Invoices', basic: false },\n { _id: FinanceSecurityRight.ManagePayments, name: 'Manage Payments', basic: false },\n { _id: FinanceSecurityRight.DeletePayment, name: 'Delete Payments', basic: false },\n { _id: FinanceSecurityRight.CanCreatePaymentViews, name: 'Can Create Payment Views', basic: false },\n { _id: FinanceSecurityRight.ManageOtherUsersPaymentViews, name: 'Can Manage Other User Payment Views', basic: false },\n\n ] as SecurityRight[]\n );\n }\n\n\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum IndividualComplianceSecurityRight {\n CanAccess = 5000,\n ManageCompliance = 5001,\n ManageComplianceRules = 5002\n}\n\nexport class IndividualComplianceSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.IndividualCompliance,\n [\n { _id: IndividualComplianceSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: IndividualComplianceSecurityRight.ManageCompliance, name: 'Manage Compliance', basic: true },\n { _id: IndividualComplianceSecurityRight.ManageComplianceRules, name: 'Manage Compliance Rules', basic: false },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Professional;\n }\n\n\n}\n","import { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum JobSecurityRight {\n CanAccess = 1000,\n Manage = 1001,\n Dispatch = 1002,\n FinaliseJob = 1003,\n FinalliseWorkOrder = 1004,\n CompletionDate = 1005,\n FinaliseDate = 1006,\n ProcessJob = 1007,\n ProcessWorkOrder = 1008,\n ViewPricing = 1009,\n ModifyPricing = 1010,\n ManageActivity = 1011,\n ManageOtherUserActivity = 1012,\n ManagePurchaseOrder = 1013,\n ManageInvoices = 1014,\n ManageBills = 1015,\n MangeOtherUserViews = 1016,\n ModifyJobAfterFinalise = 1017,\n ReverseWorkOrderStatus = 1018,\n CanCreateViews = 1019,\n CanAccessSystemViews = 1020,\n ManageQuote = 1021,\n AccessQuote = 1022,\n ModifyLockedItems = 1023,\n ManageSalesOrder = 1024\n}\n\nexport class JobSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Jobs,\n [\n { _id: JobSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: JobSecurityRight.Manage, name: 'Manage', basic: true },\n { _id: JobSecurityRight.Dispatch, name: 'Dispatch Stage', basic: false },\n { _id: JobSecurityRight.FinaliseJob, name: 'Finalise Job', basic: false },\n { _id: JobSecurityRight.FinalliseWorkOrder, name: 'Finalise Stage', basic: false },\n { _id: JobSecurityRight.CompletionDate, name: 'Modify Completion Date after the fact', basic: false },\n { _id: JobSecurityRight.FinaliseDate, name: 'Modify Finalisation Date after the fact', basic: false },\n { _id: JobSecurityRight.ProcessJob, name: 'Modify Job Status', basic: false },\n { _id: JobSecurityRight.ProcessWorkOrder, name: 'Modify Stage Status', basic: false },\n { _id: JobSecurityRight.ViewPricing, name: 'View Financial Information on Job (Sell & Buy Prices)', basic: false },\n { _id: JobSecurityRight.ModifyPricing, name: 'Modify Sell & Buy Prices on Job', basic: false },\n { _id: JobSecurityRight.ModifyJobAfterFinalise, name: 'Modify Job after Finalise', basic: false },\n { _id: JobSecurityRight.ModifyLockedItems, name: 'Modify Locked Items', basic: false },\n { _id: JobSecurityRight.ManageActivity, name: 'Manage Activity', basic: false },\n { _id: JobSecurityRight.ManageOtherUserActivity, name: 'Manage Other User Activities', basic: false },\n { _id: JobSecurityRight.ManagePurchaseOrder, name: 'Manage Purchase Orders on Job', basic: false },\n { _id: JobSecurityRight.ManageInvoices, name: 'Manage Invoices on Job', basic: false },\n { _id: JobSecurityRight.ManageBills, name: 'Manage Bills on Stage', basic: false },\n { _id: JobSecurityRight.MangeOtherUserViews, name: 'Can Manage Other User Views', basic: false },\n { _id: JobSecurityRight.ReverseWorkOrderStatus, name: 'Revert Stage Status', basic: false },\n { _id: JobSecurityRight.CanCreateViews, name: 'Can Create Views', basic: false },\n { _id: JobSecurityRight.CanAccessSystemViews, name: 'Can Access System Views', basic: false },\n { _id: JobSecurityRight.AccessQuote, name: 'Access Quotes on Jobs', basic: false },\n { _id: JobSecurityRight.ManageQuote, name: 'Manage Quotes on Jobs', basic: false },\n { _id: JobSecurityRight.ManageSalesOrder, name: 'Manage Sales Order on Jobs', basic: false },\n\n ] as SecurityRight[]\n );\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum JobTemplateSecurityRight {\n CanAccess = 22000,\n Manage = 22001,\n}\n\nexport class JobTemplatesSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.JobTemplates,\n [\n { _id: JobTemplateSecurityRight.CanAccess, name: 'Access', basic: true, subscription: TenantSubscription.Professional },\n { _id: JobTemplateSecurityRight.Manage, name: 'Manage', basic: true, subscription: TenantSubscription.Professional },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Professional;\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\n\nexport enum KnowledgeBaseSecurityRight {\n CanAccess = 120000,\n ManageDocuments = 120001\n}\n\nexport class KnowledgeBaseSecurityModule extends BaseSecurityModule {\n\n constructor() {\n\n super(\n SecurityModuleName.KnowledgeBase,\n [\n { _id: KnowledgeBaseSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: KnowledgeBaseSecurityRight.ManageDocuments, name: 'Manage Documents', basic: false },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Enterprise;\n }\n\n}\n\n","import { BaseSecurityModule } from '../base.security.module';\nimport { RightRuleAction, SecurityModuleDomain, SecurityModuleName, SecurityRight, } from '../security.module';\nimport { TenantSubscription } from '../../entities/tenant';\n\nexport enum MobileTechniciansSecurityRight {\n CanAccessJobs = 50000,\n CanAccessQuotes = 50001,\n CanAccessPurchaseOrders = 50002,\n CanAccessCustomers = 50003,\n ManageJobs = 50004,\n ManageQuotes = 50005,\n ManagePurchaseOrders = 50006,\n ManageCustomers = 50007,\n ManageCodesOnJob = 50008,\n CanAccessRunsheets = 50009,\n CanAccessAppointments = 50010,\n CanCompleteJobs = 50011,\n ManageJobManageAssets = 50012,\n CanAccessTimesheets = 50013,\n ManageMyTimesheets = 50014,\n CanTakePayments = 50015,\n ModifyFormAfterSubmission = 50016,\n AllowEditBeforeCheckIn = 50017,\n AllowSmsActivities = 50018,\n AllowEditableMessages = 50019,\n CanAccessSupervisor = 50020,\n ManageJobViewTasks = 50021,\n ManageJobViewFiles = 50022,\n ManageJobViewItems = 50023,\n ManageJobViewAssets = 50024,\n ManageJobViewDefects = 50025,\n ManageJobViewInvoices = 50026,\n ManageResources = 50027,\n ManagePendingItems = 50028,\n ManageAppointments = 50029,\n ManageMyActivitiesWhileJobIsOpen = 50030,\n ManageAllActivities = 50031,\n CanAccessWorkforceCompliance = 50032,\n ManageJobManageMyTimesheets = 50033,\n ManageJobManageOtherUserTimesheets = 50034,\n CanCheckoutJobs = 50035,\n CanPutJobsOnHold = 50036,\n ManageJobViewEquipments = 50037,\n ManageJobManageEquipments = 50038,\n CanAccessStockLocations = 50039,\n CanAccessStandaloneForms = 50040,\n}\n\nexport class MobileTechniciansSecurityModule extends BaseSecurityModule {\n\n constructor() {\n\n super(\n SecurityModuleName.MobileTechnicians,\n [\n { _id: MobileTechniciansSecurityRight.CanAccessJobs, name: 'Access Work - Jobs', basic: true },\n { _id: MobileTechniciansSecurityRight.CanAccessAppointments, name: 'Access Work - Appointments', basic: true },\n { _id: MobileTechniciansSecurityRight.CanAccessRunsheets, name: 'Access Work - Runsheet', basic: true },\n { _id: MobileTechniciansSecurityRight.CanAccessQuotes, name: 'Access Quotes (Legacy)', basic: true },\n { _id: MobileTechniciansSecurityRight.CanAccessPurchaseOrders, name: 'Access Purchase Orders', basic: true, subscription: TenantSubscription.Professional },\n { _id: MobileTechniciansSecurityRight.ManageJobs, name: 'Manage Job: Create New', basic: false },\n { _id: MobileTechniciansSecurityRight.ManageCodesOnJob, name: 'Manage Job: Manage Items', basic: false },\n { _id: MobileTechniciansSecurityRight.ManagePendingItems, name: 'Manage Job: Manage Pending Items', basic: false },\n { _id: MobileTechniciansSecurityRight.ManageQuotes, name: 'Manage Quotes (Legacy)', basic: false },\n { _id: MobileTechniciansSecurityRight.ManagePurchaseOrders, name: 'Manage Purchase Orders', basic: false, subscription: TenantSubscription.Professional },\n { _id: MobileTechniciansSecurityRight.CanCompleteJobs, name: 'Allow Complete Jobs', basic: false },\n { _id: MobileTechniciansSecurityRight.ManageJobManageAssets, name: 'Manage Job: Manage Assets', basic: false, module: SecurityModuleName.Assets },\n { _id: MobileTechniciansSecurityRight.CanAccessTimesheets, name: 'Access Timesheets', basic: true, },\n { _id: MobileTechniciansSecurityRight.ManageMyTimesheets, name: 'Manage My Timesheets', basic: false, },\n { _id: MobileTechniciansSecurityRight.CanTakePayments, name: 'Take Payments', basic: false, },\n { _id: MobileTechniciansSecurityRight.ModifyFormAfterSubmission, name: 'Modify Form After Submission', basic: false, },\n { _id: MobileTechniciansSecurityRight.AllowEditBeforeCheckIn, name: 'Allow Edit Before Check In', basic: false, },\n { _id: MobileTechniciansSecurityRight.CanCheckoutJobs, name: 'Allow Checkout Jobs', basic: false, },\n { _id: MobileTechniciansSecurityRight.CanPutJobsOnHold, name: 'Allow Put Jobs On Hold', basic: false, },\n { _id: MobileTechniciansSecurityRight.AllowSmsActivities, name: 'SMS - Allow Text Messaging', basic: false, },\n { _id: MobileTechniciansSecurityRight.AllowEditableMessages, name: 'SMS - Allow editable messages', basic: false, },\n { _id: MobileTechniciansSecurityRight.CanAccessSupervisor, name: 'Access Supervisor', basic: true, },\n { _id: MobileTechniciansSecurityRight.ManageJobViewTasks, name: 'Manage Job: View Tasks', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageJobViewFiles, name: 'Manage Job: View Files', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageJobViewItems, name: 'Manage Job: View Items', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageJobViewAssets, name: 'Manage Job: View Assets', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageJobViewDefects, name: 'Manage Job: View Defects', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageJobViewInvoices, name: 'Manage Job: View Invoices', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageJobManageMyTimesheets, name: 'Manage Job: Manage My Timesheets', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageJobManageOtherUserTimesheets, name: \"Manage Job: Manage Other User's Timesheets\", basic: false },\n { _id: MobileTechniciansSecurityRight.ManageResources, name: 'Manage Resources', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageAppointments, name: 'Manage Appointments', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageMyActivitiesWhileJobIsOpen, name: 'Manage My Activities (While Job Is Open)', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageAllActivities, name: 'Manage All Activities', basic: false, },\n { _id: MobileTechniciansSecurityRight.CanAccessWorkforceCompliance, name: 'Access Workforce Compliance', basic: true, },\n { _id: MobileTechniciansSecurityRight.ManageJobViewEquipments, name: 'Manage Job: View Equipments', basic: false, },\n { _id: MobileTechniciansSecurityRight.ManageJobManageEquipments, name: 'Manage Job: Manage Equipments', basic: false, },\n { _id: MobileTechniciansSecurityRight.CanAccessStockLocations, name: 'Access Stock Locations', basic: true, },\n { _id: MobileTechniciansSecurityRight.CanAccessStandaloneForms, name: 'Access Standalone Forms', basic: true, },\n ] as SecurityRight[],\n SecurityModuleDomain.Mobile\n );\n\n this.rules = [\n {\n _id: MobileTechniciansSecurityRight.ManageJobManageMyTimesheets,\n value: false,\n action: RightRuleAction.Disable,\n target: [MobileTechniciansSecurityRight.ManageJobManageOtherUserTimesheets],\n },\n {\n _id: MobileTechniciansSecurityRight.ManageJobManageMyTimesheets,\n value: true,\n action: RightRuleAction.Enable,\n target: [MobileTechniciansSecurityRight.ManageJobManageOtherUserTimesheets],\n }\n ];\n }\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleDomain, SecurityModuleName, SecurityRight } from '../security.module';\n\n\nexport enum PortalClientSecurityRight {\n CanAccessJobs = 60000,\n CanAccessKnowledgeBase = 60001,\n CanAccessQuotes = 60006,\n CanAccessSites = 60007,\n ManageSites = 60008,\n ManageActivity = 60002,\n ViewInvoice = 60003,\n RequestNewJob = 60004,\n RequestNewQuote = 60005,\n ManageUsers = 60009,\n ViewJobsInSite = 60010,\n ViewQuotesInSite = 60011,\n ViewInvoicesInSite = 60012,\n ViewInvoicesInJob = 60013,\n}\n\nexport class PortalClientSecurityModule extends BaseSecurityModule {\n\n constructor() {\n\n super(\n SecurityModuleName.PortalClients,\n [\n { _id: PortalClientSecurityRight.CanAccessJobs, name: 'Access Jobs Board', basic: true },\n { _id: PortalClientSecurityRight.ViewJobsInSite, name: 'View Jobs tab within a site', basic: true },\n { _id: PortalClientSecurityRight.CanAccessQuotes, name: 'Access Quotes Board', basic: true },\n { _id: PortalClientSecurityRight.ViewQuotesInSite, name: 'View Quotes tab within a site', basic: true },\n { _id: PortalClientSecurityRight.CanAccessSites, name: 'Access Sites', basic: true },\n { _id: PortalClientSecurityRight.CanAccessKnowledgeBase, name: 'Access Knowledge Base', basic: true },\n { _id: PortalClientSecurityRight.ViewInvoice, name: 'Access Invoices Board', basic: true },\n { _id: PortalClientSecurityRight.ViewInvoicesInSite, name: 'View Invoices tab within a site', basic: true },\n { _id: PortalClientSecurityRight.ViewInvoicesInJob, name: 'View Invoices tab within a job', basic: true },\n { _id: PortalClientSecurityRight.ManageActivity, name: 'Create & Edit Activities', basic: false },\n { _id: PortalClientSecurityRight.ManageSites, name: 'Create & Manage Sites', basic: false },\n { _id: PortalClientSecurityRight.RequestNewJob, name: 'Request New Job', basic: false },\n { _id: PortalClientSecurityRight.RequestNewQuote, name: 'Request New Quote', basic: false },\n { _id: PortalClientSecurityRight.ManageUsers, name: 'Manage Users', basic: false },\n ] as SecurityRight[],\n SecurityModuleDomain.Portals\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleDomain, SecurityModuleName, SecurityRight } from '../security.module';\n\n\nexport enum PortalContractorSecurityRight {\n CanAccessJobs = 61000,\n ManageUsers = 61001,\n ManageCompliance = 61002,\n CanKnowledgeBase = 61004,\n AccessIncomingClaims = 61005,\n AccessOutgoingClaims = 61006,\n ManageIncomingClaims = 61007,\n ManageOutgoingClaims = 61008,\n ModifyFormAfterSubmission = 61009,\n}\n\nexport class PortalContractorSecurityModule extends BaseSecurityModule {\n\n constructor() {\n\n super(\n SecurityModuleName.PortalContractors,\n [\n { _id: PortalContractorSecurityRight.CanAccessJobs, name: 'Access Work - Jobs', basic: true },\n { _id: PortalContractorSecurityRight.CanKnowledgeBase, name: 'Access Knowledge Base', basic: true },\n { _id: PortalContractorSecurityRight.ManageUsers, name: 'Manage Users', basic: false },\n { _id: PortalContractorSecurityRight.ManageCompliance, name: 'Manage Compliance', basic: false },\n { _id: PortalContractorSecurityRight.AccessIncomingClaims, name: 'Access Incoming Claims', basic: true },\n { _id: PortalContractorSecurityRight.AccessOutgoingClaims, name: 'Access Outgoing Claims', basic: true },\n { _id: PortalContractorSecurityRight.ManageIncomingClaims, name: 'Manage Incoming Claims', basic: false },\n { _id: PortalContractorSecurityRight.ManageOutgoingClaims, name: 'Manage Outgoing Claims', basic: false },\n { _id: PortalContractorSecurityRight.ModifyFormAfterSubmission, name: 'Modify Form After Submission', basic: false },\n\n ] as SecurityRight[],\n SecurityModuleDomain.Portals\n );\n\n this.plan = TenantSubscription.Enterprise;\n }\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum ProjectsSecurityRight {\n CanAccessProjects = 25000,\n ManageProjects = 25001,\n\n CanCreateProjectViews = 25010,\n ManageOtherUsersProjectViews = 25011,\n}\n\nexport class ProjectsSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Projects,\n [\n { _id: ProjectsSecurityRight.CanAccessProjects, name: 'Access: Projects', basic: true },\n { _id: ProjectsSecurityRight.ManageProjects, name: 'Manage: Projects', basic: true },\n\n { _id: ProjectsSecurityRight.CanCreateProjectViews, name: 'Can Create Project Views', basic: false },\n { _id: ProjectsSecurityRight.ManageOtherUsersProjectViews, name: 'Can Manage Other User Project Views', basic: false },\n\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum PurchaseOrderSecurityRight {\n CanAccess = 10000,\n Manage = 10001,\n Processing = 10002\n}\n\nexport class PurchaseOrderSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.PurchaseOrders,\n [\n { _id: PurchaseOrderSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: PurchaseOrderSecurityRight.Manage, name: 'Manage', basic: true },\n { _id: PurchaseOrderSecurityRight.Processing, name: 'Update Status (Process)', basic: false }\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Professional;\n }\n\n\n}\n","import { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum QuoteSecurityRight {\n CanAccess = 3000,\n Manage = 3001,\n // Mark = 3002,\n\n ManageViews = 3010,\n ManageOtherViews = 3011,\n ApproveQuotes = 3012,\n}\n\nexport class QuoteSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Quotes,\n [\n { _id: QuoteSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: QuoteSecurityRight.Manage, name: 'Manage Quotes', basic: true },\n // { _id: QuoteSecurityRight.Mark, name: '[Deprecated] Mark as Won/Lost', basic: false },\n\n { _id: QuoteSecurityRight.ManageViews, name: 'Can Create/Edit Quotes Views', basic: true },\n { _id: QuoteSecurityRight.ManageOtherViews, name: 'Manage Other User Quotes Views', basic: false },\n { _id: QuoteSecurityRight.ApproveQuotes, name: 'Approve Quotes', basic: false },\n ] as SecurityRight[]\n );\n }\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum QuoteTemplateSecurityRight {\n CanAccess = 28000,\n Manage = 28001,\n}\n\nexport class QuoteTemplatesSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.QuoteTemplates,\n [\n { _id: QuoteTemplateSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: QuoteTemplateSecurityRight.Manage, name: 'Manage', basic: true },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Professional;\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum RecurringJobSecurityRight {\n CanAccess = 19000,\n Manage = 19001,\n}\n\nexport class RecurringJobSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.RecurringJobs,\n [\n { _id: RecurringJobSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: RecurringJobSecurityRight.Manage, name: 'Manage', basic: true },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Professional;\n }\n\n\n}\n","import { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum ReportSecurityRight {\n CanAccess = 8000,\n Manage = 8001,\n}\n\nexport class ReportSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Reports,\n [\n { _id: ReportSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: ReportSecurityRight.Manage, name: 'Manage', basic: true },\n ] as SecurityRight[]\n );\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\n\nexport enum SalesSecurityRight {\n CanAccessOpportunities = 23000,\n ManageOpportunities = 23001,\n\n CanCreateOpportunityViews = 23010,\n ManageOtherUsersOpportunityViews = 23011,\n MarkOpportunities = 23012,\n DeleteOpportunity = 23013,\n\n CanAccessLeads = 23100,\n ManageLeads = 23101,\n CanCreateLeadViews = 23110,\n ManageOtherUsersLeadViews = 23111,\n}\n\nexport class SalesSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Sales,\n [\n { _id: SalesSecurityRight.CanAccessOpportunities, name: 'Access: Opportunities', basic: true },\n { _id: SalesSecurityRight.ManageOpportunities, name: 'Manage: Opportunities', basic: true },\n\n\n { _id: SalesSecurityRight.CanAccessLeads, name: 'Access: Leads', basic: true },\n { _id: SalesSecurityRight.ManageLeads, name: 'Manage: Leads', basic: true },\n\n\n { _id: SalesSecurityRight.CanCreateOpportunityViews, name: 'Can Create Opportunity Views', basic: false },\n { _id: SalesSecurityRight.ManageOtherUsersOpportunityViews, name: 'Can Manage Other User Opportunity Views', basic: false },\n { _id: SalesSecurityRight.MarkOpportunities, name: 'Mark Opportunities Won/Lost', basic: false },\n { _id: SalesSecurityRight.DeleteOpportunity, name: 'Delete Opportunity', basic: false },\n\n { _id: SalesSecurityRight.CanCreateLeadViews, name: 'Can Create Lead Views', basic: false },\n { _id: SalesSecurityRight.ManageOtherUsersLeadViews, name: 'Can Manage Other User Lead Views', basic: false },\n\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Professional;\n }\n\n\n}\n","import { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\n\nexport enum SchedulerSecurityRight {\n CanAccess = 7000,\n ManageAppointments = 7001,\n ManageRunSheets = 7002,\n ManageOtherUserResourceGroups = 7073,\n ManageFieldAllocations = 7074,\n ManageOtherUsersViews = 7075,\n CanCreateCustomViews = 7076 ///Manage Custom Views: Create and Share\n}\n\nexport class SchedulerSecurityModule extends BaseSecurityModule {\n\n constructor() {\n\n super(\n SecurityModuleName.Scheduler,\n [\n { _id: SchedulerSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: SchedulerSecurityRight.ManageAppointments, name: 'Manage Appointments', basic: true },\n { _id: SchedulerSecurityRight.ManageRunSheets, name: 'Manage Run Sheets', basic: true },\n { _id: SchedulerSecurityRight.ManageOtherUserResourceGroups, name: 'Manage Other User Resource Groups', basic: true },\n { _id: SchedulerSecurityRight.ManageFieldAllocations, name: 'Manage Field Allocations', basic: true },\n\n\n { _id: SchedulerSecurityRight.CanCreateCustomViews, name: 'Can Create Views', basic: false },\n { _id: SchedulerSecurityRight.ManageOtherUsersViews, name: 'Can Manage Other User Views', basic: false },\n ] as SecurityRight[]\n );\n }\n\n}\n","import { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum TaskSecurityRight {\n CanAccess = 21000,\n ViewOtherTask = 21001,\n\n ManageManualTasks = 21002,\n ManageTaskChecklists = 21003,\n\n DeleteMyTasks = 21004,\n DeleteAnyTasks = 21005,\n}\n\nexport class TaskSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Tasks,\n [\n { _id: TaskSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: TaskSecurityRight.ViewOtherTask, name: \"View Other User's Personal Task\", basic: true },\n\n { _id: TaskSecurityRight.ManageManualTasks, name: \"Manage Manual Tasks\", basic: false },\n { _id: TaskSecurityRight.ManageTaskChecklists, name: \"Manage Task Checklists\", basic: false },\n\n { _id: TaskSecurityRight.DeleteMyTasks, name: \"Delete Tasks Created By User\", basic: false },\n { _id: TaskSecurityRight.DeleteAnyTasks, name: \"Delete Any Tasks\", basic: false },\n ] as SecurityRight[]\n );\n }\n\n\n}\n","import { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum TimesheetSecurityRight {\n CanAccess = 6000,\n ManageMyTimesheets = 6001,\n ChangeStatus = 6002,\n ManageAllTimesheets = 6003\n\n}\n\nexport class TimesheetSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Timesheets,\n [\n { _id: TimesheetSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: TimesheetSecurityRight.ManageMyTimesheets, name: 'Manage My Timesheets', basic: true },\n { _id: TimesheetSecurityRight.ManageAllTimesheets, name: 'Manage All Timesheets', basic: false }\n ] as SecurityRight[]\n );\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum VariationSecurityRight {\n CanAccess = 16000,\n Manage = 16001,\n}\n\nexport class VariationSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Variations,\n [\n { _id: VariationSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: VariationSecurityRight.Manage, name: 'Manage', basic: true },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum WorkComplianceSecurityRight {\n CanAccess = 11000,\n ManageCompliance = 11001,\n ManageComplianceRules = 11002\n}\n\nexport class WorkComplianceSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.WorkCompliance,\n [\n { _id: WorkComplianceSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: WorkComplianceSecurityRight.ManageCompliance, name: 'Manage Compliance', basic: true },\n { _id: WorkComplianceSecurityRight.ManageComplianceRules, name: 'Manage Compliance Rules', basic: false },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Professional;\n }\n\n\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum FormSecurityRight {\n CanAccessForms = 26000,\n CreateEditForms = 26001,\n DeleteForms = 26002,\n ModifyAfterSubmission = 26003,\n}\n\nexport class FormSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Forms,\n [\n { _id: FormSecurityRight.CanAccessForms, name: 'Access Forms', basic: true, subscription: TenantSubscription.Professional },\n { _id: FormSecurityRight.CreateEditForms, name: 'Create/Edit Forms', basic: false, subscription: TenantSubscription.Professional },\n { _id: FormSecurityRight.DeleteForms, name: 'Delete Forms ( Requires Create/Edit )', basic: false, subscription: TenantSubscription.Professional },\n { _id: FormSecurityRight.ModifyAfterSubmission, name: 'Modify After Submission', basic: false, subscription: TenantSubscription.Professional },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n\n }\n}\n","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum AddressValidationSecurityRight {\n CanAccess = 32000\n}\n\nexport class AddressValidationSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.AddressValidation,\n [\n { _id: AddressValidationSecurityRight.CanAccess, name: 'Access', basic: true },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n\n}","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum EnterpriseSearchSecurityRight {\n CanAccess = 32000\n}\n\nexport class EnterpriseSearchSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.EnterpriseSearch,\n [\n { _id: EnterpriseSearchSecurityRight.CanAccess, name: 'Access', basic: true },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n\n}","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum PropertyManagementSecurityRight {\n CanAccess = 41000\n}\n\nexport class PropertyManagementSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.PropertyManagement,\n [\n { _id: PropertyManagementSecurityRight.CanAccess, name: 'Access', basic: true },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n\n}","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum WorkBuddyConnectSecurityRight {\n CanAccess = 62000\n}\n\nexport class WorkBuddyConnectSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.WorkBuddyConnect,\n [\n { _id: WorkBuddyConnectSecurityRight.CanAccess, name: 'Access', basic: true },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n\n}","import { TenantSubscription } from '../../entities/tenant';\nimport { BaseSecurityModule } from '../base.security.module';\nimport { SecurityModuleName, SecurityRight } from '../security.module';\n\nexport enum EquipmentSecurityRight {\n CanAccess = 140_000,\n CanManage = 140_001,\n}\n\nexport class EquipmentSecurityModule extends BaseSecurityModule {\n\n constructor() {\n super(\n SecurityModuleName.Equipment,\n [\n { _id: EquipmentSecurityRight.CanAccess, name: 'Access', basic: true },\n { _id: EquipmentSecurityRight.CanManage, name: 'Manage', basic: true },\n ] as SecurityRight[]\n );\n\n this.plan = TenantSubscription.Custom;\n }\n\n\n}","import * as Enumerable from 'linq';\nimport { UserType } from '../../entities';\nimport { EmployeeAdministrator } from '../roles/employee.administrator';\nimport { EmployeeCompliance } from '../roles/employee.compliance';\nimport { EmployeeFinance } from '../roles/employee.finance';\nimport { EmployeeOperations } from '../roles/employee.operations';\nimport { EmployeeScheduler } from '../roles/employee.scheduler';\nimport { EmployeeTechnician } from '../roles/employee.technician';\nimport { SystemAdministrator } from '../roles/system.administrator';\nimport { SecurityModule } from '../security.module';\nimport { SecurityRole, SecurityRoleTiny, SecurityRoleType } from '../security.role';\nimport { SubcontractorAdministrator, SubcontractorUser, ClientUser } from '../roles';\nimport { AppSecurityRight } from '../modules';\n\nexport class SecurityRoleUtility {\n\n public static getSystemRoles(): SecurityRole[] {\n\n const roles = [\n new EmployeeAdministrator(),\n new EmployeeCompliance(),\n new EmployeeFinance(),\n new EmployeeOperations(),\n new EmployeeScheduler(),\n new EmployeeTechnician(),\n new SubcontractorAdministrator(),\n new SubcontractorUser(),\n new SystemAdministrator(),\n new ClientUser()\n ];\n\n return roles;\n }\n\n public static isSubContractor(userType: UserType | string): boolean {\n\n if (!userType) return false;\n\n const subcontractors = [\n UserType.SubcontractorCompany,\n UserType.SubcontractorEmployee,\n UserType.SubcontractorIndividual\n ] as string[];\n\n return subcontractors.includes(userType.toString());\n\n }\n\n public static isTechnician(roleName: string): boolean {\n\n if (!roleName) return false;\n\n const technicianRoles = [\n SecurityRoleType.SubcontractorAdministrator,\n SecurityRoleType.SubcontractorUser,\n SecurityRoleType.EmployeeTechnician\n ] as string[];\n\n return technicianRoles.includes(roleName);\n }\n\n public static checkRights(role: SecurityRole, rights: number[]): boolean {\n\n if (!role || !rights?.length)\n return false;\n\n const isTiny = !role['moduleRights'];\n\n const allRights = Enumerable.from(role.rights)\n .distinct()\n .toArray();\n\n if (!allRights?.length || !rights?.length)\n return false;\n\n let count = 0;\n Enumerable.from(allRights).forEach(x => {\n if (rights.includes(x))\n count += 1;\n });\n\n return count > 0;\n }\n\n public static hasAccessRight(module: SecurityModule, rights: number[]): boolean {\n\n const accessRight = Enumerable.from(module.rights)\n .select(x => x._id)\n .firstOrDefault();\n\n return rights.includes(accessRight);\n }\n\n public static getEmployeeRoles(roles: SecurityRole[]): Partial[] {\n\n return Enumerable.from(roles)\n .where(x => x.type === UserType.Employee)\n .orderBy(x => x.name)\n .toArray();\n\n }\n\n public static getSubcontractorRoles(roles: SecurityRole[]): Partial[] {\n\n return Enumerable.from(roles)\n .where(x => x.type !== UserType.Employee && x.type !== UserType.SystemAdministrator)\n .orderBy(x => x.name)\n .toArray();\n\n }\n\n\n public static checkTinyRights(role: SecurityRoleTiny, ...rights: number[]): boolean {\n\n if (!role || !rights?.length)\n return false;\n\n return Enumerable.from(role.rights).any(x => rights.includes(x));\n }\n\n public static checkAllTinyRights(role: SecurityRoleTiny, ...rights: number[]): boolean {\n\n if (!role || !rights?.length)\n return false;\n\n return Enumerable.from(rights).all(x => role.rights.includes(x));\n }\n\n public static getTinyRole(role: SecurityRole): SecurityRoleTiny {\n if (!role) return null;\n\n return {\n _id: role._id,\n name: role.name,\n type: role.type,\n rights: [\n ...role.rights,\n AppSecurityRight.FeatureSupervisor,\n AppSecurityRight.FeatureScheduler2,\n AppSecurityRight.FeatureJobRoles,\n AppSecurityRight.FeatureBillTo\n ]\n } as SecurityRoleTiny;\n }\n\n}\n","import { UserType, Entity } from '../entities';\nimport * as Enumerable from 'linq';\n\nexport enum SecurityRoleType {\n EmployeeAdministrator = 'Administrator',\n EmployeeTechnician = 'Technician',\n EmployeeOperations = 'Operations',\n EmployeeScheduler = 'Scheduler',\n EmployeeFinance = 'Finance',\n EmployeeCompliance = 'Compliance',\n SubcontractorAdministrator = 'Subcontractor Administrator',\n SubcontractorUser = 'Subcontractor User',\n SystemAdministrator = 'System Administrator',\n ClientUser = 'Client User',\n None = 'None',\n}\n\n\nexport interface SecurityRole {\n _id: string;\n name: string;\n hidden?: boolean;\n type: UserType;\n system: boolean;\n description: string;\n rights: number[];\n inUse?: boolean;\n}\n\nexport interface SecurityRoleTiny {\n _id?: string;\n name: string;\n type: UserType;\n rights: number[];\n}\n\nexport interface RoleEntity extends Entity {\n type: UserType;\n}\n\nexport class LoginContactSecurityRoleTiny implements SecurityRoleTiny {\n\n // public static id = '00000000-0000-0000-0000-000000000001';\n\n // public readonly _id = LoginContactSecurityRoleTiny.id;\n public readonly rights: number[];\n public type = UserType.LoginContact;\n // public readonly isClient: boolean;\n // public readonly isSubContractor: boolean;\n public readonly name = 'Login Contact Combined Role';\n\n\n constructor(roles: SecurityRoleTiny[]) {\n this.rights = Enumerable.from(roles).selectMany(x => x.rights).toArray();\n // this.isClient = Enumerable.from(roles).any(x => x.type === UserType.Client);\n // this.isSubContractor = Enumerable.from(roles).any(x => x.type === UserType.Subcontractor);\n }\n}\n","import { ConfigurationSecurityRight, IndividualComplianceSecurityRight, WorkComplianceSecurityRight, PurchaseOrderSecurityRight, QuoteSecurityRight, FinanceSecurityRight, JobSecurityRight, DefectSecurityRight, AssetSecurityRight, SchedulerSecurityRight, AppSecurityRight, CrmSecurityRight, VariationSecurityRight, RecurringJobSecurityRight, TaskSecurityRight, TimesheetSecurityRight, PortalClientSecurityRight, FormSecurityRight, PortalContractorSecurityRight, EquipmentSecurityRight } from './modules';\n\nexport const managePricingRights = [ConfigurationSecurityRight.ManagePricing];\nexport const manageMetaDataRights = [ConfigurationSecurityRight.ManageMetadata];\nexport const manageTemplateRights = [ConfigurationSecurityRight.ManageTemplates];\nexport const manageTenancyRights = [ConfigurationSecurityRight.ManageTenancy];\n\n\nexport const manageIndividualComplianceRulesRights = [IndividualComplianceSecurityRight.ManageComplianceRules];\nexport const manageIndividualComplianceRights = [IndividualComplianceSecurityRight.ManageCompliance];\n\nexport const manageWorkComplianceRulesRights = [WorkComplianceSecurityRight.ManageComplianceRules];\n\nexport const quoteManageRights = [QuoteSecurityRight.Manage];\n// export const quoteMarkRights = [QuoteSecurityRight.Mark];\n\nexport const financeInvoiceRights = [FinanceSecurityRight.ManageInvoices];\nexport const financeBillRights = [FinanceSecurityRight.ManageBills];\n\nexport const jobManageRights = [JobSecurityRight.Manage];\nexport const dispatchRights = [JobSecurityRight.Dispatch];\nexport const finaliseJobRights = [JobSecurityRight.FinaliseJob];\nexport const finalliseWorkOrderRights = [JobSecurityRight.FinalliseWorkOrder];\nexport const completionDateRights = [JobSecurityRight.CompletionDate];\nexport const finaliseDateRights = [JobSecurityRight.FinaliseDate];\nexport const processJobRights = [JobSecurityRight.ProcessJob];\nexport const processWorkOrderRights = [JobSecurityRight.ProcessWorkOrder];\nexport const jobViewPricingRights = [JobSecurityRight.ViewPricing];\nexport const jobModifyPricingRights = [JobSecurityRight.ModifyPricing];\nexport const jobModifyAfterFinaliseRights = [JobSecurityRight.ModifyJobAfterFinalise];\nexport const jobModifyLockedItemRights = [JobSecurityRight.ModifyLockedItems];\nexport const modifyCompletionDate = [JobSecurityRight.CompletionDate];\nexport const modifyFinaliseDate = [JobSecurityRight.FinaliseDate];\nexport const jobManageActivityRights = [JobSecurityRight.ManageActivity];\nexport const jobManageOtherUserActivityRights = [JobSecurityRight.ManageOtherUserActivity];\nexport const jobManageComplianceRights = [WorkComplianceSecurityRight.ManageCompliance];\nexport const jobManagePurchaseOrderRights = [JobSecurityRight.ManagePurchaseOrder];\nexport const jobManageInvoicesRights = [JobSecurityRight.ManageInvoices];\nexport const jobManageBillsRights = [JobSecurityRight.ManageBills];\nexport const jobAccessQuotes = [JobSecurityRight.AccessQuote];\nexport const jobAccessSalesOrder = [JobSecurityRight.ManageSalesOrder];\n\nexport const accessDefect = [DefectSecurityRight.CanAccess];\nexport const manageDefect = [DefectSecurityRight.Manage];\n\n\nexport const accessAsset = [AssetSecurityRight.CanAccess];\nexport const manageAsset = [AssetSecurityRight.Manage];\n\nexport const accessEquipment = [EquipmentSecurityRight.CanAccess];\nexport const manageEquipment = [EquipmentSecurityRight.CanAccess];\n\nexport const jobManageOtherUserViewsRights = [JobSecurityRight.MangeOtherUserViews];\nexport const jobReverseWorkOrderStatusRights = [JobSecurityRight.ReverseWorkOrderStatus];\n\nexport const schedulerManageRunsheetRights = [SchedulerSecurityRight.ManageRunSheets];\nexport const schedulerManageAppoitmentRights = [SchedulerSecurityRight.ManageAppointments];\nexport const schedulerManageOtherUserResourceGroupsRights = [SchedulerSecurityRight.ManageOtherUserResourceGroups];\nexport const schedulerManageFieldAllocations = [SchedulerSecurityRight.ManageFieldAllocations];\n\nexport const loginToFieldRights = [AppSecurityRight.LoginField];\nexport const loginToWebRights = [AppSecurityRight.LoginWeb];\nexport const loginToClientRights = [AppSecurityRight.LoginClient];\n\nexport const crmManageServiceProviders = [CrmSecurityRight.ManageServiceProviders];\nexport const crmManageCustomers = [CrmSecurityRight.ManageCustomers];\nexport const crmManageSites = [CrmSecurityRight.ManageSites];\nexport const crmManageSuppliers = [CrmSecurityRight.ManageSuppliers];\nexport const crmManageEmployees = [CrmSecurityRight.ManageEmployees];\nexport const crmManageCompanies = [CrmSecurityRight.ManageCompanies];\nexport const crmManageSubcontractors = [CrmSecurityRight.ManageSubcontractors];\nexport const crmManageSecurityRights = [CrmSecurityRight.ManageSecurityRoles];\n\nexport const accessVariation = [VariationSecurityRight.CanAccess];\nexport const manageVariation = [VariationSecurityRight.Manage];\n\nexport const accessRecurringJob = [RecurringJobSecurityRight.CanAccess];\nexport const manageRecurringJob = [RecurringJobSecurityRight.Manage];\n\nexport const manageTaskChecklist = [TaskSecurityRight.ManageTaskChecklists];\n\nexport const accessTask = [TaskSecurityRight.CanAccess];\n\nexport const accessTimesheet = [TimesheetSecurityRight.CanAccess];\nexport const manageMyTimesheets = [TimesheetSecurityRight.ManageMyTimesheets];\nexport const manageAllTimesheets = [TimesheetSecurityRight.ManageAllTimesheets];\n\nexport const accessFinancialRecap = [JobSecurityRight.ViewPricing];\n\nexport const clientManageActivity = [PortalClientSecurityRight.ManageActivity];\nexport const accessPayments = [FinanceSecurityRight.CanAccessPayments];\n\n\n//Form security stuff\nexport const canModifySubmittedForm = [FormSecurityRight.ModifyAfterSubmission];\nexport const canCreateEditForms = [FormSecurityRight.CreateEditForms];\nexport const canDeleteForms = [FormSecurityRight.DeleteForms];\n\nexport const accessPurchaseOrder = [PurchaseOrderSecurityRight.CanAccess];\nexport const managePurchaseOrderRights = [PurchaseOrderSecurityRight.Manage];\nexport const processingPurchaseOrderRights = [PurchaseOrderSecurityRight.Processing];\n\n// contractor rights\nexport const portalCanModifySubmittedForm = [PortalContractorSecurityRight.ModifyFormAfterSubmission];\n","\nexport enum DefaultUsersIds {\n JmsAdmin = '00000000-0000-0000-0000-000000000001',\n WorkBuddyImporter = '00000000-0000-0000-0000-000000000002',\n AnonymousUser = '00000000-0000-0000-0000-000000000003',\n ExternalUser = '00000000-0000-0000-0000-000000000006',\n WorkBuddyConnect = '00000000-0000-0000-0000-000000000004',\n WorkBuddyRecurringJobScheduler = '00000000-0000-0000-0000-000000000005',\n WorkBuddyJobAutoCloseScheduler = '00000000-0000-0000-0000-000000000008',\n WorkBuddyReminderScheduler = '00000000-0000-0000-0000-000000000009',\n PhoneSystem = '00000000-0000-0000-0000-000000000006',\n ApiKeyUser = '00000000-0000-0000-0000-000000000007',\n WorkBuddy = '00000000-0000-0000-0000-000000009999',\n\n Me = '10000000-0000-0000-0000-000000000001',\n}\n\nexport class DefaultUsers {\n public static readonly JmsAdmin = { _id: DefaultUsersIds.JmsAdmin, name: 'JMS Admin' };\n public static readonly WorkBuddy = { _id: DefaultUsersIds.WorkBuddy, name: 'WorkBuddy' };\n public static readonly WorkBuddyImporter = { _id: DefaultUsersIds.JmsAdmin, name: 'WorkBuddy IMPORTER' };\n public static readonly WorkBuddyConnect = { _id: DefaultUsersIds.WorkBuddyConnect, name: 'WorkBuddy Connect' };\n public static readonly WorkBuddyRecurringJobScheduler = { _id: DefaultUsersIds.WorkBuddyRecurringJobScheduler, name: 'WorkBuddy Recurring Job Scheduler' };\n public static readonly WorkBuddyJobAutoCloseScheduler = { _id: DefaultUsersIds.WorkBuddyJobAutoCloseScheduler, name: 'WorkBuddy Job Auto Close Scheduler' };\n public static readonly WorkBuddyReminderScheduler = { _id: DefaultUsersIds.WorkBuddyReminderScheduler, name: 'WorkBuddy Reminder Scheduler' };\n public static readonly AnonymousUser = { _id: DefaultUsersIds.AnonymousUser, name: 'Anonymous User' };\n public static readonly ExternalUser = { _id: DefaultUsersIds.AnonymousUser, name: 'External User' };\n public static readonly MeUser = { _id: DefaultUsersIds.Me, name: 'Me' };\n public static readonly ApiKeyUser = { _id: DefaultUsersIds.ApiKeyUser, name: 'API Key' };\n}","import { TenantSubscription } from '../entities';\nimport * as Enumerable from 'linq';\n\nexport const TenantPlanFeatures = {\n [TenantSubscription.Core]: [TenantSubscription.Core],\n [TenantSubscription.Professional]: [TenantSubscription.Core, TenantSubscription.Professional],\n [TenantSubscription.Enterprise]: [TenantSubscription.Core, TenantSubscription.Professional, TenantSubscription.Enterprise],\n [TenantSubscription.Developer]: [TenantSubscription.Core, TenantSubscription.Professional, TenantSubscription.Enterprise, TenantSubscription.Custom],\n} as const;\n\nexport interface TenantPlan {\n subscription: TenantSubscription;\n features: {\n [key: string]: boolean;\n },\n addons: {\n [key: string]: boolean;\n }\n}\n\nexport function tenantFeatureEnabled(plan: TenantPlan, feature: string): boolean {\n const hasFeature = Enumerable\n .from(Object.keys(plan?.features))\n .any(key => plan[key] === true && key === feature);\n\n if (hasFeature)\n return true;\n\n return Enumerable\n .from(Object.keys(plan?.addons))\n .any(key => plan.addons[key] === true && key === feature);\n}","import { z } from 'zod';\nconst isZodType = obj => {\n return typeof (obj === null || obj === void 0 ? void 0 : obj.safeParse) === 'function';\n};\nconst isZodObject = obj => {\n if (typeof (obj === null || obj === void 0 ? void 0 : obj.passthrough) === 'function') {\n return true;\n }\n if (typeof (obj === null || obj === void 0 ? void 0 : obj.innerType) === 'function') {\n return isZodObject(obj === null || obj === void 0 ? void 0 : obj.innerType());\n }\n return false;\n};\nconst isZodObjectStrict = obj => {\n return typeof (obj === null || obj === void 0 ? void 0 : obj.passthrough) === 'function';\n};\nconst extractZodObjectShape = obj => {\n if (!isZodObject(obj)) {\n throw new Error('Unknown zod object type');\n }\n if ('innerType' in obj) {\n return extractZodObjectShape(obj.innerType());\n }\n return obj.shape;\n};\nconst zodMerge = (objectA, objectB) => {\n if (isZodObjectStrict(objectA)) {\n if (isZodObjectStrict(objectB)) {\n return objectA.merge(objectB);\n }\n return objectA;\n }\n if (isZodObjectStrict(objectB)) {\n return objectB;\n }\n return Object.assign({}, objectA, objectB);\n};\nconst checkZodSchema = (data, schema, {\n passThroughExtraKeys = false\n} = {}) => {\n if (isZodType(schema)) {\n const result = schema.safeParse(data);\n if (result.success) {\n return {\n success: true,\n data: passThroughExtraKeys && typeof data === 'object' ? {\n ...data,\n ...result.data\n } : result.data\n };\n }\n return {\n success: false,\n error: result.error\n };\n }\n return {\n success: true,\n data: data\n };\n};\n// Convert a ZodError to a plain object because ZodError extends Error and causes problems with NestJS\nconst zodErrorResponse = error => {\n return {\n name: error.name,\n issues: error.issues\n };\n};\nconst ZodErrorSchema = z.object({\n name: z.literal('ZodError'),\n issues: z.array(z.object({\n path: z.array(z.union([z.string(), z.number()])),\n message: z.string().optional(),\n code: z.nativeEnum(z.ZodIssueCode)\n })\n // ZodIssuse type are complex and potentially unstable. So we don’t deal with his specific fields other than the common.\n .catchall(z.any()))\n});\nconst ContractNoBody = Symbol('ContractNoBody');\n/**\n * Differentiate between a route and a router\n *\n * @param obj\n * @returns\n */\nconst isAppRoute = obj => {\n return 'method' in obj && 'path' in obj;\n};\nconst isAppRouteQuery = route => {\n return route.method === 'GET';\n};\nconst isAppRouteMutation = route => {\n return !isAppRouteQuery(route);\n};\n/**\n *\n * @deprecated Please use {@link initContract} instead.\n */\nconst initTsRest = () => initContract();\nconst recursivelyApplyOptions = (router, options) => {\n return Object.fromEntries(Object.entries(router).map(([key, value]) => {\n var _a, _b, _c;\n if (isAppRoute(value)) {\n return [key, {\n ...value,\n path: (options === null || options === void 0 ? void 0 : options.pathPrefix) ? options.pathPrefix + value.path : value.path,\n headers: zodMerge(options === null || options === void 0 ? void 0 : options.baseHeaders, value.headers),\n strictStatusCodes: (_a = value.strictStatusCodes) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.strictStatusCodes,\n validateResponseOnClient: (_b = value.validateResponseOnClient) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.validateResponseOnClient,\n responses: {\n ...(options === null || options === void 0 ? void 0 : options.commonResponses),\n ...value.responses\n },\n metadata: (options === null || options === void 0 ? void 0 : options.metadata) ? {\n ...(options === null || options === void 0 ? void 0 : options.metadata),\n ...((_c = value.metadata) !== null && _c !== void 0 ? _c : {})\n } : value.metadata\n }];\n } else {\n return [key, recursivelyApplyOptions(value, options)];\n }\n }));\n};\nconst ContractPlainTypeRuntimeSymbol = Symbol('ContractPlainType');\n/**\n * Instantiate a ts-rest client, primarily to access `router`, `response`, and `body`\n *\n * @returns {ContractInstance}\n */\nconst initContract = () => {\n return {\n // @ts-expect-error - this is a type error, but it's not clear how to fix it\n router: (endpoints, options) => recursivelyApplyOptions(endpoints, options),\n query: args => args,\n mutation: args => args,\n responses: args => args,\n response: () => ContractPlainTypeRuntimeSymbol,\n body: () => ContractPlainTypeRuntimeSymbol,\n type: () => ContractPlainTypeRuntimeSymbol,\n otherResponse: ({\n contentType,\n body\n }) => ({\n contentType,\n body\n }),\n noBody: () => ContractNoBody\n };\n};\nconst PARAM_REGEX = /:([^/?]+)\\??/g;\nconst DOUBLE_SLASH_REGEX = /\\/\\//g;\n/**\n * @param path - The URL e.g. /posts/:id\n * @param params - The params e.g. `{ id: string }`\n * @returns - The URL with the params e.g. /posts/123\n */\nconst insertParamsIntoPath = ({\n path,\n params\n}) => {\n let result = path.replace(PARAM_REGEX, (_, p) => params[p] || '').replace(DOUBLE_SLASH_REGEX, '/');\n while (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n return result;\n};\n\n/**\n *\n * @param query - Any JSON object\n * @param json - Use JSON.stringify to encode the query values\n * @returns - The query url segment, using explode array syntax, and deep object syntax\n */\nconst convertQueryParamsToUrlString = (query, json = false) => {\n const queryString = json ? encodeQueryParamsJson(query) : encodeQueryParams(query);\n return (queryString === null || queryString === void 0 ? void 0 : queryString.length) > 0 ? '?' + queryString : '';\n};\nconst encodeQueryParamsJson = query => {\n if (!query) {\n return '';\n }\n return Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => {\n let encodedValue;\n // if value is a string and is not a reserved JSON value or a number, pass it without encoding\n // this makes strings look nicer in the URL (e.g. ?name=John instead of ?name=%22John%22)\n // this is also how OpenAPI will pass strings even if they are marked as application/json types\n if (typeof value === 'string' && !['true', 'false', 'null'].includes(value.trim()) && isNaN(Number(value))) {\n encodedValue = value;\n } else {\n encodedValue = JSON.stringify(value);\n }\n return `${encodeURIComponent(key)}=${encodeURIComponent(encodedValue)}`;\n }).join('&');\n};\nconst encodeQueryParams = query => {\n if (!query) {\n return '';\n }\n return Object.keys(query)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .flatMap(key => tokeniseValue(key, query[key])).map(([key, value]) => {\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n }).join('&');\n};\n/**\n * A recursive function to convert an object/string/number/Date/whatever into an array of key=value pairs\n *\n * The output of this should be flatMap-able to a string of key=value pairs which can be\n * joined with & to form a query string\n *\n * This should be fully compatible with the \"qs\" library, but without the need to add a dependency\n */\nconst tokeniseValue = (key, value) => {\n if (Array.isArray(value)) {\n return value.flatMap((v, idx) => tokeniseValue(`${key}[${idx}]`, v));\n }\n if (value instanceof Date) {\n return [[`${key}`, value.toISOString()]];\n }\n if (value === null) {\n return [[`${key}`, '']];\n }\n if (value === undefined) {\n return [];\n }\n if (typeof value === 'object') {\n return Object.keys(value).flatMap(k =>\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n tokeniseValue(`${key}[${k}]`, value[k]));\n }\n return [[`${key}`, `${value}`]];\n};\n/**\n *\n * @param query - A server-side query object where values have been encoded as JSON strings\n * @returns - The same object with the JSON strings decoded. Objects that were encoded using toJSON such as Dates will remain as strings\n */\nconst parseJsonQueryObject = query => {\n return Object.fromEntries(Object.entries(query).map(([key, value]) => {\n let parsedValue;\n // if json parse fails, treat the value as a string\n // this allows us to pass strings without having to surround them with quotes\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n return [key, parsedValue];\n }));\n};\nclass UnknownStatusError extends Error {\n constructor(response, knownResponseStatuses) {\n const expectedStatuses = knownResponseStatuses.join(',');\n super(`Server returned unexpected response. Expected one of: ${expectedStatuses} got: ${response.status}`);\n this.response = response;\n }\n}\n\n/**\n * @deprecated Only safe to use on the client-side. Use `ServerInferResponses`/`ClientInferResponses` instead.\n */\nfunction getRouteResponses(router) {\n return {};\n}\n/**\n * Default fetch api implementation:\n *\n * Can be used as a reference for implementing your own fetcher,\n * or used in the \"api\" field of ClientArgs to allow you to hook\n * into the request to run custom logic\n */\nconst tsRestFetchApi = async ({\n route,\n path,\n method,\n headers,\n body,\n validateResponse,\n fetchOptions\n}) => {\n const result = await fetch(path, {\n ...fetchOptions,\n method,\n headers,\n body\n });\n const contentType = result.headers.get('content-type');\n if ((contentType === null || contentType === void 0 ? void 0 : contentType.includes('application/')) && (contentType === null || contentType === void 0 ? void 0 : contentType.includes('json'))) {\n const response = {\n status: result.status,\n body: await result.json(),\n headers: result.headers\n };\n const responseSchema = route.responses[response.status];\n if ((validateResponse !== null && validateResponse !== void 0 ? validateResponse : route.validateResponseOnClient) && isZodType(responseSchema)) {\n return {\n ...response,\n body: responseSchema.parse(response.body)\n };\n }\n return response;\n }\n if (contentType === null || contentType === void 0 ? void 0 : contentType.includes('text/')) {\n return {\n status: result.status,\n body: await result.text(),\n headers: result.headers\n };\n }\n return {\n status: result.status,\n body: await result.blob(),\n headers: result.headers\n };\n};\nconst createFormData = body => {\n const formData = new FormData();\n const appendToFormData = (key, value) => {\n if (value instanceof File) {\n formData.append(key, value);\n } else {\n formData.append(key, JSON.stringify(value));\n }\n };\n Object.entries(body).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n for (const item of value) {\n appendToFormData(key, item);\n }\n } else {\n appendToFormData(key, value);\n }\n });\n return formData;\n};\nconst normalizeHeaders = headers => {\n return Object.fromEntries(Object.entries(headers).map(([k, v]) => [k.toLowerCase(), v]));\n};\nconst fetchApi = options => {\n const {\n path,\n clientArgs,\n route,\n body,\n query,\n extraInputArgs,\n headers,\n fetchOptions\n } = options;\n const apiFetcher = clientArgs.api || tsRestFetchApi;\n const baseHeaders = clientArgs.baseHeaders && Object.fromEntries(Object.entries(clientArgs.baseHeaders).map(([name, valueOrFunction]) => {\n if (typeof valueOrFunction === 'function') {\n return [name, valueOrFunction(options)];\n } else {\n return [name, valueOrFunction];\n }\n }));\n const combinedHeaders = {\n ...(baseHeaders && normalizeHeaders(baseHeaders)),\n ...normalizeHeaders(headers)\n };\n // Remove any headers that are set to undefined\n Object.keys(combinedHeaders).forEach(key => {\n if (combinedHeaders[key] === undefined) {\n delete combinedHeaders[key];\n }\n });\n let fetcherArgs = {\n route,\n path,\n method: route.method,\n headers: combinedHeaders,\n body: undefined,\n rawBody: body,\n rawQuery: query,\n contentType: undefined,\n validateResponse: clientArgs.validateResponse,\n fetchOptions: {\n ...(clientArgs.credentials && {\n credentials: clientArgs.credentials\n }),\n ...fetchOptions\n },\n ...((fetchOptions === null || fetchOptions === void 0 ? void 0 : fetchOptions.signal) && {\n signal: fetchOptions.signal\n }),\n ...((fetchOptions === null || fetchOptions === void 0 ? void 0 : fetchOptions.cache) && {\n cache: fetchOptions.cache\n }),\n ...(fetchOptions && 'next' in fetchOptions && !!(fetchOptions === null || fetchOptions === void 0 ? void 0 : fetchOptions.next) && {\n next: fetchOptions.next\n })\n };\n if (route.method !== 'GET') {\n if ('contentType' in route && route.contentType === 'multipart/form-data') {\n fetcherArgs = {\n ...fetcherArgs,\n contentType: 'multipart/form-data',\n body: body instanceof FormData ? body : createFormData(body)\n };\n } else if ('contentType' in route && route.contentType === 'application/x-www-form-urlencoded') {\n fetcherArgs = {\n ...fetcherArgs,\n contentType: 'application/x-www-form-urlencoded',\n headers: {\n 'content-type': 'application/x-www-form-urlencoded',\n ...fetcherArgs.headers\n },\n body: typeof body === 'string' ? body : new URLSearchParams(body)\n };\n } else if (body !== null && body !== undefined) {\n fetcherArgs = {\n ...fetcherArgs,\n contentType: 'application/json',\n headers: {\n 'content-type': 'application/json',\n ...fetcherArgs.headers\n },\n body: JSON.stringify(body)\n };\n }\n }\n return apiFetcher({\n ...fetcherArgs,\n ...extraInputArgs\n });\n};\nconst evaluateFetchApiArgs = (route, clientArgs, inputArgs) => {\n const {\n query,\n params,\n body,\n headers,\n extraHeaders,\n overrideClientOptions,\n fetchOptions,\n // TODO: remove in 4.0\n cache,\n // TODO: remove in 4.0\n next,\n // extra input args\n ...extraInputArgs\n } = inputArgs || {};\n const overriddenClientArgs = {\n ...clientArgs,\n ...overrideClientOptions\n };\n const completeUrl = getCompleteUrl(query, overriddenClientArgs.baseUrl, params, route, !!overriddenClientArgs.jsonQuery);\n return {\n path: completeUrl,\n clientArgs: overriddenClientArgs,\n route,\n body,\n query,\n extraInputArgs,\n fetchOptions: {\n ...(cache && {\n cache\n }),\n ...(next && {\n next\n }),\n ...fetchOptions\n },\n headers: {\n ...extraHeaders,\n ...headers\n }\n };\n};\n/**\n * @hidden\n */\nconst getCompleteUrl = (query, baseUrl, params, route, jsonQuery) => {\n const path = insertParamsIntoPath({\n path: route.path,\n params: params\n });\n const queryComponent = convertQueryParamsToUrlString(query, jsonQuery);\n return `${baseUrl}${path}${queryComponent}`;\n};\nconst getRouteQuery = (route, clientArgs) => {\n const knownResponseStatuses = Object.keys(route.responses);\n return async inputArgs => {\n const fetchApiArgs = evaluateFetchApiArgs(route, clientArgs, inputArgs);\n const response = await fetchApi(fetchApiArgs);\n // TODO: in next major version, throw by default if `strictStatusCode` is enabled\n if (!clientArgs.throwOnUnknownStatus) {\n return response;\n }\n if (knownResponseStatuses.includes(response.status.toString())) {\n return response;\n }\n throw new UnknownStatusError(response, knownResponseStatuses);\n };\n};\nconst initClient = (router, args) => {\n return Object.fromEntries(Object.entries(router).map(([key, subRouter]) => {\n if (isAppRoute(subRouter)) {\n return [key, getRouteQuery(subRouter, args)];\n } else {\n return [key, initClient(subRouter, args)];\n }\n }));\n};\nclass ResponseValidationError extends Error {\n constructor(appRoute, cause) {\n super(`[ts-rest] Response validation failed for ${appRoute.method} ${appRoute.path}: ${cause.message}`);\n this.appRoute = appRoute;\n this.cause = cause;\n }\n}\nconst isAppRouteResponse = value => {\n return value != null && typeof value === 'object' && 'status' in value && typeof value.status === 'number';\n};\nconst isAppRouteOtherResponse = response => {\n return response != null && typeof response === 'object' && 'contentType' in response;\n};\nconst isAppRouteNoBody = response => {\n return response === ContractNoBody;\n};\nconst validateResponse = ({\n appRoute,\n response\n}) => {\n if (isAppRouteResponse(response)) {\n const responseType = appRoute.responses[response.status];\n const responseSchema = isAppRouteOtherResponse(responseType) ? responseType.body : responseType;\n const responseValidation = checkZodSchema(response.body, responseSchema);\n if (!responseValidation.success) {\n throw new ResponseValidationError(appRoute, responseValidation.error);\n }\n return {\n status: response.status,\n body: responseValidation.data\n };\n }\n return response;\n};\nclass TsRestResponseError extends Error {\n constructor(route, response) {\n super();\n this.statusCode = response.status;\n this.body = response.body;\n this.name = this.constructor.name;\n if (typeof response.body === 'string') {\n this.message = response.body;\n } else if (typeof response.body === 'object' && response.body !== null && 'message' in response.body && typeof response.body.message === 'string') {\n this.message = response.body['message'];\n } else {\n this.message = 'Error';\n }\n }\n}\nconst isResponse = (response, contractEndpoint) => {\n return typeof response === 'object' && response !== null && 'status' in response && 'body' in response && typeof response.status === 'number' && response.status >= 200 && response.status < 600 && ((contractEndpoint === null || contractEndpoint === void 0 ? void 0 : contractEndpoint.strictStatusCodes) ? Object.keys(contractEndpoint.responses).includes(response.status.toString()) : true);\n};\nconst isSuccessResponse = (response, contractEndpoint) => {\n return isResponse(response, contractEndpoint) && response.status >= 200 && response.status < 300;\n};\nconst isErrorResponse = (response, contractEndpoint) => {\n return isResponse(response, contractEndpoint) && !isSuccessResponse(response, contractEndpoint);\n};\nconst isUnknownResponse = (response, contractEndpoint) => {\n return isResponse(response) && !Object.keys(contractEndpoint.responses).includes(response.status.toString());\n};\nconst isUnknownSuccessResponse = (response, contractEndpoint) => {\n return isSuccessResponse(response) && isUnknownResponse(response, contractEndpoint);\n};\nconst isUnknownErrorResponse = (response, contractEndpoint) => {\n return isErrorResponse(response) && isUnknownResponse(response, contractEndpoint);\n};\nconst exhaustiveGuard = response => {\n throw new Error(`Unreachable code: Response status is ${response.status}`);\n};\nexport { ContractNoBody, ContractPlainTypeRuntimeSymbol, ResponseValidationError, TsRestResponseError, UnknownStatusError, ZodErrorSchema, checkZodSchema, convertQueryParamsToUrlString, encodeQueryParams, encodeQueryParamsJson, evaluateFetchApiArgs, exhaustiveGuard, extractZodObjectShape, fetchApi, getCompleteUrl, getRouteQuery, getRouteResponses, initClient, initContract, initTsRest, insertParamsIntoPath, isAppRoute, isAppRouteMutation, isAppRouteNoBody, isAppRouteOtherResponse, isAppRouteQuery, isAppRouteResponse, isErrorResponse, isResponse, isSuccessResponse, isUnknownErrorResponse, isUnknownResponse, isUnknownSuccessResponse, isZodObject, isZodObjectStrict, isZodType, parseJsonQueryObject, tsRestFetchApi, validateResponse, zodErrorResponse, zodMerge };","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\nimport { AddressType, Address } from '../entities';\n\nconst c = initContract();\n\n\nexport const AddressSchema = z.object({\n _id: z.string(),\n name: z.string().optional(),\n color: z.string().optional(),\n data: z.any().optional(),\n active: z.boolean().optional(),\n system: z.boolean().optional(),\n\n street1: z.string().optional(),\n street2: z.string().optional(),\n suburb: z.string().optional(),\n county: z.string().optional(),\n state: z.string().optional(),\n postcode: z.number().optional(),\n postalCode: z.string().optional(),\n country: z.string().optional(),\n lat: z.number().optional(),\n lgn: z.number().optional(),\n timezone: z.string().optional(),\n matchKey: z.string().optional(),\n type: z.nativeEnum(AddressType).optional(),\n});\n\nexport const AddressSearchContract = c.router(\n {\n search: {\n method: 'GET',\n path: '/rpc',\n responses: {\n 201: z.array(AddressSchema),\n },\n query: z.object({\n s: z.string()\n }),\n summary: 'Search address',\n },\n },\n // {\n // pathPrefix: '/address/search'\n // }\n);"],"mappings":"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AAGA,EAAe,WAAY,SAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,SAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,UAAY,SAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAAGA,EAAe,WAAY,SAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,SAAU,EAAGA,EAAe,UAAY,SAAU,EAAGA,EAAe,UAAY,UAAU,EAAG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,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,QAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAU,EAAG,CAAC,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAU,EAAG,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,QAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAU,EAAG,CAAC,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,SAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,SAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,SAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY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CI,YAAe,4BACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,MACjB,GAGT,CACI,YAAe,MACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,MACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,MACf,YAAe,cACf,QAAW,CACP,CACI,WAAc,KACjB,GAGT,CACI,YAAe,MACf,QAAW,CACP,CACI,IAAO,WAEX,CACI,WAAc,qBAElB,CACI,UAAa,oBAEjB,CACI,MAAS,EACZ,GAGT,CACI,YAAe,qBACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,qBACf,YAAe,kBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,OACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,OACf,YAAe,cACf,QAAW,CACP,CACI,WAAc,KAElB,CACI,UAAa,IAEjB,CACI,WAAc,KACjB,GAGT,CACI,YAAe,eACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,eACf,YAAe,kBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,eACf,YAAe,cACf,QAAW,CACP,CACI,WAAc,KACjB,GAGT,CACI,YAAe,iCACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,gBACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,aACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,UACf,YAAe,cACf,QAAW,CACP,CACI,WAAc,IACjB,GAGT,CACI,YAAe,eACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,eACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,UACZ,GAGT,CACI,YAAe,kBACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,MACjB,GAGT,CACI,YAAe,kBACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,WAEb,CACI,WAAc,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A,CACV,EACaS,GAAoB,CAC/B,KAAMT,EACN,OAAQA,EACR,OAAQA,CACV,EACaU,GAAyB,CACpC,KAAMV,EACN,OAAQA,EACR,OAAQA,EACR,aAAcC,EAChB,EACaU,GAAwB,CACnC,KAAMX,EACN,OAAQA,EACR,OAAQA,EACR,aAAcE,EAChB,EACaU,GAAiB,CAC5B,KAAMZ,EACN,OAAQA,EACR,UAAW,KACb,EACaa,GAAuB,CAClC,KAAMb,EACN,OAAQA,EACR,OAAQA,EACR,UAAW,KACb,EACac,GAA4B,CACvC,KAAMd,EACN,OAAQA,EACR,OAAQA,EACR,UAAW,MACX,aAAcC,EAChB,EACac,GAA2B,CACtC,KAAMf,EACN,OAAQA,EACR,OAAQA,EACR,UAAW,MACX,aAAcE,EAChB,EACac,GAAiB,CAC5B,KAAMhB,EACN,MAAOA,EACP,IAAKA,EACL,KAAMA,EACN,OAAQA,CACV,EACaiB,GAA8B,CACzC,KAAMjB,EACN,MAAOA,EACP,IAAKA,EACL,KAAMA,EACN,OAAQA,EACR,OAAQA,CACV,EACakB,GAAe,CAC1B,KAAMlB,EACN,MAAOC,GACP,IAAKD,EACL,KAAMA,EACN,OAAQA,CACV,EACamB,GAA4B,CACvC,KAAMnB,EACN,MAAOC,GACP,IAAKD,EACL,KAAMA,EACN,OAAQA,EACR,OAAQA,CACV,EACaoB,GAA4B,CACvC,KAAMpB,EACN,MAAOC,GACP,IAAKD,EACL,QAASC,GACT,KAAMD,EACN,OAAQA,CACV,EACaqB,GAAgB,CAC3B,KAAMrB,EACN,MAAOE,GACP,IAAKF,EACL,KAAMA,EACN,OAAQA,EACR,aAAcC,EAChB,EACaqB,GAA6B,CACxC,KAAMtB,EACN,MAAOE,GACP,IAAKF,EACL,KAAMA,EACN,OAAQA,EACR,OAAQA,EACR,aAAcC,EAChB,EACasB,GAAgB,CAC3B,KAAMvB,EACN,MAAOE,GACP,IAAKF,EACL,QAASE,GACT,KAAMF,EACN,OAAQA,EACR,aAAcE,EAChB,EACasB,GAA6B,CACxC,KAAMxB,EACN,MAAOE,GACP,IAAKF,EACL,QAASE,GACT,KAAMF,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OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,KACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,KACL,OAAK,KACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,KACL,OAAK,KACL,OAAK,KACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,KACL,OAAK,KACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,OAAK,IACL,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","names":["require_core","__commonJSMin","exports","module","root","factory","CryptoJS","Math","undefined","crypto","__require","cryptoSecureRandomInt","create","F","obj","subtype","C","C_lib","Base","overrides","instance","properties","propertyName","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","i","thatByte","j","clone","nBytes","C_enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","utf8Str","BufferedBlockAlgorithm","data","doFlush","processedWords","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","nWordsReady","nBytesReady","offset","Hasher","cfg","messageUpdate","hash","hasher","message","key","C_algo","require_x64_core","__commonJSMin","exports","module","root","factory","CryptoJS","undefined","C","C_lib","Base","X32WordArray","C_x64","X64Word","high","low","X64WordArray","words","sigBytes","x64Words","x64WordsLength","x32Words","i","x64Word","clone","wordsLength","require_lib_typedarrays","__commonJSMin","exports","module","root","factory","CryptoJS","C","C_lib","WordArray","superInit","subInit","typedArray","typedArrayByteLength","words","i","require_enc_utf16","__commonJSMin","exports","module","root","factory","CryptoJS","C","C_lib","WordArray","C_enc","Utf16BE","wordArray","words","sigBytes","utf16Chars","i","codePoint","utf16Str","utf16StrLength","swapEndian","word","require_enc_base64","__commonJSMin","exports","module","root","factory","CryptoJS","C","C_lib","WordArray","C_enc","Base64","wordArray","words","sigBytes","map","base64Chars","i","byte1","byte2","byte3","triplet","j","paddingChar","base64Str","base64StrLength","reverseMap","paddingIndex","parseLoop","nBytes","bits1","bits2","bitsCombined","require_enc_base64url","__commonJSMin","exports","module","root","factory","CryptoJS","C","C_lib","WordArray","C_enc","Base64url","wordArray","urlSafe","words","sigBytes","map","base64Chars","i","byte1","byte2","byte3","triplet","j","paddingChar","base64Str","base64StrLength","reverseMap","paddingIndex","parseLoop","nBytes","bits1","bits2","bitsCombined","require_md5","__commonJSMin","exports","module","root","factory","CryptoJS","Math","C","C_lib","WordArray","Hasher","C_algo","T","i","MD5","M","offset","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","a","b","c","d","FF","GG","HH","II","data","dataWords","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","hash","H_i","clone","s","t","n","require_sha1","__commonJSMin","exports","module","root","factory","CryptoJS","C","C_lib","WordArray","Hasher","C_algo","W","SHA1","M","offset","H","a","b","c","d","e","i","n","t","data","dataWords","nBitsTotal","nBitsLeft","clone","require_sha256","__commonJSMin","exports","module","root","factory","CryptoJS","Math","C","C_lib","WordArray","Hasher","C_algo","H","K","isPrime","n","sqrtN","factor","getFractionalBits","nPrime","W","SHA256","M","offset","a","b","c","d","e","f","g","h","i","gamma0x","gamma0","gamma1x","gamma1","ch","maj","sigma0","sigma1","t1","t2","data","dataWords","nBitsTotal","nBitsLeft","clone","require_sha224","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","WordArray","C_algo","SHA256","SHA224","hash","require_sha512","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","Hasher","C_x64","X64Word","X64WordArray","C_algo","X64Word_create","K","W","i","SHA512","M","offset","H","H0","H1","H2","H3","H4","H5","H6","H7","H0h","H0l","H1h","H1l","H2h","H2l","H3h","H3l","H4h","H4l","H5h","H5l","H6h","H6l","H7h","H7l","ah","al","bh","bl","ch","cl","dh","dl","eh","el","fh","fl","gh","gl","hh","hl","Wil","Wih","Wi","gamma0x","gamma0xh","gamma0xl","gamma0h","gamma0l","gamma1x","gamma1xh","gamma1xl","gamma1h","gamma1l","Wi7","Wi7h","Wi7l","Wi16","Wi16h","Wi16l","chh","chl","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Ki","Kih","Kil","t1l","t1h","t2l","t2h","data","dataWords","nBitsTotal","nBitsLeft","hash","clone","require_sha384","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_x64","X64Word","X64WordArray","C_algo","SHA512","SHA384","hash","require_sha3","__commonJSMin","exports","module","root","factory","undef","CryptoJS","Math","C","C_lib","WordArray","Hasher","C_x64","X64Word","C_algo","RHO_OFFSETS","PI_INDEXES","ROUND_CONSTANTS","x","y","t","newX","newY","LFSR","i","roundConstantMsw","roundConstantLsw","j","bitPosition","T","SHA3","state","M","offset","nBlockSizeLanes","M2i","M2i1","lane","round","tMsw","tLsw","Tx","Tx4","Tx1","Tx1Msw","Tx1Lsw","laneIndex","laneMsw","laneLsw","rhoOffset","TPiLane","T0","state0","TLane","Tx1Lane","Tx2Lane","roundConstant","data","dataWords","nBitsTotal","nBitsLeft","blockSizeBits","outputLengthBytes","outputLengthLanes","hashWords","clone","require_ripemd160","__commonJSMin","exports","module","root","factory","CryptoJS","Math","C","C_lib","WordArray","Hasher","C_algo","_zl","_zr","_sl","_sr","_hl","_hr","RIPEMD160","M","offset","i","offset_i","M_offset_i","H","hl","hr","zl","zr","sl","sr","al","bl","cl","dl","el","ar","br","cr","dr","er","t","f1","f2","f3","f4","f5","rotl","data","dataWords","nBitsTotal","nBitsLeft","hash","H_i","clone","x","y","z","n","require_hmac","__commonJSMin","exports","module","root","factory","CryptoJS","C","C_lib","Base","C_enc","Utf8","C_algo","HMAC","hasher","key","hasherBlockSize","hasherBlockSizeBytes","oKey","iKey","oKeyWords","iKeyWords","i","messageUpdate","innerHash","hmac","require_pbkdf2","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","Base","WordArray","C_algo","SHA256","HMAC","PBKDF2","cfg","password","salt","hmac","derivedKey","blockIndex","derivedKeyWords","blockIndexWords","keySize","iterations","block","blockWords","blockWordsLength","intermediate","i","intermediateWords","j","require_evpkdf","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","Base","WordArray","C_algo","MD5","EvpKDF","cfg","password","salt","block","hasher","derivedKey","derivedKeyWords","keySize","iterations","i","require_cipher_core","__commonJSMin","exports","module","root","factory","undef","CryptoJS","undefined","C","C_lib","Base","WordArray","BufferedBlockAlgorithm","C_enc","Utf8","Base64","C_algo","EvpKDF","Cipher","key","cfg","xformMode","dataUpdate","finalProcessedData","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","cipher","message","ciphertext","StreamCipher","finalProcessedBlocks","C_mode","BlockCipherMode","iv","CBC","words","offset","blockSize","xorBlock","thisBlock","block","i","C_pad","Pkcs7","data","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","padding","BlockCipher","modeCreator","mode","CipherParams","cipherParams","formatter","C_format","OpenSSLFormatter","wordArray","salt","openSSLStr","ciphertextWords","encryptor","cipherCfg","plaintext","format","C_kdf","OpenSSLKdf","password","keySize","ivSize","hasher","derivedParams","require_mode_cfb","__commonJSMin","exports","module","root","factory","undef","CryptoJS","CFB","words","offset","cipher","blockSize","generateKeystreamAndEncrypt","thisBlock","keystream","iv","i","require_mode_ctr","__commonJSMin","exports","module","root","factory","undef","CryptoJS","CTR","Encryptor","words","offset","cipher","blockSize","iv","counter","keystream","i","require_mode_ctr_gladman","__commonJSMin","exports","module","root","factory","undef","CryptoJS","CTRGladman","incWord","word","b1","b2","b3","incCounter","counter","Encryptor","words","offset","cipher","blockSize","iv","keystream","i","require_mode_ofb","__commonJSMin","exports","module","root","factory","undef","CryptoJS","OFB","Encryptor","words","offset","cipher","blockSize","iv","keystream","i","require_mode_ecb","__commonJSMin","exports","module","root","factory","undef","CryptoJS","ECB","words","offset","require_pad_ansix923","__commonJSMin","exports","module","root","factory","undef","CryptoJS","data","blockSize","dataSigBytes","blockSizeBytes","nPaddingBytes","lastBytePos","require_pad_iso10126","__commonJSMin","exports","module","root","factory","undef","CryptoJS","data","blockSize","blockSizeBytes","nPaddingBytes","require_pad_iso97971","__commonJSMin","exports","module","root","factory","undef","CryptoJS","data","blockSize","require_pad_zeropadding","__commonJSMin","exports","module","root","factory","undef","CryptoJS","data","blockSize","blockSizeBytes","dataWords","i","require_pad_nopadding","__commonJSMin","exports","module","root","factory","undef","CryptoJS","require_format_hex","__commonJSMin","exports","module","root","factory","undef","CryptoJS","undefined","C","C_lib","CipherParams","C_enc","Hex","C_format","HexFormatter","cipherParams","input","ciphertext","require_aes","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","BlockCipher","C_algo","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","d","i","x","xi","sx","x2","x4","x8","t","RCON","AES","key","keyWords","keySize","nRounds","ksRows","keySchedule","ksRow","invKeySchedule","invKsRow","M","offset","s0","s1","s2","s3","round","t0","t1","t2","t3","require_tripledes","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","WordArray","BlockCipher","C_algo","PC1","PC2","BIT_SHIFTS","SBOX_P","SBOX_MASK","DES","key","keyWords","keyBits","i","keyBitPos","subKeys","nSubKey","subKey","bitShift","invSubKeys","M","offset","exchangeLR","exchangeRL","round","lBlock","rBlock","f","t","mask","TripleDES","key1","key2","key3","require_rc4","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","StreamCipher","C_algo","RC4","key","keyWords","keySigBytes","S","i","j","keyByteIndex","keyByte","t","M","offset","generateKeystreamWord","keystreamWord","n","RC4Drop","require_rabbit","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","StreamCipher","C_algo","S","C_","G","Rabbit","K","iv","i","X","nextState","IV","IV_0","IV_1","i0","i2","i1","i3","M","offset","gx","ga","gb","gh","gl","require_rabbit_legacy","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","StreamCipher","C_algo","S","C_","G","RabbitLegacy","K","iv","X","i","nextState","IV","IV_0","IV_1","i0","i2","i1","i3","M","offset","gx","ga","gb","gh","gl","require_blowfish","__commonJSMin","exports","module","root","factory","undef","CryptoJS","C","C_lib","BlockCipher","C_algo","N","ORIG_P","ORIG_S","BLOWFISH_CTX","F","ctx","x","a","b","c","d","y","BlowFish_Encrypt","left","right","Xl","Xr","temp","i","BlowFish_Decrypt","BlowFishInit","key","keysize","Row","Col","keyIndex","index","Data1","Data2","res","j","Blowfish","keyWords","keySize","M","offset","require_crypto_js","__commonJSMin","exports","module","root","factory","undef","CryptoJS","DialogType","ApplicationEnvironment","environmentProd","locale","production","api","domain","auth","local","callbackUrl","jms","loginHref","logoutHref","captcha","captchaSecret","sentry","dsn","name","release","environment","ApplicationEnvironment","Production","environmentReleaseCandidate","locale","production","api","domain","auth","local","callbackUrl","jms","loginHref","logoutHref","captcha","captchaSecret","sentry","dsn","name","release","environment","ApplicationEnvironment","ReleaseCandidate","environmentEdge","locale","production","api","domain","auth","local","callbackUrl","jms","loginHref","logoutHref","captcha","captchaSecret","sentry","dsn","name","release","environment","ApplicationEnvironment","Edge","environmentVnext","locale","production","api","domain","auth","local","callbackUrl","jms","loginHref","logoutHref","captcha","captchaSecret","sentry","dsn","name","release","environment","ApplicationEnvironment","Nightly","environmentDev","locale","production","api","domain","auth","local","callbackUrl","jms","loginHref","logoutHref","captcha","captchaSecret","sentry","dsn","name","release","environment","ApplicationEnvironment","Development","appinsights","instrumentationKey","ApplicationTokens","DomainType","DomainUtility","getEnvironmentConfiguration","environment","ApplicationEnvironment","Development","Production","environmentProd","Staging","ReleaseCandidate","environmentReleaseCandidate","Nightly","Vnext","environmentVnext","Regression","Edge","environmentEdge","environmentDev","getFriendlyEnvironment","isProduction","production","getDomain","domain","getDatabaseName","application","tenant","ApplicationTokens","ID","replaceAll","Console","JMS","MicroservicePricing","MicroserviceConnect","MicroserviceSideEffects","CustomisationAssett","Compliance","Portal","getConnectionString","databaseServer","databaseName","toLocaleLowerCase","startsWith","getDomainType","domainType","Id","Register","ClientPortal","ContractorPortal","TrackingPortal","Mobile","PdfViewer","Tenant","getApplicationToken","app","PdfWorker","GlobalWorker","Functions","FunctionZip","FunctionCopyBlob","data","find","replace","split","join","isPortal","includes","DeviceType","SystemPriority","SystemPriorityName","AddressType","ActivityEntityName","CodeStatus","CodeInvoiceStatus","MAPSTYLE","ActivityType","ActivityKind","ActivityKinds","Object","values","LuxonError","InvalidDateTimeError","reason","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","unit","InvalidArgumentError","ZoneIsAbstractError","n","s","l","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","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","Zone","ZoneIsAbstractError","ts","opts","format","otherZone","singleton","SystemZone","_SystemZone","Zone","ts","format","locale","parseZoneInfo","formatOffset","otherZone","dtfCache","makeDTF","zone","typeToPos","hackyOffset","dtf","date","formatted","parsed","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","partsOffset","filled","i","type","value","pos","isUndefined","ianaZoneCache","IANAZone","_IANAZone","Zone","name","s","ts","format","locale","parseZoneInfo","formatOffset","year","month","day","adOrBc","hour","minute","second","asUTC","objToLocalTS","asTS","over","otherZone","intlLFCache","getCachedLF","locString","opts","key","dtf","intlDTCache","getCachedDTF","intlNumCache","getCachedINF","inf","intlRelCache","getCachedRTF","_a","base","cacheKeyOpts","__objRest","sysLocaleCache","systemLocale","weekInfoCache","getCachedWeekInfo","data","locale","parseLocaleString","localeStr","xIndex","uIndex","options","selectedStr","smaller","numberingSystem","calendar","intlConfigString","outputCalendar","mapMonths","f","ms","i","dt","DateTime","mapWeekdays","listStuff","loc","length","englishFn","intlFn","mode","supportsFastNumbers","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","intlOpts","__spreadValues","fixed","roundTo","padStart","PolyDateFormatter","z","gmtOffset","offsetZ","IANAZone","value","parts","part","offsetName","__spreadProps","PolyRelFormatter","isEnglish","hasRelative","count","unit","formatRelativeTime","fallbackWeekSettings","Locale","_Locale","weekSettings","defaultToEN","specifiedLocale","Settings","localeR","numberingSystemR","outputCalendarR","weekSettingsR","validateWeekSettings","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","isActuallyEn","hasNoWeirdness","alts","format","months","formatStr","weekdays","meridiems","eras","field","df","results","matching","m","hasLocaleWeekInfo","other","singleton","FixedOffsetZone","_FixedOffsetZone","Zone","offset","s","signedOffset","formatOffset","ts","format","otherZone","InvalidZone","Zone","zoneName","normalizeZone","input","defaultZone","offset","isUndefined","Zone","isString","lowered","SystemZone","FixedOffsetZone","IANAZone","isNumber","InvalidZone","numberingSystems","numberingSystemsUTF16","hanidecChars","parseDigits","str","value","i","code","key","min","max","digitRegexCache","resetDigitRegexCache","digitRegex","numberingSystem","append","ns","now","defaultZone","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","twoDigitCutoffYear","throwOnInvalid","defaultWeekSettings","Settings","n","zone","normalizeZone","SystemZone","locale","numberingSystem","outputCalendar","weekSettings","validateWeekSettings","cutoffYear","Locale","IANAZone","DateTime","resetDigitRegexCache","Invalid","reason","explanation","nonLeapLadder","leapLadder","unitOutOfRange","unit","value","Invalid","dayOfWeek","year","month","day","d","js","computeOrdinal","isLeapYear","uncomputeOrdinal","ordinal","table","month0","i","isoWeekdayToLocal","isoWeekday","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekday","weekNumber","weekYear","weeksInWeekYear","__spreadValues","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","daysInYear","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","usesLocalWeekValues","obj","loc","isUndefined","ConflictingSpecificationError","hasInvalidWeekData","validYear","isInteger","validWeek","integerBetween","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","daysInMonth","hasInvalidTimeData","hour","minute","second","millisecond","validHour","validMinute","validSecond","validMillisecond","isUndefined","o","isNumber","isInteger","isString","isDate","hasRelative","hasLocaleWeekInfo","maybeArray","thing","bestBy","arr","by","compare","best","next","pair","pick","obj","keys","a","k","hasOwnProperty","prop","validateWeekSettings","settings","InvalidArgumentError","integerBetween","v","bottom","top","floorMod","x","n","padStart","input","isNeg","padded","parseInteger","string","parseFloating","parseMillis","fraction","f","roundTo","number","digits","towardZero","factor","isLeapYear","year","daysInYear","daysInMonth","month","modMonth","modYear","objToLocalTS","d","firstWeekOffset","minDaysInFirstWeek","startOfWeek","isoWeekdayToLocal","dayOfWeek","weeksInWeekYear","weekYear","weekOffset","weekOffsetNext","untruncateYear","Settings","parseZoneInfo","ts","offsetFormat","locale","timeZone","date","intlOpts","modified","__spreadValues","parsed","m","signedOffset","offHourStr","offMinuteStr","offHour","offMin","offMinSigned","asNumber","value","numericValue","normalizeObject","normalizer","normalized","u","formatOffset","offset","format","hours","minutes","sign","timeObject","monthsLong","monthsShort","monthsNarrow","months","length","weekdaysLong","weekdaysShort","weekdaysNarrow","weekdays","meridiems","erasLong","erasShort","erasNarrow","eras","meridiemForDateTime","dt","weekdayForDateTime","monthForDateTime","eraForDateTime","formatRelativeTime","unit","count","numeric","narrow","units","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","stringifyTokens","splits","tokenToString","s","token","macroTokenToFormatOpts","DATE_SHORT","DATE_MED","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_MED","DATETIME_FULL","DATETIME_HUGE","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED_WITH_SECONDS","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE_WITH_SECONDS","Formatter","_Formatter","locale","opts","fmt","current","currentFull","bracketed","i","c","formatOpts","dt","__spreadValues","interval","n","p","padStart","knownEnglish","useDateTimeFormatter","string","extract","formatOffset","meridiem","meridiemForDateTime","month","length","standalone","monthForDateTime","weekday","weekdayForDateTime","maybeMacro","era","eraForDateTime","dur","tokenToField","lildur","mapped","tokens","realTokens","found","literal","val","collapsed","t","ianaRegex","combineRegexes","regexes","full","f","r","combineExtractors","extractors","m","mergedVals","mergedZone","cursor","ex","val","zone","next","__spreadValues","parse","s","patterns","regex","extractor","simpleParse","keys","match","ret","i","parseInteger","offsetRegex","isoExtendedZone","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","isoYmdRegex","isoWeekRegex","isoOrdinalRegex","extractISOWeekData","extractISOOrdinalData","sqlYmdRegex","sqlTimeRegex","sqlTimeExtensionRegex","int","pos","fallback","isUndefined","extractISOYmd","extractISOTime","parseMillis","extractISOOffset","local","fullOffset","signedOffset","FixedOffsetZone","extractIANAZone","IANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","num","force","parseFloating","obsOffsets","fromStrings","weekdayStr","result","untruncateYear","monthsShort","weekdaysLong","weekdaysShort","rfc2822","extractRFC2822","obsOffset","milOffset","offHourStr","offMinuteStr","offset","preprocessRFC2822","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","parseISODuration","extractISOTimeOnly","parseISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","__spreadValues","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","clone","dur","alts","clear","conf","Duration","durationToMillis","matrix","vals","_a","sum","unit","normalizeValues","factor","previous","current","isUndefined","previousVal","conv","rollUp","fraction","removeZeroes","newVals","key","value","_Duration","config","accurate","Locale","count","opts","obj","InvalidArgumentError","normalizeObject","durationLike","isNumber","text","parsed","parseISODuration","parseISOTimeOnly","reason","explanation","invalid","Invalid","Settings","InvalidDurationError","normalized","InvalidUnitError","o","fmt","fmtOpts","__spreadProps","Formatter","l","val","n","s","roundTo","millis","DateTime","duration","result","k","hasOwnProperty","fn","asNumber","values","mixed","locale","numberingSystem","conversionAccuracy","units","u","built","accumulated","lastUnit","own","ak","i","negated","other","eq","v1","v2","INVALID","validateStartEnd","start","end","Interval","_Interval","config","reason","explanation","InvalidArgumentError","invalid","Invalid","Settings","InvalidIntervalError","builtStart","friendlyDateTime","builtEnd","validateError","duration","dur","Duration","dt","text","opts","s","e","startIsValid","DateTime","endIsValid","o","unit","dateTime","dateTimes","sorted","d","a","b","results","i","added","next","idx","x","numberOfParts","other","intervals","found","final","sofar","current","item","currentCount","ends","flattened","arr","formatOpts","DATE_SHORT","Formatter","dateFormat","separator","mapFn","Info","zone","Settings","proto","DateTime","IANAZone","input","normalizeZone","locale","locObj","Locale","length","numberingSystem","outputCalendar","hasRelative","hasLocaleWeekInfo","dayDiff","earlier","later","utcDayStart","dt","ms","Duration","highOrderDiffs","cursor","units","differs","a","b","days","results","lowestOrder","highWater","unit","differ","diff_default","opts","remainingMillis","lowerOrderUnits","u","duration","MISSING_FTP","intUnit","regex","post","i","s","parseDigits","NBSP","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","offset","groups","h","m","signedOffset","simple","escapeToken","value","unitForToken","token","loc","one","digitRegex","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","literal","t","unit","untruncateYear","partTypeStyleToTokenVal","tokenForPart","part","formatOpts","resolvedOpts","type","isSpace","style","actualType","val","buildRegex","units","u","f","r","match","input","handlers","matches","all","matchIndex","hasOwnProperty","dateTimeFromMatches","toField","zone","specificOffset","isUndefined","IANAZone","FixedOffsetZone","parseMillis","k","dummyDateTimeCache","getDummyDateTime","DateTime","maybeExpandMacroToken","locale","Formatter","tokens","formatOptsToTokens","expandMacroTokens","TokenParser","format","regexString","rawMatches","result","ConflictingSpecificationError","explainFromTokens","parseFromTokens","invalidReason","df","parts","p","INVALID","MAX_DATE","unsupportedZone","zone","Invalid","possiblyCachedWeekData","dt","gregorianToWeek","possiblyCachedLocalWeekData","clone","inst","alts","current","DateTime","__spreadProps","__spreadValues","fixOffset","localTS","o","tz","utcGuess","o2","o3","tsToObj","ts","offset","d","objToTS","obj","objToLocalTS","adjustTime","dur","oPre","year","month","c","daysInMonth","millisToAdd","Duration","parseDataToDateTime","parsed","parsedZone","opts","format","text","specificOffset","setZone","interpretationZone","toTechFormat","allowZ","Formatter","Locale","toISODate","extended","longFormat","padStart","toISOTime","suppressSeconds","suppressMilliseconds","includeOffset","extendedZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedUnits","orderedWeekUnits","orderedOrdinalUnits","normalizeUnit","unit","normalized","InvalidUnitError","normalizeUnitWithLocalWeeks","guessOffsetForZone","zoneOffsetGuessCache","zoneOffsetTs","Settings","quickDT","normalizeZone","loc","isUndefined","invalid","hasInvalidGregorianData","hasInvalidTimeData","offsetProvis","diffRelative","start","end","round","roundTo","differ","count","lastOpts","argList","args","_DateTime","config","ot","isNumber","day","hour","minute","second","millisecond","FixedOffsetZone","date","options","isDate","zoneToUse","milliseconds","InvalidArgumentError","seconds","normalizeObject","minDaysInFirstWeek","startOfWeek","usesLocalWeekValues","tsNow","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","ConflictingSpecificationError","useWeekData","units","defaultValues","objNow","gregorianToOrdinal","foundFirst","u","v","higherOrderInvalid","hasInvalidWeekData","hasInvalidOrdinalData","gregorian","weekToGregorian","ordinalToGregorian","tsFinal","offsetFinal","vals","parseISODate","parseRFC2822Date","parseHTTPDate","fmt","locale","numberingSystem","localeToUse","parseFromTokens","parseSQL","reason","explanation","InvalidDateTimeError","formatOpts","localeOpts","tokenList","formatOptsToTokens","t","expandMacroTokens","Info","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","c1","c2","isLeapYear","daysInYear","weeksInWeekYear","calendar","keepLocalTime","keepCalendarTime","newTS","offsetGuess","asObj","outputCalendar","values","settingWeekStuff","mixed","duration","useLocaleWeeks","normalizedUnit","weekday","q","DATE_SHORT","ext","includePrefix","includeZone","includeOffsetSpace","base","otherDateTime","durOpts","maybeArray","otherIsLater","earlier","later","diffed","diff_default","Interval","inputMs","adjustedToZone","other","padding","dateTimes","bestBy","i","explainFromTokens","TokenParser","formatParser","result","invalidReason","DATE_MED","DATE_MED_WITH_WEEKDAY","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","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","friendlyDateTime","dateTimeish","DateTime","isNumber","InvalidArgumentError","CustomFormat","DateUtility","getStartOfDay","value","timezone","getDateTime","startOf","getEndOfDay","endOf","keepLocalTime","date","Date","DateTime","fromJSDate","fromMillis","String","fromISO","toString","setZone","getDateTimeFromISO","zone","getTimezoneIndependentDateTime","fromFormat","format","formatLocale","locale","getLocalToday","local","getLocalTimeZone","getValidDayForMonthAndYear","day","month","year","saneDay","isLeapYear","leapYear","getDate","toJSDate","getDateByAddMoreHours","hours","getTime","formatDateTime","dateFormat","dt","toFormat","formatShortDate","toLocaleString","DATE_SHORT","formatSimpleTime","TIME_SIMPLE","formatSimpleTime24","TIME_24_SIMPLE","customFormat","get","YYYYMMDD","DDMMYYY","getNowAsUtcWithCurrentTime","now","toISOString","getTodayAsUtcWithCurrentTime","set","hour","minute","second","Intl","DateTimeFormat","resolvedOptions","timeZone","getDateTimeAsUtc","getSimpleTime","getDateMed","DATE_MED","convertToDateTime","setDateAndTimeFromValues","timeValue","time","calcStartOfDayToEndTime","Interval","fromDateTimes","length","calcStartTimeToEndOfDay","_DateUtility","minDateTime","maxDateTime","Enumerable","CodePriceType","_CodePriceType","STANDARD_COST_PRICEBOOK","TRADE_PRICE_PRICEBOOK","RETAIL_PRICE_PRICEBOOK","ZERO_PRICE_PRICEBOOK","ALL","Source","LabelType","SystemLabels","isVisible","entity","destination","Source","Web","from","tenant","any","x","_a","value","_id","ContractorPortal","contractor","forDestination","labels","where","l","toArray","_SystemLabels","claimPending","name","type","LabelType","WorkOrderSystem","claimSubmitted","claimReceived","claimApproved","claimReturned","jobBulkInvoiceLocked","Job","unassignedWorkOrder","showOn","claimLabels","claimLabelMap","Map","map","client","AlertDisplayEntities","ActivityEntityName","Account","Site","ContactEmployee","Job","WorkOrder","Opportunity","Quote","LexoRank","constructor","value","bucket","isValidLexValue","isValidLexBucket","first","toString","from","lex","parse","nextBucket","String","fromCharCode","charCodeAt","prevBucket","between","lexBefore","lexAfter","increment","decrement","before","after","lessThan","incremented","plus1","append","pre","plus01","other","len","Math","max","length","idx","charA","charB","char","newVal","substring","incrementChar","decrementChar","hasNonZeroLeadingChars","cleanTrailingZeros","substr","match","str","exec","groups","test","Enumerable","JobSource","SystemWorkOrderStatus","OpenSystemWorkOrderStatusValues","Open","InProgress","OnHold","WorkOrderStatusSystemName","ActiveJobStatus","Enroute","Onsite","FilterFieldName","JobViewType","JobGroupBy","DefaultView","JobDisplay","SortJobBy","AccountingSystem","Enumerable","Enumerable","EXP_LIMIT","MAX_DIGITS","NUMERALS","LN10","PI","DEFAULTS","inexact","quadrant","external","decimalError","invalidArgument","precisionLimitExceeded","cryptoUnavailable","tag","mathfloor","mathpow","isBinary","isHex","isOctal","isDecimal","BASE","LOG_BASE","MAX_SAFE_INTEGER","LN10_PRECISION","PI_PRECISION","P","x","finalise","min","max","k","Ctor","y","i","j","xdL","ydL","xd","yd","xs","ys","pr","rm","cosine","toLessThanHalfPi","m","n","r","rep","s","sd","t","t3","t3plusx","digitsToString","divide","w","d","len","one","tinyPow","taylorSeries","cosh2_x","d8","sinh2_x","d5","d16","d20","getPi","wpr","xsd","halfPi","px","x2","base","isBase10","denominator","inf","num","arg","guard","naturalLogarithm","getLn10","checkRoundingDigits","e","xe","xLTy","getBase10Exponent","q","naturalExponential","carry","z","getPrecision","sine","rL","toStringBinary","dp","checkInt32","str","finiteToString","maxD","d0","d1","d2","n0","n1","yn","intPow","ws","indexOfLastWord","getZeroString","repeating","di","rd","convertBase","baseIn","baseOut","arr","arrL","strL","cos2x","multiplyInteger","temp","compare","a","b","aL","bL","subtract","cmp","logBase","more","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","sign","isTruncated","digits","roundUp","xdi","out","isExp","nonFiniteToString","zs","truncate","isOdd","maxOrMin","args","pow","sum","c","c0","numerator","x1","parseDecimal","parseOther","divisor","isFloat","p","Decimal","sin2_x","isHyperbolic","u","isNeg","pi","abs","acos","acosh","add","asin","asinh","atan","atanh","atan2","cbrt","ceil","clamp","config","obj","v","useDefaults","ps","cos","cosh","clone","isDecimalInstance","div","exp","floor","hypot","ln","log","log10","log2","mod","mul","random","round","sin","sinh","sqrt","sub","tan","tanh","trunc","Enumerable","Enumerable","ColorUtility","hexToRgb","hex","result","exec","r","parseInt","g","b","colorIsLight","Math","round","idealTextColor","darkText","lightText","toLocaleLowerCase","WorkOrderStatusUtility","getColor","status","getSystemColor","systemStatus","SystemWorkOrderStatus","Open","InProgress","OnHold","Completed","Finalised","Closed","getTextColor","color","ColorUtility","idealTextColor","getSystemTextColor","getSortOrder","getAll","getAllSystem","excludeClosed","items","push","jobStatusCalculation","statuses","isCompletedOrAfter","from","any","x","isDispatchedOrAfter","WorkOrderStatusSystemName","Dispatched","SubcontractorDispatched","systemName","shouldSendEmailToTechnician","convertToValidStatus","name","getHackFilterStatus","allStatus","length","firstOrDefault","subcontractorDispatched","getStatusDictionary","where","isSystemStatus","groupBy","toDictionary","key","toArray","canBeCustomStatus","byteToHex","i","unsafeStringify","arr","offset","getRandomValues","rnds8","rng","randomUUID","native_default","v4","options","buf","offset","_a","_b","_c","native_default","rnds","rng","unsafeStringify","v4_default","WorkOrderUtility","compareStatus","status","statusName","systemName","compareSystemStatus","systemStatusCompare","isSystemStatusOpen","SystemWorkOrderStatus","Open","isSystemStatusClosed","Closed","isSystemStatusFinalised","Finalised","isSystemStatusCompleted","Completed","isSystemStatusInProgress","InProgress","isSystemStatusOnHold","OnHold","systemStatus","sortCodes","codes","excludeCancelled","from","where","x","CodeStatus","Cancelled","select","location","sortOrder","getCodeSortOrder","orderBy","thenBy","name","toArray","clientCodes","validStatus","Normal","Variation","includes","validInvoicing","codeInvoicingStatus","CodeInvoiceStatus","NotBillable","NoCharge","sellPrice","addCodesUoM","__spreadValues","getBillTotal","workOrder","taxRate","total","subTotal","gst","taxRateValue","rate","Enumerable","forEach","p","amountExGST","buyPrice","quantity","amountGST","Decimal","toDecimalPlaces","toNumber","tax","getInvoiceTotal","job","workOrders","getWorkOrderWithVersion","version","workOrderNumber","convertWorkOrderToResponse","allocation","WorkOrderStatusUtility","convertToValidStatus","jobId","workOrderId","_id","dueDate","startDate","description","technician","subcontractor","type","jobType","owner","customerPO","customerWO","updatedAt","customFields","alternateSite","resources","buildCodes","options","_a","keepId","code","v4","adjustedSell","customSellPrice","longDescription","canOverrideDesc","category","codeUoM","customBuyPrice","note","suppliedBySubcontractor","costOnly","Enumerable","Enumerable","PriorityUtility","getColor","priority","getSystemColor","systemPriority","SystemPriority","P1","P2","P3","P4","P5","getSystemColorByName","SystemPriorityName","Urgent","High","Medium","Low","VeryLow","getTextColor","color","ColorUtility","idealTextColor","getSortOrder","fullPriority","systemSortOrder","getSystemSortOrder","priorityOrder","sortOrder","isNaN","getAll","JobUtility","allowAutomaticUpdate","wo","manuallyUpdated","status","systemStatus","buildJobStatus","workOrders","wos","from","where","e","_id","all","p","WorkOrderUtility","isSystemStatusClosed","SystemWorkOrderStatus","Closed","isSystemStatusFinalised","Finalised","any","isSystemStatusOnHold","OnHold","isSystemStatusInProgress","InProgress","isSystemStatusOpen","Open","isSystemStatusCompleted","Completed","enableFilterField","fieldName","filters","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","FilterFieldName","Customer","customers","length","BillingCompanies","billingCompanies","Status","statuses","JobType","jobTypes","PriceBook","priceBooks","Priority","priorities","Owner","owners","FieldSupervisor","fieldSupervisors","Technician","technicians","Label","labels","Zones","zones","Resources","resources","WorkCategories","workCategories","CreatedAt","DueDate","CompletedDate","FinalisedDate","getSortableDate","date","asc","Date","desc","getSortablePriority","priority","PriorityUtility","getSortOrder","getSortable","dueDate","completedDate","address","name","street1","trim","street2","suburb","state","county","postcode","toString","postalCode","safePostalCode","components","push","join","getAddress1","getAddress2","postCode","country","getSiteAddress","item","addressName","addressAutoName","convertToJobResponse","job","dbWorkorders","Enumerable","forEach","w","workorder","jobId","workOrderId","jobRes","completedNote","finalisedDate","updatedAt","workorderRes","createEmptyView","DefaultView","Empty","isDefault","system","selected","description","owner","source","JobSource","Active","createDefaultViews","defaultViews","groupBy","JobGroupBy","Job","viewType","JobViewType","WorkOrder","displayType","JobDisplay","Kanban","sort","sortBy","SortJobBy","CreatedDate","sortType","isSystemStatus","toArray","Overdue","overDueDate","DueIn7Days","dueBeforeDate","DateUtility","getDateTime","plus","days","endOf","toJSDate","Unassigned","unassigned","List","systemName","WorkOrderStatusSystemName","New","NotDispatched","Assigned","Canceled","Enumerable","PricingMethod","PricingMethods","CostPlus","label","showForCatalog","showForReference","TradePlus","SellLess","Markup","Margin","AccountingSystemAction","AccountingSystemUtility","isSupport","system","actions","_a","Array","isArray","every","action","supportMap","includes","getPaymentAction","type","PaymentType","Payable","Receivable","CreatePayment","DeletePayment","PayableCredit","ReceivableCredit","CreateRefundCreditNote","DeleteRefundCreditNote","PayablePrepayment","ReceivablePrepayment","CreateRefundPrepayment","DeleteRefundPrepayment","_AccountingSystemUtility","AccountingSystem","Xero","CreatePrepayment","CreateInvoiceAllocation","MYOB","DeleteInvoiceAllocation","QuickBooks","Jobpac","Manual","Enumerable","Enumerable","RoundingUnit","RoundingUnits","Object","values","s","m","h","d","w","y","ms","us","ns","timeUnitsList","unit","Year","amount","Week","Day","Hour","Minute","Second","Millisecond","Microsecond","Nanosecond","timeUnits","from","toObject","x","Enumerable","Enumerable","Enumerable","Enumerable","Enumerable","Enumerable","Enumerable","Enumerable","MetadataEntityFieldType","Enumerable","CustomFieldType","CustomFieldUtility","getFieldId","type","name","toLowerCase","getMappingId","fieldId","parent","getFieldType","_a","length","CustomFieldType","None","typeKey","split","Enumerable","from","types","where","x","_id","toLocaleLowerCase","select","firstOrDefault","getMetadataFieldType","_customFieldMetadataType","MetadataEntityFieldType","getFieldValue","value","Boolean","Address","Image","Array","isArray","Date","DateUtility","formatDateTime","DateTime","address","JobUtility","DropdownMulti","join","getFieldMergeValues","customFields","Object","keys","key","fieldValue","fieldType","fieldMergeValue","toArray","_types","cloneCustomFieldsValue","inputCustomFieldsValues","allowedCustomFields","result","reduce","acc","curr","hasOwnProperty","undefined","_CustomFieldUtility","Dropdown","Email","Note","Number","Phone","Text","CustomFieldDropdown","String","Enumerable","JobIndexUtility","getAttributeFilter","job","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","_H","filters","push","k","v","active","status","n","type","_id","name","priority","customer","billingCompany","owner","fieldSupervisor","createdAt","DateUtility","getDate","dueDate","completedDate","finalisedDate","labels","length","map","label","systemLabels","zones","zone","policy","recurringJob","customFields","addCustomFieldFilters","invoice","invoices","textFields","jobNumber","friendlyJobNumber","replace","customerPO","parts","getTextParts","customerWO","site","placeId","address","JobUtility","timezone","state","from","workOrders","forEach","wo","workCategory","resources","resource","workOrderNumber","friendlyWoNumber","splitWoNumber","split","lastWoNumber","stageOwner","alternateSite","bill","bills","text","filter","x","toLowerCase","indexOf","trim","flat","where","undefined","distinct","toArray","value","test","regex","matches","match","results","segment","noLeadingZeros","original","allOriginals","select","allNoLeadingZeros","getSort","priorityMap","sort","addSortableDates","contains","get","prioritySort","systemPrioritySort","systemPriority","sortOrder","getPriorityMap","priorities","toDictionary","namePrefix","date","asc","desc","Date","items","Object","keys","key","CustomFieldUtility","getFieldType","CustomFieldType","DateTime","Number","Boolean","Address","DropdownMulti","Array","isArray","_JobIndexUtility","SystemPriority","P1","P2","P3","P4","P5","Enumerable","CryptoJS","CryptoJS","defaultIv","enc","Utf8","parse","repeat","toString","isFunc","obj","classCallCheck","instance","Constructor","createClass","defineProperties","target","props","i","descriptor","protoProps","staticProps","icPart","str","c","remove","arr","elem","hasProp","key","instances","Inflector","locale","word","values","rule","replacement","singular","plural","s0","sRest","p0","pRest","sRestIC","pRestIC","_len","words","_key","scope","en","inflector","defaults$1","inflections","fn","underscore","camelCasedWord","result","inflections","match","$1","$2","humanize","lowerCaseAndUnderscoredWord","options","humans","human","rule","replacement","ii","titleize","word","boundary","letter","idx","string","DEFAULT_APPROXIMATIONS","DEFAULT_REPLACEMENT_CHAR","instances$1","Transliterator","createClass","locale","classCallCheck","char","replacement","string","_this","c","Enumerable","FinanceNumberType","FinanceCodeType","FinancialRecapColor","Labour","Material","Service","Negative","Positive","ClaimProcessingSystemName","ClaimProcessingActions","Object","values","ClaimProcessingSystemName","allowTrackingLocationTypes","ActivityType","WorkOrderCheckIn","WorkOrderCheckout","WorkOrderCompleted","WorkOrderStop","WorkOrderHold","WorkOrderEnroute","WorkOrderOnsite","Enumerable","TenantSubscription","BillableType","TimesheetEntryStatus","billableOptions","value","BillableType","Billable","label","NoCharge","NotBillable","timesheetStatus","_id","TimesheetEntryStatus","Approved","name","ReviewRequired","Enumerable","Enumerable","Enumerable","PaymentType","Enumerable","ContactType","AccountTypes","ServiceProvider","Business","Individual","Subcontractor","Supplier","WorkBuddyCompany","Site","CustomerAccountTypes","ContactTypes","Employee","LoginContact","BasicContact","CompanyTypes","Enumerable","Enumerable","JobTemplateQuestionType","setSupportedActions","defaultAction","actions","__spreadValues","addItems","appendToJobDescription","setTag","setJobType","setPriority","setPriceList","setFieldSupervisor","setCustomFields","setOwner","setFiles","JobTemplateQuestionTypeAllowedActions","JobTemplateQuestionType","Attachment","setSupportedActions","setFiles","Boolean","setOpportunityStage","setOpportunitySource","Date","appendToJobDescription","setCustomFields","setOpportunityExpectedCloseDate","Dropdown","Numeric","addItems","setOpportunityEstimatedAmount","Text","Enumerable","Enumerable","UnallocatedUserId","UnallocatedUser","_id","name","type","ContactType","System","AllocationStatus","AllocationStatuses","Open","Enroute","OnSite","CheckedOut","Completed","Cancelled","Overhead","BookingStatus","AllocationBookingStatus","BookingStatus","Confirmed","Tentative","Enumerable","Enumerable","Enumerable","ReportFieldType","Operator","QueryOperators","getOperators","fieldType","ReportFieldType","Date","DateOperators","Number","Currency","Decimal","NumberOperators","String","Link","RichText","StringOperators","WOResource","FieldSupervisor","Owner","OwnerOperators","Boolean","BooleanOperators","LookupOperators","_QueryOperators","Today","Yesterday","On","OnOrBefore","OnOrAfter","LastXDays","NextXDays","ThisWeek","LastXWeeks","NextXWeeks","ThisMonth","LastXMonths","NextXMonths","ThisYear","LastXYears","NextXYears","ContainsData","DoesNotContainData","Equal","NotEqual","Greater","Less","GreaterOrEqual","LessOrEqual","In","NotIn","CurrentUser","Contains","DoesNotContain","VariationStatus","VariationStatusMap","Draft","PendingForApproval","Approved","Rejected","VariationStatusColorMap","TaskPhaseName","DailyPhaseName","TaskTarget","TaskGroupBy","TaskPhaseNames","Object","values","DailyPhaseNames","TaskTargets","TaskGroupBys","TaskLinkType","Enumerable","Enumerable","BeforePhase","_id","name","TaskPhaseName","Before","sortOrder","LexoRank","toString","type","TaskLinkType","Phase","DuringPhase","During","AfterPhase","After","CheckInPhase","DailyPhaseName","CheckIn","decrement","CheckOutPhase","CheckOut","increment","defaultViewOptions","groupBy","TaskGroupBy","None","sortBy","sortOrder","filterValue","entityName","showEmptyGroups","options","Enumerable","OpportunitySystemStage","OpportunitySystemStages","Object","values","Enumerable","Enumerable","LeadSystemStage","LeadSystemStages","Object","values","defaultFinancialOptions","header","entityName","showJobNumber","showReference","showSite","items","showQuantity","showUnitPrice","showTax","showTotals","appendix","pageBreakBefore","showBillableItems","showActivities","showAttachments","showImagePreview","defaultInvoiceOptions","header","entityName","showJobNumber","showReference","showTerms","showSite","showNotes","showPayments","items","showQuantity","showUnitPrice","showTax","showTotals","showZeroPrice","appendix","pageBreakBefore","showBillableItems","showActivities","showAttachments","showImagePreview","defaultBillOptions","__spreadProps","__spreadValues","defaultQuoteOptions","header","entityName","showContact","showSite","showDescription","showTerms","showOwnerDetails","showCustomerReference","showPO","sections","show","showTotals","showItems","items","showQuantity","showUnitPrice","showAdjustments","showLongDescription","PageSize","PageOrientation","ThemeTemplateMode","DocumentThemeEntities","_id","ActivityEntityName","Bill","toLowerCase","name","Invoice","Quote","SaleOrder","PurchaseOrder","PrepaymentInvoice","PrepaymentSupplier","CreditNote","CreditNoteSupplier","WorkOrder","WorkOrderDispatch","Job","defaultDocumentTheme","active","templateMode","ThemeTemplateMode","Default","pageSize","PageSize","A4","pageOrientation","PageOrientation","Portrait","defaultDocumentThemes","toLocaleLowerCase","__spreadProps","__spreadValues","entity","options","defaultQuoteOptions","defaultInvoiceOptions","defaultBillOptions","defaultFinancialOptions","AlignType","InputStyleType","AfterSubmitType","defaultSubmitButtonStyle","label","labelColor","backgroundColor","align","AlignType","Center","defaultStyle","inputStyle","InputStyleType","Default","textFont","textSize","titleFontSize","buttonStyle","defaultEntityForm","_id","active","options","undefined","style","afterSubmit","AfterSubmitType","Thank","thankMessage","defaultEntityForms","ActivityEntityName","Lead","toLocaleLowerCase","__spreadProps","__spreadValues","entity","ProjectSystemStatus","ProjectSystemStatues","Object","values","Enumerable","JobSharingPolicySource","JobSharingPolicySources","Object","keys","filter","x","Unknown","defaultSharingPolicies","Object","freeze","_id","active","name","sortOrder","LexoRank","first","conditions","source","JobSharingPolicySource","Customer","customers","entity","tags","actions","shareWithCustomer","shareWithField","markSensitive","Field","PolicyOptionVisibility","util","val","assertIs","_arg","assertNever","_x","items","obj","item","validKeys","k","filtered","e","object","keys","key","arr","checker","joinValues","array","separator","_","value","objectUtil","first","second","__spreadValues","ZodParsedType","getParsedType","data","ZodIssueCode","quotelessJson","ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","error","curr","i","el","formErrors","errorMap","_ctx","message","overrideErrorMap","setErrorMap","map","getErrorMap","makeIssue","params","path","errorMaps","issueData","fullPath","fullIssue","__spreadProps","errorMessage","maps","m","EMPTY_PATH","addIssueToContext","ctx","overrideMap","x","ParseStatus","_ParseStatus","status","results","arrayValue","s","INVALID","pairs","__async","syncPairs","pair","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","__classPrivateFieldGet","receiver","state","kind","f","__classPrivateFieldSet","errorUtil","message","_ZodEnum_cache","_ZodNativeEnum_cache","ParseInputLazyPath","parent","value","path","key","handleResult","ctx","result","isValid","error","ZodError","processCreateParams","params","errorMap","invalid_type_error","required_error","description","iss","_a","_b","ZodType","input","getParsedType","ParseStatus","isAsync","data","err","__async","maybeAsyncResult","check","getIssueProperties","val","setError","__spreadValues","ZodIssueCode","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","def","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","transform","__spreadProps","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","target","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","timeRegexSource","args","regex","timeRegex","datetimeRegex","opts","isValidIP","ip","version","isValidJWT","jwt","alg","header","base64","decoded","isValidCidr","ZodString","ZodParsedType","addIssueToContext","INVALID","status","tooBig","tooSmall","util","validation","options","minLength","maxLength","len","ch","min","max","floatSafeRemainder","step","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","kind","inclusive","ZodBigInt","ZodBoolean","OK","ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","item","i","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","shape","keys","shapeKeys","extraKeys","pairs","keyValidator","unknownKeys","catchall","syncPairs","pair","issue","_c","_d","defaultError","augmentation","merging","index","mask","newField","createZodEnum","handleResults","results","unionErrors","childCtx","dirty","issues","types","getDiscriminator","type","ZodLazy","ZodLiteral","ZodEnum","ZodNativeEnum","ZodDiscriminatedUnion","_ZodDiscriminatedUnion","discriminator","discriminatorValue","optionsMap","discriminatorValues","mergeValues","a","b","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","isAborted","merged","isDirty","left","right","items","itemIndex","x","rest","schemas","ZodRecord","_ZodRecord","keyType","valueType","first","second","third","ZodMap","finalMap","ZodSet","finalizeSet","elements","parsedSet","element","minSize","maxSize","size","ZodFunction","_ZodFunction","makeArgsIssue","makeIssue","getErrorMap","makeReturnsIssue","returns","fn","me","parsedArgs","e","parsedReturns","returnType","func","getter","values","_ZodEnum","expectedValues","__classPrivateFieldGet","__classPrivateFieldSet","enumValues","newDef","opt","nativeEnumValues","promisified","effect","checkCtx","arg","processed","DIRTY","executeRefinement","acc","inner","base","preprocess","newCtx","ZodNaN","BRAND","_ZodPipeline","inResult","freeze","cleanParams","p","custom","_params","fatal","r","_fatal","late","instanceOfType","cls","stringType","numberType","nanType","bigIntType","booleanType","dateType","symbolType","undefinedType","nullType","anyType","unknownType","neverType","voidType","arrayType","objectType","strictObjectType","unionType","discriminatedUnionType","intersectionType","tupleType","recordType","mapType","setType","functionType","lazyType","literalType","enumType","nativeEnumType","promiseType","effectsType","optionalType","nullableType","preprocessType","pipelineType","ostring","onumber","oboolean","coerce","NEVER","z","setErrorMap","EMPTY_PATH","objectUtil","quotelessJson","QuotePolicyPrepaymentRuleOperator","QuotePolicyPrepaymentRuleType","QuotePolicyJobConvertSplitType","defaultQuotePolicy","_id","isDefault","active","name","__v","updatedBy","createdBy","acceptance","poNumber","PolicyOptionVisibility","Disabled","attachments","signature","allowOnlineAcceptance","jobConversion","autoConvert","copyActivities","split","QuotePolicyJobConvertSplitType","ItemCategory","jobTemplate","prepayments","enabled","allowOverride","rules","settings","reminders","enableForAcceptance","enableForPayment","payment","notifications","accept","decline","prepaid","defaults","adjustmentType","expiryDays","canProcessPrepaymentRule","rule","quote","z","object","amount","number","min","quoteValue","totalSellEx","safeParse","calculateRulePrepayment","prepaymentType","QuotePolicyPrepaymentRuleType","Amount","Percentage","totalSellInc","quotePolicyPrepaymentHelper","QuotePolicyPrepaymentRuleOperator","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","Enumerable","t","event","claimToken","status","WorkOrderStatusSystemName","Dispatched","note","date","Date","getMetadataEntityFieldType","field","type","Array","isArray","Reflect","factory","root","exporter","makeExporter","target","previous","key","value","hasOwn","supportsSymbol","toPrimitiveSymbol","iteratorSymbol","supportsCreate","supportsProto","downLevel","HashMap","MakeDictionary","map","functionPrototype","usePolyfill","_Map","CreateMapPolyfill","_Set","CreateSetPolyfill","_WeakMap","CreateWeakMapPolyfill","Metadata","decorate","decorators","propertyKey","attributes","IsUndefined","IsArray","IsConstructor","DecorateConstructor","IsObject","IsNull","ToPropertyKey","DecorateProperty","metadata","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","defineMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","getMetadata","OrdinaryGetMetadata","getOwnMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","metadataMap","GetOrCreateMetadataMap","targetMetadata","i","decorated","descriptor","O","P","Create","MetadataKey","parent","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","ownKeys","parentKeys","set","keys","_i","ownKeys_1","hasKey","_a","parentKeys_1","keysObj","iterator","GetIterator","k","next","IteratorStep","nextValue","IteratorValue","e","IteratorClose","Type","x","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","result","OrdinaryToPrimitive","toString_1","IsCallable","valueOf","toString_2","argument","ToString","V","func","obj","method","iterResult","f","proto","prototype","prototypeProto","constructor","cacheSentinel","arraySentinel","MapIterator","values","selector","index","error","Map","size","getKey","getValue","getEntry","insert","_","Set","UUID_SIZE","rootKey","CreateUniqueKey","WeakMap","table","GetOrCreateWeakMapTable","CreateUUID","create","FillRandomBytes","buffer","GenRandomBytes","data","offset","byte","Enumerable","MetadataCatalog","registerEntity","entity","type","entities","set","module","modules","has","get","push","getEntity","getEntityFields","entityGroupings","name","displayName","groups","entityGrouping","fields","Enumerable","from","forEach","field","_a","getMetadataEntityFieldType","MetadataEntityFieldType","EmbeddedEntity","fieldEntity","typeData","length","select","item","__spreadProps","__spreadValues","path","toArray","fieldGroup","CustomFields","orderBy","x","_MetadataCatalog","Map","Enumerable","Enumerable","Enumerable","Enumerable","Enumerable","Enumerable","Enumerable","getMergeDataset","target","__meta__","name","displayName","sources","getMergeSchema","target","__meta__","name","displayName","fields","getSchema","prototype","getMergeSourceEntity","data","_a","Array","isArray","entity","MergeCatalog","registerDataset","dataset","existingSources","sources","get","entity","from","select","x","__spreadProps","__spreadValues","getMergeSourceEntity","schema","toArray","concat","distinct","name","datasets","set","getDataset","getSources","_a","mainDataset","dependsOn","item","selectMany","all","Array","isArray","fields","f","join","source","displayName","push","ActivityEntityName","ContactEmployee","registerMergeSchema","schemas","getMergeSchema","schemaName","test","_MergeCatalog","Map","MergeDataset","options","target","meta","getMergeDataset","prototype","dataset","__spreadValues","__spreadProps","name","displayName","titleize","MergeCatalog","registerDataset","MergeField","options","target","propertyKey","meta","getMergeSchema","displayName","titleize","toLowerCase","endsWith","field","__spreadValues","name","hidden","startsWith","fields","push","MergeSchema","options","target","meta","getMergeSchema","prototype","entity","name","MergeCatalog","registerMergeSchema","MergeSource","options","target","propertyKey","meta","getMergeDataset","source","__spreadValues","name","displayName","titleize","sources","push","AccountContactMergeData","__decorate","MergeField","hidden","MergeSchema","entity","ActivityEntityName","Contact","AccountContactMergeSchema","getSchema","AccountContactMergeData","AccountMergeData","__decorate","MergeField","hidden","MergeSchema","entity","ActivityEntityName","Account","AccountMergeSchema","getSchema","AccountMergeData","AccountSiteMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Site","AccountSiteMergeSchema","getSchema","AccountSiteMergeData","ActivityMergeData","constructor","attachments","__decorate","MergeField","arraySchemaName","ignoreFields","MergeSchema","entity","ActivityEntityName","Activity","name","ActivityMergeSchema","getSchema","ActivityMergeData","AttachmentMergeData","__decorate","MergeField","hidden","MergeSchema","entity","ActivityEntityName","Attachment","name","AttachmentMergeSchema","getSchema","AttachmentMergeData","AttachmentsMergeData","constructor","attachments","__decorate","MergeField","arraySchemaName","ignoreFields","MergeSchema","entity","ActivityEntityName","Attachment","name","AttachmentsMergeSchema","getSchema","AttachmentsMergeData","AllocationMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Allocation","AllocationMergeSchema","getSchema","AllocationMergeData","AssetMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Asset","name","AssetMergeSchema","getSchema","AssetMergeData","BasicSiteMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Site","BasicSiteMergeSchema","getSchema","BasicSiteMergeData","CompanyMergeData","__decorate","MergeField","displayName","MergeSchema","entity","ActivityEntityName","Company","CompanyMergeSchema","getSchema","CompanyMergeData","ContactLinkMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","ContactLink","name","ContactLinkMergeSchema","getSchema","ContactLinkMergeData","ContactMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Contact","name","ContactMergeSchema","getSchema","ContactMergeData","EmployeeMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Employee","name","EmployeeMergeSchema","getSchema","EmployeeMergeData","FinancialItemLineMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Item","displayName","name","FinancialItemLineMergeDataSchema","getSchema","FinancialItemLineMergeData","InvoiceAccountMergeData","__decorate","MergeField","hidden","MergeSchema","entity","ActivityEntityName","Invoice","InvoiceAccountMergeSchema","getSchema","InvoiceAccountMergeData","InvoiceItemMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Invoice","name","InvoiceItemMergeDataSchema","getSchema","InvoiceItemMergeData","InvoiceMergeData","__decorate","MergeField","arraySchemaName","includeFields","MergeSchema","entity","ActivityEntityName","Invoice","InvoiceMergeSchema","getSchema","InvoiceMergeData","JobAssetsMergeData","constructor","assets","__decorate","MergeField","arraySchemaName","MergeSchema","entity","ActivityEntityName","Asset","JobAssetsMergeSchema","getSchema","JobAssetsMergeData","JobContactLinksMergeData","constructor","contacts","__decorate","MergeField","arraySchemaName","MergeSchema","entity","ActivityEntityName","ContactLink","JobContactLinksMergeSchema","getSchema","JobContactLinksMergeData","JobMergeData","constructor","_id","finalisedDate","totalSell","totalBuy","pricebook","timezone","nextAppointmentDate","nextAppointmentDateTime","nextAppointmentResourceName","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Job","JobMergeSchema","getSchema","JobMergeData","JobSiteMergeData","__decorate","MergeField","displayName","MergeSchema","entity","ActivityEntityName","Site","JobSiteMergeSchema","getSchema","JobSiteMergeData","JobStagesMergeData","constructor","stages","__decorate","MergeField","arraySchemaName","MergeSchema","entity","ActivityEntityName","JobStages","JobStagesMergeDataSchema","getSchema","JobStagesMergeData","LeadAccountMergeData","__decorate","MergeField","MergeSchema","LeadAccountMergeSchema","getSchema","LeadAccountMergeData","LeadContactMergeData","__decorate","MergeField","MergeSchema","LeadContactMergeSchema","getSchema","LeadContactMergeData","LeadMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Lead","LeadMergeSchema","getSchema","LeadMergeData","OpportunityMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Opportunity","OpportunityMergeSchema","getSchema","OpportunityMergeData","PurchaseOrderMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","PurchaseOrder","name","PurchaseOrderMergeSchema","getSchema","PurchaseOrderMergeData","PurchaseOrderLineMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","PurchaseOrderLine","name","PurchaseOrderLineMergeSchema","getSchema","PurchaseOrderLineMergeData","PurchaseOrderLinesMergeData","__decorate","MergeField","displayName","arraySchemaName","MergeSchema","entity","ActivityEntityName","PurchaseOrderLines","PurchaseOrderLinesMergeSchema","getSchema","PurchaseOrderLinesMergeData","PurchaseOrderSupplierMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","PurchaseOrderSupplier","PurchaseOrderSupplierMergeSchema","getSchema","PurchaseOrderSupplierMergeData","PurchaseOrderDeliveryAddressMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","PurchaseOrderDeliveryAddress","PurchaseOrderDeliveryAddressMergeSchema","getSchema","PurchaseOrderDeliveryAddressMergeData","QuoteProItemMergeData","__decorate","MergeField","QuoteProSectionMergeData","QuoteProMergeData","displayName","MergeSchema","entity","ActivityEntityName","Quote","QuoteProMergeSchema","getSchema","QuoteProMergeData","SaleOrderItemsMergeData","constructor","items","__decorate","MergeField","arraySchemaName","MergeSchema","entity","ActivityEntityName","SaleOrderItems","name","SaleOrderItemsMergeDataSchema","getSchema","SaleOrderItemsMergeData","SaleOrderMergeData","__decorate","MergeField","displayName","MergeSchema","entity","ActivityEntityName","SaleOrder","SaleOrderMergeSchema","getSchema","SaleOrderMergeData","StageMergeData","constructor","sortOrder","nextAppointmentDate","nextAppointmentDateTime","nextAppointmentResourceName","__decorate","MergeField","hidden","displayName","arraySchemaName","MergeSchema","entity","ActivityEntityName","WorkOrder","name","StageMergeSchema","getSchema","StageMergeData","StageIncludeItemsMergeData","StageMergeData","constructor","items","__decorate","MergeField","arraySchemaName","MergeSchema","entity","ActivityEntityName","WorkOrder","name","StageIncludeItemsMergeDataSchema","getSchema","StageIncludeItemsMergeData","StageItemMergeData","constructor","buyPrice","sellPrice","__decorate","MergeField","displayName","MergeSchema","entity","ActivityEntityName","Code","name","StageItemsMergeSchema","getSchema","StageItemMergeData","ContactFullMergeData","__decorate","MergeField","displayName","MergeSchema","entity","ActivityEntityName","Contact","ContactFullMergeSchema","getSchema","ContactFullMergeData","SiteMergeData","__decorate","MergeField","displayName","source","MergeSchema","entity","ActivityEntityName","Site","SiteMergeSchema","getSchema","SiteMergeData","OtherMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Utility","OtherMergeDataSchema","getSchema","OtherMergeData","InvoiceAttachmentsMergeData","constructor","mediaAttachments","fileAttachments","__decorate","MergeField","arraySchemaName","ignoreFields","MergeSchema","entity","ActivityEntityName","Invoice","name","InvoiceAttachmentsMergeDataSchema","getSchema","InvoiceAttachmentsMergeData","InvoiceActivitiesMergeData","constructor","activities","__decorate","MergeField","arraySchemaName","MergeSchema","entity","ActivityEntityName","Invoice","InvoiceActivitiesMergeDataSchema","getSchema","InvoiceActivitiesMergeData","JobItemMergeData","StageItemMergeData","__decorate","MergeField","MergeSchema","entity","ActivityEntityName","Code","name","JobItemMergeDataSchema","getSchema","JobItemMergeData","JobIncludeItemsMergeData","constructor","items","__decorate","MergeField","arraySchemaName","MergeSchema","entity","ActivityEntityName","Job","JobIncludeItemsMergeDataSchema","getSchema","JobIncludeItemsMergeData","BulkInvoiceJobMergeData","__decorate","MergeField","displayName","MergeSchema","entity","ActivityEntityName","BulkInvoiceJob","name","BulkInvoiceJobMergeSchema","getSchema","BulkInvoiceJobMergeData","AllocationMergeDataset","__decorate","MergeSource","schema","AllocationMergeSchema","ContactMergeSchema","MergeDataset","entity","ActivityEntityName","Allocation","dependsOn","Job","WorkOrder","BillMergeDataset","__decorate","MergeSource","schema","InvoiceMergeSchema","ignoreFields","CompanyMergeSchema","InvoiceAccountMergeSchema","BasicSiteMergeSchema","ActivityMergeSchema","displayName","AttachmentMergeSchema","InvoiceActivitiesMergeDataSchema","ignoreCustomFields","InvoiceAttachmentsMergeDataSchema","MergeDataset","entity","ActivityEntityName","Bill","dependsOn","Job","WorkOrder","InvoiceMergeDataset","__decorate","MergeSource","schema","InvoiceMergeSchema","CompanyMergeSchema","InvoiceAccountMergeSchema","BasicSiteMergeSchema","ActivityMergeSchema","displayName","ignoreFields","AttachmentMergeSchema","InvoiceActivitiesMergeDataSchema","ignoreCustomFields","InvoiceAttachmentsMergeDataSchema","MergeDataset","entity","ActivityEntityName","Invoice","dependsOn","Job","JobMergeDataset","__decorate","MergeSource","schema","JobMergeSchema","JobStagesMergeDataSchema","AccountMergeSchema","AccountContactMergeSchema","JobSiteMergeSchema","CompanyMergeSchema","EmployeeMergeSchema","JobContactLinksMergeSchema","displayName","JobAssetsMergeSchema","ignoreCustomFields","JobIncludeItemsMergeDataSchema","OtherMergeDataSchema","AttachmentsMergeSchema","MergeDataset","entity","ActivityEntityName","Job","LeadMergeDataset","__decorate","MergeSource","schema","LeadMergeSchema","LeadAccountMergeSchema","LeadContactMergeSchema","EmployeeMergeSchema","CompanyMergeSchema","BasicSiteMergeSchema","MergeDataset","entity","ActivityEntityName","Lead","OpportunityMergeDataset","empty","opportunity","OpportunityMergeData","opportunityAccount","AccountMergeData","opportunityContact","AccountContactMergeData","opportunitySite","JobSiteMergeData","opportunityOwner","EmployeeMergeData","opportunityCompany","CompanyMergeData","__decorate","MergeSource","schema","OpportunityMergeSchema","AccountMergeSchema","AccountContactMergeSchema","JobSiteMergeSchema","EmployeeMergeSchema","CompanyMergeSchema","MergeDataset","entity","ActivityEntityName","Opportunity","QuoteProMergeDataset","empty","quote","QuoteProMergeData","quoteOwner","EmployeeMergeData","quoteContact","AccountContactMergeData","quoteAccount","AccountMergeData","quoteSite","BasicSiteMergeData","quoteCompany","CompanyMergeData","theme","__decorate","MergeSource","schema","QuoteProMergeSchema","EmployeeMergeSchema","CompanyMergeSchema","AccountMergeSchema","BasicSiteMergeSchema","AccountContactMergeSchema","MergeDataset","entity","ActivityEntityName","QuotePro","dependsOn","Job","Opportunity","Quote","QuoteProJobMergeDataset","QuoteProMergeDataset","empty","quote","QuoteProMergeData","quoteOwner","EmployeeMergeData","quoteContact","AccountContactMergeData","quoteAccount","AccountMergeData","quoteSite","BasicSiteMergeData","quoteCompany","CompanyMergeData","theme","__decorate","MergeDataset","entity","ActivityEntityName","QuoteJob","dependsOn","Job","QuoteProOpportunityMergeDataset","QuoteProMergeDataset","empty","quote","QuoteProMergeData","quoteOwner","EmployeeMergeData","quoteContact","AccountContactMergeData","quoteAccount","AccountMergeData","quoteSite","BasicSiteMergeData","quoteCompany","CompanyMergeData","theme","__decorate","MergeDataset","entity","ActivityEntityName","QuoteOpportunity","dependsOn","Opportunity","SaleOrderMergeDataset","__decorate","MergeSource","schema","SaleOrderMergeSchema","AccountMergeSchema","displayName","ContactMergeSchema","CompanyMergeSchema","BasicSiteMergeSchema","SaleOrderItemsMergeDataSchema","MergeDataset","entity","ActivityEntityName","SaleOrder","dependsOn","Job","WorkOrder","StageMergeDataset","__decorate","MergeSource","schema","StageMergeSchema","ignoreFields","JobSiteMergeSchema","AccountMergeSchema","AccountContactMergeSchema","CompanyMergeSchema","EmployeeMergeSchema","StageIncludeItemsMergeDataSchema","includeFields","ignoreCustomFields","AttachmentsMergeSchema","OtherMergeDataSchema","MergeDataset","entity","ActivityEntityName","WorkOrder","dependsOn","Job","StageResourceMergeDataset","__decorate","MergeSource","schema","EmployeeMergeSchema","MergeDataset","entity","ActivityEntityName","Resource","dependsOn","Job","WorkOrder","PurchaseOrderMergeDataSet","__decorate","MergeSource","schema","PurchaseOrderMergeSchema","PurchaseOrderLinesMergeSchema","CompanyMergeSchema","PurchaseOrderDeliveryAddressMergeSchema","PurchaseOrderSupplierMergeSchema","MergeDataset","entity","ActivityEntityName","PurchaseOrder","dependsOn","Job","CreditNoteMergeDataset","InvoiceMergeDataset","__decorate","MergeDataset","entity","ActivityEntityName","CreditNote","dependsOn","Job","CreditNoteSupplierMergeDataset","BillMergeDataset","__decorate","MergeDataset","entity","ActivityEntityName","CreditNoteSupplier","dependsOn","Job","WorkOrder","PrepaymentMergeDataset","InvoiceMergeDataset","__decorate","MergeDataset","entity","ActivityEntityName","PrepaymentInvoice","dependsOn","Job","PrepaymentSupplierMergeDataset","BillMergeDataset","__decorate","MergeDataset","entity","ActivityEntityName","PrepaymentSupplier","dependsOn","Job","WorkOrder","AccountMergeDataset","__decorate","MergeSource","schema","AccountMergeSchema","ignoreFields","ContactFullMergeSchema","ignoreCustomFields","MergeDataset","entity","ActivityEntityName","Account","ContactMergeDataset","__decorate","MergeSource","schema","ContactFullMergeSchema","AccountMergeSchema","SiteMergeSchema","MergeDataset","entity","ActivityEntityName","Contact","CustomerMergeDataset","AccountMergeDataset","__decorate","MergeDataset","entity","ActivityEntityName","Customer","ContractorMergeDataset","AccountMergeDataset","__decorate","MergeDataset","entity","ActivityEntityName","Contractor","SiteMergeDataset","__decorate","MergeSource","schema","SiteMergeSchema","ContactFullMergeSchema","ignoreCustomFields","ignoreFields","AccountMergeSchema","MergeDataset","entity","ActivityEntityName","Site","LoginContactMergeDataset","ContactMergeDataset","__decorate","MergeDataset","entity","ActivityEntityName","LoginContact","BulkInvoiceJobMergeDataset","__decorate","MergeSource","schema","BulkInvoiceJobMergeSchema","ContactMergeSchema","ignoreCustomFields","MergeDataset","entity","ActivityEntityName","BulkInvoiceJob","Enumerable","Enumerable","EntityFormId","EntityViewNames","EntityFormId","Create","QuickCreate","EntityStatusType","Enumerable","SecurityModuleDomain","SecurityModuleName","RightRuleAction","BaseSecurityModule","constructor","name","rights","domain","SecurityModuleDomain","Web","plan","TenantSubscription","Core","rules","_id","allRights","from","select","x","toArray","allExceptRights","exceptRights","where","includes","Enumerable","AppSecurityRight","AppSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Application","_id","LoginWeb","name","basic","LoginField","LoginClient","module","PortalContractors","LoginContractor","subscription","TenantSubscription","Enterprise","LoginManager","Professional","SecurityModuleDomain","Global","System","AssetSecurityRight","AssetSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Assets","_id","CanAccess","name","basic","Manage","plan","TenantSubscription","Custom","ClaimSecurityRight","ClaimSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Claims","_id","AccessIncomingClaims","name","basic","AccessOutgoingClaims","ManageIncomingClaims","ManageOutgoingClaims","plan","TenantSubscription","Custom","ConfigurationSecurityRight","ConfigurationSecurityRightAll","Object","keys","map","x","ConfigurationSubModule","ConfigurationSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Configuration","_id","AccessPricing","name","basic","ManagePricing","AccessMetadata","ManageMetadata","AccessTemplates","ManageTemplates","AccessCustomFields","ManageCustomFields","AccessTenancy","ManageTenancy","AccessDocumentThemes","ManageDocumentThemes","AccessBulkImport","AccessEntityForms","plan","TenantSubscription","System","CrmSecurityRight","CrmSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Crm","_id","CanAccess","name","basic","ManageServiceProviders","ManageCustomers","ManageSuppliers","ManageEmployees","ManageUsersWithoutEmail","ManageSubcontractors","ManageSecurityRoles","ManageCompanies","ManageSites","ViewRecurringJobsWithinCustomers","ViewServicesWithinSites","ViewRecurringJobsWithinSites","plan","TenantSubscription","System","DashboardSecurityRight","DashboardSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Dashboards","_id","CanCreateDashboards","name","basic","CanManageOtherUsersDashboards","DefectSecurityRight","DefectSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Defects","_id","CanAccess","name","basic","Manage","plan","TenantSubscription","Custom","FinanceSecurityRight","FinanceSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Finance","_id","CanAccessPending","name","basic","CanAccessBills","CanAccessInvoices","CanAccessPayments","CanAccessSaleOrder","ManageBills","ManageInvoices","ManageApprovedBills","ManageApprovedInvoices","ManagePayments","DeletePayment","CanCreatePaymentViews","ManageOtherUsersPaymentViews","IndividualComplianceSecurityRight","IndividualComplianceSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","IndividualCompliance","_id","CanAccess","name","basic","ManageCompliance","ManageComplianceRules","plan","TenantSubscription","Professional","JobSecurityRight","JobSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Jobs","_id","CanAccess","name","basic","Manage","Dispatch","FinaliseJob","FinalliseWorkOrder","CompletionDate","FinaliseDate","ProcessJob","ProcessWorkOrder","ViewPricing","ModifyPricing","ModifyJobAfterFinalise","ModifyLockedItems","ManageActivity","ManageOtherUserActivity","ManagePurchaseOrder","ManageInvoices","ManageBills","MangeOtherUserViews","ReverseWorkOrderStatus","CanCreateViews","CanAccessSystemViews","AccessQuote","ManageQuote","ManageSalesOrder","JobTemplateSecurityRight","JobTemplatesSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","JobTemplates","_id","CanAccess","name","basic","subscription","TenantSubscription","Professional","Manage","plan","KnowledgeBaseSecurityRight","KnowledgeBaseSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","KnowledgeBase","_id","CanAccess","name","basic","ManageDocuments","plan","TenantSubscription","Enterprise","MobileTechniciansSecurityRight","MobileTechniciansSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","MobileTechnicians","_id","CanAccessJobs","name","basic","CanAccessAppointments","CanAccessRunsheets","CanAccessQuotes","CanAccessPurchaseOrders","subscription","TenantSubscription","Professional","ManageJobs","ManageCodesOnJob","ManagePendingItems","ManageQuotes","ManagePurchaseOrders","CanCompleteJobs","ManageJobManageAssets","module","Assets","CanAccessTimesheets","ManageMyTimesheets","CanTakePayments","ModifyFormAfterSubmission","AllowEditBeforeCheckIn","CanCheckoutJobs","CanPutJobsOnHold","AllowSmsActivities","AllowEditableMessages","CanAccessSupervisor","ManageJobViewTasks","ManageJobViewFiles","ManageJobViewItems","ManageJobViewAssets","ManageJobViewDefects","ManageJobViewInvoices","ManageJobManageMyTimesheets","ManageJobManageOtherUserTimesheets","ManageResources","ManageAppointments","ManageMyActivitiesWhileJobIsOpen","ManageAllActivities","CanAccessWorkforceCompliance","ManageJobViewEquipments","ManageJobManageEquipments","CanAccessStockLocations","CanAccessStandaloneForms","SecurityModuleDomain","Mobile","rules","value","action","RightRuleAction","Disable","target","Enable","PortalClientSecurityRight","PortalClientSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","PortalClients","_id","CanAccessJobs","name","basic","ViewJobsInSite","CanAccessQuotes","ViewQuotesInSite","CanAccessSites","CanAccessKnowledgeBase","ViewInvoice","ViewInvoicesInSite","ViewInvoicesInJob","ManageActivity","ManageSites","RequestNewJob","RequestNewQuote","ManageUsers","SecurityModuleDomain","Portals","plan","TenantSubscription","Custom","PortalContractorSecurityRight","PortalContractorSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","PortalContractors","_id","CanAccessJobs","name","basic","CanKnowledgeBase","ManageUsers","ManageCompliance","AccessIncomingClaims","AccessOutgoingClaims","ManageIncomingClaims","ManageOutgoingClaims","ModifyFormAfterSubmission","SecurityModuleDomain","Portals","plan","TenantSubscription","Enterprise","ProjectsSecurityRight","ProjectsSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Projects","_id","CanAccessProjects","name","basic","ManageProjects","CanCreateProjectViews","ManageOtherUsersProjectViews","plan","TenantSubscription","Custom","PurchaseOrderSecurityRight","PurchaseOrderSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","PurchaseOrders","_id","CanAccess","name","basic","Manage","Processing","plan","TenantSubscription","Professional","QuoteSecurityRight","QuoteSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Quotes","_id","CanAccess","name","basic","Manage","ManageViews","ManageOtherViews","ApproveQuotes","QuoteTemplateSecurityRight","QuoteTemplatesSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","QuoteTemplates","_id","CanAccess","name","basic","Manage","plan","TenantSubscription","Professional","RecurringJobSecurityRight","RecurringJobSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","RecurringJobs","_id","CanAccess","name","basic","Manage","plan","TenantSubscription","Professional","ReportSecurityRight","ReportSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Reports","_id","CanAccess","name","basic","Manage","SalesSecurityRight","SalesSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Sales","_id","CanAccessOpportunities","name","basic","ManageOpportunities","CanAccessLeads","ManageLeads","CanCreateOpportunityViews","ManageOtherUsersOpportunityViews","MarkOpportunities","DeleteOpportunity","CanCreateLeadViews","ManageOtherUsersLeadViews","plan","TenantSubscription","Professional","SchedulerSecurityRight","SchedulerSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Scheduler","_id","CanAccess","name","basic","ManageAppointments","ManageRunSheets","ManageOtherUserResourceGroups","ManageFieldAllocations","CanCreateCustomViews","ManageOtherUsersViews","TaskSecurityRight","TaskSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Tasks","_id","CanAccess","name","basic","ViewOtherTask","ManageManualTasks","ManageTaskChecklists","DeleteMyTasks","DeleteAnyTasks","TimesheetSecurityRight","TimesheetSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Timesheets","_id","CanAccess","name","basic","ManageMyTimesheets","ManageAllTimesheets","VariationSecurityRight","VariationSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Variations","_id","CanAccess","name","basic","Manage","plan","TenantSubscription","Custom","WorkComplianceSecurityRight","WorkComplianceSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","WorkCompliance","_id","CanAccess","name","basic","ManageCompliance","ManageComplianceRules","plan","TenantSubscription","Professional","FormSecurityRight","FormSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Forms","_id","CanAccessForms","name","basic","subscription","TenantSubscription","Professional","CreateEditForms","DeleteForms","ModifyAfterSubmission","plan","Custom","AddressValidationSecurityRight","AddressValidationSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","AddressValidation","_id","CanAccess","name","basic","plan","TenantSubscription","Custom","EnterpriseSearchSecurityRight","EnterpriseSearchSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","EnterpriseSearch","_id","CanAccess","name","basic","plan","TenantSubscription","Custom","PropertyManagementSecurityRight","PropertyManagementSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","PropertyManagement","_id","CanAccess","name","basic","plan","TenantSubscription","Custom","WorkBuddyConnectSecurityRight","WorkBuddyConnectSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","WorkBuddyConnect","_id","CanAccess","name","basic","plan","TenantSubscription","Custom","EquipmentSecurityRight","EquipmentSecurityModule","BaseSecurityModule","constructor","SecurityModuleName","Equipment","_id","CanAccess","name","basic","CanManage","plan","TenantSubscription","Custom","SecurityModuleUtility","getConfigurationSubAccessModules","rights","length","modules","Enumerable","from","forEach","x","ConfigurationSecurityRight","AccessPricing","push","ConfigurationSubModule","Pricing","AccessMetadata","Metadata","AccessTemplates","Templates","AccessTenancy","Tenancy","CrmSecurityRight","ManageSecurityRoles","Security","IndividualComplianceSecurityRight","ManageComplianceRules","IndividualCompliance","WorkComplianceSecurityRight","WorkCompliance","getModuleById","moduleId","systemModules","firstOrDefault","_id","getPlanModules","where","plan","TenantSubscription","System","select","name","data","orderBy","toArray","getPlanRightsMask","disabledRights","moduleRights","toDictionary","allRights","disabledModules","getPlanDisabledModules","disabledId","contains","get","includes","SecurityModuleName","PortalContractors","AppSecurityRight","LoginContractor","PortalClients","LoginClient","Assets","MobileTechniciansSecurityRight","ManageJobManageAssets","ManageJobViewAssets","Tasks","ManageJobViewTasks","Defects","ManageJobViewDefects","Finance","ManageJobViewInvoices","subscription","Core","LoginManager","JobTemplateSecurityRight","CanAccess","Manage","FormSecurityRight","CanAccessForms","CreateEditForms","DeleteForms","ModifyAfterSubmission","ManagePurchaseOrders","CanAccessPurchaseOrders","Professional","Enterprise","disabledFeatures","Object","keys","features","featureKey","disabledAddons","addons","_SecurityModuleUtility","AppSecurityModule","QuoteSecurityModule","TimesheetSecurityModule","TaskSecurityModule","IndividualComplianceSecurityModule","ConfigurationSecurityModule","FinanceSecurityModule","SchedulerSecurityModule","CrmSecurityModule","PurchaseOrderSecurityModule","WorkComplianceSecurityModule","MobileTechniciansSecurityModule","PortalClientSecurityModule","PortalContractorSecurityModule","KnowledgeBaseSecurityModule","ClaimSecurityModule","ReportSecurityModule","VariationSecurityModule","DefectSecurityModule","AssetSecurityModule","RecurringJobSecurityModule","JobTemplatesSecurityModule","QuoteTemplatesSecurityModule","SalesSecurityModule","DashboardSecurityModule","FormSecurityModule","ProjectsSecurityModule","JobSecurityModule","AddressValidationSecurityModule","EnterpriseSearchSecurityModule","PropertyManagementSecurityModule","WorkBuddyConnectSecurityModule","EquipmentSecurityModule","Enumerable","Enumerable","managePricingRights","ConfigurationSecurityRight","ManagePricing","manageMetaDataRights","ManageMetadata","manageTemplateRights","ManageTemplates","manageTenancyRights","ManageTenancy","manageIndividualComplianceRulesRights","IndividualComplianceSecurityRight","ManageComplianceRules","manageIndividualComplianceRights","ManageCompliance","manageWorkComplianceRulesRights","WorkComplianceSecurityRight","quoteManageRights","QuoteSecurityRight","Manage","financeInvoiceRights","FinanceSecurityRight","ManageInvoices","financeBillRights","ManageBills","jobManageRights","JobSecurityRight","dispatchRights","Dispatch","finaliseJobRights","FinaliseJob","finalliseWorkOrderRights","FinalliseWorkOrder","completionDateRights","CompletionDate","finaliseDateRights","FinaliseDate","processJobRights","ProcessJob","processWorkOrderRights","ProcessWorkOrder","jobViewPricingRights","ViewPricing","jobModifyPricingRights","ModifyPricing","jobModifyAfterFinaliseRights","ModifyJobAfterFinalise","jobModifyLockedItemRights","ModifyLockedItems","modifyCompletionDate","modifyFinaliseDate","jobManageActivityRights","ManageActivity","jobManageOtherUserActivityRights","ManageOtherUserActivity","jobManageComplianceRights","jobManagePurchaseOrderRights","ManagePurchaseOrder","jobManageInvoicesRights","jobManageBillsRights","jobAccessQuotes","AccessQuote","jobAccessSalesOrder","ManageSalesOrder","accessDefect","DefectSecurityRight","CanAccess","manageDefect","accessAsset","AssetSecurityRight","manageAsset","accessEquipment","EquipmentSecurityRight","manageEquipment","jobManageOtherUserViewsRights","MangeOtherUserViews","jobReverseWorkOrderStatusRights","ReverseWorkOrderStatus","schedulerManageRunsheetRights","SchedulerSecurityRight","ManageRunSheets","schedulerManageAppoitmentRights","ManageAppointments","schedulerManageOtherUserResourceGroupsRights","ManageOtherUserResourceGroups","schedulerManageFieldAllocations","ManageFieldAllocations","loginToFieldRights","AppSecurityRight","LoginField","loginToWebRights","LoginWeb","loginToClientRights","LoginClient","crmManageServiceProviders","CrmSecurityRight","ManageServiceProviders","crmManageCustomers","ManageCustomers","crmManageSites","ManageSites","crmManageSuppliers","ManageSuppliers","crmManageEmployees","ManageEmployees","crmManageCompanies","ManageCompanies","crmManageSubcontractors","ManageSubcontractors","crmManageSecurityRights","ManageSecurityRoles","accessVariation","VariationSecurityRight","manageVariation","accessRecurringJob","RecurringJobSecurityRight","manageRecurringJob","manageTaskChecklist","TaskSecurityRight","ManageTaskChecklists","accessTask","accessTimesheet","TimesheetSecurityRight","manageMyTimesheets","ManageMyTimesheets","manageAllTimesheets","ManageAllTimesheets","accessFinancialRecap","clientManageActivity","PortalClientSecurityRight","accessPayments","CanAccessPayments","canModifySubmittedForm","FormSecurityRight","ModifyAfterSubmission","canCreateEditForms","CreateEditForms","canDeleteForms","DeleteForms","accessPurchaseOrder","PurchaseOrderSecurityRight","managePurchaseOrderRights","processingPurchaseOrderRights","Processing","portalCanModifySubmittedForm","PortalContractorSecurityRight","ModifyFormAfterSubmission","DefaultUsersIds","DefaultUsers","_DefaultUsers","JmsAdmin","_id","name","WorkBuddy","WorkBuddyImporter","WorkBuddyConnect","WorkBuddyRecurringJobScheduler","WorkBuddyJobAutoCloseScheduler","WorkBuddyReminderScheduler","AnonymousUser","ExternalUser","MeUser","Me","ApiKeyUser","Enumerable","TenantPlanFeatures","TenantSubscription","Core","Professional","Enterprise","Developer","Custom","isZodObjectStrict","obj","zodMerge","objectA","objectB","isZodObjectStrict","ZodErrorSchema","z","ContractNoBody","isAppRoute","obj","recursivelyApplyOptions","router","options","key","value","_a","_b","_c","isAppRoute","__spreadProps","__spreadValues","zodMerge","ContractPlainTypeRuntimeSymbol","initContract","endpoints","args","contentType","body","ContractNoBody","c","initContract","AddressSchema","z","object","_id","string","name","optional","color","data","any","active","boolean","system","street1","street2","suburb","county","state","postcode","number","postalCode","country","lat","lgn","timezone","matchKey","type","nativeEnum","AddressType","AddressSearchContract","router","search","method","path","responses","array","query","s","summary"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,94,98,99,100,101,124,170,175,298]}