{ "version": 3, "sources": ["../../../node_modules/@servicestack/client/dist/index.js"], "sourcesContent": ["\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.chop = exports.lastRightPart = exports.lastLeftPart = exports.rightPart = exports.leftPart = exports.splitOnLast = exports.splitOnFirst = exports.css = exports.nameOf = exports.sanitize = exports.map = exports.toKebabCase = exports.toPascalCase = exports.toCamelCase = exports.createError = exports.isFormData = exports.createFieldError = exports.createErrorStatus = exports.ApiResult = exports.getResponseStatus = exports.getMethod = exports.JsonServiceClient = exports.GetAccessTokenResponse = exports.HttpMethods = exports.ServerEventUser = exports.GetEventSubscribers = exports.UpdateEventSubscriberResponse = exports.UpdateEventSubscriber = exports.ServerEventReceiver = exports.ServerEventsClient = exports.ReadyState = exports.SingletonInstanceResolver = exports.NewInstanceResolver = exports.MetadataType = exports.MetadataPropertyType = exports.MetadataAttribute = exports.MetadataDataMember = exports.MetadataDataContract = exports.MetadataTypeName = exports.MetadataTypes = exports.MetadataOperationType = exports.MetadataRoute = exports.MetadataTypesConfig = exports.GetNavItemsResponse = exports.GetNavItems = exports.NavItem = exports.EmptyResponse = exports.ErrorResponse = exports.ResponseError = exports.ResponseStatus = void 0;\r\nexports.sanitizeFormData = exports.serializeToFormData = exports.serializeToUrlEncoded = exports.serializeToObject = exports.serializeForm = exports.ajaxSubmit = exports.formSubmit = exports.toVarNames = exports.bootstrapForm = exports.bindHandlers = exports.bootstrap = exports.delaySet = exports.on = exports.$$ = exports.$1 = exports.createElement = exports.toLocalISOString = exports.timeFmt12 = exports.dateFmtHM = exports.dateFmt = exports.padInt = exports.toDateFmt = exports.toDate = exports.isDate = exports.errorResponse = exports.errorResponseExcept = exports.errorResponseSummary = exports.toObject = exports.toFormData = exports.parseResponseStatus = exports.getField = exports.normalize = exports.normalizeKey = exports.parseCookie = exports.tryDecode = exports.stripQuotes = exports.bytesToBase64 = exports.appendQueryString = exports.createUrl = exports.createPath = exports.combinePaths = exports.queryString = exports.humanify = exports.splitTitleCase = exports.isDigit = exports.isLower = exports.isUpper = exports.ucFirst = exports.humanize = exports.onlyProps = void 0;\r\nexports.alignCenter = exports.alignLeft = exports.uniqueKeys = exports.JSV = exports.StringBuffer = exports.toBase64String = exports.toByteArray = exports.fromByteArray = exports.toGuid = exports.fromGuid = exports.toTimeSpan = exports.fromTimeSpan = exports.toDateTime = exports.fromDateTime = exports.isNullOrEmpty = exports.indexOfAny = exports.htmlAttrs = exports.enc = exports.uniq = exports.flatMap = exports.toTimeSpanFmt = exports.toXsdDuration = exports.fromXsdDuration = exports.classNames = exports.NavOptions = exports.UserAttributes = exports.LinkButtonDefaults = exports.NavButtonGroupDefaults = exports.NavbarDefaults = exports.NavLinkDefaults = exports.NavDefaults = exports.btnClasses = exports.btnSizeClass = exports.BootstrapSizes = exports.btnColorClass = exports.BootstrapColors = exports.activeClass = exports.activeClassNav = exports.apiValueFmt = exports.apiValue = exports.mapGet = exports.resolve = exports.each = exports.apply = exports.omit = exports.pick = exports.safeVarName = exports.trimEnd = exports.populateForm = exports.triggerEvent = void 0;\r\nexports.Inspect = exports.createBus = exports.EventBus = exports.alignAuto = exports.alignRight = void 0;\r\nfunction nodeRequire() {\r\n //node require(), using dynamic access to fix web ng aot build\r\n try {\r\n let isNode = typeof process === 'object' &&\r\n typeof process.versions === 'object' &&\r\n typeof process.versions.node !== 'undefined';\r\n if (isNode)\r\n return eval('require');\r\n return null;\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n}\r\nlet R = nodeRequire();\r\nif (R)\r\n R('cross-fetch/polyfill'); //fetch polyfill only required for node.js\r\nclass ResponseStatus {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.ResponseStatus = ResponseStatus;\r\nclass ResponseError {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.ResponseError = ResponseError;\r\nclass ErrorResponse {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.ErrorResponse = ErrorResponse;\r\nclass EmptyResponse {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.EmptyResponse = EmptyResponse;\r\nclass NavItem {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.NavItem = NavItem;\r\nclass GetNavItems {\r\n constructor(init) { Object.assign(this, init); }\r\n createResponse() { return new GetNavItemsResponse(); }\r\n getTypeName() { return 'GetNavItems'; }\r\n getMethod() { return 'GET'; }\r\n}\r\nexports.GetNavItems = GetNavItems;\r\nclass GetNavItemsResponse {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.GetNavItemsResponse = GetNavItemsResponse;\r\nclass MetadataTypesConfig {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataTypesConfig = MetadataTypesConfig;\r\nclass MetadataRoute {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataRoute = MetadataRoute;\r\nclass MetadataOperationType {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataOperationType = MetadataOperationType;\r\nclass MetadataTypes {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataTypes = MetadataTypes;\r\nclass MetadataTypeName {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataTypeName = MetadataTypeName;\r\nclass MetadataDataContract {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataDataContract = MetadataDataContract;\r\nclass MetadataDataMember {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataDataMember = MetadataDataMember;\r\nclass MetadataAttribute {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataAttribute = MetadataAttribute;\r\nclass MetadataPropertyType {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataPropertyType = MetadataPropertyType;\r\nclass MetadataType {\r\n constructor(init) { Object.assign(this, init); }\r\n}\r\nexports.MetadataType = MetadataType;\r\nclass NewInstanceResolver {\r\n tryResolve(ctor) {\r\n return new ctor();\r\n }\r\n}\r\nexports.NewInstanceResolver = NewInstanceResolver;\r\nclass SingletonInstanceResolver {\r\n tryResolve(ctor) {\r\n return ctor.instance\r\n || (ctor.instance = new ctor());\r\n }\r\n}\r\nexports.SingletonInstanceResolver = SingletonInstanceResolver;\r\nfunction eventMessageType(evt) {\r\n switch (evt) {\r\n case 'onConnect':\r\n return 'ServerEventConnect';\r\n case 'onHeartbeat':\r\n return 'ServerEventHeartbeat';\r\n case 'onJoin':\r\n return 'ServerEventJoin';\r\n case 'onLeave':\r\n return 'ServerEventLeave';\r\n case 'onUpdate':\r\n return 'ServerEventUpdate';\r\n }\r\n return null;\r\n}\r\n/**\r\n * EventSource\r\n */\r\nvar ReadyState;\r\n(function (ReadyState) {\r\n ReadyState[ReadyState[\"CONNECTING\"] = 0] = \"CONNECTING\";\r\n ReadyState[ReadyState[\"OPEN\"] = 1] = \"OPEN\";\r\n ReadyState[ReadyState[\"CLOSED\"] = 2] = \"CLOSED\";\r\n})(ReadyState = exports.ReadyState || (exports.ReadyState = {}));\r\nclass ServerEventsClient {\r\n constructor(baseUrl, channels, options = {}, eventSource = null) {\r\n this.channels = channels;\r\n this.options = options;\r\n this.eventSource = eventSource;\r\n this.onMessage = (e) => {\r\n if (typeof document == \"undefined\") { //node\r\n //latest node-fetch + eventsource doesn't split SSE messages properly\r\n let requireSplitPos = e.data ? e.data.indexOf('\\n') : -1;\r\n if (requireSplitPos >= 0) {\r\n let data = e.data;\r\n let lastEventId = e.lastEventId;\r\n let e1 = Object.assign({}, { lastEventId, data: data.substring(0, requireSplitPos) }), e2 = Object.assign({}, { lastEventId, data: data.substring(requireSplitPos + 1) });\r\n this._onMessage(e1);\r\n this._onMessage(e2);\r\n return;\r\n }\r\n }\r\n this._onMessage(e);\r\n };\r\n this._onMessage = (e) => {\r\n if (this.stopped)\r\n return;\r\n let opt = this.options;\r\n if (typeof document == \"undefined\") {\r\n var document = {\r\n querySelectorAll: sel => []\r\n };\r\n }\r\n let $ = document.querySelectorAll.bind(document);\r\n let parts = splitOnFirst(e.data, \" \");\r\n let channel = null;\r\n let selector = parts[0];\r\n let selParts = splitOnFirst(selector, \"@\");\r\n if (selParts.length > 1) {\r\n channel = selParts[0];\r\n selector = selParts[1];\r\n }\r\n const json = parts[1];\r\n let body = null;\r\n try {\r\n body = json ? JSON.parse(json) : null;\r\n }\r\n catch (ignore) { }\r\n parts = splitOnFirst(selector, \".\");\r\n if (parts.length <= 1)\r\n throw \"invalid selector format: \" + selector;\r\n let op = parts[0], target = parts[1].replace(new RegExp(\"%20\", \"g\"), \" \");\r\n const tokens = splitOnFirst(target, \"$\");\r\n const [cmd, cssSelector] = tokens;\r\n const els = cssSelector && $(cssSelector);\r\n const el = els && els[0];\r\n const eventId = parseInt(e.lastEventId);\r\n const data = e.data;\r\n const type = eventMessageType(cmd) || \"ServerEventMessage\";\r\n const request = { eventId, data, type,\r\n channel, selector, json, body, op, target: tokens[0], cssSelector, meta: {} };\r\n const mergedBody = typeof body == \"object\"\r\n ? Object.assign({}, request, body)\r\n : request;\r\n if (opt.validate && opt.validate(request) === false)\r\n return;\r\n let headers = new Headers();\r\n headers.set(\"Content-Type\", \"text/plain\");\r\n if (op === \"cmd\") {\r\n if (cmd === \"onConnect\") {\r\n this.connectionInfo = mergedBody;\r\n if (typeof body.heartbeatIntervalMs == \"string\")\r\n this.connectionInfo.heartbeatIntervalMs = parseInt(body.heartbeatIntervalMs);\r\n if (typeof body.idleTimeoutMs == \"string\")\r\n this.connectionInfo.idleTimeoutMs = parseInt(body.idleTimeoutMs);\r\n Object.assign(opt, body);\r\n let fn = opt.handlers[\"onConnect\"];\r\n if (fn) {\r\n fn.call(el || document.body, this.connectionInfo, request);\r\n if (this.stopped)\r\n return;\r\n }\r\n if (opt.heartbeatUrl) {\r\n if (opt.heartbeat) {\r\n clearInterval(opt.heartbeat);\r\n }\r\n opt.heartbeat = setInterval(() => {\r\n if (this.eventSource.readyState === EventSource.CLOSED) {\r\n clearInterval(opt.heartbeat);\r\n const stopFn = opt.handlers[\"onStop\"];\r\n if (stopFn != null)\r\n stopFn.apply(this.eventSource);\r\n this.reconnectServerEvents({ error: new Error(\"EventSource is CLOSED\") });\r\n return;\r\n }\r\n fetch(new Request(opt.heartbeatUrl, { method: \"POST\", mode: \"cors\", headers: headers, credentials: this.serviceClient.credentials }))\r\n .then(res => { if (!res.ok)\r\n throw new Error(`${res.status} - ${res.statusText}`); })\r\n .catch(error => this.reconnectServerEvents({ error }));\r\n }, (this.connectionInfo && this.connectionInfo.heartbeatIntervalMs) || opt.heartbeatIntervalMs || 10000);\r\n }\r\n if (opt.unRegisterUrl) {\r\n if (typeof window != \"undefined\") {\r\n window.onunload = () => {\r\n if (navigator.sendBeacon) { // Chrome https://developers.google.com/web/updates/2019/12/chrome-80-deps-rems\r\n this.stopped = true;\r\n if (this.eventSource)\r\n this.eventSource.close();\r\n navigator.sendBeacon(opt.unRegisterUrl);\r\n }\r\n else {\r\n this.stop();\r\n }\r\n };\r\n }\r\n }\r\n this.updateSubscriberUrl = opt.updateSubscriberUrl;\r\n this.updateChannels((opt.channels || \"\").split(\",\"));\r\n }\r\n else {\r\n let isCmdMsg = cmd == \"onJoin\" || cmd == \"onLeave\" || cmd == \"onUpdate\";\r\n let fn = opt.handlers[cmd];\r\n if (fn) {\r\n if (isCmdMsg) {\r\n fn.call(el || document.body, mergedBody);\r\n }\r\n else {\r\n fn.call(el || document.body, body, request);\r\n }\r\n }\r\n else {\r\n if (!isCmdMsg) { //global receiver\r\n let r = opt.receivers && opt.receivers[\"cmd\"];\r\n this.invokeReceiver(r, cmd, el, request, \"cmd\");\r\n }\r\n }\r\n if (isCmdMsg) {\r\n fn = opt.handlers[\"onCommand\"];\r\n if (fn) {\r\n fn.call(el || document.body, mergedBody);\r\n }\r\n }\r\n }\r\n }\r\n else if (op === \"trigger\") {\r\n this.raiseEvent(target, request);\r\n }\r\n else if (op === \"css\") {\r\n css(els || $(\"body\"), cmd, body);\r\n }\r\n //Named Receiver\r\n let r = opt.receivers && opt.receivers[op];\r\n this.invokeReceiver(r, cmd, el, request, op);\r\n if (!eventMessageType(cmd)) {\r\n let fn = opt.handlers[\"onMessage\"];\r\n if (fn) {\r\n fn.call(el || document.body, mergedBody);\r\n }\r\n }\r\n if (opt.onTick)\r\n opt.onTick();\r\n };\r\n this.onError = (error) => {\r\n if (this.stopped)\r\n return;\r\n if (!error)\r\n error = event;\r\n let fn = this.options.onException;\r\n if (fn != null)\r\n fn.call(this.eventSource, error);\r\n if (this.options.onTick)\r\n this.options.onTick();\r\n };\r\n if (this.channels.length === 0)\r\n throw \"at least 1 channel is required\";\r\n this.resolver = this.options.resolver || new NewInstanceResolver();\r\n this.eventStreamUri = combinePaths(baseUrl, \"event-stream\") + \"?\";\r\n this.updateChannels(channels);\r\n this.serviceClient = new JsonServiceClient(baseUrl);\r\n this.listeners = {};\r\n this.withCredentials = true;\r\n if (!this.options.handlers)\r\n this.options.handlers = {};\r\n }\r\n getEventSourceOptions() {\r\n return { withCredentials: this.withCredentials };\r\n }\r\n reconnectServerEvents(opt = {}) {\r\n if (this.stopped)\r\n return;\r\n if (opt.error)\r\n this.onError(opt.error);\r\n const hold = this.eventSource;\r\n let url = opt.url || this.eventStreamUri || hold.url;\r\n if (this.options.resolveStreamUrl != null) {\r\n url = this.options.resolveStreamUrl(url);\r\n }\r\n const es = this.EventSource\r\n ? new this.EventSource(url, this.getEventSourceOptions())\r\n : new EventSource(url, this.getEventSourceOptions());\r\n es.addEventListener('error', e => (opt.onerror || hold.onerror || this.onError)(e));\r\n es.addEventListener('message', opt.onmessage || hold.onmessage || this.onMessage);\r\n let fn = this.options.onReconnect;\r\n if (fn != null)\r\n fn.call(es, opt.error);\r\n if (hold.removeEventListener) {\r\n hold.removeEventListener('error', this.onError);\r\n hold.removeEventListener('message', this.onMessage);\r\n }\r\n hold.close();\r\n return this.eventSource = es;\r\n }\r\n start() {\r\n this.stopped = false;\r\n if (this.eventSource == null || this.eventSource.readyState === EventSource.CLOSED) {\r\n let url = this.eventStreamUri;\r\n if (this.options.resolveStreamUrl != null) {\r\n url = this.options.resolveStreamUrl(url);\r\n }\r\n this.eventSource = this.EventSource\r\n ? new this.EventSource(url, this.getEventSourceOptions())\r\n : new EventSource(url, this.getEventSourceOptions());\r\n this.eventSource.addEventListener('error', this.onError);\r\n this.eventSource.addEventListener('message', e => this.onMessage(e));\r\n }\r\n return this;\r\n }\r\n stop() {\r\n this.stopped = true;\r\n if (this.eventSource) {\r\n this.eventSource.close();\r\n }\r\n let opt = this.options;\r\n if (opt && opt.heartbeat) {\r\n clearInterval(opt.heartbeat);\r\n }\r\n let hold = this.connectionInfo;\r\n if (hold == null || hold.unRegisterUrl == null)\r\n return new Promise((resolve, reject) => resolve());\r\n this.connectionInfo = null;\r\n return fetch(new Request(hold.unRegisterUrl, { method: \"POST\", mode: \"cors\", credentials: this.serviceClient.credentials }))\r\n .then(res => { if (!res.ok)\r\n throw new Error(`${res.status} - ${res.statusText}`); })\r\n .catch(this.onError);\r\n }\r\n invokeReceiver(r, cmd, el, request, name) {\r\n if (r) {\r\n if (typeof r == \"function\") {\r\n r = this.resolver.tryResolve(r);\r\n }\r\n cmd = cmd.replace(\"-\", \"\");\r\n r.client = this;\r\n r.request = request;\r\n if (typeof (r[cmd]) == \"function\") {\r\n r[cmd].call(el || r, request.body, request);\r\n }\r\n else if (cmd in r) {\r\n r[cmd] = request.body;\r\n }\r\n else {\r\n let metaProp = Object.getOwnPropertyDescriptor(r, cmd);\r\n if (metaProp != null) {\r\n if (metaProp.set) {\r\n metaProp.set(request.body);\r\n }\r\n else if (metaProp.writable) {\r\n r[cmd] = request.body;\r\n }\r\n return;\r\n }\r\n let cmdLower = cmd.toLowerCase();\r\n for (let k in r) {\r\n if (k.toLowerCase() == cmdLower) {\r\n if (typeof r[k] == \"function\") {\r\n r[k].call(el || r, request.body, request);\r\n }\r\n else {\r\n r[k] = request.body;\r\n }\r\n return;\r\n }\r\n }\r\n let noSuchMethod = r[\"noSuchMethod\"];\r\n if (typeof noSuchMethod == \"function\") {\r\n noSuchMethod.call(el || r, request.target, request);\r\n }\r\n }\r\n }\r\n }\r\n hasConnected() {\r\n return this.connectionInfo != null;\r\n }\r\n registerHandler(name, fn) {\r\n if (!this.options.handlers)\r\n this.options.handlers = {};\r\n this.options.handlers[name] = fn;\r\n return this;\r\n }\r\n setResolver(resolver) {\r\n this.options.resolver = resolver;\r\n return this;\r\n }\r\n registerReceiver(receiver) {\r\n return this.registerNamedReceiver(\"cmd\", receiver);\r\n }\r\n registerNamedReceiver(name, receiver) {\r\n if (!this.options.receivers)\r\n this.options.receivers = {};\r\n this.options.receivers[name] = receiver;\r\n return this;\r\n }\r\n unregisterReceiver(name = \"cmd\") {\r\n if (this.options.receivers) {\r\n delete this.options.receivers[name];\r\n }\r\n return this;\r\n }\r\n updateChannels(channels) {\r\n this.channels = channels;\r\n const url = this.eventSource != null\r\n ? this.eventSource.url\r\n : this.eventStreamUri;\r\n this.eventStreamUri = url.substring(0, Math.min(url.indexOf(\"?\"), url.length)) + \"?channels=\" + channels.join(\",\") + \"&t=\" + new Date().getTime();\r\n }\r\n update(subscribe, unsubscribe) {\r\n let sub = typeof subscribe == \"string\" ? subscribe.split(',') : subscribe;\r\n let unsub = typeof unsubscribe == \"string\" ? unsubscribe.split(',') : unsubscribe;\r\n let channels = [];\r\n for (let i in this.channels) {\r\n let c = this.channels[i];\r\n if (unsub == null || unsub.indexOf(c) === -1) {\r\n channels.push(c);\r\n }\r\n }\r\n if (sub) {\r\n for (let i in sub) {\r\n let c = sub[i];\r\n if (channels.indexOf(c) === -1) {\r\n channels.push(c);\r\n }\r\n }\r\n }\r\n this.updateChannels(channels);\r\n }\r\n addListener(eventName, handler) {\r\n let handlers = this.listeners[eventName] || (this.listeners[eventName] = []);\r\n handlers.push(handler);\r\n return this;\r\n }\r\n removeListener(eventName, handler) {\r\n let handlers = this.listeners[eventName];\r\n if (handlers) {\r\n let pos = handlers.indexOf(handler);\r\n if (pos >= 0) {\r\n handlers.splice(pos, 1);\r\n }\r\n }\r\n return this;\r\n }\r\n raiseEvent(eventName, msg) {\r\n let handlers = this.listeners[eventName];\r\n if (handlers) {\r\n handlers.forEach(x => {\r\n try {\r\n x(msg);\r\n }\r\n catch (e) {\r\n this.onError(e);\r\n }\r\n });\r\n }\r\n }\r\n getConnectionInfo() {\r\n if (this.connectionInfo == null)\r\n throw \"Not Connected\";\r\n return this.connectionInfo;\r\n }\r\n getSubscriptionId() {\r\n return this.getConnectionInfo().id;\r\n }\r\n updateSubscriber(request) {\r\n if (request.id == null)\r\n request.id = this.getSubscriptionId();\r\n return this.serviceClient.post(request)\r\n .then(x => {\r\n this.update(request.subscribeChannels, request.unsubscribeChannels);\r\n }).catch(this.onError);\r\n }\r\n subscribeToChannels(...channels) {\r\n let request = new UpdateEventSubscriber();\r\n request.id = this.getSubscriptionId();\r\n request.subscribeChannels = channels;\r\n return this.serviceClient.post(request)\r\n .then(x => {\r\n this.update(channels, null);\r\n }).catch(this.onError);\r\n }\r\n unsubscribeFromChannels(...channels) {\r\n let request = new UpdateEventSubscriber();\r\n request.id = this.getSubscriptionId();\r\n request.unsubscribeChannels = channels;\r\n return this.serviceClient.post(request)\r\n .then(x => {\r\n this.update(null, channels);\r\n }).catch(this.onError);\r\n }\r\n getChannelSubscribers() {\r\n let request = new GetEventSubscribers();\r\n request.channels = this.channels;\r\n return this.serviceClient.get(request)\r\n .then(r => r.map(x => this.toServerEventUser(x)))\r\n .catch(e => {\r\n this.onError(e);\r\n return [];\r\n });\r\n }\r\n toServerEventUser(map) {\r\n let channels = map[\"channels\"];\r\n let to = new ServerEventUser();\r\n to.userId = map[\"userId\"];\r\n to.displayName = map[\"displayName\"];\r\n to.profileUrl = map[\"profileUrl\"];\r\n to.channels = channels ? channels.split(',') : null;\r\n for (let k in map) {\r\n if (k == \"userId\" || k == \"displayName\" ||\r\n k == \"profileUrl\" || k == \"channels\")\r\n continue;\r\n if (to.meta == null)\r\n to.meta = {};\r\n to.meta[k] = map[k];\r\n }\r\n return to;\r\n }\r\n}\r\nexports.ServerEventsClient = ServerEventsClient;\r\nServerEventsClient.UnknownChannel = \"*\";\r\nclass ServerEventReceiver {\r\n noSuchMethod(selector, message) { }\r\n}\r\nexports.ServerEventReceiver = ServerEventReceiver;\r\nclass UpdateEventSubscriber {\r\n createResponse() { return new UpdateEventSubscriberResponse(); }\r\n getTypeName() { return \"UpdateEventSubscriber\"; }\r\n}\r\nexports.UpdateEventSubscriber = UpdateEventSubscriber;\r\nclass UpdateEventSubscriberResponse {\r\n}\r\nexports.UpdateEventSubscriberResponse = UpdateEventSubscriberResponse;\r\nclass GetEventSubscribers {\r\n createResponse() { return []; }\r\n getTypeName() { return \"GetEventSubscribers\"; }\r\n}\r\nexports.GetEventSubscribers = GetEventSubscribers;\r\nclass ServerEventUser {\r\n}\r\nexports.ServerEventUser = ServerEventUser;\r\nclass HttpMethods {\r\n}\r\nexports.HttpMethods = HttpMethods;\r\nHttpMethods.Get = \"GET\";\r\nHttpMethods.Post = \"POST\";\r\nHttpMethods.Put = \"PUT\";\r\nHttpMethods.Delete = \"DELETE\";\r\nHttpMethods.Patch = \"PATCH\";\r\nHttpMethods.Head = \"HEAD\";\r\nHttpMethods.Options = \"OPTIONS\";\r\nHttpMethods.hasRequestBody = (method) => !(method === \"GET\" || method === \"DELETE\" || method === \"HEAD\" || method === \"OPTIONS\");\r\nclass GetAccessToken {\r\n constructor(init) { Object.assign(this, init); }\r\n createResponse() { return new GetAccessTokenResponse(); }\r\n getTypeName() { return 'GetAccessToken'; }\r\n getMethod() { return 'POST'; }\r\n}\r\nclass GetAccessTokenResponse {\r\n}\r\nexports.GetAccessTokenResponse = GetAccessTokenResponse;\r\nclass JsonServiceClient {\r\n constructor(baseUrl = \"/\") {\r\n this.baseUrl = baseUrl;\r\n this.replyBaseUrl = combinePaths(baseUrl, \"json\", \"reply\") + \"/\";\r\n this.oneWayBaseUrl = combinePaths(baseUrl, \"json\", \"oneway\") + \"/\";\r\n this.mode = \"cors\";\r\n this.credentials = \"include\";\r\n this.headers = new Headers();\r\n this.headers.set(\"Content-Type\", \"application/json\");\r\n this.manageCookies = typeof document == \"undefined\"; //because node-fetch doesn't\r\n this.cookies = {};\r\n this.enableAutoRefreshToken = true;\r\n }\r\n setCredentials(userName, password) {\r\n this.userName = userName;\r\n this.password = password;\r\n }\r\n useBasePath(path) {\r\n this.basePath = path;\r\n return this;\r\n }\r\n set basePath(path) {\r\n if (!path) {\r\n this.replyBaseUrl = combinePaths(this.baseUrl, \"json\", \"reply\") + \"/\";\r\n this.oneWayBaseUrl = combinePaths(this.baseUrl, \"json\", \"oneway\") + \"/\";\r\n }\r\n else {\r\n if (path[0] != '/') {\r\n path = '/' + path;\r\n }\r\n this.replyBaseUrl = combinePaths(this.baseUrl, path) + \"/\";\r\n this.oneWayBaseUrl = combinePaths(this.baseUrl, path) + \"/\";\r\n }\r\n }\r\n apply(f) {\r\n f(this);\r\n return this;\r\n }\r\n get(request, args) {\r\n return typeof request != \"string\"\r\n ? this.fetch(HttpMethods.Get, request, args)\r\n : this.fetch(HttpMethods.Get, null, args, this.toAbsoluteUrl(request));\r\n }\r\n delete(request, args) {\r\n return typeof request != \"string\"\r\n ? this.fetch(HttpMethods.Delete, request, args)\r\n : this.fetch(HttpMethods.Delete, null, args, this.toAbsoluteUrl(request));\r\n }\r\n post(request, args) {\r\n return this.fetch(HttpMethods.Post, request, args);\r\n }\r\n postToUrl(url, request, args) {\r\n return this.fetch(HttpMethods.Post, request, args, this.toAbsoluteUrl(url));\r\n }\r\n postBody(request, body, args) {\r\n return this.fetchBody(HttpMethods.Post, request, body, args);\r\n }\r\n put(request, args) {\r\n return this.fetch(HttpMethods.Put, request, args);\r\n }\r\n putToUrl(url, request, args) {\r\n return this.fetch(HttpMethods.Put, request, args, this.toAbsoluteUrl(url));\r\n }\r\n putBody(request, body, args) {\r\n return this.fetchBody(HttpMethods.Put, request, body, args);\r\n }\r\n patch(request, args) {\r\n return this.fetch(HttpMethods.Patch, request, args);\r\n }\r\n patchToUrl(url, request, args) {\r\n return this.fetch(HttpMethods.Patch, request, args, this.toAbsoluteUrl(url));\r\n }\r\n patchBody(request, body, args) {\r\n return this.fetchBody(HttpMethods.Patch, request, body, args);\r\n }\r\n publish(request, args) {\r\n return this.sendOneWay(request, args);\r\n }\r\n sendOneWay(request, args) {\r\n const url = combinePaths(this.oneWayBaseUrl, nameOf(request));\r\n return this.fetch(HttpMethods.Post, request, null, url);\r\n }\r\n sendAll(requests) {\r\n if (requests.length == 0)\r\n return Promise.resolve([]);\r\n const url = combinePaths(this.replyBaseUrl, nameOf(requests[0]) + \"[]\");\r\n return this.fetch(HttpMethods.Post, requests, null, url);\r\n }\r\n sendAllOneWay(requests) {\r\n if (requests.length == 0)\r\n return Promise.resolve(void 0);\r\n const url = combinePaths(this.oneWayBaseUrl, nameOf(requests[0]) + \"[]\");\r\n return this.fetch(HttpMethods.Post, requests, null, url)\r\n .then(r => void 0);\r\n }\r\n createUrlFromDto(method, request) {\r\n let url = combinePaths(this.replyBaseUrl, nameOf(request));\r\n const hasRequestBody = HttpMethods.hasRequestBody(method);\r\n if (!hasRequestBody)\r\n url = appendQueryString(url, request);\r\n return url;\r\n }\r\n toAbsoluteUrl(relativeOrAbsoluteUrl) {\r\n return relativeOrAbsoluteUrl.startsWith(\"http://\") ||\r\n relativeOrAbsoluteUrl.startsWith(\"https://\")\r\n ? relativeOrAbsoluteUrl\r\n : combinePaths(this.baseUrl, relativeOrAbsoluteUrl);\r\n }\r\n deleteCookie(name) {\r\n if (this.manageCookies) {\r\n delete this.cookies[name];\r\n }\r\n else {\r\n if (document) {\r\n document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/';\r\n }\r\n }\r\n }\r\n createRequest({ method, request, url, args, body }) {\r\n if (!url)\r\n url = this.createUrlFromDto(method, request);\r\n if (args)\r\n url = appendQueryString(url, args);\r\n if (this.bearerToken != null) {\r\n this.headers.set(\"Authorization\", \"Bearer \" + this.bearerToken);\r\n }\r\n else if (this.userName != null) {\r\n this.headers.set('Authorization', 'Basic ' + JsonServiceClient.toBase64(`${this.userName}:${this.password}`));\r\n }\r\n if (this.manageCookies) {\r\n let cookies = Object.keys(this.cookies)\r\n .map(x => {\r\n let c = this.cookies[x];\r\n return c.expires && c.expires < new Date()\r\n ? null\r\n : `${c.name}=${encodeURIComponent(c.value)}`;\r\n })\r\n .filter(x => !!x);\r\n if (cookies.length > 0)\r\n this.headers.set(\"Cookie\", cookies.join(\"; \"));\r\n else\r\n this.headers.delete(\"Cookie\");\r\n }\r\n let headers = new Headers(this.headers);\r\n let hasRequestBody = HttpMethods.hasRequestBody(method);\r\n let reqInit = {\r\n url,\r\n method: method,\r\n mode: this.mode,\r\n credentials: this.credentials,\r\n headers,\r\n compress: false, // https://github.com/bitinn/node-fetch/issues/93#issuecomment-200791658\r\n };\r\n if (hasRequestBody) {\r\n reqInit.body = body || JSON.stringify(request);\r\n if (isFormData(body)) {\r\n reqInit.body = sanitizeFormData(body);\r\n headers.delete('Content-Type'); //set by FormData\r\n }\r\n }\r\n if (this.requestFilter != null)\r\n this.requestFilter(reqInit);\r\n if (JsonServiceClient.globalRequestFilter != null)\r\n JsonServiceClient.globalRequestFilter(reqInit);\r\n return reqInit;\r\n }\r\n json(res) {\r\n if (this.parseJson)\r\n return this.parseJson(res);\r\n return res.json();\r\n }\r\n applyResponseFilters(res) {\r\n if (this.responseFilter != null)\r\n this.responseFilter(res);\r\n if (JsonServiceClient.globalResponseFilter != null)\r\n JsonServiceClient.globalResponseFilter(res);\r\n }\r\n createResponse(res, request) {\r\n if (!res.ok) {\r\n this.applyResponseFilters(res);\r\n throw res;\r\n }\r\n if (this.manageCookies) {\r\n let setCookies = [];\r\n res.headers.forEach((v, k) => {\r\n switch (k.toLowerCase()) {\r\n case \"set-cookie\":\r\n let cookies = v.split(',');\r\n cookies.forEach(c => setCookies.push(c));\r\n break;\r\n }\r\n });\r\n setCookies.forEach(x => {\r\n let cookie = parseCookie(x);\r\n if (cookie)\r\n this.cookies[cookie.name] = cookie;\r\n });\r\n }\r\n res.headers.forEach((v, k) => {\r\n switch (k.toLowerCase()) {\r\n case \"x-cookies\":\r\n if (v.split(',').indexOf('ss-reftok') >= 0)\r\n this.useTokenCookie = true;\r\n break;\r\n }\r\n });\r\n this.applyResponseFilters(res);\r\n let x = request && typeof request != \"string\" && typeof request.createResponse == 'function'\r\n ? request.createResponse()\r\n : null;\r\n if (typeof x === 'string')\r\n return res.text().then(o => o);\r\n let contentType = res.headers.get(\"content-type\");\r\n let isJson = contentType && contentType.indexOf(\"application/json\") !== -1;\r\n if (isJson) {\r\n return this.json(res).then(o => o);\r\n }\r\n if (typeof Uint8Array != \"undefined\" && x instanceof Uint8Array) {\r\n if (typeof res.arrayBuffer != 'function')\r\n throw new Error(\"This fetch polyfill does not implement 'arrayBuffer'\");\r\n return res.arrayBuffer().then(o => new Uint8Array(o));\r\n }\r\n else if (typeof Blob == \"function\" && x instanceof Blob) {\r\n if (typeof res.blob != 'function')\r\n throw new Error(\"This fetch polyfill does not implement 'blob'\");\r\n return res.blob().then(o => o);\r\n }\r\n let contentLength = res.headers.get(\"content-length\");\r\n if (contentLength === \"0\" || (contentLength == null && !isJson)) {\r\n return x;\r\n }\r\n return this.json(res).then(o => o); //fallback\r\n }\r\n handleError(holdRes, res, type = null) {\r\n if (res instanceof Error)\r\n throw this.raiseError(holdRes, res);\r\n // res.json can only be called once.\r\n if (res.bodyUsed)\r\n throw this.raiseError(res, createErrorResponse(res.status, res.statusText, type));\r\n let isErrorResponse = typeof res.json == \"undefined\" && res.responseStatus;\r\n if (isErrorResponse) {\r\n return new Promise((resolve, reject) => reject(this.raiseError(null, res)));\r\n }\r\n return this.json(res).then(o => {\r\n let errorDto = sanitize(o);\r\n if (!errorDto.responseStatus)\r\n throw createErrorResponse(res.status, res.statusText, type);\r\n if (type != null)\r\n errorDto.type = type;\r\n throw errorDto;\r\n }).catch(error => {\r\n // No responseStatus body, set from `res` Body object\r\n if (error instanceof Error\r\n || (typeof window != \"undefined\" && error instanceof window.DOMException /*MS Edge*/)) {\r\n throw this.raiseError(res, createErrorResponse(res.status, res.statusText, type));\r\n }\r\n throw this.raiseError(res, error);\r\n });\r\n }\r\n fetch(method, request, args, url) {\r\n return this.sendRequest({ method, request, args, url });\r\n }\r\n fetchBody(method, request, body, args) {\r\n let url = combinePaths(this.replyBaseUrl, nameOf(request));\r\n return this.sendRequest({\r\n method,\r\n request: body,\r\n body: typeof body == \"string\"\r\n ? body\r\n : isFormData(body)\r\n ? body\r\n : JSON.stringify(body),\r\n url: appendQueryString(url, request),\r\n args,\r\n returns: request\r\n });\r\n }\r\n sendRequest(info) {\r\n const req = this.createRequest(info);\r\n const returns = info.returns || info.request;\r\n let holdRes = null;\r\n const resendRequest = () => {\r\n const req = this.createRequest(info);\r\n if (this.urlFilter)\r\n this.urlFilter(req.url);\r\n return fetch(req.url, req)\r\n .then(res => this.createResponse(res, returns))\r\n .catch(res => this.handleError(holdRes, res));\r\n };\r\n if (this.urlFilter)\r\n this.urlFilter(req.url);\r\n return fetch(req.url, req)\r\n .then(res => {\r\n holdRes = res;\r\n const response = this.createResponse(res, returns);\r\n return response;\r\n })\r\n .catch(res => {\r\n if (res.status === 401) {\r\n if (this.enableAutoRefreshToken && (this.refreshToken || this.useTokenCookie || this.cookies['ss-reftok'] != null)) {\r\n const jwtReq = new GetAccessToken({ refreshToken: this.refreshToken, useTokenCookie: !!this.useTokenCookie });\r\n let url = this.refreshTokenUri || this.createUrlFromDto(HttpMethods.Post, jwtReq);\r\n if (this.useTokenCookie) {\r\n this.bearerToken = null;\r\n this.headers.delete(\"Authorization\");\r\n }\r\n let jwtRequest = this.createRequest({ method: HttpMethods.Post, request: jwtReq, args: null, url });\r\n return fetch(url, jwtRequest)\r\n .then(r => this.createResponse(r, jwtReq).then(jwtResponse => {\r\n this.bearerToken = jwtResponse.accessToken || null;\r\n return resendRequest();\r\n }))\r\n .catch(res => {\r\n if (this.onAuthenticationRequired) {\r\n return this.onAuthenticationRequired()\r\n .then(resendRequest)\r\n .catch(resHandler => {\r\n return this.handleError(holdRes, resHandler, \"RefreshTokenException\");\r\n });\r\n }\r\n else {\r\n return this.handleError(holdRes, res, \"RefreshTokenException\");\r\n }\r\n });\r\n }\r\n else {\r\n if (this.onAuthenticationRequired) {\r\n return this.onAuthenticationRequired().then(resendRequest);\r\n }\r\n }\r\n }\r\n return this.handleError(holdRes, res);\r\n });\r\n }\r\n raiseError(res, error) {\r\n if (this.exceptionFilter != null) {\r\n this.exceptionFilter(res, error);\r\n }\r\n return error;\r\n }\r\n // Generic send that uses APIs preferred HTTP Method (requires v5.13+ DTOs)\r\n send(request, args, url) {\r\n return this.sendRequest({ method: getMethod(request), request, args, url });\r\n }\r\n // Generic send IReturnVoid that uses APIs preferred HTTP Method (requires v5.13+ DTOs)\r\n sendVoid(request, args, url) {\r\n return this.sendRequest({ method: getMethod(request), request, args, url });\r\n }\r\n api(request, args, method) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const result = yield this.fetch(getMethod(request, method), request, args);\r\n return new ApiResult({ response: result });\r\n }\r\n catch (e) {\r\n return new ApiResult({ error: getResponseStatus(e) });\r\n }\r\n });\r\n }\r\n apiVoid(request, args, method) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const result = yield this.fetch(getMethod(request, method), request, args);\r\n return new ApiResult({ response: result !== null && result !== void 0 ? result : new EmptyResponse() });\r\n }\r\n catch (e) {\r\n return new ApiResult({ error: getResponseStatus(e) });\r\n }\r\n });\r\n }\r\n apiForm(request, body, args, method) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const result = yield this.fetchBody(getMethod(request, method), request, body, args);\r\n return new ApiResult({ response: result });\r\n }\r\n catch (e) {\r\n return new ApiResult({ error: getResponseStatus(e) });\r\n }\r\n });\r\n }\r\n apiFormVoid(request, body, args, method) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const result = yield this.fetchBody(getMethod(request, method), request, body, args);\r\n return new ApiResult({ response: result !== null && result !== void 0 ? result : new EmptyResponse() });\r\n }\r\n catch (e) {\r\n return new ApiResult({ error: getResponseStatus(e) });\r\n }\r\n });\r\n }\r\n}\r\nexports.JsonServiceClient = JsonServiceClient;\r\nfunction getMethod(request, method) {\r\n return (method !== null && method !== void 0 ? method : typeof request.getMethod == \"function\")\r\n ? request.getMethod()\r\n : HttpMethods.Post;\r\n}\r\nexports.getMethod = getMethod;\r\nfunction getResponseStatus(e) {\r\n var _a, _b;\r\n return (_b = (_a = e.responseStatus) !== null && _a !== void 0 ? _a : e.ResponseStatus) !== null && _b !== void 0 ? _b : (e.errorCode\r\n ? e\r\n : (e.message ? createErrorStatus(e.message, e.errorCode) : null));\r\n}\r\nexports.getResponseStatus = getResponseStatus;\r\nclass ApiResult {\r\n constructor(init) { Object.assign(this, init); }\r\n get completed() { return this.response != null || this.error != null; }\r\n get failed() { var _a, _b; return ((_a = this.error) === null || _a === void 0 ? void 0 : _a.errorCode) != null || ((_b = this.error) === null || _b === void 0 ? void 0 : _b.message) != null; }\r\n get succeeded() { return !this.failed && this.response != null; }\r\n get errorMessage() { var _a; return (_a = this.error) === null || _a === void 0 ? void 0 : _a.message; }\r\n get errorCode() { var _a; return (_a = this.error) === null || _a === void 0 ? void 0 : _a.errorCode; }\r\n get errors() { var _a, _b; return (_b = (_a = this.error) === null || _a === void 0 ? void 0 : _a.errors) !== null && _b !== void 0 ? _b : []; }\r\n get errorSummary() { return this.error != null && this.errors.length == 0 ? this.errorMessage : null; }\r\n fieldError(fieldName) {\r\n var _a;\r\n let matchField = fieldName.toLowerCase();\r\n return (_a = this.errors) === null || _a === void 0 ? void 0 : _a.find(x => x.fieldName.toLowerCase() == matchField);\r\n }\r\n fieldErrorMessage(fieldName) { var _a; return (_a = this.fieldError(fieldName)) === null || _a === void 0 ? void 0 : _a.message; }\r\n hasFieldError(fieldName) { return this.fieldError(fieldName) != null; }\r\n showSummary(exceptFields = []) {\r\n if (!this.failed)\r\n return false;\r\n return exceptFields.every(x => !this.hasFieldError(x));\r\n }\r\n summaryMessage(exceptFields = []) {\r\n if (this.showSummary(exceptFields)) {\r\n // Return first field error that's not visible\r\n let fieldSet = exceptFields.map(x => x.toLowerCase());\r\n let fieldError = fieldSet.find(x => fieldSet.indexOf(x.toLowerCase()) == -1);\r\n return fieldError !== null && fieldError !== void 0 ? fieldError : this.errorMessage;\r\n }\r\n }\r\n addFieldError(fieldName, message, errorCode = 'Exception') {\r\n if (!this.error)\r\n this.error = new ResponseStatus();\r\n const fieldError = this.fieldError(fieldName);\r\n if (fieldError != null) {\r\n fieldError.errorCode = errorCode;\r\n fieldError.message = message;\r\n }\r\n else {\r\n this.error.errors.push(new ResponseError({ fieldName, errorCode, message }));\r\n }\r\n }\r\n}\r\nexports.ApiResult = ApiResult;\r\nfunction createErrorStatus(message, errorCode = 'Exception') {\r\n return new ResponseStatus({ errorCode, message });\r\n}\r\nexports.createErrorStatus = createErrorStatus;\r\nfunction createFieldError(fieldName, message, errorCode = 'Exception') {\r\n return new ResponseStatus({ errors: [new ResponseError({ fieldName, errorCode, message })] });\r\n}\r\nexports.createFieldError = createFieldError;\r\nfunction isFormData(body) { return typeof window != \"undefined\" && body instanceof FormData; }\r\nexports.isFormData = isFormData;\r\nfunction createErrorResponse(errorCode, message, type = null) {\r\n const error = apply(new ErrorResponse(), e => {\r\n if (type != null)\r\n e.type = type;\r\n e.responseStatus = apply(new ResponseStatus(), status => {\r\n status.errorCode = errorCode && errorCode.toString();\r\n status.message = message;\r\n });\r\n });\r\n return error;\r\n}\r\nfunction createError(errorCode, message, fieldName) {\r\n return new ErrorResponse({\r\n responseStatus: new ResponseStatus({\r\n errorCode,\r\n message,\r\n errors: fieldName ? [new ResponseError({ errorCode, message, fieldName })] : undefined\r\n })\r\n });\r\n}\r\nexports.createError = createError;\r\nfunction toCamelCase(s) { return !s ? s : s.charAt(0).toLowerCase() + s.substring(1); }\r\nexports.toCamelCase = toCamelCase;\r\nfunction toPascalCase(s) { return !s ? s : s.charAt(0).toUpperCase() + s.substring(1); }\r\nexports.toPascalCase = toPascalCase;\r\nfunction toKebabCase(s) { return (s || '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); }\r\nexports.toKebabCase = toKebabCase;\r\nfunction map(o, f) { return o == null ? null : f(o); }\r\nexports.map = map;\r\nfunction sanitize(status) {\r\n if (status.responseStatus)\r\n return status;\r\n if (status.errors)\r\n return status;\r\n let to = {};\r\n for (let k in status) {\r\n if (status.hasOwnProperty(k)) {\r\n if (status[k] instanceof Object)\r\n to[toCamelCase(k)] = sanitize(status[k]);\r\n else\r\n to[toCamelCase(k)] = status[k];\r\n }\r\n }\r\n to.errors = [];\r\n if (status.Errors != null) {\r\n for (let i = 0, len = status.Errors.length; i < len; i++) {\r\n let o = status.Errors[i];\r\n let err = {};\r\n for (let k in o)\r\n err[toCamelCase(k)] = o[k];\r\n to.errors.push(err);\r\n }\r\n }\r\n return to;\r\n}\r\nexports.sanitize = sanitize;\r\nfunction nameOf(o) {\r\n if (!o)\r\n return \"null\";\r\n if (typeof o.getTypeName == \"function\")\r\n return o.getTypeName();\r\n let ctor = o && o.constructor;\r\n if (ctor == null)\r\n throw `${o} doesn't have constructor`;\r\n if (ctor.name)\r\n return ctor.name;\r\n let str = ctor.toString();\r\n return str.substring(9, str.indexOf(\"(\")); //\"function \".length == 9\r\n}\r\nexports.nameOf = nameOf;\r\n/* utils */\r\nfunction log(o, prefix = \"LOG\") {\r\n console.log(prefix, o);\r\n return o;\r\n}\r\nfunction css(selector, name, value) {\r\n const els = typeof selector == \"string\"\r\n ? document.querySelectorAll(selector)\r\n : selector;\r\n for (let i = 0; i < els.length; i++) {\r\n const el = els[i];\r\n if (el != null && el.style != null) {\r\n el.style[name] = value;\r\n }\r\n }\r\n}\r\nexports.css = css;\r\nfunction splitOnFirst(s, c) {\r\n if (!s)\r\n return [s];\r\n let pos = s.indexOf(c);\r\n return pos >= 0 ? [s.substring(0, pos), s.substring(pos + 1)] : [s];\r\n}\r\nexports.splitOnFirst = splitOnFirst;\r\nfunction splitOnLast(s, c) {\r\n if (!s)\r\n return [s];\r\n let pos = s.lastIndexOf(c);\r\n return pos >= 0\r\n ? [s.substring(0, pos), s.substring(pos + 1)]\r\n : [s];\r\n}\r\nexports.splitOnLast = splitOnLast;\r\nfunction leftPart(s, needle) {\r\n if (s == null)\r\n return null;\r\n let pos = s.indexOf(needle);\r\n return pos == -1\r\n ? s\r\n : s.substring(0, pos);\r\n}\r\nexports.leftPart = leftPart;\r\nfunction rightPart(s, needle) {\r\n if (s == null)\r\n return null;\r\n let pos = s.indexOf(needle);\r\n return pos == -1\r\n ? s\r\n : s.substring(pos + needle.length);\r\n}\r\nexports.rightPart = rightPart;\r\nfunction lastLeftPart(s, needle) {\r\n if (s == null)\r\n return null;\r\n let pos = s.lastIndexOf(needle);\r\n return pos == -1\r\n ? s\r\n : s.substring(0, pos);\r\n}\r\nexports.lastLeftPart = lastLeftPart;\r\nfunction lastRightPart(s, needle) {\r\n if (s == null)\r\n return null;\r\n let pos = s.lastIndexOf(needle);\r\n return pos == -1\r\n ? s\r\n : s.substring(pos + needle.length);\r\n}\r\nexports.lastRightPart = lastRightPart;\r\nfunction chop(str, len = 1) {\r\n len = Math.abs(len);\r\n return str ? len < str.length ? str.substring(0, str.length - len) : '' : str;\r\n}\r\nexports.chop = chop;\r\nfunction onlyProps(obj, keys) {\r\n let to = {};\r\n keys.forEach(key => to[key] = obj[key]);\r\n return to;\r\n}\r\nexports.onlyProps = onlyProps;\r\nfunction splitCase(t) {\r\n return typeof t != 'string' ? t : t.replace(/([A-Z]|[0-9]+)/g, ' $1').replace(/_/g, ' ').trim();\r\n}\r\nfunction humanize(s) { return (!s || s.indexOf(' ') >= 0 ? s : splitCase(toPascalCase(s))); }\r\nexports.humanize = humanize;\r\nconst ucFirst = (s) => s.charAt(0).toUpperCase() + s.substring(1);\r\nexports.ucFirst = ucFirst;\r\nconst isUpper = (c) => c >= 'A' && c <= 'Z';\r\nexports.isUpper = isUpper;\r\nconst isLower = (c) => c >= 'a' && c <= 'z';\r\nexports.isLower = isLower;\r\nconst isDigit = (c) => c >= '0' && c <= '9';\r\nexports.isDigit = isDigit;\r\nconst upperOrDigit = (c) => (0, exports.isUpper)(c) || (0, exports.isDigit)(c);\r\nfunction splitTitleCase(s) {\r\n let to = [];\r\n if (typeof s != 'string')\r\n return to;\r\n let lastSplit = 0;\r\n for (let i = 0; i < s.length; i++) {\r\n let c = s[i];\r\n let prev = i > 0 ? s[i - 1] : null;\r\n let next = i + 1 < s.length ? s[i + 1] : null;\r\n if (upperOrDigit(c) && (!upperOrDigit(prev) || !upperOrDigit(next))) {\r\n to.push(s.substring(lastSplit, i));\r\n lastSplit = i;\r\n }\r\n }\r\n to.push(s.substring(lastSplit, s.length));\r\n return to.filter(x => !!x);\r\n}\r\nexports.splitTitleCase = splitTitleCase;\r\nconst humanify = s => !s || s.indexOf(' ') >= 0 ? s : (0, exports.ucFirst)(splitTitleCase(s).join(' '));\r\nexports.humanify = humanify;\r\nfunction queryString(url) {\r\n if (!url || url.indexOf('?') === -1)\r\n return {};\r\n let pairs = splitOnFirst(url, '?')[1].split('&');\r\n let map = {};\r\n for (let i = 0; i < pairs.length; ++i) {\r\n let p = pairs[i].split('=');\r\n map[p[0]] = p.length > 1\r\n ? decodeURIComponent(p[1].replace(/\\+/g, ' '))\r\n : null;\r\n }\r\n return map;\r\n}\r\nexports.queryString = queryString;\r\nfunction combinePaths(...paths) {\r\n let parts = [], i, l;\r\n for (i = 0, l = paths.length; i < l; i++) {\r\n let arg = paths[i];\r\n parts = arg.indexOf(\"://\") === -1\r\n ? parts.concat(arg.split(\"/\"))\r\n : parts.concat(arg.lastIndexOf(\"/\") === arg.length - 1 ? arg.substring(0, arg.length - 1) : arg);\r\n }\r\n let combinedPaths = [];\r\n for (i = 0, l = parts.length; i < l; i++) {\r\n let part = parts[i];\r\n if (!part || part === \".\")\r\n continue;\r\n if (part === \"..\")\r\n combinedPaths.pop();\r\n else\r\n combinedPaths.push(part);\r\n }\r\n if (parts[0] === \"\")\r\n combinedPaths.unshift(\"\");\r\n return combinedPaths.join(\"/\") || (combinedPaths.length ? \"/\" : \".\");\r\n}\r\nexports.combinePaths = combinePaths;\r\nfunction createPath(route, args) {\r\n let argKeys = {};\r\n for (let k in args) {\r\n argKeys[k.toLowerCase()] = k;\r\n }\r\n let parts = route.split(\"/\");\r\n let url = \"\";\r\n for (let i = 0; i < parts.length; i++) {\r\n let p = parts[i];\r\n if (p == null)\r\n p = \"\";\r\n if (p[0] === \"{\" && p[p.length - 1] === \"}\") {\r\n const key = argKeys[p.substring(1, p.length - 1).toLowerCase()];\r\n if (key) {\r\n p = args[key];\r\n delete args[key];\r\n }\r\n }\r\n if (url.length > 0)\r\n url += \"/\";\r\n url += p;\r\n }\r\n return url;\r\n}\r\nexports.createPath = createPath;\r\nfunction createUrl(route, args) {\r\n let url = createPath(route, args);\r\n return appendQueryString(url, args);\r\n}\r\nexports.createUrl = createUrl;\r\nfunction appendQueryString(url, args) {\r\n for (let k in args) {\r\n if (args.hasOwnProperty(k)) {\r\n let val = args[k];\r\n if (typeof val == 'undefined')\r\n continue;\r\n url += url.indexOf(\"?\") >= 0 ? \"&\" : \"?\";\r\n url += k + \"=\" + qsValue(val);\r\n }\r\n }\r\n return url;\r\n}\r\nexports.appendQueryString = appendQueryString;\r\nfunction qsValue(arg) {\r\n if (arg == null)\r\n return \"\";\r\n if (typeof Uint8Array != \"undefined\" && arg instanceof Uint8Array)\r\n return bytesToBase64(arg);\r\n return encodeURIComponent(arg) || \"\";\r\n}\r\n//from: https://github.com/madmurphy/stringview.js/blob/master/stringview.js\r\nfunction bytesToBase64(aBytes) {\r\n let eqLen = (3 - (aBytes.length % 3)) % 3, sB64Enc = \"\";\r\n for (let nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {\r\n nMod3 = nIdx % 3;\r\n nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);\r\n if (nMod3 === 2 || aBytes.length - nIdx === 1) {\r\n sB64Enc += String.fromCharCode(uint6ToB64(nUint24 >>> 18 & 63), uint6ToB64(nUint24 >>> 12 & 63), uint6ToB64(nUint24 >>> 6 & 63), uint6ToB64(nUint24 & 63));\r\n nUint24 = 0;\r\n }\r\n }\r\n return eqLen === 0\r\n ? sB64Enc\r\n : sB64Enc.substring(0, sB64Enc.length - eqLen) + (eqLen === 1 ? \"=\" : \"==\");\r\n}\r\nexports.bytesToBase64 = bytesToBase64;\r\nfunction uint6ToB64(nUint6) {\r\n return nUint6 < 26 ?\r\n nUint6 + 65\r\n : nUint6 < 52 ?\r\n nUint6 + 71\r\n : nUint6 < 62 ?\r\n nUint6 - 4\r\n : nUint6 === 62 ? 43\r\n : nUint6 === 63 ? 47 : 65;\r\n}\r\nfunction _btoa(base64) {\r\n return typeof btoa == 'function'\r\n ? btoa(base64)\r\n : Buffer.from(base64).toString('base64');\r\n}\r\nfunction _atob(base64) {\r\n return typeof atob == 'function'\r\n ? atob(base64)\r\n : Buffer.from(base64, 'base64').toString();\r\n}\r\n//from: http://stackoverflow.com/a/30106551/85785\r\nJsonServiceClient.toBase64 = (str) => _btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => String.fromCharCode(new Number('0x' + p1).valueOf())));\r\nfunction stripQuotes(s) { return s && s[0] == '\"' && s[s.length] == '\"' ? s.slice(1, -1) : s; }\r\nexports.stripQuotes = stripQuotes;\r\nfunction tryDecode(s) {\r\n try {\r\n return decodeURIComponent(s);\r\n }\r\n catch (e) {\r\n return s;\r\n }\r\n}\r\nexports.tryDecode = tryDecode;\r\nfunction parseCookie(setCookie) {\r\n if (!setCookie)\r\n return null;\r\n let to = null;\r\n let pairs = setCookie.split(/; */);\r\n for (let i = 0; i < pairs.length; i++) {\r\n let pair = pairs[i];\r\n let parts = splitOnFirst(pair, '=');\r\n let name = parts[0].trim();\r\n let value = parts.length > 1 ? tryDecode(stripQuotes(parts[1].trim())) : null;\r\n if (i == 0) {\r\n to = { name, value, path: \"/\" };\r\n }\r\n else {\r\n let lower = name.toLowerCase();\r\n if (lower == \"httponly\") {\r\n to.httpOnly = true;\r\n }\r\n else if (lower == \"secure\") {\r\n to.secure = true;\r\n }\r\n else if (lower == \"expires\") {\r\n to.expires = new Date(value);\r\n // MS Edge returns Invalid Date when using '-' in \"12-Mar-2037\"\r\n if (to.expires.toString() === \"Invalid Date\") {\r\n to.expires = new Date(value.replace(/-/g, \" \"));\r\n }\r\n }\r\n else {\r\n to[name] = value;\r\n }\r\n }\r\n }\r\n return to;\r\n}\r\nexports.parseCookie = parseCookie;\r\nfunction normalizeKey(key) { return key.toLowerCase().replace(/_/g, ''); }\r\nexports.normalizeKey = normalizeKey;\r\nfunction isArray(o) { return Object.prototype.toString.call(o) === '[object Array]'; }\r\nfunction normalize(dto, deep) {\r\n if (isArray(dto)) {\r\n if (!deep)\r\n return dto;\r\n const to = [];\r\n for (let i = 0; i < dto.length; i++) {\r\n to[i] = normalize(dto[i], deep);\r\n }\r\n return to;\r\n }\r\n if (typeof dto != \"object\")\r\n return dto;\r\n let o = {};\r\n for (let k in dto) {\r\n o[normalizeKey(k)] = deep ? normalize(dto[k], deep) : dto[k];\r\n }\r\n return o;\r\n}\r\nexports.normalize = normalize;\r\nfunction getField(o, name) {\r\n return o == null || name == null ? null :\r\n o[name] ||\r\n o[Object.keys(o).filter(k => normalizeKey(k) === normalizeKey(name))[0] || ''];\r\n}\r\nexports.getField = getField;\r\nfunction parseResponseStatus(json, defaultMsg = null) {\r\n try {\r\n let err = JSON.parse(json);\r\n return sanitize(err.ResponseStatus || err.responseStatus);\r\n }\r\n catch (e) {\r\n return {\r\n message: defaultMsg || e.message || e,\r\n __error: { error: e, json: json }\r\n };\r\n }\r\n}\r\nexports.parseResponseStatus = parseResponseStatus;\r\nfunction toFormData(o) {\r\n if (typeof window == \"undefined\")\r\n return;\r\n let formData = new FormData();\r\n for (let name in o) {\r\n formData.append(name, o[name]);\r\n }\r\n return formData;\r\n}\r\nexports.toFormData = toFormData;\r\nfunction toObject(keys) {\r\n const to = {};\r\n if (!keys)\r\n return to;\r\n if (typeof keys != \"object\")\r\n throw new Error(\"keys must be an Array of object keys\");\r\n const arr = Array.prototype.slice.call(keys);\r\n arr.forEach(key => {\r\n if (this[key]) {\r\n to[key] = this[key];\r\n }\r\n });\r\n return to;\r\n}\r\nexports.toObject = toObject;\r\nfunction errorResponseSummary() {\r\n const responseStatus = this.responseStatus || this.ResponseStatus;\r\n if (responseStatus == null)\r\n return undefined;\r\n const status = responseStatus.ErrorCode ? sanitize(responseStatus) : responseStatus;\r\n return !status.errors || status.errors.length == 0\r\n ? status.message || status.errorCode\r\n : undefined;\r\n}\r\nexports.errorResponseSummary = errorResponseSummary;\r\nfunction errorResponseExcept(fieldNames) {\r\n const responseStatus = this.responseStatus || this.ResponseStatus;\r\n if (responseStatus == null)\r\n return undefined;\r\n const status = responseStatus.ErrorCode ? sanitize(responseStatus) : responseStatus;\r\n const names = toVarNames(fieldNames);\r\n if (names && !(status.errors == null || status.errors.length == 0)) {\r\n const lowerFieldsNames = names.map(x => (x || '').toLowerCase());\r\n for (let field of status.errors) {\r\n if (lowerFieldsNames.indexOf((field.fieldName || '').toLowerCase()) !== -1) {\r\n return undefined;\r\n }\r\n }\r\n for (let field of status.errors) {\r\n if (lowerFieldsNames.indexOf((field.fieldName || '').toLowerCase()) === -1) {\r\n return field.message || field.errorCode;\r\n }\r\n }\r\n }\r\n return status.message || status.errorCode || undefined;\r\n}\r\nexports.errorResponseExcept = errorResponseExcept;\r\nfunction errorResponse(fieldName) {\r\n if (fieldName == null)\r\n return errorResponseSummary.call(this);\r\n const responseStatus = this.responseStatus || this.ResponseStatus;\r\n if (responseStatus == null)\r\n return undefined;\r\n const status = responseStatus.ErrorCode ? sanitize(responseStatus) : responseStatus;\r\n if (status.errors == null || status.errors.length == 0)\r\n return undefined;\r\n const field = status.errors.find(x => (x.fieldName || '').toLowerCase() == fieldName.toLowerCase());\r\n return field\r\n ? field.message || field.errorCode\r\n : undefined;\r\n}\r\nexports.errorResponse = errorResponse;\r\nfunction isDate(d) { return d && Object.prototype.toString.call(d) === \"[object Date]\" && !isNaN(d); }\r\nexports.isDate = isDate;\r\nfunction toDate(s) {\r\n return !s ? null\r\n : isDate(s)\r\n ? s\r\n : s[0] == '/'\r\n ? new Date(parseFloat(/Date\\(([^)]+)\\)/.exec(s)[1]))\r\n : new Date(s);\r\n}\r\nexports.toDate = toDate;\r\nfunction toDateFmt(s) { return dateFmt(toDate(s)); }\r\nexports.toDateFmt = toDateFmt;\r\nfunction padInt(n) { return n < 10 ? '0' + n : n; }\r\nexports.padInt = padInt;\r\nfunction dateFmt(d = new Date()) { return d.getFullYear() + '/' + padInt(d.getMonth() + 1) + '/' + padInt(d.getDate()); }\r\nexports.dateFmt = dateFmt;\r\nfunction dateFmtHM(d = new Date()) { return d.getFullYear() + '/' + padInt(d.getMonth() + 1) + '/' + padInt(d.getDate()) + ' ' + padInt(d.getHours()) + \":\" + padInt(d.getMinutes()); }\r\nexports.dateFmtHM = dateFmtHM;\r\nfunction timeFmt12(d = new Date()) { return padInt((d.getHours() + 24) % 12 || 12) + \":\" + padInt(d.getMinutes()) + \":\" + padInt(d.getSeconds()) + \" \" + (d.getHours() > 12 ? \"PM\" : \"AM\"); }\r\nexports.timeFmt12 = timeFmt12;\r\nfunction toLocalISOString(d = new Date()) {\r\n return `${d.getFullYear()}-${padInt(d.getMonth() + 1)}-${padInt(d.getDate())}T${padInt(d.getHours())}:${padInt(d.getMinutes())}:${padInt(d.getSeconds())}`;\r\n}\r\nexports.toLocalISOString = toLocalISOString;\r\nfunction bsAlert(msg) { return '