> tsKvMap = JsonConverter.convertToTelemetry(new JsonParser().parse(src), ts);
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transaction/TbSynchronizationBeginNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transaction/TbSynchronizationBeginNode.java
index 751b061666..46c010c0d8 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transaction/TbSynchronizationBeginNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transaction/TbSynchronizationBeginNode.java
@@ -48,7 +48,7 @@ public class TbSynchronizationBeginNode implements TbNode {
@Override
public void onMsg(TbContext ctx, TbMsg msg) {
- log.warn("Synchronization Start/End nodes are deprecated since TB 2.5. Use queue with submit strategy SEQUENTIAL_WITHIN_ORIGINATOR instead.");
+ log.warn("Synchronization Start/End nodes are deprecated since TB 2.5. Use queue with submit strategy SEQUENTIAL_BY_ORIGINATOR instead.");
ctx.tellSuccess(msg);
}
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transaction/TbSynchronizationEndNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transaction/TbSynchronizationEndNode.java
index 8b83bff1fa..2304778c26 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transaction/TbSynchronizationEndNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transaction/TbSynchronizationEndNode.java
@@ -49,7 +49,7 @@ public class TbSynchronizationEndNode implements TbNode {
@Override
public void onMsg(TbContext ctx, TbMsg msg) {
- log.warn("Synchronization Start/End nodes are deprecated since TB 2.5. Use queue with submit strategy SEQUENTIAL_WITHIN_ORIGINATOR instead.");
+ log.warn("Synchronization Start/End nodes are deprecated since TB 2.5. Use queue with submit strategy SEQUENTIAL_BY_ORIGINATOR instead.");
ctx.tellSuccess(msg);
}
diff --git a/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js b/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js
index 1d13de3d18..665aec699f 100644
--- a/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js
+++ b/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js
@@ -1,16 +1,16 @@
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/common"),require("@ngx-translate/core"),require("@shared/public-api"),require("@ngrx/store"),require("@angular/forms"),require("@core/public-api"),require("@angular/cdk/keycodes"),require("@home/components/public-api"),require("@angular/cdk/coercion"),require("@angular/material/chips"),require("@angular/material/autocomplete"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("rulenode-core-config",["exports","@angular/core","@angular/common","@ngx-translate/core","@shared/public-api","@ngrx/store","@angular/forms","@core/public-api","@angular/cdk/keycodes","@home/components/public-api","@angular/cdk/coercion","@angular/material/chips","@angular/material/autocomplete","rxjs","rxjs/operators"],t):t((e=e||self)["rulenode-core-config"]={},e.ng.core,e.ng.common,e["ngx-translate"],e.shared,e["ngrx-store"],e.ng.forms,e.core,e.ng.cdk.keycodes,e.publicApi$2,e.ng.cdk.coercion,e.ng.material.chips,e.ng.material.autocomplete,e.rxjs,e.rxjs.operators)}(this,(function(e,t,r,n,a,o,i,l,s,m,u,d,p,c,f){"use strict";
/*! *****************************************************************************
- Copyright (c) Microsoft Corporation. All rights reserved.
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
- this file except in compliance with the License. You may obtain a copy of the
- License at http://www.apache.org/licenses/LICENSE-2.0
+ Copyright (c) Microsoft Corporation.
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
- MERCHANTABLITY OR NON-INFRINGEMENT.
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted.
- See the Apache Version 2.0 License for specific language governing permissions
- and limitations under the License.
- ***************************************************************************** */var g=function(e,t){return(g=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function y(e,t){function r(){this.constructor=e}g(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function b(e,t,r,n){var a,o=arguments.length,i=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,n);else for(var l=e.length-1;l>=0;l--)(a=e[l])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i}function h(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function C(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}var v,F=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.emptyConfigForm},r.prototype.onConfigurationSet=function(e){this.emptyConfigForm=this.fb.group({})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-node-empty-config",template:"
"}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),T=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.attributeScopes=Object.keys(a.AttributeScope),n.telemetryTypeTranslationsMap=a.telemetryTypeTranslations,n}return y(r,e),r.prototype.configForm=function(){return this.attributesConfigForm},r.prototype.onConfigurationSet=function(e){this.attributesConfigForm=this.fb.group({scope:[e?e.scope:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-attributes-config",template:'\n \n attribute.attributes-scope \n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),x=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.timeseriesConfigForm},r.prototype.onConfigurationSet=function(e){this.timeseriesConfigForm=this.fb.group({defaultTTL:[e?e.defaultTTL:null,[i.Validators.required,i.Validators.min(0)]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-timeseries-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),q=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.rpcRequestConfigForm},r.prototype.onConfigurationSet=function(e){this.rpcRequestConfigForm=this.fb.group({timeoutInSeconds:[e?e.timeoutInSeconds:null,[i.Validators.required,i.Validators.min(0)]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-rpc-request-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),S=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.logConfigForm},r.prototype.onConfigurationSet=function(e){this.logConfigForm=this.fb.group({jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.logConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"string",this.translate.instant("tb.rulenode.to-string"),"ToString",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.logConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-action-node-log-config",template:'\n tb.rulenode.to-string \n \n \n \n \n {{ \'tb.rulenode.test-to-string-function\' | translate }}\n \n
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),I=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.assignCustomerConfigForm},r.prototype.onConfigurationSet=function(e){this.assignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[i.Validators.required]],createCustomerIfNotExists:[!!e&&e.createCustomerIfNotExists,[]],customerCacheExpiration:[e?e.customerCacheExpiration:null,[i.Validators.required,i.Validators.min(0)]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-assign-to-customer-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),k=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.clearAlarmConfigForm},r.prototype.onConfigurationSet=function(e){this.clearAlarmConfigForm=this.fb.group({alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[i.Validators.required]],alarmType:[e?e.alarmType:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.clearAlarmConfigForm.get("alarmDetailsBuildJs").value;this.nodeScriptTestService.testNodeScript(t,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.clearAlarmConfigForm.get("alarmDetailsBuildJs").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-action-node-clear-alarm-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),N=function(e){function r(t,r,n,o){var i=e.call(this,t)||this;return i.store=t,i.fb=r,i.nodeScriptTestService=n,i.translate=o,i.alarmSeverities=Object.keys(a.AlarmSeverity),i.alarmSeverityTranslationMap=a.alarmSeverityTranslations,i.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],i}return y(r,e),r.prototype.configForm=function(){return this.createAlarmConfigForm},r.prototype.onConfigurationSet=function(e){this.createAlarmConfigForm=this.fb.group({alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[i.Validators.required]],useMessageAlarmData:[!!e&&e.useMessageAlarmData,[]],alarmType:[e?e.alarmType:null,[]],severity:[e?e.severity:null,[]],propagate:[!!e&&e.propagate,[]],relationTypes:[e?e.relationTypes:null,[]]})},r.prototype.validatorTriggers=function(){return["useMessageAlarmData"]},r.prototype.updateValidators=function(e){this.createAlarmConfigForm.get("useMessageAlarmData").value?(this.createAlarmConfigForm.get("alarmType").setValidators([]),this.createAlarmConfigForm.get("severity").setValidators([])):(this.createAlarmConfigForm.get("alarmType").setValidators([i.Validators.required]),this.createAlarmConfigForm.get("severity").setValidators([i.Validators.required])),this.createAlarmConfigForm.get("alarmType").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("severity").updateValueAndValidity({emitEvent:e})},r.prototype.testScript=function(){var e=this,t=this.createAlarmConfigForm.get("alarmDetailsBuildJs").value;this.nodeScriptTestService.testNodeScript(t,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.createAlarmConfigForm.get("alarmDetailsBuildJs").setValue(t)}))},r.prototype.removeKey=function(e,t){var r=this.createAlarmConfigForm.get(t).value,n=r.indexOf(e);n>=0&&(r.splice(n,1),this.createAlarmConfigForm.get(t).setValue(r,{emitEvent:!0}))},r.prototype.addKey=function(e,t){var r=e.input,n=e.value;if((n||"").trim()){n=n.trim();var a=this.createAlarmConfigForm.get(t).value;a&&-1!==a.indexOf(n)||(a||(a=[]),a.push(n),this.createAlarmConfigForm.get(t).setValue(a,{emitEvent:!0}))}r&&(r.value="")},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-action-node-create-alarm-config",template:'\n tb.rulenode.alarm-details-builder \n \n \n \n \n {{ \'tb.rulenode.test-details-function\' | translate }}\n \n
\n \n {{ \'tb.rulenode.use-message-alarm-data\' | translate }}\n \n \n \n \n {{ \'tb.rulenode.propagate\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),V=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.directionTypes=Object.keys(a.EntitySearchDirection),n.directionTypeTranslations=a.entitySearchDirectionTranslations,n.entityType=a.EntityType,n}return y(r,e),r.prototype.configForm=function(){return this.createRelationConfigForm},r.prototype.onConfigurationSet=function(e){this.createRelationConfigForm=this.fb.group({direction:[e?e.direction:null,[i.Validators.required]],entityType:[e?e.entityType:null,[i.Validators.required]],entityNamePattern:[e?e.entityNamePattern:null,[]],entityTypePattern:[e?e.entityTypePattern:null,[]],relationType:[e?e.relationType:null,[i.Validators.required]],createEntityIfNotExists:[!!e&&e.createEntityIfNotExists,[]],removeCurrentRelations:[!!e&&e.removeCurrentRelations,[]],changeOriginatorToRelatedEntity:[!!e&&e.changeOriginatorToRelatedEntity,[]],entityCacheExpiration:[e?e.entityCacheExpiration:null,[i.Validators.required,i.Validators.min(0)]]})},r.prototype.validatorTriggers=function(){return["entityType"]},r.prototype.updateValidators=function(e){var t=this.createRelationConfigForm.get("entityType").value;t?this.createRelationConfigForm.get("entityNamePattern").setValidators([i.Validators.required]):this.createRelationConfigForm.get("entityNamePattern").setValidators([]),!t||t!==a.EntityType.DEVICE&&t!==a.EntityType.ASSET?this.createRelationConfigForm.get("entityTypePattern").setValidators([]):this.createRelationConfigForm.get("entityTypePattern").setValidators([i.Validators.required]),this.createRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e}),this.createRelationConfigForm.get("entityTypePattern").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-create-relation-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),E=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.msgDelayConfigForm},r.prototype.onConfigurationSet=function(e){this.msgDelayConfigForm=this.fb.group({useMetadataPeriodInSecondsPatterns:[!!e&&e.useMetadataPeriodInSecondsPatterns,[]],periodInSeconds:[e?e.periodInSeconds:null,[]],periodInSecondsPattern:[e?e.periodInSecondsPattern:null,[]],maxPendingMsgs:[e?e.maxPendingMsgs:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(1e5)]]})},r.prototype.validatorTriggers=function(){return["useMetadataPeriodInSecondsPatterns"]},r.prototype.updateValidators=function(e){this.msgDelayConfigForm.get("useMetadataPeriodInSecondsPatterns").value?(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([i.Validators.required]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([])):(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([i.Validators.required,i.Validators.min(0)])),this.msgDelayConfigForm.get("periodInSecondsPattern").updateValueAndValidity({emitEvent:e}),this.msgDelayConfigForm.get("periodInSeconds").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-msg-delay-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),A=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.directionTypes=Object.keys(a.EntitySearchDirection),n.directionTypeTranslations=a.entitySearchDirectionTranslations,n.entityType=a.EntityType,n}return y(r,e),r.prototype.configForm=function(){return this.deleteRelationConfigForm},r.prototype.onConfigurationSet=function(e){this.deleteRelationConfigForm=this.fb.group({deleteForSingleEntity:[!!e&&e.deleteForSingleEntity,[]],direction:[e?e.direction:null,[i.Validators.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationType:[e?e.relationType:null,[i.Validators.required]],entityCacheExpiration:[e?e.entityCacheExpiration:null,[i.Validators.required,i.Validators.min(0)]]})},r.prototype.validatorTriggers=function(){return["deleteForSingleEntity","entityType"]},r.prototype.updateValidators=function(e){var t=this.deleteRelationConfigForm.get("deleteForSingleEntity").value,r=this.deleteRelationConfigForm.get("entityType").value;t?this.deleteRelationConfigForm.get("entityType").setValidators([i.Validators.required]):this.deleteRelationConfigForm.get("entityType").setValidators([]),t&&r?this.deleteRelationConfigForm.get("entityNamePattern").setValidators([i.Validators.required]):this.deleteRelationConfigForm.get("entityNamePattern").setValidators([]),this.deleteRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:!1}),this.deleteRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-delete-relation-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),L=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.generatorConfigForm},r.prototype.onConfigurationSet=function(e){this.generatorConfigForm=this.fb.group({msgCount:[e?e.msgCount:null,[i.Validators.required,i.Validators.min(0)]],periodInSeconds:[e?e.periodInSeconds:null,[i.Validators.required,i.Validators.min(1)]],originator:[e?e.originator:null,[]],jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.prepareInputConfig=function(e){return e&&(e.originatorId&&e.originatorType?e.originator={id:e.originatorId,entityType:e.originatorType}:e.originator=null,delete e.originatorId,delete e.originatorType),e},r.prototype.prepareOutputConfig=function(e){return e.originator?(e.originatorId=e.originator.id,e.originatorType=e.originator.entityType):(e.originatorId=null,e.originatorType=null),delete e.originator,e},r.prototype.testScript=function(){var e=this,t=this.generatorConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"generate",this.translate.instant("tb.rulenode.generator"),"Generate",["prevMsg","prevMetadata","prevMsgType"],this.ruleNodeId).subscribe((function(t){t&&e.generatorConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-action-node-generator-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent);!function(e){e.CUSTOMER="CUSTOMER",e.TENANT="TENANT",e.RELATED="RELATED",e.ALARM_ORIGINATOR="ALARM_ORIGINATOR"}(v||(v={}));var M,P=new Map([[v.CUSTOMER,"tb.rulenode.originator-customer"],[v.TENANT,"tb.rulenode.originator-tenant"],[v.RELATED,"tb.rulenode.originator-related"],[v.ALARM_ORIGINATOR,"tb.rulenode.originator-alarm-originator"]]);!function(e){e.CIRCLE="CIRCLE",e.POLYGON="POLYGON"}(M||(M={}));var R,w=new Map([[M.CIRCLE,"tb.rulenode.perimeter-circle"],[M.POLYGON,"tb.rulenode.perimeter-polygon"]]);!function(e){e.MILLISECONDS="MILLISECONDS",e.SECONDS="SECONDS",e.MINUTES="MINUTES",e.HOURS="HOURS",e.DAYS="DAYS"}(R||(R={}));var O,D=new Map([[R.MILLISECONDS,"tb.rulenode.time-unit-milliseconds"],[R.SECONDS,"tb.rulenode.time-unit-seconds"],[R.MINUTES,"tb.rulenode.time-unit-minutes"],[R.HOURS,"tb.rulenode.time-unit-hours"],[R.DAYS,"tb.rulenode.time-unit-days"]]);!function(e){e.METER="METER",e.KILOMETER="KILOMETER",e.FOOT="FOOT",e.MILE="MILE",e.NAUTICAL_MILE="NAUTICAL_MILE"}(O||(O={}));var K,B=new Map([[O.METER,"tb.rulenode.range-unit-meter"],[O.KILOMETER,"tb.rulenode.range-unit-kilometer"],[O.FOOT,"tb.rulenode.range-unit-foot"],[O.MILE,"tb.rulenode.range-unit-mile"],[O.NAUTICAL_MILE,"tb.rulenode.range-unit-nautical-mile"]]);!function(e){e.TITLE="TITLE",e.COUNTRY="COUNTRY",e.STATE="STATE",e.ZIP="ZIP",e.ADDRESS="ADDRESS",e.ADDRESS2="ADDRESS2",e.PHONE="PHONE",e.EMAIL="EMAIL",e.ADDITIONAL_INFO="ADDITIONAL_INFO"}(K||(K={}));var j,U,G,H=new Map([[K.TITLE,"tb.rulenode.entity-details-title"],[K.COUNTRY,"tb.rulenode.entity-details-country"],[K.STATE,"tb.rulenode.entity-details-state"],[K.ZIP,"tb.rulenode.entity-details-zip"],[K.ADDRESS,"tb.rulenode.entity-details-address"],[K.ADDRESS2,"tb.rulenode.entity-details-address2"],[K.PHONE,"tb.rulenode.entity-details-phone"],[K.EMAIL,"tb.rulenode.entity-details-email"],[K.ADDITIONAL_INFO,"tb.rulenode.entity-details-additional_info"]]);!function(e){e.FIRST="FIRST",e.LAST="LAST",e.ALL="ALL"}(j||(j={})),function(e){e.ASC="ASC",e.DESC="DESC"}(U||(U={})),function(e){e.STANDARD="STANDARD",e.FIFO="FIFO"}(G||(G={}));var Q,z=new Map([[G.STANDARD,"tb.rulenode.sqs-queue-standard"],[G.FIFO,"tb.rulenode.sqs-queue-fifo"]]),$=["anonymous","basic","cert.PEM"],_=new Map([["anonymous","tb.rulenode.credentials-anonymous"],["basic","tb.rulenode.credentials-basic"],["cert.PEM","tb.rulenode.credentials-pem"]]);!function(e){e.GET="GET",e.POST="POST",e.PUT="PUT",e.DELETE="DELETE"}(Q||(Q={}));var W=["US-ASCII","ISO-8859-1","UTF-8","UTF-16BE","UTF-16LE","UTF-16"],J=new Map([["US-ASCII","tb.rulenode.charset-us-ascii"],["ISO-8859-1","tb.rulenode.charset-iso-8859-1"],["UTF-8","tb.rulenode.charset-utf-8"],["UTF-16BE","tb.rulenode.charset-utf-16be"],["UTF-16LE","tb.rulenode.charset-utf-16le"],["UTF-16","tb.rulenode.charset-utf-16"]]),Y=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.perimeterType=M,n.perimeterTypes=Object.keys(M),n.perimeterTypeTranslationMap=w,n.rangeUnits=Object.keys(O),n.rangeUnitTranslationMap=B,n.timeUnits=Object.keys(R),n.timeUnitsTranslationMap=D,n}return y(r,e),r.prototype.configForm=function(){return this.geoActionConfigForm},r.prototype.onConfigurationSet=function(e){this.geoActionConfigForm=this.fb.group({latitudeKeyName:[e?e.latitudeKeyName:null,[i.Validators.required]],longitudeKeyName:[e?e.longitudeKeyName:null,[i.Validators.required]],fetchPerimeterInfoFromMessageMetadata:[!!e&&e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterType:[e?e.perimeterType:null,[]],centerLatitude:[e?e.centerLatitude:null,[]],centerLongitude:[e?e.centerLatitude:null,[]],range:[e?e.range:null,[]],rangeUnit:[e?e.rangeUnit:null,[]],polygonsDefinition:[e?e.polygonsDefinition:null,[]],minInsideDuration:[e?e.minInsideDuration:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(2147483647)]],minInsideDurationTimeUnit:[e?e.minInsideDurationTimeUnit:null,[i.Validators.required]],minOutsideDuration:[e?e.minOutsideDuration:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(2147483647)]],minOutsideDurationTimeUnit:[e?e.minOutsideDurationTimeUnit:null,[i.Validators.required]]})},r.prototype.validatorTriggers=function(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]},r.prototype.updateValidators=function(e){var t=this.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,r=this.geoActionConfigForm.get("perimeterType").value;t?this.geoActionConfigForm.get("perimeterType").setValidators([]):this.geoActionConfigForm.get("perimeterType").setValidators([i.Validators.required]),t||r!==M.CIRCLE?(this.geoActionConfigForm.get("centerLatitude").setValidators([]),this.geoActionConfigForm.get("centerLongitude").setValidators([]),this.geoActionConfigForm.get("range").setValidators([]),this.geoActionConfigForm.get("rangeUnit").setValidators([])):(this.geoActionConfigForm.get("centerLatitude").setValidators([i.Validators.required,i.Validators.min(-90),i.Validators.max(90)]),this.geoActionConfigForm.get("centerLongitude").setValidators([i.Validators.required,i.Validators.min(-180),i.Validators.max(180)]),this.geoActionConfigForm.get("range").setValidators([i.Validators.required,i.Validators.min(0)]),this.geoActionConfigForm.get("rangeUnit").setValidators([i.Validators.required])),t||r!==M.POLYGON?this.geoActionConfigForm.get("polygonsDefinition").setValidators([]):this.geoActionConfigForm.get("polygonsDefinition").setValidators([i.Validators.required]),this.geoActionConfigForm.get("perimeterType").updateValueAndValidity({emitEvent:!1}),this.geoActionConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-gps-geofencing-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Z=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.msgCountConfigForm},r.prototype.onConfigurationSet=function(e){this.msgCountConfigForm=this.fb.group({interval:[e?e.interval:null,[i.Validators.required,i.Validators.min(1)]],telemetryPrefix:[e?e.telemetryPrefix:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-msg-count-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),X=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.rpcReplyConfigForm},r.prototype.onConfigurationSet=function(e){this.rpcReplyConfigForm=this.fb.group({requestIdMetaDataAttribute:[e?e.requestIdMetaDataAttribute:null,[]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-rpc-reply-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ee=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.saveToCustomTableConfigForm},r.prototype.onConfigurationSet=function(e){this.saveToCustomTableConfigForm=this.fb.group({tableName:[e?e.tableName:null,[i.Validators.required]],fieldsMapping:[e?e.fieldsMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-custom-table-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),te=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.translate=r,o.injector=n,o.fb=a,o.propagateChange=null,o.valueChangeSubscription=null,o}var a;return y(r,e),a=r,Object.defineProperty(r.prototype,"required",{get:function(){return this.requiredValue},set:function(e){this.requiredValue=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),r.prototype.ngOnInit=function(){this.ngControl=this.injector.get(i.NgControl),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({}),this.kvListFormGroup.addControl("keyVals",this.fb.array([]))},r.prototype.keyValsFormArray=function(){return this.kvListFormGroup.get("keyVals")},r.prototype.registerOnChange=function(e){this.propagateChange=e},r.prototype.registerOnTouched=function(e){},r.prototype.setDisabledState=function(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})},r.prototype.writeValue=function(e){var t,r,n=this;this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();var a=[];if(e)try{for(var o=C(Object.keys(e)),l=o.next();!l.done;l=o.next()){var s=l.value;Object.prototype.hasOwnProperty.call(e,s)&&a.push(this.fb.group({key:[s,[i.Validators.required]],value:[e[s],[i.Validators.required]]}))}}catch(e){t={error:e}}finally{try{l&&!l.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}this.kvListFormGroup.setControl("keyVals",this.fb.array(a)),this.valueChangeSubscription=this.kvListFormGroup.valueChanges.subscribe((function(){n.updateModel()}))},r.prototype.removeKeyVal=function(e){this.kvListFormGroup.get("keyVals").removeAt(e)},r.prototype.addKeyVal=function(){this.kvListFormGroup.get("keyVals").push(this.fb.group({key:["",[i.Validators.required]],value:["",[i.Validators.required]]}))},r.prototype.validate=function(e){return!this.kvListFormGroup.get("keyVals").value.length&&this.required?{kvMapRequired:!0}:this.kvListFormGroup.valid?null:{kvFieldsRequired:!0}},r.prototype.updateModel=function(){var e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{var t={};e.forEach((function(e){t[e.key]=e.value})),this.propagateChange(t)}},r.ctorParameters=function(){return[{type:o.Store},{type:n.TranslateService},{type:t.Injector},{type:i.FormBuilder}]},b([t.Input(),h("design:type",Boolean)],r.prototype,"disabled",void 0),b([t.Input(),h("design:type",String)],r.prototype,"requiredText",void 0),b([t.Input(),h("design:type",String)],r.prototype,"keyText",void 0),b([t.Input(),h("design:type",String)],r.prototype,"keyRequiredText",void 0),b([t.Input(),h("design:type",String)],r.prototype,"valText",void 0),b([t.Input(),h("design:type",String)],r.prototype,"valRequiredText",void 0),b([t.Input(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],r.prototype,"required",null),r=a=b([t.Component({selector:"tb-kv-map-config",template:'\n \n \n \n \n \n add \n {{ \'action.add\' | translate }}\n \n
\n \n',providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return a})),multi:!0},{provide:i.NG_VALIDATORS,useExisting:t.forwardRef((function(){return a})),multi:!0}],styles:[":host .tb-kv-map-config{margin-bottom:16px}:host .tb-kv-map-config .header{padding-left:5px;padding-right:5px;padding-bottom:5px}:host .tb-kv-map-config .header .cell{padding-left:5px;padding-right:5px;color:rgba(0,0,0,.54);font-size:12px;font-weight:700;white-space:nowrap}:host .tb-kv-map-config .body{padding-left:5px;padding-right:5px;padding-bottom:20px;max-height:300px;overflow:auto}:host .tb-kv-map-config .body .row{padding-top:5px;max-height:40px}:host .tb-kv-map-config .body .cell{padding-left:5px;padding-right:5px}:host ::ng-deep .tb-kv-map-config .body mat-form-field.cell{margin:0;max-height:40px}:host ::ng-deep .tb-kv-map-config .body mat-form-field.cell .mat-form-field-infix{border-top:0}:host ::ng-deep .tb-kv-map-config .body button.mat-button{margin:0}"]}),h("design:paramtypes",[o.Store,n.TranslateService,t.Injector,i.FormBuilder])],r)}(a.PageComponent),re=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.directionTypes=Object.keys(a.EntitySearchDirection),n.directionTypeTranslations=a.entitySearchDirectionTranslations,n.entityType=a.EntityType,n.propagateChange=null,n}var n;return y(r,e),n=r,Object.defineProperty(r.prototype,"required",{get:function(){return this.requiredValue},set:function(e){this.requiredValue=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),r.prototype.ngOnInit=function(){var e=this;this.deviceRelationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[i.Validators.required]],maxLevel:[null,[]],relationType:[null],deviceTypes:[null,[i.Validators.required]]}),this.deviceRelationsQueryFormGroup.valueChanges.subscribe((function(t){e.deviceRelationsQueryFormGroup.valid?e.propagateChange(t):e.propagateChange(null)}))},r.prototype.registerOnChange=function(e){this.propagateChange=e},r.prototype.registerOnTouched=function(e){},r.prototype.setDisabledState=function(e){this.disabled=e,this.disabled?this.deviceRelationsQueryFormGroup.disable({emitEvent:!1}):this.deviceRelationsQueryFormGroup.enable({emitEvent:!1})},r.prototype.writeValue=function(e){this.deviceRelationsQueryFormGroup.reset(e,{emitEvent:!1})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},b([t.Input(),h("design:type",Boolean)],r.prototype,"disabled",void 0),b([t.Input(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],r.prototype,"required",null),r=n=b([t.Component({selector:"tb-device-relations-query-config",template:'\n \n {{ \'alias.last-level-relation\' | translate }}\n \n \n \n relation.direction \n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level \n \n \n
\n relation.relation-type
\n \n \n device.device-types
\n \n \n \n',providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return n})),multi:!0}]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.PageComponent),ne=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.directionTypes=Object.keys(a.EntitySearchDirection),n.directionTypeTranslations=a.entitySearchDirectionTranslations,n.propagateChange=null,n}var n;return y(r,e),n=r,Object.defineProperty(r.prototype,"required",{get:function(){return this.requiredValue},set:function(e){this.requiredValue=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),r.prototype.ngOnInit=function(){var e=this;this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[i.Validators.required]],maxLevel:[null,[]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((function(t){e.relationsQueryFormGroup.valid?e.propagateChange(t):e.propagateChange(null)}))},r.prototype.registerOnChange=function(e){this.propagateChange=e},r.prototype.registerOnTouched=function(e){},r.prototype.setDisabledState=function(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})},r.prototype.writeValue=function(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},b([t.Input(),h("design:type",Boolean)],r.prototype,"disabled",void 0),b([t.Input(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],r.prototype,"required",null),r=n=b([t.Component({selector:"tb-relations-query-config",template:'\n',providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return n})),multi:!0}]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.PageComponent),ae=function(e){function r(t,r,n,o){var i,l,m=e.call(this,t)||this;m.store=t,m.translate=r,m.truncate=n,m.fb=o,m.placeholder="tb.rulenode.message-type",m.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],m.messageTypes=[],m.messageTypesList=[],m.searchText="",m.propagateChange=function(e){},m.messageTypeConfigForm=m.fb.group({messageType:[null]});try{for(var u=C(Object.keys(a.MessageType)),d=u.next();!d.done;d=u.next()){var p=d.value;m.messageTypesList.push({name:a.messageTypeNames.get(a.MessageType[p]),value:p})}}catch(e){i={error:e}}finally{try{d&&!d.done&&(l=u.return)&&l.call(u)}finally{if(i)throw i.error}}return m}var l;return y(r,e),l=r,Object.defineProperty(r.prototype,"required",{get:function(){return this.requiredValue},set:function(e){this.requiredValue=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),r.prototype.registerOnChange=function(e){this.propagateChange=e},r.prototype.registerOnTouched=function(e){},r.prototype.ngOnInit=function(){var e=this;this.filteredMessageTypes=this.messageTypeConfigForm.get("messageType").valueChanges.pipe(f.startWith(""),f.map((function(e){return e||""})),f.mergeMap((function(t){return e.fetchMessageTypes(t)})),f.share())},r.prototype.ngAfterViewInit=function(){},r.prototype.setDisabledState=function(e){this.disabled=e,this.disabled?this.messageTypeConfigForm.disable({emitEvent:!1}):this.messageTypeConfigForm.enable({emitEvent:!1})},r.prototype.writeValue=function(e){var t=this;this.searchText="",this.messageTypes.length=0,e&&e.forEach((function(e){var r=t.messageTypesList.find((function(t){return t.value===e}));r?t.messageTypes.push({name:r.name,value:r.value}):t.messageTypes.push({name:e,value:e})}))},r.prototype.displayMessageTypeFn=function(e){return e?e.name:void 0},r.prototype.textIsNotEmpty=function(e){return!!(e&&null!=e&&e.length>0)},r.prototype.createMessageType=function(e,t){e.preventDefault(),this.transformMessageType(t)},r.prototype.add=function(e){this.transformMessageType(e.value)},r.prototype.fetchMessageTypes=function(e){if(this.searchText=e,this.searchText&&this.searchText.length){var t=this.searchText.toUpperCase();return c.of(this.messageTypesList.filter((function(e){return e.name.toUpperCase().includes(t)})))}return c.of(this.messageTypesList)},r.prototype.transformMessageType=function(e){if((e||"").trim()){var t=null,r=e.trim(),n=this.messageTypesList.find((function(e){return e.name===r}));(t=n?{name:n.name,value:n.value}:{name:r,value:r})&&this.addMessageType(t)}this.clear("")},r.prototype.remove=function(e){var t=this.messageTypes.indexOf(e);t>=0&&(this.messageTypes.splice(t,1),this.updateModel())},r.prototype.selected=function(e){this.addMessageType(e.option.value),this.clear("")},r.prototype.addMessageType=function(e){-1===this.messageTypes.findIndex((function(t){return t.value===e.value}))&&(this.messageTypes.push(e),this.updateModel())},r.prototype.onFocus=function(){this.messageTypeConfigForm.get("messageType").updateValueAndValidity({onlySelf:!0,emitEvent:!0})},r.prototype.clear=function(e){var t=this;void 0===e&&(e=""),this.messageTypeInput.nativeElement.value=e,this.messageTypeConfigForm.get("messageType").patchValue(null,{emitEvent:!0}),setTimeout((function(){t.messageTypeInput.nativeElement.blur(),t.messageTypeInput.nativeElement.focus()}),0)},r.prototype.updateModel=function(){var e=this.messageTypes.map((function(e){return e.value}));this.required?(this.chipList.errorState=!e.length,this.propagateChange(e.length>0?e:null)):(this.chipList.errorState=!1,this.propagateChange(e))},r.ctorParameters=function(){return[{type:o.Store},{type:n.TranslateService},{type:a.TruncatePipe},{type:i.FormBuilder}]},b([t.Input(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],r.prototype,"required",null),b([t.Input(),h("design:type",String)],r.prototype,"label",void 0),b([t.Input(),h("design:type",Object)],r.prototype,"placeholder",void 0),b([t.Input(),h("design:type",Boolean)],r.prototype,"disabled",void 0),b([t.ViewChild("chipList",{static:!1}),h("design:type",d.MatChipList)],r.prototype,"chipList",void 0),b([t.ViewChild("messageTypeAutocomplete",{static:!1}),h("design:type",p.MatAutocomplete)],r.prototype,"matAutocomplete",void 0),b([t.ViewChild("messageTypeInput",{static:!1}),h("design:type",t.ElementRef)],r.prototype,"messageTypeInput",void 0),r=l=b([t.Component({selector:"tb-message-types-config",template:'\n {{ label }} \n \n \n {{messageType.name}}\n close \n \n \n \n \n \n \n \n \n \n
\n tb.rulenode.no-message-types-found \n
\n
\n \n {{ translate.get(\'tb.rulenode.no-message-type-matching\',\n {messageType: truncate.transform(searchText, true, 6, '...')}) | async }}\n \n \n
\n tb.rulenode.create-new-message-type \n \n
\n \n \n \n {{ \'tb.rulenode.message-types-required\' | translate }}\n \n \n',providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return l})),multi:!0}]}),h("design:paramtypes",[o.Store,n.TranslateService,a.TruncatePipe,i.FormBuilder])],r)}(a.PageComponent),oe=function(){function e(){}return e=b([t.NgModule({declarations:[te,re,ne,ae],imports:[r.CommonModule,a.SharedModule,m.HomeComponentsModule],exports:[te,re,ne,ae]})],e)}(),ie=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.unassignCustomerConfigForm},r.prototype.onConfigurationSet=function(e){this.unassignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[i.Validators.required]],customerCacheExpiration:[e?e.customerCacheExpiration:null,[i.Validators.required,i.Validators.min(0)]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-un-assign-to-customer-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),le=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.snsConfigForm},r.prototype.onConfigurationSet=function(e){this.snsConfigForm=this.fb.group({topicArnPattern:[e?e.topicArnPattern:null,[i.Validators.required]],accessKeyId:[e?e.accessKeyId:null,[i.Validators.required]],secretAccessKey:[e?e.secretAccessKey:null,[i.Validators.required]],region:[e?e.region:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-sns-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),se=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.sqsQueueType=G,n.sqsQueueTypes=Object.keys(G),n.sqsQueueTypeTranslationsMap=z,n}return y(r,e),r.prototype.configForm=function(){return this.sqsConfigForm},r.prototype.onConfigurationSet=function(e){this.sqsConfigForm=this.fb.group({queueType:[e?e.queueType:null,[i.Validators.required]],queueUrlPattern:[e?e.queueUrlPattern:null,[i.Validators.required]],delaySeconds:[e?e.delaySeconds:null,[i.Validators.min(0),i.Validators.max(900)]],messageAttributes:[e?e.messageAttributes:null,[]],accessKeyId:[e?e.accessKeyId:null,[i.Validators.required]],secretAccessKey:[e?e.secretAccessKey:null,[i.Validators.required]],region:[e?e.region:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-sqs-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),me=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.pubSubConfigForm},r.prototype.onConfigurationSet=function(e){this.pubSubConfigForm=this.fb.group({projectId:[e?e.projectId:null,[i.Validators.required]],topicName:[e?e.topicName:null,[i.Validators.required]],serviceAccountKey:[e?e.serviceAccountKey:null,[i.Validators.required]],serviceAccountKeyFileName:[e?e.serviceAccountKeyFileName:null,[i.Validators.required]],messageAttributes:[e?e.messageAttributes:null,[]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-pub-sub-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ue=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.ackValues=["all","-1","0","1"],n.ToByteStandartCharsetTypesValues=W,n.ToByteStandartCharsetTypeTranslationMap=J,n}return y(r,e),r.prototype.configForm=function(){return this.kafkaConfigForm},r.prototype.onConfigurationSet=function(e){this.kafkaConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[i.Validators.required]],bootstrapServers:[e?e.bootstrapServers:null,[i.Validators.required]],retries:[e?e.retries:null,[i.Validators.min(0)]],batchSize:[e?e.batchSize:null,[i.Validators.min(0)]],linger:[e?e.linger:null,[i.Validators.min(0)]],bufferMemory:[e?e.bufferMemory:null,[i.Validators.min(0)]],acks:[e?e.acks:null,[i.Validators.required]],keySerializer:[e?e.keySerializer:null,[i.Validators.required]],valueSerializer:[e?e.valueSerializer:null,[i.Validators.required]],otherProperties:[e?e.otherProperties:null,[]],addMetadataKeyValuesAsKafkaHeaders:[!!e&&e.addMetadataKeyValuesAsKafkaHeaders,[]],kafkaHeadersCharset:[e?e.kafkaHeadersCharset:null,[]]})},r.prototype.validatorTriggers=function(){return["addMetadataKeyValuesAsKafkaHeaders"]},r.prototype.updateValidators=function(e){this.kafkaConfigForm.get("addMetadataKeyValuesAsKafkaHeaders").value?this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([i.Validators.required]):this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([]),this.kafkaConfigForm.get("kafkaHeadersCharset").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-kafka-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),de=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.allMqttCredentialsTypes=$,n.mqttCredentialsTypeTranslationsMap=_,n}return y(r,e),r.prototype.configForm=function(){return this.mqttConfigForm},r.prototype.onConfigurationSet=function(e){this.mqttConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[i.Validators.required]],host:[e?e.host:null,[i.Validators.required]],port:[e?e.port:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(200)]],clientId:[e?e.clientId:null,[]],cleanSession:[!!e&&e.cleanSession,[]],ssl:[!!e&&e.ssl,[]],credentials:this.fb.group({type:[e&&e.credentials?e.credentials.type:null,[i.Validators.required]],username:[e&&e.credentials?e.credentials.username:null,[]],password:[e&&e.credentials?e.credentials.password:null,[]],caCert:[e&&e.credentials?e.credentials.caCert:null,[]],caCertFileName:[e&&e.credentials?e.credentials.caCertFileName:null,[]],privateKey:[e&&e.credentials?e.credentials.privateKey:null,[]],privateKeyFileName:[e&&e.credentials?e.credentials.privateKeyFileName:null,[]],cert:[e&&e.credentials?e.credentials.cert:null,[]],certFileName:[e&&e.credentials?e.credentials.certFileName:null,[]]})})},r.prototype.prepareOutputConfig=function(e){var t=e.credentials.type;switch(t){case"anonymous":e.credentials={type:t};break;case"basic":e.credentials={type:t,username:e.credentials.username,password:e.credentials.password};break;case"cert.PEM":delete e.credentials.username}return e},r.prototype.validatorTriggers=function(){return["credentials.type"]},r.prototype.updateValidators=function(e){var t=this.mqttConfigForm.get("credentials"),r=t.get("type").value;switch(e&&t.reset({type:r},{emitEvent:!1}),t.get("username").setValidators([]),t.get("password").setValidators([]),t.get("caCert").setValidators([]),t.get("caCertFileName").setValidators([]),t.get("privateKey").setValidators([]),t.get("privateKeyFileName").setValidators([]),t.get("cert").setValidators([]),t.get("certFileName").setValidators([]),r){case"anonymous":break;case"basic":t.get("username").setValidators([i.Validators.required]),t.get("password").setValidators([i.Validators.required]);break;case"cert.PEM":t.get("caCert").setValidators([i.Validators.required]),t.get("caCertFileName").setValidators([i.Validators.required]),t.get("privateKey").setValidators([i.Validators.required]),t.get("privateKeyFileName").setValidators([i.Validators.required]),t.get("cert").setValidators([i.Validators.required]),t.get("certFileName").setValidators([i.Validators.required])}t.get("username").updateValueAndValidity({emitEvent:e}),t.get("password").updateValueAndValidity({emitEvent:e}),t.get("caCert").updateValueAndValidity({emitEvent:e}),t.get("caCertFileName").updateValueAndValidity({emitEvent:e}),t.get("privateKey").updateValueAndValidity({emitEvent:e}),t.get("privateKeyFileName").updateValueAndValidity({emitEvent:e}),t.get("cert").updateValueAndValidity({emitEvent:e}),t.get("certFileName").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-mqtt-config",template:'\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),pe=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.messageProperties=[null,"BASIC","TEXT_PLAIN","MINIMAL_BASIC","MINIMAL_PERSISTENT_BASIC","PERSISTENT_BASIC","PERSISTENT_TEXT_PLAIN"],n}return y(r,e),r.prototype.configForm=function(){return this.rabbitMqConfigForm},r.prototype.onConfigurationSet=function(e){this.rabbitMqConfigForm=this.fb.group({exchangeNamePattern:[e?e.exchangeNamePattern:null,[]],routingKeyPattern:[e?e.routingKeyPattern:null,[]],messageProperties:[e?e.messageProperties:null,[]],host:[e?e.host:null,[i.Validators.required]],port:[e?e.port:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(65535)]],virtualHost:[e?e.virtualHost:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]],automaticRecoveryEnabled:[!!e&&e.automaticRecoveryEnabled,[]],connectionTimeout:[e?e.connectionTimeout:null,[i.Validators.min(0)]],handshakeTimeout:[e?e.handshakeTimeout:null,[i.Validators.min(0)]],clientProperties:[e?e.clientProperties:null,[]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-rabbit-mq-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ce=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.httpRequestTypes=Object.keys(Q),n}return y(r,e),r.prototype.configForm=function(){return this.restApiCallConfigForm},r.prototype.onConfigurationSet=function(e){this.restApiCallConfigForm=this.fb.group({restEndpointUrlPattern:[e?e.restEndpointUrlPattern:null,[i.Validators.required]],requestMethod:[e?e.requestMethod:null,[i.Validators.required]],useSimpleClientHttpFactory:[!!e&&e.useSimpleClientHttpFactory,[]],readTimeoutMs:[e?e.readTimeoutMs:null,[]],maxParallelRequestsCount:[e?e.maxParallelRequestsCount:null,[i.Validators.min(0)]],headers:[e?e.headers:null,[]],useRedisQueueForMsgPersistence:[!!e&&e.useRedisQueueForMsgPersistence,[]],trimQueue:[!!e&&e.trimQueue,[]],maxQueueSize:[e?e.maxQueueSize:null,[]]})},r.prototype.validatorTriggers=function(){return["useSimpleClientHttpFactory","useRedisQueueForMsgPersistence"]},r.prototype.updateValidators=function(e){var t=this.restApiCallConfigForm.get("useSimpleClientHttpFactory").value,r=this.restApiCallConfigForm.get("useRedisQueueForMsgPersistence").value;t?this.restApiCallConfigForm.get("readTimeoutMs").setValidators([]):this.restApiCallConfigForm.get("readTimeoutMs").setValidators([i.Validators.min(0)]),r?this.restApiCallConfigForm.get("maxQueueSize").setValidators([i.Validators.min(0)]):this.restApiCallConfigForm.get("maxQueueSize").setValidators([]),this.restApiCallConfigForm.get("readTimeoutMs").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("maxQueueSize").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-rest-api-call-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),fe=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.smtpProtocols=["smtp","smtps"],n.tlsVersions=["TLSv1","TLSv1.1","TLSv1.2","TLSv1.3"],n}return y(r,e),r.prototype.configForm=function(){return this.sendEmailConfigForm},r.prototype.onConfigurationSet=function(e){this.sendEmailConfigForm=this.fb.group({useSystemSmtpSettings:[!!e&&e.useSystemSmtpSettings,[]],smtpProtocol:[e?e.smtpProtocol:null,[]],smtpHost:[e?e.smtpHost:null,[]],smtpPort:[e?e.smtpPort:null,[]],timeout:[e?e.timeout:null,[]],enableTls:[!!e&&e.enableTls,[]],tlsVersion:[e?e.tlsVersion:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]]})},r.prototype.validatorTriggers=function(){return["useSystemSmtpSettings"]},r.prototype.updateValidators=function(e){this.sendEmailConfigForm.get("useSystemSmtpSettings").value?(this.sendEmailConfigForm.get("smtpProtocol").setValidators([]),this.sendEmailConfigForm.get("smtpHost").setValidators([]),this.sendEmailConfigForm.get("smtpPort").setValidators([]),this.sendEmailConfigForm.get("timeout").setValidators([])):(this.sendEmailConfigForm.get("smtpProtocol").setValidators([i.Validators.required]),this.sendEmailConfigForm.get("smtpHost").setValidators([i.Validators.required]),this.sendEmailConfigForm.get("smtpPort").setValidators([i.Validators.required,i.Validators.min(1),i.Validators.max(65535)]),this.sendEmailConfigForm.get("timeout").setValidators([i.Validators.required,i.Validators.min(0)])),this.sendEmailConfigForm.get("smtpProtocol").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpPort").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("timeout").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-send-email-config",template:'\n \n {{ \'tb.rulenode.use-system-smtp-settings\' | translate }}\n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ge=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.serviceType=a.ServiceType.TB_RULE_ENGINE,n}return y(r,e),r.prototype.configForm=function(){return this.checkPointConfigForm},r.prototype.onConfigurationSet=function(e){this.checkPointConfigForm=this.fb.group({queueName:[e?e.queueName:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-check-point-config",template:'\n \n \n tb.rulenode.select-queue-hint
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ye=function(){function e(){}return e=b([t.NgModule({declarations:[T,x,q,S,I,k,N,V,E,A,L,Y,Z,X,ee,ie,le,se,me,ue,de,pe,ce,fe,ge],imports:[r.CommonModule,a.SharedModule,oe],exports:[T,x,q,S,I,k,N,V,E,A,L,Y,Z,X,ee,ie,le,se,me,ue,de,pe,ce,fe,ge]})],e)}(),be=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],n}return y(r,e),r.prototype.configForm=function(){return this.checkMessageConfigForm},r.prototype.onConfigurationSet=function(e){this.checkMessageConfigForm=this.fb.group({messageNames:[e?e.messageNames:null,[]],metadataNames:[e?e.metadataNames:null,[]],checkAllKeys:[!!e&&e.checkAllKeys,[]]})},r.prototype.validateConfig=function(){var e=this.checkMessageConfigForm.get("messageNames").value,t=this.checkMessageConfigForm.get("metadataNames").value;return e.length>0||t.length>0},r.prototype.removeMessageName=function(e){var t=this.checkMessageConfigForm.get("messageNames").value,r=t.indexOf(e);r>=0&&(t.splice(r,1),this.checkMessageConfigForm.get("messageNames").setValue(t,{emitEvent:!0}))},r.prototype.removeMetadataName=function(e){var t=this.checkMessageConfigForm.get("metadataNames").value,r=t.indexOf(e);r>=0&&(t.splice(r,1),this.checkMessageConfigForm.get("metadataNames").setValue(t,{emitEvent:!0}))},r.prototype.addMessageName=function(e){var t=e.input,r=e.value;if((r||"").trim()){r=r.trim();var n=this.checkMessageConfigForm.get("messageNames").value;n&&-1!==n.indexOf(r)||(n||(n=[]),n.push(r),this.checkMessageConfigForm.get("messageNames").setValue(n,{emitEvent:!0}))}t&&(t.value="")},r.prototype.addMetadataName=function(e){var t=e.input,r=e.value;if((r||"").trim()){r=r.trim();var n=this.checkMessageConfigForm.get("metadataNames").value;n&&-1!==n.indexOf(r)||(n||(n=[]),n.push(r),this.checkMessageConfigForm.get("metadataNames").setValue(n,{emitEvent:!0}))}t&&(t.value="")},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-check-message-config",template:'\n',styles:[":host label.tb-title{margin-bottom:-10px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),he=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.entitySearchDirection=Object.keys(a.EntitySearchDirection),n.entitySearchDirectionTranslationsMap=a.entitySearchDirectionTranslations,n}return y(r,e),r.prototype.configForm=function(){return this.checkRelationConfigForm},r.prototype.onConfigurationSet=function(e){this.checkRelationConfigForm=this.fb.group({checkForSingleEntity:[!!e&&e.checkForSingleEntity,[]],direction:[e?e.direction:null,[]],entityType:[e?e.entityType:null,e&&e.checkForSingleEntity?[i.Validators.required]:[]],entityId:[e?e.entityId:null,e&&e.checkForSingleEntity?[i.Validators.required]:[]],relationType:[e?e.relationType:null,[i.Validators.required]]})},r.prototype.validatorTriggers=function(){return["checkForSingleEntity"]},r.prototype.updateValidators=function(e){var t=this.checkRelationConfigForm.get("checkForSingleEntity").value;this.checkRelationConfigForm.get("entityType").setValidators(t?[i.Validators.required]:[]),this.checkRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.checkRelationConfigForm.get("entityId").setValidators(t?[i.Validators.required]:[]),this.checkRelationConfigForm.get("entityId").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-check-relation-config",template:'\n \n {{ \'tb.rulenode.check-relation-to-specific-entity\' | translate }}\n \n tb.rulenode.check-relation-hint
\n \n relation.direction \n \n \n {{ entitySearchDirectionTranslationsMap.get(direction) | translate }}\n \n \n \n \n \n \n \n \n
\n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ce=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.perimeterType=M,n.perimeterTypes=Object.keys(M),n.perimeterTypeTranslationMap=w,n.rangeUnits=Object.keys(O),n.rangeUnitTranslationMap=B,n}return y(r,e),r.prototype.configForm=function(){return this.geoFilterConfigForm},r.prototype.onConfigurationSet=function(e){this.geoFilterConfigForm=this.fb.group({latitudeKeyName:[e?e.latitudeKeyName:null,[i.Validators.required]],longitudeKeyName:[e?e.longitudeKeyName:null,[i.Validators.required]],fetchPerimeterInfoFromMessageMetadata:[!!e&&e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterType:[e?e.perimeterType:null,[]],centerLatitude:[e?e.centerLatitude:null,[]],centerLongitude:[e?e.centerLatitude:null,[]],range:[e?e.range:null,[]],rangeUnit:[e?e.rangeUnit:null,[]],polygonsDefinition:[e?e.polygonsDefinition:null,[]]})},r.prototype.validatorTriggers=function(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]},r.prototype.updateValidators=function(e){var t=this.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,r=this.geoFilterConfigForm.get("perimeterType").value;t?this.geoFilterConfigForm.get("perimeterType").setValidators([]):this.geoFilterConfigForm.get("perimeterType").setValidators([i.Validators.required]),t||r!==M.CIRCLE?(this.geoFilterConfigForm.get("centerLatitude").setValidators([]),this.geoFilterConfigForm.get("centerLongitude").setValidators([]),this.geoFilterConfigForm.get("range").setValidators([]),this.geoFilterConfigForm.get("rangeUnit").setValidators([])):(this.geoFilterConfigForm.get("centerLatitude").setValidators([i.Validators.required,i.Validators.min(-90),i.Validators.max(90)]),this.geoFilterConfigForm.get("centerLongitude").setValidators([i.Validators.required,i.Validators.min(-180),i.Validators.max(180)]),this.geoFilterConfigForm.get("range").setValidators([i.Validators.required,i.Validators.min(0)]),this.geoFilterConfigForm.get("rangeUnit").setValidators([i.Validators.required])),t||r!==M.POLYGON?this.geoFilterConfigForm.get("polygonsDefinition").setValidators([]):this.geoFilterConfigForm.get("polygonsDefinition").setValidators([i.Validators.required]),this.geoFilterConfigForm.get("perimeterType").updateValueAndValidity({emitEvent:!1}),this.geoFilterConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-gps-geofencing-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ve=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.messageTypeConfigForm},r.prototype.onConfigurationSet=function(e){this.messageTypeConfigForm=this.fb.group({messageTypes:[e?e.messageTypes:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-message-type-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Fe=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.allowedEntityTypes=[a.EntityType.DEVICE,a.EntityType.ASSET,a.EntityType.ENTITY_VIEW,a.EntityType.TENANT,a.EntityType.CUSTOMER,a.EntityType.USER,a.EntityType.DASHBOARD,a.EntityType.RULE_CHAIN,a.EntityType.RULE_NODE],n}return y(r,e),r.prototype.configForm=function(){return this.originatorTypeConfigForm},r.prototype.onConfigurationSet=function(e){this.originatorTypeConfigForm=this.fb.group({originatorTypes:[e?e.originatorTypes:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-originator-type-config",template:'\n tb.rulenode.originator-types-filter \n \n \n \n',styles:[":host ::ng-deep tb-entity-type-list .mat-form-field-flex{padding-top:0}:host ::ng-deep tb-entity-type-list .mat-form-field-infix{border-top:0}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Te=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.scriptConfigForm},r.prototype.onConfigurationSet=function(e){this.scriptConfigForm=this.fb.group({jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.scriptConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"filter",this.translate.instant("tb.rulenode.filter"),"Filter",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.scriptConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-filter-node-script-config",template:'\n tb.rulenode.filter \n \n \n \n \n {{ \'tb.rulenode.test-filter-function\' | translate }}\n \n
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),xe=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.switchConfigForm},r.prototype.onConfigurationSet=function(e){this.switchConfigForm=this.fb.group({jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.switchConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"switch",this.translate.instant("tb.rulenode.switch"),"Switch",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.switchConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-filter-node-switch-config",template:'\n tb.rulenode.switch \n \n \n \n \n {{ \'tb.rulenode.test-switch-function\' | translate }}\n \n
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),qe=function(e){function r(t,r,n){var o,l,s=e.call(this,t)||this;s.store=t,s.translate=r,s.fb=n,s.alarmStatusTranslationsMap=a.alarmStatusTranslations,s.alarmStatusList=[],s.searchText="",s.displayStatusFn=s.displayStatus.bind(s);try{for(var m=C(Object.keys(a.AlarmStatus)),u=m.next();!u.done;u=m.next()){var d=u.value;s.alarmStatusList.push(a.AlarmStatus[d])}}catch(e){o={error:e}}finally{try{u&&!u.done&&(l=m.return)&&l.call(m)}finally{if(o)throw o.error}}return s.statusFormControl=new i.FormControl(""),s.filteredAlarmStatus=s.statusFormControl.valueChanges.pipe(f.startWith(""),f.map((function(e){return e||""})),f.mergeMap((function(e){return s.fetchAlarmStatus(e)})),f.share()),s}return y(r,e),r.prototype.ngOnInit=function(){e.prototype.ngOnInit.call(this)},r.prototype.configForm=function(){return this.alarmStatusConfigForm},r.prototype.prepareInputConfig=function(e){return this.searchText="",this.statusFormControl.patchValue("",{emitEvent:!0}),e},r.prototype.onConfigurationSet=function(e){this.alarmStatusConfigForm=this.fb.group({alarmStatusList:[e?e.alarmStatusList:null,[i.Validators.required]]})},r.prototype.displayStatus=function(e){return e?this.translate.instant(a.alarmStatusTranslations.get(e)):void 0},r.prototype.fetchAlarmStatus=function(e){var t=this,r=this.getAlarmStatusList();if(this.searchText=e,this.searchText&&this.searchText.length){var n=this.searchText.toUpperCase();return c.of(r.filter((function(e){return t.translate.instant(a.alarmStatusTranslations.get(a.AlarmStatus[e])).toUpperCase().includes(n)})))}return c.of(r)},r.prototype.alarmStatusSelected=function(e){this.addAlarmStatus(e.option.value),this.clear("")},r.prototype.removeAlarmStatus=function(e){var t=this.alarmStatusConfigForm.get("alarmStatusList").value;if(t){var r=t.indexOf(e);r>=0&&(t.splice(r,1),this.alarmStatusConfigForm.get("alarmStatusList").setValue(t))}},r.prototype.addAlarmStatus=function(e){var t=this.alarmStatusConfigForm.get("alarmStatusList").value;t||(t=[]),-1===t.indexOf(e)&&(t.push(e),this.alarmStatusConfigForm.get("alarmStatusList").setValue(t))},r.prototype.getAlarmStatusList=function(){var e=this;return this.alarmStatusList.filter((function(t){return-1===e.alarmStatusConfigForm.get("alarmStatusList").value.indexOf(t)}))},r.prototype.onAlarmStatusInputFocus=function(){this.statusFormControl.updateValueAndValidity({onlySelf:!0,emitEvent:!0})},r.prototype.clear=function(e){var t=this;void 0===e&&(e=""),this.alarmStatusInput.nativeElement.value=e,this.statusFormControl.patchValue(null,{emitEvent:!0}),setTimeout((function(){t.alarmStatusInput.nativeElement.blur(),t.alarmStatusInput.nativeElement.focus()}),0)},r.ctorParameters=function(){return[{type:o.Store},{type:n.TranslateService},{type:i.FormBuilder}]},b([t.ViewChild("alarmStatusInput",{static:!1}),h("design:type",t.ElementRef)],r.prototype,"alarmStatusInput",void 0),r=b([t.Component({selector:"tb-filter-node-check-alarm-status-config",template:'\n \n tb.rulenode.alarm-status-filter \n \n \n \n {{alarmStatusTranslationsMap.get(alarmStatus) | translate}} \n \n close \n \n \n \n \n \n \n \n \n \n
\n tb.rulenode.no-alarm-status-matching \n
\n
\n \n \n \n \n \n\n\n\n'}),h("design:paramtypes",[o.Store,n.TranslateService,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Se=function(){function e(){}return e=b([t.NgModule({declarations:[be,he,Ce,ve,Fe,Te,xe,qe],imports:[r.CommonModule,a.SharedModule,oe],exports:[be,he,Ce,ve,Fe,Te,xe,qe]})],e)}(),Ie=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.customerAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.customerAttributesConfigForm=this.fb.group({telemetry:[!!e&&e.telemetry,[]],attrMapping:[e?e.attrMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-customer-attributes-config",template:'\n tb.rulenode.attr-mapping \n \n {{ \'tb.rulenode.latest-telemetry\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ke=function(e){function r(t,r,n){var a,o,l=e.call(this,t)||this;l.store=t,l.translate=r,l.fb=n,l.entityDetailsTranslationsMap=H,l.entityDetailsList=[],l.searchText="",l.displayDetailsFn=l.displayDetails.bind(l);try{for(var s=C(Object.keys(K)),m=s.next();!m.done;m=s.next()){var u=m.value;l.entityDetailsList.push(K[u])}}catch(e){a={error:e}}finally{try{m&&!m.done&&(o=s.return)&&o.call(s)}finally{if(a)throw a.error}}return l.detailsFormControl=new i.FormControl(""),l.filteredEntityDetails=l.detailsFormControl.valueChanges.pipe(f.startWith(""),f.map((function(e){return e||""})),f.mergeMap((function(e){return l.fetchEntityDetails(e)})),f.share()),l}return y(r,e),r.prototype.ngOnInit=function(){e.prototype.ngOnInit.call(this)},r.prototype.configForm=function(){return this.entityDetailsConfigForm},r.prototype.prepareInputConfig=function(e){return this.searchText="",this.detailsFormControl.patchValue("",{emitEvent:!0}),e},r.prototype.onConfigurationSet=function(e){this.entityDetailsConfigForm=this.fb.group({detailsList:[e?e.detailsList:null,[i.Validators.required]],addToMetadata:[!!e&&e.addToMetadata,[]]})},r.prototype.displayDetails=function(e){return e?this.translate.instant(H.get(e)):void 0},r.prototype.fetchEntityDetails=function(e){var t=this;if(this.searchText=e,this.searchText&&this.searchText.length){var r=this.searchText.toUpperCase();return c.of(this.entityDetailsList.filter((function(e){return t.translate.instant(H.get(K[e])).toUpperCase().includes(r)})))}return c.of(this.entityDetailsList)},r.prototype.detailsFieldSelected=function(e){this.addDetailsField(e.option.value),this.clear("")},r.prototype.removeDetailsField=function(e){var t=this.entityDetailsConfigForm.get("detailsList").value;if(t){var r=t.indexOf(e);r>=0&&(t.splice(r,1),this.entityDetailsConfigForm.get("detailsList").setValue(t))}},r.prototype.addDetailsField=function(e){var t=this.entityDetailsConfigForm.get("detailsList").value;t||(t=[]),-1===t.indexOf(e)&&(t.push(e),this.entityDetailsConfigForm.get("detailsList").setValue(t))},r.prototype.onEntityDetailsInputFocus=function(){this.detailsFormControl.updateValueAndValidity({onlySelf:!0,emitEvent:!0})},r.prototype.clear=function(e){var t=this;void 0===e&&(e=""),this.detailsInput.nativeElement.value=e,this.detailsFormControl.patchValue(null,{emitEvent:!0}),setTimeout((function(){t.detailsInput.nativeElement.blur(),t.detailsInput.nativeElement.focus()}),0)},r.ctorParameters=function(){return[{type:o.Store},{type:n.TranslateService},{type:i.FormBuilder}]},b([t.ViewChild("detailsInput",{static:!1}),h("design:type",t.ElementRef)],r.prototype,"detailsInput",void 0),r=b([t.Component({selector:"tb-enrichment-node-entity-details-config",template:'\n \n tb.rulenode.entity-details \n \n \n \n {{entityDetailsTranslationsMap.get(details) | translate}} \n \n close \n \n \n \n \n \n \n \n \n \n
\n tb.rulenode.no-entity-details-matching \n
\n
\n \n \n \n \n \n {{ \'tb.rulenode.add-to-metadata\' | translate }}\n \n tb.rulenode.add-to-metadata-hint
\n \n',styles:[":host ::ng-deep mat-form-field.entity-fields-list .mat-form-field-wrapper{margin-bottom:-1.25em}"]}),h("design:paramtypes",[o.Store,n.TranslateService,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ne=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],n}return y(r,e),r.prototype.configForm=function(){return this.deviceAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.deviceAttributesConfigForm=this.fb.group({deviceRelationsQuery:[e?e.deviceRelationsQuery:null,[i.Validators.required]],tellFailureIfAbsent:[!!e&&e.tellFailureIfAbsent,[]],clientAttributeNames:[e?e.clientAttributeNames:null,[]],sharedAttributeNames:[e?e.sharedAttributeNames:null,[]],serverAttributeNames:[e?e.serverAttributeNames:null,[]],latestTsKeyNames:[e?e.latestTsKeyNames:null,[]],getLatestValueWithTs:[!!e&&e.getLatestValueWithTs,[]]})},r.prototype.removeKey=function(e,t){var r=this.deviceAttributesConfigForm.get(t).value,n=r.indexOf(e);n>=0&&(r.splice(n,1),this.deviceAttributesConfigForm.get(t).setValue(r,{emitEvent:!0}))},r.prototype.addKey=function(e,t){var r=e.input,n=e.value;if((n||"").trim()){n=n.trim();var a=this.deviceAttributesConfigForm.get(t).value;a&&-1!==a.indexOf(n)||(a||(a=[]),a.push(n),this.deviceAttributesConfigForm.get(t).setValue(a,{emitEvent:!0}))}r&&(r.value="")},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-device-attributes-config",template:'\n',styles:[":host label.tb-title{margin-bottom:-10px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ve=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],n}return y(r,e),r.prototype.configForm=function(){return this.originatorAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.originatorAttributesConfigForm=this.fb.group({tellFailureIfAbsent:[!!e&&e.tellFailureIfAbsent,[]],clientAttributeNames:[e?e.clientAttributeNames:null,[]],sharedAttributeNames:[e?e.sharedAttributeNames:null,[]],serverAttributeNames:[e?e.serverAttributeNames:null,[]],latestTsKeyNames:[e?e.latestTsKeyNames:null,[]],getLatestValueWithTs:[!!e&&e.getLatestValueWithTs,[]]})},r.prototype.removeKey=function(e,t){var r=this.originatorAttributesConfigForm.get(t).value,n=r.indexOf(e);n>=0&&(r.splice(n,1),this.originatorAttributesConfigForm.get(t).setValue(r,{emitEvent:!0}))},r.prototype.addKey=function(e,t){var r=e.input,n=e.value;if((n||"").trim()){n=n.trim();var a=this.originatorAttributesConfigForm.get(t).value;a&&-1!==a.indexOf(n)||(a||(a=[]),a.push(n),this.originatorAttributesConfigForm.get(t).setValue(a,{emitEvent:!0}))}r&&(r.value="")},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-originator-attributes-config",template:'\n',styles:[":host label.tb-title{margin-bottom:-10px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ee=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.originatorFieldsConfigForm},r.prototype.onConfigurationSet=function(e){this.originatorFieldsConfigForm=this.fb.group({fieldsMapping:[e?e.fieldsMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-originator-fields-config",template:'\n tb.rulenode.fields-mapping \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ae=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],n.fetchMode=j,n.fetchModes=Object.keys(j),n.samplingOrders=Object.keys(U),n.timeUnits=Object.keys(R),n.timeUnitsTranslationMap=D,n}return y(r,e),r.prototype.configForm=function(){return this.getTelemetryFromDatabaseConfigForm},r.prototype.onConfigurationSet=function(e){this.getTelemetryFromDatabaseConfigForm=this.fb.group({latestTsKeyNames:[e?e.latestTsKeyNames:null,[]],fetchMode:[e?e.fetchMode:null,[i.Validators.required]],orderBy:[e?e.orderBy:null,[]],limit:[e?e.limit:null,[]],useMetadataIntervalPatterns:[!!e&&e.useMetadataIntervalPatterns,[]],startInterval:[e?e.startInterval:null,[]],startIntervalTimeUnit:[e?e.startIntervalTimeUnit:null,[]],endInterval:[e?e.endInterval:null,[]],endIntervalTimeUnit:[e?e.endIntervalTimeUnit:null,[]],startIntervalPattern:[e?e.startIntervalPattern:null,[]],endIntervalPattern:[e?e.endIntervalPattern:null,[]]})},r.prototype.validatorTriggers=function(){return["fetchMode","useMetadataIntervalPatterns"]},r.prototype.updateValidators=function(e){var t=this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value,r=this.getTelemetryFromDatabaseConfigForm.get("useMetadataIntervalPatterns").value;t&&t===j.ALL?(this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([i.Validators.required]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([i.Validators.required,i.Validators.min(2),i.Validators.max(1e3)])):(this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([])),r?(this.getTelemetryFromDatabaseConfigForm.get("startInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([i.Validators.required]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([i.Validators.required])):(this.getTelemetryFromDatabaseConfigForm.get("startInterval").setValidators([i.Validators.required,i.Validators.min(1),i.Validators.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalTimeUnit").setValidators([i.Validators.required]),this.getTelemetryFromDatabaseConfigForm.get("endInterval").setValidators([i.Validators.required,i.Validators.min(1),i.Validators.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalTimeUnit").setValidators([i.Validators.required]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([])),this.getTelemetryFromDatabaseConfigForm.get("orderBy").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("limit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").updateValueAndValidity({emitEvent:e})},r.prototype.removeKey=function(e,t){var r=this.getTelemetryFromDatabaseConfigForm.get(t).value,n=r.indexOf(e);n>=0&&(r.splice(n,1),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(r,{emitEvent:!0}))},r.prototype.addKey=function(e,t){var r=e.input,n=e.value;if((n||"").trim()){n=n.trim();var a=this.getTelemetryFromDatabaseConfigForm.get(t).value;a&&-1!==a.indexOf(n)||(a||(a=[]),a.push(n),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(a,{emitEvent:!0}))}r&&(r.value="")},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-get-telemetry-from-database",template:'\n',styles:[":host label.tb-title{margin-bottom:-10px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Le=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.relatedAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.relatedAttributesConfigForm=this.fb.group({relationsQuery:[e?e.relationsQuery:null,[i.Validators.required]],telemetry:[!!e&&e.telemetry,[]],attrMapping:[e?e.attrMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-related-attributes-config",template:'\n tb.rulenode.relations-query \n \n \n tb.rulenode.attr-mapping \n \n {{ \'tb.rulenode.latest-telemetry\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Me=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.tenantAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.tenantAttributesConfigForm=this.fb.group({telemetry:[!!e&&e.telemetry,[]],attrMapping:[e?e.attrMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-tenant-attributes-config",template:'\n tb.rulenode.attr-mapping \n \n {{ \'tb.rulenode.latest-telemetry\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Pe=function(){function e(){}return e=b([t.NgModule({declarations:[Ie,ke,Ne,Ve,Ee,Ae,Le,Me],imports:[r.CommonModule,a.SharedModule,oe],exports:[Ie,ke,Ne,Ve,Ee,Ae,Le,Me]})],e)}(),Re=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.originatorSource=v,n.originatorSources=Object.keys(v),n.originatorSourceTranslationMap=P,n}return y(r,e),r.prototype.configForm=function(){return this.changeOriginatorConfigForm},r.prototype.onConfigurationSet=function(e){this.changeOriginatorConfigForm=this.fb.group({originatorSource:[e?e.originatorSource:null,[i.Validators.required]],relationsQuery:[e?e.relationsQuery:null,[]]})},r.prototype.validatorTriggers=function(){return["originatorSource"]},r.prototype.updateValidators=function(e){var t=this.changeOriginatorConfigForm.get("originatorSource").value;t&&t===v.RELATED?this.changeOriginatorConfigForm.get("relationsQuery").setValidators([i.Validators.required]):this.changeOriginatorConfigForm.get("relationsQuery").setValidators([]),this.changeOriginatorConfigForm.get("relationsQuery").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-transformation-node-change-originator-config",template:'\n \n tb.rulenode.originator-source \n \n \n {{ originatorSourceTranslationMap.get(source) | translate }}\n \n \n \n \n tb.rulenode.relations-query \n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),we=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.scriptConfigForm},r.prototype.onConfigurationSet=function(e){this.scriptConfigForm=this.fb.group({jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.scriptConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"update",this.translate.instant("tb.rulenode.transformer"),"Transform",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.scriptConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-transformation-node-script-config",template:'\n tb.rulenode.transform \n \n \n \n \n {{ \'tb.rulenode.test-transformer-function\' | translate }}\n \n
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),Oe=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.toEmailConfigForm},r.prototype.onConfigurationSet=function(e){this.toEmailConfigForm=this.fb.group({fromTemplate:[e?e.fromTemplate:null,[i.Validators.required]],toTemplate:[e?e.toTemplate:null,[i.Validators.required]],ccTemplate:[e?e.ccTemplate:null,[]],bccTemplate:[e?e.bccTemplate:null,[]],subjectTemplate:[e?e.subjectTemplate:null,[i.Validators.required]],bodyTemplate:[e?e.bodyTemplate:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-transformation-node-to-email-config",template:'\n \n tb.rulenode.from-template \n \n \n {{ \'tb.rulenode.from-template-required\' | translate }}\n \n \n \n \n tb.rulenode.to-template \n \n \n {{ \'tb.rulenode.to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.cc-template \n \n \n \n \n tb.rulenode.bcc-template \n \n \n \n \n tb.rulenode.subject-template \n \n \n {{ \'tb.rulenode.subject-template-required\' | translate }}\n \n \n \n \n tb.rulenode.body-template \n \n \n {{ \'tb.rulenode.body-template-required\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),De=function(){function e(){}return e=b([t.NgModule({declarations:[Re,we,Oe],imports:[r.CommonModule,a.SharedModule,oe],exports:[Re,we,Oe]})],e)}(),Ke=function(){function e(e){!function(e){e.setTranslation("en_US",{tb:{rulenode:{"create-entity-if-not-exists":"Create new entity if not exists","create-entity-if-not-exists-hint":"Create a new entity set above if it does not exist.","entity-name-pattern":"Name pattern","entity-name-pattern-required":"Name pattern is required","entity-name-pattern-hint":"Name pattern, use ${metaKeyName} to substitute variables from metadata","entity-type-pattern":"Type pattern","entity-type-pattern-required":"Type pattern is required","entity-type-pattern-hint":"Type pattern, use ${metaKeyName} to substitute variables from metadata","entity-cache-expiration":"Entities cache expiration time (sec)","entity-cache-expiration-hint":"Specifies maximum time interval allowed to store found entity records. 0 value means that records will never expire.","entity-cache-expiration-required":"Entities cache expiration time is required.","entity-cache-expiration-range":"Entities cache expiration time should be greater than or equal to 0.","customer-name-pattern":"Customer name pattern","customer-name-pattern-required":"Customer name pattern is required","create-customer-if-not-exists":"Create new customer if not exists","customer-cache-expiration":"Customers cache expiration time (sec)","customer-name-pattern-hint":"Customer name pattern, use ${metaKeyName} to substitute variables from metadata","customer-cache-expiration-hint":"Specifies maximum time interval allowed to store found customer records. 0 value means that records will never expire.","customer-cache-expiration-required":"Customers cache expiration time is required.","customer-cache-expiration-range":"Customers cache expiration time should be greater than or equal to 0.","start-interval":"Start Interval","end-interval":"End Interval","start-interval-time-unit":"Start Interval Time Unit","end-interval-time-unit":"End Interval Time Unit","fetch-mode":"Fetch mode","fetch-mode-hint":"If selected fetch mode 'ALL' you able to choose telemetry sampling order.","order-by":"Order by","order-by-hint":"Select to choose telemetry sampling order.",limit:"Limit","limit-hint":"Min limit value is 2, max - 1000. In case you want to fetch a single entry, select fetch mode 'FIRST' or 'LAST'.","time-unit-milliseconds":"Milliseconds","time-unit-seconds":"Seconds","time-unit-minutes":"Minutes","time-unit-hours":"Hours","time-unit-days":"Days","time-value-range":"Time value should be in a range from 1 to 2147483647.","start-interval-value-required":"Start interval value is required.","end-interval-value-required":"End interval value is required.",filter:"Filter",switch:"Switch","message-type":"Message type","message-type-required":"Message type is required.","message-types-filter":"Message types filter","no-message-types-found":"No message types found","no-message-type-matching":"'{{messageType}}' not found.","create-new-message-type":"Create a new one!","message-types-required":"Message types are required.","client-attributes":"Client attributes","shared-attributes":"Shared attributes","server-attributes":"Server attributes","latest-timeseries":"Latest timeseries","data-keys":"Message data","metadata-keys":"Message metadata","relations-query":"Relations query","device-relations-query":"Device relations query","max-relation-level":"Max relation level","relation-type-pattern":"Relation type pattern","relation-type-pattern-hint":"Relation type pattern, use ${metaKeyName} to substitute variables from metadata","relation-type-pattern-required":"Relation type pattern is required","relation-types-list":"Relation types to propagate","relation-types-list-hint":"If Propagate relation types are not selected, alarms will be propagated without filtering by relation type.","unlimited-level":"Unlimited level","latest-telemetry":"Latest telemetry","attr-mapping":"Attributes mapping","source-attribute":"Source attribute","source-attribute-required":"Source attribute is required.","source-telemetry":"Source telemetry","source-telemetry-required":"Source telemetry is required.","target-attribute":"Target attribute","target-attribute-required":"Target attribute is required.","attr-mapping-required":"At least one attribute mapping should be specified.","fields-mapping":"Fields mapping","fields-mapping-required":"At least one field mapping should be specified.","source-field":"Source field","source-field-required":"Source field is required.","originator-source":"Originator source","originator-customer":"Customer","originator-tenant":"Tenant","originator-related":"Related","originator-alarm-originator":"Alarm Originator","clone-message":"Clone message",transform:"Transform","default-ttl":"Default TTL in seconds","default-ttl-required":"Default TTL is required.","min-default-ttl-message":"Only 0 minimum TTL is allowed.","message-count":"Message count (0 - unlimited)","message-count-required":"Message count is required.","min-message-count-message":"Only 0 minimum message count is allowed.","period-seconds":"Period in seconds","period-seconds-required":"Period is required.","use-metadata-period-in-seconds-patterns":"Use metadata period in seconds pattern","use-metadata-period-in-seconds-patterns-hint":"If selected, rule node use period in seconds interval pattern from message metadata assuming that intervals are in the seconds.","period-in-seconds-pattern":"Period in seconds metadata pattern","period-in-seconds-pattern-required":"Period in seconds pattern is required","period-in-seconds-pattern-hint":"Period in seconds pattern, use ${metaKeyName} to substitute variables from metadata","min-period-seconds-message":"Only 1 second minimum period is allowed.",originator:"Originator","message-body":"Message body","message-metadata":"Message metadata",generate:"Generate","test-generator-function":"Test generator function",generator:"Generator","test-filter-function":"Test filter function","test-switch-function":"Test switch function","test-transformer-function":"Test transformer function",transformer:"Transformer","alarm-create-condition":"Alarm create condition","test-condition-function":"Test condition function","alarm-clear-condition":"Alarm clear condition","alarm-details-builder":"Alarm details builder","test-details-function":"Test details function","alarm-type":"Alarm type","alarm-type-required":"Alarm type is required.","alarm-severity":"Alarm severity","alarm-severity-required":"Alarm severity is required","alarm-status-filter":"Alarm status filter","alarm-status-list-empty":"Alarm status list is empty","no-alarm-status-matching":"No alarm status matching were found.",propagate:"Propagate",condition:"Condition",details:"Details","to-string":"To string","test-to-string-function":"Test to string function","from-template":"From Template","from-template-required":"From Template is required","from-template-hint":"From address template, use ${metaKeyName} to substitute variables from metadata","to-template":"To Template","to-template-required":"To Template is required","mail-address-list-template-hint":"Comma separated address list, use ${metaKeyName} to substitute variables from metadata","cc-template":"Cc Template","bcc-template":"Bcc Template","subject-template":"Subject Template","subject-template-required":"Subject Template is required","subject-template-hint":"Mail subject template, use ${metaKeyName} to substitute variables from metadata","body-template":"Body Template","body-template-required":"Body Template is required","body-template-hint":"Mail body template, use ${metaKeyName} to substitute variables from metadata","request-id-metadata-attribute":"Request Id Metadata attribute name","timeout-sec":"Timeout in seconds","timeout-required":"Timeout is required","min-timeout-message":"Only 0 minimum timeout value is allowed.","endpoint-url-pattern":"Endpoint URL pattern","endpoint-url-pattern-required":"Endpoint URL pattern is required","endpoint-url-pattern-hint":"HTTP URL address pattern, use ${metaKeyName} to substitute variables from metadata","request-method":"Request method","use-simple-client-http-factory":"Use simple client HTTP factory","read-timeout":"Read timeout in millis","read-timeout-hint":"The value of 0 means an infinite timeout","max-parallel-requests-count":"Max number of parallel requests","max-parallel-requests-count-hint":"The value of 0 specifies no limit in parallel processing",headers:"Headers","headers-hint":"Use ${metaKeyName} in header/value fields to substitute variables from metadata",header:"Header","header-required":"Header is required",value:"Value","value-required":"Value is required","topic-pattern":"Topic pattern","topic-pattern-required":"Topic pattern is required","mqtt-topic-pattern-hint":"MQTT topic pattern, use ${metaKeyName} to substitute variables from metadata","bootstrap-servers":"Bootstrap servers","bootstrap-servers-required":"Bootstrap servers value is required","other-properties":"Other properties",key:"Key","key-required":"Key is required",retries:"Automatically retry times if fails","min-retries-message":"Only 0 minimum retries is allowed.","batch-size-bytes":"Produces batch size in bytes","min-batch-size-bytes-message":"Only 0 minimum batch size is allowed.","linger-ms":"Time to buffer locally (ms)","min-linger-ms-message":"Only 0 ms minimum value is allowed.","buffer-memory-bytes":"Client buffer max size in bytes","min-buffer-memory-message":"Only 0 minimum buffer size is allowed.",acks:"Number of acknowledgments","key-serializer":"Key serializer","key-serializer-required":"Key serializer is required","value-serializer":"Value serializer","value-serializer-required":"Value serializer is required","topic-arn-pattern":"Topic ARN pattern","topic-arn-pattern-required":"Topic ARN pattern is required","topic-arn-pattern-hint":"Topic ARN pattern, use ${metaKeyName} to substitute variables from metadata","aws-access-key-id":"AWS Access Key ID","aws-access-key-id-required":"AWS Access Key ID is required","aws-secret-access-key":"AWS Secret Access Key","aws-secret-access-key-required":"AWS Secret Access Key is required","aws-region":"AWS Region","aws-region-required":"AWS Region is required","exchange-name-pattern":"Exchange name pattern","routing-key-pattern":"Routing key pattern","message-properties":"Message properties",host:"Host","host-required":"Host is required",port:"Port","port-required":"Port is required","port-range":"Port should be in a range from 1 to 65535.","virtual-host":"Virtual host",username:"Username",password:"Password","automatic-recovery":"Automatic recovery","connection-timeout-ms":"Connection timeout (ms)","min-connection-timeout-ms-message":"Only 0 ms minimum value is allowed.","handshake-timeout-ms":"Handshake timeout (ms)","min-handshake-timeout-ms-message":"Only 0 ms minimum value is allowed.","client-properties":"Client properties","queue-url-pattern":"Queue URL pattern","queue-url-pattern-required":"Queue URL pattern is required","queue-url-pattern-hint":"Queue URL pattern, use ${metaKeyName} to substitute variables from metadata","delay-seconds":"Delay (seconds)","min-delay-seconds-message":"Only 0 seconds minimum value is allowed.","max-delay-seconds-message":"Only 900 seconds maximum value is allowed.",name:"Name","name-required":"Name is required","queue-type":"Queue type","sqs-queue-standard":"Standard","sqs-queue-fifo":"FIFO","gcp-project-id":"GCP project ID","gcp-project-id-required":"GCP project ID is required","gcp-service-account-key":"GCP service account key file","gcp-service-account-key-required":"GCP service account key file is required","pubsub-topic-name":"Topic name","pubsub-topic-name-required":"Topic name is required","message-attributes":"Message attributes","message-attributes-hint":"Use ${metaKeyName} in name/value fields to substitute variables from metadata","connect-timeout":"Connection timeout (sec)","connect-timeout-required":"Connection timeout is required.","connect-timeout-range":"Connection timeout should be in a range from 1 to 200.","client-id":"Client ID","clean-session":"Clean session","enable-ssl":"Enable SSL",credentials:"Credentials","credentials-type":"Credentials type","credentials-type-required":"Credentials type is required.","credentials-anonymous":"Anonymous","credentials-basic":"Basic","credentials-pem":"PEM","username-required":"Username is required.","password-required":"Password is required.","ca-cert":"CA certificate file *","private-key":"Private key file *",cert:"Certificate file *","no-file":"No file selected.","drop-file":"Drop a file or click to select a file to upload.","private-key-password":"Private key password","use-system-smtp-settings":"Use system SMTP settings","use-metadata-interval-patterns":"Use metadata interval patterns","use-metadata-interval-patterns-hint":"If selected, rule node use start and end interval patterns from message metadata assuming that intervals are in the milliseconds.","use-message-alarm-data":"Use message alarm data","check-all-keys":"Check that all selected keys are present","check-all-keys-hint":"If selected, checks that all specified keys are present in the message data and metadata.","check-relation-to-specific-entity":"Check relation to specific entity","check-relation-hint":"Checks existence of relation to specific entity or to any entity based on direction and relation type.","delete-relation-to-specific-entity":"Delete relation to specific entity","delete-relation-hint":"Deletes relation from the originator of the incoming message to the specified entity or list of entities based on direction and type.","remove-current-relations":"Remove current relations","remove-current-relations-hint":"Removes current relations from the originator of the incoming message based on direction and type.","change-originator-to-related-entity":"Change originator to related entity","change-originator-to-related-entity-hint":"Used to process submitted message as a message from another entity.","start-interval-pattern":"Start interval pattern","end-interval-pattern":"End interval pattern","start-interval-pattern-required":"Start interval pattern is required","end-interval-pattern-required":"End interval pattern is required","start-interval-pattern-hint":"Start interval pattern, use ${metaKeyName} to substitute variables from metadata","end-interval-pattern-hint":"End interval pattern, use ${metaKeyName} to substitute variables from metadata","smtp-protocol":"Protocol","smtp-host":"SMTP host","smtp-host-required":"SMTP host is required.","smtp-port":"SMTP port","smtp-port-required":"You must supply a smtp port.","smtp-port-range":"SMTP port should be in a range from 1 to 65535.","timeout-msec":"Timeout ms","min-timeout-msec-message":"Only 0 ms minimum value is allowed.","enter-username":"Enter username","enter-password":"Enter password","enable-tls":"Enable TLS","tls-version":"TLS version","min-period-0-seconds-message":"Only 0 second minimum period is allowed.","max-pending-messages":"Maximum pending messages","max-pending-messages-required":"Maximum pending messages is required.","max-pending-messages-range":"Maximum pending messages should be in a range from 1 to 100000.","originator-types-filter":"Originator types filter","interval-seconds":"Interval in seconds","interval-seconds-required":"Interval is required.","min-interval-seconds-message":"Only 1 second minimum interval is allowed.","output-timeseries-key-prefix":"Output timeseries key prefix","output-timeseries-key-prefix-required":"Output timeseries key prefix required.","separator-hint":'You should press "enter" to complete field input.',"entity-details":"Select entity details:","entity-details-title":"Title","entity-details-country":"Country","entity-details-state":"State","entity-details-zip":"Zip","entity-details-address":"Address","entity-details-address2":"Address2","entity-details-additional_info":"Additional Info","entity-details-phone":"Phone","entity-details-email":"Email","add-to-metadata":"Add selected details to message metadata","add-to-metadata-hint":"If selected, adds the selected details keys to the message metadata instead of message data.","entity-details-list-empty":"No entity details selected.","no-entity-details-matching":"No entity details matching were found.","custom-table-name":"Custom table name","custom-table-name-required":"Table Name is required","custom-table-hint":"You should enter the table name without prefix 'cs_tb_'.","message-field":"Message field","message-field-required":"Message field is required.","table-col":"Table column","table-col-required":"Table column is required.","latitude-key-name":"Latitude key name","longitude-key-name":"Longitude key name","latitude-key-name-required":"Latitude key name is required.","longitude-key-name-required":"Longitude key name is required.","fetch-perimeter-info-from-message-metadata":"Fetch perimeter information from message metadata","perimeter-circle":"Circle","perimeter-polygon":"Polygon","perimeter-type":"Perimeter type","circle-center-latitude":"Center latitude","circle-center-latitude-required":"Center latitude is required.","circle-center-longitude":"Center longitude","circle-center-longitude-required":"Center longitude is required.","range-unit-meter":"Meter","range-unit-kilometer":"Kilometer","range-unit-foot":"Foot","range-unit-mile":"Mile","range-unit-nautical-mile":"Nautical mile","range-units":"Range units",range:"Range","range-required":"Range is required.","polygon-definition":"Polygon definition","polygon-definition-required":"Polygon definition is required.","polygon-definition-hint":"Please, use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].","min-inside-duration":"Minimal inside duration","min-inside-duration-value-required":"Minimal inside duration is required","min-inside-duration-time-unit":"Minimal inside duration time unit","min-outside-duration":"Minimal outside duration","min-outside-duration-value-required":"Minimal outside duration is required","min-outside-duration-time-unit":"Minimal outside duration time unit","tell-failure-if-absent":"Tell Failure","tell-failure-if-absent-hint":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"get-latest-value-with-ts":"Fetch Latest telemetry with Timestamp","get-latest-value-with-ts-hint":'If selected, latest telemetry values will be added to the outbound message metadata with timestamp, e.g: "temp": "{\\"ts\\":1574329385897,\\"value\\":42}"',"use-redis-queue":"Use redis queue for message persistence","trim-redis-queue":"Trim redis queue","redis-queue-max-size":"Redis queue max size","add-metadata-key-values-as-kafka-headers":"Add Message metadata key-value pairs to Kafka record headers","add-metadata-key-values-as-kafka-headers-hint":"If selected, key-value pairs from message metadata will be added to the outgoing records headers as byte arrays with predefined charset encoding.","charset-encoding":"Charset encoding","charset-encoding-required":"Charset encoding is required.","charset-us-ascii":"US-ASCII","charset-iso-8859-1":"ISO-8859-1","charset-utf-8":"UTF-8","charset-utf-16be":"UTF-16BE","charset-utf-16le":"UTF-16LE","charset-utf-16":"UTF-16","select-queue-hint":"The queue name can be selected from a drop-down list or add a custom name."},"key-val":{key:"Key",value:"Value","remove-entry":"Remove entry","add-entry":"Add entry"}}},!0)}(e)}return e.ctorParameters=function(){return[{type:n.TranslateService}]},e=b([t.NgModule({declarations:[F],imports:[r.CommonModule,a.SharedModule],exports:[ye,Se,Pe,De,F]}),h("design:paramtypes",[n.TranslateService])],e)}();e.RuleNodeCoreConfigModule=Ke,e.ɵa=F,e.ɵb=ye,e.ɵba=ge,e.ɵbb=oe,e.ɵbc=te,e.ɵbd=re,e.ɵbe=ne,e.ɵbf=ae,e.ɵbg=Se,e.ɵbh=be,e.ɵbi=he,e.ɵbj=Ce,e.ɵbk=ve,e.ɵbl=Fe,e.ɵbm=Te,e.ɵbn=xe,e.ɵbo=qe,e.ɵbp=Pe,e.ɵbq=Ie,e.ɵbr=ke,e.ɵbs=Ne,e.ɵbt=Ve,e.ɵbu=Ee,e.ɵbv=Ae,e.ɵbw=Le,e.ɵbx=Me,e.ɵby=De,e.ɵbz=Re,e.ɵc=T,e.ɵca=we,e.ɵcb=Oe,e.ɵd=x,e.ɵe=q,e.ɵf=S,e.ɵg=I,e.ɵh=k,e.ɵi=N,e.ɵj=V,e.ɵk=E,e.ɵl=A,e.ɵm=L,e.ɵn=Y,e.ɵo=Z,e.ɵp=X,e.ɵq=ee,e.ɵr=ie,e.ɵs=le,e.ɵt=se,e.ɵu=me,e.ɵv=ue,e.ɵw=de,e.ɵx=pe,e.ɵy=ce,e.ɵz=fe,Object.defineProperty(e,"__esModule",{value:!0})}));
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+ ***************************************************************************** */var g=function(e,t){return(g=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function y(e,t){function r(){this.constructor=e}g(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function b(e,t,r,n){var a,o=arguments.length,i=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,n);else for(var l=e.length-1;l>=0;l--)(a=e[l])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i}function h(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function C(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}var v,F=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.emptyConfigForm},r.prototype.onConfigurationSet=function(e){this.emptyConfigForm=this.fb.group({})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-node-empty-config",template:"
"}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),T=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.attributeScopes=Object.keys(a.AttributeScope),n.telemetryTypeTranslationsMap=a.telemetryTypeTranslations,n}return y(r,e),r.prototype.configForm=function(){return this.attributesConfigForm},r.prototype.onConfigurationSet=function(e){this.attributesConfigForm=this.fb.group({scope:[e?e.scope:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-attributes-config",template:'\n \n attribute.attributes-scope \n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),x=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.timeseriesConfigForm},r.prototype.onConfigurationSet=function(e){this.timeseriesConfigForm=this.fb.group({defaultTTL:[e?e.defaultTTL:null,[i.Validators.required,i.Validators.min(0)]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-timeseries-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),q=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.rpcRequestConfigForm},r.prototype.onConfigurationSet=function(e){this.rpcRequestConfigForm=this.fb.group({timeoutInSeconds:[e?e.timeoutInSeconds:null,[i.Validators.required,i.Validators.min(0)]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-rpc-request-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),S=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.logConfigForm},r.prototype.onConfigurationSet=function(e){this.logConfigForm=this.fb.group({jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.logConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"string",this.translate.instant("tb.rulenode.to-string"),"ToString",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.logConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-action-node-log-config",template:'\n tb.rulenode.to-string \n \n \n \n \n {{ \'tb.rulenode.test-to-string-function\' | translate }}\n \n
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),I=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.assignCustomerConfigForm},r.prototype.onConfigurationSet=function(e){this.assignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[i.Validators.required]],createCustomerIfNotExists:[!!e&&e.createCustomerIfNotExists,[]],customerCacheExpiration:[e?e.customerCacheExpiration:null,[i.Validators.required,i.Validators.min(0)]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-assign-to-customer-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),k=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.clearAlarmConfigForm},r.prototype.onConfigurationSet=function(e){this.clearAlarmConfigForm=this.fb.group({alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[i.Validators.required]],alarmType:[e?e.alarmType:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.clearAlarmConfigForm.get("alarmDetailsBuildJs").value;this.nodeScriptTestService.testNodeScript(t,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.clearAlarmConfigForm.get("alarmDetailsBuildJs").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-action-node-clear-alarm-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),N=function(e){function r(t,r,n,o){var i=e.call(this,t)||this;return i.store=t,i.fb=r,i.nodeScriptTestService=n,i.translate=o,i.alarmSeverities=Object.keys(a.AlarmSeverity),i.alarmSeverityTranslationMap=a.alarmSeverityTranslations,i.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],i}return y(r,e),r.prototype.configForm=function(){return this.createAlarmConfigForm},r.prototype.onConfigurationSet=function(e){this.createAlarmConfigForm=this.fb.group({alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[i.Validators.required]],useMessageAlarmData:[!!e&&e.useMessageAlarmData,[]],alarmType:[e?e.alarmType:null,[]],severity:[e?e.severity:null,[]],propagate:[!!e&&e.propagate,[]],relationTypes:[e?e.relationTypes:null,[]]})},r.prototype.validatorTriggers=function(){return["useMessageAlarmData"]},r.prototype.updateValidators=function(e){this.createAlarmConfigForm.get("useMessageAlarmData").value?(this.createAlarmConfigForm.get("alarmType").setValidators([]),this.createAlarmConfigForm.get("severity").setValidators([])):(this.createAlarmConfigForm.get("alarmType").setValidators([i.Validators.required]),this.createAlarmConfigForm.get("severity").setValidators([i.Validators.required])),this.createAlarmConfigForm.get("alarmType").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("severity").updateValueAndValidity({emitEvent:e})},r.prototype.testScript=function(){var e=this,t=this.createAlarmConfigForm.get("alarmDetailsBuildJs").value;this.nodeScriptTestService.testNodeScript(t,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.createAlarmConfigForm.get("alarmDetailsBuildJs").setValue(t)}))},r.prototype.removeKey=function(e,t){var r=this.createAlarmConfigForm.get(t).value,n=r.indexOf(e);n>=0&&(r.splice(n,1),this.createAlarmConfigForm.get(t).setValue(r,{emitEvent:!0}))},r.prototype.addKey=function(e,t){var r=e.input,n=e.value;if((n||"").trim()){n=n.trim();var a=this.createAlarmConfigForm.get(t).value;a&&-1!==a.indexOf(n)||(a||(a=[]),a.push(n),this.createAlarmConfigForm.get(t).setValue(a,{emitEvent:!0}))}r&&(r.value="")},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-action-node-create-alarm-config",template:'\n tb.rulenode.alarm-details-builder \n \n \n \n \n {{ \'tb.rulenode.test-details-function\' | translate }}\n \n
\n \n {{ \'tb.rulenode.use-message-alarm-data\' | translate }}\n \n \n \n \n {{ \'tb.rulenode.propagate\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),V=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.directionTypes=Object.keys(a.EntitySearchDirection),n.directionTypeTranslations=a.entitySearchDirectionTranslations,n.entityType=a.EntityType,n}return y(r,e),r.prototype.configForm=function(){return this.createRelationConfigForm},r.prototype.onConfigurationSet=function(e){this.createRelationConfigForm=this.fb.group({direction:[e?e.direction:null,[i.Validators.required]],entityType:[e?e.entityType:null,[i.Validators.required]],entityNamePattern:[e?e.entityNamePattern:null,[]],entityTypePattern:[e?e.entityTypePattern:null,[]],relationType:[e?e.relationType:null,[i.Validators.required]],createEntityIfNotExists:[!!e&&e.createEntityIfNotExists,[]],removeCurrentRelations:[!!e&&e.removeCurrentRelations,[]],changeOriginatorToRelatedEntity:[!!e&&e.changeOriginatorToRelatedEntity,[]],entityCacheExpiration:[e?e.entityCacheExpiration:null,[i.Validators.required,i.Validators.min(0)]]})},r.prototype.validatorTriggers=function(){return["entityType"]},r.prototype.updateValidators=function(e){var t=this.createRelationConfigForm.get("entityType").value;t?this.createRelationConfigForm.get("entityNamePattern").setValidators([i.Validators.required]):this.createRelationConfigForm.get("entityNamePattern").setValidators([]),!t||t!==a.EntityType.DEVICE&&t!==a.EntityType.ASSET?this.createRelationConfigForm.get("entityTypePattern").setValidators([]):this.createRelationConfigForm.get("entityTypePattern").setValidators([i.Validators.required]),this.createRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e}),this.createRelationConfigForm.get("entityTypePattern").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-create-relation-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),E=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.msgDelayConfigForm},r.prototype.onConfigurationSet=function(e){this.msgDelayConfigForm=this.fb.group({useMetadataPeriodInSecondsPatterns:[!!e&&e.useMetadataPeriodInSecondsPatterns,[]],periodInSeconds:[e?e.periodInSeconds:null,[]],periodInSecondsPattern:[e?e.periodInSecondsPattern:null,[]],maxPendingMsgs:[e?e.maxPendingMsgs:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(1e5)]]})},r.prototype.validatorTriggers=function(){return["useMetadataPeriodInSecondsPatterns"]},r.prototype.updateValidators=function(e){this.msgDelayConfigForm.get("useMetadataPeriodInSecondsPatterns").value?(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([i.Validators.required]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([])):(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([i.Validators.required,i.Validators.min(0)])),this.msgDelayConfigForm.get("periodInSecondsPattern").updateValueAndValidity({emitEvent:e}),this.msgDelayConfigForm.get("periodInSeconds").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-msg-delay-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),A=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.directionTypes=Object.keys(a.EntitySearchDirection),n.directionTypeTranslations=a.entitySearchDirectionTranslations,n.entityType=a.EntityType,n}return y(r,e),r.prototype.configForm=function(){return this.deleteRelationConfigForm},r.prototype.onConfigurationSet=function(e){this.deleteRelationConfigForm=this.fb.group({deleteForSingleEntity:[!!e&&e.deleteForSingleEntity,[]],direction:[e?e.direction:null,[i.Validators.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationType:[e?e.relationType:null,[i.Validators.required]],entityCacheExpiration:[e?e.entityCacheExpiration:null,[i.Validators.required,i.Validators.min(0)]]})},r.prototype.validatorTriggers=function(){return["deleteForSingleEntity","entityType"]},r.prototype.updateValidators=function(e){var t=this.deleteRelationConfigForm.get("deleteForSingleEntity").value,r=this.deleteRelationConfigForm.get("entityType").value;t?this.deleteRelationConfigForm.get("entityType").setValidators([i.Validators.required]):this.deleteRelationConfigForm.get("entityType").setValidators([]),t&&r?this.deleteRelationConfigForm.get("entityNamePattern").setValidators([i.Validators.required]):this.deleteRelationConfigForm.get("entityNamePattern").setValidators([]),this.deleteRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:!1}),this.deleteRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-delete-relation-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),L=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.generatorConfigForm},r.prototype.onConfigurationSet=function(e){this.generatorConfigForm=this.fb.group({msgCount:[e?e.msgCount:null,[i.Validators.required,i.Validators.min(0)]],periodInSeconds:[e?e.periodInSeconds:null,[i.Validators.required,i.Validators.min(1)]],originator:[e?e.originator:null,[]],jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.prepareInputConfig=function(e){return e&&(e.originatorId&&e.originatorType?e.originator={id:e.originatorId,entityType:e.originatorType}:e.originator=null,delete e.originatorId,delete e.originatorType),e},r.prototype.prepareOutputConfig=function(e){return e.originator?(e.originatorId=e.originator.id,e.originatorType=e.originator.entityType):(e.originatorId=null,e.originatorType=null),delete e.originator,e},r.prototype.testScript=function(){var e=this,t=this.generatorConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"generate",this.translate.instant("tb.rulenode.generator"),"Generate",["prevMsg","prevMetadata","prevMsgType"],this.ruleNodeId).subscribe((function(t){t&&e.generatorConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-action-node-generator-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent);!function(e){e.CUSTOMER="CUSTOMER",e.TENANT="TENANT",e.RELATED="RELATED",e.ALARM_ORIGINATOR="ALARM_ORIGINATOR"}(v||(v={}));var M,P=new Map([[v.CUSTOMER,"tb.rulenode.originator-customer"],[v.TENANT,"tb.rulenode.originator-tenant"],[v.RELATED,"tb.rulenode.originator-related"],[v.ALARM_ORIGINATOR,"tb.rulenode.originator-alarm-originator"]]);!function(e){e.CIRCLE="CIRCLE",e.POLYGON="POLYGON"}(M||(M={}));var R,w=new Map([[M.CIRCLE,"tb.rulenode.perimeter-circle"],[M.POLYGON,"tb.rulenode.perimeter-polygon"]]);!function(e){e.MILLISECONDS="MILLISECONDS",e.SECONDS="SECONDS",e.MINUTES="MINUTES",e.HOURS="HOURS",e.DAYS="DAYS"}(R||(R={}));var O,D=new Map([[R.MILLISECONDS,"tb.rulenode.time-unit-milliseconds"],[R.SECONDS,"tb.rulenode.time-unit-seconds"],[R.MINUTES,"tb.rulenode.time-unit-minutes"],[R.HOURS,"tb.rulenode.time-unit-hours"],[R.DAYS,"tb.rulenode.time-unit-days"]]);!function(e){e.METER="METER",e.KILOMETER="KILOMETER",e.FOOT="FOOT",e.MILE="MILE",e.NAUTICAL_MILE="NAUTICAL_MILE"}(O||(O={}));var K,B=new Map([[O.METER,"tb.rulenode.range-unit-meter"],[O.KILOMETER,"tb.rulenode.range-unit-kilometer"],[O.FOOT,"tb.rulenode.range-unit-foot"],[O.MILE,"tb.rulenode.range-unit-mile"],[O.NAUTICAL_MILE,"tb.rulenode.range-unit-nautical-mile"]]);!function(e){e.TITLE="TITLE",e.COUNTRY="COUNTRY",e.STATE="STATE",e.ZIP="ZIP",e.ADDRESS="ADDRESS",e.ADDRESS2="ADDRESS2",e.PHONE="PHONE",e.EMAIL="EMAIL",e.ADDITIONAL_INFO="ADDITIONAL_INFO"}(K||(K={}));var U,j,G,H=new Map([[K.TITLE,"tb.rulenode.entity-details-title"],[K.COUNTRY,"tb.rulenode.entity-details-country"],[K.STATE,"tb.rulenode.entity-details-state"],[K.ZIP,"tb.rulenode.entity-details-zip"],[K.ADDRESS,"tb.rulenode.entity-details-address"],[K.ADDRESS2,"tb.rulenode.entity-details-address2"],[K.PHONE,"tb.rulenode.entity-details-phone"],[K.EMAIL,"tb.rulenode.entity-details-email"],[K.ADDITIONAL_INFO,"tb.rulenode.entity-details-additional_info"]]);!function(e){e.FIRST="FIRST",e.LAST="LAST",e.ALL="ALL"}(U||(U={})),function(e){e.ASC="ASC",e.DESC="DESC"}(j||(j={})),function(e){e.STANDARD="STANDARD",e.FIFO="FIFO"}(G||(G={}));var Q,z=new Map([[G.STANDARD,"tb.rulenode.sqs-queue-standard"],[G.FIFO,"tb.rulenode.sqs-queue-fifo"]]),$=["anonymous","basic","cert.PEM"],_=new Map([["anonymous","tb.rulenode.credentials-anonymous"],["basic","tb.rulenode.credentials-basic"],["cert.PEM","tb.rulenode.credentials-pem"]]);!function(e){e.GET="GET",e.POST="POST",e.PUT="PUT",e.DELETE="DELETE"}(Q||(Q={}));var W=["US-ASCII","ISO-8859-1","UTF-8","UTF-16BE","UTF-16LE","UTF-16"],J=new Map([["US-ASCII","tb.rulenode.charset-us-ascii"],["ISO-8859-1","tb.rulenode.charset-iso-8859-1"],["UTF-8","tb.rulenode.charset-utf-8"],["UTF-16BE","tb.rulenode.charset-utf-16be"],["UTF-16LE","tb.rulenode.charset-utf-16le"],["UTF-16","tb.rulenode.charset-utf-16"]]),Y=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.perimeterType=M,n.perimeterTypes=Object.keys(M),n.perimeterTypeTranslationMap=w,n.rangeUnits=Object.keys(O),n.rangeUnitTranslationMap=B,n.timeUnits=Object.keys(R),n.timeUnitsTranslationMap=D,n}return y(r,e),r.prototype.configForm=function(){return this.geoActionConfigForm},r.prototype.onConfigurationSet=function(e){this.geoActionConfigForm=this.fb.group({latitudeKeyName:[e?e.latitudeKeyName:null,[i.Validators.required]],longitudeKeyName:[e?e.longitudeKeyName:null,[i.Validators.required]],fetchPerimeterInfoFromMessageMetadata:[!!e&&e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterType:[e?e.perimeterType:null,[]],centerLatitude:[e?e.centerLatitude:null,[]],centerLongitude:[e?e.centerLatitude:null,[]],range:[e?e.range:null,[]],rangeUnit:[e?e.rangeUnit:null,[]],polygonsDefinition:[e?e.polygonsDefinition:null,[]],minInsideDuration:[e?e.minInsideDuration:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(2147483647)]],minInsideDurationTimeUnit:[e?e.minInsideDurationTimeUnit:null,[i.Validators.required]],minOutsideDuration:[e?e.minOutsideDuration:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(2147483647)]],minOutsideDurationTimeUnit:[e?e.minOutsideDurationTimeUnit:null,[i.Validators.required]]})},r.prototype.validatorTriggers=function(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]},r.prototype.updateValidators=function(e){var t=this.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,r=this.geoActionConfigForm.get("perimeterType").value;t?this.geoActionConfigForm.get("perimeterType").setValidators([]):this.geoActionConfigForm.get("perimeterType").setValidators([i.Validators.required]),t||r!==M.CIRCLE?(this.geoActionConfigForm.get("centerLatitude").setValidators([]),this.geoActionConfigForm.get("centerLongitude").setValidators([]),this.geoActionConfigForm.get("range").setValidators([]),this.geoActionConfigForm.get("rangeUnit").setValidators([])):(this.geoActionConfigForm.get("centerLatitude").setValidators([i.Validators.required,i.Validators.min(-90),i.Validators.max(90)]),this.geoActionConfigForm.get("centerLongitude").setValidators([i.Validators.required,i.Validators.min(-180),i.Validators.max(180)]),this.geoActionConfigForm.get("range").setValidators([i.Validators.required,i.Validators.min(0)]),this.geoActionConfigForm.get("rangeUnit").setValidators([i.Validators.required])),t||r!==M.POLYGON?this.geoActionConfigForm.get("polygonsDefinition").setValidators([]):this.geoActionConfigForm.get("polygonsDefinition").setValidators([i.Validators.required]),this.geoActionConfigForm.get("perimeterType").updateValueAndValidity({emitEvent:!1}),this.geoActionConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-gps-geofencing-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Z=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.msgCountConfigForm},r.prototype.onConfigurationSet=function(e){this.msgCountConfigForm=this.fb.group({interval:[e?e.interval:null,[i.Validators.required,i.Validators.min(1)]],telemetryPrefix:[e?e.telemetryPrefix:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-msg-count-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),X=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.rpcReplyConfigForm},r.prototype.onConfigurationSet=function(e){this.rpcReplyConfigForm=this.fb.group({requestIdMetaDataAttribute:[e?e.requestIdMetaDataAttribute:null,[]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-rpc-reply-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ee=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.saveToCustomTableConfigForm},r.prototype.onConfigurationSet=function(e){this.saveToCustomTableConfigForm=this.fb.group({tableName:[e?e.tableName:null,[i.Validators.required]],fieldsMapping:[e?e.fieldsMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-custom-table-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),te=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.translate=r,o.injector=n,o.fb=a,o.propagateChange=null,o.valueChangeSubscription=null,o}var a;return y(r,e),a=r,Object.defineProperty(r.prototype,"required",{get:function(){return this.requiredValue},set:function(e){this.requiredValue=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),r.prototype.ngOnInit=function(){this.ngControl=this.injector.get(i.NgControl),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({}),this.kvListFormGroup.addControl("keyVals",this.fb.array([]))},r.prototype.keyValsFormArray=function(){return this.kvListFormGroup.get("keyVals")},r.prototype.registerOnChange=function(e){this.propagateChange=e},r.prototype.registerOnTouched=function(e){},r.prototype.setDisabledState=function(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})},r.prototype.writeValue=function(e){var t,r,n=this;this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();var a=[];if(e)try{for(var o=C(Object.keys(e)),l=o.next();!l.done;l=o.next()){var s=l.value;Object.prototype.hasOwnProperty.call(e,s)&&a.push(this.fb.group({key:[s,[i.Validators.required]],value:[e[s],[i.Validators.required]]}))}}catch(e){t={error:e}}finally{try{l&&!l.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}this.kvListFormGroup.setControl("keyVals",this.fb.array(a)),this.valueChangeSubscription=this.kvListFormGroup.valueChanges.subscribe((function(){n.updateModel()}))},r.prototype.removeKeyVal=function(e){this.kvListFormGroup.get("keyVals").removeAt(e)},r.prototype.addKeyVal=function(){this.kvListFormGroup.get("keyVals").push(this.fb.group({key:["",[i.Validators.required]],value:["",[i.Validators.required]]}))},r.prototype.validate=function(e){return!this.kvListFormGroup.get("keyVals").value.length&&this.required?{kvMapRequired:!0}:this.kvListFormGroup.valid?null:{kvFieldsRequired:!0}},r.prototype.updateModel=function(){var e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{var t={};e.forEach((function(e){t[e.key]=e.value})),this.propagateChange(t)}},r.ctorParameters=function(){return[{type:o.Store},{type:n.TranslateService},{type:t.Injector},{type:i.FormBuilder}]},b([t.Input(),h("design:type",Boolean)],r.prototype,"disabled",void 0),b([t.Input(),h("design:type",String)],r.prototype,"requiredText",void 0),b([t.Input(),h("design:type",String)],r.prototype,"keyText",void 0),b([t.Input(),h("design:type",String)],r.prototype,"keyRequiredText",void 0),b([t.Input(),h("design:type",String)],r.prototype,"valText",void 0),b([t.Input(),h("design:type",String)],r.prototype,"valRequiredText",void 0),b([t.Input(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],r.prototype,"required",null),r=a=b([t.Component({selector:"tb-kv-map-config",template:'\n \n \n \n \n \n add \n {{ \'action.add\' | translate }}\n \n
\n \n',providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return a})),multi:!0},{provide:i.NG_VALIDATORS,useExisting:t.forwardRef((function(){return a})),multi:!0}],styles:[":host .tb-kv-map-config{margin-bottom:16px}:host .tb-kv-map-config .header{padding-left:5px;padding-right:5px;padding-bottom:5px}:host .tb-kv-map-config .header .cell{padding-left:5px;padding-right:5px;color:rgba(0,0,0,.54);font-size:12px;font-weight:700;white-space:nowrap}:host .tb-kv-map-config .body{padding-left:5px;padding-right:5px;padding-bottom:20px;max-height:300px;overflow:auto}:host .tb-kv-map-config .body .row{padding-top:5px;max-height:40px}:host .tb-kv-map-config .body .cell{padding-left:5px;padding-right:5px}:host ::ng-deep .tb-kv-map-config .body mat-form-field.cell{margin:0;max-height:40px}:host ::ng-deep .tb-kv-map-config .body mat-form-field.cell .mat-form-field-infix{border-top:0}:host ::ng-deep .tb-kv-map-config .body button.mat-button{margin:0}"]}),h("design:paramtypes",[o.Store,n.TranslateService,t.Injector,i.FormBuilder])],r)}(a.PageComponent),re=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.directionTypes=Object.keys(a.EntitySearchDirection),n.directionTypeTranslations=a.entitySearchDirectionTranslations,n.entityType=a.EntityType,n.propagateChange=null,n}var n;return y(r,e),n=r,Object.defineProperty(r.prototype,"required",{get:function(){return this.requiredValue},set:function(e){this.requiredValue=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),r.prototype.ngOnInit=function(){var e=this;this.deviceRelationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[i.Validators.required]],maxLevel:[null,[]],relationType:[null],deviceTypes:[null,[i.Validators.required]]}),this.deviceRelationsQueryFormGroup.valueChanges.subscribe((function(t){e.deviceRelationsQueryFormGroup.valid?e.propagateChange(t):e.propagateChange(null)}))},r.prototype.registerOnChange=function(e){this.propagateChange=e},r.prototype.registerOnTouched=function(e){},r.prototype.setDisabledState=function(e){this.disabled=e,this.disabled?this.deviceRelationsQueryFormGroup.disable({emitEvent:!1}):this.deviceRelationsQueryFormGroup.enable({emitEvent:!1})},r.prototype.writeValue=function(e){this.deviceRelationsQueryFormGroup.reset(e,{emitEvent:!1})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},b([t.Input(),h("design:type",Boolean)],r.prototype,"disabled",void 0),b([t.Input(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],r.prototype,"required",null),r=n=b([t.Component({selector:"tb-device-relations-query-config",template:'\n \n {{ \'alias.last-level-relation\' | translate }}\n \n \n \n relation.direction \n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level \n \n \n
\n relation.relation-type
\n \n \n device.device-types
\n \n \n \n',providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return n})),multi:!0}]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.PageComponent),ne=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.directionTypes=Object.keys(a.EntitySearchDirection),n.directionTypeTranslations=a.entitySearchDirectionTranslations,n.propagateChange=null,n}var n;return y(r,e),n=r,Object.defineProperty(r.prototype,"required",{get:function(){return this.requiredValue},set:function(e){this.requiredValue=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),r.prototype.ngOnInit=function(){var e=this;this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[i.Validators.required]],maxLevel:[null,[]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((function(t){e.relationsQueryFormGroup.valid?e.propagateChange(t):e.propagateChange(null)}))},r.prototype.registerOnChange=function(e){this.propagateChange=e},r.prototype.registerOnTouched=function(e){},r.prototype.setDisabledState=function(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})},r.prototype.writeValue=function(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},b([t.Input(),h("design:type",Boolean)],r.prototype,"disabled",void 0),b([t.Input(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],r.prototype,"required",null),r=n=b([t.Component({selector:"tb-relations-query-config",template:'\n',providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return n})),multi:!0}]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.PageComponent),ae=function(e){function r(t,r,n,o){var i,l,m=e.call(this,t)||this;m.store=t,m.translate=r,m.truncate=n,m.fb=o,m.placeholder="tb.rulenode.message-type",m.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],m.messageTypes=[],m.messageTypesList=[],m.searchText="",m.propagateChange=function(e){},m.messageTypeConfigForm=m.fb.group({messageType:[null]});try{for(var u=C(Object.keys(a.MessageType)),d=u.next();!d.done;d=u.next()){var p=d.value;m.messageTypesList.push({name:a.messageTypeNames.get(a.MessageType[p]),value:p})}}catch(e){i={error:e}}finally{try{d&&!d.done&&(l=u.return)&&l.call(u)}finally{if(i)throw i.error}}return m}var l;return y(r,e),l=r,Object.defineProperty(r.prototype,"required",{get:function(){return this.requiredValue},set:function(e){this.requiredValue=u.coerceBooleanProperty(e)},enumerable:!0,configurable:!0}),r.prototype.registerOnChange=function(e){this.propagateChange=e},r.prototype.registerOnTouched=function(e){},r.prototype.ngOnInit=function(){var e=this;this.filteredMessageTypes=this.messageTypeConfigForm.get("messageType").valueChanges.pipe(f.startWith(""),f.map((function(e){return e||""})),f.mergeMap((function(t){return e.fetchMessageTypes(t)})),f.share())},r.prototype.ngAfterViewInit=function(){},r.prototype.setDisabledState=function(e){this.disabled=e,this.disabled?this.messageTypeConfigForm.disable({emitEvent:!1}):this.messageTypeConfigForm.enable({emitEvent:!1})},r.prototype.writeValue=function(e){var t=this;this.searchText="",this.messageTypes.length=0,e&&e.forEach((function(e){var r=t.messageTypesList.find((function(t){return t.value===e}));r?t.messageTypes.push({name:r.name,value:r.value}):t.messageTypes.push({name:e,value:e})}))},r.prototype.displayMessageTypeFn=function(e){return e?e.name:void 0},r.prototype.textIsNotEmpty=function(e){return!!(e&&null!=e&&e.length>0)},r.prototype.createMessageType=function(e,t){e.preventDefault(),this.transformMessageType(t)},r.prototype.add=function(e){this.transformMessageType(e.value)},r.prototype.fetchMessageTypes=function(e){if(this.searchText=e,this.searchText&&this.searchText.length){var t=this.searchText.toUpperCase();return c.of(this.messageTypesList.filter((function(e){return e.name.toUpperCase().includes(t)})))}return c.of(this.messageTypesList)},r.prototype.transformMessageType=function(e){if((e||"").trim()){var t=null,r=e.trim(),n=this.messageTypesList.find((function(e){return e.name===r}));(t=n?{name:n.name,value:n.value}:{name:r,value:r})&&this.addMessageType(t)}this.clear("")},r.prototype.remove=function(e){var t=this.messageTypes.indexOf(e);t>=0&&(this.messageTypes.splice(t,1),this.updateModel())},r.prototype.selected=function(e){this.addMessageType(e.option.value),this.clear("")},r.prototype.addMessageType=function(e){-1===this.messageTypes.findIndex((function(t){return t.value===e.value}))&&(this.messageTypes.push(e),this.updateModel())},r.prototype.onFocus=function(){this.messageTypeConfigForm.get("messageType").updateValueAndValidity({onlySelf:!0,emitEvent:!0})},r.prototype.clear=function(e){var t=this;void 0===e&&(e=""),this.messageTypeInput.nativeElement.value=e,this.messageTypeConfigForm.get("messageType").patchValue(null,{emitEvent:!0}),setTimeout((function(){t.messageTypeInput.nativeElement.blur(),t.messageTypeInput.nativeElement.focus()}),0)},r.prototype.updateModel=function(){var e=this.messageTypes.map((function(e){return e.value}));this.required?(this.chipList.errorState=!e.length,this.propagateChange(e.length>0?e:null)):(this.chipList.errorState=!1,this.propagateChange(e))},r.ctorParameters=function(){return[{type:o.Store},{type:n.TranslateService},{type:a.TruncatePipe},{type:i.FormBuilder}]},b([t.Input(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],r.prototype,"required",null),b([t.Input(),h("design:type",String)],r.prototype,"label",void 0),b([t.Input(),h("design:type",Object)],r.prototype,"placeholder",void 0),b([t.Input(),h("design:type",Boolean)],r.prototype,"disabled",void 0),b([t.ViewChild("chipList",{static:!1}),h("design:type",d.MatChipList)],r.prototype,"chipList",void 0),b([t.ViewChild("messageTypeAutocomplete",{static:!1}),h("design:type",p.MatAutocomplete)],r.prototype,"matAutocomplete",void 0),b([t.ViewChild("messageTypeInput",{static:!1}),h("design:type",t.ElementRef)],r.prototype,"messageTypeInput",void 0),r=l=b([t.Component({selector:"tb-message-types-config",template:'\n {{ label }} \n \n \n {{messageType.name}}\n close \n \n \n \n \n \n \n \n \n \n
\n tb.rulenode.no-message-types-found \n
\n
\n \n {{ translate.get(\'tb.rulenode.no-message-type-matching\',\n {messageType: truncate.transform(searchText, true, 6, '...')}) | async }}\n \n \n
\n tb.rulenode.create-new-message-type \n \n
\n \n \n \n {{ \'tb.rulenode.message-types-required\' | translate }}\n \n \n',providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return l})),multi:!0}]}),h("design:paramtypes",[o.Store,n.TranslateService,a.TruncatePipe,i.FormBuilder])],r)}(a.PageComponent),oe=function(){function e(){}return e=b([t.NgModule({declarations:[te,re,ne,ae],imports:[r.CommonModule,a.SharedModule,m.HomeComponentsModule],exports:[te,re,ne,ae]})],e)}(),ie=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.unassignCustomerConfigForm},r.prototype.onConfigurationSet=function(e){this.unassignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[i.Validators.required]],customerCacheExpiration:[e?e.customerCacheExpiration:null,[i.Validators.required,i.Validators.min(0)]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-un-assign-to-customer-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),le=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.snsConfigForm},r.prototype.onConfigurationSet=function(e){this.snsConfigForm=this.fb.group({topicArnPattern:[e?e.topicArnPattern:null,[i.Validators.required]],accessKeyId:[e?e.accessKeyId:null,[i.Validators.required]],secretAccessKey:[e?e.secretAccessKey:null,[i.Validators.required]],region:[e?e.region:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-sns-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),se=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.sqsQueueType=G,n.sqsQueueTypes=Object.keys(G),n.sqsQueueTypeTranslationsMap=z,n}return y(r,e),r.prototype.configForm=function(){return this.sqsConfigForm},r.prototype.onConfigurationSet=function(e){this.sqsConfigForm=this.fb.group({queueType:[e?e.queueType:null,[i.Validators.required]],queueUrlPattern:[e?e.queueUrlPattern:null,[i.Validators.required]],delaySeconds:[e?e.delaySeconds:null,[i.Validators.min(0),i.Validators.max(900)]],messageAttributes:[e?e.messageAttributes:null,[]],accessKeyId:[e?e.accessKeyId:null,[i.Validators.required]],secretAccessKey:[e?e.secretAccessKey:null,[i.Validators.required]],region:[e?e.region:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-sqs-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),me=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.pubSubConfigForm},r.prototype.onConfigurationSet=function(e){this.pubSubConfigForm=this.fb.group({projectId:[e?e.projectId:null,[i.Validators.required]],topicName:[e?e.topicName:null,[i.Validators.required]],serviceAccountKey:[e?e.serviceAccountKey:null,[i.Validators.required]],serviceAccountKeyFileName:[e?e.serviceAccountKeyFileName:null,[i.Validators.required]],messageAttributes:[e?e.messageAttributes:null,[]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-pub-sub-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ue=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.ackValues=["all","-1","0","1"],n.ToByteStandartCharsetTypesValues=W,n.ToByteStandartCharsetTypeTranslationMap=J,n}return y(r,e),r.prototype.configForm=function(){return this.kafkaConfigForm},r.prototype.onConfigurationSet=function(e){this.kafkaConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[i.Validators.required]],bootstrapServers:[e?e.bootstrapServers:null,[i.Validators.required]],retries:[e?e.retries:null,[i.Validators.min(0)]],batchSize:[e?e.batchSize:null,[i.Validators.min(0)]],linger:[e?e.linger:null,[i.Validators.min(0)]],bufferMemory:[e?e.bufferMemory:null,[i.Validators.min(0)]],acks:[e?e.acks:null,[i.Validators.required]],keySerializer:[e?e.keySerializer:null,[i.Validators.required]],valueSerializer:[e?e.valueSerializer:null,[i.Validators.required]],otherProperties:[e?e.otherProperties:null,[]],addMetadataKeyValuesAsKafkaHeaders:[!!e&&e.addMetadataKeyValuesAsKafkaHeaders,[]],kafkaHeadersCharset:[e?e.kafkaHeadersCharset:null,[]]})},r.prototype.validatorTriggers=function(){return["addMetadataKeyValuesAsKafkaHeaders"]},r.prototype.updateValidators=function(e){this.kafkaConfigForm.get("addMetadataKeyValuesAsKafkaHeaders").value?this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([i.Validators.required]):this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([]),this.kafkaConfigForm.get("kafkaHeadersCharset").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-kafka-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),de=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.allMqttCredentialsTypes=$,n.mqttCredentialsTypeTranslationsMap=_,n}return y(r,e),r.prototype.configForm=function(){return this.mqttConfigForm},r.prototype.onConfigurationSet=function(e){this.mqttConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[i.Validators.required]],host:[e?e.host:null,[i.Validators.required]],port:[e?e.port:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(200)]],clientId:[e?e.clientId:null,[]],cleanSession:[!!e&&e.cleanSession,[]],ssl:[!!e&&e.ssl,[]],credentials:this.fb.group({type:[e&&e.credentials?e.credentials.type:null,[i.Validators.required]],username:[e&&e.credentials?e.credentials.username:null,[]],password:[e&&e.credentials?e.credentials.password:null,[]],caCert:[e&&e.credentials?e.credentials.caCert:null,[]],caCertFileName:[e&&e.credentials?e.credentials.caCertFileName:null,[]],privateKey:[e&&e.credentials?e.credentials.privateKey:null,[]],privateKeyFileName:[e&&e.credentials?e.credentials.privateKeyFileName:null,[]],cert:[e&&e.credentials?e.credentials.cert:null,[]],certFileName:[e&&e.credentials?e.credentials.certFileName:null,[]]})})},r.prototype.prepareOutputConfig=function(e){var t=e.credentials.type;switch(t){case"anonymous":e.credentials={type:t};break;case"basic":e.credentials={type:t,username:e.credentials.username,password:e.credentials.password};break;case"cert.PEM":delete e.credentials.username}return e},r.prototype.validatorTriggers=function(){return["credentials.type"]},r.prototype.updateValidators=function(e){var t=this.mqttConfigForm.get("credentials"),r=t.get("type").value;switch(e&&t.reset({type:r},{emitEvent:!1}),t.get("username").setValidators([]),t.get("password").setValidators([]),t.get("caCert").setValidators([]),t.get("caCertFileName").setValidators([]),t.get("privateKey").setValidators([]),t.get("privateKeyFileName").setValidators([]),t.get("cert").setValidators([]),t.get("certFileName").setValidators([]),r){case"anonymous":break;case"basic":t.get("username").setValidators([i.Validators.required]),t.get("password").setValidators([i.Validators.required]);break;case"cert.PEM":t.get("caCert").setValidators([i.Validators.required]),t.get("caCertFileName").setValidators([i.Validators.required]),t.get("privateKey").setValidators([i.Validators.required]),t.get("privateKeyFileName").setValidators([i.Validators.required]),t.get("cert").setValidators([i.Validators.required]),t.get("certFileName").setValidators([i.Validators.required])}t.get("username").updateValueAndValidity({emitEvent:e}),t.get("password").updateValueAndValidity({emitEvent:e}),t.get("caCert").updateValueAndValidity({emitEvent:e}),t.get("caCertFileName").updateValueAndValidity({emitEvent:e}),t.get("privateKey").updateValueAndValidity({emitEvent:e}),t.get("privateKeyFileName").updateValueAndValidity({emitEvent:e}),t.get("cert").updateValueAndValidity({emitEvent:e}),t.get("certFileName").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-mqtt-config",template:'\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),pe=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.messageProperties=[null,"BASIC","TEXT_PLAIN","MINIMAL_BASIC","MINIMAL_PERSISTENT_BASIC","PERSISTENT_BASIC","PERSISTENT_TEXT_PLAIN"],n}return y(r,e),r.prototype.configForm=function(){return this.rabbitMqConfigForm},r.prototype.onConfigurationSet=function(e){this.rabbitMqConfigForm=this.fb.group({exchangeNamePattern:[e?e.exchangeNamePattern:null,[]],routingKeyPattern:[e?e.routingKeyPattern:null,[]],messageProperties:[e?e.messageProperties:null,[]],host:[e?e.host:null,[i.Validators.required]],port:[e?e.port:null,[i.Validators.required,i.Validators.min(1),i.Validators.max(65535)]],virtualHost:[e?e.virtualHost:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]],automaticRecoveryEnabled:[!!e&&e.automaticRecoveryEnabled,[]],connectionTimeout:[e?e.connectionTimeout:null,[i.Validators.min(0)]],handshakeTimeout:[e?e.handshakeTimeout:null,[i.Validators.min(0)]],clientProperties:[e?e.clientProperties:null,[]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-rabbit-mq-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ce=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.httpRequestTypes=Object.keys(Q),n}return y(r,e),r.prototype.configForm=function(){return this.restApiCallConfigForm},r.prototype.onConfigurationSet=function(e){this.restApiCallConfigForm=this.fb.group({restEndpointUrlPattern:[e?e.restEndpointUrlPattern:null,[i.Validators.required]],requestMethod:[e?e.requestMethod:null,[i.Validators.required]],useSimpleClientHttpFactory:[!!e&&e.useSimpleClientHttpFactory,[]],readTimeoutMs:[e?e.readTimeoutMs:null,[]],maxParallelRequestsCount:[e?e.maxParallelRequestsCount:null,[i.Validators.min(0)]],headers:[e?e.headers:null,[]],useRedisQueueForMsgPersistence:[!!e&&e.useRedisQueueForMsgPersistence,[]],trimQueue:[!!e&&e.trimQueue,[]],maxQueueSize:[e?e.maxQueueSize:null,[]]})},r.prototype.validatorTriggers=function(){return["useSimpleClientHttpFactory","useRedisQueueForMsgPersistence"]},r.prototype.updateValidators=function(e){var t=this.restApiCallConfigForm.get("useSimpleClientHttpFactory").value,r=this.restApiCallConfigForm.get("useRedisQueueForMsgPersistence").value;t?this.restApiCallConfigForm.get("readTimeoutMs").setValidators([]):this.restApiCallConfigForm.get("readTimeoutMs").setValidators([i.Validators.min(0)]),r?this.restApiCallConfigForm.get("maxQueueSize").setValidators([i.Validators.min(0)]):this.restApiCallConfigForm.get("maxQueueSize").setValidators([]),this.restApiCallConfigForm.get("readTimeoutMs").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("maxQueueSize").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-rest-api-call-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),fe=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.smtpProtocols=["smtp","smtps"],n.tlsVersions=["TLSv1","TLSv1.1","TLSv1.2","TLSv1.3"],n}return y(r,e),r.prototype.configForm=function(){return this.sendEmailConfigForm},r.prototype.onConfigurationSet=function(e){this.sendEmailConfigForm=this.fb.group({useSystemSmtpSettings:[!!e&&e.useSystemSmtpSettings,[]],smtpProtocol:[e?e.smtpProtocol:null,[]],smtpHost:[e?e.smtpHost:null,[]],smtpPort:[e?e.smtpPort:null,[]],timeout:[e?e.timeout:null,[]],enableTls:[!!e&&e.enableTls,[]],tlsVersion:[e?e.tlsVersion:null,[]],enableProxy:[!!e&&e.enableProxy,[]],proxyHost:[e?e.proxyHost:null,[]],proxyPort:[e?e.proxyPort:null,[]],proxyUser:[e?e.proxyUser:null,[]],proxyPassword:[e?e.proxyPassword:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]]})},r.prototype.validatorTriggers=function(){return["useSystemSmtpSettings","enableProxy"]},r.prototype.updateValidators=function(e){var t=this.sendEmailConfigForm.get("useSystemSmtpSettings").value,r=this.sendEmailConfigForm.get("enableProxy").value;t?(this.sendEmailConfigForm.get("smtpProtocol").setValidators([]),this.sendEmailConfigForm.get("smtpHost").setValidators([]),this.sendEmailConfigForm.get("smtpPort").setValidators([]),this.sendEmailConfigForm.get("timeout").setValidators([]),this.sendEmailConfigForm.get("proxyHost").setValidators([]),this.sendEmailConfigForm.get("proxyPort").setValidators([])):(this.sendEmailConfigForm.get("smtpProtocol").setValidators([i.Validators.required]),this.sendEmailConfigForm.get("smtpHost").setValidators([i.Validators.required]),this.sendEmailConfigForm.get("smtpPort").setValidators([i.Validators.required,i.Validators.min(1),i.Validators.max(65535)]),this.sendEmailConfigForm.get("timeout").setValidators([i.Validators.required,i.Validators.min(0)]),this.sendEmailConfigForm.get("proxyHost").setValidators(r?[i.Validators.required]:[]),this.sendEmailConfigForm.get("proxyPort").setValidators(r?[i.Validators.required,i.Validators.min(1),i.Validators.max(65535)]:[])),this.sendEmailConfigForm.get("smtpProtocol").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpPort").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("timeout").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyPort").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-send-email-config",template:'\n \n {{ \'tb.rulenode.use-system-smtp-settings\' | translate }}\n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ge=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.serviceType=a.ServiceType.TB_RULE_ENGINE,n}return y(r,e),r.prototype.configForm=function(){return this.checkPointConfigForm},r.prototype.onConfigurationSet=function(e){this.checkPointConfigForm=this.fb.group({queueName:[e?e.queueName:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-action-node-check-point-config",template:'\n \n \n tb.rulenode.select-queue-hint
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ye=function(){function e(){}return e=b([t.NgModule({declarations:[T,x,q,S,I,k,N,V,E,A,L,Y,Z,X,ee,ie,le,se,me,ue,de,pe,ce,fe,ge],imports:[r.CommonModule,a.SharedModule,oe],exports:[T,x,q,S,I,k,N,V,E,A,L,Y,Z,X,ee,ie,le,se,me,ue,de,pe,ce,fe,ge]})],e)}(),be=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],n}return y(r,e),r.prototype.configForm=function(){return this.checkMessageConfigForm},r.prototype.onConfigurationSet=function(e){this.checkMessageConfigForm=this.fb.group({messageNames:[e?e.messageNames:null,[]],metadataNames:[e?e.metadataNames:null,[]],checkAllKeys:[!!e&&e.checkAllKeys,[]]})},r.prototype.validateConfig=function(){var e=this.checkMessageConfigForm.get("messageNames").value,t=this.checkMessageConfigForm.get("metadataNames").value;return e.length>0||t.length>0},r.prototype.removeMessageName=function(e){var t=this.checkMessageConfigForm.get("messageNames").value,r=t.indexOf(e);r>=0&&(t.splice(r,1),this.checkMessageConfigForm.get("messageNames").setValue(t,{emitEvent:!0}))},r.prototype.removeMetadataName=function(e){var t=this.checkMessageConfigForm.get("metadataNames").value,r=t.indexOf(e);r>=0&&(t.splice(r,1),this.checkMessageConfigForm.get("metadataNames").setValue(t,{emitEvent:!0}))},r.prototype.addMessageName=function(e){var t=e.input,r=e.value;if((r||"").trim()){r=r.trim();var n=this.checkMessageConfigForm.get("messageNames").value;n&&-1!==n.indexOf(r)||(n||(n=[]),n.push(r),this.checkMessageConfigForm.get("messageNames").setValue(n,{emitEvent:!0}))}t&&(t.value="")},r.prototype.addMetadataName=function(e){var t=e.input,r=e.value;if((r||"").trim()){r=r.trim();var n=this.checkMessageConfigForm.get("metadataNames").value;n&&-1!==n.indexOf(r)||(n||(n=[]),n.push(r),this.checkMessageConfigForm.get("metadataNames").setValue(n,{emitEvent:!0}))}t&&(t.value="")},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-check-message-config",template:'\n',styles:[":host label.tb-title{margin-bottom:-10px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),he=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.entitySearchDirection=Object.keys(a.EntitySearchDirection),n.entitySearchDirectionTranslationsMap=a.entitySearchDirectionTranslations,n}return y(r,e),r.prototype.configForm=function(){return this.checkRelationConfigForm},r.prototype.onConfigurationSet=function(e){this.checkRelationConfigForm=this.fb.group({checkForSingleEntity:[!!e&&e.checkForSingleEntity,[]],direction:[e?e.direction:null,[]],entityType:[e?e.entityType:null,e&&e.checkForSingleEntity?[i.Validators.required]:[]],entityId:[e?e.entityId:null,e&&e.checkForSingleEntity?[i.Validators.required]:[]],relationType:[e?e.relationType:null,[i.Validators.required]]})},r.prototype.validatorTriggers=function(){return["checkForSingleEntity"]},r.prototype.updateValidators=function(e){var t=this.checkRelationConfigForm.get("checkForSingleEntity").value;this.checkRelationConfigForm.get("entityType").setValidators(t?[i.Validators.required]:[]),this.checkRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.checkRelationConfigForm.get("entityId").setValidators(t?[i.Validators.required]:[]),this.checkRelationConfigForm.get("entityId").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-check-relation-config",template:'\n \n {{ \'tb.rulenode.check-relation-to-specific-entity\' | translate }}\n \n tb.rulenode.check-relation-hint
\n \n relation.direction \n \n \n {{ entitySearchDirectionTranslationsMap.get(direction) | translate }}\n \n \n \n \n \n \n \n \n
\n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ce=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.perimeterType=M,n.perimeterTypes=Object.keys(M),n.perimeterTypeTranslationMap=w,n.rangeUnits=Object.keys(O),n.rangeUnitTranslationMap=B,n}return y(r,e),r.prototype.configForm=function(){return this.geoFilterConfigForm},r.prototype.onConfigurationSet=function(e){this.geoFilterConfigForm=this.fb.group({latitudeKeyName:[e?e.latitudeKeyName:null,[i.Validators.required]],longitudeKeyName:[e?e.longitudeKeyName:null,[i.Validators.required]],fetchPerimeterInfoFromMessageMetadata:[!!e&&e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterType:[e?e.perimeterType:null,[]],centerLatitude:[e?e.centerLatitude:null,[]],centerLongitude:[e?e.centerLatitude:null,[]],range:[e?e.range:null,[]],rangeUnit:[e?e.rangeUnit:null,[]],polygonsDefinition:[e?e.polygonsDefinition:null,[]]})},r.prototype.validatorTriggers=function(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]},r.prototype.updateValidators=function(e){var t=this.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,r=this.geoFilterConfigForm.get("perimeterType").value;t?this.geoFilterConfigForm.get("perimeterType").setValidators([]):this.geoFilterConfigForm.get("perimeterType").setValidators([i.Validators.required]),t||r!==M.CIRCLE?(this.geoFilterConfigForm.get("centerLatitude").setValidators([]),this.geoFilterConfigForm.get("centerLongitude").setValidators([]),this.geoFilterConfigForm.get("range").setValidators([]),this.geoFilterConfigForm.get("rangeUnit").setValidators([])):(this.geoFilterConfigForm.get("centerLatitude").setValidators([i.Validators.required,i.Validators.min(-90),i.Validators.max(90)]),this.geoFilterConfigForm.get("centerLongitude").setValidators([i.Validators.required,i.Validators.min(-180),i.Validators.max(180)]),this.geoFilterConfigForm.get("range").setValidators([i.Validators.required,i.Validators.min(0)]),this.geoFilterConfigForm.get("rangeUnit").setValidators([i.Validators.required])),t||r!==M.POLYGON?this.geoFilterConfigForm.get("polygonsDefinition").setValidators([]):this.geoFilterConfigForm.get("polygonsDefinition").setValidators([i.Validators.required]),this.geoFilterConfigForm.get("perimeterType").updateValueAndValidity({emitEvent:!1}),this.geoFilterConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-gps-geofencing-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ve=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.messageTypeConfigForm},r.prototype.onConfigurationSet=function(e){this.messageTypeConfigForm=this.fb.group({messageTypes:[e?e.messageTypes:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-message-type-config",template:'\n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Fe=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.allowedEntityTypes=[a.EntityType.DEVICE,a.EntityType.ASSET,a.EntityType.ENTITY_VIEW,a.EntityType.TENANT,a.EntityType.CUSTOMER,a.EntityType.USER,a.EntityType.DASHBOARD,a.EntityType.RULE_CHAIN,a.EntityType.RULE_NODE],n}return y(r,e),r.prototype.configForm=function(){return this.originatorTypeConfigForm},r.prototype.onConfigurationSet=function(e){this.originatorTypeConfigForm=this.fb.group({originatorTypes:[e?e.originatorTypes:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-filter-node-originator-type-config",template:'\n tb.rulenode.originator-types-filter \n \n \n \n',styles:[":host ::ng-deep tb-entity-type-list .mat-form-field-flex{padding-top:0}:host ::ng-deep tb-entity-type-list .mat-form-field-infix{border-top:0}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Te=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.scriptConfigForm},r.prototype.onConfigurationSet=function(e){this.scriptConfigForm=this.fb.group({jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.scriptConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"filter",this.translate.instant("tb.rulenode.filter"),"Filter",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.scriptConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-filter-node-script-config",template:'\n tb.rulenode.filter \n \n \n \n \n {{ \'tb.rulenode.test-filter-function\' | translate }}\n \n
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),xe=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.switchConfigForm},r.prototype.onConfigurationSet=function(e){this.switchConfigForm=this.fb.group({jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.switchConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"switch",this.translate.instant("tb.rulenode.switch"),"Switch",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.switchConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-filter-node-switch-config",template:'\n tb.rulenode.switch \n \n \n \n \n {{ \'tb.rulenode.test-switch-function\' | translate }}\n \n
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),qe=function(e){function r(t,r,n){var o,l,s=e.call(this,t)||this;s.store=t,s.translate=r,s.fb=n,s.alarmStatusTranslationsMap=a.alarmStatusTranslations,s.alarmStatusList=[],s.searchText="",s.displayStatusFn=s.displayStatus.bind(s);try{for(var m=C(Object.keys(a.AlarmStatus)),u=m.next();!u.done;u=m.next()){var d=u.value;s.alarmStatusList.push(a.AlarmStatus[d])}}catch(e){o={error:e}}finally{try{u&&!u.done&&(l=m.return)&&l.call(m)}finally{if(o)throw o.error}}return s.statusFormControl=new i.FormControl(""),s.filteredAlarmStatus=s.statusFormControl.valueChanges.pipe(f.startWith(""),f.map((function(e){return e||""})),f.mergeMap((function(e){return s.fetchAlarmStatus(e)})),f.share()),s}return y(r,e),r.prototype.ngOnInit=function(){e.prototype.ngOnInit.call(this)},r.prototype.configForm=function(){return this.alarmStatusConfigForm},r.prototype.prepareInputConfig=function(e){return this.searchText="",this.statusFormControl.patchValue("",{emitEvent:!0}),e},r.prototype.onConfigurationSet=function(e){this.alarmStatusConfigForm=this.fb.group({alarmStatusList:[e?e.alarmStatusList:null,[i.Validators.required]]})},r.prototype.displayStatus=function(e){return e?this.translate.instant(a.alarmStatusTranslations.get(e)):void 0},r.prototype.fetchAlarmStatus=function(e){var t=this,r=this.getAlarmStatusList();if(this.searchText=e,this.searchText&&this.searchText.length){var n=this.searchText.toUpperCase();return c.of(r.filter((function(e){return t.translate.instant(a.alarmStatusTranslations.get(a.AlarmStatus[e])).toUpperCase().includes(n)})))}return c.of(r)},r.prototype.alarmStatusSelected=function(e){this.addAlarmStatus(e.option.value),this.clear("")},r.prototype.removeAlarmStatus=function(e){var t=this.alarmStatusConfigForm.get("alarmStatusList").value;if(t){var r=t.indexOf(e);r>=0&&(t.splice(r,1),this.alarmStatusConfigForm.get("alarmStatusList").setValue(t))}},r.prototype.addAlarmStatus=function(e){var t=this.alarmStatusConfigForm.get("alarmStatusList").value;t||(t=[]),-1===t.indexOf(e)&&(t.push(e),this.alarmStatusConfigForm.get("alarmStatusList").setValue(t))},r.prototype.getAlarmStatusList=function(){var e=this;return this.alarmStatusList.filter((function(t){return-1===e.alarmStatusConfigForm.get("alarmStatusList").value.indexOf(t)}))},r.prototype.onAlarmStatusInputFocus=function(){this.statusFormControl.updateValueAndValidity({onlySelf:!0,emitEvent:!0})},r.prototype.clear=function(e){var t=this;void 0===e&&(e=""),this.alarmStatusInput.nativeElement.value=e,this.statusFormControl.patchValue(null,{emitEvent:!0}),setTimeout((function(){t.alarmStatusInput.nativeElement.blur(),t.alarmStatusInput.nativeElement.focus()}),0)},r.ctorParameters=function(){return[{type:o.Store},{type:n.TranslateService},{type:i.FormBuilder}]},b([t.ViewChild("alarmStatusInput",{static:!1}),h("design:type",t.ElementRef)],r.prototype,"alarmStatusInput",void 0),r=b([t.Component({selector:"tb-filter-node-check-alarm-status-config",template:'\n \n tb.rulenode.alarm-status-filter \n \n \n \n {{alarmStatusTranslationsMap.get(alarmStatus) | translate}} \n \n close \n \n \n \n \n \n \n \n \n \n
\n tb.rulenode.no-alarm-status-matching \n
\n
\n \n \n \n \n \n\n\n\n'}),h("design:paramtypes",[o.Store,n.TranslateService,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Se=function(){function e(){}return e=b([t.NgModule({declarations:[be,he,Ce,ve,Fe,Te,xe,qe],imports:[r.CommonModule,a.SharedModule,oe],exports:[be,he,Ce,ve,Fe,Te,xe,qe]})],e)}(),Ie=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.customerAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.customerAttributesConfigForm=this.fb.group({telemetry:[!!e&&e.telemetry,[]],attrMapping:[e?e.attrMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-customer-attributes-config",template:'\n tb.rulenode.attr-mapping \n \n {{ \'tb.rulenode.latest-telemetry\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),ke=function(e){function r(t,r,n){var a,o,l=e.call(this,t)||this;l.store=t,l.translate=r,l.fb=n,l.entityDetailsTranslationsMap=H,l.entityDetailsList=[],l.searchText="",l.displayDetailsFn=l.displayDetails.bind(l);try{for(var s=C(Object.keys(K)),m=s.next();!m.done;m=s.next()){var u=m.value;l.entityDetailsList.push(K[u])}}catch(e){a={error:e}}finally{try{m&&!m.done&&(o=s.return)&&o.call(s)}finally{if(a)throw a.error}}return l.detailsFormControl=new i.FormControl(""),l.filteredEntityDetails=l.detailsFormControl.valueChanges.pipe(f.startWith(""),f.map((function(e){return e||""})),f.mergeMap((function(e){return l.fetchEntityDetails(e)})),f.share()),l}return y(r,e),r.prototype.ngOnInit=function(){e.prototype.ngOnInit.call(this)},r.prototype.configForm=function(){return this.entityDetailsConfigForm},r.prototype.prepareInputConfig=function(e){return this.searchText="",this.detailsFormControl.patchValue("",{emitEvent:!0}),e},r.prototype.onConfigurationSet=function(e){this.entityDetailsConfigForm=this.fb.group({detailsList:[e?e.detailsList:null,[i.Validators.required]],addToMetadata:[!!e&&e.addToMetadata,[]]})},r.prototype.displayDetails=function(e){return e?this.translate.instant(H.get(e)):void 0},r.prototype.fetchEntityDetails=function(e){var t=this;if(this.searchText=e,this.searchText&&this.searchText.length){var r=this.searchText.toUpperCase();return c.of(this.entityDetailsList.filter((function(e){return t.translate.instant(H.get(K[e])).toUpperCase().includes(r)})))}return c.of(this.entityDetailsList)},r.prototype.detailsFieldSelected=function(e){this.addDetailsField(e.option.value),this.clear("")},r.prototype.removeDetailsField=function(e){var t=this.entityDetailsConfigForm.get("detailsList").value;if(t){var r=t.indexOf(e);r>=0&&(t.splice(r,1),this.entityDetailsConfigForm.get("detailsList").setValue(t))}},r.prototype.addDetailsField=function(e){var t=this.entityDetailsConfigForm.get("detailsList").value;t||(t=[]),-1===t.indexOf(e)&&(t.push(e),this.entityDetailsConfigForm.get("detailsList").setValue(t))},r.prototype.onEntityDetailsInputFocus=function(){this.detailsFormControl.updateValueAndValidity({onlySelf:!0,emitEvent:!0})},r.prototype.clear=function(e){var t=this;void 0===e&&(e=""),this.detailsInput.nativeElement.value=e,this.detailsFormControl.patchValue(null,{emitEvent:!0}),setTimeout((function(){t.detailsInput.nativeElement.blur(),t.detailsInput.nativeElement.focus()}),0)},r.ctorParameters=function(){return[{type:o.Store},{type:n.TranslateService},{type:i.FormBuilder}]},b([t.ViewChild("detailsInput",{static:!1}),h("design:type",t.ElementRef)],r.prototype,"detailsInput",void 0),r=b([t.Component({selector:"tb-enrichment-node-entity-details-config",template:'\n \n tb.rulenode.entity-details \n \n \n \n {{entityDetailsTranslationsMap.get(details) | translate}} \n \n close \n \n \n \n \n \n \n \n \n \n
\n tb.rulenode.no-entity-details-matching \n
\n
\n \n \n \n \n \n {{ \'tb.rulenode.add-to-metadata\' | translate }}\n \n tb.rulenode.add-to-metadata-hint
\n \n',styles:[":host ::ng-deep mat-form-field.entity-fields-list .mat-form-field-wrapper{margin-bottom:-1.25em}"]}),h("design:paramtypes",[o.Store,n.TranslateService,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ne=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],n}return y(r,e),r.prototype.configForm=function(){return this.deviceAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.deviceAttributesConfigForm=this.fb.group({deviceRelationsQuery:[e?e.deviceRelationsQuery:null,[i.Validators.required]],tellFailureIfAbsent:[!!e&&e.tellFailureIfAbsent,[]],clientAttributeNames:[e?e.clientAttributeNames:null,[]],sharedAttributeNames:[e?e.sharedAttributeNames:null,[]],serverAttributeNames:[e?e.serverAttributeNames:null,[]],latestTsKeyNames:[e?e.latestTsKeyNames:null,[]],getLatestValueWithTs:[!!e&&e.getLatestValueWithTs,[]]})},r.prototype.removeKey=function(e,t){var r=this.deviceAttributesConfigForm.get(t).value,n=r.indexOf(e);n>=0&&(r.splice(n,1),this.deviceAttributesConfigForm.get(t).setValue(r,{emitEvent:!0}))},r.prototype.addKey=function(e,t){var r=e.input,n=e.value;if((n||"").trim()){n=n.trim();var a=this.deviceAttributesConfigForm.get(t).value;a&&-1!==a.indexOf(n)||(a||(a=[]),a.push(n),this.deviceAttributesConfigForm.get(t).setValue(a,{emitEvent:!0}))}r&&(r.value="")},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-device-attributes-config",template:'\n',styles:[":host label.tb-title{margin-bottom:-10px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ve=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],n}return y(r,e),r.prototype.configForm=function(){return this.originatorAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.originatorAttributesConfigForm=this.fb.group({tellFailureIfAbsent:[!!e&&e.tellFailureIfAbsent,[]],clientAttributeNames:[e?e.clientAttributeNames:null,[]],sharedAttributeNames:[e?e.sharedAttributeNames:null,[]],serverAttributeNames:[e?e.serverAttributeNames:null,[]],latestTsKeyNames:[e?e.latestTsKeyNames:null,[]],getLatestValueWithTs:[!!e&&e.getLatestValueWithTs,[]]})},r.prototype.removeKey=function(e,t){var r=this.originatorAttributesConfigForm.get(t).value,n=r.indexOf(e);n>=0&&(r.splice(n,1),this.originatorAttributesConfigForm.get(t).setValue(r,{emitEvent:!0}))},r.prototype.addKey=function(e,t){var r=e.input,n=e.value;if((n||"").trim()){n=n.trim();var a=this.originatorAttributesConfigForm.get(t).value;a&&-1!==a.indexOf(n)||(a||(a=[]),a.push(n),this.originatorAttributesConfigForm.get(t).setValue(a,{emitEvent:!0}))}r&&(r.value="")},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-originator-attributes-config",template:'\n',styles:[":host label.tb-title{margin-bottom:-10px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ee=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.originatorFieldsConfigForm},r.prototype.onConfigurationSet=function(e){this.originatorFieldsConfigForm=this.fb.group({fieldsMapping:[e?e.fieldsMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-originator-fields-config",template:'\n tb.rulenode.fields-mapping \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Ae=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.separatorKeysCodes=[s.ENTER,s.COMMA,s.SEMICOLON],n.fetchMode=U,n.fetchModes=Object.keys(U),n.samplingOrders=Object.keys(j),n.timeUnits=Object.keys(R),n.timeUnitsTranslationMap=D,n}return y(r,e),r.prototype.configForm=function(){return this.getTelemetryFromDatabaseConfigForm},r.prototype.onConfigurationSet=function(e){this.getTelemetryFromDatabaseConfigForm=this.fb.group({latestTsKeyNames:[e?e.latestTsKeyNames:null,[]],fetchMode:[e?e.fetchMode:null,[i.Validators.required]],orderBy:[e?e.orderBy:null,[]],limit:[e?e.limit:null,[]],useMetadataIntervalPatterns:[!!e&&e.useMetadataIntervalPatterns,[]],startInterval:[e?e.startInterval:null,[]],startIntervalTimeUnit:[e?e.startIntervalTimeUnit:null,[]],endInterval:[e?e.endInterval:null,[]],endIntervalTimeUnit:[e?e.endIntervalTimeUnit:null,[]],startIntervalPattern:[e?e.startIntervalPattern:null,[]],endIntervalPattern:[e?e.endIntervalPattern:null,[]]})},r.prototype.validatorTriggers=function(){return["fetchMode","useMetadataIntervalPatterns"]},r.prototype.updateValidators=function(e){var t=this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value,r=this.getTelemetryFromDatabaseConfigForm.get("useMetadataIntervalPatterns").value;t&&t===U.ALL?(this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([i.Validators.required]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([i.Validators.required,i.Validators.min(2),i.Validators.max(1e3)])):(this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([])),r?(this.getTelemetryFromDatabaseConfigForm.get("startInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([i.Validators.required]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([i.Validators.required])):(this.getTelemetryFromDatabaseConfigForm.get("startInterval").setValidators([i.Validators.required,i.Validators.min(1),i.Validators.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalTimeUnit").setValidators([i.Validators.required]),this.getTelemetryFromDatabaseConfigForm.get("endInterval").setValidators([i.Validators.required,i.Validators.min(1),i.Validators.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalTimeUnit").setValidators([i.Validators.required]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([])),this.getTelemetryFromDatabaseConfigForm.get("orderBy").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("limit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").updateValueAndValidity({emitEvent:e})},r.prototype.removeKey=function(e,t){var r=this.getTelemetryFromDatabaseConfigForm.get(t).value,n=r.indexOf(e);n>=0&&(r.splice(n,1),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(r,{emitEvent:!0}))},r.prototype.addKey=function(e,t){var r=e.input,n=e.value;if((n||"").trim()){n=n.trim();var a=this.getTelemetryFromDatabaseConfigForm.get(t).value;a&&-1!==a.indexOf(n)||(a||(a=[]),a.push(n),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(a,{emitEvent:!0}))}r&&(r.value="")},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-get-telemetry-from-database",template:'\n',styles:[":host label.tb-title{margin-bottom:-10px}"]}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Le=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.relatedAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.relatedAttributesConfigForm=this.fb.group({relationsQuery:[e?e.relationsQuery:null,[i.Validators.required]],telemetry:[!!e&&e.telemetry,[]],attrMapping:[e?e.attrMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-related-attributes-config",template:'\n tb.rulenode.relations-query \n \n \n tb.rulenode.attr-mapping \n \n {{ \'tb.rulenode.latest-telemetry\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Me=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.tenantAttributesConfigForm},r.prototype.onConfigurationSet=function(e){this.tenantAttributesConfigForm=this.fb.group({telemetry:[!!e&&e.telemetry,[]],attrMapping:[e?e.attrMapping:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-enrichment-node-tenant-attributes-config",template:'\n tb.rulenode.attr-mapping \n \n {{ \'tb.rulenode.latest-telemetry\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),Pe=function(){function e(){}return e=b([t.NgModule({declarations:[Ie,ke,Ne,Ve,Ee,Ae,Le,Me],imports:[r.CommonModule,a.SharedModule,oe],exports:[Ie,ke,Ne,Ve,Ee,Ae,Le,Me]})],e)}(),Re=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n.originatorSource=v,n.originatorSources=Object.keys(v),n.originatorSourceTranslationMap=P,n}return y(r,e),r.prototype.configForm=function(){return this.changeOriginatorConfigForm},r.prototype.onConfigurationSet=function(e){this.changeOriginatorConfigForm=this.fb.group({originatorSource:[e?e.originatorSource:null,[i.Validators.required]],relationsQuery:[e?e.relationsQuery:null,[]]})},r.prototype.validatorTriggers=function(){return["originatorSource"]},r.prototype.updateValidators=function(e){var t=this.changeOriginatorConfigForm.get("originatorSource").value;t&&t===v.RELATED?this.changeOriginatorConfigForm.get("relationsQuery").setValidators([i.Validators.required]):this.changeOriginatorConfigForm.get("relationsQuery").setValidators([]),this.changeOriginatorConfigForm.get("relationsQuery").updateValueAndValidity({emitEvent:e})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-transformation-node-change-originator-config",template:'\n \n tb.rulenode.originator-source \n \n \n {{ originatorSourceTranslationMap.get(source) | translate }}\n \n \n \n \n tb.rulenode.relations-query \n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),we=function(e){function r(t,r,n,a){var o=e.call(this,t)||this;return o.store=t,o.fb=r,o.nodeScriptTestService=n,o.translate=a,o}return y(r,e),r.prototype.configForm=function(){return this.scriptConfigForm},r.prototype.onConfigurationSet=function(e){this.scriptConfigForm=this.fb.group({jsScript:[e?e.jsScript:null,[i.Validators.required]]})},r.prototype.testScript=function(){var e=this,t=this.scriptConfigForm.get("jsScript").value;this.nodeScriptTestService.testNodeScript(t,"update",this.translate.instant("tb.rulenode.transformer"),"Transform",["msg","metadata","msgType"],this.ruleNodeId).subscribe((function(t){t&&e.scriptConfigForm.get("jsScript").setValue(t)}))},r.prototype.onValidate=function(){this.jsFuncComponent.validateOnSubmit()},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder},{type:l.NodeScriptTestService},{type:n.TranslateService}]},b([t.ViewChild("jsFuncComponent",{static:!0}),h("design:type",a.JsFuncComponent)],r.prototype,"jsFuncComponent",void 0),r=b([t.Component({selector:"tb-transformation-node-script-config",template:'\n tb.rulenode.transform \n \n \n \n \n {{ \'tb.rulenode.test-transformer-function\' | translate }}\n \n
\n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder,l.NodeScriptTestService,n.TranslateService])],r)}(a.RuleNodeConfigurationComponent),Oe=function(e){function r(t,r){var n=e.call(this,t)||this;return n.store=t,n.fb=r,n}return y(r,e),r.prototype.configForm=function(){return this.toEmailConfigForm},r.prototype.onConfigurationSet=function(e){this.toEmailConfigForm=this.fb.group({fromTemplate:[e?e.fromTemplate:null,[i.Validators.required]],toTemplate:[e?e.toTemplate:null,[i.Validators.required]],ccTemplate:[e?e.ccTemplate:null,[]],bccTemplate:[e?e.bccTemplate:null,[]],subjectTemplate:[e?e.subjectTemplate:null,[i.Validators.required]],bodyTemplate:[e?e.bodyTemplate:null,[i.Validators.required]]})},r.ctorParameters=function(){return[{type:o.Store},{type:i.FormBuilder}]},r=b([t.Component({selector:"tb-transformation-node-to-email-config",template:'\n \n tb.rulenode.from-template \n \n \n {{ \'tb.rulenode.from-template-required\' | translate }}\n \n \n \n \n tb.rulenode.to-template \n \n \n {{ \'tb.rulenode.to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.cc-template \n \n \n \n \n tb.rulenode.bcc-template \n \n \n \n \n tb.rulenode.subject-template \n \n \n {{ \'tb.rulenode.subject-template-required\' | translate }}\n \n \n \n \n tb.rulenode.body-template \n \n \n {{ \'tb.rulenode.body-template-required\' | translate }}\n \n \n \n \n'}),h("design:paramtypes",[o.Store,i.FormBuilder])],r)}(a.RuleNodeConfigurationComponent),De=function(){function e(){}return e=b([t.NgModule({declarations:[Re,we,Oe],imports:[r.CommonModule,a.SharedModule,oe],exports:[Re,we,Oe]})],e)}(),Ke=function(){function e(e){!function(e){e.setTranslation("en_US",{tb:{rulenode:{"create-entity-if-not-exists":"Create new entity if not exists","create-entity-if-not-exists-hint":"Create a new entity set above if it does not exist.","entity-name-pattern":"Name pattern","entity-name-pattern-required":"Name pattern is required","entity-name-pattern-hint":"Name pattern, use ${metaKeyName} to substitute variables from metadata","entity-type-pattern":"Type pattern","entity-type-pattern-required":"Type pattern is required","entity-type-pattern-hint":"Type pattern, use ${metaKeyName} to substitute variables from metadata","entity-cache-expiration":"Entities cache expiration time (sec)","entity-cache-expiration-hint":"Specifies maximum time interval allowed to store found entity records. 0 value means that records will never expire.","entity-cache-expiration-required":"Entities cache expiration time is required.","entity-cache-expiration-range":"Entities cache expiration time should be greater than or equal to 0.","customer-name-pattern":"Customer name pattern","customer-name-pattern-required":"Customer name pattern is required","create-customer-if-not-exists":"Create new customer if not exists","customer-cache-expiration":"Customers cache expiration time (sec)","customer-name-pattern-hint":"Customer name pattern, use ${metaKeyName} to substitute variables from metadata","customer-cache-expiration-hint":"Specifies maximum time interval allowed to store found customer records. 0 value means that records will never expire.","customer-cache-expiration-required":"Customers cache expiration time is required.","customer-cache-expiration-range":"Customers cache expiration time should be greater than or equal to 0.","start-interval":"Start Interval","end-interval":"End Interval","start-interval-time-unit":"Start Interval Time Unit","end-interval-time-unit":"End Interval Time Unit","fetch-mode":"Fetch mode","fetch-mode-hint":"If selected fetch mode 'ALL' you able to choose telemetry sampling order.","order-by":"Order by","order-by-hint":"Select to choose telemetry sampling order.",limit:"Limit","limit-hint":"Min limit value is 2, max - 1000. In case you want to fetch a single entry, select fetch mode 'FIRST' or 'LAST'.","time-unit-milliseconds":"Milliseconds","time-unit-seconds":"Seconds","time-unit-minutes":"Minutes","time-unit-hours":"Hours","time-unit-days":"Days","time-value-range":"Time value should be in a range from 1 to 2147483647.","start-interval-value-required":"Start interval value is required.","end-interval-value-required":"End interval value is required.",filter:"Filter",switch:"Switch","message-type":"Message type","message-type-required":"Message type is required.","message-types-filter":"Message types filter","no-message-types-found":"No message types found","no-message-type-matching":"'{{messageType}}' not found.","create-new-message-type":"Create a new one!","message-types-required":"Message types are required.","client-attributes":"Client attributes","shared-attributes":"Shared attributes","server-attributes":"Server attributes","latest-timeseries":"Latest timeseries","data-keys":"Message data","metadata-keys":"Message metadata","relations-query":"Relations query","device-relations-query":"Device relations query","max-relation-level":"Max relation level","relation-type-pattern":"Relation type pattern","relation-type-pattern-hint":"Relation type pattern, use ${metaKeyName} to substitute variables from metadata","relation-type-pattern-required":"Relation type pattern is required","relation-types-list":"Relation types to propagate","relation-types-list-hint":"If Propagate relation types are not selected, alarms will be propagated without filtering by relation type.","unlimited-level":"Unlimited level","latest-telemetry":"Latest telemetry","attr-mapping":"Attributes mapping","source-attribute":"Source attribute","source-attribute-required":"Source attribute is required.","source-telemetry":"Source telemetry","source-telemetry-required":"Source telemetry is required.","target-attribute":"Target attribute","target-attribute-required":"Target attribute is required.","attr-mapping-required":"At least one attribute mapping should be specified.","fields-mapping":"Fields mapping","fields-mapping-required":"At least one field mapping should be specified.","source-field":"Source field","source-field-required":"Source field is required.","originator-source":"Originator source","originator-customer":"Customer","originator-tenant":"Tenant","originator-related":"Related","originator-alarm-originator":"Alarm Originator","clone-message":"Clone message",transform:"Transform","default-ttl":"Default TTL in seconds","default-ttl-required":"Default TTL is required.","min-default-ttl-message":"Only 0 minimum TTL is allowed.","message-count":"Message count (0 - unlimited)","message-count-required":"Message count is required.","min-message-count-message":"Only 0 minimum message count is allowed.","period-seconds":"Period in seconds","period-seconds-required":"Period is required.","use-metadata-period-in-seconds-patterns":"Use metadata period in seconds pattern","use-metadata-period-in-seconds-patterns-hint":"If selected, rule node use period in seconds interval pattern from message metadata assuming that intervals are in the seconds.","period-in-seconds-pattern":"Period in seconds metadata pattern","period-in-seconds-pattern-required":"Period in seconds pattern is required","period-in-seconds-pattern-hint":"Period in seconds pattern, use ${metaKeyName} to substitute variables from metadata","min-period-seconds-message":"Only 1 second minimum period is allowed.",originator:"Originator","message-body":"Message body","message-metadata":"Message metadata",generate:"Generate","test-generator-function":"Test generator function",generator:"Generator","test-filter-function":"Test filter function","test-switch-function":"Test switch function","test-transformer-function":"Test transformer function",transformer:"Transformer","alarm-create-condition":"Alarm create condition","test-condition-function":"Test condition function","alarm-clear-condition":"Alarm clear condition","alarm-details-builder":"Alarm details builder","test-details-function":"Test details function","alarm-type":"Alarm type","alarm-type-required":"Alarm type is required.","alarm-severity":"Alarm severity","alarm-severity-required":"Alarm severity is required","alarm-status-filter":"Alarm status filter","alarm-status-list-empty":"Alarm status list is empty","no-alarm-status-matching":"No alarm status matching were found.",propagate:"Propagate",condition:"Condition",details:"Details","to-string":"To string","test-to-string-function":"Test to string function","from-template":"From Template","from-template-required":"From Template is required","from-template-hint":"From address template, use ${metaKeyName} to substitute variables from metadata","to-template":"To Template","to-template-required":"To Template is required","mail-address-list-template-hint":"Comma separated address list, use ${metaKeyName} to substitute variables from metadata","cc-template":"Cc Template","bcc-template":"Bcc Template","subject-template":"Subject Template","subject-template-required":"Subject Template is required","subject-template-hint":"Mail subject template, use ${metaKeyName} to substitute variables from metadata","body-template":"Body Template","body-template-required":"Body Template is required","body-template-hint":"Mail body template, use ${metaKeyName} to substitute variables from metadata","request-id-metadata-attribute":"Request Id Metadata attribute name","timeout-sec":"Timeout in seconds","timeout-required":"Timeout is required","min-timeout-message":"Only 0 minimum timeout value is allowed.","endpoint-url-pattern":"Endpoint URL pattern","endpoint-url-pattern-required":"Endpoint URL pattern is required","endpoint-url-pattern-hint":"HTTP URL address pattern, use ${metaKeyName} to substitute variables from metadata","request-method":"Request method","use-simple-client-http-factory":"Use simple client HTTP factory","read-timeout":"Read timeout in millis","read-timeout-hint":"The value of 0 means an infinite timeout","max-parallel-requests-count":"Max number of parallel requests","max-parallel-requests-count-hint":"The value of 0 specifies no limit in parallel processing",headers:"Headers","headers-hint":"Use ${metaKeyName} in header/value fields to substitute variables from metadata",header:"Header","header-required":"Header is required",value:"Value","value-required":"Value is required","topic-pattern":"Topic pattern","topic-pattern-required":"Topic pattern is required","mqtt-topic-pattern-hint":"MQTT topic pattern, use ${metaKeyName} to substitute variables from metadata","bootstrap-servers":"Bootstrap servers","bootstrap-servers-required":"Bootstrap servers value is required","other-properties":"Other properties",key:"Key","key-required":"Key is required",retries:"Automatically retry times if fails","min-retries-message":"Only 0 minimum retries is allowed.","batch-size-bytes":"Produces batch size in bytes","min-batch-size-bytes-message":"Only 0 minimum batch size is allowed.","linger-ms":"Time to buffer locally (ms)","min-linger-ms-message":"Only 0 ms minimum value is allowed.","buffer-memory-bytes":"Client buffer max size in bytes","min-buffer-memory-message":"Only 0 minimum buffer size is allowed.",acks:"Number of acknowledgments","key-serializer":"Key serializer","key-serializer-required":"Key serializer is required","value-serializer":"Value serializer","value-serializer-required":"Value serializer is required","topic-arn-pattern":"Topic ARN pattern","topic-arn-pattern-required":"Topic ARN pattern is required","topic-arn-pattern-hint":"Topic ARN pattern, use ${metaKeyName} to substitute variables from metadata","aws-access-key-id":"AWS Access Key ID","aws-access-key-id-required":"AWS Access Key ID is required","aws-secret-access-key":"AWS Secret Access Key","aws-secret-access-key-required":"AWS Secret Access Key is required","aws-region":"AWS Region","aws-region-required":"AWS Region is required","exchange-name-pattern":"Exchange name pattern","routing-key-pattern":"Routing key pattern","message-properties":"Message properties",host:"Host","host-required":"Host is required",port:"Port","port-required":"Port is required","port-range":"Port should be in a range from 1 to 65535.","virtual-host":"Virtual host",username:"Username",password:"Password","automatic-recovery":"Automatic recovery","connection-timeout-ms":"Connection timeout (ms)","min-connection-timeout-ms-message":"Only 0 ms minimum value is allowed.","handshake-timeout-ms":"Handshake timeout (ms)","min-handshake-timeout-ms-message":"Only 0 ms minimum value is allowed.","client-properties":"Client properties","queue-url-pattern":"Queue URL pattern","queue-url-pattern-required":"Queue URL pattern is required","queue-url-pattern-hint":"Queue URL pattern, use ${metaKeyName} to substitute variables from metadata","delay-seconds":"Delay (seconds)","min-delay-seconds-message":"Only 0 seconds minimum value is allowed.","max-delay-seconds-message":"Only 900 seconds maximum value is allowed.",name:"Name","name-required":"Name is required","queue-type":"Queue type","sqs-queue-standard":"Standard","sqs-queue-fifo":"FIFO","gcp-project-id":"GCP project ID","gcp-project-id-required":"GCP project ID is required","gcp-service-account-key":"GCP service account key file","gcp-service-account-key-required":"GCP service account key file is required","pubsub-topic-name":"Topic name","pubsub-topic-name-required":"Topic name is required","message-attributes":"Message attributes","message-attributes-hint":"Use ${metaKeyName} in name/value fields to substitute variables from metadata","connect-timeout":"Connection timeout (sec)","connect-timeout-required":"Connection timeout is required.","connect-timeout-range":"Connection timeout should be in a range from 1 to 200.","client-id":"Client ID","clean-session":"Clean session","enable-ssl":"Enable SSL",credentials:"Credentials","credentials-type":"Credentials type","credentials-type-required":"Credentials type is required.","credentials-anonymous":"Anonymous","credentials-basic":"Basic","credentials-pem":"PEM","username-required":"Username is required.","password-required":"Password is required.","ca-cert":"CA certificate file *","private-key":"Private key file *",cert:"Certificate file *","no-file":"No file selected.","drop-file":"Drop a file or click to select a file to upload.","private-key-password":"Private key password","use-system-smtp-settings":"Use system SMTP settings","use-metadata-interval-patterns":"Use metadata interval patterns","use-metadata-interval-patterns-hint":"If selected, rule node use start and end interval patterns from message metadata assuming that intervals are in the milliseconds.","use-message-alarm-data":"Use message alarm data","check-all-keys":"Check that all selected keys are present","check-all-keys-hint":"If selected, checks that all specified keys are present in the message data and metadata.","check-relation-to-specific-entity":"Check relation to specific entity","check-relation-hint":"Checks existence of relation to specific entity or to any entity based on direction and relation type.","delete-relation-to-specific-entity":"Delete relation to specific entity","delete-relation-hint":"Deletes relation from the originator of the incoming message to the specified entity or list of entities based on direction and type.","remove-current-relations":"Remove current relations","remove-current-relations-hint":"Removes current relations from the originator of the incoming message based on direction and type.","change-originator-to-related-entity":"Change originator to related entity","change-originator-to-related-entity-hint":"Used to process submitted message as a message from another entity.","start-interval-pattern":"Start interval pattern","end-interval-pattern":"End interval pattern","start-interval-pattern-required":"Start interval pattern is required","end-interval-pattern-required":"End interval pattern is required","start-interval-pattern-hint":"Start interval pattern, use ${metaKeyName} to substitute variables from metadata","end-interval-pattern-hint":"End interval pattern, use ${metaKeyName} to substitute variables from metadata","smtp-protocol":"Protocol","smtp-host":"SMTP host","smtp-host-required":"SMTP host is required.","smtp-port":"SMTP port","smtp-port-required":"You must supply a smtp port.","smtp-port-range":"SMTP port should be in a range from 1 to 65535.","timeout-msec":"Timeout ms","min-timeout-msec-message":"Only 0 ms minimum value is allowed.","enter-username":"Enter username","enter-password":"Enter password","enable-tls":"Enable TLS","tls-version":"TLS version","enable-proxy":"Enable proxy","proxy-host":"Proxy host","proxy-host-required":"Proxy host is required.","proxy-port":"Proxy port","proxy-port-required":"Proxy port is required.","proxy-port-range":"Proxy port should be in a range from 1 to 65535.","proxy-user":"Proxy user","proxy-password":"Proxy password","min-period-0-seconds-message":"Only 0 second minimum period is allowed.","max-pending-messages":"Maximum pending messages","max-pending-messages-required":"Maximum pending messages is required.","max-pending-messages-range":"Maximum pending messages should be in a range from 1 to 100000.","originator-types-filter":"Originator types filter","interval-seconds":"Interval in seconds","interval-seconds-required":"Interval is required.","min-interval-seconds-message":"Only 1 second minimum interval is allowed.","output-timeseries-key-prefix":"Output timeseries key prefix","output-timeseries-key-prefix-required":"Output timeseries key prefix required.","separator-hint":'You should press "enter" to complete field input.',"entity-details":"Select entity details:","entity-details-title":"Title","entity-details-country":"Country","entity-details-state":"State","entity-details-zip":"Zip","entity-details-address":"Address","entity-details-address2":"Address2","entity-details-additional_info":"Additional Info","entity-details-phone":"Phone","entity-details-email":"Email","add-to-metadata":"Add selected details to message metadata","add-to-metadata-hint":"If selected, adds the selected details keys to the message metadata instead of message data.","entity-details-list-empty":"No entity details selected.","no-entity-details-matching":"No entity details matching were found.","custom-table-name":"Custom table name","custom-table-name-required":"Table Name is required","custom-table-hint":"You should enter the table name without prefix 'cs_tb_'.","message-field":"Message field","message-field-required":"Message field is required.","table-col":"Table column","table-col-required":"Table column is required.","latitude-key-name":"Latitude key name","longitude-key-name":"Longitude key name","latitude-key-name-required":"Latitude key name is required.","longitude-key-name-required":"Longitude key name is required.","fetch-perimeter-info-from-message-metadata":"Fetch perimeter information from message metadata","perimeter-circle":"Circle","perimeter-polygon":"Polygon","perimeter-type":"Perimeter type","circle-center-latitude":"Center latitude","circle-center-latitude-required":"Center latitude is required.","circle-center-longitude":"Center longitude","circle-center-longitude-required":"Center longitude is required.","range-unit-meter":"Meter","range-unit-kilometer":"Kilometer","range-unit-foot":"Foot","range-unit-mile":"Mile","range-unit-nautical-mile":"Nautical mile","range-units":"Range units",range:"Range","range-required":"Range is required.","polygon-definition":"Polygon definition","polygon-definition-required":"Polygon definition is required.","polygon-definition-hint":"Please, use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].","min-inside-duration":"Minimal inside duration","min-inside-duration-value-required":"Minimal inside duration is required","min-inside-duration-time-unit":"Minimal inside duration time unit","min-outside-duration":"Minimal outside duration","min-outside-duration-value-required":"Minimal outside duration is required","min-outside-duration-time-unit":"Minimal outside duration time unit","tell-failure-if-absent":"Tell Failure","tell-failure-if-absent-hint":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"get-latest-value-with-ts":"Fetch Latest telemetry with Timestamp","get-latest-value-with-ts-hint":'If selected, latest telemetry values will be added to the outbound message metadata with timestamp, e.g: "temp": "{\\"ts\\":1574329385897,\\"value\\":42}"',"use-redis-queue":"Use redis queue for message persistence","trim-redis-queue":"Trim redis queue","redis-queue-max-size":"Redis queue max size","add-metadata-key-values-as-kafka-headers":"Add Message metadata key-value pairs to Kafka record headers","add-metadata-key-values-as-kafka-headers-hint":"If selected, key-value pairs from message metadata will be added to the outgoing records headers as byte arrays with predefined charset encoding.","charset-encoding":"Charset encoding","charset-encoding-required":"Charset encoding is required.","charset-us-ascii":"US-ASCII","charset-iso-8859-1":"ISO-8859-1","charset-utf-8":"UTF-8","charset-utf-16be":"UTF-16BE","charset-utf-16le":"UTF-16LE","charset-utf-16":"UTF-16","select-queue-hint":"The queue name can be selected from a drop-down list or add a custom name."},"key-val":{key:"Key",value:"Value","remove-entry":"Remove entry","add-entry":"Add entry"}}},!0)}(e)}return e.ctorParameters=function(){return[{type:n.TranslateService}]},e=b([t.NgModule({declarations:[F],imports:[r.CommonModule,a.SharedModule],exports:[ye,Se,Pe,De,F]}),h("design:paramtypes",[n.TranslateService])],e)}();e.RuleNodeCoreConfigModule=Ke,e.ɵa=F,e.ɵb=ye,e.ɵba=ge,e.ɵbb=oe,e.ɵbc=te,e.ɵbd=re,e.ɵbe=ne,e.ɵbf=ae,e.ɵbg=Se,e.ɵbh=be,e.ɵbi=he,e.ɵbj=Ce,e.ɵbk=ve,e.ɵbl=Fe,e.ɵbm=Te,e.ɵbn=xe,e.ɵbo=qe,e.ɵbp=Pe,e.ɵbq=Ie,e.ɵbr=ke,e.ɵbs=Ne,e.ɵbt=Ve,e.ɵbu=Ee,e.ɵbv=Ae,e.ɵbw=Le,e.ɵbx=Me,e.ɵby=De,e.ɵbz=Re,e.ɵc=T,e.ɵca=we,e.ɵcb=Oe,e.ɵd=x,e.ɵe=q,e.ɵf=S,e.ɵg=I,e.ɵh=k,e.ɵi=N,e.ɵj=V,e.ɵk=E,e.ɵl=A,e.ɵm=L,e.ɵn=Y,e.ɵo=Z,e.ɵp=X,e.ɵq=ee,e.ɵr=ie,e.ɵs=le,e.ɵt=se,e.ɵu=me,e.ɵv=ue,e.ɵw=de,e.ɵx=pe,e.ɵy=ce,e.ɵz=fe,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=rulenode-core-config.umd.min.js.map
\ No newline at end of file
diff --git a/tools/pom.xml b/tools/pom.xml
index 25f26aeaa1..264221797e 100644
--- a/tools/pom.xml
+++ b/tools/pom.xml
@@ -20,7 +20,7 @@
4.0.0
org.thingsboard
- 3.0.0-SNAPSHOT
+ 3.0.1-SNAPSHOT
thingsboard
tools
diff --git a/transport/coap/build.gradle b/transport/coap/build.gradle
deleted file mode 100644
index 1a72b8b68e..0000000000
--- a/transport/coap/build.gradle
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import org.apache.tools.ant.filters.ReplaceTokens
-
-buildscript {
- ext {
- osPackageVersion = "3.8.0"
- }
- repositories {
- jcenter()
- }
- dependencies {
- classpath("com.netflix.nebula:gradle-ospackage-plugin:${osPackageVersion}")
- }
-}
-
-apply plugin: "nebula.ospackage"
-
-buildDir = projectBuildDir
-version = projectVersion
-distsDirName = "./"
-
-// OS Package plugin configuration
-ospackage {
- packageName = pkgName
- version = "${project.version}"
- release = 1
- os = LINUX
- type = BINARY
-
- into pkgInstallFolder
-
- user pkgName
- permissionGroup pkgName
-
- // Copy the actual .jar file
- from(mainJar) {
- // Strip the version from the jar filename
- rename { String fileName ->
- "${pkgName}.jar"
- }
- fileMode 0500
- into "bin"
- }
-
- // Copy the config files
- from("target/conf") {
- exclude "${pkgName}.conf"
- fileType CONFIG | NOREPLACE
- fileMode 0754
- into "conf"
- }
-
-}
-
-// Configure our RPM build task
-buildRpm {
-
- arch = NOARCH
-
- version = projectVersion.replace('-', '')
- archiveName = "${pkgName}.rpm"
-
- requires("java-1.8.0")
-
- from("target/conf") {
- include "${pkgName}.conf"
- filter(ReplaceTokens, tokens: ['pkg.platform': 'rpm'])
- fileType CONFIG | NOREPLACE
- fileMode 0754
- into "${pkgInstallFolder}/conf"
- }
-
- preInstall file("${buildDir}/control/rpm/preinst")
- postInstall file("${buildDir}/control/rpm/postinst")
- preUninstall file("${buildDir}/control/rpm/prerm")
- postUninstall file("${buildDir}/control/rpm/postrm")
-
- user pkgName
- permissionGroup pkgName
-
- // Copy the system unit files
- from("${buildDir}/control/${pkgName}.service") {
- addParentDirs = false
- fileMode 0644
- into "/usr/lib/systemd/system"
- }
-
- directory(pkgLogFolder, 0755)
- link("${pkgInstallFolder}/bin/${pkgName}.yml", "${pkgInstallFolder}/conf/${pkgName}.yml")
- link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
-}
-
-// Same as the buildRpm task
-buildDeb {
-
- arch = "all"
-
- archiveName = "${pkgName}.deb"
-
- requires("openjdk-8-jre").or("java8-runtime").or("oracle-java8-installer").or("openjdk-8-jre-headless")
-
- from("target/conf") {
- include "${pkgName}.conf"
- filter(ReplaceTokens, tokens: ['pkg.platform': 'deb'])
- fileType CONFIG | NOREPLACE
- fileMode 0754
- into "${pkgInstallFolder}/conf"
- }
-
- configurationFile("${pkgInstallFolder}/conf/${pkgName}.conf")
- configurationFile("${pkgInstallFolder}/conf/${pkgName}.yml")
- configurationFile("${pkgInstallFolder}/conf/logback.xml")
-
- preInstall file("${buildDir}/control/deb/preinst")
- postInstall file("${buildDir}/control/deb/postinst")
- preUninstall file("${buildDir}/control/deb/prerm")
- postUninstall file("${buildDir}/control/deb/postrm")
-
- user pkgName
- permissionGroup pkgName
-
- directory(pkgLogFolder, 0755)
- link("/etc/init.d/${pkgName}", "${pkgInstallFolder}/bin/${pkgName}.jar")
- link("${pkgInstallFolder}/bin/${pkgName}.yml", "${pkgInstallFolder}/conf/${pkgName}.yml")
- link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
-}
diff --git a/transport/coap/pom.xml b/transport/coap/pom.xml
index abdb507860..03d67c8e9c 100644
--- a/transport/coap/pom.xml
+++ b/transport/coap/pom.xml
@@ -20,7 +20,7 @@
4.0.0
org.thingsboard
- 3.0.0-SNAPSHOT
+ 3.0.1-SNAPSHOT
transport
org.thingsboard.transport
@@ -33,10 +33,15 @@
UTF-8
${basedir}/../..
+ java
+ false
+ process-resources
+ package
tb-coap-transport
- /var/log/${pkg.name}
- /usr/share/${pkg.name}
+ false
${project.build.directory}/windows
+ ThingsBoard CoAP Transport Service
+ org.thingsboard.server.coap.ThingsboardCoapTransportApplication
@@ -87,244 +92,30 @@
org.apache.maven.plugins
maven-resources-plugin
-
-
- copy-conf
- process-resources
-
- copy-resources
-
-
- ${project.build.directory}/conf
-
-
- src/main/resources
-
- logback.xml
-
- false
-
-
-
-
-
- copy-service-conf
- process-resources
-
- copy-resources
-
-
- ${project.build.directory}/conf
-
-
- src/main/conf
- true
-
-
-
- src/main/filters/unix.properties
-
-
-
-
- copy-win-conf
- process-resources
-
- copy-resources
-
-
- ${pkg.win.dist}/conf
-
-
- src/main/resources
-
- logback.xml
-
- false
-
-
- src/main/conf
-
- tb-coap-transport.conf
-
- true
-
-
-
- src/main/filters/windows.properties
-
-
-
-
- copy-control
- process-resources
-
- copy-resources
-
-
- ${project.build.directory}/control
-
-
- src/main/scripts/control
- true
-
-
-
- src/main/filters/unix.properties
-
-
-
-
- copy-windows-control
- process-resources
-
- copy-resources
-
-
- ${pkg.win.dist}
-
-
- src/main/scripts/windows
- true
-
-
-
- src/main/filters/windows.properties
-
-
-
-
org.apache.maven.plugins
maven-dependency-plugin
-
-
- copy-winsw-service
- package
-
- copy
-
-
-
-
- com.sun.winsw
- winsw
- bin
- exe
- service.exe
-
-
- ${pkg.win.dist}
-
-
-
org.apache.maven.plugins
maven-jar-plugin
-
-
- **/logback.xml
-
-
-
- ThingsBoard CoAP Transport Service
- ${project.version}
-
-
-
org.springframework.boot
spring-boot-maven-plugin
-
- org.thingsboard.server.coap.ThingsboardCoapTransportApplication
- boot
- ZIP
- true
- true
-
- ${pkg.installFolder}/conf
- ${pkg.unixLogFolder}
- ${pkg.name}.out
- ${pkg.name}
-
-
-
-
-
- repackage
-
-
-
org.thingsboard
gradle-maven-plugin
-
-
- build
- buildDeb
- buildRpm
-
-
- -PprojectBuildDir=${project.build.directory}
- -PprojectVersion=${project.version}
- -PmainJar=${project.build.directory}/${project.build.finalName}-boot.${project.packaging}
- -PpkgName=${pkg.name}
- -PpkgInstallFolder=${pkg.installFolder}
- -PpkgLogFolder=${pkg.unixLogFolder}
-
-
-
-
- package
-
- invoke
-
-
-
org.apache.maven.plugins
maven-assembly-plugin
-
- ${pkg.name}
-
- src/main/assembly/windows.xml
-
-
-
-
- assembly
- package
-
- single
-
-
-
org.apache.maven.plugins
maven-install-plugin
-
- ${project.build.directory}/${pkg.name}.deb
- ${project.artifactId}
- ${project.groupId}
- ${project.version}
- deb
- deb
-
-
-
- install-deb
- package
-
- install-file
-
-
-
@@ -332,7 +123,7 @@
jenkins
Jenkins Repository
- http://repo.jenkins-ci.org/releases
+ https://repo.jenkins-ci.org/releases
false
diff --git a/transport/coap/src/main/assembly/windows.xml b/transport/coap/src/main/assembly/windows.xml
deleted file mode 100644
index 3cd8ba35c1..0000000000
--- a/transport/coap/src/main/assembly/windows.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
- windows
-
-
- zip
-
-
-
-
-
- ${pkg.win.dist}
- logs
-
- */**
-
-
-
- ${pkg.win.dist}/conf
- conf
- windows
-
-
-
-
-
- ${project.build.directory}/${project.build.finalName}-boot.${project.packaging}
- lib
- ${pkg.name}.jar
-
-
- ${pkg.win.dist}/service.exe
-
- ${pkg.name}.exe
-
-
- ${pkg.win.dist}/service.xml
-
- ${pkg.name}.xml
- windows
-
-
- ${pkg.win.dist}/install.bat
-
- windows
-
-
- ${pkg.win.dist}/uninstall.bat
-
- windows
-
-
-
diff --git a/transport/coap/src/main/filters/unix.properties b/transport/coap/src/main/filters/unix.properties
deleted file mode 100644
index 8967278673..0000000000
--- a/transport/coap/src/main/filters/unix.properties
+++ /dev/null
@@ -1 +0,0 @@
-pkg.logFolder=${pkg.unixLogFolder}
\ No newline at end of file
diff --git a/transport/coap/src/main/filters/windows.properties b/transport/coap/src/main/filters/windows.properties
deleted file mode 100644
index a6e48d91ba..0000000000
--- a/transport/coap/src/main/filters/windows.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg.logFolder=${BASE}\\logs
-pkg.winWrapperLogFolder=%BASE%\\logs
diff --git a/transport/coap/src/main/resources/tb-coap-transport.yml b/transport/coap/src/main/resources/tb-coap-transport.yml
index 47a011c35f..621896cc06 100644
--- a/transport/coap/src/main/resources/tb-coap-transport.yml
+++ b/transport/coap/src/main/resources/tb-coap-transport.yml
@@ -155,19 +155,19 @@ queue:
pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}"
stats:
enabled: "${TB_QUEUE_RULE_ENGINE_STATS_ENABLED:true}"
- print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}"
+ print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:60000}"
queues:
- - name: "Main"
+ - name: "${TB_QUEUE_RE_MAIN_QUEUE_NAME:Main}"
topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb_rule_engine.main}"
poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}"
partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}"
pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}"
submit-strategy:
- type: "${TB_QUEUE_RE_MAIN_SUBMIT_STRATEGY_TYPE:BURST}" # BURST, BATCH, SEQUENTIAL_WITHIN_ORIGINATOR, SEQUENTIAL_WITHIN_TENANT, SEQUENTIAL
+ type: "${TB_QUEUE_RE_MAIN_SUBMIT_STRATEGY_TYPE:BURST}" # BURST, BATCH, SEQUENTIAL_BY_ORIGINATOR, SEQUENTIAL_BY_TENANT, SEQUENTIAL
# For BATCH only
batch-size: "${TB_QUEUE_RE_MAIN_SUBMIT_STRATEGY_BATCH_SIZE:1000}" # Maximum number of messages in batch
processing-strategy:
- type: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_TYPE:RETRY_FAILED_AND_TIMED_OUT}" # SKIP_ALL_FAILURES, RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
+ type: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_TYPE:SKIP_ALL_FAILURES}" # SKIP_ALL_FAILURES, RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
# For RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRIES:3}" # Number of retries, 0 is unlimited
failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
@@ -175,10 +175,10 @@ queue:
- name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}"
topic: "${TB_QUEUE_RE_HP_TOPIC:tb_rule_engine.hp}"
poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}"
- partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}"
+ partitions: "${TB_QUEUE_RE_HP_PARTITIONS:10}"
pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}"
submit-strategy:
- type: "${TB_QUEUE_RE_HP_SUBMIT_STRATEGY_TYPE:SEQUENTIAL_WITHIN_ORIGINATOR}" # BURST, BATCH, SEQUENTIAL_WITHIN_ORIGINATOR, SEQUENTIAL_WITHIN_TENANT, SEQUENTIAL
+ type: "${TB_QUEUE_RE_HP_SUBMIT_STRATEGY_TYPE:BURST}" # BURST, BATCH, SEQUENTIAL_BY_ORIGINATOR, SEQUENTIAL_BY_TENANT, SEQUENTIAL
# For BATCH only
batch-size: "${TB_QUEUE_RE_HP_SUBMIT_STRATEGY_BATCH_SIZE:100}" # Maximum number of messages in batch
processing-strategy:
@@ -187,6 +187,21 @@ queue:
retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRIES:0}" # Number of retries, 0 is unlimited
failure-percentage: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries;
+ - name: "${TB_QUEUE_RE_SQ_QUEUE_NAME:SequentialByOriginator}"
+ topic: "${TB_QUEUE_RE_SQ_TOPIC:tb_rule_engine.sq}"
+ poll-interval: "${TB_QUEUE_RE_SQ_POLL_INTERVAL_MS:25}"
+ partitions: "${TB_QUEUE_RE_SQ_PARTITIONS:10}"
+ pack-processing-timeout: "${TB_QUEUE_RE_SQ_PACK_PROCESSING_TIMEOUT_MS:60000}"
+ submit-strategy:
+ type: "${TB_QUEUE_RE_SQ_SUBMIT_STRATEGY_TYPE:SEQUENTIAL_BY_ORIGINATOR}" # BURST, BATCH, SEQUENTIAL_BY_ORIGINATOR, SEQUENTIAL_BY_TENANT, SEQUENTIAL
+ # For BATCH only
+ batch-size: "${TB_QUEUE_RE_SQ_SUBMIT_STRATEGY_BATCH_SIZE:100}" # Maximum number of messages in batch
+ processing-strategy:
+ type: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_TYPE:RETRY_FAILED_AND_TIMED_OUT}" # SKIP_ALL_FAILURES, RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
+ # For RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
+ retries: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_RETRIES:3}" # Number of retries, 0 is unlimited
+ failure-percentage: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
+ pause-between-retries: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries;
transport:
# For high priority notifications that require minimum latency and processing time
notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb_transport.notifications}"
diff --git a/transport/coap/src/main/scripts/control/deb/postinst b/transport/coap/src/main/scripts/control/deb/postinst
deleted file mode 100644
index 0767d3f2c7..0000000000
--- a/transport/coap/src/main/scripts/control/deb/postinst
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-chown -R ${pkg.user}: ${pkg.logFolder}
-chown -R ${pkg.user}: ${pkg.installFolder}
-update-rc.d ${pkg.name} defaults
-
diff --git a/transport/coap/src/main/scripts/control/deb/postrm b/transport/coap/src/main/scripts/control/deb/postrm
deleted file mode 100644
index 61865803c3..0000000000
--- a/transport/coap/src/main/scripts/control/deb/postrm
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-update-rc.d -f ${pkg.name} remove
diff --git a/transport/coap/src/main/scripts/control/deb/preinst b/transport/coap/src/main/scripts/control/deb/preinst
deleted file mode 100644
index d2ebea46d7..0000000000
--- a/transport/coap/src/main/scripts/control/deb/preinst
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-if ! getent group ${pkg.user} >/dev/null; then
- addgroup --system ${pkg.user}
-fi
-
-if ! getent passwd ${pkg.user} >/dev/null; then
- adduser --quiet \
- --system \
- --ingroup ${pkg.user} \
- --quiet \
- --disabled-login \
- --disabled-password \
- --home ${pkg.installFolder} \
- --no-create-home \
- -gecos "Thingsboard application" \
- ${pkg.user}
-fi
diff --git a/transport/coap/src/main/scripts/control/deb/prerm b/transport/coap/src/main/scripts/control/deb/prerm
deleted file mode 100644
index 898d3efd5c..0000000000
--- a/transport/coap/src/main/scripts/control/deb/prerm
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-if [ -e /var/run/${pkg.name}/${pkg.name}.pid ]; then
- service ${pkg.name} stop
-fi
diff --git a/transport/coap/src/main/scripts/control/rpm/postrm b/transport/coap/src/main/scripts/control/rpm/postrm
deleted file mode 100644
index 8e1f8a2048..0000000000
--- a/transport/coap/src/main/scripts/control/rpm/postrm
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-if [ $1 -ge 1 ] ; then
- # Package upgrade, not uninstall
- systemctl try-restart ${pkg.name}.service >/dev/null 2>&1 || :
-fi
diff --git a/transport/coap/src/main/scripts/control/rpm/preinst b/transport/coap/src/main/scripts/control/rpm/preinst
deleted file mode 100644
index db6306e4ac..0000000000
--- a/transport/coap/src/main/scripts/control/rpm/preinst
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-getent group ${pkg.user} >/dev/null || groupadd -r ${pkg.user}
-getent passwd ${pkg.user} >/dev/null || \
-useradd -d ${pkg.installFolder} -g ${pkg.user} -M -r ${pkg.user} -s /sbin/nologin \
--c "Thingsboard application"
diff --git a/transport/coap/src/main/scripts/control/rpm/prerm b/transport/coap/src/main/scripts/control/rpm/prerm
deleted file mode 100644
index accb487b8e..0000000000
--- a/transport/coap/src/main/scripts/control/rpm/prerm
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-if [ $1 -eq 0 ] ; then
- # Package removal, not upgrade
- systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :
-fi
diff --git a/transport/coap/src/main/scripts/control/tb-coap-transport.service b/transport/coap/src/main/scripts/control/tb-coap-transport.service
deleted file mode 100644
index 3fee5c88df..0000000000
--- a/transport/coap/src/main/scripts/control/tb-coap-transport.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=${pkg.name}
-After=syslog.target
-
-[Service]
-User=${pkg.user}
-ExecStart=${pkg.installFolder}/bin/${pkg.name}.jar
-SuccessExitStatus=143
-
-[Install]
-WantedBy=multi-user.target
diff --git a/transport/coap/src/main/scripts/windows/install.bat b/transport/coap/src/main/scripts/windows/install.bat
deleted file mode 100644
index bce7f62942..0000000000
--- a/transport/coap/src/main/scripts/windows/install.bat
+++ /dev/null
@@ -1,31 +0,0 @@
-@ECHO OFF
-
-setlocal ENABLEEXTENSIONS
-
-@ECHO Detecting Java version installed.
-:CHECK_JAVA
-for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k"
-@ECHO CurrentVersion %jver%
-
-if %jver% NEQ 18 GOTO JAVA_NOT_INSTALLED
-
-:JAVA_INSTALLED
-
-@ECHO Java 1.8 found!
-@ECHO Installing ${pkg.name} ...
-
-"%BASE%"${pkg.name}.exe install
-
-@ECHO ${pkg.name} installed successfully!
-
-GOTO END
-
-:JAVA_NOT_INSTALLED
-@ECHO Java 1.8 is not installed. Only Java 1.8 is supported
-@ECHO Please go to https://adoptopenjdk.net/index.html and install Java 1.8. Then retry installation.
-PAUSE
-GOTO END
-
-:END
-
-
diff --git a/transport/coap/src/main/scripts/windows/service.xml b/transport/coap/src/main/scripts/windows/service.xml
deleted file mode 100644
index f7b9d307c8..0000000000
--- a/transport/coap/src/main/scripts/windows/service.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
- ${pkg.name}
- ${project.name}
- ${project.description}
- %BASE%\conf
- ${pkg.winWrapperLogFolder}
- rotate
-
- java
- -Xloggc:%BASE%\logs\gc.log
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:+PrintGCDetails
- -XX:+PrintGCDateStamps
- -XX:+PrintHeapAtGC
- -XX:+PrintTenuringDistribution
- -XX:+PrintGCApplicationStoppedTime
- -XX:+UseGCLogFileRotation
- -XX:NumberOfGCLogFiles=10
- -XX:GCLogFileSize=10M
- -XX:-UseBiasedLocking
- -XX:+UseTLAB
- -XX:+ResizeTLAB
- -XX:+PerfDisableSharedMem
- -XX:+UseCondCardMark
- -XX:CMSWaitDuration=10000
- -XX:+UseParNewGC
- -XX:+UseConcMarkSweepGC
- -XX:+CMSParallelRemarkEnabled
- -XX:+CMSParallelInitialMarkEnabled
- -XX:+CMSEdenChunksRecordAlways
- -XX:CMSInitiatingOccupancyFraction=75
- -XX:+UseCMSInitiatingOccupancyOnly
- -jar
- %BASE%\lib\${pkg.name}.jar
-
-
diff --git a/transport/coap/src/main/scripts/windows/uninstall.bat b/transport/coap/src/main/scripts/windows/uninstall.bat
deleted file mode 100644
index 634b88ddff..0000000000
--- a/transport/coap/src/main/scripts/windows/uninstall.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-
-@ECHO Stopping ${pkg.name} ...
-net stop ${pkg.name}
-
-@ECHO Uninstalling ${pkg.name} ...
-"%~dp0"${pkg.name}.exe uninstall
-
-@ECHO DONE.
\ No newline at end of file
diff --git a/transport/http/build.gradle b/transport/http/build.gradle
deleted file mode 100644
index 1a72b8b68e..0000000000
--- a/transport/http/build.gradle
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import org.apache.tools.ant.filters.ReplaceTokens
-
-buildscript {
- ext {
- osPackageVersion = "3.8.0"
- }
- repositories {
- jcenter()
- }
- dependencies {
- classpath("com.netflix.nebula:gradle-ospackage-plugin:${osPackageVersion}")
- }
-}
-
-apply plugin: "nebula.ospackage"
-
-buildDir = projectBuildDir
-version = projectVersion
-distsDirName = "./"
-
-// OS Package plugin configuration
-ospackage {
- packageName = pkgName
- version = "${project.version}"
- release = 1
- os = LINUX
- type = BINARY
-
- into pkgInstallFolder
-
- user pkgName
- permissionGroup pkgName
-
- // Copy the actual .jar file
- from(mainJar) {
- // Strip the version from the jar filename
- rename { String fileName ->
- "${pkgName}.jar"
- }
- fileMode 0500
- into "bin"
- }
-
- // Copy the config files
- from("target/conf") {
- exclude "${pkgName}.conf"
- fileType CONFIG | NOREPLACE
- fileMode 0754
- into "conf"
- }
-
-}
-
-// Configure our RPM build task
-buildRpm {
-
- arch = NOARCH
-
- version = projectVersion.replace('-', '')
- archiveName = "${pkgName}.rpm"
-
- requires("java-1.8.0")
-
- from("target/conf") {
- include "${pkgName}.conf"
- filter(ReplaceTokens, tokens: ['pkg.platform': 'rpm'])
- fileType CONFIG | NOREPLACE
- fileMode 0754
- into "${pkgInstallFolder}/conf"
- }
-
- preInstall file("${buildDir}/control/rpm/preinst")
- postInstall file("${buildDir}/control/rpm/postinst")
- preUninstall file("${buildDir}/control/rpm/prerm")
- postUninstall file("${buildDir}/control/rpm/postrm")
-
- user pkgName
- permissionGroup pkgName
-
- // Copy the system unit files
- from("${buildDir}/control/${pkgName}.service") {
- addParentDirs = false
- fileMode 0644
- into "/usr/lib/systemd/system"
- }
-
- directory(pkgLogFolder, 0755)
- link("${pkgInstallFolder}/bin/${pkgName}.yml", "${pkgInstallFolder}/conf/${pkgName}.yml")
- link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
-}
-
-// Same as the buildRpm task
-buildDeb {
-
- arch = "all"
-
- archiveName = "${pkgName}.deb"
-
- requires("openjdk-8-jre").or("java8-runtime").or("oracle-java8-installer").or("openjdk-8-jre-headless")
-
- from("target/conf") {
- include "${pkgName}.conf"
- filter(ReplaceTokens, tokens: ['pkg.platform': 'deb'])
- fileType CONFIG | NOREPLACE
- fileMode 0754
- into "${pkgInstallFolder}/conf"
- }
-
- configurationFile("${pkgInstallFolder}/conf/${pkgName}.conf")
- configurationFile("${pkgInstallFolder}/conf/${pkgName}.yml")
- configurationFile("${pkgInstallFolder}/conf/logback.xml")
-
- preInstall file("${buildDir}/control/deb/preinst")
- postInstall file("${buildDir}/control/deb/postinst")
- preUninstall file("${buildDir}/control/deb/prerm")
- postUninstall file("${buildDir}/control/deb/postrm")
-
- user pkgName
- permissionGroup pkgName
-
- directory(pkgLogFolder, 0755)
- link("/etc/init.d/${pkgName}", "${pkgInstallFolder}/bin/${pkgName}.jar")
- link("${pkgInstallFolder}/bin/${pkgName}.yml", "${pkgInstallFolder}/conf/${pkgName}.yml")
- link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
-}
diff --git a/transport/http/pom.xml b/transport/http/pom.xml
index b50d6e0bdd..903e4f92a0 100644
--- a/transport/http/pom.xml
+++ b/transport/http/pom.xml
@@ -20,7 +20,7 @@
4.0.0
org.thingsboard
- 3.0.0-SNAPSHOT
+ 3.0.1-SNAPSHOT
transport
org.thingsboard.transport
@@ -33,10 +33,15 @@
UTF-8
${basedir}/../..
+ java
+ false
+ process-resources
+ package
tb-http-transport
- /var/log/${pkg.name}
- /usr/share/${pkg.name}
+ false
${project.build.directory}/windows
+ ThingsBoard HTTP Transport Service
+ org.thingsboard.server.http.ThingsboardHttpTransportApplication
@@ -87,244 +92,30 @@
org.apache.maven.plugins
maven-resources-plugin
-
-
- copy-conf
- process-resources
-
- copy-resources
-
-
- ${project.build.directory}/conf
-
-
- src/main/resources
-
- logback.xml
-
- false
-
-
-
-
-
- copy-service-conf
- process-resources
-
- copy-resources
-
-
- ${project.build.directory}/conf
-
-
- src/main/conf
- true
-
-
-
- src/main/filters/unix.properties
-
-
-
-
- copy-win-conf
- process-resources
-
- copy-resources
-
-
- ${pkg.win.dist}/conf
-
-
- src/main/resources
-
- logback.xml
-
- false
-
-
- src/main/conf
-
- tb-http-transport.conf
-
- true
-
-
-
- src/main/filters/windows.properties
-
-
-
-
- copy-control
- process-resources
-
- copy-resources
-
-
- ${project.build.directory}/control
-
-
- src/main/scripts/control
- true
-
-
-
- src/main/filters/unix.properties
-
-
-
-
- copy-windows-control
- process-resources
-
- copy-resources
-
-
- ${pkg.win.dist}
-
-
- src/main/scripts/windows
- true
-
-
-
- src/main/filters/windows.properties
-
-
-
-
org.apache.maven.plugins
maven-dependency-plugin
-
-
- copy-winsw-service
- package
-
- copy
-
-
-
-
- com.sun.winsw
- winsw
- bin
- exe
- service.exe
-
-
- ${pkg.win.dist}
-
-
-
org.apache.maven.plugins
maven-jar-plugin
-
-
- **/logback.xml
-
-
-
- ThingsBoard HTTP Transport Service
- ${project.version}
-
-
-
org.springframework.boot
spring-boot-maven-plugin
-
- org.thingsboard.server.http.ThingsboardHttpTransportApplication
- boot
- ZIP
- true
- true
-
- ${pkg.installFolder}/conf
- ${pkg.unixLogFolder}
- ${pkg.name}.out
- ${pkg.name}
-
-
-
-
-
- repackage
-
-
-
org.thingsboard
gradle-maven-plugin
-
-
- build
- buildDeb
- buildRpm
-
-
- -PprojectBuildDir=${project.build.directory}
- -PprojectVersion=${project.version}
- -PmainJar=${project.build.directory}/${project.build.finalName}-boot.${project.packaging}
- -PpkgName=${pkg.name}
- -PpkgInstallFolder=${pkg.installFolder}
- -PpkgLogFolder=${pkg.unixLogFolder}
-
-
-
-
- package
-
- invoke
-
-
-
org.apache.maven.plugins
maven-assembly-plugin
-
- ${pkg.name}
-
- src/main/assembly/windows.xml
-
-
-
-
- assembly
- package
-
- single
-
-
-
org.apache.maven.plugins
maven-install-plugin
-
- ${project.build.directory}/${pkg.name}.deb
- ${project.artifactId}
- ${project.groupId}
- ${project.version}
- deb
- deb
-
-
-
- install-deb
- package
-
- install-file
-
-
-
@@ -332,7 +123,7 @@
jenkins
Jenkins Repository
- http://repo.jenkins-ci.org/releases
+ https://repo.jenkins-ci.org/releases
false
diff --git a/transport/http/src/main/assembly/windows.xml b/transport/http/src/main/assembly/windows.xml
deleted file mode 100644
index 3cd8ba35c1..0000000000
--- a/transport/http/src/main/assembly/windows.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
- windows
-
-
- zip
-
-
-
-
-
- ${pkg.win.dist}
- logs
-
- */**
-
-
-
- ${pkg.win.dist}/conf
- conf
- windows
-
-
-
-
-
- ${project.build.directory}/${project.build.finalName}-boot.${project.packaging}
- lib
- ${pkg.name}.jar
-
-
- ${pkg.win.dist}/service.exe
-
- ${pkg.name}.exe
-
-
- ${pkg.win.dist}/service.xml
-
- ${pkg.name}.xml
- windows
-
-
- ${pkg.win.dist}/install.bat
-
- windows
-
-
- ${pkg.win.dist}/uninstall.bat
-
- windows
-
-
-
diff --git a/transport/http/src/main/filters/unix.properties b/transport/http/src/main/filters/unix.properties
deleted file mode 100644
index 8967278673..0000000000
--- a/transport/http/src/main/filters/unix.properties
+++ /dev/null
@@ -1 +0,0 @@
-pkg.logFolder=${pkg.unixLogFolder}
\ No newline at end of file
diff --git a/transport/http/src/main/filters/windows.properties b/transport/http/src/main/filters/windows.properties
deleted file mode 100644
index a6e48d91ba..0000000000
--- a/transport/http/src/main/filters/windows.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg.logFolder=${BASE}\\logs
-pkg.winWrapperLogFolder=%BASE%\\logs
diff --git a/transport/http/src/main/resources/tb-http-transport.yml b/transport/http/src/main/resources/tb-http-transport.yml
index 55236dd84f..15fe5c61b5 100644
--- a/transport/http/src/main/resources/tb-http-transport.yml
+++ b/transport/http/src/main/resources/tb-http-transport.yml
@@ -156,19 +156,19 @@ queue:
pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}"
stats:
enabled: "${TB_QUEUE_RULE_ENGINE_STATS_ENABLED:true}"
- print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}"
+ print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:60000}"
queues:
- - name: "Main"
+ - name: "${TB_QUEUE_RE_MAIN_QUEUE_NAME:Main}"
topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb_rule_engine.main}"
poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}"
partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}"
pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}"
submit-strategy:
- type: "${TB_QUEUE_RE_MAIN_SUBMIT_STRATEGY_TYPE:BURST}" # BURST, BATCH, SEQUENTIAL_WITHIN_ORIGINATOR, SEQUENTIAL_WITHIN_TENANT, SEQUENTIAL
+ type: "${TB_QUEUE_RE_MAIN_SUBMIT_STRATEGY_TYPE:BURST}" # BURST, BATCH, SEQUENTIAL_BY_ORIGINATOR, SEQUENTIAL_BY_TENANT, SEQUENTIAL
# For BATCH only
batch-size: "${TB_QUEUE_RE_MAIN_SUBMIT_STRATEGY_BATCH_SIZE:1000}" # Maximum number of messages in batch
processing-strategy:
- type: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_TYPE:RETRY_FAILED_AND_TIMED_OUT}" # SKIP_ALL_FAILURES, RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
+ type: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_TYPE:SKIP_ALL_FAILURES}" # SKIP_ALL_FAILURES, RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
# For RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRIES:3}" # Number of retries, 0 is unlimited
failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
@@ -176,10 +176,10 @@ queue:
- name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}"
topic: "${TB_QUEUE_RE_HP_TOPIC:tb_rule_engine.hp}"
poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}"
- partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}"
+ partitions: "${TB_QUEUE_RE_HP_PARTITIONS:10}"
pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}"
submit-strategy:
- type: "${TB_QUEUE_RE_HP_SUBMIT_STRATEGY_TYPE:SEQUENTIAL_WITHIN_ORIGINATOR}" # BURST, BATCH, SEQUENTIAL_WITHIN_ORIGINATOR, SEQUENTIAL_WITHIN_TENANT, SEQUENTIAL
+ type: "${TB_QUEUE_RE_HP_SUBMIT_STRATEGY_TYPE:BURST}" # BURST, BATCH, SEQUENTIAL_BY_ORIGINATOR, SEQUENTIAL_BY_TENANT, SEQUENTIAL
# For BATCH only
batch-size: "${TB_QUEUE_RE_HP_SUBMIT_STRATEGY_BATCH_SIZE:100}" # Maximum number of messages in batch
processing-strategy:
@@ -188,6 +188,21 @@ queue:
retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRIES:0}" # Number of retries, 0 is unlimited
failure-percentage: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries;
+ - name: "${TB_QUEUE_RE_SQ_QUEUE_NAME:SequentialByOriginator}"
+ topic: "${TB_QUEUE_RE_SQ_TOPIC:tb_rule_engine.sq}"
+ poll-interval: "${TB_QUEUE_RE_SQ_POLL_INTERVAL_MS:25}"
+ partitions: "${TB_QUEUE_RE_SQ_PARTITIONS:10}"
+ pack-processing-timeout: "${TB_QUEUE_RE_SQ_PACK_PROCESSING_TIMEOUT_MS:60000}"
+ submit-strategy:
+ type: "${TB_QUEUE_RE_SQ_SUBMIT_STRATEGY_TYPE:SEQUENTIAL_BY_ORIGINATOR}" # BURST, BATCH, SEQUENTIAL_BY_ORIGINATOR, SEQUENTIAL_BY_TENANT, SEQUENTIAL
+ # For BATCH only
+ batch-size: "${TB_QUEUE_RE_SQ_SUBMIT_STRATEGY_BATCH_SIZE:100}" # Maximum number of messages in batch
+ processing-strategy:
+ type: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_TYPE:RETRY_FAILED_AND_TIMED_OUT}" # SKIP_ALL_FAILURES, RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
+ # For RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
+ retries: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_RETRIES:3}" # Number of retries, 0 is unlimited
+ failure-percentage: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
+ pause-between-retries: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries;
transport:
# For high priority notifications that require minimum latency and processing time
notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb_transport.notifications}"
diff --git a/transport/http/src/main/scripts/control/deb/postinst b/transport/http/src/main/scripts/control/deb/postinst
deleted file mode 100644
index 0767d3f2c7..0000000000
--- a/transport/http/src/main/scripts/control/deb/postinst
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-chown -R ${pkg.user}: ${pkg.logFolder}
-chown -R ${pkg.user}: ${pkg.installFolder}
-update-rc.d ${pkg.name} defaults
-
diff --git a/transport/http/src/main/scripts/control/deb/postrm b/transport/http/src/main/scripts/control/deb/postrm
deleted file mode 100644
index 61865803c3..0000000000
--- a/transport/http/src/main/scripts/control/deb/postrm
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-update-rc.d -f ${pkg.name} remove
diff --git a/transport/http/src/main/scripts/control/deb/preinst b/transport/http/src/main/scripts/control/deb/preinst
deleted file mode 100644
index d2ebea46d7..0000000000
--- a/transport/http/src/main/scripts/control/deb/preinst
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-if ! getent group ${pkg.user} >/dev/null; then
- addgroup --system ${pkg.user}
-fi
-
-if ! getent passwd ${pkg.user} >/dev/null; then
- adduser --quiet \
- --system \
- --ingroup ${pkg.user} \
- --quiet \
- --disabled-login \
- --disabled-password \
- --home ${pkg.installFolder} \
- --no-create-home \
- -gecos "Thingsboard application" \
- ${pkg.user}
-fi
diff --git a/transport/http/src/main/scripts/control/deb/prerm b/transport/http/src/main/scripts/control/deb/prerm
deleted file mode 100644
index 898d3efd5c..0000000000
--- a/transport/http/src/main/scripts/control/deb/prerm
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-if [ -e /var/run/${pkg.name}/${pkg.name}.pid ]; then
- service ${pkg.name} stop
-fi
diff --git a/transport/http/src/main/scripts/control/rpm/postinst b/transport/http/src/main/scripts/control/rpm/postinst
deleted file mode 100644
index d8021e2dd9..0000000000
--- a/transport/http/src/main/scripts/control/rpm/postinst
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-chown -R ${pkg.user}: ${pkg.logFolder}
-chown -R ${pkg.user}: ${pkg.installFolder}
-
-if [ $1 -eq 1 ] ; then
- # Initial installation
- systemctl --no-reload enable ${pkg.name}.service >/dev/null 2>&1 || :
-fi
diff --git a/transport/http/src/main/scripts/control/rpm/postrm b/transport/http/src/main/scripts/control/rpm/postrm
deleted file mode 100644
index 8e1f8a2048..0000000000
--- a/transport/http/src/main/scripts/control/rpm/postrm
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-if [ $1 -ge 1 ] ; then
- # Package upgrade, not uninstall
- systemctl try-restart ${pkg.name}.service >/dev/null 2>&1 || :
-fi
diff --git a/transport/http/src/main/scripts/control/rpm/preinst b/transport/http/src/main/scripts/control/rpm/preinst
deleted file mode 100644
index db6306e4ac..0000000000
--- a/transport/http/src/main/scripts/control/rpm/preinst
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-getent group ${pkg.user} >/dev/null || groupadd -r ${pkg.user}
-getent passwd ${pkg.user} >/dev/null || \
-useradd -d ${pkg.installFolder} -g ${pkg.user} -M -r ${pkg.user} -s /sbin/nologin \
--c "Thingsboard application"
diff --git a/transport/http/src/main/scripts/control/rpm/prerm b/transport/http/src/main/scripts/control/rpm/prerm
deleted file mode 100644
index accb487b8e..0000000000
--- a/transport/http/src/main/scripts/control/rpm/prerm
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-if [ $1 -eq 0 ] ; then
- # Package removal, not upgrade
- systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :
-fi
diff --git a/transport/http/src/main/scripts/control/tb-http-transport.service b/transport/http/src/main/scripts/control/tb-http-transport.service
deleted file mode 100644
index 3fee5c88df..0000000000
--- a/transport/http/src/main/scripts/control/tb-http-transport.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=${pkg.name}
-After=syslog.target
-
-[Service]
-User=${pkg.user}
-ExecStart=${pkg.installFolder}/bin/${pkg.name}.jar
-SuccessExitStatus=143
-
-[Install]
-WantedBy=multi-user.target
diff --git a/transport/http/src/main/scripts/windows/install.bat b/transport/http/src/main/scripts/windows/install.bat
deleted file mode 100644
index bce7f62942..0000000000
--- a/transport/http/src/main/scripts/windows/install.bat
+++ /dev/null
@@ -1,31 +0,0 @@
-@ECHO OFF
-
-setlocal ENABLEEXTENSIONS
-
-@ECHO Detecting Java version installed.
-:CHECK_JAVA
-for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k"
-@ECHO CurrentVersion %jver%
-
-if %jver% NEQ 18 GOTO JAVA_NOT_INSTALLED
-
-:JAVA_INSTALLED
-
-@ECHO Java 1.8 found!
-@ECHO Installing ${pkg.name} ...
-
-"%BASE%"${pkg.name}.exe install
-
-@ECHO ${pkg.name} installed successfully!
-
-GOTO END
-
-:JAVA_NOT_INSTALLED
-@ECHO Java 1.8 is not installed. Only Java 1.8 is supported
-@ECHO Please go to https://adoptopenjdk.net/index.html and install Java 1.8. Then retry installation.
-PAUSE
-GOTO END
-
-:END
-
-
diff --git a/transport/http/src/main/scripts/windows/service.xml b/transport/http/src/main/scripts/windows/service.xml
deleted file mode 100644
index f7b9d307c8..0000000000
--- a/transport/http/src/main/scripts/windows/service.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
- ${pkg.name}
- ${project.name}
- ${project.description}
- %BASE%\conf
- ${pkg.winWrapperLogFolder}
- rotate
-
- java
- -Xloggc:%BASE%\logs\gc.log
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:+PrintGCDetails
- -XX:+PrintGCDateStamps
- -XX:+PrintHeapAtGC
- -XX:+PrintTenuringDistribution
- -XX:+PrintGCApplicationStoppedTime
- -XX:+UseGCLogFileRotation
- -XX:NumberOfGCLogFiles=10
- -XX:GCLogFileSize=10M
- -XX:-UseBiasedLocking
- -XX:+UseTLAB
- -XX:+ResizeTLAB
- -XX:+PerfDisableSharedMem
- -XX:+UseCondCardMark
- -XX:CMSWaitDuration=10000
- -XX:+UseParNewGC
- -XX:+UseConcMarkSweepGC
- -XX:+CMSParallelRemarkEnabled
- -XX:+CMSParallelInitialMarkEnabled
- -XX:+CMSEdenChunksRecordAlways
- -XX:CMSInitiatingOccupancyFraction=75
- -XX:+UseCMSInitiatingOccupancyOnly
- -jar
- %BASE%\lib\${pkg.name}.jar
-
-
diff --git a/transport/http/src/main/scripts/windows/uninstall.bat b/transport/http/src/main/scripts/windows/uninstall.bat
deleted file mode 100644
index 634b88ddff..0000000000
--- a/transport/http/src/main/scripts/windows/uninstall.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-
-@ECHO Stopping ${pkg.name} ...
-net stop ${pkg.name}
-
-@ECHO Uninstalling ${pkg.name} ...
-"%~dp0"${pkg.name}.exe uninstall
-
-@ECHO DONE.
\ No newline at end of file
diff --git a/transport/mqtt/build.gradle b/transport/mqtt/build.gradle
deleted file mode 100644
index 1a72b8b68e..0000000000
--- a/transport/mqtt/build.gradle
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import org.apache.tools.ant.filters.ReplaceTokens
-
-buildscript {
- ext {
- osPackageVersion = "3.8.0"
- }
- repositories {
- jcenter()
- }
- dependencies {
- classpath("com.netflix.nebula:gradle-ospackage-plugin:${osPackageVersion}")
- }
-}
-
-apply plugin: "nebula.ospackage"
-
-buildDir = projectBuildDir
-version = projectVersion
-distsDirName = "./"
-
-// OS Package plugin configuration
-ospackage {
- packageName = pkgName
- version = "${project.version}"
- release = 1
- os = LINUX
- type = BINARY
-
- into pkgInstallFolder
-
- user pkgName
- permissionGroup pkgName
-
- // Copy the actual .jar file
- from(mainJar) {
- // Strip the version from the jar filename
- rename { String fileName ->
- "${pkgName}.jar"
- }
- fileMode 0500
- into "bin"
- }
-
- // Copy the config files
- from("target/conf") {
- exclude "${pkgName}.conf"
- fileType CONFIG | NOREPLACE
- fileMode 0754
- into "conf"
- }
-
-}
-
-// Configure our RPM build task
-buildRpm {
-
- arch = NOARCH
-
- version = projectVersion.replace('-', '')
- archiveName = "${pkgName}.rpm"
-
- requires("java-1.8.0")
-
- from("target/conf") {
- include "${pkgName}.conf"
- filter(ReplaceTokens, tokens: ['pkg.platform': 'rpm'])
- fileType CONFIG | NOREPLACE
- fileMode 0754
- into "${pkgInstallFolder}/conf"
- }
-
- preInstall file("${buildDir}/control/rpm/preinst")
- postInstall file("${buildDir}/control/rpm/postinst")
- preUninstall file("${buildDir}/control/rpm/prerm")
- postUninstall file("${buildDir}/control/rpm/postrm")
-
- user pkgName
- permissionGroup pkgName
-
- // Copy the system unit files
- from("${buildDir}/control/${pkgName}.service") {
- addParentDirs = false
- fileMode 0644
- into "/usr/lib/systemd/system"
- }
-
- directory(pkgLogFolder, 0755)
- link("${pkgInstallFolder}/bin/${pkgName}.yml", "${pkgInstallFolder}/conf/${pkgName}.yml")
- link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
-}
-
-// Same as the buildRpm task
-buildDeb {
-
- arch = "all"
-
- archiveName = "${pkgName}.deb"
-
- requires("openjdk-8-jre").or("java8-runtime").or("oracle-java8-installer").or("openjdk-8-jre-headless")
-
- from("target/conf") {
- include "${pkgName}.conf"
- filter(ReplaceTokens, tokens: ['pkg.platform': 'deb'])
- fileType CONFIG | NOREPLACE
- fileMode 0754
- into "${pkgInstallFolder}/conf"
- }
-
- configurationFile("${pkgInstallFolder}/conf/${pkgName}.conf")
- configurationFile("${pkgInstallFolder}/conf/${pkgName}.yml")
- configurationFile("${pkgInstallFolder}/conf/logback.xml")
-
- preInstall file("${buildDir}/control/deb/preinst")
- postInstall file("${buildDir}/control/deb/postinst")
- preUninstall file("${buildDir}/control/deb/prerm")
- postUninstall file("${buildDir}/control/deb/postrm")
-
- user pkgName
- permissionGroup pkgName
-
- directory(pkgLogFolder, 0755)
- link("/etc/init.d/${pkgName}", "${pkgInstallFolder}/bin/${pkgName}.jar")
- link("${pkgInstallFolder}/bin/${pkgName}.yml", "${pkgInstallFolder}/conf/${pkgName}.yml")
- link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
-}
diff --git a/transport/mqtt/pom.xml b/transport/mqtt/pom.xml
index 3bc142c90f..c245f8f3a8 100644
--- a/transport/mqtt/pom.xml
+++ b/transport/mqtt/pom.xml
@@ -20,7 +20,7 @@
4.0.0
org.thingsboard
- 3.0.0-SNAPSHOT
+ 3.0.1-SNAPSHOT
transport
org.thingsboard.transport
@@ -33,10 +33,15 @@
UTF-8
${basedir}/../..
+ java
+ false
+ process-resources
+ package
tb-mqtt-transport
- /var/log/${pkg.name}
- /usr/share/${pkg.name}
+ false
${project.build.directory}/windows
+ ThingsBoard MQTT Transport Service
+ org.thingsboard.server.mqtt.ThingsboardMqttTransportApplication
@@ -87,244 +92,30 @@
org.apache.maven.plugins
maven-resources-plugin
-
-
- copy-conf
- process-resources
-
- copy-resources
-
-
- ${project.build.directory}/conf
-
-
- src/main/resources
-
- logback.xml
-
- false
-
-
-
-
-
- copy-service-conf
- process-resources
-
- copy-resources
-
-
- ${project.build.directory}/conf
-
-
- src/main/conf
- true
-
-
-
- src/main/filters/unix.properties
-
-
-
-
- copy-win-conf
- process-resources
-
- copy-resources
-
-
- ${pkg.win.dist}/conf
-
-
- src/main/resources
-
- logback.xml
-
- false
-
-
- src/main/conf
-
- tb-mqtt-transport.conf
-
- true
-
-
-
- src/main/filters/windows.properties
-
-
-
-
- copy-control
- process-resources
-
- copy-resources
-
-
- ${project.build.directory}/control
-
-
- src/main/scripts/control
- true
-
-
-
- src/main/filters/unix.properties
-
-
-
-
- copy-windows-control
- process-resources
-
- copy-resources
-
-
- ${pkg.win.dist}
-
-
- src/main/scripts/windows
- true
-
-
-
- src/main/filters/windows.properties
-
-
-
-
org.apache.maven.plugins
maven-dependency-plugin
-
-
- copy-winsw-service
- package
-
- copy
-
-
-
-
- com.sun.winsw
- winsw
- bin
- exe
- service.exe
-
-
- ${pkg.win.dist}
-
-
-
org.apache.maven.plugins
maven-jar-plugin
-
-
- **/logback.xml
-
-
-
- ThingsBoard MQTT Transport Service
- ${project.version}
-
-
-
org.springframework.boot
spring-boot-maven-plugin
-
- org.thingsboard.server.mqtt.ThingsboardMqttTransportApplication
- boot
- ZIP
- true
- true
-
- ${pkg.installFolder}/conf
- ${pkg.unixLogFolder}
- ${pkg.name}.out
- ${pkg.name}
-
-
-
-
-
- repackage
-
-
-
org.thingsboard
gradle-maven-plugin
-
-
- build
- buildDeb
- buildRpm
-
-
- -PprojectBuildDir=${project.build.directory}
- -PprojectVersion=${project.version}
- -PmainJar=${project.build.directory}/${project.build.finalName}-boot.${project.packaging}
- -PpkgName=${pkg.name}
- -PpkgInstallFolder=${pkg.installFolder}
- -PpkgLogFolder=${pkg.unixLogFolder}
-
-
-
-
- package
-
- invoke
-
-
-
org.apache.maven.plugins
maven-assembly-plugin
-
- ${pkg.name}
-
- src/main/assembly/windows.xml
-
-
-
-
- assembly
- package
-
- single
-
-
-
org.apache.maven.plugins
maven-install-plugin
-
- ${project.build.directory}/${pkg.name}.deb
- ${project.artifactId}
- ${project.groupId}
- ${project.version}
- deb
- deb
-
-
-
- install-deb
- package
-
- install-file
-
-
-
@@ -332,7 +123,7 @@
jenkins
Jenkins Repository
- http://repo.jenkins-ci.org/releases
+ https://repo.jenkins-ci.org/releases
false
diff --git a/transport/mqtt/src/main/assembly/windows.xml b/transport/mqtt/src/main/assembly/windows.xml
deleted file mode 100644
index 3cd8ba35c1..0000000000
--- a/transport/mqtt/src/main/assembly/windows.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
- windows
-
-
- zip
-
-
-
-
-
- ${pkg.win.dist}
- logs
-
- */**
-
-
-
- ${pkg.win.dist}/conf
- conf
- windows
-
-
-
-
-
- ${project.build.directory}/${project.build.finalName}-boot.${project.packaging}
- lib
- ${pkg.name}.jar
-
-
- ${pkg.win.dist}/service.exe
-
- ${pkg.name}.exe
-
-
- ${pkg.win.dist}/service.xml
-
- ${pkg.name}.xml
- windows
-
-
- ${pkg.win.dist}/install.bat
-
- windows
-
-
- ${pkg.win.dist}/uninstall.bat
-
- windows
-
-
-
diff --git a/transport/mqtt/src/main/filters/unix.properties b/transport/mqtt/src/main/filters/unix.properties
deleted file mode 100644
index 8967278673..0000000000
--- a/transport/mqtt/src/main/filters/unix.properties
+++ /dev/null
@@ -1 +0,0 @@
-pkg.logFolder=${pkg.unixLogFolder}
\ No newline at end of file
diff --git a/transport/mqtt/src/main/filters/windows.properties b/transport/mqtt/src/main/filters/windows.properties
deleted file mode 100644
index a6e48d91ba..0000000000
--- a/transport/mqtt/src/main/filters/windows.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg.logFolder=${BASE}\\logs
-pkg.winWrapperLogFolder=%BASE%\\logs
diff --git a/transport/mqtt/src/main/resources/tb-mqtt-transport.yml b/transport/mqtt/src/main/resources/tb-mqtt-transport.yml
index 3872a6d0b3..579a73e508 100644
--- a/transport/mqtt/src/main/resources/tb-mqtt-transport.yml
+++ b/transport/mqtt/src/main/resources/tb-mqtt-transport.yml
@@ -176,19 +176,19 @@ queue:
pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}"
stats:
enabled: "${TB_QUEUE_RULE_ENGINE_STATS_ENABLED:true}"
- print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}"
+ print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:60000}"
queues:
- - name: "Main"
+ - name: "${TB_QUEUE_RE_MAIN_QUEUE_NAME:Main}"
topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb_rule_engine.main}"
poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}"
partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}"
pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}"
submit-strategy:
- type: "${TB_QUEUE_RE_MAIN_SUBMIT_STRATEGY_TYPE:BURST}" # BURST, BATCH, SEQUENTIAL_WITHIN_ORIGINATOR, SEQUENTIAL_WITHIN_TENANT, SEQUENTIAL
+ type: "${TB_QUEUE_RE_MAIN_SUBMIT_STRATEGY_TYPE:BURST}" # BURST, BATCH, SEQUENTIAL_BY_ORIGINATOR, SEQUENTIAL_BY_TENANT, SEQUENTIAL
# For BATCH only
batch-size: "${TB_QUEUE_RE_MAIN_SUBMIT_STRATEGY_BATCH_SIZE:1000}" # Maximum number of messages in batch
processing-strategy:
- type: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_TYPE:RETRY_FAILED_AND_TIMED_OUT}" # SKIP_ALL_FAILURES, RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
+ type: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_TYPE:SKIP_ALL_FAILURES}" # SKIP_ALL_FAILURES, RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
# For RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRIES:3}" # Number of retries, 0 is unlimited
failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
@@ -196,10 +196,10 @@ queue:
- name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}"
topic: "${TB_QUEUE_RE_HP_TOPIC:tb_rule_engine.hp}"
poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}"
- partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}"
+ partitions: "${TB_QUEUE_RE_HP_PARTITIONS:10}"
pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}"
submit-strategy:
- type: "${TB_QUEUE_RE_HP_SUBMIT_STRATEGY_TYPE:SEQUENTIAL_WITHIN_ORIGINATOR}" # BURST, BATCH, SEQUENTIAL_WITHIN_ORIGINATOR, SEQUENTIAL_WITHIN_TENANT, SEQUENTIAL
+ type: "${TB_QUEUE_RE_HP_SUBMIT_STRATEGY_TYPE:BURST}" # BURST, BATCH, SEQUENTIAL_BY_ORIGINATOR, SEQUENTIAL_BY_TENANT, SEQUENTIAL
# For BATCH only
batch-size: "${TB_QUEUE_RE_HP_SUBMIT_STRATEGY_BATCH_SIZE:100}" # Maximum number of messages in batch
processing-strategy:
@@ -208,6 +208,21 @@ queue:
retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRIES:0}" # Number of retries, 0 is unlimited
failure-percentage: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries;
+ - name: "${TB_QUEUE_RE_SQ_QUEUE_NAME:SequentialByOriginator}"
+ topic: "${TB_QUEUE_RE_SQ_TOPIC:tb_rule_engine.sq}"
+ poll-interval: "${TB_QUEUE_RE_SQ_POLL_INTERVAL_MS:25}"
+ partitions: "${TB_QUEUE_RE_SQ_PARTITIONS:10}"
+ pack-processing-timeout: "${TB_QUEUE_RE_SQ_PACK_PROCESSING_TIMEOUT_MS:60000}"
+ submit-strategy:
+ type: "${TB_QUEUE_RE_SQ_SUBMIT_STRATEGY_TYPE:SEQUENTIAL_BY_ORIGINATOR}" # BURST, BATCH, SEQUENTIAL_BY_ORIGINATOR, SEQUENTIAL_BY_TENANT, SEQUENTIAL
+ # For BATCH only
+ batch-size: "${TB_QUEUE_RE_SQ_SUBMIT_STRATEGY_BATCH_SIZE:100}" # Maximum number of messages in batch
+ processing-strategy:
+ type: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_TYPE:RETRY_FAILED_AND_TIMED_OUT}" # SKIP_ALL_FAILURES, RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
+ # For RETRY_ALL, RETRY_FAILED, RETRY_TIMED_OUT, RETRY_FAILED_AND_TIMED_OUT
+ retries: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_RETRIES:3}" # Number of retries, 0 is unlimited
+ failure-percentage: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
+ pause-between-retries: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries;
transport:
# For high priority notifications that require minimum latency and processing time
notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb_transport.notifications}"
diff --git a/transport/mqtt/src/main/scripts/control/deb/postinst b/transport/mqtt/src/main/scripts/control/deb/postinst
deleted file mode 100644
index 0767d3f2c7..0000000000
--- a/transport/mqtt/src/main/scripts/control/deb/postinst
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-chown -R ${pkg.user}: ${pkg.logFolder}
-chown -R ${pkg.user}: ${pkg.installFolder}
-update-rc.d ${pkg.name} defaults
-
diff --git a/transport/mqtt/src/main/scripts/control/deb/postrm b/transport/mqtt/src/main/scripts/control/deb/postrm
deleted file mode 100644
index 61865803c3..0000000000
--- a/transport/mqtt/src/main/scripts/control/deb/postrm
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-update-rc.d -f ${pkg.name} remove
diff --git a/transport/mqtt/src/main/scripts/control/deb/preinst b/transport/mqtt/src/main/scripts/control/deb/preinst
deleted file mode 100644
index d2ebea46d7..0000000000
--- a/transport/mqtt/src/main/scripts/control/deb/preinst
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-if ! getent group ${pkg.user} >/dev/null; then
- addgroup --system ${pkg.user}
-fi
-
-if ! getent passwd ${pkg.user} >/dev/null; then
- adduser --quiet \
- --system \
- --ingroup ${pkg.user} \
- --quiet \
- --disabled-login \
- --disabled-password \
- --home ${pkg.installFolder} \
- --no-create-home \
- -gecos "Thingsboard application" \
- ${pkg.user}
-fi
diff --git a/transport/mqtt/src/main/scripts/control/deb/prerm b/transport/mqtt/src/main/scripts/control/deb/prerm
deleted file mode 100644
index 898d3efd5c..0000000000
--- a/transport/mqtt/src/main/scripts/control/deb/prerm
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-if [ -e /var/run/${pkg.name}/${pkg.name}.pid ]; then
- service ${pkg.name} stop
-fi
diff --git a/transport/mqtt/src/main/scripts/control/rpm/postinst b/transport/mqtt/src/main/scripts/control/rpm/postinst
deleted file mode 100644
index d8021e2dd9..0000000000
--- a/transport/mqtt/src/main/scripts/control/rpm/postinst
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-chown -R ${pkg.user}: ${pkg.logFolder}
-chown -R ${pkg.user}: ${pkg.installFolder}
-
-if [ $1 -eq 1 ] ; then
- # Initial installation
- systemctl --no-reload enable ${pkg.name}.service >/dev/null 2>&1 || :
-fi
diff --git a/transport/mqtt/src/main/scripts/control/rpm/postrm b/transport/mqtt/src/main/scripts/control/rpm/postrm
deleted file mode 100644
index 8e1f8a2048..0000000000
--- a/transport/mqtt/src/main/scripts/control/rpm/postrm
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-if [ $1 -ge 1 ] ; then
- # Package upgrade, not uninstall
- systemctl try-restart ${pkg.name}.service >/dev/null 2>&1 || :
-fi
diff --git a/transport/mqtt/src/main/scripts/control/rpm/preinst b/transport/mqtt/src/main/scripts/control/rpm/preinst
deleted file mode 100644
index db6306e4ac..0000000000
--- a/transport/mqtt/src/main/scripts/control/rpm/preinst
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-getent group ${pkg.user} >/dev/null || groupadd -r ${pkg.user}
-getent passwd ${pkg.user} >/dev/null || \
-useradd -d ${pkg.installFolder} -g ${pkg.user} -M -r ${pkg.user} -s /sbin/nologin \
--c "Thingsboard application"
diff --git a/transport/mqtt/src/main/scripts/control/rpm/prerm b/transport/mqtt/src/main/scripts/control/rpm/prerm
deleted file mode 100644
index accb487b8e..0000000000
--- a/transport/mqtt/src/main/scripts/control/rpm/prerm
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-if [ $1 -eq 0 ] ; then
- # Package removal, not upgrade
- systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :
-fi
diff --git a/transport/mqtt/src/main/scripts/control/tb-mqtt-transport.service b/transport/mqtt/src/main/scripts/control/tb-mqtt-transport.service
deleted file mode 100644
index 3fee5c88df..0000000000
--- a/transport/mqtt/src/main/scripts/control/tb-mqtt-transport.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=${pkg.name}
-After=syslog.target
-
-[Service]
-User=${pkg.user}
-ExecStart=${pkg.installFolder}/bin/${pkg.name}.jar
-SuccessExitStatus=143
-
-[Install]
-WantedBy=multi-user.target
diff --git a/transport/mqtt/src/main/scripts/windows/install.bat b/transport/mqtt/src/main/scripts/windows/install.bat
deleted file mode 100644
index bce7f62942..0000000000
--- a/transport/mqtt/src/main/scripts/windows/install.bat
+++ /dev/null
@@ -1,31 +0,0 @@
-@ECHO OFF
-
-setlocal ENABLEEXTENSIONS
-
-@ECHO Detecting Java version installed.
-:CHECK_JAVA
-for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k"
-@ECHO CurrentVersion %jver%
-
-if %jver% NEQ 18 GOTO JAVA_NOT_INSTALLED
-
-:JAVA_INSTALLED
-
-@ECHO Java 1.8 found!
-@ECHO Installing ${pkg.name} ...
-
-"%BASE%"${pkg.name}.exe install
-
-@ECHO ${pkg.name} installed successfully!
-
-GOTO END
-
-:JAVA_NOT_INSTALLED
-@ECHO Java 1.8 is not installed. Only Java 1.8 is supported
-@ECHO Please go to https://adoptopenjdk.net/index.html and install Java 1.8. Then retry installation.
-PAUSE
-GOTO END
-
-:END
-
-
diff --git a/transport/mqtt/src/main/scripts/windows/service.xml b/transport/mqtt/src/main/scripts/windows/service.xml
deleted file mode 100644
index f7b9d307c8..0000000000
--- a/transport/mqtt/src/main/scripts/windows/service.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
- ${pkg.name}
- ${project.name}
- ${project.description}
- %BASE%\conf
- ${pkg.winWrapperLogFolder}
- rotate
-
- java
- -Xloggc:%BASE%\logs\gc.log
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:+PrintGCDetails
- -XX:+PrintGCDateStamps
- -XX:+PrintHeapAtGC
- -XX:+PrintTenuringDistribution
- -XX:+PrintGCApplicationStoppedTime
- -XX:+UseGCLogFileRotation
- -XX:NumberOfGCLogFiles=10
- -XX:GCLogFileSize=10M
- -XX:-UseBiasedLocking
- -XX:+UseTLAB
- -XX:+ResizeTLAB
- -XX:+PerfDisableSharedMem
- -XX:+UseCondCardMark
- -XX:CMSWaitDuration=10000
- -XX:+UseParNewGC
- -XX:+UseConcMarkSweepGC
- -XX:+CMSParallelRemarkEnabled
- -XX:+CMSParallelInitialMarkEnabled
- -XX:+CMSEdenChunksRecordAlways
- -XX:CMSInitiatingOccupancyFraction=75
- -XX:+UseCMSInitiatingOccupancyOnly
- -jar
- %BASE%\lib\${pkg.name}.jar
-
-
diff --git a/transport/mqtt/src/main/scripts/windows/uninstall.bat b/transport/mqtt/src/main/scripts/windows/uninstall.bat
deleted file mode 100644
index 634b88ddff..0000000000
--- a/transport/mqtt/src/main/scripts/windows/uninstall.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-
-@ECHO Stopping ${pkg.name} ...
-net stop ${pkg.name}
-
-@ECHO Uninstalling ${pkg.name} ...
-"%~dp0"${pkg.name}.exe uninstall
-
-@ECHO DONE.
\ No newline at end of file
diff --git a/transport/pom.xml b/transport/pom.xml
index 2bdec26dff..ed4ca7b44c 100644
--- a/transport/pom.xml
+++ b/transport/pom.xml
@@ -20,7 +20,7 @@
4.0.0
org.thingsboard
- 3.0.0-SNAPSHOT
+ 3.0.1-SNAPSHOT
thingsboard
transport
diff --git a/ui-ngx/package-lock.json b/ui-ngx/package-lock.json
index 184bc9337a..b9d50ac759 100644
--- a/ui-ngx/package-lock.json
+++ b/ui-ngx/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "thingsboard",
- "version": "3.0.0",
+ "version": "3.0.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -40,21 +40,21 @@
}
},
"@angular-devkit/build-angular": {
- "version": "0.901.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.4.tgz",
- "integrity": "sha512-Vod4bc6d38fuvqauIDQxKMe9hKW9m4QNzPKxEc+Dv5Xkv95WaGzkbUVu8M8t4E//sDDMpmcPdYOXSdR27WBi2Q==",
+ "version": "0.901.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.6.tgz",
+ "integrity": "sha512-jgLFKRWSZIZZVb7fiGC0SHzBFYBkDOLTw/MRta8p81o8WzLe0uxGVP4RlIj6fZxv3Vvb1NZI4HHrgt/jASaj4A==",
"dev": true,
"requires": {
- "@angular-devkit/architect": "0.901.4",
- "@angular-devkit/build-optimizer": "0.901.4",
- "@angular-devkit/build-webpack": "0.901.4",
- "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/architect": "0.901.6",
+ "@angular-devkit/build-optimizer": "0.901.6",
+ "@angular-devkit/build-webpack": "0.901.6",
+ "@angular-devkit/core": "9.1.6",
"@babel/core": "7.9.0",
"@babel/generator": "7.9.3",
"@babel/preset-env": "7.9.0",
"@babel/template": "7.8.6",
"@jsdevtools/coverage-istanbul-loader": "3.0.3",
- "@ngtools/webpack": "9.1.4",
+ "@ngtools/webpack": "9.1.6",
"ajv": "6.12.0",
"autoprefixer": "9.7.4",
"babel-loader": "8.0.6",
@@ -105,23 +105,23 @@
"webpack-merge": "4.2.2",
"webpack-sources": "1.4.3",
"webpack-subresource-integrity": "1.4.0",
- "worker-plugin": "4.0.2"
+ "worker-plugin": "4.0.3"
},
"dependencies": {
"@angular-devkit/architect": {
- "version": "0.901.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.4.tgz",
- "integrity": "sha512-w4RMj7eLhUSh70HUy5tW4EXjLQFXk0Lfr9WiSy5gvPGp+zzYxknI+Wn4Xid1wU/WS+4tuMv5nJIaNaH2sABESQ==",
+ "version": "0.901.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.6.tgz",
+ "integrity": "sha512-0pWzn10gCZxMCrS62NlD38qE2R7l5fPfBuNylntNqvzw9L7iS1ARgqMlAKn8KLaNG6FrXONmgUWHsV987ZICIw==",
"dev": true,
"requires": {
- "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/core": "9.1.6",
"rxjs": "6.5.4"
}
},
"@angular-devkit/core": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz",
- "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz",
+ "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==",
"dev": true,
"requires": {
"ajv": "6.12.0",
@@ -161,9 +161,9 @@
}
},
"@angular-devkit/build-optimizer": {
- "version": "0.901.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.4.tgz",
- "integrity": "sha512-iDMlNRwd8ICMBKnycfw55hdnL5kCiqUjQn+aK/4uOMJMz49tiYMNJAaznXX2BFKmYSmbapKjEbzx9yMYRi9Y7w==",
+ "version": "0.901.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.6.tgz",
+ "integrity": "sha512-M0H9SrOq4QOYqGCIguGQDWizf+XL7whJjBtYHxI7jEjtzar3zkTFgzZ/znv49R56Zch1niH0mBgtDxCFFWqarQ==",
"dev": true,
"requires": {
"loader-utils": "2.0.0",
@@ -182,30 +182,30 @@
}
},
"@angular-devkit/build-webpack": {
- "version": "0.901.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.4.tgz",
- "integrity": "sha512-YBOufI4TGAtIDCS6erFygYJX/fkd8xwI58d+7iFIBmtIJC4/fpGjX6qkHMCBgh8HXAkEPSORBCYQn9O44J1ZXQ==",
+ "version": "0.901.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.6.tgz",
+ "integrity": "sha512-jEk850AtIFK+xbXXiloVvueXTbJOL1mANR2UBrmWk7V4Bct+gHVerdXjn9vo1Tsd8BgemUYAcqvLldCx9MSDTg==",
"dev": true,
"requires": {
- "@angular-devkit/architect": "0.901.4",
- "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/architect": "0.901.6",
+ "@angular-devkit/core": "9.1.6",
"rxjs": "6.5.4"
},
"dependencies": {
"@angular-devkit/architect": {
- "version": "0.901.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.4.tgz",
- "integrity": "sha512-w4RMj7eLhUSh70HUy5tW4EXjLQFXk0Lfr9WiSy5gvPGp+zzYxknI+Wn4Xid1wU/WS+4tuMv5nJIaNaH2sABESQ==",
+ "version": "0.901.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.6.tgz",
+ "integrity": "sha512-0pWzn10gCZxMCrS62NlD38qE2R7l5fPfBuNylntNqvzw9L7iS1ARgqMlAKn8KLaNG6FrXONmgUWHsV987ZICIw==",
"dev": true,
"requires": {
- "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/core": "9.1.6",
"rxjs": "6.5.4"
}
},
"@angular-devkit/core": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz",
- "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz",
+ "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==",
"dev": true,
"requires": {
"ajv": "6.12.0",
@@ -251,20 +251,20 @@
}
},
"@angular-devkit/schematics": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-9.1.4.tgz",
- "integrity": "sha512-RAbdnUEZ3JTLmWSBiXT5trsVx8Fi72fxN9CiRaluM09Cytg6BUc1wC5XCO0YPvhI400+3Ro1nwjPXezjg7LXzQ==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-9.1.6.tgz",
+ "integrity": "sha512-twS8Sxc6NG4A0n7yITugP0snIMJ2Rm6aOGkckomWjZAP1fPo8pup8EFGc5wUBAtAOM3DJBphEnskpwEWCkBaLg==",
"dev": true,
"requires": {
- "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/core": "9.1.6",
"ora": "4.0.3",
"rxjs": "6.5.4"
},
"dependencies": {
"@angular-devkit/core": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz",
- "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz",
+ "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==",
"dev": true,
"requires": {
"ajv": "6.12.0",
@@ -286,29 +286,29 @@
}
},
"@angular/animations": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-9.1.4.tgz",
- "integrity": "sha512-gMo/DbCm5BDArladMAeC7/75T2DvhLr4CSUGJt/P/aimTEG2ywoAALs3pzwSSe4qxrHiR0OIksVW3l4km3iXEw=="
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-9.1.7.tgz",
+ "integrity": "sha512-1wW8ndGMLDuE2LpTN2RNRz1Dt7JgVBeVmOPMgzoA7g1uuvm+jESTrGG7W3BzLzG0BE2TeXt0fY90o4iU+S2Rmg=="
},
"@angular/cdk": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-9.2.2.tgz",
- "integrity": "sha512-VNd+KuMN6cBcy4/8OyMxqYaxdjPP6IyCqIVijB2JREkc5Sg4VWmPgx2L3rHt/DzjsVBVRgx35uqOMymDezG3jQ==",
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-9.2.4.tgz",
+ "integrity": "sha512-iw2+qHMXHYVC6K/fttHeNHIieSKiTEodVutZoOEcBu9rmRTGbLB26V/CRsfIRmA1RBk+uFYWc6UQZnMC3RdnJQ==",
"requires": {
"parse5": "^5.0.0"
}
},
"@angular/cli": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-9.1.4.tgz",
- "integrity": "sha512-H9MqoT4zyIv+Yo3cvRVkzafWGHsqt7jUvtvGwMHIDMTfEX+Q8yiYlDLL6WM3Eb6/hDmLcRGC/GI495sKS1z5qA==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-9.1.6.tgz",
+ "integrity": "sha512-hQnad0LQx0n+FiMRUV2RX9+L0dLsISu7uzimGLjgJVtW6Bc1cVnaTkKhOqHRQG2Q4Iv8adKWf5UL5tMZz/roDA==",
"dev": true,
"requires": {
- "@angular-devkit/architect": "0.901.4",
- "@angular-devkit/core": "9.1.4",
- "@angular-devkit/schematics": "9.1.4",
- "@schematics/angular": "9.1.4",
- "@schematics/update": "0.901.4",
+ "@angular-devkit/architect": "0.901.6",
+ "@angular-devkit/core": "9.1.6",
+ "@angular-devkit/schematics": "9.1.6",
+ "@schematics/angular": "9.1.6",
+ "@schematics/update": "0.901.6",
"@yarnpkg/lockfile": "1.1.0",
"ansi-colors": "4.1.1",
"debug": "4.1.1",
@@ -327,19 +327,19 @@
},
"dependencies": {
"@angular-devkit/architect": {
- "version": "0.901.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.4.tgz",
- "integrity": "sha512-w4RMj7eLhUSh70HUy5tW4EXjLQFXk0Lfr9WiSy5gvPGp+zzYxknI+Wn4Xid1wU/WS+4tuMv5nJIaNaH2sABESQ==",
+ "version": "0.901.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.6.tgz",
+ "integrity": "sha512-0pWzn10gCZxMCrS62NlD38qE2R7l5fPfBuNylntNqvzw9L7iS1ARgqMlAKn8KLaNG6FrXONmgUWHsV987ZICIw==",
"dev": true,
"requires": {
- "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/core": "9.1.6",
"rxjs": "6.5.4"
}
},
"@angular-devkit/core": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz",
- "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz",
+ "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==",
"dev": true,
"requires": {
"ajv": "6.12.0",
@@ -379,19 +379,19 @@
}
},
"@angular/common": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/common/-/common-9.1.4.tgz",
- "integrity": "sha512-JvCoCWVbx0tF7l/0WTi24ui/mc2SElyVSNchR4VK/FViARnkvnSBdI/Ef5QWXrsPyKU4PYBtnWWgyxRspH+FBA=="
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-9.1.7.tgz",
+ "integrity": "sha512-04ef+J8bnOnjYbdRsm82IdIaaLFZ6QWh4SLtjnYhgCjEe4Stf59g+zRNPMauMFDQYDCp3foPo0djk1CPfEd8AQ=="
},
"@angular/compiler": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.1.4.tgz",
- "integrity": "sha512-B+f3lviFNEJtL9V9exSKYPSz2Ddb6dxgPzQR7GSjGikDo+fKMtC1PjNwgJooS9gavhQx30uwkEEMIPYQbM6nNA=="
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.1.7.tgz",
+ "integrity": "sha512-BiHJ3rAd00aJkur7ohnXjqBmz2QkSTAAFWLuBTYuHysxP4zJD54y4uUtsrCUReKL+8dkUv8AcfXBAkCBLvBUYg=="
},
"@angular/compiler-cli": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-9.1.4.tgz",
- "integrity": "sha512-n3PzqNnPD7s/AF9mv5CnarK0sgfoq4txFncHjJWBSltuTQoz6BDZyjuEdqsSLUvgAZPeLsmohemOzEE38HYHZA==",
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-9.1.7.tgz",
+ "integrity": "sha512-8HT8+UuSohrXlF90eewG2XuhtOEIfJ2UlijnSB10/+ZyroSdTKckoiFSps86nTd/EfrBblqNUMbwjOxIkzac3w==",
"dev": true,
"requires": {
"canonical-path": "1.0.0",
@@ -592,45 +592,45 @@
}
},
"@angular/core": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.1.4.tgz",
- "integrity": "sha512-ND240vncmVD2KVe/KSQU3d/DxxoRipFg1+jFOFZGt0n0orCBHk/V1fu9iaG1sRyldL0+rCQ+fTI+1N4DTmMnxA=="
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.1.7.tgz",
+ "integrity": "sha512-uJSZ+rdGL47gc3A+Fal1XwJYB4WWpYJrNifvoQ2nOs+X5Qu+j0HN6GXPJb4kixoNzjYCGxmLoirdT3xhNZFcfQ=="
},
"@angular/flex-layout": {
- "version": "9.0.0-beta.29",
- "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-9.0.0-beta.29.tgz",
- "integrity": "sha512-93sxR+kYfYMOdnlWL0Q77FZ428gg8XnBu0YZm6GsCdkw/vLggIT/G1ZAqHlCPIODt6pxmCJ5KXh4ShvniIYDsA=="
+ "version": "9.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-9.0.0-beta.31.tgz",
+ "integrity": "sha512-g94u2mecDl87ORvFRuOBshV/S/ETE4bybClU2e1xXKWNG+rhRHchChneHSonc29ZLyROTjHhmAtKOYojL92uLA=="
},
"@angular/forms": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-9.1.4.tgz",
- "integrity": "sha512-Njt+pMLfPBchL0/ayIjJqXL6ZfM4Ccvf7KO1wS1HMzh3QlmfNa0JSgc4pfrbRJAMN9g7V/FYLyKejs1bJZkenA=="
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-9.1.7.tgz",
+ "integrity": "sha512-/bRs5hSFDUjOrq2vw11HoS25oEu7KYVxPbQiEjeBHJo82yDmSO+1cVukh6ulDi7iv1sJwSzikDtE9+xDx1ocfQ=="
},
"@angular/language-service": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-9.1.4.tgz",
- "integrity": "sha512-eyVxxiegdb4ESdFGfkuDN+YfUbOVHRQLjIl6ACFJQDNHzVXzbmuqpyr5hIJANIVady103/7+dqRxxJo1DdIdTQ==",
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-9.1.7.tgz",
+ "integrity": "sha512-p4WOZFCn6H5qgII9MbPjSu/AErt0rXpsXlMHC9KJl+JgfPI3YwQuX1dLdt3xTJlxuv8/fY9UbgmPJUqR/txRCg==",
"dev": true
},
"@angular/material": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@angular/material/-/material-9.2.2.tgz",
- "integrity": "sha512-gdQiMJ6PtW/5fd+0mglHFyzxULDCBGjn9RTET3sUq2rkc9+jBXr4OvnsUyBWSnqqv97XqotVDIx5JgE4/YX/Rw=="
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@angular/material/-/material-9.2.4.tgz",
+ "integrity": "sha512-LkoTXE6B0slvMhvfZDdPWaz4yaYLkaAp5VSPunI9pxGsPxzqEV9e210wC1/sjG/76Nk8Ep7/2z9XKac8Q9bMwA=="
},
"@angular/platform-browser": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-9.1.4.tgz",
- "integrity": "sha512-mBCHfTl+5tQfaUiGlDujP7mFBzovFc54Zi2kcCE8DSdSSVQ2TPBo6hXa6y2cL3hJPFZzQ7mC4ORFrsGADhHn/w=="
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-9.1.7.tgz",
+ "integrity": "sha512-zwNCnn4Ozax80YrkFcLoQ/7bVR7jPk7+QT++Nf9MmQwsaqa0Ve1IYa6Hg9Y1Kf4wquI9TdxMN17TPKmX8iNIaA=="
},
"@angular/platform-browser-dynamic": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-9.1.4.tgz",
- "integrity": "sha512-YtVbnxyS6FU7xNpA6A95tmSfrB8+WC7OH3mbP8M9NaGk0OYz8B/JOe1HByP4JRpEGCvBtXdJ2NSW/MpLIT8SiQ=="
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-9.1.7.tgz",
+ "integrity": "sha512-DyUDGxp4kF4majcm9COVzu/9wzmgnfj+d6GUEjYkbqSH9QP05LonJ6wHMNxNMN6qMfawdCxDe0TnNDRPmHUj9w=="
},
"@angular/router": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular/router/-/router-9.1.4.tgz",
- "integrity": "sha512-yUyjCgG2P2Jh8MvoyC6yirmAtx1Qe7MKLuLvsa9WOB571QNEcNLTYMfAMHUKsQTcE/+o984QyLlneoibgI9wFA=="
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-9.1.7.tgz",
+ "integrity": "sha512-ycrkhkCbfOMCe9PngFjnyk8nH5jt0Kyb2NPtjmaGOtSCuZBZ0kOU0rQGmQnj3d2PiT0Yir59S8eEAf3Fh0iDuw=="
},
"@auth0/angular-jwt": {
"version": "4.0.0",
@@ -1878,36 +1878,36 @@
}
},
"@ngrx/effects": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-9.1.0.tgz",
- "integrity": "sha512-DPMtp/2YTrvuxMqaehQ39FeoNODuMcRB6xDImvrnMFPIkUcP3mDHnIg6UB5c2JvfHlZZClKR+Fb+RE2nuVub8w=="
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-9.1.2.tgz",
+ "integrity": "sha512-H9jbGUzP5izk9Ap8BQJicO1+xheyDyHBbvv6b1NkaRHpDizhPOSBjoFWExFfsejXo0dafaIsu6aI+y+Fp+LSsg=="
},
"@ngrx/store": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-9.1.0.tgz",
- "integrity": "sha512-Ah2nApPZXTvKl7ybaFMIFwEdMg8b7PvIKATigbDTUftAsFxked2+T7blNv6aCgSfEqbOVMBTYPk7OsLCYZoz4Q=="
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-9.1.2.tgz",
+ "integrity": "sha512-FQXFonF8hSGJDqgLaoWHy2mkeJwVdoa3jLoT1YpkJWxsFMG4U0T6JYG4VrtuymDgo9XwWBBJqIiNpdTgHhofSQ=="
},
"@ngrx/store-devtools": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-9.1.0.tgz",
- "integrity": "sha512-KDvuNBxfTgDHjESiouEoPXq8GCUYbHnA+jOs8MzzwVDmxNLeZuDy3amaVzKv9Q5nncI6mNGcXOzTKWzapET8Sw=="
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-9.1.2.tgz",
+ "integrity": "sha512-i9gwj9FlUVrei9yMwwFx15RV0JWOI73cjbjKhZ2lUWmCF6bfZeuPYZmEs3/80L8r3R9nZWnBoX9xxQslte65iw=="
},
"@ngtools/webpack": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.4.tgz",
- "integrity": "sha512-CDlQzMnWraxf/dT3G5L+0N0VniWHWdzjLRP8pWBoyV0xlzWS1yL/lj8Mas2jEIuaUxZ8bi29mE7xa8prqewtBQ==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.6.tgz",
+ "integrity": "sha512-W/9kENoiYARDGXqXSmOekQddUlQUVxfYP7JgQwqdg7JYktIpThicbV/iLBChZwWnmn9mb7MDw1IPeUTkZzrO2Q==",
"dev": true,
"requires": {
- "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/core": "9.1.6",
"enhanced-resolve": "4.1.1",
"rxjs": "6.5.4",
"webpack-sources": "1.4.3"
},
"dependencies": {
"@angular-devkit/core": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz",
- "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz",
+ "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==",
"dev": true,
"requires": {
"ajv": "6.12.0",
@@ -1950,19 +1950,19 @@
}
},
"@schematics/angular": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.4.tgz",
- "integrity": "sha512-7nbiYBRgXc+f0sa5iXTcF6/VMy/Xq0wyKKnDFiLCb2aFYR7EXRHWF2GuwDIg2bvFugLuCBDoNnXeddLE1TXGWg==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.6.tgz",
+ "integrity": "sha512-Q9lPTf1/pXBWuFOLzwtrU88Gwkfn9JLiSb45xSQZ771cCD68tZyL4V9fH+u7139y3H3ID2xebMs7WiddAERLyw==",
"dev": true,
"requires": {
- "@angular-devkit/core": "9.1.4",
- "@angular-devkit/schematics": "9.1.4"
+ "@angular-devkit/core": "9.1.6",
+ "@angular-devkit/schematics": "9.1.6"
},
"dependencies": {
"@angular-devkit/core": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz",
- "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz",
+ "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==",
"dev": true,
"requires": {
"ajv": "6.12.0",
@@ -1984,13 +1984,13 @@
}
},
"@schematics/update": {
- "version": "0.901.4",
- "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.901.4.tgz",
- "integrity": "sha512-jCtZY2Fbj502gKN5gdu1brnRy/ssyzTrWm69Ty73V+t8uL7nLr+/hny/VBJ8CiQnKQvxcgVl1xgvI1cXzpysVA==",
+ "version": "0.901.6",
+ "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.901.6.tgz",
+ "integrity": "sha512-fKDjD/nGOsrPglOeMVNW+/wa8t73XBrsVneaLg3qmWp6c80JQAxwryE+3MTnBP7apZCLR2YZlKySbY54gLRs6w==",
"dev": true,
"requires": {
- "@angular-devkit/core": "9.1.4",
- "@angular-devkit/schematics": "9.1.4",
+ "@angular-devkit/core": "9.1.6",
+ "@angular-devkit/schematics": "9.1.6",
"@yarnpkg/lockfile": "1.1.0",
"ini": "1.3.5",
"npm-package-arg": "^8.0.0",
@@ -2001,9 +2001,9 @@
},
"dependencies": {
"@angular-devkit/core": {
- "version": "9.1.4",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz",
- "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz",
+ "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==",
"dev": true,
"requires": {
"ajv": "6.12.0",
@@ -2109,21 +2109,21 @@
"dev": true
},
"@types/jstree": {
- "version": "3.3.39",
- "resolved": "https://registry.npmjs.org/@types/jstree/-/jstree-3.3.39.tgz",
- "integrity": "sha512-lUUl9NCRqziIXYTC0n6NUykQS0oII5tUhXq6/pXVZSbrbcxB0jr3i7Bpn/8v6f8BVA9su1/NF/DoJ8IrwKuzKw==",
+ "version": "3.3.40",
+ "resolved": "https://registry.npmjs.org/@types/jstree/-/jstree-3.3.40.tgz",
+ "integrity": "sha512-+6mdAX+vaj962NSd1nnzSLBWD2obUQf5+1yxR+4/g+abpEIQFsI+CcqP4l+cS6H9P07sTONMbR3Z09bPpDzkNg==",
"dev": true,
"requires": {
"@types/jquery": "*"
}
},
"@types/jszip": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-3.1.7.tgz",
- "integrity": "sha512-+XQKNI5zpxutK05hO67huUTw/2imXCuJWjnFdU63tRES/xXSX1yVR9cv/QAdO6Rii2y2tTHbzjQ4i2apLfuK0Q==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-3.4.1.tgz",
+ "integrity": "sha512-TezXjmf3lj+zQ651r6hPqvSScqBLvyPI9FxdXBqpEwBijNGQ2NXpaFW/7joGzveYkKQUil7iiDHLo6LV71Pc0A==",
"dev": true,
"requires": {
- "@types/node": "*"
+ "jszip": "*"
}
},
"@types/leaflet": {
@@ -2154,9 +2154,9 @@
}
},
"@types/lodash": {
- "version": "4.14.150",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.150.tgz",
- "integrity": "sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w==",
+ "version": "4.14.151",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.151.tgz",
+ "integrity": "sha512-Zst90IcBX5wnwSu7CAS0vvJkTjTELY4ssKbHiTnGcJgi170uiS8yQDdc3v6S77bRqYQIN1App5a1Pc2lceE5/g==",
"dev": true
},
"@types/minimatch": {
@@ -2182,9 +2182,9 @@
"integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw=="
},
"@types/q": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
- "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==",
"dev": true
},
"@types/raphael": {
@@ -2194,9 +2194,9 @@
"dev": true
},
"@types/react": {
- "version": "16.9.34",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.34.tgz",
- "integrity": "sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow==",
+ "version": "16.9.35",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.35.tgz",
+ "integrity": "sha512-q0n0SsWcGc8nDqH2GJfWQWUOmZSJhXV64CjVN5SvcNti3TdEaA3AH0D8DwNmMdzjMAC/78tB8nAZIlV8yTz+zQ==",
"requires": {
"@types/prop-types": "*",
"csstype": "^2.2.0"
@@ -2772,6 +2772,14 @@
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"assert": {
@@ -3114,9 +3122,9 @@
"dev": true
},
"bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.1.tgz",
+ "integrity": "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==",
"dev": true
},
"body-parser": {
@@ -3255,21 +3263,50 @@
"requires": {
"bn.js": "^4.1.0",
"randombytes": "^2.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"browserify-sign": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
- "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz",
+ "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==",
"dev": true,
"requires": {
- "bn.js": "^4.1.1",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.2",
- "elliptic": "^6.0.0",
- "inherits": "^2.0.1",
- "parse-asn1": "^5.0.0"
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.2",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
}
},
"browserify-zlib": {
@@ -3472,9 +3509,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001051",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001051.tgz",
- "integrity": "sha512-sw8UUnTlRevawTMZKN7vpfwSjCBVoiMPlYd8oT2VwNylyPCBdMAUmLGUApnYYTtIm5JXsQegUAY7GPHqgfDzjw==",
+ "version": "1.0.30001062",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz",
+ "integrity": "sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw==",
"dev": true
},
"canonical-path": {
@@ -4312,6 +4349,14 @@
"requires": {
"bn.js": "^4.1.0",
"elliptic": "^6.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"create-hash": {
@@ -4965,6 +5010,14 @@
"bn.js": "^4.1.0",
"miller-rabin": "^4.0.0",
"randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"dir-glob": {
@@ -5122,9 +5175,9 @@
"dev": true
},
"electron-to-chromium": {
- "version": "1.3.428",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.428.tgz",
- "integrity": "sha512-u3+5jEfgLKq/hGO96YfAoOAM1tgFnRDTCD5mLuev44tttcXix+INtVegAkmGzUcfDsnzkPt51XXurXZLLwXt0w==",
+ "version": "1.3.442",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.442.tgz",
+ "integrity": "sha512-3OjmbnD9+LyWzh9o3rjC7LNIkcDHjKyHM6Xt0G/+7gHGCaEIwvWYi8TrNA8feNnuGmvI9WKu289PFMQGMLHAig==",
"dev": true
},
"elliptic": {
@@ -5140,6 +5193,14 @@
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"emoji-regex": {
@@ -5310,9 +5371,9 @@
"dev": true
},
"entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
- "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz",
+ "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==",
"dev": true
},
"err-code": {
@@ -6355,9 +6416,9 @@
}
},
"safe-buffer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
- "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
}
}
@@ -7281,15 +7342,12 @@
}
},
"istanbul-lib-instrument": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz",
- "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
"dev": true,
"requires": {
"@babel/core": "^7.7.5",
- "@babel/parser": "^7.7.5",
- "@babel/template": "^7.7.4",
- "@babel/traverse": "^7.7.4",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.0.0",
"semver": "^6.3.0"
@@ -7449,12 +7507,12 @@
"integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg=="
},
"jquery.terminal": {
- "version": "2.15.4",
- "resolved": "https://registry.npmjs.org/jquery.terminal/-/jquery.terminal-2.15.4.tgz",
- "integrity": "sha512-7XSLLjc2Il+1wtJQYQWkir8A5WnTMFEkwb1fGx3mASxQ+lp0Yu4Ua3iQTSKZGdYR3FINor9ToK107lJHEWOeYA==",
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/jquery.terminal/-/jquery.terminal-2.16.0.tgz",
+ "integrity": "sha512-djKODCh68si7h+nifcY4pdmgaR3fJgRDhhc65tC3V8kDz6iKxw6i0Vd6FlT9aNubCIjTbhv3waAkxFQLwfFkzA==",
"requires": {
"@types/jquery": "^3.3.29",
- "jquery": "~3",
+ "jquery": "^3.5.0",
"prismjs": "^1.19.0",
"wcwidth": "^1.0.1"
}
@@ -7929,9 +7987,9 @@
}
},
"karma-jasmine-html-reporter": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.3.tgz",
- "integrity": "sha512-ci0VrjuCaFj+9d1tYlTE3KIPUCp0rz874zWWU3JgCMqGIyw5ke+BXWFPOAGAqUdCJcrMwneyvp1zFXA74MiPUA==",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.4.tgz",
+ "integrity": "sha512-PtilRLno5O6wH3lDihRnz0Ba8oSn0YUJqKjjux1peoYGwo0AQqrWRbdWk/RLzcGlb+onTyXAnHl6M+Hu3UxG/Q==",
"dev": true
},
"karma-source-map-support": {
@@ -7969,14 +8027,6 @@
"resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz",
"integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ=="
},
- "leaflet-geometryutil": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/leaflet-geometryutil/-/leaflet-geometryutil-0.9.3.tgz",
- "integrity": "sha512-Wi6YvfNx/Xu9q35AEfXpsUXmIFLen/MO+C2qimxHRnjyeyOxBhdcZa6kSiReaOX0cGK7yQInqrzz0dkIqZ8Dpg==",
- "requires": {
- "leaflet": ">=0.7.0"
- }
- },
"leaflet-polylinedecorator": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/leaflet-polylinedecorator/-/leaflet-polylinedecorator-1.6.0.tgz",
@@ -7986,9 +8036,9 @@
}
},
"leaflet-providers": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/leaflet-providers/-/leaflet-providers-1.9.1.tgz",
- "integrity": "sha512-YpJB9y4/nT5NGicU9vuqlttJaCer6paD3J3b8Wrw+IIQvK9dtcdzE9CsTkDg7Dg9FeGp5NEr3hu17xcHbYI/2w=="
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/leaflet-providers/-/leaflet-providers-1.10.1.tgz",
+ "integrity": "sha512-6+K44xgRY13K7ildNY+5uCnkG3oBTol3GvSQQjLt2QWTJdob/PWzPHuvPzYiBDOELFy+aAzPo8+skU0sYUUzwg=="
},
"leaflet-rotatedmarker": {
"version": "0.2.0",
@@ -8591,6 +8641,14 @@
"requires": {
"bn.js": "^4.0.0",
"brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"mime": {
@@ -8921,11 +8979,11 @@
}
},
"ngx-clipboard": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/ngx-clipboard/-/ngx-clipboard-13.0.0.tgz",
- "integrity": "sha512-dBSDTbmQ9saJLnFbTmQht2/s/GIvMTdEdFEBtIfKS6Xi9vOPurW7yxaTYYky2ON1FJq6LzYNjxEk/GEOZPz75w==",
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/ngx-clipboard/-/ngx-clipboard-13.0.1.tgz",
+ "integrity": "sha512-e7QBsw7bX5ajhVR2++NAaYZYw90hKeEBlb006TW85WDUA3kmlrXpMDwOvVJuRewU6Nh+U1QiQMJq5a0ivk0zWg==",
"requires": {
- "ngx-window-token": ">= 3.0.0-beta01 || >= 3.0.0"
+ "ngx-window-token": ">=3.0.0"
}
},
"ngx-color-picker": {
@@ -8942,7 +9000,14 @@
"version": "git://github.com/thingsboard/ngx-flowchart.git#7a02f4748b5e7821a883c903107af5f20415d026",
"from": "git://github.com/thingsboard/ngx-flowchart.git#master",
"requires": {
- "tslib": "^1.11.1"
+ "tslib": "^1.13.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
+ }
}
},
"ngx-hm-carousel": {
@@ -9019,9 +9084,9 @@
}
},
"node-releases": {
- "version": "1.1.53",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz",
- "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==",
+ "version": "1.1.55",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.55.tgz",
+ "integrity": "sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w==",
"dev": true
},
"nopt": {
@@ -9195,9 +9260,9 @@
}
},
"safe-buffer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
- "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
},
"yallist": {
@@ -11010,6 +11075,14 @@
"parse-asn1": "^5.0.0",
"randombytes": "^2.0.1",
"safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"pump": {
@@ -12585,9 +12658,9 @@
"dev": true
},
"spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"dev": true,
"requires": {
"spdx-exceptions": "^2.1.0",
@@ -13873,14 +13946,25 @@
}
},
"watchpack": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz",
- "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==",
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz",
+ "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==",
"dev": true,
"requires": {
- "chokidar": "^2.1.8",
+ "chokidar": "^3.4.0",
"graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.0"
+ }
+ },
+ "watchpack-chokidar2": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
+ "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chokidar": "^2.1.8"
},
"dependencies": {
"anymatch": {
@@ -13888,6 +13972,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
+ "optional": true,
"requires": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
@@ -13898,6 +13983,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
+ "optional": true,
"requires": {
"remove-trailing-separator": "^1.0.1"
}
@@ -13908,13 +13994,15 @@
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true
+ "dev": true,
+ "optional": true
},
"braces": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
+ "optional": true,
"requires": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
@@ -13933,6 +14021,7 @@
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
+ "optional": true,
"requires": {
"anymatch": "^2.0.0",
"async-each": "^1.0.1",
@@ -13953,6 +14042,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -13962,6 +14052,7 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
+ "optional": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@@ -13970,559 +14061,18 @@
}
},
"fsevents": {
- "version": "1.2.12",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
- "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
- "optional": true,
- "requires": {
- "node-pre-gyp": "*"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "3.2.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "mkdirp": {
- "version": "0.5.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.14.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4.4.2"
- }
- },
- "nopt": {
- "version": "4.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.13",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "yallist": {
- "version": "3.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
+ "optional": true
},
"is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true,
+ "optional": true,
"requires": {
"binary-extensions": "^1.0.0"
}
@@ -14532,6 +14082,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^3.0.2"
}
@@ -14541,6 +14092,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
+ "optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -14550,6 +14102,7 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
"dev": true,
+ "optional": true,
"requires": {
"graceful-fs": "^4.1.11",
"micromatch": "^3.1.10",
@@ -14561,6 +14114,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
"dev": true,
+ "optional": true,
"requires": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
@@ -14942,553 +14496,11 @@
}
},
"fsevents": {
- "version": "1.2.12",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
- "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
- "optional": true,
- "requires": {
- "node-pre-gyp": "*"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "3.2.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "mkdirp": {
- "version": "0.5.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.14.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4.4.2"
- }
- },
- "nopt": {
- "version": "4.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.13",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "yallist": {
- "version": "3.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
+ "optional": true
},
"is-absolute-url": {
"version": "3.0.3",
@@ -15666,9 +14678,9 @@
}
},
"worker-plugin": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.2.tgz",
- "integrity": "sha512-V+1zSZMOOKk+uBzKyNIODLQLsx59zSIOaI75J1EMS0iR1qy+KQR3y/pQ3T0vIhvPfDFapGRMsoMvQNEL3okqSA==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.3.tgz",
+ "integrity": "sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg==",
"dev": true,
"requires": {
"loader-utils": "^1.1.0"
diff --git a/ui-ngx/package.json b/ui-ngx/package.json
index 4a5f62ea43..4fa8a0ee5d 100644
--- a/ui-ngx/package.json
+++ b/ui-ngx/package.json
@@ -1,6 +1,6 @@
{
"name": "thingsboard",
- "version": "3.0.0",
+ "version": "3.0.1",
"scripts": {
"postinstall": "ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points",
"ng": "ng",
@@ -13,17 +13,17 @@
},
"private": true,
"dependencies": {
- "@angular/animations": "^9.1.4",
- "@angular/cdk": "^9.2.2",
- "@angular/common": "^9.1.4",
- "@angular/compiler": "^9.1.4",
- "@angular/core": "^9.1.4",
- "@angular/flex-layout": "^9.0.0-beta.29",
- "@angular/forms": "^9.1.4",
- "@angular/material": "^9.2.2",
- "@angular/platform-browser": "^9.1.4",
- "@angular/platform-browser-dynamic": "^9.1.4",
- "@angular/router": "^9.1.4",
+ "@angular/animations": "^9.1.7",
+ "@angular/cdk": "^9.2.4",
+ "@angular/common": "^9.1.7",
+ "@angular/compiler": "^9.1.7",
+ "@angular/core": "^9.1.7",
+ "@angular/flex-layout": "^9.0.0-beta.31",
+ "@angular/forms": "^9.1.7",
+ "@angular/material": "^9.2.4",
+ "@angular/platform-browser": "^9.1.7",
+ "@angular/platform-browser-dynamic": "^9.1.7",
+ "@angular/router": "^9.1.7",
"@auth0/angular-jwt": "^4.0.0",
"@date-io/date-fns": "^2.6.1",
"@flowjs/flow.js": "^2.14.0",
@@ -33,9 +33,9 @@
"@material-ui/core": "^4.9.13",
"@material-ui/icons": "^4.9.1",
"@material-ui/pickers": "^3.2.10",
- "@ngrx/effects": "^9.1.0",
- "@ngrx/store": "^9.1.0",
- "@ngrx/store-devtools": "^9.1.0",
+ "@ngrx/effects": "^9.1.2",
+ "@ngrx/store": "^9.1.2",
+ "@ngrx/store-devtools": "^9.1.2",
"@ngx-share/core": "^7.1.4",
"@ngx-translate/core": "^12.1.2",
"@ngx-translate/http-loader": "^4.0.0",
@@ -51,22 +51,21 @@
"flot.curvedlines": "git://github.com/MichaelZinsmaier/CurvedLines.git#master",
"font-awesome": "^4.7.0",
"jquery": "^3.5.1",
- "jquery.terminal": "^2.15.4",
+ "jquery.terminal": "^2.16.0",
"js-beautify": "^1.11.0",
"json-schema-defaults": "^0.4.0",
"jstree": "^3.3.9",
"jstree-bootstrap-theme": "^1.0.1",
"jszip": "^3.4.0",
"leaflet": "^1.6.0",
- "leaflet-geometryutil": "^0.9.3",
"leaflet-polylinedecorator": "^1.6.0",
- "leaflet-providers": "^1.9.1",
+ "leaflet-providers": "^1.10.1",
"leaflet.gridlayer.googlemutant": "0.8.0",
"leaflet.markercluster": "^1.4.1",
"material-design-icons": "^3.0.1",
"messageformat": "^2.3.0",
"moment": "^2.24.0",
- "ngx-clipboard": "^13.0.0",
+ "ngx-clipboard": "^13.0.1",
"ngx-color-picker": "^9.1.0",
"ngx-daterangepicker-material": "^3.0.1",
"ngx-flowchart": "git://github.com/thingsboard/ngx-flowchart.git#master",
@@ -95,25 +94,25 @@
},
"devDependencies": {
"@angular-builders/custom-webpack": "^9.1.0",
- "@angular-devkit/build-angular": "^0.901.4",
- "@angular/cli": "^9.1.4",
- "@angular/compiler-cli": "^9.1.4",
- "@angular/language-service": "^9.1.4",
+ "@angular-devkit/build-angular": "^0.901.6",
+ "@angular/cli": "^9.1.6",
+ "@angular/compiler-cli": "^9.1.7",
+ "@angular/language-service": "^9.1.7",
"@types/canvas-gauges": "^2.1.2",
"@types/flot": "^0.0.31",
"@types/jasmine": "^3.5.10",
"@types/jasminewd2": "^2.0.8",
"@types/jquery": "^3.3.38",
"@types/js-beautify": "^1.8.2",
- "@types/jstree": "^3.3.39",
- "@types/jszip": "^3.1.7",
+ "@types/jstree": "^3.3.40",
+ "@types/jszip": "^3.4.1",
"@types/leaflet": "^1.5.12",
"@types/leaflet-markercluster": "^1.0.3",
"@types/leaflet-polylinedecorator": "^1.6.0",
- "@types/lodash": "^4.14.150",
+ "@types/lodash": "^4.14.151",
"@types/raphael": "^2.3.0",
- "@types/react": "^16.9.34",
- "@types/react-dom": "^16.9.6",
+ "@types/react": "^16.9.35",
+ "@types/react-dom": "^16.9.7",
"@types/tinycolor2": "^1.4.2",
"@types/tooltipster": "^0.0.29",
"codelyzer": "^5.2.2",
@@ -125,7 +124,7 @@
"karma-chrome-launcher": "^3.1.0",
"karma-coverage-istanbul-reporter": "^2.1.1",
"karma-jasmine": "^3.1.1",
- "karma-jasmine-html-reporter": "^1.5.3",
+ "karma-jasmine-html-reporter": "^1.5.4",
"ngrx-store-freeze": "^0.2.4",
"protractor": "^5.4.4",
"ts-node": "^8.9.0",
diff --git a/ui-ngx/pom.xml b/ui-ngx/pom.xml
index 23aed96752..8a0e60aac4 100644
--- a/ui-ngx/pom.xml
+++ b/ui-ngx/pom.xml
@@ -20,7 +20,7 @@
4.0.0
org.thingsboard
- 3.0.0-SNAPSHOT
+ 3.0.1-SNAPSHOT
thingsboard
org.thingsboard
diff --git a/ui-ngx/src/app/core/api/datasource-subcription.ts b/ui-ngx/src/app/core/api/datasource-subcription.ts
index ccc69f863c..c3d182595d 100644
--- a/ui-ngx/src/app/core/api/datasource-subcription.ts
+++ b/ui-ngx/src/app/core/api/datasource-subcription.ts
@@ -314,7 +314,7 @@ export class DatasourceSubscription {
});
stateDataReceived = true;
} else {
- firstStateData = data;
+ firstStateData = subscriptionUpdate;
}
} else {
if (subsTw.aggregation.stateData && !stateDataReceived) {
diff --git a/ui-ngx/src/app/core/api/widget-subscription.ts b/ui-ngx/src/app/core/api/widget-subscription.ts
index 3cefb2cda9..bc90c626cf 100644
--- a/ui-ngx/src/app/core/api/widget-subscription.ts
+++ b/ui-ngx/src/app/core/api/widget-subscription.ts
@@ -670,6 +670,8 @@ export class WidgetSubscription implements IWidgetSubscription {
if (!this.executingRpcRequest || rejection.status === 408) {
this.rpcRejection = rejection;
if (rejection.status === 408) {
+ this.rpcErrorText = 'Request Timeout.';
+ } else if (rejection.status === 409) {
this.rpcErrorText = 'Device is offline.';
} else {
this.rpcErrorText = 'Error : ' + rejection.status + ' - ' + rejection.statusText;
diff --git a/ui-ngx/src/app/core/http/entity.service.ts b/ui-ngx/src/app/core/http/entity.service.ts
index 3eb80ef6a3..8437704faa 100644
--- a/ui-ngx/src/app/core/http/entity.service.ts
+++ b/ui-ngx/src/app/core/http/entity.service.ts
@@ -1006,17 +1006,41 @@ export class EntityService {
private entityRelationInfosToEntitiesInfo(entityRelations: Array,
direction: EntitySearchDirection): Observable> {
- if (entityRelations) {
- const tasks: Observable[] = [];
+ if (entityRelations.length) {
+ const packs: Observable[][] = [];
+ let packTasks: Observable[] = [];
entityRelations.forEach((entityRelation) => {
- tasks.push(this.entityRelationInfoToEntityInfo(entityRelation, direction));
+ packTasks.push(this.entityRelationInfoToEntityInfo(entityRelation, direction));
+ if (packTasks.length === 100) {
+ packs.push(packTasks);
+ packTasks = [];
+ }
});
- return forkJoin(tasks);
+ if (packTasks.length) {
+ packs.push(packTasks);
+ }
+ return this.executePack(packs, 0);
} else {
return of([]);
}
}
+ private executePack(packs: Observable[][], index: number): Observable> {
+ return forkJoin(packs[index]).pipe(
+ expand(() => {
+ index++;
+ if (packs[index]) {
+ return forkJoin(packs[index]);
+ } else {
+ return EMPTY;
+ }
+ }
+ ),
+ concatMap((data) => data),
+ toArray()
+ );
+ }
+
private entityRelationInfoToEntityInfo(entityRelationInfo: EntityRelationInfo, direction: EntitySearchDirection): Observable {
const entityId = direction === EntitySearchDirection.FROM ? entityRelationInfo.to : entityRelationInfo.from;
return this.getEntity(entityId.entityType as EntityType, entityId.id, {ignoreLoading: true, ignoreErrors: true}).pipe(
diff --git a/ui-ngx/src/app/core/services/dashboard-utils.service.ts b/ui-ngx/src/app/core/services/dashboard-utils.service.ts
index 15f0b23d6a..b3387f066e 100644
--- a/ui-ngx/src/app/core/services/dashboard-utils.service.ts
+++ b/ui-ngx/src/app/core/services/dashboard-utils.service.ts
@@ -275,7 +275,7 @@ export class DashboardUtilsService {
layout.gridSettings.margin = layout.gridSettings.margins[0];
delete layout.gridSettings.margins;
}
- layout.gridSettings.margin = layout.gridSettings.margin || 10;
+ layout.gridSettings.margin = isDefined(layout.gridSettings.margin) ? layout.gridSettings.margin : 10;
}
public setLayouts(dashboard: Dashboard, targetState: string, newLayouts: DashboardStateLayouts) {
diff --git a/ui-ngx/src/app/core/services/resources.service.ts b/ui-ngx/src/app/core/services/resources.service.ts
index ec90cbb232..16667ec64c 100644
--- a/ui-ngx/src/app/core/services/resources.service.ts
+++ b/ui-ngx/src/app/core/services/resources.service.ts
@@ -48,7 +48,7 @@ export class ResourcesService {
}
let fileType;
- const match = /[.](css|less|html|htm|js)?((\?|#).*)?$/.exec(url);
+ const match = /[./](css|less|html|htm|js)?(([?#]).*)?$/.exec(url);
if (match !== null) {
fileType = match[1];
}
diff --git a/ui-ngx/src/app/modules/home/components/dashboard/dashboard.component.ts b/ui-ngx/src/app/modules/home/components/dashboard/dashboard.component.ts
index 18503a1aed..0bc4f6beee 100644
--- a/ui-ngx/src/app/modules/home/components/dashboard/dashboard.component.ts
+++ b/ui-ngx/src/app/modules/home/components/dashboard/dashboard.component.ts
@@ -196,7 +196,7 @@ export class DashboardComponent extends PageComponent implements IDashboardCompo
maxItemRows: 1000,
maxItemArea: 1000000,
outerMargin: true,
- margin: this.margin ? this.margin : 10,
+ margin: isDefined(this.margin) ? this.margin : 10,
minItemCols: 1,
minItemRows: 1,
defaultItemCols: 8,
@@ -495,7 +495,7 @@ export class DashboardComponent extends PageComponent implements IDashboardCompo
private updateLayoutOpts() {
this.gridsterOpts.minCols = this.columns ? this.columns : 24;
- this.gridsterOpts.margin = this.margin ? this.margin : 10;
+ this.gridsterOpts.margin = isDefined(this.margin) ? this.margin : 10;
}
private updateEditingOpts() {
diff --git a/ui-ngx/src/app/modules/home/components/home-components.module.ts b/ui-ngx/src/app/modules/home/components/home-components.module.ts
index 8ae0c6c90a..d08f779ff5 100644
--- a/ui-ngx/src/app/modules/home/components/home-components.module.ts
+++ b/ui-ngx/src/app/modules/home/components/home-components.module.ts
@@ -21,7 +21,6 @@ import { AddEntityDialogComponent } from '@home/components/entity/add-entity-dia
import { EntitiesTableComponent } from '@home/components/entity/entities-table.component';
import { DetailsPanelComponent } from '@home/components/details-panel.component';
import { EntityDetailsPanelComponent } from '@home/components/entity/entity-details-panel.component';
-import { ContactComponent } from '@home/components/contact.component';
import { AuditLogDetailsDialogComponent } from '@home/components/audit-log/audit-log-details-dialog.component';
import { AuditLogTableComponent } from '@home/components/audit-log/audit-log-table.component';
import { EventTableHeaderComponent } from '@home/components/event/event-table-header.component';
@@ -74,7 +73,6 @@ import { SelectTargetStateDialogComponent } from '@home/components/dashboard/sel
AddEntityDialogComponent,
DetailsPanelComponent,
EntityDetailsPanelComponent,
- ContactComponent,
AuditLogTableComponent,
AuditLogDetailsDialogComponent,
EventContentDialogComponent,
@@ -126,7 +124,6 @@ import { SelectTargetStateDialogComponent } from '@home/components/dashboard/sel
AddEntityDialogComponent,
DetailsPanelComponent,
EntityDetailsPanelComponent,
- ContactComponent,
AuditLogTableComponent,
EventTableComponent,
RelationTableComponent,
diff --git a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-editor.component.html b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-editor.component.html
index 79466e027a..e0cff4d312 100644
--- a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-editor.component.html
+++ b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-editor.component.html
@@ -44,7 +44,8 @@
(ngModelChange)="onActionUpdated()"
[fillHeight]="true"
[functionArgs]="['$event', 'widgetContext', 'entityId', 'entityName', 'htmlTemplate', 'additionalParams', 'entityLabel']"
- [validationArgs]="[]">
+ [validationArgs]="[]"
+ [editorCompleter]="customPrettyActionEditorCompleter">
diff --git a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-editor.component.ts b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-editor.component.ts
index 52841cf2d0..fe552b7d1c 100644
--- a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-editor.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-editor.component.ts
@@ -35,6 +35,7 @@ import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { combineLatest } from 'rxjs';
import { CustomActionDescriptor } from '@shared/models/widget.models';
+import { CustomPrettyActionEditorCompleter } from '@home/components/widget/action/custom-action.models';
@Component({
selector: 'tb-custom-action-pretty-editor',
@@ -63,6 +64,8 @@ export class CustomActionPrettyEditorComponent extends PageComponent implements
@ViewChildren('rightPanel')
rightPanelElmRef: QueryList>;
+ customPrettyActionEditorCompleter = CustomPrettyActionEditorCompleter;
+
private propagateChange = (_: any) => {};
constructor(protected store: Store) {
diff --git a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.html b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.html
index fd6c660fbc..442143855d 100644
--- a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.html
+++ b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.html
@@ -94,7 +94,8 @@
[(ngModel)]="action.customFunction"
(ngModelChange)="notifyActionUpdated()"
[functionArgs]="['$event', 'widgetContext', 'entityId', 'entityName', 'htmlTemplate', 'additionalParams', 'entityLabel']"
- [validationArgs]="[]">
+ [validationArgs]="[]"
+ [editorCompleter]="customPrettyActionEditorCompleter">
diff --git a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.ts b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.ts
index afdd2a476e..93b3a80a1b 100644
--- a/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/action/custom-action-pretty-resources-tabs.component.ts
@@ -36,6 +36,7 @@ import * as ace from 'ace-builds';
import { CancelAnimationFrame, RafService } from '@core/services/raf.service';
import { css_beautify, html_beautify } from 'js-beautify';
import { ResizeObserver } from '@juggle/resize-observer';
+import { CustomPrettyActionEditorCompleter } from '@home/components/widget/action/custom-action.models';
@Component({
selector: 'tb-custom-action-pretty-resources-tabs',
@@ -70,6 +71,8 @@ export class CustomActionPrettyResourcesTabsComponent extends PageComponent impl
cssEditor: ace.Ace.Editor;
setValuesPending = false;
+ customPrettyActionEditorCompleter = CustomPrettyActionEditorCompleter;
+
constructor(protected store: Store,
private translate: TranslateService,
private raf: RafService) {
diff --git a/ui-ngx/src/app/modules/home/components/widget/action/custom-action.models.ts b/ui-ngx/src/app/modules/home/components/widget/action/custom-action.models.ts
new file mode 100644
index 0000000000..6539780e02
--- /dev/null
+++ b/ui-ngx/src/app/modules/home/components/widget/action/custom-action.models.ts
@@ -0,0 +1,77 @@
+///
+/// Copyright © 2016-2020 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import { TbEditorCompleter, TbEditorCompletions } from '@shared/models/ace/completion.models';
+import { widgetContextCompletions } from '@shared/models/ace/widget-completion.models';
+import { entityIdHref, entityTypeHref, serviceCompletions } from '@shared/models/ace/service-completion.models';
+
+const customActionCompletions: TbEditorCompletions = {
+ ...{
+ $event: {
+ meta: 'argument',
+ type: 'Event',
+ description: 'The DOM event that triggered this action.'
+ },
+ widgetContext: widgetContextCompletions.ctx,
+ entityId: {
+ meta: 'argument',
+ type: entityIdHref,
+ description: 'Id of the entity for which the action was triggered.',
+ children: {
+ id: {
+ meta: 'property',
+ type: 'string',
+ description: 'UUID Id string'
+ },
+ entityType: {
+ meta: 'property',
+ type: entityTypeHref,
+ description: 'Entity type'
+ }
+ }
+ },
+ entityName: {
+ meta: 'argument',
+ type: 'string',
+ description: 'Name of the entity for which the action was triggered.'
+ },
+ additionalParams: {
+ meta: 'argument',
+ type: 'object',
+ description: 'Optional object holding additional information.'
+ },
+ entityLabel: {
+ meta: 'argument',
+ type: 'string',
+ description: 'Label of the entity for which the action was triggered.'
+ }
+ },
+ ...serviceCompletions
+};
+
+const customPrettyActionCompletions: TbEditorCompletions = {
+ ...{
+ htmlTemplate: {
+ meta: 'argument',
+ type: 'string',
+ description: 'HTML template used to render custom dialog.'
+ }
+ },
+ ...customActionCompletions
+}
+
+export const CustomActionEditorCompleter = new TbEditorCompleter(customActionCompletions);
+export const CustomPrettyActionEditorCompleter = new TbEditorCompleter(customPrettyActionCompletions);
diff --git a/ui-ngx/src/app/modules/home/components/widget/action/widget-action-dialog.component.html b/ui-ngx/src/app/modules/home/components/widget/action/widget-action-dialog.component.html
index 7bf068a4d0..a61b3a80c6 100644
--- a/ui-ngx/src/app/modules/home/components/widget/action/widget-action-dialog.component.html
+++ b/ui-ngx/src/app/modules/home/components/widget/action/widget-action-dialog.component.html
@@ -135,6 +135,7 @@
formControlName="customFunction"
[functionArgs]="['$event', 'widgetContext', 'entityId', 'entityName', 'additionalParams', 'entityLabel']"
[validationArgs]="[]"
+ [editorCompleter]="customActionEditorCompleter"
>
diff --git a/ui-ngx/src/app/modules/home/components/widget/action/widget-action-dialog.component.ts b/ui-ngx/src/app/modules/home/components/widget/action/widget-action-dialog.component.ts
index bdd4b9db18..3d7e9ae595 100644
--- a/ui-ngx/src/app/modules/home/components/widget/action/widget-action-dialog.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/action/widget-action-dialog.component.ts
@@ -43,6 +43,7 @@ import { map, mergeMap, startWith, tap } from 'rxjs/operators';
import { DashboardService } from '@core/http/dashboard.service';
import { Dashboard } from '@shared/models/dashboard.models';
import { DashboardUtilsService } from '@core/services/dashboard-utils.service';
+import { CustomActionEditorCompleter } from '@home/components/widget/action/custom-action.models';
export interface WidgetActionDialogData {
isAdd: boolean;
@@ -76,6 +77,8 @@ export class WidgetActionDialogComponent extends DialogComponent>;
+ customActionEditorCompleter = CustomActionEditorCompleter;
+
submitted = false;
constructor(protected store: Store,
diff --git a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog-container.component.ts b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog-container.component.ts
index 3c2ac8d9f1..804579bc9b 100644
--- a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog-container.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog-container.component.ts
@@ -18,7 +18,7 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import {
Component,
ComponentFactory,
- ComponentRef,
+ ComponentRef, HostBinding,
Inject,
Injector,
OnDestroy,
@@ -46,6 +46,8 @@ export interface CustomDialogContainerData {
})
export class CustomDialogContainerComponent extends DialogComponent implements OnDestroy {
+ @HostBinding('style.height') height = '0px';
+
private readonly customComponentRef: ComponentRef;
constructor(protected store: Store,
diff --git a/ui-ngx/src/app/modules/home/components/widget/dynamic-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/dynamic-widget.component.ts
index bf337967b9..3fdae9105d 100644
--- a/ui-ngx/src/app/modules/home/components/widget/dynamic-widget.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/dynamic-widget.component.ts
@@ -19,7 +19,7 @@ import { Inject, Injector, OnDestroy, OnInit } from '@angular/core';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { IDynamicWidgetComponent, WidgetContext } from '@home/models/widget-component.models';
-import { HttpErrorResponse } from '@angular/common/http';
+import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { RafService } from '@core/services/raf.service';
import {
NotificationHorizontalPosition,
@@ -27,6 +27,19 @@ import {
NotificationVerticalPosition
} from '@core/notification/notification.models';
import { FormBuilder, Validators } from '@angular/forms';
+import { DeviceService } from '@core/http/device.service';
+import { AssetService } from '@core/http/asset.service';
+import { EntityViewService } from '@core/http/entity-view.service';
+import { CustomerService } from '@core/http/customer.service';
+import { DashboardService } from '@core/http/dashboard.service';
+import { UserService } from '@core/http/user.service';
+import { AttributeService } from '@core/http/attribute.service';
+import { EntityRelationService } from '@core/http/entity-relation.service';
+import { EntityService } from '@core/http/entity.service';
+import { DialogService } from '@core/services/dialog.service';
+import { CustomDialogService } from '@home/components/widget/dialog/custom-dialog.service';
+import { DatePipe } from '@angular/common';
+import { TranslateService } from '@ngx-translate/core';
export class DynamicWidgetComponent extends PageComponent implements IDynamicWidgetComponent, OnInit, OnDestroy {
@@ -47,6 +60,21 @@ export class DynamicWidgetComponent extends PageComponent implements IDynamicWid
@Inject('errorMessages') public readonly errorMessages: string[]) {
super(store);
this.ctx.$injector = $injector;
+ this.ctx.deviceService = $injector.get(DeviceService);
+ this.ctx.assetService = $injector.get(AssetService);
+ this.ctx.entityViewService = $injector.get(EntityViewService);
+ this.ctx.customerService = $injector.get(CustomerService);
+ this.ctx.dashboardService = $injector.get(DashboardService);
+ this.ctx.userService = $injector.get(UserService);
+ this.ctx.attributeService = $injector.get(AttributeService);
+ this.ctx.entityRelationService = $injector.get(EntityRelationService);
+ this.ctx.entityService = $injector.get(EntityService);
+ this.ctx.dialogs = $injector.get(DialogService);
+ this.ctx.customDialog = $injector.get(CustomDialogService);
+ this.ctx.date = $injector.get(DatePipe);
+ this.ctx.translate = $injector.get(TranslateService);
+ this.ctx.http = $injector.get(HttpClient);
+
this.ctx.$scope = this;
if (this.ctx.defaultSubscription) {
this.executingRpcRequest = this.ctx.defaultSubscription.executingRpcRequest;
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html
index 2d78efb3ec..4a66ba8d43 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html
@@ -84,7 +84,7 @@
[ngStyle]="cellStyle(alarm, column)">
-
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts
index 58f7b73aec..9923a07169 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts
@@ -95,6 +95,7 @@ interface AlarmsTableWidgetSettings extends TableWidgetSettings {
alarmsTitle: string;
enableSelection: boolean;
enableStatusFilter: boolean;
+ enableStickyAction: boolean;
displayDetails: boolean;
allowAcknowledgment: boolean;
allowClear: boolean;
@@ -122,6 +123,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
public enableSelection = true;
public displayPagination = true;
+ public enableStickyAction = false;
public pageSizeOptions;
public pageLink: PageLink;
public sortOrderProperty: string;
@@ -291,6 +293,7 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
this.searchAction.show = isDefined(this.settings.enableSearch) ? this.settings.enableSearch : true;
this.displayPagination = isDefined(this.settings.displayPagination) ? this.settings.displayPagination : true;
+ this.enableStickyAction = isDefined(this.settings.enableStickyAction) ? this.settings.enableStickyAction : false;
this.columnDisplayAction.show = isDefined(this.settings.enableSelectColumnDisplay) ? this.settings.enableSelectColumnDisplay : true;
this.statusFilterAction.show = isDefined(this.settings.enableStatusFilter) ? this.settings.enableStatusFilter : true;
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/leaflet-map.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/leaflet-map.ts
index 7e00d16664..3d11b704c0 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/leaflet-map.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/leaflet-map.ts
@@ -14,18 +14,18 @@
/// limitations under the License.
///
-import L, { FeatureGroup, LatLngBounds, LatLngTuple, markerClusterGroup, MarkerClusterGroupOptions } from 'leaflet';
+import L, { FeatureGroup, LatLngBounds, LatLngTuple, markerClusterGroup, MarkerClusterGroupOptions, MarkerClusterGroup } from 'leaflet';
import 'leaflet-providers';
import 'leaflet.markercluster/dist/leaflet.markercluster';
import {
- FormattedData,
- MapSettings,
- MarkerSettings,
- PolygonSettings,
- PolylineSettings,
- UnitedMapSettings
+ FormattedData,
+ MapSettings,
+ MarkerSettings,
+ PolygonSettings,
+ PolylineSettings,
+ UnitedMapSettings
} from './map-models';
import { Marker } from './markers';
import { BehaviorSubject, Observable } from 'rxjs';
@@ -33,6 +33,7 @@ import { filter } from 'rxjs/operators';
import { Polyline } from './polyline';
import { Polygon } from './polygon';
import { createTooltip, safeExecute } from '@home/components/widget/lib/maps/maps-utils';
+import { WidgetContext } from '@home/models/widget-component.models';
export default abstract class LeafletMap {
@@ -45,11 +46,13 @@ export default abstract class LeafletMap {
options: UnitedMapSettings;
bounds: L.LatLngBounds;
datasources: FormattedData[];
- markersCluster;
+ markersCluster: MarkerClusterGroup;
points: FeatureGroup;
- markersData = [];
+ markersData: FormattedData[] = [];
- protected constructor(public $container: HTMLElement, options: UnitedMapSettings) {
+ protected constructor(public ctx: WidgetContext,
+ public $container: HTMLElement,
+ options: UnitedMapSettings) {
this.options = options;
}
@@ -158,9 +161,9 @@ export default abstract class LeafletMap {
this.map = map;
if (this.options.useDefaultCenterPosition) {
this.map.panTo(this.options.defaultCenterPosition);
- this.bounds = map.getBounds();
+ this.bounds = map.getBounds();
}
- else this.bounds = new L.LatLngBounds(null, null);
+ else this.bounds = new L.LatLngBounds(null, null);
if (this.options.draggableMarker) {
this.addMarkerControl();
}
@@ -222,6 +225,7 @@ export default abstract class LeafletMap {
this.bounds = this.bounds.extend(this.options.defaultCenterPosition);
}
this.map.fitBounds(this.bounds, { padding: padding || [50, 50], animate: false });
+ this.map.invalidateSize();
}
}
}
@@ -244,7 +248,7 @@ export default abstract class LeafletMap {
}
// Markers
- updateMarkers(markersData) {
+ updateMarkers(markersData: FormattedData[], callback?) {
markersData.filter(mdata => !!this.convertPosition(mdata)).forEach(data => {
if (data.rotationAngle || data.rotationAngle === 0) {
const currentImage = this.options.useMarkerImageFunction ?
@@ -265,20 +269,22 @@ export default abstract class LeafletMap {
this.updateMarker(data.entityName, data, markersData, this.options)
}
else {
- this.createMarker(data.entityName, data, markersData, this.options as MarkerSettings);
+ this.createMarker(data.entityName, data, markersData, this.options as MarkerSettings, callback);
}
});
this.markersData = markersData;
}
- dragMarker = (e, data?) => {
+ dragMarker = (e, data = {}) => {
if (e.type !== 'dragend') return;
this.saveMarkerLocation({ ...data, ...this.convertToCustomFormat(e.target._latlng) });
}
- private createMarker(key: string, data: FormattedData, dataSources: FormattedData[], settings: MarkerSettings) {
+ private createMarker(key: string, data: FormattedData, dataSources: FormattedData[], settings: MarkerSettings, callback?) {
this.ready$.subscribe(() => {
const newMarker = new Marker(this.convertPosition(data), settings, data, dataSources, this.dragMarker);
+ if (callback)
+ newMarker.leafletMarker.on('click', () => { callback(data, true) });
if (this.bounds)
this.fitBounds(this.bounds.extend(newMarker.leafletMarker.getLatLng()));
this.markers.set(key, newMarker);
@@ -330,7 +336,7 @@ export default abstract class LeafletMap {
point.on('click', () => getTooltip(data));
}
else {
- createTooltip(point, this.options, pointsData, getTooltip(data, false));
+ createTooltip(point, this.options, data.$datasource, getTooltip(data, false));
}
this.points.addLayer(point);
});
@@ -338,49 +344,64 @@ export default abstract class LeafletMap {
});
}
- setImageAlias(alias: Observable) {
- }
-
// Polyline
- updatePolylines(polyData: FormattedData[][]) {
- polyData.forEach((data: FormattedData[]) => {
- if (data.length) {
- const dataSource = polyData.map(arr => arr[0]);
- if (this.polylines.get(data[0].entityName)) {
- this.updatePolyline(data[0].entityName, data, dataSource, this.options);
+ updatePolylines(polyData: FormattedData[][], data?: FormattedData) {
+ polyData.forEach((dataSource: FormattedData[]) => {
+ data = data || dataSource[0];
+ if (dataSource.length && data.entityName === dataSource[0].entityName) {
+ if (this.polylines.get(data.entityName)) {
+ this.updatePolyline(data, dataSource, this.options);
}
else {
this.createPolyline(data, dataSource, this.options);
}
}
+ else {
+ if (data)
+ this.removePolyline(dataSource[0]?.entityName)
+ }
})
}
- createPolyline(data: FormattedData[], dataSources: FormattedData[], settings: PolylineSettings) {
- if (data.length)
- this.ready$.subscribe(() => {
- const poly = new Polyline(this.map,
- data.map(el => this.convertPosition(el)).filter(el => !!el), data, dataSources, settings);
- const bounds = poly.leafletPoly.getBounds();
- this.fitBounds(bounds);
- this.polylines.set(data[0].entityName, poly);
- });
+ createPolyline(data: FormattedData, dataSources: FormattedData[], settings: PolylineSettings) {
+ this.ready$.subscribe(() => {
+ const poly = new Polyline(this.map,
+ dataSources.map(el => this.convertPosition(el)).filter(el => !!el), data, dataSources, settings);
+ const bounds = poly.leafletPoly.getBounds();
+ this.fitBounds(bounds);
+ this.polylines.set(data.entityName, poly);
+ });
}
- updatePolyline(key: string, data: FormattedData[], dataSources: FormattedData[], settings: PolylineSettings) {
+ updatePolyline(data: FormattedData, dataSources: FormattedData[], settings: PolylineSettings) {
this.ready$.subscribe(() => {
- const poly = this.polylines.get(key);
- poly.updatePolyline(settings, data.map(el => this.convertPosition(el)), dataSources);
- const bounds = poly.leafletPoly.getBounds();
+ const poly = this.polylines.get(data.entityName);
+ const oldBounds = poly.leafletPoly.getBounds();
+ poly.updatePolyline(dataSources.map(el => this.convertPosition(el)).filter(el => !!el), data, dataSources, settings);
+ const newBounds = poly.leafletPoly.getBounds();
+ if (oldBounds.toBBoxString() !== newBounds.toBBoxString()) {
+ this.fitBounds(newBounds);
+ }
});
}
+ removePolyline(name: string) {
+ const poly = this.polylines.get(name);
+ if (poly) {
+ this.map.removeLayer(poly.leafletPoly);
+ if (poly.polylineDecorator) {
+ this.map.removeLayer(poly.polylineDecorator);
+ }
+ this.polylines.delete(name);
+ }
+ }
+
// Polygon
updatePolygons(polyData: FormattedData[]) {
polyData.forEach((data: FormattedData) => {
- if (data.hasOwnProperty(this.options.polygonKeyName)) {
+ if (data && data.hasOwnProperty(this.options.polygonKeyName)) {
if (typeof (data[this.options.polygonKeyName]) === 'string') {
data[this.options.polygonKeyName] = JSON.parse(data[this.options.polygonKeyName]) as LatLngTuple[];
}
@@ -405,8 +426,13 @@ export default abstract class LeafletMap {
updatePolygon(polyData: FormattedData, dataSources: FormattedData[], settings: PolygonSettings) {
this.ready$.subscribe(() => {
- const poly = this.polygons.get(polyData.$datasource.entityName);
+ const poly = this.polygons.get(polyData.entityName);
+ const oldBounds = poly.leafletPoly.getBounds();
poly.updatePolygon(polyData, dataSources, settings);
+ const newBounds = poly.leafletPoly.getBounds();
+ if (oldBounds.toBBoxString() !== newBounds.toBBoxString()) {
+ this.fitBounds(newBounds);
+ }
});
}
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts
index 1d28bf9845..7bf1b8fb21 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts
@@ -26,11 +26,13 @@ import {
export type GenericFunction = (data: FormattedData, dsData: FormattedData[], dsIndex: number) => string;
export type MarkerImageFunction = (data: FormattedData, dsData: FormattedData[], dsIndex: number) => string;
+export type GetTooltip = (point: FormattedData, setTooltip?: boolean) => string;
+export type PosFuncton = (origXPos, origYPos) => { x, y };
export type MapSettings = {
draggableMarker: boolean;
initCallback?: () => any;
- posFunction: (origXPos, origYPos) => { x, y };
+ posFunction: PosFuncton;
defaultZoomLevel?: number;
disableScrollZooming?: boolean;
minZoomLevel?: number;
@@ -47,6 +49,7 @@ export type MapSettings = {
mapImageUrl?: string;
provider?: MapProviders;
credentials?: any; // declare credentials format
+ gmApiKey?: string;
defaultCenterPosition?: LatLngTuple;
markerClusteringSetting?;
useDefaultCenterPosition?: boolean;
@@ -162,10 +165,30 @@ export interface HistorySelectSettings {
buttonColor: string;
}
+export interface MapImage {
+ imageUrl: string;
+ aspect: number;
+ update?: boolean;
+}
+
export type TripAnimationSettings = {
+ showPoints: boolean;
pointColor: string;
pointSize: number;
pointTooltipOnRightPanel: boolean;
+ usePointAsAnchor: boolean;
+ normalizationStep: number;
+ showPolygon: boolean;
+ latKeyName: string;
+ lngKeyName: string;
+ rotationAngle: number;
+ label: string;
+ tooltipPattern: string;
+ useTooltipFunction: boolean;
+ useLabelFunction: boolean;
+ pointAsAnchorFunction: GenericFunction;
+ tooltipFunction: GenericFunction;
+ labelFunction: GenericFunction;
}
export type actionsHandler = ($event: Event, datasource: Datasource) => void;
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-widget2.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-widget2.ts
index aaaf6875c1..60c7b42a85 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-widget2.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map-widget2.ts
@@ -14,32 +14,38 @@
/// limitations under the License.
///
-import { MapProviders, UnitedMapSettings, providerSets, hereProviders, defaultSettings } from './map-models';
+import { defaultSettings, hereProviders, MapProviders, providerSets, UnitedMapSettings } from './map-models';
import LeafletMap from './leaflet-map';
import {
- commonMapSettingsSchema,
- routeMapSettingsSchema,
- markerClusteringSettingsSchema,
- markerClusteringSettingsSchemaLeaflet,
- mapProviderSchema,
- mapPolygonSchema
+ commonMapSettingsSchema,
+ mapPolygonSchema,
+ mapProviderSchema,
+ markerClusteringSettingsSchema,
+ markerClusteringSettingsSchemaLeaflet,
+ routeMapSettingsSchema
} from './schemes';
-import { MapWidgetStaticInterface, MapWidgetInterface } from './map-widget.interface';
-import { initSchema, addToSchema, mergeSchemes, addCondition, addGroupInfo } from '@core/schema-utils';
-import { of, Subject } from 'rxjs';
+import { MapWidgetInterface, MapWidgetStaticInterface } from './map-widget.interface';
+import { addCondition, addGroupInfo, addToSchema, initSchema, mergeSchemes } from '@core/schema-utils';
import { WidgetContext } from '@app/modules/home/models/widget-component.models';
import { getDefCenterPosition, parseArray, parseData, parseFunction, parseWithTranslation } from './maps-utils';
-import { JsonSettingsSchema, WidgetActionDescriptor, DatasourceType, widgetType, Datasource } from '@shared/models/widget.models';
+import { Datasource, DatasourceData, JsonSettingsSchema, WidgetActionDescriptor } from '@shared/models/widget.models';
import { EntityId } from '@shared/models/id/entity-id';
import { AttributeScope, DataKeyType, LatestTelemetry } from '@shared/models/telemetry/telemetry.models';
import { AttributeService } from '@core/http/attribute.service';
import { TranslateService } from '@ngx-translate/core';
import { UtilsService } from '@core/services/utils.service';
+import _ from 'lodash';
// @dynamic
export class MapWidgetController implements MapWidgetInterface {
- constructor(public mapProvider: MapProviders, private drawRoutes: boolean, public ctx: WidgetContext, $element: HTMLElement, isEdit?) {
+ constructor(
+ public mapProvider: MapProviders,
+ private drawRoutes: boolean,
+ public ctx: WidgetContext,
+ $element: HTMLElement,
+ isEdit?: boolean
+ ) {
if (this.map) {
this.map.map.remove();
delete this.map;
@@ -57,21 +63,22 @@ export class MapWidgetController implements MapWidgetInterface {
this.settings.markerClick = this.getDescriptors('markerClick');
this.settings.polygonClick = this.getDescriptors('polygonClick');
- // this.settings.
const MapClass = providerSets[this.provider]?.MapClass;
if (!MapClass) {
return;
}
parseWithTranslation.setTranslate(this.translate);
- this.map = new MapClass($element, this.settings);
- this.map.setImageAlias(this.subscribeForImageAttribute());
+ this.map = new MapClass(this.ctx, $element, this.settings);
this.map.saveMarkerLocation = this.setMarkerLocation;
+ if (this.settings.draggableMarker) {
+ this.map.setDataSources(parseData(this.data));
+ }
}
map: LeafletMap;
provider: MapProviders;
schema: JsonSettingsSchema;
- data;
+ data: DatasourceData[];
settings: UnitedMapSettings;
public static dataKeySettingsSchema(): object {
@@ -79,9 +86,9 @@ export class MapWidgetController implements MapWidgetInterface {
}
public static getProvidersSchema(mapProvider: MapProviders, ignoreImageMap = false) {
+ const providerSchema = _.cloneDeep(mapProviderSchema);
if (mapProvider)
- mapProviderSchema.schema.properties.provider.default = mapProvider;
- const providerSchema = mapProviderSchema;
+ providerSchema.schema.properties.provider.default = mapProvider;
if (ignoreImageMap) {
providerSchema.form[0].items = providerSchema.form[0]?.items.filter(item => item.value !== 'image-map');
}
@@ -239,9 +246,6 @@ export class MapWidgetController implements MapWidgetInterface {
if (this.settings.showPolygon) {
this.map.updatePolygons(parseData(this.data));
}
- if (this.settings.draggableMarker) {
- this.map.setDataSources(parseData(this.data));
- }
this.map.updateMarkers(parseData(this.data));
}
@@ -250,48 +254,6 @@ export class MapWidgetController implements MapWidgetInterface {
this.map.onResize();
}
- subscribeForImageAttribute() {
- const imageEntityAlias = this.settings.imageEntityAlias;
- const imageUrlAttribute = this.settings.imageUrlAttribute;
- if (!imageEntityAlias || !imageUrlAttribute) {
- return of(false);
- }
- const entityAliasId = this.ctx.aliasController.getEntityAliasId(imageEntityAlias);
- if (!entityAliasId) {
- return of(false);
- }
- const datasources = [
- {
- type: DatasourceType.entity,
- name: imageEntityAlias,
- aliasName: imageEntityAlias,
- entityAliasId,
- dataKeys: [
- {
- type: DataKeyType.attribute,
- name: imageUrlAttribute,
- label: imageUrlAttribute,
- settings: {},
- _hash: Math.random()
- }
- ]
- }
- ];
- const result = new Subject();
- const imageUrlSubscriptionOptions = {
- datasources,
- useDashboardTimewindow: false,
- type: widgetType.latest,
- callbacks: {
- onDataUpdated: (subscription) => {
- result.next(subscription?.data[0]?.data[0]);
- }
- }
- };
- this.ctx.subscriptionApi.createSubscription(imageUrlSubscriptionOptions, true).subscribe(() => { });
- return result;
- }
-
onDestroy() {
}
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/maps-utils.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/maps-utils.ts
index 608035fc39..8db4c2edbe 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/maps-utils.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/maps-utils.ts
@@ -20,7 +20,7 @@ import { Datasource } from '@app/shared/models/widget.models';
import _ from 'lodash';
import { Observable, Observer, of } from 'rxjs';
import { map } from 'rxjs/operators';
-import { createLabelFromDatasource, hashCode, isNumber, padValue } from '@core/utils';
+import { createLabelFromDatasource, hashCode, isNumber, isUndefined, padValue } from '@core/utils';
export function createTooltip(target: L.Layer,
settings: MarkerSettings | PolylineSettings | PolygonSettings,
@@ -40,26 +40,51 @@ export function createTooltip(target: L.Layer,
});
}
target.on('popupopen', () => {
- const actions = document.getElementsByClassName('tb-custom-action');
- Array.from(actions).forEach(
- (element: HTMLElement) => {
- const actionName = element.getAttribute('data-action-name');
- if (element && settings.tooltipAction[actionName]) {
- element.addEventListener('click', ($event) => settings.tooltipAction[actionName]($event, datasource));
- }
- });
+ bindPopupActions(popup, settings, datasource);
});
return popup;
}
+export function bindPopupActions(popup: L.Popup, settings: MarkerSettings | PolylineSettings | PolygonSettings,
+ datasource: Datasource) {
+ const actions = popup.getElement().getElementsByClassName('tb-custom-action');
+ Array.from(actions).forEach(
+ (element: HTMLElement) => {
+ const actionName = element.getAttribute('data-action-name');
+ if (element && settings.tooltipAction[actionName]) {
+ element.onclick = ($event) =>
+ {
+ settings.tooltipAction[actionName]($event, datasource);
+ return false;
+ };
+ }
+ });
+}
+
export function getRatio(firsMoment: number, secondMoment: number, intermediateMoment: number): number {
return (intermediateMoment - firsMoment) / (secondMoment - firsMoment);
}
-export function findAngle(startPoint, endPoint) {
- let angle = -Math.atan2(endPoint.latitude - startPoint.latitude, endPoint.longitude - startPoint.longitude);
- angle = angle * 180 / Math.PI;
- return parseInt(angle.toFixed(2), 10);
+export function interpolateOnLineSegment(
+ pointA: FormattedData,
+ pointB: FormattedData,
+ latKeyName: string,
+ lngKeyName: string,
+ ratio: number
+): { [key: string]: number } {
+ return {
+ [latKeyName]: (pointA[latKeyName] + (pointB[latKeyName] - pointA[latKeyName]) * ratio),
+ [lngKeyName]: (pointA[lngKeyName] + (pointB[lngKeyName] - pointA[lngKeyName]) * ratio)
+ };
+}
+
+export function findAngle(startPoint: FormattedData, endPoint: FormattedData, latKeyName: string, lngKeyName: string): number {
+ if(isUndefined(startPoint) || isUndefined(endPoint)){
+ return 0;
+ }
+ let angle = -Math.atan2(endPoint[latKeyName] - startPoint[latKeyName], endPoint[lngKeyName] - startPoint[lngKeyName]);
+ angle = angle * 180 / Math.PI;
+ return parseInt(angle.toFixed(2), 10);
}
@@ -117,7 +142,7 @@ const linkActionRegex = /([^<]*)<\/link-act>/g;
const buttonActionRegex = /([^<]*)<\/button-act>/g;
function createLinkElement(actionName: string, actionText: string): string {
- return `${actionText} `;
+ return `${actionText} `;
}
function createButtonElement(actionName: string, actionText: string) {
@@ -238,11 +263,11 @@ export function parseArray(input: any[]): any[] {
const obj = {
entityName: entityArray[0]?.datasource?.entityName,
$datasource: entityArray[0]?.datasource,
- dsIndex,
+ dsIndex: i,
time: el[0],
deviceType: null
};
- entityArray.filter(e => e.data.length).forEach(entity => {
+ entityArray.filter(e => e.data.length && e.data[i]).forEach(entity => {
obj[entity?.dataKey?.label] = entity?.data[i][1];
obj[entity?.dataKey?.label + '|ts'] = entity?.data[0][0];
if (entity?.dataKey?.label === 'type') {
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/markers.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/markers.ts
index 7c8f50e13f..eec2e257ea 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/markers.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/markers.ts
@@ -16,14 +16,14 @@
import L, { LeafletMouseEvent } from 'leaflet';
import { FormattedData, MarkerSettings } from './map-models';
-import { aspectCache, createTooltip, parseWithTranslation, safeExecute } from './maps-utils';
+import { aspectCache, bindPopupActions, createTooltip, parseWithTranslation, safeExecute } from './maps-utils';
import tinycolor from 'tinycolor2';
import { isDefined } from '@core/utils';
export class Marker {
leafletMarker: L.Marker;
- tooltipOffset: [number, number];
- markerOffset: [number, number];
+ tooltipOffset: L.LatLngTuple;
+ markerOffset: L.LatLngTuple;
tooltip: L.Popup;
location: L.LatLngExpression;
data: FormattedData;
@@ -76,6 +76,9 @@ export class Marker {
const pattern = this.settings.useTooltipFunction ?
safeExecute(this.settings.tooltipFunction, [this.data, this.dataSources, this.data.dsIndex]) : this.settings.tooltipPattern;
this.tooltip.setContent(parseWithTranslation.parseTemplate(pattern, data, true));
+ if (this.tooltip.isOpen() && this.tooltip.getElement()) {
+ bindPopupActions(this.tooltip, this.settings, data.$datasource);
+ }
}
updateMarkerPosition(position: L.LatLngExpression) {
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/polygon.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/polygon.ts
index 3c90db3ba7..2af02b2878 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/polygon.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/polygon.ts
@@ -21,11 +21,11 @@ import { FormattedData, PolygonSettings } from './map-models';
export class Polygon {
leafletPoly: L.Polygon;
- tooltip;
- data;
- dataSources;
+ tooltip: L.Popup;
+ data: FormattedData;
+ dataSources: FormattedData[];
- constructor(public map, polyData: FormattedData, dataSources, private settings: PolygonSettings) {
+ constructor(public map, polyData: FormattedData, dataSources: FormattedData[], private settings: PolygonSettings) {
this.dataSources = dataSources;
this.data = polyData;
const polygonColor = this.getPolygonColor(settings);
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/polyline.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/polyline.ts
index ba001d7c1e..543f4a718a 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/polyline.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/polyline.ts
@@ -17,82 +17,78 @@
import L, { PolylineDecoratorOptions } from 'leaflet';
import 'leaflet-polylinedecorator';
-import { PolylineSettings } from './map-models';
+import { FormattedData, PolylineSettings } from './map-models';
import { safeExecute } from '@home/components/widget/lib/maps/maps-utils';
export class Polyline {
- leafletPoly: L.Polyline;
- polylineDecorator: L.PolylineDecorator;
- dataSources;
- data;
+ leafletPoly: L.Polyline;
+ polylineDecorator: L.PolylineDecorator;
+ dataSources: FormattedData[];
+ data: FormattedData;
- constructor(private map: L.Map, locations, data, dataSources, settings: PolylineSettings) {
- this.dataSources = dataSources;
- this.data = data;
+ constructor(private map: L.Map, locations: L.LatLng[], data: FormattedData, dataSources: FormattedData[], settings: PolylineSettings) {
+ this.dataSources = dataSources;
+ this.data = data;
- this.leafletPoly = L.polyline(locations,
- this.getPolyStyle(settings)
- ).addTo(this.map);
+ this.leafletPoly = L.polyline(locations,
+ this.getPolyStyle(settings)
+ ).addTo(this.map);
- if (settings.usePolylineDecorator) {
- this.polylineDecorator = L.polylineDecorator(this.leafletPoly, this.getDecoratorSettings(settings)).addTo(this.map);
- }
- }
-
- getDecoratorSettings(settings: PolylineSettings): PolylineDecoratorOptions {
- return {
- patterns: [
- {
- offset: settings.decoratorOffset,
- endOffset: settings.endDecoratorOffset,
- repeat: settings.decoratorRepeat,
- symbol: L.Symbol[settings.decoratorSymbol]({
- pixelSize: settings.decoratorSymbolSize,
- polygon: false,
- pathOptions: {
- color: settings.useDecoratorCustomColor ? settings.decoratorCustomColor : this.getPolyStyle(settings).color,
- stroke: true
- }
- })
- }
- ],
- interactive: false,
- } as PolylineDecoratorOptions
- }
-
- updatePolyline(settings, data, dataSources) {
- this.data = data;
- this.dataSources = dataSources;
- this.leafletPoly.setStyle(this.getPolyStyle(settings));
- // this.setPolylineLatLngs(data);
- if (this.polylineDecorator)
- this.polylineDecorator.setPaths(this.leafletPoly);
+ if (settings.usePolylineDecorator) {
+ this.polylineDecorator = L.polylineDecorator(this.leafletPoly, this.getDecoratorSettings(settings)).addTo(this.map);
}
+ }
- getPolyStyle(settings: PolylineSettings): L.PolylineOptions {
- return {
- color: settings.useColorFunction ?
- safeExecute(settings.colorFunction,
- [this.data, this.dataSources, this.dataSources[0]?.dsIndex]) : settings.color,
- opacity: settings.useStrokeOpacityFunction ?
- safeExecute(settings.strokeOpacityFunction,
- [this.data, this.dataSources, this.dataSources[0]?.dsIndex]) : settings.strokeOpacity,
- weight: settings.useStrokeWeightFunction ?
- safeExecute(settings.strokeWeightFunction,
- [this.data, this.dataSources, this.dataSources[0]?.dsIndex]) : settings.strokeWeight,
+ getDecoratorSettings(settings: PolylineSettings): PolylineDecoratorOptions {
+ return {
+ patterns: [
+ {
+ offset: settings.decoratorOffset,
+ endOffset: settings.endDecoratorOffset,
+ repeat: settings.decoratorRepeat,
+ symbol: L.Symbol[settings.decoratorSymbol]({
+ pixelSize: settings.decoratorSymbolSize,
+ polygon: false,
+ pathOptions: {
+ color: settings.useDecoratorCustomColor ? settings.decoratorCustomColor : this.getPolyStyle(settings).color,
+ stroke: true
+ }
+ })
}
+ ]
}
+ }
- removePolyline() {
- this.map.removeLayer(this.leafletPoly);
- }
+ updatePolyline(locations: L.LatLng[], data: FormattedData, dataSources: FormattedData[], settings: PolylineSettings) {
+ this.data = data;
+ this.dataSources = dataSources;
+ this.leafletPoly.setLatLngs(locations);
+ this.leafletPoly.setStyle(this.getPolyStyle(settings));
+ if (this.polylineDecorator)
+ this.polylineDecorator.setPaths(this.leafletPoly);
+ }
- getPolylineLatLngs() {
- return this.leafletPoly.getLatLngs();
+ getPolyStyle(settings: PolylineSettings): L.PolylineOptions {
+ return {
+ interactive: false,
+ color: settings.useColorFunction ?
+ safeExecute(settings.colorFunction,
+ [this.data, this.dataSources, this.data.dsIndex]) : settings.color,
+ opacity: settings.useStrokeOpacityFunction ?
+ safeExecute(settings.strokeOpacityFunction,
+ [this.data, this.dataSources, this.data.dsIndex]) : settings.strokeOpacity,
+ weight: settings.useStrokeWeightFunction ?
+ safeExecute(settings.strokeWeightFunction,
+ [this.data, this.dataSources, this.data.dsIndex]) : settings.strokeWeight,
}
+ }
- setPolylineLatLngs(latLngs) {
- this.leafletPoly.setLatLngs(latLngs);
- }
+ removePolyline() {
+ this.map.removeLayer(this.leafletPoly);
+ }
+
+ getPolylineLatLngs() {
+ return this.leafletPoly.getLatLngs();
+ }
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/google-map.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/google-map.ts
index b62262bf53..b0254ee2c2 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/google-map.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/google-map.ts
@@ -19,39 +19,46 @@ import L from 'leaflet';
import LeafletMap from '../leaflet-map';
import { UnitedMapSettings } from '../map-models';
import 'leaflet.gridlayer.googlemutant';
+import { ResourcesService } from '@core/services/resources.service';
+import { Injector } from '@angular/core';
+import { WidgetContext } from '@home/models/widget-component.models';
-let googleLoaded = false;
+const gmGlobals: GmGlobal = {};
+interface GmGlobal {
+ [key: string]: boolean;
+}
export class GoogleMap extends LeafletMap {
- constructor($container, options: UnitedMapSettings) {
+ private resource: ResourcesService;
- super($container, options);
- this.loadGoogle(() => {
- const map = L.map($container).setView(options?.defaultCenterPosition, options?.defaultZoomLevel);
- (L.gridLayer as any).googleMutant({
- type: options?.gmDefaultMapType || 'roadmap'
- }).addTo(map);
- super.setMap(map);
- }, options.credentials.apiKey);
- super.initSettings(options);
- }
+ constructor(ctx: WidgetContext, $container, options: UnitedMapSettings) {
+ super(ctx, $container, options);
+ this.resource = ctx.$injector.get(ResourcesService);
+ this.loadGoogle(() => {
+ const map = L.map($container, {attributionControl: false}).setView(options?.defaultCenterPosition, options?.defaultZoomLevel);
+ (L.gridLayer as any).googleMutant({
+ type: options?.gmDefaultMapType || 'roadmap'
+ }).addTo(map);
+ super.setMap(map);
+ }, options.gmApiKey);
+ super.initSettings(options);
+ }
- private loadGoogle(callback, apiKey = 'AIzaSyDoEx2kaGz3PxwbI9T7ccTSg5xjdw8Nw8Q') {
- if (googleLoaded) {
- callback()
- }
- else {
- googleLoaded = true;
- const script = document.createElement('script');
- script.onload = () => {
- callback();
- }
- script.onerror = () => {
- googleLoaded = false;
- }
- script.src = `https://maps.googleapis.com/maps/api/js?key=${apiKey}`;
- document.getElementsByTagName('head')[0].appendChild(script);
+ private loadGoogle(callback, apiKey = 'AIzaSyDoEx2kaGz3PxwbI9T7ccTSg5xjdw8Nw8Q') {
+ if (gmGlobals[apiKey]) {
+ callback()
+ } else {
+ this.resource.loadResource(`https://maps.googleapis.com/maps/api/js?key=${apiKey}`).subscribe(
+ () => {
+ gmGlobals[apiKey] = true;
+ callback();
+ },
+ (error) => {
+ gmGlobals[apiKey] = false;
+ console.error(`Google map api load failed!`, error);
}
+ );
}
+ }
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/here-map.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/here-map.ts
index 9ad0d7b160..17a8f61801 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/here-map.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/here-map.ts
@@ -17,10 +17,11 @@
import L from 'leaflet';
import LeafletMap from '../leaflet-map';
import { UnitedMapSettings } from '../map-models';
+import { WidgetContext } from '@home/models/widget-component.models';
export class HEREMap extends LeafletMap {
- constructor($container, options: UnitedMapSettings) {
- super($container, options);
+ constructor(ctx: WidgetContext, $container, options: UnitedMapSettings) {
+ super(ctx, $container, options);
const map = L.map($container).setView(options?.defaultCenterPosition, options?.defaultZoomLevel);
const tileLayer = (L.tileLayer as any).provider(options.mapProviderHere || 'HERE.normalDay', options.credentials);
tileLayer.addTo(map);
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/image-map.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/image-map.ts
index ac46c2772b..7d38477f14 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/image-map.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/image-map.ts
@@ -14,47 +14,121 @@
/// limitations under the License.
///
-import L, { LatLngLiteral, LatLngBounds, LatLngTuple } from 'leaflet';
+import L, { LatLngBounds, LatLngLiteral, LatLngTuple } from 'leaflet';
import LeafletMap from '../leaflet-map';
-import { UnitedMapSettings } from '../map-models';
-import { Observable } from 'rxjs';
-import { map, filter, switchMap } from 'rxjs/operators';
+import { MapImage, PosFuncton, UnitedMapSettings } from '../map-models';
+import { Observable, ReplaySubject } from 'rxjs';
+import { filter, map, mergeMap } from 'rxjs/operators';
import { aspectCache, calculateNewPointCoordinate, parseFunction } from '@home/components/widget/lib/maps/maps-utils';
+import { WidgetContext } from '@home/models/widget-component.models';
+import { DataSet, DatasourceType, widgetType } from '@shared/models/widget.models';
+import { DataKeyType } from '@shared/models/telemetry/telemetry.models';
+import { WidgetSubscriptionOptions } from '@core/api/widget-api.models';
const maxZoom = 4;// ?
export class ImageMap extends LeafletMap {
- imageOverlay;
+ imageOverlay: L.ImageOverlay;
aspect = 0;
width = 0;
height = 0;
- imageUrl;
- posFunction;
-
- constructor($container: HTMLElement, options: UnitedMapSettings) {
- super($container, options);
- this.posFunction = parseFunction(options.posFunction, ['origXPos', 'origYPos']) as ((origXPos, origYPos) => { x, y });
- this.imageUrl = options.mapUrl;
- aspectCache(this.imageUrl).subscribe(aspect => {
- this.aspect = aspect;
+ imageUrl: string;
+ posFunction: PosFuncton;
+
+ constructor(ctx: WidgetContext, $container: HTMLElement, options: UnitedMapSettings) {
+ super(ctx, $container, options);
+ this.posFunction = parseFunction(options.posFunction, ['origXPos', 'origYPos']) as PosFuncton;
+ this.mapImage(options).subscribe((mapImage) => {
+ this.imageUrl = mapImage.imageUrl;
+ this.aspect = mapImage.aspect;
+ if (mapImage.update) {
+ this.onResize(true);
+ } else {
this.onResize();
super.setMap(this.map);
super.initSettings(options);
+ }
});
}
- setImageAlias(alias: Observable) {
- alias.pipe(filter(result => result), map(el => el[1]), switchMap(res => {
- this.imageUrl = res;
- return aspectCache(res);
- })).subscribe(aspect => {
- this.aspect = aspect;
- this.onResize(true);
- });
+ private mapImage(options: UnitedMapSettings): Observable {
+ const imageEntityAlias = options.imageEntityAlias;
+ const imageUrlAttribute = options.imageUrlAttribute;
+ if (!imageEntityAlias || !imageUrlAttribute) {
+ return this.imageFromUrl(options.mapUrl);
+ }
+ const entityAliasId = this.ctx.aliasController.getEntityAliasId(imageEntityAlias);
+ if (!entityAliasId) {
+ return this.imageFromUrl(options.mapUrl);
+ }
+ const datasources = [
+ {
+ type: DatasourceType.entity,
+ name: imageEntityAlias,
+ aliasName: imageEntityAlias,
+ entityAliasId,
+ dataKeys: [
+ {
+ type: DataKeyType.attribute,
+ name: imageUrlAttribute,
+ label: imageUrlAttribute,
+ settings: {},
+ _hash: Math.random()
+ }
+ ]
+ }
+ ];
+ const result = new ReplaySubject<[DataSet, boolean]>();
+ let isUpdate = false;
+ const imageUrlSubscriptionOptions: WidgetSubscriptionOptions = {
+ datasources,
+ useDashboardTimewindow: false,
+ type: widgetType.latest,
+ callbacks: {
+ onDataUpdated: (subscription) => {
+ result.next([subscription.data[0]?.data, isUpdate]);
+ isUpdate = true;
+ }
+ }
+ };
+ this.ctx.subscriptionApi.createSubscription(imageUrlSubscriptionOptions, true).subscribe(() => { });
+ return this.imageFromAlias(result);
+ }
+
+ private imageFromUrl(url: string): Observable {
+ return aspectCache(url).pipe(
+ map( aspect => {
+ const mapImage: MapImage = {
+ imageUrl: url,
+ aspect,
+ update: false
+ };
+ return mapImage;
+ }
+ ));
+ }
+
+ private imageFromAlias(alias: Observable<[DataSet, boolean]>): Observable {
+ return alias.pipe(
+ filter(result => result[0].length > 0),
+ mergeMap(res => {
+ const mapImage: MapImage = {
+ imageUrl: res[0][0][1],
+ aspect: null,
+ update: res[1]
+ };
+ return aspectCache(mapImage.imageUrl).pipe(
+ map((aspect) => {
+ mapImage.aspect = aspect;
+ return mapImage;
+ }
+ ));
+ })
+ );
}
- updateBounds(updateImage?, lastCenterPos?) {
+ updateBounds(updateImage?: boolean, lastCenterPos?) {
const w = this.width;
const h = this.height;
let southWest = this.pointToLatLng(0, h);
@@ -81,12 +155,12 @@ export class ImageMap extends LeafletMap {
lastCenterPos.y *= h;
const center = this.pointToLatLng(lastCenterPos.x, lastCenterPos.y);
setTimeout(() => {
- this.map.panTo(center, { animate: false });
+ this.map.panTo(center, { animate: false });
}, 0);
}
}
- onResize(updateImage?) {
+ onResize(updateImage?: boolean) {
let width = this.$container.clientWidth;
if (width > 0 && this.aspect) {
let height = width / this.aspect;
@@ -117,7 +191,7 @@ export class ImageMap extends LeafletMap {
fitBounds(bounds: LatLngBounds, padding?: LatLngTuple) { }
- initMap(updateImage?) {
+ initMap(updateImage?: boolean) {
if (!this.map && this.aspect > 0) {
const center = this.pointToLatLng(this.width / 2, this.height / 2);
this.map = L.map(this.$container, {
@@ -137,8 +211,8 @@ export class ImageMap extends LeafletMap {
if (isNaN(expression[this.options.xPosKeyName]) || isNaN(expression[this.options.yPosKeyName])) return null;
Object.assign(expression, this.posFunction(expression[this.options.xPosKeyName], expression[this.options.yPosKeyName]));
return this.pointToLatLng(
- expression.x * this.width,
- expression.y * this.height);
+ expression.x * this.width,
+ expression.y * this.height);
}
pointToLatLng(x, y): L.LatLng {
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/openstreet-map.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/openstreet-map.ts
index 443e565e61..d1e2379dbd 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/openstreet-map.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/openstreet-map.ts
@@ -17,10 +17,11 @@
import L from 'leaflet';
import LeafletMap from '../leaflet-map';
import { UnitedMapSettings } from '../map-models';
+import { WidgetContext } from '@home/models/widget-component.models';
export class OpenStreetMap extends LeafletMap {
- constructor($container, options: UnitedMapSettings) {
- super($container, options);
+ constructor(ctx: WidgetContext, $container, options: UnitedMapSettings) {
+ super(ctx, $container, options);
const map = L.map($container).setView(options?.defaultCenterPosition, options?.defaultZoomLevel);
let tileLayer;
if (options.useCustomProvider)
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/tencent-map.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/tencent-map.ts
index 51c848c533..a615de883a 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/tencent-map.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/tencent-map.ts
@@ -18,15 +18,20 @@
import L from 'leaflet';
import LeafletMap from '../leaflet-map';
import { UnitedMapSettings } from '../map-models';
+import { WidgetContext } from '@home/models/widget-component.models';
export class TencentMap extends LeafletMap {
- constructor($container, options: UnitedMapSettings) {
- super($container, options);
- const txUrl = 'http://rt{s}.map.gtimg.com/realtimerender?z={z}&x={x}&y={y}&type=vector&style=0';
- const map = L.map($container).setView(options?.defaultCenterPosition, options?.defaultZoomLevel);
- const txLayer = L.tileLayer(txUrl, { subdomains: '0123', tms: true }).addTo(map);
- txLayer.addTo(map);
- super.setMap(map);
- super.initSettings(options);
- }
+ constructor(ctx: WidgetContext, $container, options: UnitedMapSettings) {
+ super(ctx, $container, options);
+ const txUrl = 'http://rt{s}.map.gtimg.com/realtimerender?z={z}&x={x}&y={y}&type=vector&style=0';
+ const map = L.map($container).setView(options?.defaultCenterPosition, options?.defaultZoomLevel);
+ const txLayer = L.tileLayer(txUrl, {
+ subdomains: '0123',
+ tms: true,
+ attribution: '©2020 Tencent - GS(2018)2236号- Data© NavInfo'
+ }).addTo(map);
+ txLayer.addTo(map);
+ super.setMap(map);
+ super.initSettings(options);
+ }
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/schemes.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/schemes.ts
index 411f55706e..b8d953394a 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/schemes.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/schemes.ts
@@ -409,7 +409,10 @@ export const commonMapSettingsSchema =
condition: 'model.provider !== "image-map"'
},
'draggableMarker',
- 'disableScrollZooming',
+ {
+ key: 'disableScrollZooming',
+ condition: 'model.provider !== "image-map"'
+ },
{
key: 'latKeyName',
condition: 'model.provider !== "image-map"'
@@ -641,7 +644,10 @@ export const markerClusteringSettingsSchema =
required: []
},
form: [
- 'useClusterMarkers',
+ {
+ key: 'useClusterMarkers',
+ condition: 'model.provider !== "image-map"'
+ },
]
};
@@ -878,13 +884,18 @@ export const pointSchema =
required: []
},
form: [
- 'showPoints', {
+ 'showPoints',
+ {
key: 'pointColor',
type: 'color'
- }, 'pointSize', 'usePointAsAnchor', {
+ },
+ 'pointSize',
+ 'usePointAsAnchor',
+ {
key: 'pointAsAnchorFunction',
type: 'javascript'
- }, 'pointTooltipOnRightPanel',
+ },
+ 'pointTooltipOnRightPanel',
]
};
diff --git a/ui-ngx/src/app/modules/home/components/widget/trip-animation/trip-animation.component.html b/ui-ngx/src/app/modules/home/components/widget/trip-animation/trip-animation.component.html
index 9449e3aba9..2ea80cf2af 100644
--- a/ui-ngx/src/app/modules/home/components/widget/trip-animation/trip-animation.component.html
+++ b/ui-ngx/src/app/modules/home/components/widget/trip-animation/trip-animation.component.html
@@ -32,6 +32,12 @@
[ngStyle]="{'background-color': settings.tooltipColor, 'opacity': settings.tooltipOpacity, 'color': settings.tooltipFontColor}">
-
-
\ No newline at end of file
+
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/trip-animation/trip-animation.component.ts b/ui-ngx/src/app/modules/home/components/widget/trip-animation/trip-animation.component.ts
index 7dfec08c9f..bad22d6d47 100644
--- a/ui-ngx/src/app/modules/home/components/widget/trip-animation/trip-animation.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/trip-animation/trip-animation.component.ts
@@ -14,21 +14,38 @@
/// limitations under the License.
///
-import L from 'leaflet';
import _ from 'lodash';
import tinycolor from 'tinycolor2';
-import { interpolateOnPointSegment } from 'leaflet-geometryutil';
-import { AfterViewInit, ChangeDetectorRef, Component, Input, OnInit, SecurityContext, ViewChild } from '@angular/core';
+import {
+ AfterViewInit,
+ ChangeDetectorRef,
+ Component,
+ Input,
+ OnDestroy,
+ OnInit,
+ SecurityContext,
+ ViewChild
+} from '@angular/core';
import { MapWidgetController, TbMapWidgetV2 } from '../lib/maps/map-widget2';
-import { MapProviders, FormattedData } from '../lib/maps/map-models';
-import { initSchema, addToSchema, addGroupInfo, addCondition } from '@app/core/schema-utils';
-import { tripAnimationSchema, mapPolygonSchema, pathSchema, pointSchema } from '../lib/maps/schemes';
+import { FormattedData, MapProviders, TripAnimationSettings } from '../lib/maps/map-models';
+import { addCondition, addGroupInfo, addToSchema, initSchema } from '@app/core/schema-utils';
+import { mapPolygonSchema, pathSchema, pointSchema, tripAnimationSchema } from '../lib/maps/schemes';
import { DomSanitizer } from '@angular/platform-browser';
import { WidgetContext } from '@app/modules/home/models/widget-component.models';
-import { findAngle, getRatio, parseArray, parseWithTranslation, safeExecute } from '../lib/maps/maps-utils';
+import {
+ findAngle,
+ getRatio,
+ interpolateOnLineSegment,
+ parseArray,
+ parseFunction,
+ parseWithTranslation,
+ safeExecute
+} from '../lib/maps/maps-utils';
import { JsonSettingsSchema, WidgetConfig } from '@shared/models/widget.models';
import moment from 'moment';
+import { isUndefined } from '@core/utils';
+import { ResizeObserver } from '@juggle/resize-observer';
@Component({
@@ -37,7 +54,9 @@ import moment from 'moment';
templateUrl: './trip-animation.component.html',
styleUrls: ['./trip-animation.component.scss']
})
-export class TripAnimationComponent implements OnInit, AfterViewInit {
+export class TripAnimationComponent implements OnInit, AfterViewInit, OnDestroy {
+
+ private mapResize$: ResizeObserver;
constructor(private cd: ChangeDetectorRef, private sanitizer: DomSanitizer) { }
@@ -46,20 +65,20 @@ export class TripAnimationComponent implements OnInit, AfterViewInit {
@ViewChild('map') mapContainer;
mapWidget: MapWidgetController;
- historicalData;
- intervals;
- normalizationStep = 1000;
- interpolatedData = [];
+ historicalData: FormattedData[][];
+ normalizationStep: number;
+ interpolatedTimeData = [];
widgetConfig: WidgetConfig;
- settings;
+ settings: TripAnimationSettings;
mainTooltip = '';
visibleTooltip = false;
- activeTrip;
- label;
- minTime;
- maxTime;
- anchors = [];
- useAnchors = false;
+ activeTrip: FormattedData;
+ label: string;
+ minTime: number;
+ maxTime: number;
+ anchors: number[] = [];
+ useAnchors: boolean;
+ currentTime: number;
static getSettingsSchema(): JsonSettingsSchema {
const schema = initSchema();
@@ -86,15 +105,18 @@ export class TripAnimationComponent implements OnInit, AfterViewInit {
rotationAngle: 0
}
this.settings = { ...settings, ...this.ctx.settings };
- this.useAnchors = this.settings.usePointAsAnchor && this.settings.showPoints;
- this.settings.fitMapBounds = true;
+ this.useAnchors = this.settings.showPoints && this.settings.usePointAsAnchor;
+ this.settings.pointAsAnchorFunction = parseFunction(this.settings.pointAsAnchorFunction, ['data', 'dsData', 'dsIndex']);
+ this.settings.tooltipFunction = parseFunction(this.settings.tooltipFunction, ['data', 'dsData', 'dsIndex']);
+ this.settings.labelFunction = parseFunction(this.settings.labelFunction, ['data', 'dsData', 'dsIndex']);
this.normalizationStep = this.settings.normalizationStep;
const subscription = this.ctx.subscriptions[Object.keys(this.ctx.subscriptions)[0]];
if (subscription) subscription.callbacks.onDataUpdated = () => {
- this.historicalData = parseArray(this.ctx.data);
- this.activeTrip = this.historicalData[0][0];
- this.calculateIntervals();
- this.timeUpdated(this.intervals[0]);
+ this.historicalData = parseArray(this.ctx.data).filter(arr => arr.length);
+ if (this.historicalData.length) {
+ this.calculateIntervals();
+ this.timeUpdated(this.currentTime && this.currentTime > this.minTime ? this.currentTime : this.minTime);
+ }
this.mapWidget.map.map?.invalidateSize();
this.cd.detectChanges();
}
@@ -103,28 +125,53 @@ export class TripAnimationComponent implements OnInit, AfterViewInit {
ngAfterViewInit() {
const ctxCopy: WidgetContext = _.cloneDeep(this.ctx);
this.mapWidget = new MapWidgetController(MapProviders.openstreet, false, ctxCopy, this.mapContainer.nativeElement);
+ this.mapResize$ = new ResizeObserver(() => {
+ this.mapWidget.resize();
+ });
+ this.mapResize$.observe(this.mapContainer.nativeElement);
+ }
+
+ ngOnDestroy() {
+ if (this.mapResize$) {
+ this.mapResize$.disconnect();
+ }
}
timeUpdated(time: number) {
- const currentPosition = this.interpolatedData.map(dataSource => dataSource[time]);
- this.activeTrip = currentPosition[0];
- this.minTime = moment(this.intervals[this.intervals.length - 1]).format('YYYY-MM-DD HH:mm:ss')
- this.maxTime = moment(this.intervals[0]).format('YYYY-MM-DD HH:mm:ss')
+ this.currentTime = time;
+ const currentPosition = this.interpolatedTimeData
+ .map(dataSource => dataSource[time])
+ .filter(ds => ds);
+ if (isUndefined(currentPosition[0])) {
+ const timePoints = Object.keys(this.interpolatedTimeData[0]).map(item => parseInt(item, 10));
+ for (let i = 1; i < timePoints.length; i++) {
+ if (timePoints[i - 1] < time && timePoints[i] > time) {
+ const beforePosition = this.interpolatedTimeData[0][timePoints[i - 1]];
+ const afterPosition = this.interpolatedTimeData[0][timePoints[i]];
+ const ratio = getRatio(timePoints[i - 1], timePoints[i], time);
+ currentPosition[0] = {
+ ...beforePosition,
+ time,
+ ...interpolateOnLineSegment(beforePosition, afterPosition, this.settings.latKeyName, this.settings.lngKeyName, ratio)
+ }
+ break;
+ }
+ }
+ }
this.calcLabel();
- this.calcTooltip();
+ this.calcTooltip(currentPosition.find(position => position.entityName === this.activeTrip.entityName));
if (this.mapWidget) {
- this.mapWidget.map.updatePolylines(this.interpolatedData.map(ds => _.values(ds)));
+ this.mapWidget.map.updatePolylines(this.interpolatedTimeData.map(ds => _.values(ds)), this.activeTrip);
if (this.settings.showPolygon) {
- this.mapWidget.map.updatePolygons(this.interpolatedData);
+ this.mapWidget.map.updatePolygons(this.interpolatedTimeData);
}
if (this.settings.showPoints) {
- this.mapWidget.map.updatePoints(this.historicalData[0], this.calcTooltip);
- this.anchors = this.historicalData[0]
- .filter(data =>
- this.settings.usePointAsAnchor ||
- safeExecute(this.settings.pointAsAnchorFunction, [this.historicalData, data, data.dsIndex])).map(data => data.time);
+ this.mapWidget.map.updatePoints(_.values(_.union(this.interpolatedTimeData)[0]), this.calcTooltip);
}
- this.mapWidget.map.updateMarkers(currentPosition);
+ this.mapWidget.map.updateMarkers(currentPosition, (trip) => {
+ this.activeTrip = trip;
+ this.timeUpdated(this.currentTime)
+ });
}
}
@@ -133,61 +180,60 @@ export class TripAnimationComponent implements OnInit, AfterViewInit {
calculateIntervals() {
this.historicalData.forEach((dataSource, index) => {
- this.intervals = [];
- for (let time = dataSource[0]?.time; time < dataSource[dataSource.length - 1]?.time; time += this.normalizationStep) {
- this.intervals.push(time);
- }
- this.intervals.push(dataSource[dataSource.length - 1]?.time);
- this.interpolatedData[index] = this.interpolateArray(dataSource, this.intervals);
+ this.minTime = dataSource[0]?.time || Infinity;
+ this.maxTime = dataSource[dataSource.length - 1]?.time || -Infinity;
+ this.interpolatedTimeData[index] = this.interpolateArray(dataSource);
});
-
+ if(!this.activeTrip){
+ this.activeTrip = this.interpolatedTimeData.map(dataSource => dataSource[this.minTime]).filter(ds => ds)[0];
+ }
+ if (this.useAnchors) {
+ const anchorDate = Object.entries(_.union(this.interpolatedTimeData)[0]);
+ this.anchors = anchorDate
+ .filter((data: [string, FormattedData]) => safeExecute(this.settings.pointAsAnchorFunction, [data[1], anchorDate, data[1].dsIndex]))
+ .map(data => parseInt(data[0], 10));
+ }
}
- calcTooltip = (point?: FormattedData, setTooltip = true) => {
- if (!point) {
- point = this.activeTrip;
- }
- const data = { ...point, maxTime: this.maxTime, minTime: this.minTime }
+ calcTooltip = (point?: FormattedData): string => {
+ const data = point ? point : this.activeTrip;
const tooltipPattern: string = this.settings.useTooltipFunction ?
- safeExecute(this.settings.tooolTipFunction, [data, this.historicalData, 0]) : this.settings.tooltipPattern;
+ safeExecute(this.settings.tooltipFunction, [data, this.historicalData, point.dsIndex]) : this.settings.tooltipPattern;
const tooltipText = parseWithTranslation.parseTemplate(tooltipPattern, data, true);
- if (setTooltip) {
- this.mainTooltip = this.sanitizer.sanitize(
- SecurityContext.HTML, tooltipText);
- this.cd.detectChanges();
- }
+ this.mainTooltip = this.sanitizer.sanitize(
+ SecurityContext.HTML, tooltipText);
+ this.cd.detectChanges();
+ this.activeTrip = point;
return tooltipText;
}
calcLabel() {
- const data = { ...this.activeTrip, maxTime: this.maxTime, minTime: this.minTime }
+ const data = this.activeTrip;
const labelText: string = this.settings.useLabelFunction ?
- safeExecute(this.settings.labelFunction, [data, this.historicalData, 0]) : this.settings.label;
+ safeExecute(this.settings.labelFunction, [data, this.historicalData, data.dsIndex]) : this.settings.label;
this.label = (parseWithTranslation.parseTemplate(labelText, data, true));
}
- interpolateArray(originData, interpolatedIntervals) {
+ interpolateArray(originData: FormattedData[]) {
const result = {};
- for (let i = 1, j = 0; i < originData.length && j < interpolatedIntervals.length;) {
- const currentTime = interpolatedIntervals[j];
- while (originData[i].time < currentTime) i++;
- const before = originData[i - 1];
- const after = originData[i];
- const interpolation = interpolateOnPointSegment(
- new L.Point(before.latitude, before.longitude),
- new L.Point(after.latitude, after.longitude),
- getRatio(before.time, after.time, currentTime));
- result[currentTime] = ({
- ...originData[i],
- rotationAngle: findAngle(before, after) + this.settings.rotationAngle,
- latitude: interpolation.x,
- longitude: interpolation.y
- });
- j++;
+ const latKeyName = this.settings.latKeyName;
+ const lngKeyName = this.settings.lngKeyName;
+ for (const data of originData) {
+ const currentTime = data.time;
+ const normalizeTime = this.minTime + Math.ceil((currentTime - this.minTime) / this.normalizationStep) * this.normalizationStep;
+ result[normalizeTime] = {
+ ...data,
+ minTime: this.minTime !== Infinity ? moment(this.minTime).format('YYYY-MM-DD HH:mm:ss') : '',
+ maxTime: this.maxTime !== -Infinity ? moment(this.maxTime).format('YYYY-MM-DD HH:mm:ss') : '',
+ rotationAngle: this.settings.rotationAngle
+ };
+ }
+ const timeStamp = Object.keys(result);
+ for (let i = 0; i < timeStamp.length - 1; i++) {
+ result[timeStamp[i]].rotationAngle += findAngle(result[timeStamp[i]], result[timeStamp[i + 1]], latKeyName, lngKeyName)
}
return result;
}
}
export let TbTripAnimationWidget = TripAnimationComponent;
-
diff --git a/ui-ngx/src/app/modules/home/components/widget/widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/widget.component.ts
index 389c70a96a..a07e94d843 100644
--- a/ui-ngx/src/app/modules/home/components/widget/widget.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/widget.component.ts
@@ -1043,7 +1043,7 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI
const entityId = entityInfo ? entityInfo.entityId : null;
const entityName = entityInfo ? entityInfo.entityName : null;
const entityLabel = entityInfo && entityInfo.entityLabel ? entityInfo.entityLabel : null;
- this.handleWidgetAction(event, descriptor, entityId, entityName, null, entityLabel);
+ this.handleWidgetAction($event, descriptor, entityId, entityName, null, entityLabel);
}
});
}
diff --git a/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts b/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts
index 9a75cf8ee9..4fbbd32900 100644
--- a/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts
+++ b/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts
@@ -149,7 +149,7 @@ export class EntityTableConfig, P extends PageLink = P
entityComponent: Type>;
entityTabsComponent: Type>;
addDialogStyle = {};
- defaultSortOrder: SortOrder = {property: 'createdTime', direction: Direction.ASC};
+ defaultSortOrder: SortOrder = {property: 'createdTime', direction: Direction.DESC};
displayPagination = true;
defaultPageSize = 10;
columns: Array> = [];
diff --git a/ui-ngx/src/app/modules/home/models/services.map.ts b/ui-ngx/src/app/modules/home/models/services.map.ts
index 2c786783e1..89867d0199 100644
--- a/ui-ngx/src/app/modules/home/models/services.map.ts
+++ b/ui-ngx/src/app/modules/home/models/services.map.ts
@@ -26,11 +26,19 @@ import { DatePipe } from '@angular/common';
import { UtilsService } from '@core/services/utils.service';
import { TranslateService } from '@ngx-translate/core';
import { HttpClient } from '@angular/common/http';
+import { EntityViewService } from '@core/http/entity-view.service';
+import { CustomerService } from '@core/http/customer.service';
+import { DashboardService } from '@core/http/dashboard.service';
+import { UserService } from '@core/http/user.service';
export const ServicesMap = new Map>(
[
['deviceService', DeviceService],
['assetService', AssetService],
+ ['entityViewService', EntityViewService],
+ ['customerService', CustomerService],
+ ['dashboardService', DashboardService],
+ ['userService', UserService],
['attributeService', AttributeService],
['entityRelationService', EntityRelationService],
['entityService', EntityService],
diff --git a/ui-ngx/src/app/modules/home/models/widget-component.models.ts b/ui-ngx/src/app/modules/home/models/widget-component.models.ts
index 1c371dc830..07858516f0 100644
--- a/ui-ngx/src/app/modules/home/models/widget-component.models.ts
+++ b/ui-ngx/src/app/modules/home/models/widget-component.models.ts
@@ -43,7 +43,7 @@ import {
WidgetSubscriptionApi
} from '@core/api/widget-api.models';
import { ChangeDetectorRef, ComponentFactory, Injector, NgZone, Type } from '@angular/core';
-import { HttpErrorResponse } from '@angular/common/http';
+import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { RafService } from '@core/services/raf.service';
import { WidgetTypeId } from '@shared/models/id/widget-type-id';
import { TenantId } from '@shared/models/id/tenant-id';
@@ -60,6 +60,21 @@ import {
import { ActionNotificationShow } from '@core/notification/notification.actions';
import { AuthUser } from '@shared/models/user.model';
import { getCurrentAuthUser } from '@core/auth/auth.selectors';
+import { DeviceService } from '@core/http/device.service';
+import { AssetService } from '@core/http/asset.service';
+import { EntityViewService } from '@core/http/entity-view.service';
+import { CustomerService } from '@core/http/customer.service';
+import { DashboardService } from '@core/http/dashboard.service';
+import { UserService } from '@core/http/user.service';
+import { AttributeService } from '@core/http/attribute.service';
+import { EntityRelationService } from '@core/http/entity-relation.service';
+import { EntityService } from '@core/http/entity.service';
+import { DialogService } from '@core/services/dialog.service';
+import { CustomDialogService } from '@home/components/widget/dialog/custom-dialog.service';
+import { DatePipe } from '@angular/common';
+import { TranslateService } from '@ngx-translate/core';
+import { PageLink } from '@shared/models/page/page-link';
+import { SortOrder } from '@shared/models/page/sort-order';
export interface IWidgetAction {
name: string;
@@ -126,6 +141,21 @@ export class WidgetContext {
}
}
+ deviceService: DeviceService;
+ assetService: AssetService;
+ entityViewService: EntityViewService;
+ customerService: CustomerService;
+ dashboardService: DashboardService;
+ userService: UserService;
+ attributeService: AttributeService;
+ entityRelationService: EntityRelationService;
+ entityService: EntityService;
+ dialogs: DialogService;
+ customDialog: CustomDialogService;
+ date: DatePipe;
+ translate: TranslateService;
+ http: HttpClient;
+
private changeDetectorValue: ChangeDetectorRef;
inited = false;
@@ -269,6 +299,10 @@ export class WidgetContext {
this.widgetTitle = undefined;
this.widgetActions = undefined;
}
+
+ pageLink(pageSize: number, page: number = 0, textSearch: string = null, sortOrder: SortOrder = null): PageLink {
+ return new PageLink(pageSize, page, textSearch, sortOrder);
+ };
}
export interface IDynamicWidgetComponent {
diff --git a/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.html b/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.html
index f2972687f5..9ed77a4eda 100644
--- a/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.html
+++ b/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.html
@@ -76,10 +76,10 @@
{{ 'admin.timeout-invalid' | translate }}
-
+
{{ 'admin.enable-tls' | translate }}
-
+
admin.tls-version
@@ -87,6 +87,40 @@
+
+ {{ 'admin.enable-proxy' | translate }}
+
+
common.username
diff --git a/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.ts b/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.ts
index 2b02c6cca8..0cdf0e7a7c 100644
--- a/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.ts
+++ b/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.ts
@@ -25,6 +25,7 @@ import { AdminService } from '@core/http/admin.service';
import { ActionNotificationShow } from '@core/notification/notification.actions';
import { TranslateService } from '@ngx-translate/core';
import { HasConfirmForm } from '@core/guards/confirm-on-exit.guard';
+import { isString } from '@core/utils';
@Component({
selector: 'tb-mail-server',
@@ -52,7 +53,11 @@ export class MailServerComponent extends PageComponent implements OnInit, HasCon
this.adminService.getAdminSettings('mail').subscribe(
(adminSettings) => {
this.adminSettings = adminSettings;
+ if (this.adminSettings.jsonValue && isString(this.adminSettings.jsonValue.enableTls)) {
+ this.adminSettings.jsonValue.enableTls = (this.adminSettings.jsonValue.enableTls as any) === 'true';
+ }
this.mailSettings.reset(this.adminSettings.jsonValue);
+ this.enableProxyChanged();
}
);
}
@@ -68,13 +73,33 @@ export class MailServerComponent extends PageComponent implements OnInit, HasCon
timeout: ['10000', [Validators.required,
Validators.pattern(/^[0-9]{1,6}$/),
Validators.maxLength(6)]],
- enableTls: ['false'],
+ enableTls: [false],
tlsVersion: [],
+ enableProxy: [false, []],
+ proxyHost: ['', [Validators.required]],
+ proxyPort: ['', [Validators.required, Validators.min(1), Validators.max(65535)]],
+ proxyUser: [''],
+ proxyPassword: [''],
username: [''],
password: ['']
});
this.registerDisableOnLoadFormControl(this.mailSettings.get('smtpProtocol'));
this.registerDisableOnLoadFormControl(this.mailSettings.get('enableTls'));
+ this.registerDisableOnLoadFormControl(this.mailSettings.get('enableProxy'));
+ this.mailSettings.get('enableProxy').valueChanges.subscribe(() => {
+ this.enableProxyChanged();
+ });
+ }
+
+ enableProxyChanged(): void {
+ let enableProxy: boolean = this.mailSettings.get('enableProxy').value;
+ if (enableProxy) {
+ this.mailSettings.get('proxyHost').enable();
+ this.mailSettings.get('proxyPort').enable();
+ } else {
+ this.mailSettings.get('proxyHost').disable();
+ this.mailSettings.get('proxyPort').disable();
+ }
}
sendTestMail(): void {
diff --git a/ui-ngx/src/app/modules/home/pages/dashboard/dashboard-form.component.ts b/ui-ngx/src/app/modules/home/pages/dashboard/dashboard-form.component.ts
index 7f19cfe571..5751c88341 100644
--- a/ui-ngx/src/app/modules/home/pages/dashboard/dashboard-form.component.ts
+++ b/ui-ngx/src/app/modules/home/pages/dashboard/dashboard-form.component.ts
@@ -95,6 +95,11 @@ export class DashboardFormComponent extends EntityComponent {
this.entityForm.patchValue({configuration: {description: entity.configuration ? entity.configuration.description : ''}});
}
+ prepareFormValue(formValue: any): any {
+ formValue.configuration = {...(this.entity.configuration || {}), ...(formValue.configuration || {})};
+ return formValue;
+ }
+
onPublicLinkCopied($event) {
this.store.dispatch(new ActionNotificationShow(
{
diff --git a/ui-ngx/src/app/modules/home/pages/dashboard/dashboard-settings-dialog.component.ts b/ui-ngx/src/app/modules/home/pages/dashboard/dashboard-settings-dialog.component.ts
index 548dfa65a1..642a97c1b3 100644
--- a/ui-ngx/src/app/modules/home/pages/dashboard/dashboard-settings-dialog.component.ts
+++ b/ui-ngx/src/app/modules/home/pages/dashboard/dashboard-settings-dialog.component.ts
@@ -25,7 +25,7 @@ import { DialogComponent } from '@app/shared/components/dialog.component';
import { UtilsService } from '@core/services/utils.service';
import { TranslateService } from '@ngx-translate/core';
import { DashboardSettings, GridSettings, StateControllerId } from '@app/shared/models/dashboard.models';
-import { isUndefined } from '@core/utils';
+import { isDefined, isUndefined } from '@core/utils';
import { DashboardUtilsService } from '@core/services/dashboard-utils.service';
import { StatesControllerService } from './states/states-controller.service';
@@ -96,7 +96,8 @@ export class DashboardSettingsDialogComponent extends DialogComponent
-
-
-
-
- entity-view.attributes-propagation
-
-
- entity-view.attributes-propagation-hint
- entity-view.client-attributes
-
-
- entity-view.shared-attributes
-
-
- entity-view.server-attributes
-
-
-
-
-
-
- entity-view.timeseries-data
-
-
- entity-view.timeseries-data-hint
- entity-view.timeseries
-
-
-
+
+
+
+
+
+ entity-view.attributes-propagation
+
+
+ entity-view.attributes-propagation-hint
+ entity-view.client-attributes
+
+
+ entity-view.shared-attributes
+
+
+ entity-view.server-attributes
+
+
+
+
+
+
+ entity-view.timeseries-data
+
+
+ entity-view.timeseries-data-hint
+ entity-view.timeseries
+
+
+
+
{
this.cleanupJsErrors();
});
+ this.jsEditor.completers = [widgetEditorCompleter, ...(this.jsEditor.completers || [])];
this.setAceEditorValues();
}
diff --git a/ui-ngx/src/app/modules/home/pages/widget/widget-editor.models.ts b/ui-ngx/src/app/modules/home/pages/widget/widget-editor.models.ts
new file mode 100644
index 0000000000..913e566f34
--- /dev/null
+++ b/ui-ngx/src/app/modules/home/pages/widget/widget-editor.models.ts
@@ -0,0 +1,93 @@
+///
+/// Copyright © 2016-2020 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import { TbEditorCompleter, TbEditorCompletions } from '@shared/models/ace/completion.models';
+import { widgetContextCompletions } from '@shared/models/ace/widget-completion.models';
+import { serviceCompletions } from '@shared/models/ace/service-completion.models';
+
+const widgetEditorCompletions: TbEditorCompletions = {
+ ... {self: {
+ description: 'Built-in variable self that is a reference to the widget instance',
+ type: 'WidgetTypeInstance ',
+ meta: 'object',
+ children: {
+ ...{
+ onInit: {
+ description: 'The first function which is called when widget is ready for initialization. Should be used to prepare widget DOM, process widget settings and initial subscription information.',
+ meta: 'function'
+ },
+ onDataUpdated: {
+ description: 'Called when the new data is available from the widget subscription. Latest data can be accessed from ' +
+ 'the defaultSubscription property of widget context (ctx) .',
+ meta: 'function'
+ },
+ onResize: {
+ description: 'Called when widget container is resized. Latest width and height can be obtained from widget context (ctx) .',
+ meta: 'function'
+ },
+ onEditModeChanged: {
+ description: 'Called when dashboard editing mode is changed. Latest mode is handled by isEdit property of widget context (ctx) .',
+ meta: 'function'
+ },
+ onMobileModeChanged: {
+ description: 'Called when dashboard view width crosses mobile breakpoint. Latest state is handled by isMobile property of widget context (ctx) .',
+ meta: 'function'
+ },
+ onDestroy: {
+ description: 'Called when widget element is destroyed. Should be used to cleanup all resources if necessary.',
+ meta: 'function'
+ },
+ getSettingsSchema: {
+ description: 'Optional function returning widget settings schema json as alternative to Settings tab of Settings schema section .',
+ meta: 'function',
+ return: {
+ description: 'An widget settings schema json',
+ type: 'object'
+ }
+ },
+ getDataKeySettingsSchema: {
+ description: 'Optional function returning particular data key settings schema json as alternative to Data key settings schema of Settings schema section .',
+ meta: 'function',
+ return: {
+ description: 'A particular data key settings schema json',
+ type: 'object'
+ }
+ },
+ typeParameters: {
+ description: 'Returns object describing widget datasource parameters.',
+ meta: 'function',
+ return: {
+ description: 'An object describing widget datasource parameters.',
+ type: 'WidgetTypeParameters '
+ }
+ },
+ actionSources: {
+ description: 'Returns map describing available widget action sources used to define user actions.',
+ meta: 'function',
+ return: {
+ description: 'A map of action sources by action source id.',
+ type: '{[actionSourceId: string]: WidgetActionSource }'
+ }
+ }
+ },
+ ...widgetContextCompletions
+ }
+ }},
+ ...widgetContextCompletions,
+ ...serviceCompletions
+};
+
+export const widgetEditorCompleter = new TbEditorCompleter(widgetEditorCompletions);
diff --git a/ui-ngx/src/app/modules/home/components/contact.component.html b/ui-ngx/src/app/shared/components/contact.component.html
similarity index 100%
rename from ui-ngx/src/app/modules/home/components/contact.component.html
rename to ui-ngx/src/app/shared/components/contact.component.html
diff --git a/ui-ngx/src/app/modules/home/components/contact.component.ts b/ui-ngx/src/app/shared/components/contact.component.ts
similarity index 100%
rename from ui-ngx/src/app/modules/home/components/contact.component.ts
rename to ui-ngx/src/app/shared/components/contact.component.ts
diff --git a/ui-ngx/src/app/shared/components/js-func.component.ts b/ui-ngx/src/app/shared/components/js-func.component.ts
index 0691aab813..72e30462e5 100644
--- a/ui-ngx/src/app/shared/components/js-func.component.ts
+++ b/ui-ngx/src/app/shared/components/js-func.component.ts
@@ -35,6 +35,8 @@ import { guid, isUndefined } from '@app/core/utils';
import { TranslateService } from '@ngx-translate/core';
import { CancelAnimationFrame, RafService } from '@core/services/raf.service';
import { ResizeObserver } from '@juggle/resize-observer';
+import { TbEditorCompleter } from '@shared/models/ace/completion.models';
+import { widgetEditorCompleter } from '@home/pages/widget/widget-editor.models';
@Component({
selector: 'tb-js-func',
@@ -77,6 +79,8 @@ export class JsFuncComponent implements OnInit, OnDestroy, ControlValueAccessor,
@Input() fillHeight: boolean;
+ @Input() editorCompleter: TbEditorCompleter;
+
private noValidateValue: boolean;
get noValidate(): boolean {
return this.noValidateValue;
@@ -153,6 +157,9 @@ export class JsFuncComponent implements OnInit, OnDestroy, ControlValueAccessor,
this.cleanupJsErrors();
this.updateView();
});
+ if (this.editorCompleter) {
+ this.jsEditor.completers = [this.editorCompleter, ...(this.jsEditor.completers || [])];
+ }
this.editorResize$ = new ResizeObserver(() => {
this.onAceEditorResize();
});
diff --git a/ui-ngx/src/app/shared/components/json-content.component.html b/ui-ngx/src/app/shared/components/json-content.component.html
index c416798953..9d9ab5f2a1 100644
--- a/ui-ngx/src/app/shared/components/json-content.component.html
+++ b/ui-ngx/src/app/shared/components/json-content.component.html
@@ -19,7 +19,7 @@
tb-fullscreen
[fullscreen]="fullscreen" (fullscreenChanged)="onFullscreen()" fxLayout="column">
-
{{ label }}
+
{{ label }}
diff --git a/ui-ngx/src/app/shared/components/json-content.component.ts b/ui-ngx/src/app/shared/components/json-content.component.ts
index e957a40d5c..242b4b6359 100644
--- a/ui-ngx/src/app/shared/components/json-content.component.ts
+++ b/ui-ngx/src/app/shared/components/json-content.component.ts
@@ -92,6 +92,15 @@ export class JsonContentComponent implements OnInit, ControlValueAccessor, Valid
this.validateContentValue = coerceBooleanProperty(value);
}
+ private validateOnChangeValue: boolean;
+ get validateOnChange(): boolean {
+ return this.validateOnChangeValue;
+ }
+ @Input()
+ set validateOnChange(value: boolean) {
+ this.validateOnChangeValue = coerceBooleanProperty(value);
+ }
+
fullscreen = false;
contentBody: string;
@@ -256,7 +265,7 @@ export class JsonContentComponent implements OnInit, ControlValueAccessor, Valid
const editorValue = this.jsonEditor.getValue();
if (this.contentBody !== editorValue) {
this.contentBody = editorValue;
- this.contentValid = true;
+ this.contentValid = !this.validateOnChange || this.doValidate();
this.propagateChange(this.contentBody);
}
}
diff --git a/ui-ngx/src/app/shared/components/kv-map.component.ts b/ui-ngx/src/app/shared/components/kv-map.component.ts
index b6f438f428..ee98adf837 100644
--- a/ui-ngx/src/app/shared/components/kv-map.component.ts
+++ b/ui-ngx/src/app/shared/components/kv-map.component.ts
@@ -117,6 +117,11 @@ export class KeyValMapComponent extends PageComponent implements ControlValueAcc
this.valueChangeSubscription = this.kvListFormGroup.valueChanges.subscribe(() => {
this.updateModel();
});
+ if (this.disabled) {
+ this.kvListFormGroup.disable({emitEvent: false});
+ } else {
+ this.kvListFormGroup.enable({emitEvent: false});
+ }
}
public removeKeyVal(index: number) {
diff --git a/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.html b/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.html
index 54bba32bae..2fb3bb1db5 100644
--- a/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.html
+++ b/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.html
@@ -27,8 +27,8 @@
- {{ this.intervals[this.index] | date:'medium'}}
- {{ "widget.no-data-found" | translate}}
+ {{ this.currentTime | date:'medium'}}
+ {{ "widget.no-data-found" | translate}}
@@ -37,18 +37,18 @@
fast_forward
-
-
+
+
play_circle_outline
-
+
+
+
pause_circle_outline
-
+
{{speedValue}}
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.scss b/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.scss
index 22ded95a5f..aa152e9e7a 100644
--- a/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.scss
+++ b/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.scss
@@ -126,7 +126,7 @@
}
.speed-select {
- width: 50px;
+ width: 70px;
margin-left: 10px;
margin-top: 10px;
}
diff --git a/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.ts b/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.ts
index a15b892349..6c5f4d9576 100644
--- a/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.ts
+++ b/ui-ngx/src/app/shared/components/time/history-selector/history-selector.component.ts
@@ -14,7 +14,7 @@
/// limitations under the License.
///
-import { Component, OnInit, OnChanges, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';
+import { ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';
import { interval } from 'rxjs';
import { filter } from 'rxjs/operators';
import { HistorySelectSettings } from '@app/modules/home/components/widget/lib/maps/map-models';
@@ -27,13 +27,14 @@ import { HistorySelectSettings } from '@app/modules/home/components/widget/lib/m
export class HistorySelectorComponent implements OnInit, OnChanges {
@Input() settings: HistorySelectSettings
- @Input() intervals = [];
+ @Input() minTime: number;
+ @Input() maxTime: number;
+ @Input() step = 1000;
@Input() anchors = [];
@Input() useAnchors = false;
@Output() timeUpdated: EventEmitter = new EventEmitter();
- animationTime;
minTimeIndex = 0;
maxTimeIndex = 0;
speed = 1;
@@ -41,6 +42,7 @@ export class HistorySelectorComponent implements OnInit, OnChanges {
playing = false;
interval;
speeds = [1, 5, 10, 25];
+ currentTime = null;
constructor(private cd: ChangeDetectorRef) { }
@@ -49,7 +51,8 @@ export class HistorySelectorComponent implements OnInit, OnChanges {
}
ngOnChanges() {
- this.maxTimeIndex = this.intervals?.length - 1;
+ this.maxTimeIndex = Math.ceil((this.maxTime - this.minTime) / this.step);
+ this.currentTime = this.minTime === Infinity ? null : this.minTime;
}
play() {
@@ -59,17 +62,18 @@ export class HistorySelectorComponent implements OnInit, OnChanges {
.pipe(
filter(() => this.playing)).subscribe(() => {
this.index++;
- if (this.index < this.maxTimeIndex) {
+ this.currentTime = this.minTime + this.index * this.step;
+ if (this.index <= this.maxTimeIndex) {
this.cd.detectChanges();
- this.timeUpdated.emit(this.intervals[this.index]);
+ this.timeUpdated.emit(this.currentTime);
}
else {
this.interval.complete();
}
}, err => {
- console.log(err);
+ console.error(err);
}, () => {
- this.index = this.minTimeIndex;
+ this.currentTime = this.index = this.minTimeIndex;
this.playing = false;
this.interval = null;
this.cd.detectChanges();
@@ -87,18 +91,19 @@ export class HistorySelectorComponent implements OnInit, OnChanges {
pause() {
this.playing = false;
+ this.currentTime = this.minTime + this.index * this.step;
this.cd.detectChanges();
- this.timeUpdated.emit(this.intervals[this.index]);
+ this.timeUpdated.emit(this.currentTime);
}
moveNext() {
if (this.index < this.maxTimeIndex) {
if (this.useAnchors) {
- const anchorIndex = this.findIndex(this.intervals[this.index], this.anchors)+1;
- this.index = this.findIndex(this.anchors[anchorIndex], this.intervals);
- }
- else
+ const anchorIndex = this.findIndex(this.currentTime, this.anchors) + 1;
+ this.index = Math.floor((this.anchors[anchorIndex] - this.minTime) / this.step);
+ } else {
this.index++;
+ }
}
this.pause();
}
@@ -106,15 +111,23 @@ export class HistorySelectorComponent implements OnInit, OnChanges {
movePrev() {
if (this.index > this.minTimeIndex) {
if (this.useAnchors) {
- const anchorIndex = this.findIndex(this.intervals[this.index], this.anchors) - 1;
- this.index = this.findIndex(this.anchors[anchorIndex], this.intervals);
- }
- else
+ const anchorIndex = this.findIndex(this.currentTime, this.anchors) - 1;
+ this.index = Math.floor((this.anchors[anchorIndex] - this.minTime) / this.step);
+ } else {
this.index--;
+ }
}
this.pause();
}
+ findIndex(value: number, array: number[]): number {
+ let i = 0;
+ while (array[i] < value) {
+ i++;
+ }
+ return i;
+ }
+
moveStart() {
this.index = this.minTimeIndex;
this.pause();
@@ -125,15 +138,8 @@ export class HistorySelectorComponent implements OnInit, OnChanges {
this.pause();
}
- findIndex(value, array: any[]) {
- let i = 0;
- while (array[i] < value) {
- i++;
- };
- return i;
- }
-
changeIndex() {
- this.timeUpdated.emit(this.intervals[this.index]);
+ this.currentTime = this.minTime + this.index * this.step;
+ this.timeUpdated.emit(this.currentTime);
}
}
diff --git a/ui-ngx/src/app/shared/models/ace/completion.models.ts b/ui-ngx/src/app/shared/models/ace/completion.models.ts
new file mode 100644
index 0000000000..f2810781bb
--- /dev/null
+++ b/ui-ngx/src/app/shared/models/ace/completion.models.ts
@@ -0,0 +1,215 @@
+///
+/// Copyright © 2016-2020 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import * as ace from 'ace-builds';
+
+export type tbMetaType = 'object' | 'function' | 'service' | 'property' | 'argument';
+
+export type TbEditorCompletions = {[name: string]: TbEditorCompletion};
+
+export interface FunctionArgType {
+ type?: string;
+ description?: string;
+}
+
+export interface FunctionArg extends FunctionArgType {
+ name: string;
+ type?: string;
+ description?: string;
+ optional?: boolean;
+}
+
+export interface TbEditorCompletion {
+ meta: tbMetaType;
+ description?: string;
+ type?: string;
+ args?: FunctionArg[];
+ return?: FunctionArgType;
+ children?: TbEditorCompletions;
+}
+
+interface TbEditorAceCompletion extends ace.Ace.Completion {
+ isTbEditorAceCompletion: true;
+ snippet: string;
+ description?: string;
+ type?: string;
+ args?: FunctionArg[];
+ return?: FunctionArgType;
+}
+
+export class TbEditorCompleter implements ace.Ace.Completer {
+
+ identifierRegexps: RegExp[] = [
+ /[a-zA-Z_0-9\$\-\u00A2-\u2000\u2070-\uFFFF.]/
+ ];
+
+ constructor(private editorCompletions: TbEditorCompletions) {
+ }
+
+ getCompletions(editor: ace.Ace.Editor, session: ace.Ace.EditSession,
+ position: ace.Ace.Point, prefix: string, callback: ace.Ace.CompleterCallback): void {
+ const result = this.prepareCompletions(prefix);
+ if (result) {
+ callback(null, result);
+ }
+ }
+
+ private resolvePath(prefix: string): string[] {
+ if (!prefix || !prefix.length) {
+ return [];
+ }
+ let parts = prefix.split('.');
+ if (parts.length) {
+ parts.pop();
+ } else {
+ parts = [];
+ }
+ let currentCompletions = this.editorCompletions;
+ for (const part of parts) {
+ if (currentCompletions[part]) {
+ currentCompletions = currentCompletions[part].children;
+ if (!currentCompletions) {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ }
+ return parts;
+ }
+
+ private prepareCompletions(prefix: string): ace.Ace.Completion[] {
+ const path = this.resolvePath(prefix);
+ if (path !== null) {
+ return this.toAceCompletionsList(this.editorCompletions, path);
+ } else {
+ return [];
+ }
+ }
+
+ private toAceCompletionsList(completions: TbEditorCompletions, parentPath: string[]): ace.Ace.Completion[] {
+ const result: ace.Ace.Completion[] = [];
+ let targetCompletions = completions;
+ let parentPrefix = '';
+ if (parentPath.length) {
+ parentPrefix = parentPath.join('.') + '.';
+ for (const path of parentPath) {
+ targetCompletions = targetCompletions[path].children;
+ }
+ }
+ for (const key of Object.keys(targetCompletions)) {
+ result.push(this.toAceCompletion(key, targetCompletions[key], parentPrefix));
+ }
+ return result;
+ }
+
+ private toAceCompletion(name: string, completion: TbEditorCompletion, parentPrefix: string): ace.Ace.Completion {
+ const aceCompletion: TbEditorAceCompletion = {
+ isTbEditorAceCompletion: true,
+ snippet: parentPrefix + name,
+ name,
+ caption: parentPrefix + name,
+ score: 100000,
+ value: parentPrefix + name,
+ meta: completion.meta,
+ type: completion.type,
+ description: completion.description,
+ args: completion.args,
+ return: completion.return
+ };
+ return aceCompletion;
+ }
+
+ getDocTooltip(completion: TbEditorAceCompletion) {
+ if (completion && completion.isTbEditorAceCompletion) {
+ return {
+ docHTML: this.createDocHTML(completion)
+ };
+ }
+ }
+
+ private createDocHTML(completion: TbEditorAceCompletion): string {
+ let title = `${completion.name} `;
+ if (completion.meta === 'function') {
+ title += '(';
+ if (completion.args) {
+ const strArgs: string[] = [];
+ for (const arg of completion.args) {
+ let strArg = `${arg.name}`;
+ if (arg.optional) {
+ strArg += '?';
+ }
+ if (arg.type) {
+ strArg += `: ${arg.type}`;
+ }
+ strArgs.push(strArg);
+ }
+ title += strArgs.join(', ');
+ }
+ title += '): ';
+ if (completion.return) {
+ title += completion.return.type;
+ } else {
+ title += 'void';
+ }
+ } else {
+ title += `: ${completion.type ? completion.type : completion.meta}`;
+ }
+ let html = `';
+ return html;
+ }
+}
diff --git a/ui-ngx/src/app/shared/models/ace/service-completion.models.ts b/ui-ngx/src/app/shared/models/ace/service-completion.models.ts
new file mode 100644
index 0000000000..9f4b391152
--- /dev/null
+++ b/ui-ngx/src/app/shared/models/ace/service-completion.models.ts
@@ -0,0 +1,346 @@
+///
+/// Copyright © 2016-2020 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import { FunctionArg, FunctionArgType, TbEditorCompletions } from '@shared/models/ace/completion.models';
+
+export const entityIdHref = 'EntityId ';
+
+export const entityTypeHref = 'EntityType ';
+
+export const pageDataHref = 'PageData ';
+
+export const deviceInfoHref = 'DeviceInfo ';
+
+export const deviceHref = 'Device ';
+
+export const deviceCredentialsHref = 'DeviceCredentials ';
+
+export const pageLinkArg: FunctionArg = {
+ name: 'pageLink',
+ type: 'PageLink ',
+ description: 'Page link object used to perform paginated request.'
+};
+
+export const requestConfigArg: FunctionArg = {
+ name: 'config',
+ type: 'RequestConfig ',
+ description: 'HTTP request configuration.',
+ optional: true
+};
+
+export function observableReturnType(objectType: string): FunctionArgType {
+ return {
+ type: `Observable<${objectType}>`,
+ description: `An Observable of ${objectType} object.`
+ };
+}
+
+export function observableVoid(): FunctionArgType {
+ return {
+ type: `Observable<void>`,
+ description: `An Observable.`
+ };
+}
+
+export function observableArrayReturnType(objectType: string): FunctionArgType {
+ return {
+ type: `Observable<Array<${objectType}>>`,
+ description: `An Observable of array of ${objectType} objects.`
+ };
+}
+
+export function observablePageDataReturnType(objectType: string): FunctionArgType {
+ return {
+ type: `Observable<${pageDataHref}<${objectType}>>`,
+ description: `An Observable of page result as a ${pageDataHref} holding array of ${objectType} objects.`
+ };
+}
+
+export const serviceCompletions: TbEditorCompletions = {
+ deviceService: {
+ description: 'Device Service API ' +
+ 'See DeviceService for API reference.',
+ meta: 'service',
+ type: 'DeviceService ',
+ children: {
+ getTenantDeviceInfos: {
+ description: 'Get tenant devices',
+ meta: 'function',
+ args: [
+ pageLinkArg,
+ { name: 'type', type: 'string', optional: true, description: 'Device type'},
+ requestConfigArg
+ ],
+ return: observablePageDataReturnType(deviceInfoHref)
+ },
+ getCustomerDeviceInfos: {
+ description: 'Get customer devices',
+ meta: 'function',
+ args: [
+ { name: 'customerId', type: 'string', description: 'Id of the customer'},
+ pageLinkArg,
+ { name: 'type', type: 'string', optional: true, description: 'Device type'},
+ requestConfigArg
+ ],
+ return: observablePageDataReturnType(deviceInfoHref)
+ },
+ getDevice: {
+ description: 'Get device by id',
+ meta: 'function',
+ args: [
+ { name: 'deviceId', type: 'string', description: 'Id of the device'},
+ requestConfigArg
+ ],
+ return: observableReturnType(deviceHref)
+ },
+ getDevices: {
+ description: 'Get devices by ids',
+ meta: 'function',
+ args: [
+ { name: 'deviceIds', type: 'Array', description: 'List of device ids'},
+ requestConfigArg
+ ],
+ return: observableArrayReturnType(deviceHref)
+ },
+ getDeviceInfo: {
+ description: 'Get device info by id',
+ meta: 'function',
+ args: [
+ { name: 'deviceId', type: 'string', description: 'Id of the device'},
+ requestConfigArg
+ ],
+ return: observableReturnType(deviceInfoHref)
+ },
+ saveDevice: {
+ description: 'Save device',
+ meta: 'function',
+ args: [
+ { name: 'device', type: deviceHref, description: 'Device object to save'},
+ requestConfigArg
+ ],
+ return: observableReturnType(deviceHref)
+ },
+ deleteDevice: {
+ description: 'Delete device by id',
+ meta: 'function',
+ args: [
+ { name: 'deviceId', type: 'string', description: 'Id of the device'},
+ requestConfigArg
+ ],
+ return: observableVoid()
+ },
+ getDeviceTypes: {
+ description: 'Get all available devices types',
+ meta: 'function',
+ args: [
+ requestConfigArg
+ ],
+ return: observableArrayReturnType('EntitySubtype ')
+ },
+ getDeviceCredentials: {
+ description: 'Get device credentials by device id',
+ meta: 'function',
+ args: [
+ { name: 'deviceId', type: 'string', description: 'Id of the device'},
+ { name: 'sync', type: 'boolean', description: 'Whether to execute HTTP request synchronously (false by default)', optional: true},
+ requestConfigArg
+ ],
+ return: observableReturnType(deviceCredentialsHref)
+ },
+ saveDeviceCredentials: {
+ description: 'Save device credentials',
+ meta: 'function',
+ args: [
+ { name: 'deviceCredentials', type: deviceCredentialsHref, description: 'Device credentials object to save'},
+ requestConfigArg
+ ],
+ return: observableReturnType(deviceCredentialsHref)
+ },
+ makeDevicePublic: {
+ description: 'Make device public (available from public dashboard)',
+ meta: 'function',
+ args: [
+ { name: 'deviceId', type: 'string', description: 'Id of the device'},
+ requestConfigArg
+ ],
+ return: observableReturnType(deviceHref)
+ },
+ assignDeviceToCustomer: {
+ description: 'Assign device to specific customer',
+ meta: 'function',
+ args: [
+ { name: 'customerId', type: 'string', description: 'Id of the customer'},
+ { name: 'deviceId', type: 'string', description: 'Id of the device'},
+ requestConfigArg
+ ],
+ return: observableReturnType(deviceHref)
+ },
+ unassignDeviceFromCustomer: {
+ description: 'Unassign device from any customer',
+ meta: 'function',
+ args: [
+ { name: 'deviceId', type: 'string', description: 'Id of the device'},
+ requestConfigArg
+ ],
+ return: observableVoid()
+ },
+ sendOneWayRpcCommand: {
+ description: 'Send one way (without response) RPC command to the device.',
+ meta: 'function',
+ args: [
+ { name: 'deviceId', type: 'string', description: 'Id of the device'},
+ { name: 'requestBody', type: 'object', description: 'Request body to be sent to device'},
+ requestConfigArg
+ ],
+ return: {
+ type: `Observable<any>`,
+ description: `A command execution Observable.`
+ }
+ },
+ sendTwoWayRpcCommand: {
+ description: 'Sends two way (with response) RPC command to the device.',
+ meta: 'function',
+ args: [
+ { name: 'deviceId', type: 'string', description: 'Id of the device'},
+ { name: 'requestBody', type: 'object', description: 'Request body to be sent to device'},
+ requestConfigArg
+ ],
+ return: {
+ type: `Observable<any>`,
+ description: `A command execution Observable of response body.`
+ }
+ },
+ findByQuery: {
+ description: 'Find devices by search query',
+ meta: 'function',
+ args: [
+ { name: 'query', type: 'DeviceSearchQuery ',
+ description: 'Device search query object'},
+ requestConfigArg
+ ],
+ return: observableArrayReturnType(deviceHref)
+ },
+ findByName: {
+ description: 'Find device by name',
+ meta: 'function',
+ args: [
+ { name: 'deviceName', type: 'string',
+ description: 'Search device name'},
+ requestConfigArg
+ ],
+ return: observableReturnType(deviceHref)
+ },
+ claimDevice: {
+ description: 'Send claim device request',
+ meta: 'function',
+ args: [
+ { name: 'deviceName', type: 'string',
+ description: 'Claiming device name'},
+ requestConfigArg
+ ],
+ return: observableReturnType('ClaimResult ')
+ },
+ unclaimDevice: {
+ description: 'Send un-claim device request',
+ meta: 'function',
+ args: [
+ { name: 'deviceName', type: 'string',
+ description: 'Device name to un-claim'},
+ requestConfigArg
+ ],
+ return: observableVoid()
+ }
+ }
+ },
+ assetService: {
+ description: 'Asset Service API ' +
+ 'See AssetService for API reference.',
+ meta: 'service',
+ type: 'AssetService '
+ },
+ entityViewService: {
+ description: 'EntityView Service API ' +
+ 'See EntityViewService for API reference.',
+ meta: 'service',
+ type: 'EntityViewService '
+ },
+ customerService: {
+ description: 'Customer Service API ' +
+ 'See CustomerService for API reference.',
+ meta: 'service',
+ type: 'CustomerService '
+ },
+ dashboardService: {
+ description: 'Dashboard Service API ' +
+ 'See DashboardService for API reference.',
+ meta: 'service',
+ type: 'DashboardService '
+ },
+ userService: {
+ description: 'User Service API ' +
+ 'See UserService for API reference.',
+ meta: 'service',
+ type: 'UserService '
+ },
+ attributeService: {
+ description: 'Attribute Service API ' +
+ 'See AttributeService for API reference.',
+ meta: 'service',
+ type: 'AttributeService '
+ },
+ entityRelationService: {
+ description: 'Entity Relation Service API ' +
+ 'See EntityRelationService for API reference.',
+ meta: 'service',
+ type: 'EntityRelationService '
+ },
+ entityService: {
+ description: 'Entity Service API ' +
+ 'See EntityService for API reference.',
+ meta: 'service',
+ type: 'EntityService '
+ },
+ dialogs: {
+ description: 'Dialogs Service API ' +
+ 'See DialogService for API reference.',
+ meta: 'service',
+ type: 'DialogService '
+ },
+ customDialog: {
+ description: 'Custom Dialog Service API ' +
+ 'See CustomDialogService for API reference.',
+ meta: 'service',
+ type: 'CustomDialogService '
+ },
+ date: {
+ description: 'Date Pipe Formats a date value according to locale rules. ' +
+ 'See DatePipe for API reference.',
+ meta: 'service',
+ type: 'DatePipe '
+ },
+ translate: {
+ description: 'Translate Service API ' +
+ 'See TranslateService for API reference.',
+ meta: 'service',
+ type: 'TranslateService '
+ },
+ http: {
+ description: 'HTTP Client Service ' +
+ 'See HttpClient for API reference.',
+ meta: 'service',
+ type: 'HttpClient '
+ }
+}
diff --git a/ui-ngx/src/app/shared/models/ace/widget-completion.models.ts b/ui-ngx/src/app/shared/models/ace/widget-completion.models.ts
new file mode 100644
index 0000000000..53a04e92a2
--- /dev/null
+++ b/ui-ngx/src/app/shared/models/ace/widget-completion.models.ts
@@ -0,0 +1,643 @@
+///
+/// Copyright © 2016-2020 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import { TbEditorCompletion, TbEditorCompletions } from '@shared/models/ace/completion.models';
+import { entityIdHref, serviceCompletions } from '@shared/models/ace/service-completion.models';
+
+export const timewindowCompletion: TbEditorCompletion = {
+ description: 'Timewindow configuration object',
+ meta: 'property',
+ type: 'Timewindow ',
+ children: {
+ displayValue: {
+ description: 'Current timewindow display value.',
+ meta: 'property',
+ type: 'string'
+ },
+ hideInterval: {
+ description: 'Whether to hide interval selection in timewindow panel.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ hideAggregation: {
+ description: 'Whether to hide aggregation selection in timewindow panel.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ hideAggInterval: {
+ description: 'Whether to hide aggregation interval selection in timewindow panel.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ selectedTab: {
+ description: 'Current selected timewindow type (0 - realtime, 1 - history).',
+ meta: 'property',
+ type: 'number'
+ },
+ realtime: {
+ description: 'Realtime timewindow configuration object.',
+ meta: 'property',
+ type: 'IntervalWindow ',
+ children: {
+ interval: {
+ description: 'Timewindow aggregation interval in milliseconds',
+ meta: 'property',
+ type: 'number'
+ },
+ timewindowMs: {
+ description: 'Timewindow interval in milliseconds',
+ meta: 'property',
+ type: 'number'
+ }
+ }
+ },
+ history: {
+ description: 'History timewindow configuration object.',
+ meta: 'property',
+ type: 'HistoryWindow ',
+ children: {
+ historyType: {
+ description: 'History timewindow type (0 - last interval, 1 - fixed)',
+ meta: 'property',
+ type: 'number'
+ },
+ interval: {
+ description: 'Timewindow aggregation interval in milliseconds',
+ meta: 'property',
+ type: 'number'
+ },
+ timewindowMs: {
+ description: 'Timewindow interval in milliseconds',
+ meta: 'property',
+ type: 'number'
+ },
+ fixedTimewindow: {
+ description: 'Fixed history timewindow configuration object',
+ meta: 'property',
+ type: 'FixedWindow ',
+ children: {
+ startTimeMs: {
+ description: 'Timewindow start time in UTC milliseconds',
+ meta: 'property',
+ type: 'number'
+ },
+ endTimeMs: {
+ description: 'Timewindow end time in UTC milliseconds',
+ meta: 'property',
+ type: 'number'
+ }
+ }
+ }
+ }
+ },
+ aggregation: {
+ description: 'Timewindow aggregation configuration object.',
+ meta: 'property',
+ type: 'Aggregation ',
+ children: {
+ interval: {
+ description: 'Aggregation interval in milliseconds',
+ meta: 'property',
+ type: 'number'
+ },
+ type: {
+ description: 'Aggregation type',
+ meta: 'property',
+ type: 'AggregationType '
+ },
+ limit: {
+ description: 'Maximum allowed datapoints when aggregation is disabled (AggregationType == \'NONE\')',
+ meta: 'property',
+ type: 'number'
+ }
+ }
+ }
+ }
+}
+
+export const widgetContextCompletions: TbEditorCompletions = {
+ ctx: {
+ description: 'A reference to widget context that has all necessary API and data used by widget instance.',
+ meta: 'object',
+ type: 'WidgetContext ',
+ children: {
+ ...{
+ $container: {
+ description: 'Container element of the widget. Can be used to dynamically access or modify widget DOM using jQuery API.',
+ meta: 'property',
+ type: 'jQuery Object'
+ },
+ $scope: {
+ description: 'Reference to the current widget component. Can be used to access/modify component properties when widget is built using Angular approach.',
+ meta: 'property',
+ type: 'IDynamicWidgetComponent '
+ },
+ width: {
+ description: 'Current width of widget container in pixels.',
+ meta: 'property',
+ type: 'number'
+ },
+ height: {
+ description: 'Current height of widget container in pixels.',
+ meta: 'property',
+ type: 'number'
+ },
+ isEdit: {
+ description: 'Indicates whether the dashboard is in in the view or editing state.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ isMobile: {
+ description: 'Indicates whether the dashboard view is less then 960px width (default mobile breakpoint).',
+ meta: 'property',
+ type: 'boolean'
+ },
+ widgetConfig: {
+ description: 'Common widget configuration containing properties such as color (text color), backgroundColor (widget background color), etc.',
+ meta: 'property',
+ type: 'WidgetConfig ',
+ children: {
+ title: {
+ description: 'Widget title.',
+ meta: 'property',
+ type: 'string'
+ },
+ titleIcon: {
+ description: 'Widget title icon.',
+ meta: 'property',
+ type: 'string'
+ },
+ showTitle: {
+ description: 'Whether to show widget title.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ showTitleIcon: {
+ description: 'Whether to show widget title icon.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ iconColor: {
+ description: 'Widget title icon color.',
+ meta: 'property',
+ type: 'string'
+ },
+ iconSize: {
+ description: 'Widget title icon size.',
+ meta: 'property',
+ type: 'string'
+ },
+ titleTooltip: {
+ description: 'Widget title tooltip content.',
+ meta: 'property',
+ type: 'string'
+ },
+ dropShadow: {
+ description: 'Enable/disable widget card shadow.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ enableFullscreen: {
+ description: 'Whether to enable fullscreen button on widget.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ useDashboardTimewindow: {
+ description: 'Whether to use dashboard timewindow (applicable for timeseries widgets).',
+ meta: 'property',
+ type: 'boolean'
+ },
+ displayTimewindow: {
+ description: 'Whether to display timewindow (applicable for timeseries widgets).',
+ meta: 'property',
+ type: 'boolean'
+ },
+ showLegend: {
+ description: 'Whether to show legend.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ legendConfig: {
+ description: 'Legend configuration.',
+ meta: 'property',
+ type: 'LegendConfig ',
+ children: {
+ position: {
+ description: 'Legend position. Possible values: \'top\', \'bottom\', \'left\', \'right\'',
+ meta: 'property',
+ type: 'LegendPosition ',
+ },
+ direction: {
+ description: 'Legend direction. Possible values: \'column\', \'row\'',
+ meta: 'property',
+ type: 'LegendDirection ',
+ },
+ showMin: {
+ description: 'Whether to display aggregated min values.',
+ meta: 'property',
+ type: 'boolean',
+ },
+ showMax: {
+ description: 'Whether to display aggregated max values.',
+ meta: 'property',
+ type: 'boolean',
+ },
+ showAvg: {
+ description: 'Whether to display aggregated average values.',
+ meta: 'property',
+ type: 'boolean',
+ },
+ showTotal: {
+ description: 'Whether to display aggregated total values.',
+ meta: 'property',
+ type: 'boolean',
+ }
+ }
+ },
+ timewindow: timewindowCompletion,
+ mobileHeight: {
+ description: 'Widget height in mobile mode.',
+ meta: 'property',
+ type: 'number'
+ },
+ mobileOrder: {
+ description: 'Widget order in mobile mode.',
+ meta: 'property',
+ type: 'number'
+ },
+ color: {
+ description: 'Widget text color.',
+ meta: 'property',
+ type: 'string'
+ },
+ backgroundColor: {
+ description: 'Widget background color.',
+ meta: 'property',
+ type: 'string'
+ },
+ padding: {
+ description: 'Widget card padding.',
+ meta: 'property',
+ type: 'string'
+ },
+ margin: {
+ description: 'Widget card margin.',
+ meta: 'property',
+ type: 'string'
+ },
+ widgetStyle: {
+ description: 'Widget element style object.',
+ meta: 'property',
+ type: 'object'
+ },
+ titleStyle: {
+ description: 'Widget title element style object.',
+ meta: 'property',
+ type: 'object'
+ },
+ units: {
+ description: 'Optional property defining units text of values displayed by widget. Useful for simple widgets like cards or gauges.',
+ meta: 'property',
+ type: 'string'
+ },
+ decimals: {
+ description: 'Optional property defining how many positions should be used to display decimal part of the value number.',
+ meta: 'property',
+ type: 'number'
+ },
+ actions: {
+ description: 'Map of configured widget actions.',
+ meta: 'property',
+ type: 'object'
+ },
+ settings: {
+ description: 'Object holding widget settings according to widget type.',
+ meta: 'property',
+ type: 'object'
+ },
+ alarmSource: {
+ description: 'Configured alarm source for alarm widget type.',
+ meta: 'property',
+ type: 'Datasource '
+ },
+ alarmSearchStatus: {
+ description: 'Configured default alarm search status for alarm widget type.',
+ meta: 'property',
+ type: 'AlarmSearchStatus '
+ },
+ alarmsPollingInterval: {
+ description: 'Configured alarms polling interval for alarm widget type.',
+ meta: 'property',
+ type: 'number'
+ },
+ alarmsMaxCountLoad: {
+ description: 'Configured maximum alarms to load for alarm widget type.',
+ meta: 'property',
+ type: 'number'
+ },
+ alarmsFetchSize: {
+ description: 'Configured alarms page size used to load alarms.',
+ meta: 'property',
+ type: 'number'
+ },
+ datasources: {
+ description: 'Array of configured widget datasources.',
+ meta: 'property',
+ type: 'Array<Datasource >'
+ }
+ }
+ },
+ settings: {
+ description: 'Widget settings containing widget specific properties according to the defined settings json schema ',
+ meta: 'property',
+ type: 'object'
+ },
+ datasources: {
+ description: 'Array of resolved widget datasources.',
+ meta: 'property',
+ type: 'Array<Datasource >'
+ },
+ data: {
+ description: 'Array of latest datasources data.',
+ meta: 'property',
+ type: 'Array<DatasourceData >'
+ },
+ timeWindow: {
+ description: 'Current widget timewindow (applicable for timeseries widgets).',
+ meta: 'property',
+ type: 'WidgetTimewindow '
+ },
+ units: {
+ description: 'Optional property defining units text of values displayed by widget. Useful for simple widgets like cards or gauges.',
+ meta: 'property',
+ type: 'string'
+ },
+ decimals: {
+ description: 'Optional property defining how many positions should be used to display decimal part of the value number.',
+ meta: 'property',
+ type: 'number'
+ },
+ hideTitlePanel: {
+ description: 'Manages visibility of widget title panel. Useful for widget with custom title panels or different states. updateWidgetParams() function must be called after this property change.',
+ meta: 'property',
+ type: 'boolean'
+ },
+ widgetTitle: {
+ description: 'If set, will override configured widget title text. updateWidgetParams() function must be called after this property change.',
+ meta: 'property',
+ type: 'string'
+ },
+ detectChanges: {
+ description: 'Trigger change detection for current widget. Must be invoked when widget HTML template bindings should be updated due to widget data changes.',
+ meta: 'function'
+ },
+ updateWidgetParams: {
+ description: 'Updates widget with runtime set properties such as widgetTitle , hideTitlePanel , etc. Must be invoked in order these properties changes take effect.',
+ meta: 'function'
+ },
+ defaultSubscription: {
+ description: 'Default widget subscription object contains all subscription information, including current data, according to the widget type.',
+ meta: 'property',
+ type: 'IWidgetSubscription '
+ },
+ timewindowFunctions: {
+ description: 'Object with timewindow functions used to manage widget data time frame. Can by used by Time-series or Alarm widgets.',
+ meta: 'property',
+ type: 'TimewindowFunctions ',
+ children: {
+ onUpdateTimewindow: {
+ description: 'This function can be used to update current subscription time frame to historical one identified by startTimeMs and endTimeMs arguments.',
+ meta: 'function',
+ args: [
+ {
+ name: 'startTimeMs',
+ description: 'Timewindow start time in UTC milliseconds',
+ type: 'number'
+ },
+ {
+ name: 'endTimeMs',
+ description: 'Timewindow end time in UTC milliseconds',
+ type: 'number'
+ }
+ ]
+ },
+ onResetTimewindow: {
+ description: 'Resets subscription time frame to default defined by widget timewindow component or dashboard timewindow depending on widget settings.',
+ meta: 'function'
+ }
+ }
+ },
+ controlApi: {
+ description: 'Object that provides API functions for RPC (Control) widgets.',
+ meta: 'property',
+ type: 'RpcApi ',
+ children: {
+ sendOneWayCommand: {
+ description: 'Sends one way (without response) RPC command to the device.',
+ meta: 'function',
+ args: [
+ {
+ name: 'method',
+ description: 'RPC method name',
+ type: 'string'
+ },
+ {
+ name: 'params',
+ description: 'RPC method params, custom json object',
+ type: 'object',
+ optional: true
+ },
+ {
+ name: 'timeout',
+ description: 'Maximum delay in milliseconds to wait until response/acknowledgement is received.',
+ type: 'number',
+ optional: true
+ }
+ ],
+ return: {
+ description: 'A command execution Observable.',
+ type: 'Observable<any>'
+ }
+ },
+ sendTwoWayCommand: {
+ description: 'Sends two way (with response) RPC command to the device.',
+ meta: 'function',
+ args: [
+ {
+ name: 'method',
+ description: 'RPC method name',
+ type: 'string'
+ },
+ {
+ name: 'params',
+ description: 'RPC method params, custom json object',
+ type: 'object',
+ optional: true
+ },
+ {
+ name: 'timeout',
+ description: 'Maximum delay in milliseconds to wait until response/acknowledgement is received.',
+ type: 'number',
+ optional: true
+ }
+ ],
+ return: {
+ description: 'A command execution Observable of response body.',
+ type: 'Observable<any>'
+ }
+ }
+ }
+ },
+ actionsApi: {
+ description: 'Set of API functions to work with user defined actions.',
+ meta: 'property',
+ type: 'WidgetActionsApi ',
+ children: {
+ getActionDescriptors: {
+ description: 'Get list of action descriptors for provided actionSourceId.',
+ meta: 'function',
+ args: [
+ {
+ name: 'actionSourceId',
+ description: 'Id of widget action source',
+ type: 'string'
+ }
+ ],
+ return: {
+ description: 'The list of action descriptors',
+ type: 'Array<WidgetActionDescriptor >'
+ }
+ },
+ handleWidgetAction: {
+ description: 'Handle action produced by particular action source.',
+ meta: 'function',
+ args: [
+ {
+ name: '$event',
+ description: 'DOM event object associated with action.',
+ type: 'Event'
+ },
+ {
+ name: 'descriptor',
+ description: 'An action descriptor.',
+ type: 'WidgetActionDescriptor '
+ },
+ {
+ name: 'entityId',
+ description: 'Current entity id provided by action source if available.',
+ type: entityIdHref,
+ optional: true
+ },
+ {
+ name: 'entityName',
+ description: 'Current entity name provided by action source if available.',
+ type: 'string',
+ optional: true
+ }
+ ]
+ }
+ }
+ },
+ stateController: {
+ description: 'Reference to Dashboard state controller, providing API to manage current dashboard state.',
+ meta: 'property',
+ type: 'IStateController ',
+ children: {
+ openState: {
+ description: 'Navigate to new dashboard state.',
+ meta: 'function',
+ args: [
+ {
+ name: 'id',
+ description: 'An id of the target dashboard state.',
+ type: 'string'
+ },
+ {
+ name: 'params',
+ description: 'An object with state parameters to use by the new state.',
+ type: 'StateParams ',
+ optional: true
+ },
+ {
+ name: 'openRightLayout',
+ description: 'An optional boolean argument to force open right dashboard layout if present in mobile view mode.',
+ type: 'boolean',
+ optional: true
+ }
+ ]
+ },
+ updateState: {
+ description: 'Updates current dashboard state.',
+ meta: 'function',
+ args: [
+ {
+ name: 'id',
+ description: 'An optional id of the target dashboard state to replace current state id.',
+ type: 'string',
+ optional: true
+ },
+ {
+ name: 'params',
+ description: 'An object with state parameters to update current state parameters.',
+ type: 'StateParams ',
+ optional: true
+ },
+ {
+ name: 'openRightLayout',
+ description: 'An optional boolean argument to force open right dashboard layout if present in mobile view mode.',
+ type: 'boolean',
+ optional: true
+ }
+ ]
+ },
+ getStateId: {
+ description: 'Get current dashboard state id.',
+ meta: 'function',
+ return: {
+ description: 'current dashboard state id.',
+ type: 'string'
+ }
+ },
+ getStateParams: {
+ description: 'Get current dashboard state parameters.',
+ meta: 'function',
+ return: {
+ description: 'current dashboard state parameters.',
+ type: 'StateParams '
+ }
+ },
+ getStateParamsByStateId: {
+ description: 'Get state parameters for particular dashboard state identified by id.',
+ meta: 'function',
+ args: [
+ {
+ name: 'id',
+ description: 'An id of the target dashboard state.',
+ type: 'string'
+ }
+ ],
+ return: {
+ description: 'current dashboard state parameters.',
+ type: 'StateParams '
+ }
+ }
+ }
+ }
+ },
+ ...serviceCompletions
+ }
+ }
+}
diff --git a/ui-ngx/src/app/shared/models/settings.models.ts b/ui-ngx/src/app/shared/models/settings.models.ts
index 2fe8b32c89..f71ac1bb2e 100644
--- a/ui-ngx/src/app/shared/models/settings.models.ts
+++ b/ui-ngx/src/app/shared/models/settings.models.ts
@@ -32,6 +32,11 @@ export interface MailServerSettings {
enableTls: boolean;
username: string;
password: string;
+ enableProxy: boolean;
+ proxyHost: string;
+ proxyPort: number;
+ proxyUser: string;
+ proxyPassword: string;
}
export interface GeneralSettings {
diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts
index e55a39632b..ae2cf03542 100644
--- a/ui-ngx/src/app/shared/shared.module.ts
+++ b/ui-ngx/src/app/shared/shared.module.ts
@@ -133,6 +133,7 @@ import { JsonObjectEditDialogComponent } from '@shared/components/dialog/json-ob
import { HistorySelectorComponent } from './components/time/history-selector/history-selector.component';
import { EntityGatewaySelectComponent } from '@shared/components/entity/entity-gateway-select.component';
import { QueueTypeListComponent } from '@shared/components/queue/queue-type-list.component';
+import { ContactComponent } from '@shared/components/contact.component';
@NgModule({
providers: [
@@ -218,7 +219,8 @@ import { QueueTypeListComponent } from '@shared/components/queue/queue-type-list
TbJsonToStringDirective,
JsonObjectEditDialogComponent,
HistorySelectorComponent,
- EntityGatewaySelectComponent
+ EntityGatewaySelectComponent,
+ ContactComponent
],
imports: [
CommonModule,
@@ -379,7 +381,8 @@ import { QueueTypeListComponent } from '@shared/components/queue/queue-type-list
TranslateModule,
JsonObjectEditDialogComponent,
HistorySelectorComponent,
- EntityGatewaySelectComponent
+ EntityGatewaySelectComponent,
+ ContactComponent
]
})
export class SharedModule { }
diff --git a/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json b/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json
index 182c6b8282..e1b06f543b 100644
--- a/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json
+++ b/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json
@@ -6,7 +6,9 @@
"access-forbidden": "Přístup zakázán",
"access-forbidden-text": "Pro přístup do tohoto umístění nemáte přístupová oprávnění! Pokud si stále přejete získat přístup do tohoto umístění, zkuste se zaregistrovat pod jiným uživatelem.",
"refresh-token-expired": "Relace vypršela",
- "refresh-token-failed": "Nemohu aktualizovat relaci"
+ "refresh-token-failed": "Nemohu aktualizovat relaci",
+ "permission-denied": "Oprávnění zamítnuto",
+ "permission-denied-text": "Pro provedení této operace nemáte oprávnění!"
},
"action": {
"activate": "Aktivovat",
@@ -21,6 +23,7 @@
"no": "Ne",
"update": "Aktualizovat",
"remove": "Odstranit",
+ "select": "Vybrat",
"search": "Vyhledat",
"clear-search": "Zrušit hledání",
"assign": "Přiřadit",
@@ -48,7 +51,10 @@
"paste-reference": "Vložit referenci",
"import": "Importovat",
"export": "Exportovat",
- "share-via": "Sdílet přes {{provider}}"
+ "share-via": "Sdílet přes {{provider}}",
+ "continue": "Pokračovat",
+ "discard-changes": "Zahodit změny",
+ "download": "Stáhnout"
},
"aggregation": {
"aggregation": "Agregace",
@@ -84,7 +90,36 @@
"timeout-invalid": "Tohle nevypadá jako platný časový limit.",
"enable-tls": "Povolit TLS",
"tls-version": "Verze TLS",
- "send-test-mail": "Odeslat testovací zprávu"
+ "enable-proxy": "Povolit proxy",
+ "proxy-host": "Host proxy",
+ "proxy-host-required": "Host proxy je povinný.",
+ "proxy-port": "Port proxy",
+ "proxy-port-required": "Port proxy je povinný.",
+ "proxy-port-range": "Port proxy by měl být v rozsahu od 1 do 65535.",
+ "proxy-user": "Uživatel proxy",
+ "proxy-password": "Heslo proxy",
+ "send-test-mail": "Odeslat testovací zprávu",
+ "security-settings": "Bezpečnostní nastavení",
+ "password-policy": "Politika hesel",
+ "minimum-password-length": "Minimální délka hesla",
+ "minimum-password-length-required": "Minimální délka hesla je povinná",
+ "minimum-password-length-range": "Minimální délka hesla by měla být v rozsahu od 5 do 50",
+ "minimum-uppercase-letters": "Minimální počet velkých písmen",
+ "minimum-uppercase-letters-range": "Minimální počet velkých písmen nemůže být záporný",
+ "minimum-lowercase-letters": "Minimální počet malých písmen",
+ "minimum-lowercase-letters-range": "Minimální počet malých písmen nemůže být záporný",
+ "minimum-digits": "Minimální počet číslic",
+ "minimum-digits-range": "Minimální počet číslic nemůže být záporný ",
+ "minimum-special-characters": "Minimální počet speciálních znaků",
+ "minimum-special-characters-range": "Minimální počet speciálních znaků nemůže být záporný",
+ "password-expiration-period-days": "Lhůta expirace hesla ve dnech",
+ "password-expiration-period-days-range": "Lhůta expirace hesla ve dnech nemůže být záporná",
+ "password-reuse-frequency-days": "Frekvence opětovného použití hesla ve dnech",
+ "password-reuse-frequency-days-range": "Frekvence opětovného použití hesla ve dnech nemůže být záporná",
+ "general-policy": "Obecná politika",
+ "max-failed-login-attempts": "Maximální počet neúspěšných pokusů o přihlášení před zablokováním účtu",
+ "minimum-max-failed-login-attempts-range": "Maximální počet neúspěšných pokusů o přihlášení před zablokováním účtu nemůže být záporný",
+ "user-lockout-notification-email": "V případě zablokování uživatelského účtu odeslat upozornění na email"
},
"alarm": {
"alarm": "Alarm",
@@ -140,7 +175,13 @@
"clear-alarms-text": "Jste si jisti, že chcete odstranit { count, plural, 1 {1 alarm} other {# alarmů} }?",
"clear-alarm-title": "Odstranit alarm",
"clear-alarm-text": "Jste si jisti, že chcete alarm odstranit?",
- "alarm-status-filter": "Filtr stavu alarmu"
+ "alarm-status-filter": "Filtr stavu alarmu",
+ "max-count-load": "Maximální počet nahraných alarmů (0 - neomezeně)",
+ "max-count-load-required": "Maximální počet nahraných alarmů je povinný.",
+ "max-count-load-error-min": "Minimální hodnota je 0.",
+ "fetch-size": "Velikost dávky",
+ "fetch-size-required": "Velikost dávky je povinná.",
+ "fetch-size-error-min": "Minimální hodnota je 10."
},
"alias": {
"add": "Přidat alias",
@@ -177,6 +218,7 @@
"entity-filter-no-entity-matched": "Žádné entity odpovídající specifikovanému filtru nebyly nalezeny.",
"no-entity-filter-specified": "Nebyl specifikován žádný filtr entit",
"root-state-entity": "Použít stav entity dashboard jako kořenovou",
+ "last-level-relation": "Nahrát pouze vztah poslední úrovně",
"root-entity": "Kořenová entita",
"state-entity-parameter-name": "Název parametru stavu entity",
"default-state-entity": "Defaultní stav entity",
@@ -196,7 +238,7 @@
"assign-to-customer": "Přiřadit zákazníkovi",
"assign-asset-to-customer": "Přiřadit aktiva zákazníkovi",
"assign-asset-to-customer-text": "Prosím vyberte aktiva, která mají být přiřazena zákazníkovi",
- "no-assets-text": "Žádná aktiva nenalezena",
+ "no-assets-text": "Žádná aktiva nebyla nalezena",
"assign-to-customer-text": "Prosím vyberte zákazníka, kterému mají být aktiva přiřazena",
"public": "Veřejné",
"assignedToCustomer": "Přiřazeno zákazníkovi",
@@ -248,7 +290,11 @@
"no-assets-matching": "Žádná aktiva odpovídající '{{entity}}' nebyla nalezena.",
"asset-required": "Aktivum je povinné",
"name-starts-with": "Název aktiva začíná",
- "label": "Název"
+ "import": "Importovat aktiva",
+ "asset-file": "Soubor aktiva",
+ "search": "Vyhledat aktiva",
+ "selected-assets": "Vybráno { count, plural, 1 {1 aktiv} other {# aktiv} }",
+ "label": "Označení"
},
"attribute": {
"attributes": "Atributy",
@@ -275,7 +321,9 @@
"add-to-dashboard": "Přidat na dashboard",
"add-widget-to-dashboard": "Přidat widget na dashboard",
"selected-attributes": "Vybráno { count, plural, 1 {1 atributů} other {# atributů} }",
- "selected-telemetry": "Vybráno { count, plural, 1 {1 jednotek telemetrie} other {# jednotek telemetrie} }"
+ "selected-telemetry": "Vybráno { count, plural, 1 {1 jednotek telemetrie} other {# jednotek telemetrie} }",
+ "no-attributes-text": "Žádné atributy nebyly nalezeny",
+ "no-telemetry-text": "Žádná telemetrie nebyla nalezena"
},
"audit-log": {
"audit": "Audit",
@@ -305,10 +353,13 @@
"type-relations-delete": "Všechny vztahy smazány",
"type-alarm-ack": "Přijato",
"type-alarm-clear": "Odstraněno",
+ "type-login": "Přihlášení",
+ "type-logout": "Odhlášení",
+ "type-lockout": "Zablokování",
"status-success": "Úspěch",
"status-failure": "Chyba",
"audit-log-details": "Detail záznamu auditu",
- "no-audit-logs-prompt": "Žádné záznamy nenalezeny",
+ "no-audit-logs-prompt": "Žádné záznamy nebyly nalezeny",
"action-data": "Data akce",
"failure-details": "Detail chyby",
"search": "Prohledat záznamy auditu",
@@ -337,7 +388,8 @@
"enter-username": "Zadejte uživatelské jméno",
"enter-password": "Zadejte heslo",
"enter-search": "Zadejte hledaný řetězec",
- "created-time": "Datum vytvoření"
+ "created-time": "Datum vytvoření",
+ "loading": "Načítám..."
},
"content-type": {
"json": "JSON",
@@ -367,7 +419,7 @@
"manage-customer-assets": "Spravovat aktiva zákazníka",
"manage-public-assets": "Spravovat veřejná aktiva",
"add-customer-text": "Přidat nového zákazníka",
- "no-customers-text": "Žádní zákazníci nenalezeni",
+ "no-customers-text": "Žádní zákazníci nebyli nalezeni",
"customer-details": "Detail zákazníka",
"delete-customer-title": "Jste si jisti, že chcete smazat zákazníka '{{customerTitle}}'?",
"delete-customer-text": "Buďte opatrní, protože po potvrzení nebude možné zákazníka ani žádná související data obnovit.",
@@ -386,11 +438,13 @@
"copyId": "Kopírovat Id zákazníka",
"idCopiedMessage": "Id zákazníka bylo zkopírováno do schránky",
"select-customer": "Vybrat zákazníka",
- "no-customers-matching": "Žádní zákazníky odpovídající '{{entity}}' nebyli nalezeni.",
+ "no-customers-matching": "Žádní zákazníci odpovídající '{{entity}}' nebyli nalezeni.",
"customer-required": "Zákazník je povinný",
"select-default-customer": "Vybrat defaultního zákazníka",
"default-customer": "Defaultní zákazník",
- "default-customer-required": "Aby bylo možné ladit dashboard na úrovni tenanta, je nutné zadat defaultního zákazníka."
+ "default-customer-required": "Aby bylo možné ladit dashboard na úrovni tenanta, je nutné zadat defaultního zákazníka.",
+ "search": "Vyhledat zákazníky",
+ "selected-customers": "Vybráno { count, plural, 1 {1 zákazníků} other {# zákazníků} }"
},
"datetime": {
"date-from": "Datum od",
@@ -417,7 +471,7 @@
"assign-to-customers-text": "Prosím vyberte zákazníky, kterým má být dashboard(y) přiřazen(y)",
"unassign-from-customers": "Odebrat dashboard(y) zákazníkům",
"unassign-from-customers-text": "Prosím vyberte zákazníky, kterým má být dashboard(y) odebrán(y)",
- "no-dashboards-text": "Nebyly nalezeny žádné dashboardy",
+ "no-dashboards-text": "Žádné dashboardy nebyly nalezeny",
"no-widgets": "Nejsou nastaveny žádné widgety",
"add-widget": "Přidat nový widget",
"title": "Název",
@@ -437,7 +491,7 @@
"unassign-dashboards": "Odebrat dashboardy",
"unassign-dashboards-action-title": "Odebrat { count, plural, 1 {1 dashboard} other {# dashboardů} } zákazníkovi",
"delete-dashboard-title": "Jste si jisti, že chcete odstranit dashboard '{{dashboardTitle}}'?",
- "delete-dashboard-text": "Buďte opatrní, protože po potvrzení nebude možné dashboard ani žádná soubisející data obnovit.",
+ "delete-dashboard-text": "Buďte opatrní, protože po potvrzení nebude možné dashboard ani žádná související data obnovit.",
"delete-dashboards-title": "Jste si jisti, že chcete smazat { count, plural, 1 {1 dashboard} other {# dashboardů} }?",
"delete-dashboards-action-title": "Smazat { count, plural, 1 {1 dashboard} other {# dashboardů} }",
"delete-dashboards-text": "Buďte opatrní, protože po potvrzení budou všechny vybrané dashboardy smazány a žádná související data nebude možné obnovit.",
@@ -473,6 +527,9 @@
"min-columns-count-message": "Minimální povolený počet sloupců je 10.",
"max-columns-count-message": "Maximální povolený počet sloupců je 1000.",
"widgets-margins": "Okraj mezi widgety",
+ "margin-required": "Hodnota okraje je povinná.",
+ "min-margin-message": "Pouze 0 je povolena jako minimální hodnota okraje.",
+ "max-margin-message": "Pouze 50 je povoleno jako maximální hodnota okraje.",
"horizontal-margin": "Horizontální okraj",
"horizontal-margin-required": "Hodnota horizontálního okraje je povinná.",
"min-horizontal-margin-message": "Minimální povolená hodnota horizontálního okraje je 0.",
@@ -525,6 +582,7 @@
"edit-state": "Editovat stav dashboardu",
"delete-state": "Smazat stav dashboardu",
"add-state": "Přidat stav dashboardu",
+ "no-states-text": "Žádné No states found",
"state": "Stav dashboardu",
"state-name": "Název",
"state-name-required": "Název stavu dashboardu je povinný.",
@@ -537,12 +595,14 @@
"show-details": "Zobrazit detaily",
"hide-details": "Skrýt detaily",
"select-state": "Vybrat cílový stav",
- "state-controller": "Kontrolér stavu"
+ "state-controller": "Kontrolér stavu",
+ "search": "Vyhledat dashboardy",
+ "selected-dashboards": "Vybráno { count, plural, 1 {1 dashboardů} other {# dashboardů} }"
},
"datakey": {
"settings": "Nastavení",
"advanced": "Rozšířené",
- "label": "Název",
+ "label": "Označení",
"color": "Barva",
"units": "Speciální symbol, který bude zobrazen vedle hodnoty",
"decimals": "Počet číslic za desetinnou čárkou",
@@ -551,6 +611,7 @@
"configuration": "Konfigurace datového klíče",
"timeseries": "Časové řady",
"attributes": "Atributy",
+ "entity-field": "Pole entity",
"alarm": "Pole alarmu",
"timeseries-required": "Časové řady entity jsou povinné.",
"timeseries-or-attributes-required": "Časové řady / atributy entity jsou povinné.",
@@ -571,7 +632,9 @@
"add-datasource-prompt": "Přidejte prosím datový zdroj"
},
"details": {
+ "details": "Detail",
"edit-mode": "Režim editace",
+ "edit-json": "Editovat JSON",
"toggle-edit-mode": "Přepnout do režimu editace"
},
"device": {
@@ -585,7 +648,7 @@
"no-alias-matching": "'{{alias}}' nenalezen.",
"no-aliases-found": "Žádné aliasy nebyly nalezeny.",
"no-key-matching": "'{{key}}' nenalezen.",
- "no-keys-found": "Žádné klíče nenalezeny.",
+ "no-keys-found": "Žádné klíče nebyly nalezeny.",
"create-new-alias": "Vytvořit nový!",
"create-new-key": "Vytvořit nový!",
"duplicate-alias-error": "Byl nalezen duplicitní alias '{{alias}}'. Aliasy zařízení musí být v rámci dashboardu unikátní.",
@@ -656,6 +719,7 @@
"name": "Název",
"name-required": "Název je povinný.",
"description": "Popis",
+ "label": "Označení",
"events": "Události",
"details": "Detail",
"copyId": "Kopírovat Id zařízení",
@@ -668,7 +732,11 @@
"is-gateway": "Je bránou",
"public": "Veřejné",
"device-public": "Zařízení je veřejné",
- "select-device": "vybrat zařízení"
+ "select-device": "Vybrat zařízení",
+ "import": "Importovat zařízení",
+ "device-file": "Soubor zařízení",
+ "search": "Vyhledat zařízení",
+ "selected-devices": "Vybráno { count, plural, 1 {1 zařízení} other {# zařízení} }"
},
"dialog": {
"close": "Zavřít dialog"
@@ -741,7 +809,7 @@
"type-plugin": "Zásuvný modul",
"type-plugins": "Zásuvné moduly",
"list-of-plugins": "{ count, plural, 1 {Jeden zásuvný modul} other {Seznam # zásuvných modulů} }",
- "plugin-name-starts-with": "Závusné moduly, jejichž název začíná '{{prefix}}'",
+ "plugin-name-starts-with": "Zásuvné moduly, jejichž název začíná '{{prefix}}'",
"type-tenant": "Tenant",
"type-tenants": "Tenanti",
"list-of-tenants": "{ count, plural, 1 {Jeden tenant} other {Seznam # tenantů} }",
@@ -775,11 +843,29 @@
"search": "Vyhledat entity",
"selected-entities": "{ count, plural, 1 {1 entita} other {# entit} } zvoleno",
"entity-name": "Název entity",
+ "entity-label": "Označení entity",
"details": "Detail entity",
- "no-entities-prompt": "Nebyly nalezeny žádné entity",
+ "no-entities-prompt": "Žádné entity nebyly nalezeny",
"no-data": "Nelze zobrazit žádná data",
"columns-to-display": "Zobrazit sloupce"
},
+ "entity-field": {
+ "created-time": "Datum vytvoření",
+ "name": "Název",
+ "type": "Typ",
+ "first-name": "Jméno",
+ "last-name": "Příjmení",
+ "email": "Email",
+ "title": "Titul",
+ "country": "Stát",
+ "state": "Region",
+ "city": "Město",
+ "address": "Adresa",
+ "address2": "Adresa 2",
+ "zip": "PSČ",
+ "phone": "Telefon",
+ "label": "Označení"
+ },
"entity-view": {
"entity-view": "Entitní pohled",
"entity-view-required": "Entitní pohled je povinný.",
@@ -791,12 +877,13 @@
"no-alias-matching": "'{{alias}}' nenalezen.",
"no-aliases-found": "Žádné aliasy nebyly nalezeny.",
"no-key-matching": "'{{key}}' nenalezen.",
- "no-keys-found": "Nebyly nalezeny žádné klíče.",
+ "no-keys-found": "Žádné klíče nebyly nalezeny.",
"create-new-alias": "Vytvořit nový!",
"create-new-key": "Vytvořit nový!",
"duplicate-alias-error": "Byl nalezen duplicitní alias '{{alias}}'. Aliasy entitních pohledů musí být v rámci dashboardu unikátní.",
"configure-alias": "Konfigurovat '{{alias}}' alias",
"no-entity-views-matching": "Žádné entitní pohledy odpovídající '{{entity}}' nebyly nalezeny.",
+ "public": "Veřejný",
"alias": "Alias",
"alias-required": "Alias entitního pohledu je povinný.",
"remove-alias": "Odebrat alias entitního pohledu",
@@ -808,6 +895,7 @@
"entity-view-name-filter-required": "Filtr názvu entitního pohledu je povinný.",
"entity-view-name-filter-no-entity-view-matched": "Žádné entitní pohledy začínající '{{entityView}}' nebyly nalezeny.",
"add": "Přidat entitní pohled",
+ "entity-view-public": "Entitní pohled je veřejný",
"assign-to-customer": "Přiřadit zákazníkovi",
"assign-entity-view-to-customer": "Přiřadit entitní pohled(y) zákazníkovi",
"assign-entity-view-to-customer-text": "Vyberte prosím entitní pohledy, které mají být přiřazeny zákazníkovi",
@@ -841,12 +929,14 @@
"no-entity-view-types-matching": "Žádné typy entitních pohledů odpovídající '{{entitySubtype}}' nebyly nalezeny.",
"entity-view-type-list-empty": "Žádné typy entitních pohledů nebyly nalezeny.",
"entity-view-types": "Typy entitních pohledů",
+ "created-time": "Datum vytvoření",
"name": "Název",
"name-required": "Název je povinný.",
"description": "Popis",
"events": "Události",
"details": "Detail",
"copyId": "Kopírovat Id entitního pohledu",
+ "idCopiedMessage": "Id entitního pohledu bylo zkopírováno do schránky",
"assignedToCustomer": "Přiřazeno zákazníkovi",
"unable-entity-view-device-alias-title": "Alias entitního typu nebylo možné smazat",
"unable-entity-view-device-alias-text": "Alias zařízení '{{entityViewAlias}}' nelze smazat, protože je používán následujícími widgety: {{widgetsList}}",
@@ -874,7 +964,9 @@
"make-public-entity-view-title": "Jste si jisti, že chcete entitní pohled '{{entityViewName}}' zveřejnit?",
"make-public-entity-view-text": "Po potvrzení bude entitní pohled a všechna jeho data veřejné a dostupné pro ostatní.",
"make-private-entity-view-title": "Jste si jisti, že chcete entitní pohled '{{entityViewName}}' učinit neveřejným?",
- "make-private-entity-view-text": "Po potvrzení bude entitní pohled a všechna jeho data neveřejné a nebudou dostupné pro ostatní."
+ "make-private-entity-view-text": "Po potvrzení bude entitní pohled a všechna jeho data neveřejné a nebudou dostupné pro ostatní.",
+ "search": "Vyhledat entitní pohledy",
+ "selected-entity-views": "Vybráno { count, plural, 1 {1 entitních pohledů} other {# entitních pohledů} }"
},
"event": {
"event-type": "Typ události",
@@ -883,7 +975,7 @@
"type-stats": "Statistika",
"type-debug-rule-node": "Ladění",
"type-debug-rule-chain": "Ladění",
- "no-events-prompt": "Nebyly nalezeny žádné události",
+ "no-events-prompt": "Žádné události nebyly nalezeny",
"error": "Chyba",
"alarm": "Alarm",
"event-time": "Čas události",
@@ -1071,6 +1163,80 @@
"function": {
"function": "Funkce"
},
+ "gateway": {
+ "add-entry": "Přidat konfiguraci",
+ "connector-add": "Přidat nový konektor",
+ "connector-enabled": "Povolit konektor",
+ "connector-name": "Název konektoru",
+ "connector-name-required": "Název konektoru je povinný.",
+ "connector-type": "Typ konektoru",
+ "connector-type-required": "Typ konektoru je povinný.",
+ "connectors": "Konfigurace konektoru",
+ "create-new-gateway": "Vytvořit novou bránu",
+ "create-new-gateway-text": "Jste si jisti, že chcete vytvořit novou bránu s názvem: '{{gatewayName}}'?",
+ "delete": "Smazat konfiguraci",
+ "download-tip": "Stáhnout soubor konfigurace",
+ "gateway": "Brána",
+ "gateway-exists": "Zařízení se shodným názvem již existuje.",
+ "gateway-name": "Název brány",
+ "gateway-name-required": "Název brány je povinný.",
+ "gateway-saved": "Konfigurace brány byla úspěšně uložena.",
+ "json-parse": "Neplatný JSON.",
+ "json-required": "Pole nemůže být prázdné.",
+ "no-connectors": "Žádné konektory",
+ "no-data": "Žádné konfigurace",
+ "no-gateway-found": "Žádné brány nebyly nalezeny.",
+ "no-gateway-matching": " '{{item}}' nenalezena.",
+ "path-logs": "Cesta k souborům logu",
+ "path-logs-required": "Cesta je povinná.",
+ "remote": "Vzdálená konfigurace",
+ "remote-logging-level": "Úroveň logování",
+ "remove-entry": "Odstranit konfiguraci",
+ "save-tip": "Uložit soubor konfigurace",
+ "security-type": "Typ zabezpečení",
+ "security-types": {
+ "access-token": "Přístupový token",
+ "tls": "TLS"
+ },
+ "storage": "Úložiště",
+ "storage-max-file-records": "Maximální počet záznamů v souboru",
+ "storage-max-files": "Maximální počet souborů",
+ "storage-max-files-min": "Minimální počet je 1.",
+ "storage-max-files-pattern": "Počet není platný.",
+ "storage-max-files-required": "Počet je povinný.",
+ "storage-max-records": "Maximální počet záznamů v úložišti",
+ "storage-max-records-min": "Minimální počet záznamů je 1.",
+ "storage-max-records-pattern": "Počet není platný.",
+ "storage-max-records-required": "Maximální počet záznamů je povinný.",
+ "storage-pack-size": "Maximální velikost souboru událostí",
+ "storage-pack-size-min": "Minimální počet je 1.",
+ "storage-pack-size-pattern": "Počet není platný.",
+ "storage-pack-size-required": "Maximální velikost souboru událostí je povinná.",
+ "storage-path": "Cesta k úložišti",
+ "storage-path-required": "Cesta k úložišti je povinná.",
+ "storage-type": "Typ úložiště",
+ "storage-types": {
+ "file-storage": "Soubor",
+ "memory-storage": "Paměť"
+ },
+ "thingsboard": "ThingsBoard",
+ "thingsboard-host": "Host ThingsBoard",
+ "thingsboard-host-required": "Host je povinný.",
+ "thingsboard-port": "Port ThingsBoard",
+ "thingsboard-port-max": "Maximální číslo portu je 65535.",
+ "thingsboard-port-min": "Minimální číslo portu je 1.",
+ "thingsboard-port-pattern": "Port není platný.",
+ "thingsboard-port-required": "Port je povinný.",
+ "tidy": "Uspořádat",
+ "tidy-tip": "Uspořádat JSON konfiguraci",
+ "title-connectors-json": "Konfigurace {{typeName}} konektoru",
+ "tls-path-ca-certificate": "Cesta k certifikátu CA brány",
+ "tls-path-client-certificate": "Cesta k certifikátu klienta brány",
+ "tls-path-private-key": "Cesta k privátnímu klíči brány",
+ "toggle-fullscreen": "Přepnout do režimu celé obrazovky",
+ "transformer-json-config": "JSON* konfigurace",
+ "update-config": "Přidat/editovat JSON konfiguraci"
+ },
"grid": {
"delete-item-title": "Jste si jisti, že chcete smazat tuto položku?",
"delete-item-text": "Buďte opatrní, protože po potvrzení nebude možné tuto položku ani žádná související data obnovit.",
@@ -1097,7 +1263,43 @@
},
"import": {
"no-file": "Nebyl vybrán žádný soubor",
- "drop-file": "Přetáhněte sem JSON soubor nebo klikněte pro výběr souboru pro nahrání."
+ "drop-file": "Přetáhněte sem JSON soubor nebo klikněte pro výběr souboru pro nahrání.",
+ "drop-file-csv": "Přetáhněte sem CSV soubor nebo klikněte pro výběr souboru pro nahrání.",
+ "column-value": "Hodnota",
+ "column-title": "Název",
+ "column-example": "Příklad hodnoty",
+ "column-key": "Klíč atributu/telemetrie",
+ "csv-delimiter": "Oddělovač CSV",
+ "csv-first-line-header": "První řádek obsahuje názvy sloupců",
+ "csv-update-data": "Editovat atributy/telemetrii",
+ "import-csv-number-columns-error": "Soubor by měl obsahovat minimálně dva sloupce",
+ "import-csv-invalid-format-error": "Neplatný formát souboru. Řádek: '{{line}}'",
+ "column-type": {
+ "name": "Název",
+ "type": "Typ",
+ "label": "Označení",
+ "column-type": "Typ sloupce",
+ "client-attribute": "Atribut klienta",
+ "shared-attribute": "Sdílený atribut",
+ "server-attribute": "Atribut serveru",
+ "timeseries": "Časové řady",
+ "entity-field": "Pole entity",
+ "access-token": "Přístupový token",
+ "isgateway": "Je bránou",
+ "description": "Popis"
+ },
+ "stepper-text":{
+ "select-file": "Vybrat soubor",
+ "configuration": "Importovat konfiguraci",
+ "column-type": "Vybrat typ sloupců",
+ "creat-entities": "Vytvořím nové entity",
+ "done": "Hotovo"
+ },
+ "message": {
+ "create-entities": "{{count}} nových entit bylo úspěšně vytvořeno.",
+ "update-entities": "{{count}} entit bylo úspěšně aktualizováno.",
+ "error-entities": "Při vytvoření {{count}} entit došlo k chybě."
+ }
},
"item": {
"selected": "Vybráno"
@@ -1105,7 +1307,8 @@
"js-func": {
"no-return-error": "Funkce musí vrátit hodnotu!",
"return-type-mismatch": "Funkce musí vrátit hodnotu '{{type}}' typu!",
- "tidy": "Tidy"
+ "tidy": "Tidy",
+ "mini": "Mini"
},
"key-val": {
"key": "Klíč",
@@ -1134,7 +1337,13 @@
"min": "min",
"max": "max",
"avg": "průměr",
- "total": "celkem"
+ "total": "celkem",
+ "comparison-time-ago": {
+ "days": "(před dny)",
+ "weeks": "(před týdny)",
+ "months": "(před měsíci)",
+ "years": "(před roky)"
+ }
},
"login": {
"login": "Přihlásit se",
@@ -1148,12 +1357,14 @@
"remember-me": "Zapamatovat si mě",
"forgot-password": "Zapomněli jste heslo?",
"password-reset": "Reset hesla",
+ "expired-password-reset-message": "Platnost vašich přístupových údajů vypršela! Nastavte si prosím nové heslo.",
"new-password": "Nové heslo",
"new-password-again": "Nové heslo znovu",
"password-link-sent-message": "Odkaz pro reset hesla byl úspěšně odeslán!",
"email": "Email",
"login-with": "Přihlásit se přes {{name}}",
- "or": "nebo"
+ "or": "nebo",
+ "error": "Chyba přihlášení"
},
"position": {
"top": "Nahoře",
@@ -1163,6 +1374,7 @@
},
"profile": {
"profile": "Profil",
+ "last-login-time": "Poslední přihlášení",
"change-password": "Změnit heslo",
"current-password": "Stávající heslo"
},
@@ -1206,7 +1418,8 @@
"any-relation": "Všechny vztahy",
"relation-filters": "Filtry vztahů",
"additional-info": "Další info (JSON)",
- "invalid-additional-info": "Další informace v JSON nebylo možné parsovat."
+ "invalid-additional-info": "Další informace v JSON nebylo možné parsovat.",
+ "no-relations-text": "Žádné vztahy nebyly nalezeny"
},
"rulechain": {
"rulechain": "Řetěz pravidel",
@@ -1243,7 +1456,10 @@
"no-rulechains-matching": "Žádné řetězy pravidel odpovídající '{{entity}}' nebyly nalezeny.",
"rulechain-required": "Řetěz pravidel je povinný",
"management": "Správa pravidel",
- "debug-mode": "Režim ladění"
+ "debug-mode": "Režim ladění",
+ "search": "Vyhledat řetězy pravidel",
+ "selected-rulechains": "Vybráno { count, plural, 1 {1 řetězů pravidel} other {# řetězů pravidel} }",
+ "open-rulechain": "Otevřít řetěz pravidel"
},
"rulenode": {
"details": "Detail",
@@ -1309,6 +1525,11 @@
"help": "Nápověda",
"reset-debug-mode": "Resetovat režim ladění na všech uzlech"
},
+ "queue": {
+ "select_name": "Vybrat název fronty",
+ "name": "Název fronty",
+ "name_required": "Název fronty je povinný!"
+ },
"tenant": {
"tenant": "Tenant",
"tenants": "Tenanti",
@@ -1324,7 +1545,7 @@
"delete-tenant-text": "Buďte opatrní, protože po potvrzení nebude možné tenanta ani žádná související data obnovit.",
"delete-tenants-title": "Jste si jisti, že chcete smazat { count, plural, 1 {1 tenanta} other {# tenantů} }?",
"delete-tenants-action-title": "Smazat { count, plural, 1 {1 tenanta} other {# tenantů} }",
- "delete-tenants-text": "Buďte opatrní, protože po potvrzení budou všichni vybraní tenanti odstranění a žádná související data nebude možné obnovit.",
+ "delete-tenants-text": "Buďte opatrní, protože po potvrzení budou všichni vybraní tenanti odstraněni a žádná související data nebude možné obnovit.",
"title": "Název",
"title-required": "Název je povinný.",
"description": "Popis",
@@ -1334,7 +1555,13 @@
"idCopiedMessage": "Id tenanta bylo zkopírováno do schránky",
"select-tenant": "Vybrat tenanta",
"no-tenants-matching": "Žádní tenanti odpovídající '{{entity}}' nebyli nalezeni.",
- "tenant-required": "Tenant je povinný"
+ "tenant-required": "Tenant je povinný",
+ "search": "Vyhledat tenanty",
+ "selected-tenants": "Vybráno { count, plural, 1 {1 tenantů} other {# tenantů} }",
+ "isolated-tb-core": "Zpracování v izolovaném kontejneru ThingsBoard Core",
+ "isolated-tb-rule-engine": "Zpracování v izolovaném kontejneru ThingsBoard Rule Engine",
+ "isolated-tb-core-details": "Vyžaduje samostatnou mikroslužbu(y) pro každého izolovaného tenanta",
+ "isolated-tb-rule-engine-details": "Vyžaduje samostatnou mikroslužbu(y) pro každého izolovaného tenanta"
},
"timeinterval": {
"seconds-interval": "{ seconds, plural, 1 {1 vteřina} other {# vteřin} }",
@@ -1359,7 +1586,8 @@
"edit": "Editovat časové okno",
"date-range": "Rozsah data",
"last": "Poslední",
- "time-period": "Časový interval"
+ "time-period": "Časový interval",
+ "hide": "Skrýt"
},
"user": {
"user": "Uživatel",
@@ -1402,22 +1630,35 @@
"activation-link-copied-message": "Aktivační odkaz uživatele byl zkopírován do schránky",
"details": "Detail",
"login-as-tenant-admin": "Přihlásit se jako administrátor tenanta",
- "login-as-customer-user": "Přihlásit se jako uživatel zákazníka"
+ "login-as-customer-user": "Přihlásit se jako uživatel zákazníka",
+ "search": "Vyhledat uživatele",
+ "selected-users": "Vybráno { count, plural, 1 {1 uživatelů} other {# uživatelů} }",
+ "disable-account": "Zakázat uživatelský účet",
+ "enable-account": "Povolit uživatelský účet",
+ "enable-account-message": "Uživatelský účet byl úspěšně povolen!",
+ "disable-account-message": "Uživatelský účet byl úspěšně zakázán!"
},
"value": {
"type": "Typ hodnoty",
"string": "Řetězec",
"string-value": "Hodnota řetězce",
+ "string-value-required": "Hodnota řetězce je povinná",
"integer": "Celé číslo",
"integer-value": "Hodnota celého čísla",
+ "integer-value-required": "Hodnota celého čísla je povinná",
"invalid-integer-value": "Neplatná hodnota celého čísla",
"double": "Číslo s plovoucí řádovou s dvojitou přesností",
"double-value": "Hodnota čísla s plovoucí řádovou řádkou",
+ "double-value-required": "Hodnota čísla s plovoucí řádovou čárkou je povinná",
"boolean": "Pravdivostní hodnota",
"boolean-value": "Hodnota pravdivostní hodnoty",
"false": "Nepravda",
"true": "Pravda",
- "long": "Vysoké celé číslo"
+ "long": "Vysoké celé číslo",
+ "json": "JSON",
+ "json-value": "Hodnota JSON",
+ "json-value-invalid": "Hodnota JSON má neplatný formát",
+ "json-value-required": "Hodnota JSON je povinná."
},
"widget": {
"widget-library": "Knihovna widgetů",
@@ -1461,6 +1702,7 @@
"settings-schema": "Schéma nastavení",
"datakey-settings-schema": "Schéma nastavení datového klíče",
"javascript": "Javascript",
+ "js": "JS",
"remove-widget-type-title": "Jste si jisti, že chcete odebrat typ widgetu '{{widgetName}}'?",
"remove-widget-type-text": "Po potvrzení nebude možné typ widgetu ani žádná související data obnovit.",
"remove-widget-type": "Odebrat typ widgetu",
@@ -1477,6 +1719,7 @@
"update-dashboard-state": "Aktualizovat stávající stav dashboardu",
"open-dashboard": "Přejít k jinému dashboardu",
"custom": "Vlastní akce",
+ "custom-pretty": "Vlastní akce (s HTML šablonou)",
"target-dashboard-state": "Cílový stav dashboardu",
"target-dashboard-state-required": "Cílový stav dashboardu je povinný",
"set-entity-from-widget": "Nastavit entitu z widgetu",
@@ -1508,13 +1751,17 @@
"export-failed-error": "Kategorii widgetů nebylo možné exportovat: {{error}}",
"create-new-widgets-bundle": "Vytvořit novou kategorii widgetů",
"widgets-bundle-file": "Soubor kategorie widgetů",
- "invalid-widgets-bundle-file-error": "Kategorii widgetů nebylo možné importovat: Neplatná datová struktura kategorie widgetů."
+ "invalid-widgets-bundle-file-error": "Kategorii widgetů nebylo možné importovat: Neplatná datová struktura kategorie widgetů.",
+ "search": "Vyhledat kategorie widgetů",
+ "selected-widgets-bundles": "Vybráno { count, plural, 1 {1 kategorií widgetů} other {# kategorií widgetů} }",
+ "open-widgets-bundle": "Otevřít kategorii widgetů"
},
"widget-config": {
"data": "Data",
"settings": "Nastavení",
"advanced": "Rozšířené",
"title": "Název",
+ "title-tooltip": "Popisek názvu",
"general-settings": "Obecná nastavení",
"display-title": "Zobrazovaný název",
"drop-shadow": "Stín",
@@ -1532,6 +1779,7 @@
"decimals": "Počet číslic za desetinnou čárkou",
"timewindow": "Časové okno",
"use-dashboard-timewindow": "Použít časové okno dashboardu",
+ "display-timewindow": "Zobrazit časové okno",
"display-legend": "Zobrazit legendu",
"datasources": "Datové zdroje",
"maximum-datasources": "Maximum { count, plural, 1 {1 datový zdroj je povolen.} other {# datových zdrojů je povoleno} }",
@@ -1545,6 +1793,7 @@
"action": "Akce",
"add-action": "Přidat akci",
"search-actions": "Vyhledat akce",
+ "no-actions-text": "Žádné akce nebyly nalezeny",
"action-source": "Zdroj akce",
"action-source-required": "Zdroj akce je povinný.",
"action-name": "Název",
@@ -1556,7 +1805,10 @@
"edit-action": "Editovat akci",
"delete-action": "Smazat akci",
"delete-action-title": "Smazat akci widgetu",
- "delete-action-text": "Jste si jisti, že chcete smazat akci widgetu s názvem '{{actionName}}'?"
+ "delete-action-text": "Jste si jisti, že chcete smazat akci widgetu s názvem '{{actionName}}'?",
+ "display-icon": "Zobrazit název ikony",
+ "icon-color": "Barva ikony",
+ "icon-size": "Velikost ikony"
},
"widget-type": {
"import": "Importovat typ widgetu",
@@ -1623,6 +1875,46 @@
"Step size": "Velikost kroku",
"Ok": "Ok"
}
+ },
+ "input-widgets": {
+ "attribute-not-allowed": "Parametr atributu nelze v tomto widgetu použít",
+ "blocked-location": "Geolokace je ve vašem prohlížeči zakázána",
+ "claim-device": "Získat zařízení",
+ "claim-failed": "Nepodařilo se získat zařízení!",
+ "claim-not-found": "Zařízení nenalezeno!",
+ "claim-successful": "Zařízení bylo úspěšně získáno!",
+ "date": "Datum",
+ "device-name": "Název zařízení",
+ "device-name-required": "Název zařízení je povinný",
+ "discard-changes": "Zahodit změny",
+ "entity-attribute-required": "Atribut entity je povinný",
+ "entity-coordinate-required": "Obě pole, zeměpisná šířka i zeměpisná délka, jsou povinná",
+ "entity-timeseries-required": "Časové řady entity jsou povinné",
+ "get-location": "Získat aktuální polohu",
+ "latitude": "Zeměpisná šířka",
+ "longitude": "Zeměpisná délka",
+ "not-allowed-entity": "Vybraná entita nemůže mít sdílené atributy",
+ "no-attribute-selected": "Není vybrán žádný atribut",
+ "no-datakey-selected": "Není vybrán žádný datový klíč",
+ "no-coordinate-specified": "Datový klíč pro zeměpisnou šířku/délku nebyl specifikován",
+ "no-entity-selected": "Není vybrána žádná entita",
+ "no-image": "Žádný obrázek",
+ "no-support-geolocation": "Váš prohlížeč nepodporuje geolokaci",
+ "no-support-web-camera": "Žádná podporovaná webová kamera",
+ "no-timeseries-selected": "Nejsou vybrány žádné časové řady",
+ "secret-key": "Tajný klíč",
+ "secret-key-required": "Tajný klíč je povinný",
+ "switch-attribute-value": "Přepnout hodnotu atributu entity",
+ "switch-camera": "Přepnout kameru",
+ "switch-timeseries-value": "Přepnout hodnotu časové řady entity",
+ "take-photo": "Vyfotit",
+ "time": "Čas",
+ "timeseries-not-allowed": "Časové řady nelze v tomto widgetu použít",
+ "update-failed": "Aktualizace selhala",
+ "update-successful": "Aktualizace úspěšná",
+ "update-attribute": "Editovat atribut",
+ "update-timeseries": "Editovat časové řady",
+ "value": "Hodnota"
}
},
"icon": {
@@ -1638,10 +1930,32 @@
"polygon-click": "Při kliknutí na polygon",
"marker-click": "Při kliknutí na značku",
"tooltip-tag-action": "Akce štítku nápovědy",
- "node-selected": "Při výběru uzlu"
+ "node-selected": "Při výběru uzlu",
+ "element-click": "Při kliknutí na prvek HTML",
+ "pie-slice-click": "Při kliknutí na oblast grafu",
+ "row-double-click": "Při dvoj kliknutí na řádek"
}
},
"language": {
- "language": "Jazyk"
+ "language": "Jazyk",
+ "locales": {
+ "de_DE": "Deutsch",
+ "fr_FR": "Français",
+ "zh_CN": "简体中文",
+ "zh_TW": "繁體中文",
+ "en_US": "English",
+ "it_IT": "Italiano",
+ "ko_KR": "한글",
+ "ru_RU": "Русский",
+ "es_ES": "Español",
+ "ja_JA": "日本語",
+ "tr_TR": "Türkçe",
+ "fa_IR": "فارسي",
+ "uk_UA": "Українська",
+ "cs_CZ": "Česky",
+ "el_GR": "Ελληνικά",
+ "ro_RO": "Română",
+ "lv_LV": "Latviešu"
+ }
}
}
diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json
index 2a7b7b8f8a..0d4925d89f 100644
--- a/ui-ngx/src/assets/locale/locale.constant-en_US.json
+++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json
@@ -90,6 +90,14 @@
"timeout-invalid": "That doesn't look like a valid timeout.",
"enable-tls": "Enable TLS",
"tls-version": "TLS version",
+ "enable-proxy": "Enable proxy",
+ "proxy-host": "Proxy host",
+ "proxy-host-required": "Proxy host is required.",
+ "proxy-port": "Proxy port",
+ "proxy-port-required": "Proxy port is required.",
+ "proxy-port-range": "Proxy port should be in a range from 1 to 65535.",
+ "proxy-user": "Proxy user",
+ "proxy-password": "Proxy password",
"send-test-mail": "Send test mail",
"security-settings": "Security settings",
"password-policy": "Password policy",
diff --git a/ui-ngx/src/assets/locale/locale.constant-es_ES.json b/ui-ngx/src/assets/locale/locale.constant-es_ES.json
index 4d631a1028..17966569af 100644
--- a/ui-ngx/src/assets/locale/locale.constant-es_ES.json
+++ b/ui-ngx/src/assets/locale/locale.constant-es_ES.json
@@ -2,20 +2,20 @@
"access": {
"unauthorized": "No autorizado",
"unauthorized-access": "Acceso no autorizado",
- "unauthorized-access-text": "¡Debe registrarse para tener acceso a este recurso!",
+ "unauthorized-access-text": "Debes iniciar sesión para tener acceso a este recurso!",
"access-forbidden": "Acceso Prohibido",
- "access-forbidden-text": "No tiene permisos para acceder a esta ubicación! Intente registrarse con otro usuario si aún desea acceder a esta ubicación.",
+ "access-forbidden-text": "No tienes derechos para acceder a esta ubicación! Intenta iniciar sesión con otro usuario si todavía quieres acceder a esta ubicación.",
"refresh-token-expired": "La sesión ha expirado",
"refresh-token-failed": "No se puede actualizar la sesión"
},
"action": {
- "activate": "Activar",
+ "activate": "Activar",
"suspend": "Suspender",
"save": "Guardar",
"saveAs": "Guardar como",
"cancel": "Cancelar",
- "ok": "Aceptar",
- "delete": "Eliminar",
+ "ok": "OK",
+ "delete": "Borrar",
"add": "Agregar",
"yes": "Si",
"no": "No",
@@ -29,13 +29,13 @@
"make-private": "Hacer privado",
"apply": "Aplicar",
"apply-changes": "Aplicar cambios",
- "edit-mode": "Modo edición",
- "enter-edit-mode": "Entrar en modo edición",
+ "edit-mode": "Modo Edición",
+ "enter-edit-mode": "Modo Edición",
"decline-changes": "Descartar cambios",
"close": "Cerrar",
"back": "Atrás",
"run": "Ejecutar",
- "sign-in": "¡Registrarse!",
+ "sign-in": "Entrar!",
"edit": "Editar",
"view": "Ver",
"create": "Crear",
@@ -50,13 +50,14 @@
"export": "Exportar",
"share-via": "Compartir vía {{provider}}",
"discard-changes": "Cancelar los cambios",
- "continue": "Continuar"
+ "continue": "Continuar",
+ "download": "Descargar"
},
"aggregation": {
"aggregation": "Agregación",
- "function": "Función de agregación de datos",
- "limit": "Valores máximos",
- "group-interval": "Intervalo de agrupamiento",
+ "function": "Función de Agregación",
+ "limit": "Valores Max",
+ "group-interval": "Intervalo de agrupación",
"min": "Min",
"max": "Max",
"avg": "Promedio",
@@ -69,21 +70,21 @@
"general-settings": "Configuración general",
"outgoing-mail": "Servidor de correo",
"outgoing-mail-settings": "Configuración del servidor de correo de salida",
- "system-settings": "Configuración del sistema",
- "test-mail-sent": "¡El correo de prueba fue enviado correctamente!",
- "base-url": "URL base",
- "base-url-required": "URL base es requerida.",
- "mail-from": "Correo desde",
- "mail-from-required": "Correo desde es requerido.",
+ "system-settings": "Sistema",
+ "test-mail-sent": "Mail de prueba enviado correctamente!",
+ "base-url": "URL Base",
+ "base-url-required": "URL Base requerida.",
+ "mail-from": "Mail Desde",
+ "mail-from-required": "Mail Desde requerido.",
"smtp-protocol": "Protocolo SMTP",
"smtp-host": "Host SMTP",
- "smtp-host-required": "Host SMTP es requerido.",
+ "smtp-host-required": "Host SMTP requerido.",
"smtp-port": "Puerto SMTP",
- "smtp-port-required": "Debe suministrar un puerto SMTP",
- "smtp-port-invalid": "Eso no parece un puerto SMTP válido.",
- "timeout-msec": "Tiempo de espera (ms)",
- "timeout-required": "Tiempo de espera es requerido.",
- "timeout-invalid": "Eso no parece un tiempo de espera válido.",
+ "smtp-port-required": "Debe ingresar un Puerto SMTP.",
+ "smtp-port-invalid": "No parece un Puerto SMTP valido.",
+ "timeout-msec": "Timeout (ms)",
+ "timeout-required": "Timeout requerido.",
+ "timeout-invalid": "No parece un Timeout valido.",
"enable-tls": "Habilitar TLS",
"tls-version": "Versión TLS",
"send-test-mail": "Enviar correo de prueba",
@@ -113,9 +114,9 @@
"alarm": "Alarma",
"alarms": "Alarmas",
"select-alarm": "Seleccionar alarma",
- "no-alarms-matching": "Alarmas que coincidan con '{{entity}}' no fueron encontradas.",
- "alarm-required": "Alarma es requerida",
- "alarm-status": "Estado de la alarma",
+ "no-alarms-matching": "No se han encontrado alarmas coincidentes con '{{entity}}' .",
+ "alarm-required": "Alarma requerida",
+ "alarm-status": "Estado de Alarma",
"search-status": {
"ANY": "Todas",
"ACTIVE": "Activas",
@@ -124,153 +125,160 @@
"UNACK": "Ignoradas"
},
"display-status": {
- "ACTIVE_UNACK": "Activa ignorada",
- "ACTIVE_ACK": "Activa reconocida",
- "CLEARED_UNACK": "Borrada ignorada",
- "CLEARED_ACK": "Borrada reconocida"
+ "ACTIVE_UNACK": "Activa No reconocida",
+ "ACTIVE_ACK": "Activa Reconocida",
+ "CLEARED_UNACK": "Normalizada no reconocida",
+ "CLEARED_ACK": "Normalizada reconocida"
},
"no-alarms-prompt": "No se encontraron alarmas",
- "created-time": "Tiempo de creación",
+ "created-time": "Hora de creación",
"type": "Tipo",
- "severity": "Criticidad",
+ "severity": "Gravedad",
"originator": "Origen",
"originator-type": "Tipo de origen",
"details": "Detalles",
"status": "Estado",
- "alarm-details": "Detalles de la alarma",
- "start-time": "Tiempo de inicio",
- "end-time": "Tiempo de finalización",
- "ack-time": "Tiempo de reconocimiento",
- "clear-time": "Tiempo de borrado",
+ "alarm-details": "Detalles Alarma",
+ "start-time": "Hora de inicio",
+ "end-time": "Hora fin",
+ "ack-time": "Hora de reconocimiento",
+ "clear-time": "Hora de normalización",
"severity-critical": "Crítica",
- "severity-major": "Alta",
- "severity-minor": "Baja",
- "severity-warning": "Alerta",
+ "severity-major": "Mayor",
+ "severity-minor": "Menor",
+ "severity-warning": "Peligro",
"severity-indeterminate": "Indeterminada",
"acknowledge": "Reconocer",
- "clear": "Borrar",
- "search": "buscar alarmas",
+ "clear": "Normalizar",
+ "search": "Buscar alarmas",
"selected-alarms": "{ count, plural, 1 {1 alarma} other {# alarmas} } seleccionadas",
- "no-data": "No hay datos para mostrar",
- "polling-interval": "Intervalo de sondeo de alarmas (seg)",
- "polling-interval-required": "Intervalo de sondeo de alarmas es requerido.",
- "min-polling-interval-message": "Se permite al menos 1 segundo de intervalo de sondeo.",
+ "no-data": "Sin datos que mostrar",
+ "polling-interval": "Ciclo de refresco de alarmas (seg)",
+ "polling-interval-required": "Se requiere un ciclo de refresco válido.",
+ "min-polling-interval-message": "El ciclo debe ser por lo menos de 1 segundo.",
"aknowledge-alarms-title": "Reconocer { count, plural, 1 {1 alarma} other {# alarmas} }",
- "aknowledge-alarms-text": "¿Está seguro de que desea reconocer { count, plural, 1 {1 alarma} other {# alarmas} }?",
- "aknowledge-alarm-title": "Reconocer alarma",
- "aknowledge-alarm-text": "¿Está seguro que quiere reconocer la alarma?",
- "clear-alarms-title": "Quitar { count, plural, 1 {1 alarma} other {# alarmas} }",
- "clear-alarms-text": "¿Está seguro de que desea quitar { count, plural, 1 {1 alarma} other {# alarmas} }?",
- "clear-alarm-title": "Quitar alarma",
- "clear-alarm-text": "¿Está seguro que quiere quitar la alarma?",
- "alarm-status-filter": "Filtro de estado de alarma"
+ "aknowledge-alarms-text": "Estas seguro de reconocer { count, plural, 1 {1 alarma} other {# alarmas} }?",
+ "aknowledge-alarm-title": "Recononcer Alarma",
+ "aknowledge-alarm-text": "Estas seguro de reconocer Alarma?",
+ "clear-alarms-title": "Normalizar { count, plural, 1 {1 alarma} other {# alarmas} }",
+ "clear-alarms-text": "Estás seguro de limpiar { count, plural, 1 {1 alarma} other {# alarmas} }?",
+ "clear-alarm-title": "Limpiar Alarma",
+ "clear-alarm-text": "Estás seguro de limpiar Alarma?",
+ "alarm-status-filter": "Filtro de Alarmas",
+ "max-count-load": "Número máximo de alarmas a cargar (0 - ilimitado)",
+ "max-count-load-required": "Se requiere número máximo de alarmas.",
+ "max-count-load-error-min": "El valor mínimo es 0.",
+ "fetch-size": "Tamaño de búsqueda (Fetch)",
+ "fetch-size-required": "Se requiere tamaño de búsqueda.",
+ "fetch-size-error-min": "El valor mínimo es 10."
},
"alias": {
- "add": "Agregar alias",
+ "add": "Añadir alias",
"edit": "Editar alias",
- "name": "Nombre de alias",
- "name-required": "Nombre de alias es requerido",
- "duplicate-alias": "Ya existe un alias con el mismo nombre.",
- "filter-type-single-entity": "Entidad única",
+ "name": "Nombre de Alias",
+ "name-required": "Se requiere nombre de alias",
+ "duplicate-alias": "Ya existe ese nombre de alias.",
+ "filter-type-single-entity": "Única entidad",
"filter-type-entity-list": "Lista de entidades",
"filter-type-entity-name": "Nombre de entidad",
- "filter-type-state-entity": "Entidad del panel de estados",
- "filter-type-state-entity-description": "Entidad tomada desde los parámetros del panel de estados",
+ "filter-type-state-entity": "Entidad desde estado de panel",
+ "filter-type-state-entity-description": "Entidad tomada de los parámetros de panel",
"filter-type-asset-type": "Tipo de activo",
- "filter-type-asset-type-description": "Activos de tipo '{{assetType}}'",
- "filter-type-asset-type-and-name-description": "Activos del tipo '{{assetType}}' y su nombre empieza con '{{prefix}}'",
+ "filter-type-asset-type-description": "Activos del tipo '{{assetType}}'",
+ "filter-type-asset-type-and-name-description": "Activos del tipo '{{assetType}}' y cuyo nombre comience por '{{prefix}}'",
"filter-type-device-type": "Tipo de dispositivo",
"filter-type-device-type-description": "Dispositivos de tipo '{{deviceType}}'",
- "filter-type-device-type-and-name-description": "Dispositivos del tipo '{{deviceType}}' y su nombre empieza con '{{prefix}}'",
+ "filter-type-device-type-and-name-description": "Dispositivos de tipo '{{deviceType}}' y cuyo nombre comience por '{{prefix}}'",
"filter-type-entity-view-type": "Tipo de vista de entidad",
- "filter-type-entity-view-type-description": "Vista de entidad del tipo '{{entityView}}'",
- "filter-type-entity-view-type-and-name-description": "Las vista de entidad del tipo '{{entityView}}' y cuyo nombre comienza con '{{prefix}}'",
+ "filter-type-entity-view-type-description": "Vistas de entidad del tipo '{{entityView}}'",
+ "filter-type-entity-view-type-and-name-description": "Vistas de entidad del tipo '{{entityView}}' y cuyo nombre comience por '{{prefix}}'",
"filter-type-relations-query": "Consulta de relaciones",
"filter-type-relations-query-description": "{{entities}} que tienen {{relationType}} relación {{direction}} {{rootEntity}}",
- "filter-type-asset-search-query": "Consultar búsqueda de activos",
+ "filter-type-asset-search-query": "Búsqueda de activos",
"filter-type-asset-search-query-description": "Activos con tipos {{assetTypes}} que tienen {{relationType}} relación {{direction}} {{rootEntity}}",
- "filter-type-device-search-query": "Consultar búqueda de dispositivos",
+ "filter-type-device-search-query": "Búsqueda de dispositivos",
"filter-type-device-search-query-description": "Dispositivos con tipos {{deviceTypes}} que tienen {{relationType}} relación {{direction}} {{rootEntity}}",
- "filter-type-entity-view-search-query": "Consultar vista de entidad",
- "filter-type-entity-view-search-query-description": "Las vista de entidad de tipo {{entityViewTypes}} que tienen {{relationType}} relación {{direction}} {{rootEntity}}",
- "entity-filter": "Filtro de entidad",
- "resolve-multiple": "Resolver como entidades múltiples",
- "filter-type": "Tipo de filtro",
- "filter-type-required": "Tipo de filtro es requerido.",
- "entity-filter-no-entity-matched": "No se encontraron entidades que coincidan con el filtro especificado.",
- "no-entity-filter-specified": "No se especificó el filtro de entidad",
- "root-state-entity": "Utilizar la entidad del panel de estados como raíz",
- "root-entity": "Entidad raíz",
+ "filter-type-entity-view-search-query": "Consulta de búsqueda de vista de entidad",
+ "filter-type-entity-view-search-query-description": "Vistas de entidad con tipos {{entityViewTypes}} que tienen tipo de relación {{relationType}} con dirección {{direction}} {{rootEntity}}",
+ "entity-filter": "Filtro por entidad",
+ "resolve-multiple": "Tomar como múltiples entidades",
+ "filter-type": "Filtro por tipo",
+ "filter-type-required": "Se requiere filtro por tipo.",
+ "entity-filter-no-entity-matched": "No se han encontrado entidades con el filtro especificado.",
+ "no-entity-filter-specified": "No hay filtro de entidades especificado",
+ "root-state-entity": "Usar estado de panel como raíz",
+ "last-level-relation": "Buscar sólo la relación de último nivel",
+ "root-entity": "Entidad raiz",
"state-entity-parameter-name": "Nombre de parámetro de entidad de estado",
"default-state-entity": "Entidad de estado predeterminada",
"default-entity-parameter-name": "Por defecto",
- "max-relation-level": "Nivel máximo de relación",
+ "max-relation-level": "Máx nivel de relación",
"unlimited-level": "Nivel ilimitado",
- "state-entity": "Entidad del panel de estados",
+ "state-entity": "Entidad estado del panel",
"all-entities": "Todas las entidades",
- "any-relation": "alguna"
+ "any-relation": "cualquiera"
},
"asset": {
"asset": "Activo",
"assets": "Activos",
- "management": "Gestión de activos",
- "view-assets": "Ver activos",
- "add": "Agregar activo",
- "assign-to-customer": "Asignar al cliente",
- "assign-asset-to-customer": "Asignar activo(s) al cliente",
- "assign-asset-to-customer-text": "Por favor, seleccione los activos para asignar al cliente",
+ "management": "Gestión de Activos",
+ "view-assets": "Ver Activos",
+ "add": "Añadir Activo",
+ "assign-to-customer": "Asignar a cliente",
+ "assign-asset-to-customer": "Asignar Activo(s) A Cliente",
+ "assign-asset-to-customer-text": "Selecciona los activos a asignar al cliente",
"no-assets-text": "No se encontraron activos",
- "assign-to-customer-text": "Por favor, seleccione el cliente para asignar el(los) activo(s)",
+ "assign-to-customer-text": "Selecciona el cliente al que asignar los activos",
"public": "Público",
- "assignedToCustomer": "Asignado al cliente",
- "make-public": "Hacer público el activo",
- "make-private": "Hacer privado el activo",
- "unassign-from-customer": "Anular asignación del cliente",
- "delete": "Eliminar activo",
+ "assignedToCustomer": "Asignado a cliente",
+ "make-public": "Hacer activo público",
+ "make-private": "Hacer activo privado",
+ "unassign-from-customer": "Cancelar la asignación de activo del cliente",
+ "delete": "Borrar activo",
"asset-public": "El activo es público",
"asset-type": "Tipo de activo",
- "asset-type-required": "El tipo de activo es requerido.",
- "select-asset-type": "Seleccionar tipo de activo",
- "enter-asset-type": "Introduzca el tipo de activo",
- "any-asset": "Algún activo",
- "no-asset-types-matching": "No se encontraron tipos de activos que coincidan con '{{entitySubtype}}'.",
- "asset-type-list-empty": "No se seleccionaron tipos de activos.",
- "asset-types": "Tipos de activos",
+ "asset-type-required": "Se requiere tipo de activo.",
+ "select-asset-type": "Selecciona tipo de activo",
+ "enter-asset-type": "Entrar tipo de activo",
+ "any-asset": "Cualquier activo",
+ "no-asset-types-matching": "No se han encontrado activos coincidiendo con '{{entitySubtype}}' .",
+ "asset-type-list-empty": "No hay ningun tipo de activo seleccionado.",
+ "asset-types": "Tipos de activo",
"name": "Nombre",
- "name-required": "El nombre es requerido.",
+ "name-required": "Nombre requerido.",
"description": "Descripción",
"type": "Tipo",
- "type-required": "El tipo es requerido.",
+ "type-required": "Tipo requerido.",
"details": "Detalles",
"events": "Eventos",
- "add-asset-text": "Agregar nuevo activo",
- "asset-details": "Detalles del activo",
+ "add-asset-text": "Añadir nuevo activo",
+ "asset-details": "Detalles de activo",
"assign-assets": "Asignar activos",
- "assign-assets-text": "Asignar { count, plural, 1 {1 activo} other {# activos} } al cliente",
- "delete-assets": "Eliminar activos",
- "unassign-assets": "Anular asignación de activos",
- "unassign-assets-action-title": "Anular asignación { count, plural, 1 {1 activo} other {# activos} } del cliente",
+ "assign-assets-text": "Asignar { count, plural, 1 {1 activo} other {# activos} } a cliente",
+ "delete-assets": "Borrar activos",
+ "unassign-assets": "Cancelar asignación de activo",
+ "unassign-assets-action-title": "Cancelar asignación de { count, plural, 1 {1 activo} other {# activos} } del cliente",
"assign-new-asset": "Asignar nuevo activo",
- "delete-asset-title": "¿Está seguro de que desea eliminar el activo '{{assetName}}'?",
- "delete-asset-text": "¡Cuidado! Después de la confirmación, el activo y todos los datos relacionados serán irrecuperables.",
- "delete-assets-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 activos} other {# activos} }?",
- "delete-assets-action-title": "Eliminar { count, plural, 1 {1 activo} other {# activos} }",
- "delete-assets-text": "¡Cuidado! Después de la confirmación se eliminarán todos los activos seleccionados y todos los datos relacionados serán irrecuperables.",
- "make-public-asset-title": "¿Está seguro de que desea que el activo '{{assetName}}' sea público?",
- "make-public-asset-text": "Después de la confirmación, el activo y todos sus datos se harán públicos y accesibles por otros.",
- "make-private-asset-title": "¿Está seguro de que desea que el activo '{{assetName}}' sea privado?",
- "make-private-asset-text": "Después de la confirmación, el activo y todos sus datos se harán privados y no serán accesibles para otros",
- "unassign-asset-title": "¿Está seguro de que desea anular asignación del activo '{{assetName}}'?",
- "unassign-asset-text": "Después de la confirmación, se anulará asignación del activo y no será accesible por el cliente.",
- "unassign-asset": "Anular asignación activo",
- "unassign-assets-title": "¿Está seguro de que desea anular asignación { count, plural, 1 {1 activo} other {# activos} }?",
- "unassign-assets-text": "Después de la confirmación, se anulará asignación de todos los activos seleccionados y no serán accesibles por el cliente",
- "copyId": "Copiar ID del activo",
- "idCopiedMessage": "ID del activo has sido copiada al portapapeles",
+ "delete-asset-title": "Estás seguro de borrar el activo '{{assetName}}'?",
+ "delete-asset-text": "Atención, tras la confirmación el activo y sus datos serán borrados e irrecuperables.",
+ "delete-assets-title": "Estás seguro de borrar los activos { count, plural, 1 {1 activo} other {# activos} }?",
+ "delete-assets-action-title": "Borrar { count, plural, 1 {1 activo} other {# activos} }",
+ "delete-assets-text": "Atención, tras la confirmación todos los activos seleccionados y sus datos serán borrados e irrecuperables.",
+ "make-public-asset-title": "Estás seguro de hacer el activo '{{assetName}}' público?",
+ "make-public-asset-text": "Tras la confirmación, el activo y sus datos se harán públicos y accesibles por otros.",
+ "make-private-asset-title": "Estás seguro de hacer el activo '{{assetName}}' privado?",
+ "make-private-asset-text": "Tras la confirmación, el activo y sus datos se harán privados y no serán accesibles por otros.",
+ "unassign-asset-title": "Estás seguro de cancelar la asignación del activo '{{assetName}}'?",
+ "unassign-asset-text": "Tras la confirmación, el activo será desasignado y no será accesible por el cliente.",
+ "unassign-asset": "Cancelar asignación de activo",
+ "unassign-assets-title": "Estás seguro de cancelar las asignaciones { count, plural, 1 {1 activo} other {# activos} }?",
+ "unassign-assets-text": "Tras la confirmación todos los activos seleccionados serán desasignados y no serán accesibles por el cliente.",
+ "copyId": "Copiar ID de activo",
+ "idCopiedMessage": "El ID ha sido copiado al portapapeles",
"select-asset": "Seleccionar activo",
- "no-assets-matching": "No se encontraron activos que coincidan con '{{entity}}'.",
- "asset-required": "El activo es requerido",
- "name-starts-with": "El nombre del activo comienza con",
+ "no-assets-matching": "No se han encontrado activos que coincidan con '{{entity}}' .",
+ "asset-required": "Nombre de activo requerido",
+ "name-starts-with": "El nombre de activo comienza con",
"import": "Importar activos",
"asset-file": "Archivo del activo",
"label": "Etiqueta"
@@ -278,63 +286,63 @@
"attribute": {
"attributes": "Atributos",
"latest-telemetry": "Última telemetría",
- "attributes-scope": "Alcance de los atributos de la entidad",
+ "attributes-scope": "Alcance de los atributos del dispositivo",
"scope-latest-telemetry": "Última telemetría",
- "scope-client": "Atributos del cliente",
- "scope-server": "Atributos del servidor",
- "scope-shared": "Atributos compartidos",
- "add": "Agregar atributos",
+ "scope-client": "Atributos de Cliente",
+ "scope-server": "Atributos de Servidor",
+ "scope-shared": "Atributos Compartidos",
+ "add": "Agregar atributo",
"key": "Clave",
- "last-update-time": "Hora de la última actualización",
- "key-required": "La clave del aributo es requerida.",
+ "last-update-time": "Hora de última actualización",
+ "key-required": "Clave del atributo requerida.",
"value": "Valor",
- "value-required": "Valor del atributo es requerido.",
- "delete-attributes-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 atributo} other {# atributos} }?",
- "delete-attributes-text": "¡Cuidado! Después de la confirmación, se eliminarán todos los atributos seleccionados.",
- "delete-attributes": "Eliminar atributos",
- "enter-attribute-value": "Introduzca el valor del atributo",
- "show-on-widget": "Mostrar en widget",
- "widget-mode": "Modo widget",
+ "value-required": "Valor del atributo requerido.",
+ "delete-attributes-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 atributo} other {# atributos} }?",
+ "delete-attributes-text": "Atención, tras la confirmación el atributo será eliminado, y la información relacionada será irrecuperable.",
+ "delete-attributes": "Borrar atributo",
+ "enter-attribute-value": "Ingresar valor del atributo",
+ "show-on-widget": "Mostrar en Widget",
+ "widget-mode": "Widget",
"next-widget": "Widget siguiente",
- "prev-widget": "Widget previo",
- "add-to-dashboard": "Agregar al panel",
- "add-widget-to-dashboard": "Agregar widget al panel",
+ "prev-widget": "Widget anterior",
+ "add-to-dashboard": "Agregar al Panel",
+ "add-widget-to-dashboard": "Agregar widget al Panel",
"selected-attributes": "{ count, plural, 1 {1 atributo} other {# atributos} } seleccionados",
- "selected-telemetry": "{ count, plural, 1 {1 telemetry unit} other {# telemetry units} } seleccionadas"
+ "selected-telemetry": "{ count, plural, 1 {1 telemetría} other {# telemetrías} } seleccionadas"
},
"audit-log": {
"audit": "Auditoría",
- "audit-logs": "Registros de auditoría",
- "timestamp": "Marca de tiempo",
- "entity-type": "Tipo de entidad",
- "entity-name": "Nombre de entidad",
+ "audit-logs": "Registro Auditoría",
+ "timestamp": "Timestamp",
+ "entity-type": "Tipo Entidad",
+ "entity-name": "Nombre Entidad",
"user": "Usuario",
"type": "Tipo",
"status": "Estado",
"details": "Detalles",
- "type-added": "Agregado",
- "type-deleted": "Eliminado",
+ "type-added": "Añadido",
+ "type-deleted": "Borrado",
"type-updated": "Actualizado",
"type-attributes-updated": "Atributos actualizados",
- "type-attributes-deleted": "Atributos eliminados",
+ "type-attributes-deleted": "Atributos borrados",
"type-rpc-call": "Llamada RPC",
- "type-credentials-updated": "Credenciales actualizadas",
- "type-assigned-to-customer": "Asignado al cliente",
- "type-unassigned-from-customer": "Asignación anulada del cliente",
+ "type-credentials-updated": "Credenciales actualizados",
+ "type-assigned-to-customer": "Asignado a Cliente",
+ "type-unassigned-from-customer": "Deasignado a Cliente",
"type-activated": "Activado",
"type-suspended": "Suspendido",
- "type-credentials-read": "Credenciales leídas",
- "type-attributes-read": "Atributos leídos",
+ "type-credentials-read": "Lectura de credenciales",
+ "type-attributes-read": "Lectura de atributos",
"type-relation-add-or-update": "Relación actualizada",
- "type-relation-delete": "Relación eliminada",
- "type-relations-delete": "Toda relación eliminada",
- "type-alarm-ack": "Reconocida",
- "type-alarm-clear": "Borrada",
+ "type-relation-delete": "Relación borrada",
+ "type-relations-delete": "Borradas todas las relaciones",
+ "type-alarm-ack": "Alarma Acusada",
+ "type-alarm-clear": "Alarma Limpiada",
"type-login": "Inicio de sesión",
"type-logout": "Cierre de sesión",
- "type-lockout": "Cierre patronal",
- "status-success": "Correcto",
- "status-failure": "Erróneo",
+ "type-lockout": "Cierre por bloqueo",
+ "status-success": "Éxito",
+ "status-failure": "Fallo",
"audit-log-details": "Detalle del registro de auditoría",
"no-audit-logs-prompt": "No se encontraron registros",
"action-data": "Datos de acción",
@@ -343,8 +351,8 @@
"clear-search": "Borrar búsqueda"
},
"confirm-on-exit": {
- "message": "Tiene cambios sin guardar. ¿Está seguro de que desea salir de esta página?",
- "html-message": "Tiene cambios sin guardar. ¿Está seguro de que desea salir de esta página?",
+ "message": "Tienes cambios sin guardar. ¿Estás seguro que quieres abandonar la página?",
+ "html-message": "Tienes cambios sin guardar. ¿Estás seguro que quieres abandonar la página?",
"title": "Cambios sin guardar"
},
"contact": {
@@ -356,16 +364,15 @@
"address": "Dirección",
"address2": "Dirección 2",
"phone": "Teléfono",
- "email": "Correo Electrónico",
- "no-address": "Sin dirección"
+ "email": "Email",
+ "no-address": "Sin Dirección"
},
"common": {
- "username": "Nombre de usuario",
+ "username": "Usuario",
"password": "Contraseña",
- "enter-username": "Introduzca nombre de usuario",
- "enter-password": "Introduzca contraseña",
- "enter-search": "Introduzca búsqueda",
- "created-time": "Tiempo de creación"
+ "enter-username": "Introduce el nombre de usuario.",
+ "enter-password": "Introduce la contraseña",
+ "enter-search": "Introduce búsqueda"
},
"content-type": {
"json": "Json",
@@ -375,18 +382,18 @@
"customer": {
"customer": "Cliente",
"customers": "Clientes",
- "management": "Gestión del cliente",
- "dashboard": "Panel del cliente",
- "dashboards": "Paneles del cliente",
+ "management": "Gestión de Clientes",
+ "dashboard": "Panel del Cliente",
+ "dashboards": "Paneles del Cliente",
"devices": "Dispositivos del cliente",
- "entity-views": "Vistas de entidad del cliente",
- "assets": "Activos del Cliente",
- "public-dashboards": "Paneles públicos",
- "public-devices": "Dispositivos públicos",
- "public-assets": "Activos públicos",
- "public-entity-views": "Vista de entidad públicas",
+ "entity-views": "Vistas de Entidad del cliente",
+ "assets": "Activos de Cliente",
+ "public-dashboards": "Paneles Públicos",
+ "public-devices": "Dispositivos Públicos",
+ "public-assets": "Activos Públicos",
+ "public-entity-views": "Vistas de Entidad Públicas",
"add": "Agregar cliente",
- "delete": "Eliminar cliente",
+ "delete": "Borrar cliente",
"manage-customer-users": "Gestionar usuarios del cliente",
"manage-customer-devices": "Gestionar dispositivos del cliente",
"manage-customer-dashboards": "Gestionar paneles del cliente",
@@ -397,304 +404,306 @@
"add-customer-text": "Agregar nuevo cliente",
"no-customers-text": "No se encontraron clientes",
"customer-details": "Detalles del cliente",
- "delete-customer-title": "¿Está seguro de que desea eliminar al cliente '{{customerTitle}}'?",
- "delete-customer-text": "¡Cuidado! Después de la confirmación, el cliente y todos los datos relacionados serán irrecuperables.",
- "delete-customers-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 cliente} other {# clientes} }?",
- "delete-customers-action-title": "Eliminar { count, plural, 1 {1 cliente} other {# clientes} }",
- "delete-customers-text": "¡Cuidado! Después de la confirmación, todos los clientes seleccionados serán eliminados y todos los datos relacionados serán irrecuperables.",
+ "delete-customer-title": "¿Estás seguro que quieres eliminar el cliente '{{customerTitle}}'?",
+ "delete-customer-text": "Atención, tras la confirmación el cliente será eliminado y toda la información relacionada será irrecuperable.",
+ "delete-customers-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 cliente} other {# clientes} }?",
+ "delete-customers-action-title": "Borrar { count, plural, 1 {1 cliente} other {# clientes} }",
+ "delete-customers-text": "Atención, tras la confirmación todos los clientes seleccionados serán eliminados y su información relacionada será irrecuperable.",
"manage-users": "Gestionar usuarios",
"manage-assets": "Gestionar activos",
"manage-devices": "Gestionar dispositivos",
"manage-dashboards": "Gestionar paneles",
"title": "Título",
- "title-required": "El título es requerido.",
+ "title-required": "Título requerido.",
"description": "Descripción",
"details": "Detalles",
"events": "Eventos",
- "copyId": "Copiar ID del cliente",
- "idCopiedMessage": "ID del cliente ha sido copiada al portapapeles",
- "select-customer": "Seleccionar cliente",
- "no-customers-matching": "No se encontraron clientes que coincidan con '{{entity}}'.",
- "customer-required": "El cliente es requerido",
- "select-default-customer": "Seleccionar cliente predeterminado",
- "default-customer": "Cliente predeterminado",
- "default-customer-required": "Cliente predeterminado es requerido para depurar el panel en el nivel Organización"
+ "copyId": "Copiar ID de cliente",
+ "idCopiedMessage": "El ID de cliente se ha copiado al portapapeles",
+ "select-customer": "Seleccionar Cliente",
+ "no-customers-matching": "No se han encontrado clientes que coincidan con '{{entity}}' .",
+ "customer-required": "Cliente requerido",
+ "select-default-customer": "Seleccionar cliente por defecto",
+ "default-customer": "Cliente por defecto",
+ "default-customer-required": "Se requiere cliente por defecto para realizar debug a nivel de propietario"
},
"datetime": {
"date-from": "Fecha desde",
- "time-from": "Tiempo desde",
+ "time-from": "Hora desde",
"date-to": "Fecha hasta",
- "time-to": "Tiempo hasta"
+ "time-to": "Hora hasta"
},
"dashboard": {
"dashboard": "Panel",
"dashboards": "Paneles",
- "management": "Gestión del panel",
- "view-dashboards": "Ver panel",
- "add": "Agregar paneles",
- "assign-dashboard-to-customer": "Asignar panel(es) al cliente",
- "assign-dashboard-to-customer-text": "Por favor selecciona los paneles para asignar al cliente",
- "assign-to-customer-text": "Por favor selecciona el cliente para asignar el(los) panel(es)",
- "assign-to-customer": "Asignar al cliente",
- "unassign-from-customer": "Anular asignación del cliente",
+ "management": "Gestión de Paneles",
+ "view-dashboards": "Ver Paneles",
+ "add": "Agregar Panel",
+ "assign-dashboard-to-customer": "Asignar panel(es) a cliente",
+ "assign-dashboard-to-customer-text": "Por favor, seleccione algún panel para asignar al Cliente.",
+ "assign-to-customer-text": "Por favor, seleccione algún cliente para asignar al(los) panel(es).",
+ "assign-to-customer": "Asignar a cliente",
+ "unassign-from-customer": "Desasignar del cliente",
"make-public": "Hacer panel público",
"make-private": "Hacer panel privado",
- "manage-assigned-customers": "Gestionar clientes asignados",
+ "manage-assigned-customers": "Administrar clientes asignados",
"assigned-customers": "Clientes asignados",
- "assign-to-customers": "Asignar panel(es) al(los) cliente(s)",
- "assign-to-customers-text": "Por favor seleccionar los clientes para asignar el(los) panel(es)",
- "unassign-from-customers": "Anular asignación del(de los) panel(es) de los clientes",
- "unassign-from-customers-text": "Por favor selecciona los clientes para anular asignación del(de los) panel(es)",
- "no-dashboards-text": "No se encontraron paneles",
- "no-widgets": "Sin widgets configurados",
+ "assign-to-customers": "Asignar Panel / Paneles a Clientes",
+ "assign-to-customers-text": "Selecciona los clientes para asignar los paneles",
+ "unassign-from-customers": "Desasignar Panel / Paneles de clientes",
+ "unassign-from-customers-text": "Selecciona los clientes para desasignar los paneles",
+ "no-dashboards-text": "Ningún panel encontrado",
+ "no-widgets": "Ningún widget configurado",
"add-widget": "Agregar nuevo widget",
"title": "Título",
"select-widget-title": "Seleccionar widget",
- "select-widget-subtitle": "Lista de tipos de widget disponibles",
+ "select-widget-subtitle": "Lista de tipos de widgets disponibles",
"delete": "Eliminar panel",
- "title-required": "El título es requerido.",
+ "title-required": "Título requerido.",
"description": "Descripción",
"details": "Detalles",
"dashboard-details": "Detalles del panel",
"add-dashboard-text": "Agregar nuevo panel",
"assign-dashboards": "Asignar paneles",
"assign-new-dashboard": "Asignar nuevo panel",
- "assign-dashboards-text": "Asignar { count, plural, 1 {1 panel} other {# paneles} } a los clientes",
- "unassign-dashboards-action-text": "Anular asignación { count, plural, 1 {1 dashboard} other {# dashboards} } de los clientes",
+ "assign-dashboards-text": "Asignar { count, plural, 1 {1 panel} other {# paneles} } al cliente",
+ "unassign-dashboards-action-text": "Desasignar { count, plural, 1 {1 panel} other {# paneles} } a los clientes",
"delete-dashboards": "Eliminar paneles",
- "unassign-dashboards": "Anular asignación de paneles",
- "unassign-dashboards-action-title": "Anular asignación { count, plural, 1 {1 panel} other {# paneles} } del cliente",
- "delete-dashboard-title": "¿Está seguro de que desea eliminar el panel '{{dashboardTitle}}'?",
- "delete-dashboard-text": "¡Cuidado! Después de la confirmación, el panel y todos los datos relacionados serán irrecuperables.",
- "delete-dashboards-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 dashboard} other {# dashboards} }?",
- "delete-dashboards-action-title": "Eliminar { count, plural, 1 {1 dashboard} other {# dashboards} }",
- "delete-dashboards-text": "¡Cuidado! Después de la confirmación, todos los paneles seleccionados serán eliminados y todos los datos relacionados serán irrecuperables.",
- "unassign-dashboard-title": "¿Está seguro de que desea anular la asignación del panel '{{dashboardTitle}}'?",
- "unassign-dashboard-text": "Después de la confirmación, se anulará la asignación del panel y no será accesible por el cliente.",
- "unassign-dashboard": "Anular asignación del panel",
- "unassign-dashboards-title": "¿Está seguro de que desea anular asignación { count, plural, 1 {1 panel} other {# paneles} }?",
- "unassign-dashboards-text": "Después de la confirmación, se anulará la asignación de todos los paneles seleccionados y no serán accesibles por el cliente.",
- "public-dashboard-title": "El panel es ahora público",
- "public-dashboard-text": "Su panel {{dashboardTitle}} es ahora público y es accesible a través del siguiente enlace público :",
- "public-dashboard-notice": "Nota No olvide hacer públicos los dispositivos relacionados para acceder a sus datos.",
- "make-private-dashboard-title": "¿Está seguro de que desea hacer el panel '{{dashboardTitle}}' privado?",
- "make-private-dashboard-text": "Después de la confirmación el panel se hará privado y no será accesible por otros.",
- "make-private-dashboard": "Hacer el panel privado",
- "socialshare-text": "'{{dashboardTitle}}' desarrollado por ThingsBoard.",
- "socialshare-title": "'{{dashboardTitle}}' desarrollado por ThingsBoard",
+ "unassign-dashboards": "Desasignar paneles",
+ "unassign-dashboards-action-title": "Desasignar { count, plural, 1 {1 paneles} other {# paneles} } del cliente",
+ "delete-dashboard-title": "¿Estás seguro que quieres eliminar el panel '{{dashboardTitle}}'?",
+ "delete-dashboard-text": "Atención, el panel seleccionado será eliminado y la información relacionada sera irrecuperable.",
+ "delete-dashboards-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 panel} other {# paneles} }?",
+ "delete-dashboards-action-title": "Eliminar { count, plural, 1 {1 panel} other {# paneles} }",
+ "delete-dashboards-text": "Atención, los paneles seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "unassign-dashboard-title": "¿Estás seguro que quieres desasignar el panel '{{dashboardTitle}}'?",
+ "unassign-dashboard-text": "Tras la confirmación, el panel será desasignado y no podrá ser accesible por el cliente.",
+ "unassign-dashboard": "Desasignar panel",
+ "unassign-dashboards-title": "¿Estás seguro que quieres desasignar { count, plural, 1 {1 panel} other {# paneles} }?",
+ "unassign-dashboards-text": "Atención, tras la confirmación los paneles seleccionados serán desasignados y no podrán ser accesibles por el cliente.",
+ "public-dashboard-title": "El panel ahora es público",
+ "public-dashboard-text": "Tu panel {{dashboardTitle}} es ahora público y podrá ser accedido desde: aquí :",
+ "public-dashboard-notice": "Nota: No olvides hacer públicos los dispositivos relacionados para acceder a sus datos.",
+ "make-private-dashboard-title": "¿Estás seguro que quieres hacer el panel '{{dashboardTitle}}' privado?",
+ "make-private-dashboard-text": "Tras la confirmación, el panel será privado y no podrá ser accesible por otros.",
+ "make-private-dashboard": "Hacer panel privado",
+ "socialshare-text": "'{{dashboardTitle}}' powered by ThingsBoard",
+ "socialshare-title": "'{{dashboardTitle}}' powered by ThingsBoard",
"select-dashboard": "Seleccionar panel",
- "no-dashboards-matching": "Paneles que coincidan con '{{entity}}' no fueron encontrados.",
- "dashboard-required": "Panel es requerido.",
- "select-existing": "Seleccionar panel existente",
+ "no-dashboards-matching": "Panel '{{entity}}' no encontrado.",
+ "dashboard-required": "Panel requerido.",
+ "select-existing": "Seleccionar paneles existentes",
"create-new": "Crear nuevo panel",
- "new-dashboard-title": "Nuevo título de panel",
+ "new-dashboard-title": "Nuevo título",
"open-dashboard": "Abrir panel",
"set-background": "Definir fondo",
"background-color": "Color de fondo",
"background-image": "Imagen de fondo",
- "background-size-mode": "Modo de tamaño de fondo",
- "no-image": "Ninguna imagen seleccionada",
- "drop-image": "Colocar una imagen o hacer clic para seleccionar un archivo para cargar.",
- "settings": "Configuración",
+ "background-size-mode": "Modo tamaño de fondo",
+ "no-image": "No se ha seleccionado ningúna imagen",
+ "drop-image": "Suelte una imagen o haga clic para seleccionar un archivo para cargar.",
+ "settings": "Ajustes",
"columns-count": "Número de columnas",
- "columns-count-required": "Número de columnas es requerido.",
- "min-columns-count-message": "Solo está permitido 10 columnas como mínimo.",
- "max-columns-count-message": "Sólo está permitido 1000 columnas como máximo.",
+ "columns-count-required": "Número de columnas requerido.",
+ "min-columns-count-message": "Solo se permite un número mínimo de 10 columnas.",
+ "max-columns-count-message": "Solo se permite un número máximo de 1000 columnas.",
"widgets-margins": "Margen entre widgets",
"horizontal-margin": "Margen horizontal",
- "horizontal-margin-required": "El valor del margen horizontal es requerido.",
- "min-horizontal-margin-message": "Sólo está permitido el 0 como valor mínimo para el margen horizontal",
- "max-horizontal-margin-message": "Sólo está permitido el 50 como valor máximo para el margen horizontal",
+ "horizontal-margin-required": "Margen horizontal requerido.",
+ "min-horizontal-margin-message": "Solo se permite margen horizontal mínimo de 0.",
+ "max-horizontal-margin-message": "Solo se permite margen horizontal máximo de 50.",
"vertical-margin": "Margen vertical",
- "vertical-margin-required": "El valor del margen vertical es requerido.",
- "min-vertical-margin-message": "Sólo está permitido el 0 como valor mínimo para el margen vertical.",
- "max-vertical-margin-message": "Solo está permitido el 50 como valor máximo para el margen vertical",
- "autofill-height": "Llenado automático de altura de diseño",
- "mobile-layout": "Configuración de diseño para móvil",
- "mobile-row-height": "Altura de fila para móvil, píxel",
- "mobile-row-height-required": "Altura de fila para móvil es requerida.",
- "min-mobile-row-height-message": "Sólo está permitido 5 píxeles como valor mínimo en la altura de fila para móvil.",
- "max-mobile-row-height-message": "Sólo está permitido 200 píxeles como valor máximo en la altura de fila para móvil.",
+ "vertical-margin-required": "Margen vertical requerido.",
+ "min-vertical-margin-message": "Solo se permite margen vertical mínimo de 0.",
+ "max-vertical-margin-message": "Solo se permite margen vertical máximo de 50.",
+ "autofill-height": "Altura diseño auto relleno",
+ "mobile-layout": "Ajustes del diseño móvil",
+ "mobile-row-height": "Altura de fila para móvil, px",
+ "mobile-row-height-required": "Altura de fila requerida.",
+ "min-mobile-row-height-message": "Sólo se permiten 5 píxeles como altura mínima de fila (móvil).",
+ "max-mobile-row-height-message": "Sólo se permiten 200 píxeles como altura máxima de fila (móvil).",
"display-title": "Mostrar título del panel",
"toolbar-always-open": "Mantener la barra de herramientas abierta",
"title-color": "Color del título",
- "display-dashboards-selection": "Mostrar selección del panel",
+ "display-dashboards-selection": "Mostrar selección de paneles",
"display-entities-selection": "Mostrar selección de entidades",
"display-dashboard-timewindow": "Mostrar ventana de tiempo",
"display-dashboard-export": "Mostrar exportar",
"import": "Importar panel",
"export": "Exportar panel",
- "export-failed-error": "No se puede exportar el panel: {{error}}",
+ "export-failed-error": "Imposible exportar panel: {{error}}",
"create-new-dashboard": "Crear nuevo panel",
- "dashboard-file": "Archivo del panel",
- "invalid-dashboard-file-error": "No se puede importar el panel: estructura de datos del panel no es válida.",
- "dashboard-import-missing-aliases-title": "Configurar los alias utilizados por el panel importado",
+ "dashboard-file": "Archivar panel",
+ "invalid-dashboard-file-error": "Imposible importar panel: Estructura de datos inválida.",
+ "dashboard-import-missing-aliases-title": "Configurar alias utilizados por el panel importado",
"create-new-widget": "Crear nuevo widget",
"import-widget": "Importar widget",
- "widget-file": "Archivo del widget",
- "invalid-widget-file-error": "No se puede importar el widget: estructura de datos del widger no es válida.",
- "widget-import-missing-aliases-title": "Configurar los alias utilizados por el widget importado",
- "open-toolbar": "Abrir barra de herramientas del panel",
- "close-toolbar": "Cerrar barra de herramientas",
+ "widget-file": "Archivo de widget",
+ "invalid-widget-file-error": "Imposible importar widget: Estructura de datos inválida.",
+ "widget-import-missing-aliases-title": "Configurar alias utilizados por el widget",
+ "open-toolbar": "Abrir toolbar del panel",
+ "close-toolbar": "Cerrar toolbar",
"configuration-error": "Error de configuración",
- "alias-resolution-error-title": "Error de configuración de los alias del panel",
- "invalid-aliases-config": "No se puede encontrar algún dispositivo que coincida con algunos alias del filtro. Por favor, contacte a su administrador para resolver este problema.",
+ "alias-resolution-error-title": "Error de configuración de alias del panel",
+ "invalid-aliases-config": "No se puede encontrar ningún dispositivo que coincida con algunos de los alias de filtro. Póngase en contacto con su administrador para resolver este problema.",
"select-devices": "Seleccionar dispositivos",
"assignedToCustomer": "Asignado al cliente",
"assignedToCustomers": "Asignado a los clientes",
"public": "Público",
- "public-link": "Enlace público",
- "copy-public-link": "Copiar enlace público",
- "public-link-copied-message": "El enlace público del panel ha sido copiado al portapapeles",
- "manage-states": "Gestionar estados del panel",
- "states": "Estados del panel",
- "search-states": "Buscar estados del panel",
- "selected-states": "{ count, plural, 1 {1 estado del panel } other {# estados del panel } } seleccionados",
- "edit-state": "Editar estado del panel",
- "delete-state": "Eliminar estado del panel",
- "add-state": "Agregar estado del panel",
- "state": "Estado del panel",
+ "public-link": "Link público",
+ "copy-public-link": "Copiar link público",
+ "public-link-copied-message": "El link público del panel se ha copiado al portapapeles",
+ "manage-states": "Administrar estados de paneles",
+ "states": "Estados de paneles",
+ "search-states": "Buscar estados de paneles",
+ "selected-states": "{ count, plural, 1 {1 estado panel} other {# estado paneles} } seleccionados",
+ "edit-state": "Editar estado panel",
+ "delete-state": "Borrar estado panel",
+ "add-state": "Añadir estado panel",
+ "state": "Estado de panel",
"state-name": "Nombre",
- "state-name-required": "El nombre del estado del panel es requerido.",
- "state-id": "ID del estado",
- "state-id-required": "ID del estado del panel es requerida.",
- "state-id-exists": "Ya existe el estado del panel con el mismo ID.",
- "is-root-state": "Estado raíz",
- "delete-state-title": "Eliminar estado del panel",
- "delete-state-text": "¿Está seguro de que desea eliminar el estado del panel con el nombre '{{stateName}}'?",
+ "state-name-required": "Se requiere nombre del estado.",
+ "state-id": "ID Estado",
+ "state-id-required": "Se requiere el ID de estado.",
+ "state-id-exists": "Ya existe un ID de estado.",
+ "is-root-state": "Estado raiz(Root)",
+ "delete-state-title": "Borrar estado de panel",
+ "delete-state-text": "Estás seguro de eliminar el estado de panel con nombre: '{{stateName}}'?",
"show-details": "Mostrar detalles",
"hide-details": "Ocultar detalles",
- "select-state": "Seleccionar estado objetivo",
- "state-controller": "Estado del controlador"
+ "select-state": "Seleccionar estado destino (target state)",
+ "state-controller": "Controlador de estados"
},
"datakey": {
- "settings": "Configuración",
+ "settings": "Ajustes",
"advanced": "Avanzado",
"label": "Etiqueta",
"color": "Color",
- "units": "Símbolo especial para mostrar al lado del valor",
- "decimals": "Número de dígitos después del punto flotante",
+ "units": "Símbolo especial para mostrar junto con el valor",
+ "decimals": "Número de dígitos después de la coma",
"data-generation-func": "Función de generación de datos",
- "use-data-post-processing-func": "Usar la función de post-procesamiento de datos",
- "configuration": "Configuración de clave de datos",
- "timeseries": "Series temporales",
+ "use-data-post-processing-func": "Usar funcíon de post-procesamiendo de datos",
+ "configuration": "Ajustes de clave de datos",
+ "timeseries": "Serie de tiempos",
"attributes": "Atributos",
+ "entity-field" : "Campo de entidad",
"alarm": "Campos de alarma",
- "timeseries-required": "Series temporales de la entidad son requeridas",
- "timeseries-or-attributes-required": "Series temporales/atributos de la entidad son requeridos.",
- "maximum-timeseries-or-attributes": "Máximo { count, plural, 1 {1 serie temporal/atributo permitido.} other {# series temporales/atributos permitidos} }",
- "alarm-fields-required": "Campos de alarma son requeridos.",
+ "timeseries-required": "Series de tiempo del dispositivo requerido.",
+ "timeseries-or-attributes-required": "Series de tiempo/Atributos requeridos.",
+ "maximum-timeseries-or-attributes": "Máximo { count, plural, 1 {1 timeseries/atributo es permitido.} other {# timeseries/atributos son permitidos} }",
+ "alarm-fields-required": "Campos de alarma requeridos.",
"function-types": "Tipos de funciones",
- "function-types-required": "Tipos de funciones son requeridos.",
- "maximum-function-types": "Máximo { count, plural, 1 {1 function type is allowed.} other {# function types are allowed} }",
- "time-description": "marca de tiempo del valor actual;",
- "value-description": "el valor actual;",
- "prev-value-description": "resultado de la llamada a la función anterior;",
- "time-prev-description": "marca de tiempo del valor anterior;",
- "prev-orig-value-description": "valor anterior original;"
+ "function-types-required": "Tipos de funciones requerido.",
+ "maximum-function-types": "Máximo { count, plural, 1 {1 tipo de función está permitida.} other {# tipos de funciones están permitidos} }",
+ "time-description": "hora del valor actual",
+ "value-description": "el valor actual",
+ "prev-value-description": "resultado de la llamada anterior de la función",
+ "time-prev-description": "hora del valor previo",
+ "prev-orig-value-description": "valor original previo"
},
"datasource": {
- "type": "Tipo de fuente de datos",
+ "type": "Típo de fuente de datos",
"name": "Nombre",
- "add-datasource-prompt": "Por favor agregue fuente de datos"
+ "add-datasource-prompt": "Por favor, agrega una fuente de datos"
},
"details": {
- "edit-mode": "Modo de edición",
- "toggle-edit-mode": "Cambiar modo de edición"
+ "edit-mode": "Modo Edición",
+ "edit-json": "Editar JSON",
+ "toggle-edit-mode": "Ir a Modo Edición"
},
"device": {
"device": "Dispositivo",
- "device-required": "Dispositivo es requerido.",
+ "device-required": "Dispositivo requerido.",
"devices": "Dispositivos",
- "management": "Gestión del dispositivo",
- "view-devices": "Ver dispositivos",
- "device-alias": "Alias del dispositivo",
- "aliases": "Alias de los dispositivos",
+ "management": "Gestión de Dispositivos",
+ "view-devices": "Ver Dispositivos",
+ "device-alias": "Alias de dispositivo",
+ "aliases": "Alias de dispositivos",
"no-alias-matching": "'{{alias}}' no encontrado.",
- "no-aliases-found": "No se encontraron alias.",
+ "no-aliases-found": "Ningún alias encontrado.",
"no-key-matching": "'{{key}}' no encontrado.",
- "no-keys-found": "Claves no encontradas.",
- "create-new-alias": "¡Crear uno nuevo!",
- "create-new-key": "¡Crear una nueva!",
- "duplicate-alias-error": "Alias duplicado encontrado '{{alias}}'. Los alias del dispositivo deben ser únicos dentro del panel.",
- "configure-alias": "Configurar '{{alias}}' alias",
- "no-devices-matching": "Dispositivos que coincidan con '{{entity}}' no fueron encontrados.",
+ "no-keys-found": "Ninguna clave encontrada.",
+ "create-new-alias": "Crear nuevo alias!",
+ "create-new-key": "Crear nueva clave!",
+ "duplicate-alias-error": "Alias duplicado '{{alias}}'. El alias de los dispositivos deben ser únicos dentro del panel.",
+ "configure-alias": "Configurar alias '{{alias}}'",
+ "no-devices-matching": "No se encontró dispositivo '{{entity}}'",
"alias": "Alias",
- "alias-required": "Alias del dispositivo es requerido.",
- "remove-alias": "Eliminar alias del dispositivo",
- "add-alias": "Agregar alias del dispositivo",
- "name-starts-with": "El nombre del dispositivo comienza con",
+ "alias-required": "Alias de dispositivo requerido.",
+ "remove-alias": "Eliminar alias",
+ "add-alias": "Agregar alias",
+ "name-starts-with": "Nombre empieza con",
"device-list": "Lista de dispositivos",
- "use-device-name-filter": "Utilizar filtro",
+ "use-device-name-filter": "Usar filtro",
"device-list-empty": "Ningún dispositivo seleccionado.",
- "device-name-filter-required": "Filtro de nombre de dispositivo es requerido.",
- "device-name-filter-no-device-matched": "Dispositivos que comienzan con '{{device}}' no fueron encontrados.",
- "add": "Agregar Dispositivo",
- "assign-to-customer": "Asignar al cliente",
- "assign-device-to-customer": "Asignar Dispositivo(s) Al Cliente",
- "assign-device-to-customer-text": "Por favor selecciona los dispositivos para asignar al cliente",
- "make-public": "Hacer público el dispositivo",
- "make-private": "Hacer privado el dispositivo",
- "no-devices-text": "No se encontraron dispositivos",
- "assign-to-customer-text": "Por favor seleccionar el cliente para asignar el(los) dispositivo(s)",
+ "device-name-filter-required": "Nombre de filtro requerido.",
+ "device-name-filter-no-device-matched": "Ningún dispositivo encontrado que comience con '{{device}}'.",
+ "add": "Agregar dispositivo",
+ "assign-to-customer": "Asignar a cliente",
+ "assign-device-to-customer": "Asignar dispositivo(s) a Cliente",
+ "assign-device-to-customer-text": "Por favor, seleccione los dispositivos que serán asignados al cliente",
+ "make-public": "Hacer dispositivo público",
+ "make-private": "Hacer dispositivo privado",
+ "no-devices-text": "Ningún dispositivo encontrado",
+ "assign-to-customer-text": "Por favor, seleccione el cliente para asignar el(los) dispositivo(s)",
"device-details": "Detalles del dispositivo",
"add-device-text": "Agregar nuevo dispositivo",
"credentials": "Credenciales",
"manage-credentials": "Gestionar credenciales",
"delete": "Eliminar dispositivo",
- "assign-devices": "Asignar dispositivos",
+ "assign-devices": "Asignar dispositivo",
"assign-devices-text": "Asignar { count, plural, 1 {1 dispositivo} other {# dispositivos} } al cliente",
- "delete-devices": "Eliminar dispositivos",
- "unassign-from-customer": "Anular asignación del cliente",
+ "delete-devices": "Eliminar dispositivo",
+ "unassign-from-customer": "Desasignar del cliente",
"unassign-devices": "Desasignar dispositivos",
- "unassign-devices-action-title": "Anular asignación { count, plural, 1 {1 dispositivo} other {# dispositivos} } del cliente",
+ "unassign-devices-action-title": "Desasignar { count, plural, 1 {1 dispositivo} other {# dispositivos} } del cliente",
"assign-new-device": "Asignar nuevo dispositivo",
- "make-public-device-title": "¿Está seguro de que desea hacer el dispositivo '{{deviceName}}' público?",
- "make-public-device-text": "Después de la confirmación, el dispositivo y todos sus datos se harán públicos y accesibles por otros.",
- "make-private-device-title": "¿Está seguro de que desea hacer el dispositivo '{{deviceName}}' privado?",
- "make-private-device-text": "Después de la confirmación, el dispositivo y todos sus datos se harán privados y no serán accesibles para otros.",
+ "make-public-device-title": "¿Estás seguro que quieres hacer el dispositivo '{{deviceName}}' público?",
+ "make-public-device-text": "Tras la confirmación, el dispositivo y la información relacionada serán públicos y podrá ser accesible por otros.",
+ "make-private-device-title": "¿Estás seguro que quieres hacer el dispositivo '{{deviceName}}' privado?",
+ "make-private-device-text": "Tras la confirmación, el dispositivo y la información relacionada serán privados y no podrá ser accesible por otros.",
"view-credentials": "Ver credenciales",
- "delete-device-title": "¿Está seguro de que desea hacer el dispositivo '{{deviceName}}'?",
- "delete-device-text": "¡Cuidado! Después de la confirmación, el dispositivo y todos sus datos relacionados serán irrecuperables.",
- "delete-devices-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 dispositivo} other {# dispositivos} }?",
+ "delete-device-title": "¿Estás seguro que quieres eliminar el dispositivo '{{deviceName}}'?",
+ "delete-device-text": "Atención, tras la confirmación los dispositivos serán eliminados y la información relacionada será irrecuperable.",
+ "delete-devices-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 dispositivo} other {# dispositivos} }?",
"delete-devices-action-title": "Eliminar { count, plural, 1 {1 dispositivo} other {# dispositivos} }",
- "delete-devices-text": "¡Cuidado! Después de la confirmación, todos los dispositivos seleccionados serán eliminados y todos los datos relacionados serán irrecuperables.",
- "unassign-device-title": "¿Está seguro de que desea anular la asignación del dispositivo '{{deviceName}}'?",
- "unassign-device-text": "Después de la confirmación, se anulará asignación del dispositivo y no será accesible por el cliente.",
+ "delete-devices-text": "Atención, tras la confirmación los dispositivos seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "unassign-device-title": "¿Estás seguro que quieres desasignar el dispositivo '{{deviceName}}'?",
+ "unassign-device-text": "Tras la confirmación, el dispositivo será desasignado y no podrá ser accesible por el cliente.",
"unassign-device": "Desasignar dispositivo",
- "unassign-devices-title": "¿Está seguro de que desea desasignar { count, plural, 1 {1 dispositivo } other {# dispositivos} }?",
- "unassign-devices-text": "Después de la confirmación, se anulará asignación de todos los dispositivos seleccionados y no serán accesibles por el cliente.",
+ "unassign-devices-title": "¿Estás seguro que quieres desasignar { count, plural, 1 {1 dispositivo} other {# dispositivos} }?",
+ "unassign-devices-text": "Tras la confirmación, los dispositivos seleccionados serán desasignados y no podrán ser accedidos por el cliente.",
"device-credentials": "Credenciales del dispositivo",
- "credentials-type": "Tipo de credenciales",
- "access-token": "Token de acceso",
- "access-token-required": "Token de acceso es requerido.",
- "access-token-invalid": "La longitud del token de acceso debe ser de 1 a 20 caracteres.",
+ "credentials-type": "Tipo de credencial",
+ "access-token": "Tóken de acceso",
+ "access-token-required": "Access token requerido.",
+ "access-token-invalid": "Access token debe tener entre 1 a 20 caracteres.",
"rsa-key": "Clave pública RSA",
- "rsa-key-required": "Clave pública RSA es requerida.",
- "secret": "Secreto",
- "secret-required": "Secreto es requerido.",
+ "rsa-key-required": "Clave pública RSA requerida.",
+ "secret": "Secreta",
+ "secret-required": "Secreta requerida.",
"device-type": "Tipo de dispositivo",
- "device-type-required": "Tipo de dispositivo es requerido.",
+ "device-type-required": "Tipo de dispositivo requerido.",
"select-device-type": "Seleccionar tipo de dispositivo",
- "enter-device-type": "Teclee tipo de dispositivo",
- "any-device": "Algún dispositivo",
- "no-device-types-matching": "Tipos de dispositivos que coincidan con '{{entitySubtype}}' no fueron encontrados.",
- "device-type-list-empty": "No se seleccionaron tipos de dispositivos.",
- "device-types": "Tipo de dispositivos",
+ "enter-device-type": "Entrar tipo de dispositivo",
+ "any-device": "Cualquier dispositivo",
+ "no-device-types-matching": "No hay tipos de dispositivo que coincidan con '{{entitySubtype}}' .",
+ "device-type-list-empty": "No hay tipos de dispositivo seleccionados.",
+ "device-types": "Tipos de dispositivo",
"name": "Nombre",
"name-required": "El nombre es requerido.",
"label": "Etiqueta",
"description": "Descripción",
"events": "Eventos",
"details": "Detalles",
- "copyId": "Copiar ID del dispositivo",
- "copyAccessToken": "Copiar token de acceso",
- "idCopiedMessage": "ID del dispositivo ha sido copiada al portapapeles",
- "accessTokenCopiedMessage": "Token de acceso al dispositivo ha sido copiado al portapapeles",
+ "copyId": "Copiar ID",
+ "copyAccessToken": "Copiar access token",
+ "idCopiedMessage": "Id del dispositivo copiado al portapapeles",
+ "accessTokenCopiedMessage": "Access token del dispositivo copiado al portapapeles",
"assignedToCustomer": "Asignado al cliente",
- "unable-delete-device-alias-title": "No se puede eliminar el alias del dispositivo",
- "unable-delete-device-alias-text": "El alias del dispositivo '{{deviceAlias}}' no puede ser eliminado porque es usado por los siguientes widget(s): {{widgetsList}}",
- "is-gateway": "Es puerta de entrada",
+ "unable-delete-device-alias-title": "Imposible eliminar alias del dispositivo",
+ "unable-delete-device-alias-text": "Alias '{{deviceAlias}}' no puede ser eliminado. Esta siendo usado por el(los) widget(s): {{widgetsList}}",
+ "is-gateway": "Es gateway",
"public": "Público",
"device-public": "El dispositivo es público",
"select-device": "Seleccionar dispositivo",
@@ -709,86 +718,86 @@
"row": "Fila"
},
"error": {
- "unable-to-connect": "¡No se puede conectar al servidor! Por favor, revise su conexión a Internet.",
+ "unable-to-connect": "Imposible conectar con el servidor! Por favor, revise su conexión a internet.",
"unhandled-error-code": "Código de error no controlado: {{errorCode}}",
"unknown-error": "Error desconocido"
},
"entity": {
"entity": "Entidad",
"entities": "Entidades",
- "aliases": "Alias de las entidades",
- "entity-alias": "Alias de la entidad",
- "unable-delete-entity-alias-title": "No se puede borrar alias de la entidad",
- "unable-delete-entity-alias-text": "Alias de la entidad '{{entityAlias}}' no se puede eliminar porque es usado por los siguientes widget(s): {{widgetsList}}",
- "duplicate-alias-error": "Alias duplicado fue encontrado '{{alias}}'. Alias de las entidades deben ser únicos dentro del panel.",
- "missing-entity-filter-error": "Falta filtro para el alias '{{alias}}'.",
- "configure-alias": "Configurar '{{alias}}' alias",
+ "aliases": "Alias de entidad",
+ "entity-alias": "Alias de entidad",
+ "unable-delete-entity-alias-title": "No ha sido posible eliminar el alias de entidad",
+ "unable-delete-entity-alias-text": "El alias de entidad '{{entityAlias}}' no puede ser eliminado ya que se esta usando por los siguientes widgets: {{widgetsList}}",
+ "duplicate-alias-error": "Encontrado un alias duplicado '{{alias}}'. Loas alias de entidad tienen que ser únicos para cada panel.",
+ "missing-entity-filter-error": "Falta el filtro para el alias '{{alias}}'.",
+ "configure-alias": "Configurar alias '{{alias}}' ",
"alias": "Alias",
- "alias-required": "Alias de la entidad es requerida.",
- "remove-alias": "Eliminar alias de la entidad",
- "add-alias": "Agregar alias de la entidad",
+ "alias-required": "Alias de entidad requerido.",
+ "remove-alias": "Eliminar alias de entidad",
+ "add-alias": "Añadir alias de entidad",
"entity-list": "Lista de entidades",
"entity-type": "Tipo de entidad",
"entity-types": "Tipos de entidades",
- "entity-type-list": "Lista de tipos de entidades",
- "any-entity": "Alguna entidad",
- "enter-entity-type": "Teclee tipo de entidad",
- "no-entities-matching": "No se encontraron entidades que coincidan con '{{entity}}'.",
- "no-entity-types-matching": "No se encontraron tipos de entidades que coincidan con '{{entityType}}'.",
- "name-starts-with": "El nombre comienza con",
- "use-entity-name-filter": "Utilizar filtro",
- "entity-list-empty": "Entidades no seleccionadas.",
- "entity-type-list-empty": "Tipos de entidades no seleccionados.",
- "entity-name-filter-required": "Filtro del nombre de la entidad es requerido.",
- "entity-name-filter-no-entity-matched": "No se encontraron entidades que comienzan con '{{entity}}'.",
- "all-subtypes": "Todas",
+ "entity-type-list": "Lista de tipos de entidad",
+ "any-entity": "Cualquier entdad",
+ "enter-entity-type": "Introducir tipo de entidad",
+ "no-entities-matching": "No se han encontrado entidades que coincidan con '{{entity}}' .",
+ "no-entity-types-matching": "No se han encontrado tipos de entidad que coincidan con '{{entityType}}' .",
+ "name-starts-with": "Nombre empieza con",
+ "use-entity-name-filter": "Usar filtro",
+ "entity-list-empty": "No hay entidades seleccionadas.",
+ "entity-type-list-empty": "No hay tipos de entidad seleccionados.",
+ "entity-name-filter-required": "Filtro de nombre de entidad requerido.",
+ "entity-name-filter-no-entity-matched": "No hay entidades que comiencen con '{{entity}}' .",
+ "all-subtypes": "Todos",
"select-entities": "Seleccionar entidades",
- "no-aliases-found": "No se encontraron alias.",
+ "no-aliases-found": "No se han encontrado alias.",
"no-alias-matching": "'{{alias}}' no encontrado.",
- "create-new-alias": "¡Crear uno nuevo!",
+ "create-new-alias": "Crear nuevo alias!",
"key": "Clave",
"key-name": "Nombre de clave",
- "no-keys-found": "No se encontraron claves.",
+ "no-keys-found": "No se han encontrado claves.",
"no-key-matching": "'{{key}}' no encontrada.",
- "create-new-key": "¡Crear una nueva!",
+ "create-new-key": "Crear nueva clave!",
"type": "Tipo",
- "type-required": "Tipo de entidad es requerido.",
+ "type-required": "Tipo de entidad requerido.",
"type-device": "Dispositivo",
"type-devices": "Dispositivos",
- "list-of-devices": "{ count, plural, 1 {Un dispositivo} other {Lista de # dispositivos} }",
- "device-name-starts-with": "Dispositivos cuyos nombres comienzan con '{{prefix}}'",
+ "list-of-devices": "{ count, plural, 1 {Un dispositivo} other {Lista de # Dispositivos} }",
+ "device-name-starts-with": "Dispositivos cuyos nombres comiencen por '{{prefix}}'",
"type-asset": "Activo",
"type-assets": "Activos",
"list-of-assets": "{ count, plural, 1 {Un activo} other {Lista de # activos} }",
- "asset-name-starts-with": "Activos cuyos nombres comienzan con '{{prefix}}'",
- "type-entity-view": "Vista de entidad",
- "type-entity-views": "Vistas de entidad",
- "list-of-entity-views": "{ count, plural, 1 {Una vista de entidad} other {Lista de # vistas de entidad} }",
- "entity-view-name-starts-with": "Vistas de entidad cuyos nombres que comienzan con '{{prefix}}'",
+ "asset-name-starts-with": "Activos cuyos nombres comiencen por '{{prefix}}'",
+ "type-entity-view": "Vista Entidad",
+ "type-entity-views": "Vistas Entidades",
+ "list-of-entity-views": "{ count, plural, 1 {Una vista de entidad} other {Lista de # Vistas de Entidades} }",
+ "entity-view-name-starts-with": "Vistas de Entidades cuyo nombre comiencen por '{{prefix}}'",
"type-rule": "Regla",
"type-rules": "Reglas",
"list-of-rules": "{ count, plural, 1 {Una regla} other {Lista de # reglas} }",
- "rule-name-starts-with": "Reglas cuyos nombres comienzan con '{{prefix}}'",
- "type-plugin": "Complemento",
- "type-plugins": "Complementos",
- "list-of-plugins": "{ count, plural, 1 {Un complemento} other {Lista de # complementos} }",
- "plugin-name-starts-with": "Complementos cuyos nombres comienzan con '{{prefix}}'",
- "type-tenant": "Organización",
- "type-tenants": "Organizaciones",
- "list-of-tenants": "{ count, plural, 1 {Una organización} other {Lista de # organizaciones} }",
- "tenant-name-starts-with": "Organizaciones cuyos nombres comienzan con '{{prefix}}'",
+ "rule-name-starts-with": "Reglas cuyos nombres comiencen por '{{prefix}}'",
+ "type-plugin": "Plugin",
+ "type-plugins": "Plugins",
+ "list-of-plugins": "{ count, plural, 1 {Un plugin} other {Lista de # plugins} }",
+ "plugin-name-starts-with": "Plugins cuyos nombres comiencen por '{{prefix}}'",
+ "type-tenant": "Propietario",
+ "type-tenants": "Propietarios",
+ "list-of-tenants": "{ count, plural, 1 {Un propietario} other {Lista de # propietarios} }",
+ "tenant-name-starts-with": "Tenants cuyos nombres comiencen por '{{prefix}}'",
"type-customer": "Cliente",
"type-customers": "Clientes",
"list-of-customers": "{ count, plural, 1 {Un cliente} other {Lista de # clientes} }",
- "customer-name-starts-with": "Clientes cuyos nombres comienzan con '{{prefix}}'",
+ "customer-name-starts-with": "Clientes cuyos nombres comiencen por '{{prefix}}'",
"type-user": "Usuario",
"type-users": "Usuarios",
"list-of-users": "{ count, plural, 1 {Un usuario} other {Lista de # usuarios} }",
- "user-name-starts-with": "Usuarios cuyos nombres comienzan con '{{prefix}}'",
+ "user-name-starts-with": "Usuarios cuyos nombres comiencen por '{{prefix}}'",
"type-dashboard": "Panel",
"type-dashboards": "Paneles",
- "list-of-dashboards": "{ count, plural, 1 {One dashboard} other {List of # dashboards} }",
- "dashboard-name-starts-with": "Paneles cuyos nombres comienzan con '{{prefix}}'",
+ "list-of-dashboards": "{ count, plural, 1 {Un panel} other {Lista de # paneles} }",
+ "dashboard-name-starts-with": "Paneles cuyos nombres comiencen por '{{prefix}}'",
"type-alarm": "Alarma",
"type-alarms": "Alarmas",
"list-of-alarms": "{ count, plural, 1 {Una alarma} other {Lista de # alarmas} }",
@@ -802,13 +811,15 @@
"list-of-rulenodes": "{ count, plural, 1 {Un nodo de reglas} other {Lista de # nodos de reglas} }",
"rulenode-name-starts-with": "Nodos de reglas cuyos nombres comienzan con '{{prefix}}'",
"type-current-customer": "Cliente Actual",
+ "type-current-tenant": "Propietario Actual",
"search": "Buscar entidades",
"selected-entities": "{ count, plural, 1 {1 entidad} other {# entidades} } seleccionadas",
- "entity-name": "Nombre de la entidad",
- "details": "Detalles de la entidad",
- "no-entities-prompt": "Entidades no encontradas",
- "no-data": "No hay datos para mostrar",
- "columns-to-display": "Columnas a mostrar"
+ "entity-label": "Etiqueta de entidad",
+ "entity-name": "Nombre de entidad",
+ "details": "Detalles de entidad",
+ "no-entities-prompt": "No se han encontrado entidades",
+ "no-data": "No hay datos que mostrar",
+ "columns-to-display": "Columnas a Mostrar"
},
"entity-field": {
"created-time": "Tiempo de creación",
@@ -824,7 +835,8 @@
"address": "Dirección",
"address2": "Dirección 2",
"zip": "Código postal",
- "phone": "Teléfono"
+ "phone": "Teléfono",
+ "label": "Etiqueta"
},
"entity-view": {
"entity-view": "Vista de entidad",
@@ -836,7 +848,7 @@
"aliases": "Alias de vista de entidad",
"no-alias-matching": "'{{alias}}' no encontrado.",
"no-aliases-found": "No se encontraron alias.",
- "no-key-matching": "'{{key}}' no encontrado.",
+ "no-key-matching": "'{{key}}' no encontrada.",
"no-keys-found": "No se encontraron claves.",
"create-new-alias": "¡Crear un nuevo!",
"create-new-key": "¡Crear una nueva!",
@@ -888,7 +900,7 @@
"entity-view-type-list-empty": "No hay tipos de vista de entidad seleccionados.",
"entity-view-types": "Tipos de vista de entidad",
"name": "Nombre",
- "name-required": "Nombre es requerido.",
+ "name-required": "Nombre Requerido.",
"description": "Descripción",
"events": "Eventos",
"details": "Detalles",
@@ -927,33 +939,33 @@
"type-error": "Error",
"type-lc-event": "Ciclo de vida del evento",
"type-stats": "Estadísticas",
- "type-debug-rule-node": "Depurar",
- "type-debug-rule-chain": "Depurar",
- "no-events-prompt": "No se encontraron eventos",
+ "type-debug-rule-node": "Debug",
+ "type-debug-rule-chain": "Debug",
+ "no-events-prompt": "Ningún evento encontrado.",
"error": "Error",
"alarm": "Alarma",
- "event-time": "Tiempo del evento",
+ "event-time": "Hora del evento",
"server": "Servidor",
"body": "Cuerpo",
"method": "Método",
"type": "Tipo",
"entity": "Entidad",
- "message-id": "ID del mensaje",
- "message-type": "Tipo de mensaje",
- "data-type": "Tipo de datos",
+ "message-id": "Id Mensaje",
+ "message-type": "Tipo Mensaje",
+ "data-type": "Tipo de Datos",
"relation-type": "Tipo de relación",
"metadata": "Metadatos",
"data": "Datos",
"event": "Evento",
"status": "Estado",
- "success": "Correcto",
- "failed": "Erróneo",
+ "success": "Éxito",
+ "failed": "Fallo",
"messages-processed": "Mensajes procesados",
- "errors-occurred": "Errores ocurridos"
+ "errors-occurred": "Ocurrieron errores"
},
"extension": {
"extensions": "Extensiones",
- "selected-extensions": "{ count, plural, 1 {1 extensión} other {# extensiones} } seleccionadas",
+ "selected-extensions": "{ count, plural, 1 {1 extension} de {# extensions} } seleccionadas",
"type": "Tipo",
"key": "Clave",
"value": "Valor",
@@ -961,42 +973,42 @@
"extension-id": "ID de extensión",
"extension-type": "Tipo de extensión",
"transformer-json": "JSON *",
- "unique-id-required": "Ya existe ID de extensión actual.",
- "delete": "Eliminar extensión",
- "add": "Agregar extensión",
- "edit": "Editar extensión",
- "delete-extension-title": "¿Está seguro de que desea eliminar la extensión '{{extensionId}}'?",
- "delete-extension-text": "¡Cuidado! Después de la confirmación, la extensión y todos los datos relacionados serán irrecuperables.",
- "delete-extensions-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 extensión} other {# extensiones} }?",
- "delete-extensions-text": "¡Cuidado! Después de la confirmación, se eliminarán todas las extensiones seleccionadas.",
- "converters": "Conversores",
- "converter-id": "ID del conversor",
+ "unique-id-required": "El id de extensión ya existe.",
+ "delete": "Borrar Extensión",
+ "add": "Añadir Extensión",
+ "edit": "Editar Extensión",
+ "delete-extension-title": "Estás seguro de borrar la extensión '{{extensionId}}'?",
+ "delete-extension-text": "Atención, tras la confirmación la extensión y sus datos serán borrados e irrecuperables.",
+ "delete-extensions-title": "Estás seguro de borrar las extensiones { count, plural, 1 {1 extensión} other {# extensiones} }?",
+ "delete-extensions-text": "Atención, tras la confirmación todas las extensiones seleccionadas y sus datos serán borrados e irrecuperables.",
+ "converters": "Convertidores",
+ "converter-id": "Id de convertidor",
"configuration": "Configuración",
- "converter-configurations": "Configuraciones del conversor",
- "token": "Token de seguridad",
- "add-converter": "Agregar conversor",
- "add-config": "Agregar configuración del conversor",
- "device-name-expression": "Expresión del nombre del dispositivo",
- "device-type-expression": "Expresión del tipo del dispositivo",
+ "converter-configurations": "Ajustes de convertidor",
+ "token": "Tóken de seguridad",
+ "add-converter": "Añadir convertidor",
+ "add-config": "Añadir configuración de convertidor",
+ "device-name-expression": "Expresión del nombre de dispositivo",
+ "device-type-expression": "Expresión del tipo de dispositivo",
"custom": "Personalizado",
"to-double": "Para duplicar",
"transformer": "Transformador",
- "json-required": "Transformador json es requerido.",
- "json-parse": "No se puede analizar el transformador json.",
+ "json-required": "Se requiere el JSON del transformador.",
+ "json-parse": "No ha sido posible analizar el JSON del transformador.",
"attributes": "Atributos",
- "add-attribute": "Agregar atributos",
- "add-map": "Agregar elemento de mapeo",
- "timeseries": "Series temporales",
- "add-timeseries": "Agregar series temporales",
- "field-required": "Campo es requerido",
- "brokers": "Agentes",
- "add-broker": "Agregar agente",
+ "add-attribute": "Añadir Atributo",
+ "add-map": "Agregar elemento de mapeado",
+ "timeseries": "Series de tiempo",
+ "add-timeseries": "Añadir series de tiempo",
+ "field-required": "Campo requerido",
+ "brokers": "Brokers",
+ "add-broker": "Añadir broker",
"host": "Host",
"port": "Puerto",
- "port-range": "El puerto debe estar en un rango desde 1 hasta 65535.",
+ "port-range": "El puerto debe estar en un rango de 1 a 65535.",
"ssl": "SSL",
"credentials": "Credenciales",
- "username": "Nombre de usuario",
+ "username": "Usuario",
"password": "Contraseña",
"retry-interval": "Intervalo de reintento en milisegundos",
"anonymous": "Anónimo",
@@ -1054,7 +1066,7 @@
"opc-scan-period-in-seconds": "Período de exploración en segundos",
"opc-security": "Seguridad",
"opc-identity": "Identidad",
- "opc-keystore": "Repositorio",
+ "opc-keystore": "Almacén de claves",
"opc-type": "Tipo",
"opc-keystore-type": "Tipo",
"opc-keystore-location": "Ubicación *",
@@ -1095,9 +1107,9 @@
"modbus-byte-order": "Orden del byte",
"sync": {
"status": "Estado",
- "sync": "Sincronización",
- "not-sync": "No sincronización",
- "last-sync-time": "Ultima hora de sincronización",
+ "sync": "Sincronizado",
+ "not-sync": "No Sincronizado",
+ "last-sync-time": "Hora de última sincronización",
"not-available": "No disponible"
},
"export-extensions-configuration": "Exportar configuración de extensiones",
@@ -1105,39 +1117,118 @@
"import-extensions": "Importar extensiones",
"import-extension": "Importar extensión",
"export-extension": "Exportar extensión",
- "file": "Archivo de extensiones",
- "invalid-file-error": "Archivo de extensión no válido"
+ "file": "Fichero de extensiones",
+ "invalid-file-error": "Fichero de extensiones inválido"
},
"fullscreen": {
- "expand": "Expandir a pantalla completa",
- "exit": "Salir de pantalla completa",
- "toggle": "Alternar el modo de pantalla completa",
- "fullscreen": "Pantalla completa"
+ "expand": "Expandir a Pantalla Completa",
+ "exit": "Salir de Pantalla Completa",
+ "toggle": "Cambiar el modo de Pantalla Completa",
+ "fullscreen": "Pantalla Completa"
},
"function": {
"function": "Función"
},
+ "gateway": {
+ "add-entry": "Añadir configuración",
+ "connector-add": "Añadir conector",
+ "connector-enabled": "Activar conector",
+ "connector-name": "Nombre conector",
+ "connector-name-required": "Se requiere nombre conector.",
+ "connector-type": "Tipo conector",
+ "connector-type-required": "Se requiere tipo conector.",
+ "connectors": "Configuración de conectores",
+ "create-new-gateway": "Crear un gateway nuevo",
+ "create-new-gateway-text": "Estás seguro de crear un nuevo gateway con el nombre: '{{gatewayName}}'?",
+ "delete": "Borrar configuración",
+ "download-tip": "Descargar fichero de configuración",
+ "gateway": "Gateway",
+ "gateway-exists": "Ya existe un dispositivo con el mismo nombre.",
+ "gateway-name": "Nombre de Gateway",
+ "gateway-name-required": "Se requiere un nombre de gateway.",
+ "gateway-saved": "Configuración de gateway grabada satisfactoriamente.",
+ "json-parse": "JSON no válido.",
+ "json-required": "El campo no puede estar vacío.",
+ "no-connectors": "No hay conectores",
+ "no-data": "No hay configuraciones",
+ "no-gateway-found": "No se ha encontrado ningún gateway.",
+ "no-gateway-matching": " '{{item}}' no encontrado.",
+ "path-logs": "Ruta a los archivos de log",
+ "path-logs-required": "Ruta requerida.",
+ "remote": "Configuración remota",
+ "remote-logging-level": "Nivel de logging",
+ "remove-entry": "Borrar configuración",
+ "save-tip": "Grabar fichero de configuración",
+ "security-type": "Tipo de seguridad",
+ "security-types": {
+ "access-token": "Token de acceso",
+ "tls": "TLS"
+ },
+ "storage": "Grabación",
+ "storage-max-file-records": "Número máximo de registros en fichero",
+ "storage-max-files": "Número máximo de ficheros",
+ "storage-max-files-min": "El número mínimo es 1.",
+ "storage-max-files-pattern": "Número no válido.",
+ "storage-max-files-required": "Se requiere número.",
+ "storage-max-records": "Máximo de registros en el almacén",
+ "storage-max-records-min": "El número mínimo es 1.",
+ "storage-max-records-pattern": "Número no válido.",
+ "storage-max-records-required": "Se requiere número.",
+ "storage-pack-size": "Tamaño máximo de eventos",
+ "storage-pack-size-min": "El número mínimo es 1.",
+ "storage-pack-size-pattern": "Número no válido.",
+ "storage-pack-size-required": "Se requiere número.",
+ "storage-path": "Ruta de almacén",
+ "storage-path-required": "Se requiere ruta de almacén.",
+ "storage-type": "Tipo de almacén",
+ "storage-types": {
+ "file-storage": "Almacén fichero",
+ "memory-storage": "Almacén en memoria"
+ },
+ "thingsboard": "ThingsBoard",
+ "thingsboard-host": "Host ThingsBoard",
+ "thingsboard-host-required": "Se requiere Host.",
+ "thingsboard-port": "Puerto ThingsBoard",
+ "thingsboard-port-max": "El puerto máximo es 65535.",
+ "thingsboard-port-min": "El puerto mínimo es 1.",
+ "thingsboard-port-pattern": "Puerto no válido.",
+ "thingsboard-port-required": "Se requiere puerto.",
+ "tidy": "Tidy",
+ "tidy-tip": "Tidy JSON",
+ "title-connectors-json": "Configuración conector {{typeName}}",
+ "tls-path-ca-certificate": "Ruta al certificado CA en el gateway",
+ "tls-path-client-certificate": "Ruta al certificado cliente en el gateway",
+ "tls-path-private-key": "Ruta a la clave privada en el gateway",
+ "toggle-fullscreen": "Pantalla completa fullscreen",
+ "transformer-json-config": "Configuración JSON*",
+ "update-config": "Añadir/actualizar configuración JSON",
+ "state-title": "Estado gateway",
+ "show-config-tip": "Mostrar configuración gateway",
+ "title-show-config": "Mostrar configuración gateway",
+ "read-only": "Solo lectura",
+ "read-write": ""
+ },
"grid": {
- "delete-item-title": "¿Está seguro de que desea eliminar este ítem?",
- "delete-item-text": "¡Cuidado! Después de la confirmación, este ítem y todos los datos relacionados serán irrecuperables.",
- "delete-items-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 ítem} other {# ítems} }?",
- "delete-items-action-title": "Eliminar { count, plural, 1 {1 ítem} other {# ítems} }",
- "delete-items-text": "¡Cuidado! Después de la confirmación se eliminarán todos los ítems seleccionados y todos los datos relacionados serán irrecuperables.",
- "add-item-text": "Agregar nuevo ítem",
- "no-items-text": "No se encontraron ítems",
- "item-details": "Detalles del ítem",
- "delete-item": "Eliminar ítem",
- "delete-items": "Eliminar ítems",
- "scroll-to-top": "Desplazar al inicio"
+ "delete-item-title": "¿Estás seguro que quieres eliminar este item?",
+ "delete-item-text": "Atención, tras la confirmación el item será eliminado y la información relacionada será irrecuperable.",
+ "delete-items-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 item} other {# items} }?",
+ "delete-items-action-title": "Eliminar { count, plural, 1 {1 item} other {# items} }",
+ "delete-items-text": "Atención, tras la confirmación los items seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "add-item-text": "Agregar nuevo item",
+ "no-items-text": "Ningún item encontrado",
+ "item-details": "Detalles del item",
+ "delete-item": "Borrar Item",
+ "delete-items": "Borrar Items",
+ "scroll-to-top": "Ir hacia arriba"
},
"help": {
"goto-help-page": "Ir a la página de ayuda"
},
"home": {
- "home": "Página principal",
+ "home": "Principal",
"profile": "Perfil",
- "logout": "Cerrar sesión",
- "menu": "Menú",
+ "logout": "Salir",
+ "menu": "Menu",
"avatar": "Avatar",
"open-user-menu": "Abrir menú de usuario"
},
@@ -1155,15 +1246,18 @@
"import-csv-number-columns-error": "Un archivo debe contener al menos dos columnas",
"import-csv-invalid-format-error": "Formato de archivo inválido. Línea: '{{line}}'",
"column-type": {
- "access-token": "Token de acceso",
- "client-attribute": "Atributo de cliente",
- "column-type": "Tipo de columna",
- "entity-field": "Campo de entidad",
"name": "Nombre",
- "server-attribute": "Atributo de servidor",
+ "type": "Tipo",
+ "label": "Etiqueta",
+ "column-type": "Tipo de columna",
+ "client-attribute": "Atributo de cliente",
"shared-attribute": "Atributo compartido",
- "timeseries": "Series temporales",
- "type": "Tipo"
+ "server-attribute": "Atributo de servidor",
+ "timeseries": "Series de tiempo",
+ "entity-field": "Campo de entidad",
+ "access-token": "Token de acceso",
+ "isgateway": "Es Gateway",
+ "description": "Descripción"
},
"stepper-text": {
"select-file": "Seleccione un archivo",
@@ -1182,25 +1276,26 @@
"selected": "Seleccionado"
},
"js-func": {
- "no-return-error": "La función debe devolver el valor!",
- "return-type-mismatch": "La función debe devolver el valor de '{{type}}' type!",
- "tidy": "Formatear"
+ "no-return-error": "La función debe retornar un valor!",
+ "return-type-mismatch": "La función debe retornar un valor de tipo: '{{type}}'!",
+ "tidy": "Tidy",
+ "mini": "Mini"
},
"key-val": {
"key": "Clave",
"value": "Valor",
- "remove-entry": "Eliminar entrada",
- "add-entry": "Agregar entrada",
- "no-data": "Ninguna entrada"
+ "remove-entry": "Borrar entrada",
+ "add-entry": "Añadir entrada",
+ "no-data": "Sin datos"
},
"layout": {
"layout": "Diseño",
- "manage": "Gestionar diseños",
- "settings": "Configuración de diseño",
+ "manage": "Administrar diseños",
+ "settings": "Ajustes de diseño",
"color": "Color",
"main": "Principal",
- "right": "Derecha",
- "select": "Seleccionar diseño objetivo"
+ "right": "Derecho",
+ "select": "Seleccionar diseño de destino"
},
"legend": {
"direction": "Dirección de la leyenda",
@@ -1213,11 +1308,17 @@
"min": "mínimo",
"max": "máximo",
"avg": "promedio",
- "total": "total"
+ "total": "total",
+ "comparison-time-ago": {
+ "days": "(hace un día)",
+ "weeks": "(hace una semana)",
+ "months": "(hace un mes)",
+ "years": "(hace un año)"
+ }
},
"login": {
- "login": "Iniciar sesión",
- "request-password-reset": "Restablecer contraseña",
+ "login": "Entrar",
+ "request-password-reset": "Solicitar restablecer contraseña",
"reset-password": "Restablecer contraseña",
"create-password": "Crear contraseña",
"passwords-mismatch-error": "¡Las contraseñas introducidas deben ser iguales!",
@@ -1227,12 +1328,14 @@
"remember-me": "Recordarme",
"forgot-password": "¿Olvidó la contraseña?",
"password-reset": "Restablecer contraseña",
+ "expired-password-reset-message": "Tus credenciales han expirado! Por favor, crea una nueva contraseña.",
"new-password": "Nueva contraseña",
"new-password-again": "Repita la nueva contraseña",
- "password-link-sent-message": "¡El enlace para el restablecer la contraseña fue enviado correctamente!",
- "email": "Correo electrónico",
+ "password-link-sent-message": "Se ha enviado el enlace de restablecimiento de contraseña con éxito!",
+ "email": "Email",
"login-with": "Iniciar sesión con {{name}}",
- "or": "o"
+ "or": "o",
+ "error": "Error de login"
},
"position": {
"top": "Superior",
@@ -1257,9 +1360,9 @@
"FROM": "desde",
"TO": "hacia"
},
- "from-relations": "Relaciones salientes",
- "to-relations": "Relaciones entrantes",
- "selected-relations": "{ count, plural, 1 {1 relación} other {# relaciones} } selecciondas",
+ "from-relations": "Relaciones salientes (outbound)",
+ "to-relations": "Relaciones entrantes (inbound)",
+ "selected-relations": "{ count, plural, 1 {1 relación} other {# relaciones} } seleccionadas",
"type": "Tipo",
"to-entity-type": "Hacia tipo de entidad",
"to-entity-name": "Hacia nombre de entidad",
@@ -1267,45 +1370,45 @@
"from-entity-name": "Desde nombre de entidad",
"to-entity": "Hacia entidad",
"from-entity": "Desde entidad",
- "delete": "Eliminar relación",
+ "delete": "Borrar relación",
"relation-type": "Tipo de relación",
- "relation-type-required": "Tipo de relación es requerido.",
- "any-relation-type": "Algún tipo",
- "add": "Agregar relación",
+ "relation-type-required": "Tipo de relación requerido.",
+ "any-relation-type": "Cualquier tipo",
+ "add": "Añadir relación",
"edit": "Editar relación",
- "delete-to-relation-title": "¿Está seguro de que desea eliminar la relación hacia la entidad '{{entityName}}'?",
- "delete-to-relation-text": "¡Cuidado! Después de la confirmación, la entidad '{{entityName}}' no estará relacionada desde la entidad actual.",
- "delete-to-relations-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 relación} other {# relaciones} }?",
- "delete-to-relations-text": "¡Cuidado! Después de la confirmación, se eliminarán todas las relaciones seleccionadas y las entidades correspondientes no estarán relacionadas desde la entidad actual.",
- "delete-from-relation-title": "¿Está seguro de que desea eliminar la relación desde la entidad '{{entityName}}'?",
- "delete-from-relation-text": "¡Cuidado! Después de la confirmación, la entidad actual no será relacionada desde la entidad '{{entityName}}'.",
- "delete-from-relations-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 relación} other {# relaciones} }?",
- "delete-from-relations-text": "¡Cuidado! Después de la confirmación, se eliminarán todas las relaciones seleccionadas y la entidad actual no será relacionada desde las correspondientes entidades.",
- "remove-relation-filter": "Eliminar filtro de relación",
- "add-relation-filter": "Agregar filtro de relación",
- "any-relation": "Alguna relación",
- "relation-filters": "Filtros de relación",
+ "delete-to-relation-title": "¿Estás seguro que quieres eliminar la relación con la entidad '{{entityName}}'?",
+ "delete-to-relation-text": "Atención, tras la confirmación la entidad '{{entityName}}' no estará relacionada con la entidad actual.",
+ "delete-to-relations-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 relación} other {# relaciones} }?",
+ "delete-to-relations-text": "Atención, tras la confirmación todas las relaciones seleccionadas se eliminarán y sus entidades correspondientes no estarán relacionadas con la entidad actual.",
+ "delete-from-relation-title": "¿Estás seguro que quieres eliminar la relación con la entidad '{{entityName}}'?",
+ "delete-from-relation-text": "Atención, tras la confirmación la entidad actual no estará relacionada con la entidad '{{entityName}}'.",
+ "delete-from-relations-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 relación} other {# relaciones} }?",
+ "delete-from-relations-text": "Atención, tras la confirmación todas las relaciones seleccionadas se eliminarán y sus entidades correspondientes no estarán relacionadas con sus entidades correspondientes.",
+ "remove-relation-filter": "Quitar filtro de relación",
+ "add-relation-filter": "Añadir filtro de relación",
+ "any-relation": "Cualquier relación",
+ "relation-filters": "Filtro de relación",
"additional-info": "Información adicional (JSON)",
- "invalid-additional-info": "No se puede analizar información adicional json."
+ "invalid-additional-info": "Error al analizar el fichero JSON de información adicional."
},
"rulechain": {
- "rulechain": "Cadena de reglas",
- "rulechains": "Cadenas de reglas",
+ "rulechain": "Cadena de Regla",
+ "rulechains": "Cadenas de Reglas",
"root": "Raíz",
- "delete": "Eliminar cadena de reglas",
+ "delete": "Borrar cadena de reglas",
"name": "Nombre",
- "name-required": "El nombre es requerido.",
+ "name-required": "Nombre requerido.",
"description": "Descripción",
- "add": "Agregar cadena de reglas",
- "set-root": "Hacer la cadena de reglas raíz",
- "set-root-rulechain-title": "¿Está seguro de que desea hacer la cadena de reglas '{{ruleChainName}}' root?",
- "set-root-rulechain-text": "Después de la confirmación, la cadena de reglas se volverá raíz y manejará todos los mensajes de transporte entrantes.",
- "delete-rulechain-title": "¿Está seguro de que desea eliminar la cadena de reglas '{{ruleChainName}}'?",
- "delete-rulechain-text": "¡Cuidado! Después de la confirmación, la cadena de reglas y todos los datos relacionados serán irrecuperables.",
- "delete-rulechains-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas} }?",
+ "add": "Añadir Cadena",
+ "set-root": "Hacer la cadena de reglas Raíz",
+ "set-root-rulechain-title": "¿Estás seguro de que desea hacer la cadena de reglas '{{ruleChainName}}' de tipo raíz?",
+ "set-root-rulechain-text": "Tras la confirmación, la cadena de reglas se volverá raíz y manejará todos los mensajes de transporte entrantes.",
+ "delete-rulechain-title": "¿Estás seguro que quieres eliminar la cadena de reglas '{{ruleChainName}}'?",
+ "delete-rulechain-text": "Atención, tras la confirmación la cadena de reglas y todos los datos serán irrecuperables.",
+ "delete-rulechains-title": "¿Está seguro que quieres eliminar { count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas} }?",
"delete-rulechains-action-title": "Eliminar { count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas} }",
- "delete-rulechains-text": "¡Cuidado! Después de la confirmación se eliminarán todas las cadenas de reglas seleccionadas y todos los datos relacionados serán irrecuperables.",
- "add-rulechain-text": "Agregar nueva cadena de reglas",
+ "delete-rulechains-text": "Atención, tras la confirmación todas las cadena de reglas seleccionadas y todos sus datos serán irrecuperables.",
+ "add-rulechain-text": "Añadir nueva cadena de reglas",
"no-rulechains-text": "Cadenas de reglas no encontradas",
"rulechain-details": "Detalles de la cadena de reglas",
"details": "Detalles",
@@ -1315,22 +1418,22 @@
"export": "Exportar cadena de reglas",
"export-failed-error": "No se puede exportar la cadena de reglas: {{error}}",
"create-new-rulechain": "Crear nueva cadena de reglas",
- "rulechain-file": "Archivo de la cadena de reglas",
+ "rulechain-file": "Fichero de cadena de reglas",
"invalid-rulechain-file-error": "No se puede importar la cadena de reglas: Estructura de datos de la cadena de reglas inválida.",
"copyId": "Copiar ID de la cadena de reglas",
"idCopiedMessage": "ID de la cadena de reglas ha sido copiada al portapapeles",
"select-rulechain": "Seleccionar cadena de reglas",
- "no-rulechains-matching": "Cadenas de reglas que coincidan con '{{entity}}' no fueron encontradas.",
- "rulechain-required": "Cadena de reglas es requerida",
+ "no-rulechains-matching": "No se encontraron cadenas de reglas que coincidan con '{{entity}}' .",
+ "rulechain-required": "Cadena de reglas requerida",
"management": "Gestión de reglas",
- "debug-mode": "Mode de depuración"
+ "debug-mode": "Modo Debug"
},
"rulenode": {
"details": "Detalles",
"events": "Eventos",
- "search": "Nodos de búsqueda",
+ "search": "Buscar nodos",
"open-node-library": "Abrir librería de nodos",
- "add": "Agregar nodo de reglas",
+ "add": "Añadir nodo de reglas",
"name": "Nombre",
"name-required": "El nombre es requerido.",
"type": "Tipo",
@@ -1342,9 +1445,9 @@
"delete-selected": "Eliminar seleccionado",
"select-all": "Seleccionar todos",
"copy-selected": "Copiar seleccionado",
- "deselect-all": "Deshace selección de todos",
+ "deselect-all": "Deshacer selección de todos",
"rulenode-details": "Detalles del nodo de reglas",
- "debug-mode": "Modo de depuración",
+ "debug-mode": "Modo Debug",
"configuration": "Configuración",
"link": "Enlace",
"link-details": "Detalles del enlace del nodo de reglas",
@@ -1355,7 +1458,7 @@
"custom-link-label-required": "Etiqueta del enlace personalizado es requerida.",
"link-labels": "Etiquetas del enlace",
"link-labels-required": "Etiquetas del enlace son requeridas.",
- "no-link-labels-found": "No se encontraron etiquetas de enlaces",
+ "no-link-labels-found": "Etiquetas de enlaces no encontradas",
"no-link-label-matching": "'{{label}}' no encontrada.",
"create-new-link-label": "Crear una nueva!",
"type-filter": "Filtro",
@@ -1369,52 +1472,62 @@
"type-external": "Externo",
"type-external-details": "Interactuar con sistemas externos",
"type-rule-chain": "Cadena de reglas",
- "type-rule-chain-details": "Reenvía los mensajes entrantes a la cadena de reglas especificada",
+ "type-rule-chain-details": "Reenvíar los mensajes entrantes a la cadena de reglas especificada",
"type-input": "Entrada",
"type-input-details": "Entrada lógica de la Cadena de Reglas, reenvíar los mensajes entrantes al siguiente nodo de regla relacionado.",
"type-unknown": "Desconocido",
"type-unknown-details": "Regla de nodo no resuelta",
"directive-is-not-loaded": "La directiva de configuración definida '{{directiveName}}' no está disponible.",
"ui-resources-load-error": "Error al cargar los recursos de configuración ui.",
- "invalid-target-rulechain": "¡No se puede resolver la cadena de reglas objetivo!",
- "test-script-function": "Probar función script",
+ "invalid-target-rulechain": "No se puede resolver la cadena de reglas objetivo!",
+ "test-script-function": "Probar Script Función",
"message": "Mensaje",
"message-type": "Tipo de mensaje",
"select-message-type": "Seleccionar tipo de mensaje",
"message-type-required": "Tipo de mensaje es requerido",
"metadata": "Metadatos",
- "metadata-required": "La entradas de matadatos no pueden estar vacías.",
+ "metadata-required": "La entradas de metadatos no pueden estar vacías.",
"output": "Salida",
- "test": "Prueba",
+ "test": "Test",
"help": "Ayuda",
"reset-debug-mode": "Restablecer el modo de depuración en todos los nodos"
},
+ "queue": {
+ "select_name": "Selecciona el nombre de la cola",
+ "name": "Nombre Cola",
+ "name_required": "Necesario especificar el nombre de cola"
+
+ },
"tenant": {
- "tenant": "Organización",
- "tenants": "Organizaciones",
- "management": "Gestión de la organización",
- "add": "Agregar organización",
- "admins": "Administradores",
- "manage-tenant-admins": "Gestionar administradores de la organización",
- "delete": "Eliminar organización",
- "add-tenant-text": "Agregar nueva organización",
- "no-tenants-text": "Organizaciones no encontradas",
- "tenant-details": "Detalles de la organización",
- "delete-tenant-title": "¿Está seguro de que desea eliminar la organización '{{tenantTitle}}'?",
- "delete-tenant-text": "¡Cuidado! Después de la confirmación, la organización y todos los datos relacionados serán irrecuperables.",
- "delete-tenants-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 organización} other {# organizaciones} }?",
- "delete-tenants-action-title": "Eliminar { count, plural, 1 {1 organización} other {# organizaciones} }",
- "delete-tenants-text": "¡Cuidado! Después de la confirmación se eliminarán todas las organizaciones seleccionadas y todos los datos relacionados serán irrecuperables.",
+ "tenant": "Propietario",
+ "tenants": "Propietarios",
+ "management": "Gestión de Propietarios",
+ "add": "Agregar propietario",
+ "admins": "Admins",
+ "manage-tenant-admins": "Gestionar administradores de propietario",
+ "delete": "Eliminar propietario",
+ "add-tenant-text": "Agregar nuevo propietario",
+ "no-tenants-text": "Ningún propietario encontrado",
+ "tenant-details": "Detalles del propietario",
+ "delete-tenant-title": "¿Estás seguro que quieres eliminar el propietario '{{tenantTitle}}'?",
+ "delete-tenant-text": "Atención, tras la confirmación el propietario será eliminado y la información relacionada será irrecuperable.",
+ "delete-tenants-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 propietario} other {# propietarios} }?",
+ "delete-tenants-action-title": "Eliminar { count, plural, 1 {1 propietario} other {# propietarios} }",
+ "delete-tenants-text": "Atención, tras la confirmación los propietarios seleccionados serán eliminados y la información relacionada será irrecuperable.",
"title": "Título",
- "title-required": "Título es requerido.",
+ "title-required": "Título requerido.",
"description": "Descripción",
"details": "Detalles",
"events": "Eventos",
- "copyId": "Copiar ID de la organización",
- "idCopiedMessage": "ID de la organización ha sido copiado al portapapeles",
- "select-tenant": "Seleccionar organización",
- "no-tenants-matching": "No se encontraron organizaciones que coincidan con '{{entity}}'.",
- "tenant-required": "Organización es requerida"
+ "copyId": "Copiar ID de propietario",
+ "idCopiedMessage": "El ID de propietario se ha copiado al portapapeles",
+ "select-tenant": "Seleccionar propietario",
+ "no-tenants-matching": "No hay propietarios que coincidan con '{{entity}}' .",
+ "tenant-required": "Propietario requerido",
+ "isolated-tb-core": "Procesando en contenedor aislado",
+ "isolated-tb-rule-engine": "Procesando en contenedor Motor de Reglas aislado",
+ "isolated-tb-core-details": "Requiere microservicios separados por propietario aislado",
+ "isolated-tb-rule-engine-details": "Requiere microservicios separados por propietario aislado"
},
"timeinterval": {
"seconds-interval": "{ seconds, plural, 1 {1 segundo} other {# segundos} }",
@@ -1432,58 +1545,58 @@
"hours": "{ hours, plural, 0 { horas } 1 {1 hora } other {# horas } }",
"minutes": "{ minutes, plural, 0 { minutos } 1 {1 minuto } other {# minutos } }",
"seconds": "{ seconds, plural, 0 { segundos } 1 {1 segundo } other {# segundos } }",
- "realtime": "Tiempo real",
- "history": "Historia",
+ "realtime": "Tiempo-real",
+ "history": "Histórico",
"last-prefix": "último(s)",
"period": "desde {{ startTime }} hasta {{ endTime }}",
"edit": "Editar ventana de tiempo",
- "date-range": "Rango de fecha",
- "last": "Último(s)",
+ "date-range": "Rango de fechas",
+ "last": "Últimos(s)",
"time-period": "Período de tiempo",
"hide": "Ocultar"
},
"user": {
"user": "Usuario",
"users": "Usuarios",
- "customer-users": "Usuarios cliente",
- "tenant-admins": "Administradores de la Organización",
- "sys-admin": "Administrador del sistema",
- "tenant-admin": "Administrador de la organización",
+ "customer-users": "Usuarios del Cliente",
+ "tenant-admins": "Admins propietarios",
+ "sys-admin": "Administrador del Sistema",
+ "tenant-admin": "Administrador Propietario",
"customer": "Cliente",
"anonymous": "Anónimo",
- "add": "Agregar Usuario",
+ "add": "Agregar usuario",
"delete": "Eliminar usuario",
"add-user-text": "Agregar nuevo usuario",
- "no-users-text": "No se encontraron usuarios",
- "user-details": "Detalles de usuario",
- "delete-user-title": "¿Está seguro de que desea eliminar el usuario '{{userEmail}}'?",
- "delete-user-text": "¡Cuidado! Después de la confirmación, el usuario y todos los datos relacionados serán irrecuperables.",
- "delete-users-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 usuario} other {# usuarios} }?",
+ "no-users-text": "Ningún usuario encontrado",
+ "user-details": "Detalles del usuario",
+ "delete-user-title": "¿Estás seguro que quieres eliminar el usuario '{{userEmail}}'?",
+ "delete-user-text": "Atención, tras la confirmación el usuario seleccionado será eliminado y la información relacionada será irrecuperable.",
+ "delete-users-title": "¿Estás seguro que quieres eliminar { count, plural, 1 {1 usuario} other {# usuarios} }?",
"delete-users-action-title": "Borrar { count, plural, 1 {1 usuario} other {# usuarios} }",
- "delete-users-text": "¡Cuidado! Después de la confirmación se eliminarán todas los usuarios seleccionados y todos los datos relacionados serán irrecuperables.",
- "activation-email-sent-message": "¡Correo electrónico de activación fue enviado correctamente!",
+ "delete-users-text": "Atención, tras la confirmación los usuarios seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "activation-email-sent-message": "Mail de activación enviado con éxito!",
"resend-activation": "Reenviar activación",
- "email": "Correo electrónico",
- "email-required": "Correo electrónico es requerido.",
- "invalid-email-format": "Formato de correo electrónico inválido.",
+ "email": "Email",
+ "email-required": "Email requerido.",
+ "invalid-email-format": "Formato de email no válido.",
"first-name": "Nombre",
"last-name": "Apellido",
"description": "Descripción",
- "default-dashboard": "Panel predeterminado",
- "always-fullscreen": "Siempre pantalla completa",
+ "default-dashboard": "Panel por defecto",
+ "always-fullscreen": "Siempre en pantalla completa",
"select-user": "Seleccionar usuario",
- "no-users-matching": "Usuarios que coincidan con '{{entity}}' no fueron encontrados.",
- "user-required": "Usuario es requerido",
+ "no-users-matching": "No se han encontrado usuarios coindiendo con '{{entity}}' .",
+ "user-required": "Usuario requerido",
"activation-method": "Método de activación",
"display-activation-link": "Mostrar enlace de activación",
- "send-activation-mail": "Enviar correo electrónico de activación",
- "activation-link": "Enlace de activación de usuario",
- "activation-link-text": "Para activar el usuario, utilice el siguiente enlace de activación :",
+ "send-activation-mail": "Enviar mail de activación",
+ "activation-link": "Enlace de activacion de usuario",
+ "activation-link-text": "Para activar el usuario, usa el siguiente enlace: Activar Usuario :",
"copy-activation-link": "Copiar enlace de activación",
- "activation-link-copied-message": "El enlace de activación de usuario ha sido copiado al portapapeles",
+ "activation-link-copied-message": "El enlace de activación se ha copiado al portapapeles",
"details": "Detalles",
- "login-as-tenant-admin": "Iniciar sesión como Administrador de la Organización",
- "login-as-customer-user": "Iniciar sesión como Usuario cliente",
+ "login-as-tenant-admin": "Iniciar sesión como Administrador Propietario",
+ "login-as-customer-user": "Iniciar sesión como Usuario Cliente",
"disable-account": "Deshabilitar cuenta de usuario",
"enable-account": "Habilitar cuenta de usuario",
"enable-account-message": "¡La cuenta de usuario se ha habilitado correctamente!",
@@ -1491,160 +1604,163 @@
},
"value": {
"type": "Tipo de valor",
- "string": "Cadena de caracteres",
- "string-value": "Valor de la cadena de caracteres",
- "integer": "Entero",
- "integer-value": "Valor entero",
- "invalid-integer-value": "Valor de entero inválido",
- "double": "Doble",
- "double-value": "Valor doble",
+ "string": "Cadena de texto",
+ "string-value": "Valor de cadena de texto",
+ "integer": "Nro entero",
+ "integer-value": "Valor de nro entero",
+ "invalid-integer-value": "Valor inválido",
+ "double": "Nro decimal",
+ "double-value": "Valor nro decimal",
"boolean": "Booleano",
"boolean-value": "Valor booleano",
"false": "Falso",
"true": "Verdadero",
- "long": "Largo"
+ "long": "Nro Largo",
+ "json": "JSON",
+ "json-value": "Valor JSON"
},
"widget": {
- "widget-library": "Librería de widgets",
- "widget-bundle": "Paquete de widgets",
+ "widget-library": "Bibloteca de Widgets",
+ "widget-bundle": "Paquetes de Widgets",
"select-widgets-bundle": "Seleccionar paquete de widgets",
- "management": "Gestión de widget",
- "editor": "Editor de Widget",
- "widget-type-not-found": "Problema cargando configuración de widget. Probablemente el tipo de widget asociado fue eliminado.",
- "widget-type-load-error": "El widget no fue cargado debido a los siguientes errores:",
+ "management": "Gestión de Widgets",
+ "editor": "Editor de widgets",
+ "widget-type-not-found": "Problema al cargar la configuración del widget. Probablemente asociado\n El tipo de widget fue eliminado.",
+ "widget-type-load-error": "El widget no pudo ser cargado debido a estos errores:",
"remove": "Eliminar widget",
"edit": "Editar widget",
- "remove-widget-title": "¿Está seguro de que desea eliminar el widget '{{widgetTitle}}'?",
- "remove-widget-text": "Después de la confirmación, el widget y todos los datos relacionados serán irrecuperables.",
- "timeseries": "Series temporales",
+ "remove-widget-title": "¿Estás seguro que quieres eliminar el widget '{{widgetTitle}}'?",
+ "remove-widget-text": "Atención, tras la confirmación el widget será eliminado y toda la información relacionada será irrecuperable..",
+ "timeseries": "Series de tiempo",
"search-data": "Buscar datos",
- "no-data-found": "No se encontraron datos",
+ "no-data-found": "No se han encontrado datos",
"latest-values": "Últimos valores",
"rpc": "Widget de control",
- "alarm": "Widget de alarma",
+ "alarm": "Widget de Alarma",
"static": "Widget estático",
"select-widget-type": "Seleccionar tipo de widget",
- "missing-widget-title-error": "¡Título del widget debe ser especificado!",
+ "missing-widget-title-error": "El titulo del widget debe ser especificado!",
"widget-saved": "Widget guardado",
- "unable-to-save-widget-error": "¡No se puede guardar widget! ¡El widget tiene errores!",
+ "unable-to-save-widget-error": "Imposible guardar widget! Tiene errores!",
"save": "Guardar widget",
"saveAs": "Guardar widget como",
"save-widget-type-as": "Guardar tipo de widget como",
- "save-widget-type-as-text": "Por favor escriba el nuevo título del widget y/o seleccionar paquete de widgets objetivo",
- "toggle-fullscreen": "Alternar pantalla completa",
+ "save-widget-type-as-text": "Por favor, ingrese un nuevo titulo y/o seleccione un paquete de destino.",
+ "toggle-fullscreen": "Cambiar a pantalla completa",
"run": "Ejecutar widget",
- "title": "Título del widget",
- "title-required": "Título del widget es requerido.",
- "type": "Tipo de widget",
+ "title": "Título",
+ "title-required": "Título requerido.",
+ "type": "Tipo",
"resources": "Recursos",
"resource-url": "URL JavaScript/CSS",
"remove-resource": "Eliminar recurso",
"add-resource": "Agregar recurso",
"html": "HTML",
- "tidy": "Formatear",
+ "tidy": "Tidy",
"css": "CSS",
"settings-schema": "Esquema de configuración",
"datakey-settings-schema": "Esquema de configuración de clave de datos",
"javascript": "Javascript",
"js": "JS",
- "remove-widget-type-title": "¿Está seguro de que desea eliminar el tipo de widget '{{widgetName}}'?",
- "remove-widget-type-text": "Después de la confirmación, el tipo de widget y todos los datos relacionados serán irrecuperables.",
- "remove-widget-type": "Eliminar tipo de widget",
+ "remove-widget-type-title": "¿Estás seguro que quieres eliminar el tipo del widget '{{widgetName}}'?",
+ "remove-widget-type-text": "Atención, tras la confirmación el tipo será eliminado y la información relacionada será irrecuperable.",
+ "remove-widget-type": "Eliminar tipo de widget.",
"add-widget-type": "Agregar nuevo tipo de widget",
- "widget-type-load-failed-error": "¡Error al cargar el tipo de widget!",
- "widget-template-load-failed-error": "¡Error al cargar la plantilla del widget!",
- "add": "Agregar widget",
- "undo": "Deshacer cambios en el widget",
+ "widget-type-load-failed-error": "Error al cargar el tipo de widget!",
+ "widget-template-load-failed-error": "Error al cargar la plantilla del widget!",
+ "add": "Agregar Widget",
+ "undo": "Deshacer cambios",
"export": "Exportar widget"
},
"widget-action": {
- "header-button": "Botón del encabezado del widget",
- "open-dashboard-state": "Navegar a nuevo estado del panel",
- "update-dashboard-state": "Actualizar estado vigente del panel",
- "open-dashboard": "Navegar a otro panel",
+ "header-button": "Botón de encabezado widget",
+ "open-dashboard-state": "Navegar a un nuevo estado de panel",
+ "update-dashboard-state": "Actualizar el estado del panel actual",
+ "open-dashboard": "Navegar hacia otro panel",
"custom": "Acción personalizada",
- "target-dashboard-state": "Estado del panel objetivo",
- "target-dashboard-state-required": "Estado del panel objetivo es requerido",
- "set-entity-from-widget": "Asignar entidad desde widget",
- "target-dashboard": "Panel objetivo",
- "open-right-layout": "Abrir diseño del panel derecho (vista móvil)"
+ "custom-pretty": "Acción personalizada (con plantilla HTML)",
+ "target-dashboard-state": "Estado de panel de destino",
+ "target-dashboard-state-required": "Se requiere estado de panel de destino",
+ "set-entity-from-widget": "Establecer entidad desde widget",
+ "target-dashboard": "Panel de destino",
+ "open-right-layout": "Abrir diseño de panel (derecho)(vista móvil)"
},
"widgets-bundle": {
"current": "Paquete actual",
- "widgets-bundles": "Paquetes de widgets",
+ "widgets-bundles": "Paquete de Widgets",
"add": "Agregar paquete de widgets",
"delete": "Eliminar paquete de widgets",
"title": "Título",
- "title-required": "Título es requerido.",
+ "title-required": "Título requerido.",
"add-widgets-bundle-text": "Agregar nuevo paquete de widgets",
- "no-widgets-bundles-text": "No se encontraron paquetes de widgets",
- "empty": "Paquete de widgets está vacío",
+ "no-widgets-bundles-text": "Ningún paquete de widgets encontrado",
+ "empty": "Paquete de widgets vacío.",
"details": "Detalles",
- "widgets-bundle-details": "Detalles del paquete de widgets",
- "delete-widgets-bundle-title": "¿Está seguro de que desea eliminar el paquete de widgets '{{widgetsBundleTitle}}'?",
- "delete-widgets-bundle-text": "¡Cuidado! Después de la confirmación, el paquete de widgets y todos los datos relacionados serán irrecuperables.",
- "delete-widgets-bundles-title": "¿Está seguro de que desea eliminar { count, plural, 1 {1 paquete de widgets} other {# paquetes de widgets} }?",
+ "widgets-bundle-details": "Detalles del paquete de Widgets",
+ "delete-widgets-bundle-title": "¿Estás seguro que quieres eliminar el paquete de widgets '{{widgetsBundleTitle}}'?",
+ "delete-widgets-bundle-text": "Atención, tras la confirmación todos los paquetes seleccionados serán eliminados y su información relacionada será irrecuperable.",
+ "delete-widgets-bundles-title": "¿Estás seguro que deseas eliminar { count, plural, 1 {1 paquete de widgets} other {# paquetes de widgets} }?",
"delete-widgets-bundles-action-title": "Eliminar { count, plural, 1 {1 paquete de widgets} other {# paquetes de widgets} }",
- "delete-widgets-bundles-text": "¡Cuidado! Después de la confirmación se eliminarán todas los paquetes de widgets seleccionados y todos los datos relacionados serán irrecuperables.",
- "no-widgets-bundles-matching": "Paquetes de widgets que coincidan con '{{widgetsBundle}}' no fueron encontrados.",
- "widgets-bundle-required": "Paquete de widgets es requerido.",
- "system": "Sistema",
+ "delete-widgets-bundles-text": "Atención, tras la confirmación todos los paquetes seleccionados serán eliminados y la información relacionada será irrecuperable.",
+ "no-widgets-bundles-matching": "Ningún paquete '{{widgetsBundle}}' encontrado.",
+ "widgets-bundle-required": "Paquete de widget requerido.",
+ "system": "Widget de Sistema",
"import": "Importar paquete de widgets",
"export": "Exportar paquete de widgets",
- "export-failed-error": "No se puede exportar paquete de widgets: {{error}}",
+ "export-failed-error": "Imposible exportar paquete de widgets: {{error}}",
"create-new-widgets-bundle": "Crear nuevo paquete de widgets",
"widgets-bundle-file": "Archivo de paquete de widgets",
- "invalid-widgets-bundle-file-error": "No se puede importar paquete de widgets: Estructura de datos del paquete de widgets inválida."
+ "invalid-widgets-bundle-file-error": "Imposible importar paquete de widgets: Estructura de datos inválida."
},
"widget-config": {
"data": "Datos",
- "settings": "Configuración",
+ "settings": "Ajustes",
"advanced": "Avanzado",
- "title": "Título",
+ "title": "Titulo",
"title-tooltip": "Tooltip Título",
- "general-settings": "Configuración general",
- "display-title": "Mostrar título",
- "drop-shadow": "Colocar sombra",
+ "general-settings": "Ajustes generales",
+ "display-title": "Mostrar titulo",
+ "drop-shadow": "Sombra",
"enable-fullscreen": "Habilitar pantalla completa",
"background-color": "Color de fondo",
"text-color": "Color del texto",
"padding": "Relleno",
"margin": "Margen",
- "widget-style": "Estilo del widget",
- "title-style": "Estilo del título",
- "mobile-mode-settings": "Configuración del modo móvil",
+ "widget-style": "Estilo de widget",
+ "title-style": "Estilo de título",
+ "mobile-mode-settings": "Ajustes móvil.",
"order": "Orden",
"height": "Altura",
- "units": "Símbolo especial para mostrar junto al valor.",
- "decimals": "Número de dígitos después del punto flotante",
+ "units": "Caracter especial a mostrar en el siguiente valor",
+ "decimals": "Números de dígitos después de la coma",
"timewindow": "Ventana de tiempo",
- "use-dashboard-timewindow": "Utilizar ventana de tiempo del panel",
+ "use-dashboard-timewindow": "Usar ventana de tiempo del Panel",
"display-timewindow": "Mostrar ventana de tiempo",
"display-legend": "Mostrar leyenda",
- "datasources": "Orígenes de datos",
- "maximum-datasources": "Máximo { count, plural, 1 {1 origen de datos permitido.} other {# orígenes de datos permitidos} }",
+ "datasources": "Set de datos",
+ "maximum-datasources": "Un máximo de { count, plural, 1 {1 set de datos es permitido.} other {# set de datos son permitidos} }",
"datasource-type": "Tipo",
"datasource-parameters": "Parámetros",
- "remove-datasource": "Eliminar origen de datos",
- "add-datasource": "Agregar origen de datos",
- "target-device": "Dispositivo objetivo",
- "alarm-source": "Origen de la alarma",
+ "remove-datasource": "Eliminar set de datos",
+ "add-datasource": "Agregar set de datos",
+ "target-device": "Dispositivo destino",
+ "alarm-source": "Origen de alarmas",
"actions": "Acciones",
"action": "Acción",
- "add-action": "Agregar acción",
+ "add-action": "Añadir acción",
"search-actions": "Buscar acciones",
"action-source": "Origen de acción",
- "action-source-required": "Fuente de acción es requerida.",
+ "action-source-required": "Origen de acción requerido.",
"action-name": "Nombre",
- "action-name-required": "Nombre de acción es requerido.",
- "action-name-not-unique": "Ya existe otra acción con el mismo nombre. El nombre de la acción debe ser único dentro del mismo orígen de acción.",
+ "action-name-required": "Nombre de accion requerido.",
+ "action-name-not-unique": "Existe una acción con el mismo nombre. El nombre de acción debe ser único dentro de la misma fuente de acción (origen).",
"action-icon": "Icono",
"action-type": "Tipo",
- "action-type-required": "Tipo de acción es requerido.",
+ "action-type-required": "Tipo de acción requerido.",
"edit-action": "Editar acción",
- "delete-action": "Eliminar acción",
- "delete-action-title": "Eliminar acción del widget",
- "delete-action-text": "¿Está seguro de que desea eliminar la acción del widget con nombre '{{actionName}}'?",
+ "delete-action": "Borrar acción",
+ "delete-action-title": "Borrar acción de widget",
+ "delete-action-text": "Estás seguro de borrar la acción de widget con el nombre '{{actionName}}'?",
"display-icon": "Mostrar icono del título",
"icon-color": "Color del icono",
"icon-size": "Tamaño del icono"
@@ -1652,7 +1768,7 @@
"widget-type": {
"import": "Importar tipo de widget",
"export": "Exportar tipo de widget",
- "export-failed-error": "No se puede exportar tipo de widget: {{error}}",
+ "export-failed-error": "Imposible exportar tipo de widget: {{error}}",
"create-new-widget-type": "Crear nuevo tipo de widget",
"widget-type-file": "Archivo de tipo de widget",
"invalid-widget-type-file-error": "No se puede importar tipo de widget: Estructura de datos del tipo de widget es inválida."
@@ -1701,7 +1817,7 @@
"Year": "Año",
"This Year": "Este año",
"Last Year": "Último",
- "Date picker": "Date picker",
+ "Date picker": "Selector de fecha",
"Hour": "Hora",
"Day": "Día",
"Week": "Semana",
@@ -1711,23 +1827,38 @@
"6 months": "6 Meses",
"Custom interval": "Intervalo personalizado",
"Interval": "Intervalo",
- "Step size": "Numero de pie",
+ "Step size": "Número de pasos",
"Ok": "De acuerdo"
}
},
"input-widgets": {
"attribute-not-allowed": "El parámetro de atributo no se puede usar en este widget",
+ "blocked-location": "La función de geolocalización está bloqueada en tu navegador",
+ "claim-device": "Reclamar dispositivo",
+ "claim-failed": "Error al reclamar dispositivo!",
+ "claim-not-found": "Dispositivo no encontrado!",
+ "claim-successful": "Dispositivo reclamado correctamente!",
"date": "Fecha",
+ "device-name": "Nombre del dispositivo",
+ "device-name-required": "Se requere nombre de dispositivo",
"discard-changes": "Descartar los cambios",
"entity-attribute-required": "Se requiere atributo de entidad",
+ "entity-coordinate-required": "Se requieren ambos campos (latitud y longitud)",
"entity-timeseries-required": "Se requiere la serie de tiempo de la entidad",
+ "get-location": "Obtener localización actual",
+ "latitude": "Latitud",
+ "longitude": "Longitud",
"not-allowed-entity": "La entidad seleccionada no puede tener atributos compartidos",
"no-attribute-selected": "No se seleccionó ningún atributo",
"no-datakey-selected": "No se seleccionó ninguna clave de datos",
+ "no-coordinate-specified": "No se ha especificado la clave para latitud/longitud",
"no-entity-selected": "Ninguna entidad seleccionada",
- "no-image": "Sin imágen",
+ "no-image": "Sin imagen",
+ "no-support-geolocation": "Tu navegador no soporta geolocalización",
"no-support-web-camera": "No hay cámara web compatible",
"no-timeseries-selected": "No hay series de tiempo seleccionadas",
+ "secret-key": "Clave",
+ "secret-key-required": "Clave requerida",
"switch-attribute-value": "Cambiar el valor del atributo de entidad",
"switch-camera": "Cambiar de cámara",
"switch-timeseries-value": "Cambiar el valor de la serie de tiempo de la entidad",
@@ -1743,17 +1874,17 @@
},
"icon": {
"icon": "Icono",
- "select-icon": "Seleccionar icono",
- "material-icons": "Iconos de material design",
+ "select-icon": "Seleccionar iconos",
+ "material-icons": "Iconos material-design",
"show-all": "Mostrar todos los iconos"
},
"custom": {
"widget-action": {
- "action-cell-button": "Botón de acción de celda",
- "row-click": "Clic en la fila",
- "polygon-click": "Clic en la fila",
- "marker-click": "Clic en el polígono",
- "tooltip-tag-action": "Acción de etiqueta para globo de ayuda",
+ "action-cell-button": "Acción botón de celda",
+ "row-click": "En click de fila",
+ "polygon-click": "Clic en polígono",
+ "marker-click": "En click de marcador",
+ "tooltip-tag-action": "Acción de la etiqueta Tooltip",
"node-selected": "Clic en el nodo seleccionado",
"element-click": "Clic en el elemento HTML",
"pie-slice-click": "Clic en la rebanada",
diff --git a/ui-ngx/src/assets/locale/locale.constant-ru_RU.json b/ui-ngx/src/assets/locale/locale.constant-ru_RU.json
index bab457052c..5e0dca82aa 100644
--- a/ui-ngx/src/assets/locale/locale.constant-ru_RU.json
+++ b/ui-ngx/src/assets/locale/locale.constant-ru_RU.json
@@ -1580,7 +1580,7 @@
},
"widget-action": {
"header-button": "Кнопка заголовка виджета",
- "open-dashboard-state": "Перейти к новомум состоянию дашборда",
+ "open-dashboard-state": "Перейти к новому состоянию дашборда",
"update-dashboard-state": "Обновить текущее состояние дашборда",
"open-dashboard": "Перейти к другому дашборду",
"custom": "Пользовательское действие",
diff --git a/ui-ngx/src/styles.scss b/ui-ngx/src/styles.scss
index ba963eb075..e253727727 100644
--- a/ui-ngx/src/styles.scss
+++ b/ui-ngx/src/styles.scss
@@ -416,6 +416,58 @@ mat-label {
}
}
+.tb-ace-doc-tooltip {
+ code {
+ color: #444;
+ &.title {
+ font-size: 14px;
+ }
+ }
+ div.tb-function-info {
+ font-size: 14px;
+ }
+ div.tb-function-return {
+ font-size: 1rem;
+ letter-spacing: 0.03rem;
+ color: #444;
+ code {
+ font-size: 14px;
+ letter-spacing: normal;
+ }
+ }
+ div.tb-api-title {
+ font-weight: bold;
+ font-size: 16px;
+ color: #6e6e6e;
+ padding-top: 12px;
+ padding-bottom: 12px;
+ }
+ table.tb-api-table {
+ width: 100%;
+ border-collapse: collapse;
+ tr {
+ border-bottom: 1px solid #a8a8a8;
+ &:last-child {
+ border-bottom: none;
+ }
+ td {
+ font-size: 14px;
+ line-height: 1.6rem;
+ &:first-child {
+ font-weight: 600;
+ padding-left: 16px;
+ width: 20%;
+ }
+ &.arg-description {
+ font-size: 1rem;
+ letter-spacing: .03rem;
+ color: #444;
+ }
+ }
+ }
+ }
+}
+
.tb-default, .tb-dark {
/*********************************
@@ -812,7 +864,6 @@ mat-label {
min-width: 100%;
display: flex;
flex-direction: column;
- overflow: auto;
}
.mat-dialog-content {
margin: 0;
@@ -862,7 +913,7 @@ mat-label {
.mat-dialog-container {
> *:first-child, form {
min-width: 100% !important;
- height: 100vh;
+ height: 100%;
}
.mat-dialog-content {
max-height: 100%;
diff --git a/ui/.babelrc b/ui/.babelrc
deleted file mode 100644
index bbda4fe421..0000000000
--- a/ui/.babelrc
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "presets": [
- "@babel/preset-react",
- "@babel/preset-env"
- ],
- "plugins": [
- "react-hot-loader/babel"
- ]
-}
diff --git a/ui/.eslintrc b/ui/.eslintrc
deleted file mode 100644
index 5b8920d93d..0000000000
--- a/ui/.eslintrc
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": [
- "eslint:recommended",
- "plugin:import/errors",
- "plugin:import/warnings",
- "angular"
- ],
- "parser": "babel-eslint",
- "settings": {
- "import/ignore": [
- "node_modules",
- "\\.tpl\\.html$"
- ]
- },
- "globals": {
- "FileReader": true
- }
-}
diff --git a/ui/.gitignore b/ui/.gitignore
deleted file mode 100644
index 09daa48c35..0000000000
--- a/ui/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules
-.tern-project
diff --git a/ui/.jshintrc b/ui/.jshintrc
deleted file mode 100644
index 6f00218e37..0000000000
--- a/ui/.jshintrc
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "globalstrict": true,
- "globals": {
- "angular": false,
- "describe": false,
- "it": false,
- "expect": false,
- "beforeEach": false,
- "afterEach": false,
- "module": false,
- "inject": false
- }
-}
\ No newline at end of file
diff --git a/ui/.stylelintrc b/ui/.stylelintrc
deleted file mode 100644
index e878729b53..0000000000
--- a/ui/.stylelintrc
+++ /dev/null
@@ -1,292 +0,0 @@
-{
- "extends": ["stylelint-config-standard", "stylelint-config-recommended-scss"],
- "plugins": [
- "stylelint-order"
- ],
- "rules": {
- "at-rule-empty-line-before": ["always", {
- "except": ["first-nested"],
- "ignore": ["after-comment"]
- }],
- "at-rule-name-space-after": "always",
- "at-rule-no-vendor-prefix": true,
- "at-rule-semicolon-space-before": "never",
- "block-closing-brace-empty-line-before": "never",
- "block-closing-brace-newline-after": null,
- "block-opening-brace-space-before": null,
- "color-named": "never",
- "declaration-block-semicolon-newline-after": "always-multi-line",
- "declaration-block-semicolon-newline-before": "never-multi-line",
- "declaration-block-semicolon-space-after": "always-single-line",
- "declaration-empty-line-before": null,
- "declaration-no-important": null,
- "font-family-name-quotes": "always-where-recommended",
- "font-weight-notation": [
- "numeric", {
- "ignore": ["relative"]
- }],
- "function-url-no-scheme-relative": true,
- "function-url-quotes": "always",
- "length-zero-no-unit": true,
- "max-empty-lines": 2,
- "max-line-length": null,
- "media-feature-name-no-vendor-prefix": true,
- "media-feature-parentheses-space-inside": "never",
- "media-feature-range-operator-space-after": "always",
- "media-feature-range-operator-space-before": "never",
- "no-descending-specificity": null,
- "no-duplicate-selectors": true,
- "number-leading-zero": "never",
- "media-feature-name-no-unknown": [true, {
- "ignoreMediaFeatureNames": ["prefers-reduced-motion"]
- }],
- "order/properties-order": [
- "position",
- "top",
- "right",
- "bottom",
- "left",
- "z-index",
- "box-sizing",
- "display",
- "flex",
- "flex-align",
- "flex-basis",
- "flex-direction",
- "flex-wrap",
- "flex-flow",
- "flex-shrink",
- "flex-grow",
- "flex-order",
- "flex-pack",
- "align-content",
- "align-items",
- "align-self",
- "justify-content",
- "order",
- "float",
- "width",
- "min-width",
- "max-width",
- "height",
- "min-height",
- "max-height",
- "padding",
- "padding-top",
- "padding-right",
- "padding-bottom",
- "padding-left",
- "margin",
- "margin-top",
- "margin-right",
- "margin-bottom",
- "margin-left",
- "overflow",
- "overflow-x",
- "overflow-y",
- "-webkit-overflow-scrolling",
- "-ms-overflow-x",
- "-ms-overflow-y",
- "-ms-overflow-style",
- "columns",
- "column-count",
- "column-fill",
- "column-gap",
- "column-rule",
- "column-rule-width",
- "column-rule-style",
- "column-rule-color",
- "column-span",
- "column-width",
- "orphans",
- "widows",
- "clip",
- "clear",
- "font",
- "font-family",
- "font-size",
- "font-style",
- "font-weight",
- "font-variant",
- "font-size-adjust",
- "font-stretch",
- "font-effect",
- "font-emphasize",
- "font-emphasize-position",
- "font-emphasize-style",
- "font-smooth",
- "src",
- "hyphens",
- "line-height",
- "color",
- "text-align",
- "text-align-last",
- "text-emphasis",
- "text-emphasis-color",
- "text-emphasis-style",
- "text-emphasis-position",
- "text-decoration",
- "text-indent",
- "text-justify",
- "text-outline",
- "-ms-text-overflow",
- "text-overflow",
- "text-overflow-ellipsis",
- "text-overflow-mode",
- "text-shadow",
- "text-transform",
- "text-wrap",
- "-webkit-text-size-adjust",
- "-ms-text-size-adjust",
- "letter-spacing",
- "-ms-word-break",
- "word-break",
- "word-spacing",
- "-ms-word-wrap",
- "word-wrap",
- "overflow-wrap",
- "tab-size",
- "white-space",
- "vertical-align",
- "direction",
- "unicode-bidi",
- "list-style",
- "list-style-position",
- "list-style-type",
- "list-style-image",
- "pointer-events",
- "-ms-touch-action",
- "touch-action",
- "cursor",
- "visibility",
- "zoom",
- "table-layout",
- "empty-cells",
- "caption-side",
- "border-spacing",
- "border-collapse",
- "content",
- "quotes",
- "counter-reset",
- "counter-increment",
- "resize",
- "user-select",
- "nav-index",
- "nav-up",
- "nav-right",
- "nav-down",
- "nav-left",
- "background",
- "background-color",
- "background-image",
- "filter",
- "background-repeat",
- "background-attachment",
- "background-position",
- "background-position-x",
- "background-position-y",
- "background-clip",
- "background-origin",
- "background-size",
- "border",
- "border-color",
- "border-style",
- "border-width",
- "border-top",
- "border-top-color",
- "border-top-style",
- "border-top-width",
- "border-right",
- "border-right-color",
- "border-right-style",
- "border-right-width",
- "border-bottom",
- "border-bottom-color",
- "border-bottom-style",
- "border-bottom-width",
- "border-left",
- "border-left-color",
- "border-left-style",
- "border-left-width",
- "border-radius",
- "border-top-left-radius",
- "border-top-right-radius",
- "border-bottom-right-radius",
- "border-bottom-left-radius",
- "border-image",
- "border-image-source",
- "border-image-slice",
- "border-image-width",
- "border-image-outset",
- "border-image-repeat",
- "outline",
- "outline-width",
- "outline-style",
- "outline-color",
- "outline-offset",
- "box-shadow",
- "opacity",
- "-ms-interpolation-mode",
- "page-break-after",
- "page-break-before",
- "page-break-inside",
- "transition",
- "transition-delay",
- "transition-timing-function",
- "transition-duration",
- "transition-property",
- "transform",
- "transform-origin",
- "perspective",
- "appearance",
- "animation",
- "animation-name",
- "animation-duration",
- "animation-play-state",
- "animation-timing-function",
- "animation-delay",
- "animation-iteration-count",
- "animation-direction",
- "animation-fill-mode",
- "fill",
- "stroke"
- ],
- "property-no-vendor-prefix": true,
- "rule-empty-line-before": ["always", {
- "except": ["first-nested"],
- "ignore": ["after-comment"]
- }],
- "scss/dollar-variable-default": [true, { "ignore": "local" }],
- "selector-attribute-quotes": "always",
- "selector-list-comma-newline-after": "always",
- "selector-list-comma-newline-before": "never-multi-line",
- "selector-list-comma-space-after": "always-single-line",
- "selector-list-comma-space-before": "never-single-line",
- "selector-max-attribute": 2,
- "selector-max-class": 6,
- "selector-max-combinators": 8,
- "selector-max-compound-selectors": 9,
- "selector-max-empty-lines": 1,
- "selector-max-id": 1,
- "selector-max-specificity": null,
- "selector-max-type": 5,
- "selector-max-universal": 1,
- "selector-no-qualifying-type": null,
- "selector-no-vendor-prefix": true,
- "selector-type-no-unknown": [true, {
- "ignoreTypes": [
- "/^md-/",
- "/^mdp-/",
- "/^ng-/",
- "/^tb-/",
- "/^v-pane/"
- ]
- }],
- "string-quotes": "double",
- "value-keyword-case": "lower",
- "value-list-comma-newline-after": "always-multi-line",
- "value-list-comma-newline-before": "never-multi-line",
- "value-list-comma-space-after": "always-single-line",
- "value-no-vendor-prefix": true
- }
-}
diff --git a/ui/package-lock.json b/ui/package-lock.json
deleted file mode 100644
index bd0e0cc260..0000000000
--- a/ui/package-lock.json
+++ /dev/null
@@ -1,14229 +0,0 @@
-{
- "name": "thingsboard",
- "version": "2.4.3",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@babel/cli": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.8.4.tgz",
- "integrity": "sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag==",
- "dev": true,
- "requires": {
- "chokidar": "^2.1.8",
- "commander": "^4.0.1",
- "convert-source-map": "^1.1.0",
- "fs-readdir-recursive": "^1.1.0",
- "glob": "^7.0.0",
- "lodash": "^4.17.13",
- "make-dir": "^2.1.0",
- "slash": "^2.0.0",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true
- }
- }
- },
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
- "@babel/compat-data": {
- "version": "7.8.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.5.tgz",
- "integrity": "sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg==",
- "dev": true,
- "requires": {
- "browserslist": "^4.8.5",
- "invariant": "^2.2.4",
- "semver": "^5.5.0"
- }
- },
- "@babel/core": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz",
- "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helpers": "^7.8.4",
- "@babel/parser": "^7.8.4",
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.4",
- "@babel/types": "^7.8.3",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.0",
- "lodash": "^4.17.13",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
- "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-annotate-as-pure": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
- "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
- "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==",
- "dev": true,
- "requires": {
- "@babel/helper-explode-assignable-expression": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-builder-react-jsx": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz",
- "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3",
- "esutils": "^2.0.0"
- }
- },
- "@babel/helper-call-delegate": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz",
- "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==",
- "dev": true,
- "requires": {
- "@babel/helper-hoist-variables": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz",
- "integrity": "sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.8.4",
- "browserslist": "^4.8.5",
- "invariant": "^2.2.4",
- "levenary": "^1.1.1",
- "semver": "^5.5.0"
- }
- },
- "@babel/helper-create-regexp-features-plugin": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz",
- "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==",
- "dev": true,
- "requires": {
- "@babel/helper-regex": "^7.8.3",
- "regexpu-core": "^4.6.0"
- }
- },
- "@babel/helper-define-map": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz",
- "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.8.3",
- "@babel/types": "^7.8.3",
- "lodash": "^4.17.13"
- }
- },
- "@babel/helper-explode-assignable-expression": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz",
- "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
- "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
- "dev": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
- "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz",
- "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
- "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
- "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz",
- "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/helper-simple-access": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3",
- "lodash": "^4.17.13"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
- "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
- "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
- "dev": true
- },
- "@babel/helper-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz",
- "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.13"
- }
- },
- "@babel/helper-remap-async-to-generator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz",
- "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-wrap-function": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz",
- "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==",
- "dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.8.3",
- "@babel/helper-optimise-call-expression": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
- "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-wrap-function": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
- "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helpers": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz",
- "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.4",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/highlight": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
- "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/node": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.8.4.tgz",
- "integrity": "sha512-MlczXI/VYRnoaWHjicqrzq2z4DhRPaWQIC+C3ISEQs5z+mEccBsn7IAI5Q97ZDTnFYw6ts5IUTzqArilC/g7nw==",
- "dev": true,
- "requires": {
- "@babel/register": "^7.8.3",
- "commander": "^4.0.1",
- "core-js": "^3.2.1",
- "lodash": "^4.17.13",
- "node-environment-flags": "^1.0.5",
- "regenerator-runtime": "^0.13.3",
- "resolve": "^1.13.1",
- "v8flags": "^3.1.1"
- },
- "dependencies": {
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true
- },
- "core-js": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz",
- "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==",
- "dev": true
- },
- "regenerator-runtime": {
- "version": "0.13.3",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
- "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
- "dev": true
- }
- }
- },
- "@babel/parser": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz",
- "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==",
- "dev": true
- },
- "@babel/plugin-proposal-async-generator-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz",
- "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-remap-async-to-generator": "^7.8.3",
- "@babel/plugin-syntax-async-generators": "^7.8.0"
- }
- },
- "@babel/plugin-proposal-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-dynamic-import": "^7.8.0"
- }
- },
- "@babel/plugin-proposal-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz",
- "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.0"
- }
- },
- "@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
- }
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0"
- }
- },
- "@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
- }
- },
- "@babel/plugin-proposal-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.0"
- }
- },
- "@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz",
- "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz",
- "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz",
- "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-arrow-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz",
- "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz",
- "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-remap-async-to-generator": "^7.8.3"
- }
- },
- "@babel/plugin-transform-block-scoped-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz",
- "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-block-scoping": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz",
- "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "lodash": "^4.17.13"
- }
- },
- "@babel/plugin-transform-classes": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz",
- "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-define-map": "^7.8.3",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-optimise-call-expression": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-replace-supers": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "globals": "^11.1.0"
- }
- },
- "@babel/plugin-transform-computed-properties": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz",
- "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-destructuring": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz",
- "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-dotall-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz",
- "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-duplicate-keys": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz",
- "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-exponentiation-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz",
- "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==",
- "dev": true,
- "requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-for-of": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz",
- "integrity": "sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-function-name": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz",
- "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz",
- "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-member-expression-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz",
- "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-modules-amd": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz",
- "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "babel-plugin-dynamic-import-node": "^2.3.0"
- }
- },
- "@babel/plugin-transform-modules-commonjs": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz",
- "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-simple-access": "^7.8.3",
- "babel-plugin-dynamic-import-node": "^2.3.0"
- }
- },
- "@babel/plugin-transform-modules-systemjs": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz",
- "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==",
- "dev": true,
- "requires": {
- "@babel/helper-hoist-variables": "^7.8.3",
- "@babel/helper-module-transforms": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "babel-plugin-dynamic-import-node": "^2.3.0"
- }
- },
- "@babel/plugin-transform-modules-umd": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz",
- "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
- "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.8.3"
- }
- },
- "@babel/plugin-transform-new-target": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz",
- "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-object-super": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz",
- "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-replace-supers": "^7.8.3"
- }
- },
- "@babel/plugin-transform-parameters": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz",
- "integrity": "sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==",
- "dev": true,
- "requires": {
- "@babel/helper-call-delegate": "^7.8.3",
- "@babel/helper-get-function-arity": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-property-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz",
- "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-react-display-name": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz",
- "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-react-jsx": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz",
- "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==",
- "dev": true,
- "requires": {
- "@babel/helper-builder-react-jsx": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-jsx": "^7.8.3"
- }
- },
- "@babel/plugin-transform-react-jsx-self": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz",
- "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-jsx": "^7.8.3"
- }
- },
- "@babel/plugin-transform-react-jsx-source": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz",
- "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-jsx": "^7.8.3"
- }
- },
- "@babel/plugin-transform-regenerator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz",
- "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==",
- "dev": true,
- "requires": {
- "regenerator-transform": "^0.14.0"
- }
- },
- "@babel/plugin-transform-reserved-words": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz",
- "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-shorthand-properties": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz",
- "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz",
- "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-sticky-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz",
- "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-regex": "^7.8.3"
- }
- },
- "@babel/plugin-transform-template-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz",
- "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-typeof-symbol": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz",
- "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-transform-unicode-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz",
- "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/preset-env": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz",
- "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.8.4",
- "@babel/helper-compilation-targets": "^7.8.4",
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-proposal-async-generator-functions": "^7.8.3",
- "@babel/plugin-proposal-dynamic-import": "^7.8.3",
- "@babel/plugin-proposal-json-strings": "^7.8.3",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-proposal-object-rest-spread": "^7.8.3",
- "@babel/plugin-proposal-optional-catch-binding": "^7.8.3",
- "@babel/plugin-proposal-optional-chaining": "^7.8.3",
- "@babel/plugin-proposal-unicode-property-regex": "^7.8.3",
- "@babel/plugin-syntax-async-generators": "^7.8.0",
- "@babel/plugin-syntax-dynamic-import": "^7.8.0",
- "@babel/plugin-syntax-json-strings": "^7.8.0",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
- "@babel/plugin-syntax-optional-chaining": "^7.8.0",
- "@babel/plugin-syntax-top-level-await": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.8.3",
- "@babel/plugin-transform-async-to-generator": "^7.8.3",
- "@babel/plugin-transform-block-scoped-functions": "^7.8.3",
- "@babel/plugin-transform-block-scoping": "^7.8.3",
- "@babel/plugin-transform-classes": "^7.8.3",
- "@babel/plugin-transform-computed-properties": "^7.8.3",
- "@babel/plugin-transform-destructuring": "^7.8.3",
- "@babel/plugin-transform-dotall-regex": "^7.8.3",
- "@babel/plugin-transform-duplicate-keys": "^7.8.3",
- "@babel/plugin-transform-exponentiation-operator": "^7.8.3",
- "@babel/plugin-transform-for-of": "^7.8.4",
- "@babel/plugin-transform-function-name": "^7.8.3",
- "@babel/plugin-transform-literals": "^7.8.3",
- "@babel/plugin-transform-member-expression-literals": "^7.8.3",
- "@babel/plugin-transform-modules-amd": "^7.8.3",
- "@babel/plugin-transform-modules-commonjs": "^7.8.3",
- "@babel/plugin-transform-modules-systemjs": "^7.8.3",
- "@babel/plugin-transform-modules-umd": "^7.8.3",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
- "@babel/plugin-transform-new-target": "^7.8.3",
- "@babel/plugin-transform-object-super": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.8.4",
- "@babel/plugin-transform-property-literals": "^7.8.3",
- "@babel/plugin-transform-regenerator": "^7.8.3",
- "@babel/plugin-transform-reserved-words": "^7.8.3",
- "@babel/plugin-transform-shorthand-properties": "^7.8.3",
- "@babel/plugin-transform-spread": "^7.8.3",
- "@babel/plugin-transform-sticky-regex": "^7.8.3",
- "@babel/plugin-transform-template-literals": "^7.8.3",
- "@babel/plugin-transform-typeof-symbol": "^7.8.4",
- "@babel/plugin-transform-unicode-regex": "^7.8.3",
- "@babel/types": "^7.8.3",
- "browserslist": "^4.8.5",
- "core-js-compat": "^3.6.2",
- "invariant": "^2.2.2",
- "levenary": "^1.1.1",
- "semver": "^5.5.0"
- }
- },
- "@babel/preset-react": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz",
- "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-transform-react-display-name": "^7.8.3",
- "@babel/plugin-transform-react-jsx": "^7.8.3",
- "@babel/plugin-transform-react-jsx-self": "^7.8.3",
- "@babel/plugin-transform-react-jsx-source": "^7.8.3"
- }
- },
- "@babel/register": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.8.3.tgz",
- "integrity": "sha512-t7UqebaWwo9nXWClIPLPloa5pN33A2leVs8Hf0e9g9YwUP8/H9NeR7DJU+4CXo23QtjChQv5a3DjEtT83ih1rg==",
- "dev": true,
- "requires": {
- "find-cache-dir": "^2.0.0",
- "lodash": "^4.17.13",
- "make-dir": "^2.1.0",
- "pirates": "^4.0.0",
- "source-map-support": "^0.5.16"
- }
- },
- "@babel/runtime": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz",
- "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==",
- "requires": {
- "regenerator-runtime": "^0.13.2"
- },
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.13.3",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
- "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
- }
- }
- },
- "@babel/template": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
- "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/parser": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/traverse": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
- "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.8.4",
- "@babel/types": "^7.8.3",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "@babel/types": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
- "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@flowjs/ng-flow": {
- "version": "2.7.8",
- "resolved": "https://registry.npmjs.org/@flowjs/ng-flow/-/ng-flow-2.7.8.tgz",
- "integrity": "sha1-HZ+dH4Ks2lNgMowxW6z9YNv9mBk="
- },
- "@mrmlnc/readdir-enhanced": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
- "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=",
- "dev": true,
- "requires": {
- "call-me-maybe": "^1.0.1",
- "glob-to-regexp": "^0.3.0"
- }
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
- "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.3",
- "run-parallel": "^1.1.9"
- },
- "dependencies": {
- "@nodelib/fs.stat": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
- "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
- "dev": true
- }
- }
- },
- "@nodelib/fs.stat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
- "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
- "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.3",
- "fastq": "^1.6.0"
- }
- },
- "@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
- "dev": true
- },
- "@types/events": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
- "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
- "dev": true
- },
- "@types/glob": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
- "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
- "dev": true,
- "requires": {
- "@types/events": "*",
- "@types/minimatch": "*",
- "@types/node": "*"
- }
- },
- "@types/jquery": {
- "version": "3.3.32",
- "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.32.tgz",
- "integrity": "sha512-UKoof2mnV/X1/Ix2g+V2Ny5sgHjV8nK/UJbiYxuo4zPwzGyFlZ/mp4KaePb2VqQrqJctmcDQNA57buU84/2uIw==",
- "requires": {
- "@types/sizzle": "*"
- }
- },
- "@types/minimatch": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
- "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
- "dev": true
- },
- "@types/minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=",
- "dev": true
- },
- "@types/node": {
- "version": "13.7.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.4.tgz",
- "integrity": "sha512-oVeL12C6gQS/GAExndigSaLxTrKpQPxewx9bOcwfvJiJge4rr7wNaph4J+ns5hrmIV2as5qxqN8YKthn9qh0jw==",
- "dev": true
- },
- "@types/normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
- "dev": true
- },
- "@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true
- },
- "@types/sizzle": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz",
- "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg=="
- },
- "@types/unist": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
- "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==",
- "dev": true
- },
- "@types/vfile": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz",
- "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "@types/unist": "*",
- "@types/vfile-message": "*"
- }
- },
- "@types/vfile-message": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-2.0.0.tgz",
- "integrity": "sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==",
- "dev": true,
- "requires": {
- "vfile-message": "*"
- }
- },
- "@webassemblyjs/ast": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
- "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-module-context": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/wast-parser": "1.8.5"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
- "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==",
- "dev": true
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
- "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
- "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==",
- "dev": true
- },
- "@webassemblyjs/helper-code-frame": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
- "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
- "dev": true,
- "requires": {
- "@webassemblyjs/wast-printer": "1.8.5"
- }
- },
- "@webassemblyjs/helper-fsm": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
- "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==",
- "dev": true
- },
- "@webassemblyjs/helper-module-context": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
- "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "mamacro": "^0.0.3"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
- "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
- "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-buffer": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/wasm-gen": "1.8.5"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
- "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
- "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
- "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
- "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-buffer": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/helper-wasm-section": "1.8.5",
- "@webassemblyjs/wasm-gen": "1.8.5",
- "@webassemblyjs/wasm-opt": "1.8.5",
- "@webassemblyjs/wasm-parser": "1.8.5",
- "@webassemblyjs/wast-printer": "1.8.5"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
- "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/ieee754": "1.8.5",
- "@webassemblyjs/leb128": "1.8.5",
- "@webassemblyjs/utf8": "1.8.5"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
- "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-buffer": "1.8.5",
- "@webassemblyjs/wasm-gen": "1.8.5",
- "@webassemblyjs/wasm-parser": "1.8.5"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
- "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-api-error": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/ieee754": "1.8.5",
- "@webassemblyjs/leb128": "1.8.5",
- "@webassemblyjs/utf8": "1.8.5"
- }
- },
- "@webassemblyjs/wast-parser": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
- "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/floating-point-hex-parser": "1.8.5",
- "@webassemblyjs/helper-api-error": "1.8.5",
- "@webassemblyjs/helper-code-frame": "1.8.5",
- "@webassemblyjs/helper-fsm": "1.8.5",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
- "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/wast-parser": "1.8.5",
- "@xtuc/long": "4.2.2"
- }
- },
- "@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg="
- },
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dev": true,
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
- "acorn": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
- "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
- "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
- "dev": true
- },
- "acorn-walk": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz",
- "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==",
- "dev": true
- },
- "add-dom-event-listener": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz",
- "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==",
- "requires": {
- "object-assign": "4.x"
- }
- },
- "aggregate-error": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
- "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
- "dev": true,
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- }
- },
- "ajv": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz",
- "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
- "dev": true
- },
- "ajv-keywords": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
- "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
- "dev": true
- },
- "alter": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz",
- "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=",
- "dev": true,
- "requires": {
- "stable": "~0.1.3"
- }
- },
- "amdefine": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
- "dev": true
- },
- "angular": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/angular/-/angular-1.5.8.tgz",
- "integrity": "sha1-klpTkrjCEtCVctxEbbfgEmTglMs="
- },
- "angular-animate": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/angular-animate/-/angular-animate-1.5.8.tgz",
- "integrity": "sha1-U19zaSJaun+xW/cTTHGxW8Y1xYY="
- },
- "angular-aria": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/angular-aria/-/angular-aria-1.5.8.tgz",
- "integrity": "sha1-VY+gfcgsb6V7FDjmYLvc/LgFovU="
- },
- "angular-breadcrumb": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/angular-breadcrumb/-/angular-breadcrumb-0.4.1.tgz",
- "integrity": "sha1-W/9XgMeZzMYIglioQlbTR/6WkaU="
- },
- "angular-carousel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/angular-carousel/-/angular-carousel-1.1.0.tgz",
- "integrity": "sha1-PmlA5ovRio85L8Qx2XGSrDSIMdE="
- },
- "angular-cookies": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/angular-cookies/-/angular-cookies-1.5.8.tgz",
- "integrity": "sha1-CPOfouF7bjqRbNO6c1L51wLoqf4="
- },
- "angular-drag-and-drop-lists": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/angular-drag-and-drop-lists/-/angular-drag-and-drop-lists-1.4.0.tgz",
- "integrity": "sha1-KREEyTXhCkL4RZaW7TAGlQnXm/w="
- },
- "angular-fixed-table-header": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/angular-fixed-table-header/-/angular-fixed-table-header-0.2.1.tgz",
- "integrity": "sha1-IypxTwohWKdd3DH8cvvVkjeVQY0=",
- "requires": {
- "angular": "^1.4.0"
- }
- },
- "angular-fullscreen": {
- "version": "git://github.com/fabiobiondi/angular-fullscreen.git#8217174565761d3566807bc60a73b5ca015b8cb6",
- "from": "git://github.com/fabiobiondi/angular-fullscreen.git#master"
- },
- "angular-gridster": {
- "version": "0.13.14",
- "resolved": "https://registry.npmjs.org/angular-gridster/-/angular-gridster-0.13.14.tgz",
- "integrity": "sha1-er6/Y9fJ++xFOLnMpFfg2oBdQgQ="
- },
- "angular-hotkeys": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/angular-hotkeys/-/angular-hotkeys-1.7.0.tgz",
- "integrity": "sha1-BS5rb0TfzYJEJ3mLfxDhkX6HAKE="
- },
- "angular-jwt": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/angular-jwt/-/angular-jwt-0.1.11.tgz",
- "integrity": "sha512-793dv5vXOXaW5/cweMd+sqSf9dPhbazDya3szTVOQ84MDEj1nYLJrixBBa7WNtZeMqz7ylWX7djnFgqLjEWcHw=="
- },
- "angular-material": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/angular-material/-/angular-material-1.1.19.tgz",
- "integrity": "sha512-R46TfnVsAkhRDcsbrFR5DB+Ja4LpPGugAQDHYItcvLYCIkVMf07cIx1q6WyFPiZQVwz3j+ECMveqsjX+jEUrgg=="
- },
- "angular-material-data-table": {
- "version": "0.10.10",
- "resolved": "https://registry.npmjs.org/angular-material-data-table/-/angular-material-data-table-0.10.10.tgz",
- "integrity": "sha1-IptAJ0XsGhRvB9qNHlJr5lQISe4="
- },
- "angular-material-expansion-panel": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/angular-material-expansion-panel/-/angular-material-expansion-panel-0.7.2.tgz",
- "integrity": "sha1-jCV5dN/xd8wHYgjQO9sKgy34Tqw="
- },
- "angular-material-icons": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/angular-material-icons/-/angular-material-icons-0.7.1.tgz",
- "integrity": "sha1-5eq0hTthwzH1j55+blS24dZeT5s=",
- "requires": {
- "angular": ">=1.3.0"
- }
- },
- "angular-messages": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/angular-messages/-/angular-messages-1.5.8.tgz",
- "integrity": "sha1-H5HR5/P08uWrWt7+4smnGWsaNM8="
- },
- "angular-route": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/angular-route/-/angular-route-1.5.8.tgz",
- "integrity": "sha1-lkCT3n7I3FeZvVapOmzl9gCVZ0s="
- },
- "angular-sanitize": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/angular-sanitize/-/angular-sanitize-1.5.8.tgz",
- "integrity": "sha1-GDL2lIfuggohy+MAVaj7G98perg="
- },
- "angular-socialshare": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/angular-socialshare/-/angular-socialshare-2.3.11.tgz",
- "integrity": "sha1-BTKLM9mF/Zt+FQAmPCCpqg+ELJk="
- },
- "angular-storage": {
- "version": "0.0.15",
- "resolved": "https://registry.npmjs.org/angular-storage/-/angular-storage-0.0.15.tgz",
- "integrity": "sha1-AF1kgImChI2UlyXisr+Qod0nr8E="
- },
- "angular-touch": {
- "version": "1.5.8",
- "resolved": "https://registry.npmjs.org/angular-touch/-/angular-touch-1.5.8.tgz",
- "integrity": "sha1-skQ8Q1+HdGF+55uxH7ae9PXVuPU="
- },
- "angular-translate": {
- "version": "2.18.1",
- "resolved": "https://registry.npmjs.org/angular-translate/-/angular-translate-2.18.1.tgz",
- "integrity": "sha1-sp7Q0vm6xEB156rTKEFmxZ4VB5E=",
- "requires": {
- "angular": ">=1.2.26 <=1.7"
- }
- },
- "angular-translate-handler-log": {
- "version": "2.18.1",
- "resolved": "https://registry.npmjs.org/angular-translate-handler-log/-/angular-translate-handler-log-2.18.1.tgz",
- "integrity": "sha1-icu1mCeALYb4EVJ1+/iNbYiWsNQ=",
- "requires": {
- "angular-translate": "~2.18.1"
- }
- },
- "angular-translate-interpolation-messageformat": {
- "version": "2.18.1",
- "resolved": "https://registry.npmjs.org/angular-translate-interpolation-messageformat/-/angular-translate-interpolation-messageformat-2.18.1.tgz",
- "integrity": "sha1-FsUq4MYcJA8PJBZKBSGUPPi6QI4=",
- "requires": {
- "angular-translate": "~2.18.1",
- "messageformat": "~1.0.2"
- }
- },
- "angular-translate-loader-static-files": {
- "version": "2.18.1",
- "resolved": "https://registry.npmjs.org/angular-translate-loader-static-files/-/angular-translate-loader-static-files-2.18.1.tgz",
- "integrity": "sha1-rQw8iDsYsIm9uNsCu9Nm2QP4V8w=",
- "requires": {
- "angular-translate": "~2.18.1"
- }
- },
- "angular-translate-storage-cookie": {
- "version": "2.18.1",
- "resolved": "https://registry.npmjs.org/angular-translate-storage-cookie/-/angular-translate-storage-cookie-2.18.1.tgz",
- "integrity": "sha1-j8vaspb6gkkOALQorxp0ahf0QVY=",
- "requires": {
- "angular-cookies": ">=1.2.26 <1.8",
- "angular-translate": "~2.18.1"
- }
- },
- "angular-translate-storage-local": {
- "version": "2.18.1",
- "resolved": "https://registry.npmjs.org/angular-translate-storage-local/-/angular-translate-storage-local-2.18.1.tgz",
- "integrity": "sha1-lHQP5NgBq3gpopofBeHDkFTIcwM=",
- "requires": {
- "angular-translate": "~2.18.1",
- "angular-translate-storage-cookie": "~2.18.1"
- }
- },
- "angular-ui-ace": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/angular-ui-ace/-/angular-ui-ace-0.2.3.tgz",
- "integrity": "sha1-PLkDQoEAYho2f8f2QUQOl6QqJtA="
- },
- "angular-ui-router": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/angular-ui-router/-/angular-ui-router-0.3.2.tgz",
- "integrity": "sha1-wn4EljCcmSGNVlWYWxZKCWq1IKk=",
- "requires": {
- "angular": "^1.0.8"
- }
- },
- "angular-websocket": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/angular-websocket/-/angular-websocket-2.0.1.tgz",
- "integrity": "sha1-D7TWDtkBi+WD0DHuxOVrRXy43O4=",
- "requires": {
- "angular": "*",
- "ws": "^1.0.0"
- }
- },
- "ansi-colors": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
- "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
- "dev": true
- },
- "ansi-escapes": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
- "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
- },
- "ansi-html": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
- "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
- "dev": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
- },
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- },
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
- }
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=",
- "dev": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
- "dev": true
- },
- "array-flatten": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
- "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
- "dev": true
- },
- "array-includes": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
- "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0",
- "is-string": "^1.0.5"
- }
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "array.prototype.flat": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
- "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
- }
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "asn1.js": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
- "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- },
- "util": {
- "version": "0.10.3",
- "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.1"
- }
- }
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "ast-types": {
- "version": "0.9.6",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
- "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
- "dev": true
- },
- "astral-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
- "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
- "dev": true
- },
- "async": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/async/-/async-3.1.1.tgz",
- "integrity": "sha512-X5Dj8hK1pJNC2Wzo2Rcp9FBVdJMGRR/S7V+lH46s8GVFhtbo5O4Le5GECCF/8PISVdkUA6mMPvgz7qTTD1rf1g=="
- },
- "async-each": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
- "dev": true
- },
- "async-foreach": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
- "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
- "dev": true
- },
- "async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
- "dev": true
- },
- "attr-accept": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.3.tgz",
- "integrity": "sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ==",
- "requires": {
- "core-js": "^2.5.0"
- }
- },
- "autoprefixer": {
- "version": "9.7.4",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz",
- "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==",
- "dev": true,
- "requires": {
- "browserslist": "^4.8.3",
- "caniuse-lite": "^1.0.30001020",
- "chalk": "^2.4.2",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "postcss": "^7.0.26",
- "postcss-value-parser": "^4.0.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
- "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
- "dev": true
- },
- "babel-eslint": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz",
- "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.0.0",
- "@babel/traverse": "^7.0.0",
- "@babel/types": "^7.0.0",
- "eslint-visitor-keys": "^1.0.0",
- "resolve": "^1.12.0"
- }
- },
- "babel-loader": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz",
- "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==",
- "dev": true,
- "requires": {
- "find-cache-dir": "^2.0.0",
- "loader-utils": "^1.0.2",
- "mkdirp": "^0.5.1",
- "pify": "^4.0.1"
- }
- },
- "babel-plugin-dynamic-import-node": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
- "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
- "dev": true,
- "requires": {
- "object.assign": "^4.1.0"
- }
- },
- "babel-polyfill": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
- "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.10.0"
- },
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.10.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
- "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
- }
- }
- },
- "babel-runtime": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
- "requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
- }
- },
- "bail": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
- "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "base64-js": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
- "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
- },
- "batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true
- },
- "binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true
- },
- "bind-decorator": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/bind-decorator/-/bind-decorator-1.0.11.tgz",
- "integrity": "sha1-5BvAah9l3ZzsR2yRxdrzl4SIJS8="
- },
- "bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "file-uri-to-path": "1.0.0"
- }
- },
- "block-stream": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
- "dev": true,
- "requires": {
- "inherits": "~2.0.0"
- }
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
- "dev": true
- },
- "body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "dev": true,
- "requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- },
- "dependencies": {
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "dev": true
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true
- }
- }
- },
- "bonjour": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
- "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
- "dev": true,
- "requires": {
- "array-flatten": "^2.1.0",
- "deep-equal": "^1.0.1",
- "dns-equal": "^1.0.0",
- "dns-txt": "^2.0.2",
- "multicast-dns": "^6.0.1",
- "multicast-dns-service-types": "^1.1.0"
- }
- },
- "boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
- "dev": true
- },
- "bowser": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz",
- "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ=="
- },
- "brace": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/brace/-/brace-0.10.0.tgz",
- "integrity": "sha1-7e9OubCSi6HuX3F//BV3SabdXXY=",
- "requires": {
- "w3c-blob": "0.0.1"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true
- },
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "browserify-rsa": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
- "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "randombytes": "^2.0.1"
- }
- },
- "browserify-sign": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
- "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.1",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.2",
- "elliptic": "^6.0.0",
- "inherits": "^2.0.1",
- "parse-asn1": "^5.0.0"
- }
- },
- "browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dev": true,
- "requires": {
- "pako": "~1.0.5"
- }
- },
- "browserslist": {
- "version": "4.8.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.7.tgz",
- "integrity": "sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001027",
- "electron-to-chromium": "^1.3.349",
- "node-releases": "^1.1.49"
- }
- },
- "buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "dev": true,
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
- },
- "buffer-indexof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
- "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
- "dev": true
- },
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
- "dev": true
- },
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
- "dev": true
- },
- "cacache": {
- "version": "13.0.1",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
- "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==",
- "dev": true,
- "requires": {
- "chownr": "^1.1.2",
- "figgy-pudding": "^3.5.1",
- "fs-minipass": "^2.0.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.2",
- "infer-owner": "^1.0.4",
- "lru-cache": "^5.1.1",
- "minipass": "^3.0.0",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.2",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "p-map": "^3.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.7.1",
- "ssri": "^7.0.0",
- "unique-filename": "^1.1.1"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- }
- }
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "call-me-maybe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
- "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
- "dev": true
- },
- "caller-callsite": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
- "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
- "dev": true,
- "requires": {
- "callsites": "^2.0.0"
- },
- "dependencies": {
- "callsites": {
- "version": "2.0.0",
- "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
- "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
- "dev": true
- }
- }
- },
- "caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
- "dev": true,
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camel-case": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
- "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
- "dev": true,
- "requires": {
- "no-case": "^2.2.0",
- "upper-case": "^1.1.1"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dev": true,
- "requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
- }
- }
- },
- "caniuse-lite": {
- "version": "1.0.30001028",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001028.tgz",
- "integrity": "sha512-Vnrq+XMSHpT7E+LWoIYhs3Sne8h9lx9YJV3acH3THNCwU/9zV93/ta4xVfzTtnqd3rvnuVpVjE3DFqf56tr3aQ==",
- "dev": true
- },
- "canvas-gauges": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/canvas-gauges/-/canvas-gauges-2.1.5.tgz",
- "integrity": "sha512-7GUd1uukePQPQPIoM8Sh4UrG8om+2RG+D8WN5BCkIp9wAfByzPuZZinsUkfFCyRrEOZ/rhuwBfFnb1ld8IfNrw=="
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "ccount": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz",
- "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==",
- "dev": true
- },
- "chain-function": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/chain-function/-/chain-function-1.0.1.tgz",
- "integrity": "sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg=="
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "change-emitter": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz",
- "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU="
- },
- "character-entities": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
- "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
- "dev": true
- },
- "character-entities-html4": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
- "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==",
- "dev": true
- },
- "character-entities-legacy": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
- "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
- "dev": true
- },
- "character-reference-invalid": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
- "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
- "dev": true
- },
- "chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
- },
- "chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "dev": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.1",
- "braces": "^2.3.2",
- "fsevents": "^1.2.7",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.3",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "normalize-path": "^3.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.2.1",
- "upath": "^1.1.1"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "chrome-trace-event": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
- "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
- "dev": true,
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "classnames": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
- "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
- },
- "clean-css": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
- "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
- "dev": true,
- "requires": {
- "source-map": "~0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
- },
- "clipboard": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz",
- "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=",
- "requires": {
- "good-listener": "^1.2.2",
- "select": "^1.1.2",
- "tiny-emitter": "^2.0.0"
- }
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
- },
- "clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- }
- },
- "clone-regexp": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
- "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
- "dev": true,
- "requires": {
- "is-regexp": "^2.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "collapse-white-space": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
- "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "compass-sass-mixins": {
- "version": "0.12.7",
- "resolved": "https://registry.npmjs.org/compass-sass-mixins/-/compass-sass-mixins-0.12.7.tgz",
- "integrity": "sha1-KsTTEPLr5Ri31qykriTx0yVAnow="
- },
- "component-classes": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz",
- "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=",
- "requires": {
- "component-indexof": "0.0.3"
- }
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "component-indexof": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz",
- "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ="
- },
- "compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "dev": true,
- "requires": {
- "mime-db": ">= 1.43.0 < 2"
- }
- },
- "compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- }
- },
- "compression-webpack-plugin": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-3.1.0.tgz",
- "integrity": "sha512-iqTHj3rADN4yHwXMBrQa/xrncex/uEQy8QHlaTKxGchT/hC0SdlJlmL/5eRqffmWq2ep0/Romw6Ld39JjTR/ug==",
- "dev": true,
- "requires": {
- "cacache": "^13.0.1",
- "find-cache-dir": "^3.0.0",
- "neo-async": "^2.5.0",
- "schema-utils": "^2.6.1",
- "serialize-javascript": "^2.1.2",
- "webpack-sources": "^1.0.1"
- },
- "dependencies": {
- "find-cache-dir": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz",
- "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.0",
- "pkg-dir": "^4.1.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz",
- "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "config-chain": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
- "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "connect-history-api-fallback": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
- "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
- "dev": true
- },
- "console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
- "contains-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
- "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
- "dev": true
- },
- "content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
- "dev": true
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
- "dev": true
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "copy-webpack-plugin": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz",
- "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==",
- "dev": true,
- "requires": {
- "cacache": "^12.0.3",
- "find-cache-dir": "^2.1.0",
- "glob-parent": "^3.1.0",
- "globby": "^7.1.1",
- "is-glob": "^4.0.1",
- "loader-utils": "^1.2.3",
- "minimatch": "^3.0.4",
- "normalize-path": "^3.0.0",
- "p-limit": "^2.2.1",
- "schema-utils": "^1.0.0",
- "serialize-javascript": "^2.1.2",
- "webpack-log": "^2.0.0"
- },
- "dependencies": {
- "cacache": {
- "version": "12.0.3",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
- "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "ssri": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- }
- }
- },
- "core-js": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
- "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
- },
- "core-js-compat": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz",
- "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==",
- "dev": true,
- "requires": {
- "browserslist": "^4.8.3",
- "semver": "7.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
- "dev": true
- }
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cosmiconfig": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
- "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
- "dev": true,
- "requires": {
- "import-fresh": "^2.0.0",
- "is-directory": "^0.3.1",
- "js-yaml": "^3.13.1",
- "parse-json": "^4.0.0"
- },
- "dependencies": {
- "import-fresh": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
- "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
- "dev": true,
- "requires": {
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
- }
- }
- },
- "create-ecdh": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
- "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.0.0"
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "create-react-class": {
- "version": "15.6.3",
- "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
- "integrity": "sha1-LXMjf7P5cK5uvgEanmb0bbyoADY=",
- "requires": {
- "fbjs": "^0.8.9",
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.1"
- }
- },
- "cross-env": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz",
- "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.5"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
- },
- "css-animation": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz",
- "integrity": "sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==",
- "requires": {
- "babel-runtime": "6.x",
- "component-classes": "^1.2.5"
- }
- },
- "css-loader": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz",
- "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "cssesc": "^3.0.0",
- "icss-utils": "^4.1.1",
- "loader-utils": "^1.2.3",
- "normalize-path": "^3.0.0",
- "postcss": "^7.0.23",
- "postcss-modules-extract-imports": "^2.0.0",
- "postcss-modules-local-by-default": "^3.0.2",
- "postcss-modules-scope": "^2.1.1",
- "postcss-modules-values": "^3.0.0",
- "postcss-value-parser": "^4.0.2",
- "schema-utils": "^2.6.0"
- }
- },
- "css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
- "dev": true,
- "requires": {
- "boolbase": "~1.0.0",
- "css-what": "2.1",
- "domutils": "1.5.1",
- "nth-check": "~1.0.1"
- }
- },
- "css-what": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
- "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
- "dev": true
- },
- "cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true
- },
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true,
- "requires": {
- "array-find-index": "^1.0.1"
- }
- },
- "cyclist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
- "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
- "dev": true
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
- "dev": true,
- "requires": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- }
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "deep-equal": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
- "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
- "dev": true,
- "requires": {
- "is-arguments": "^1.0.4",
- "is-date-object": "^1.0.1",
- "is-regex": "^1.0.4",
- "object-is": "^1.0.1",
- "object-keys": "^1.1.1",
- "regexp.prototype.flags": "^1.2.0"
- }
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "default-gateway": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
- "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
- "dev": true,
- "requires": {
- "execa": "^1.0.0",
- "ip-regex": "^2.1.0"
- }
- },
- "defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
- "requires": {
- "clone": "^1.0.2"
- }
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "del": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
- "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
- "dev": true,
- "requires": {
- "@types/glob": "^7.1.1",
- "globby": "^6.1.0",
- "is-path-cwd": "^2.0.0",
- "is-path-in-cwd": "^2.0.0",
- "p-map": "^2.0.0",
- "pify": "^4.0.1",
- "rimraf": "^2.6.3"
- },
- "dependencies": {
- "globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
- "p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
- "dev": true
- }
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "delegate": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
- "integrity": "sha1-tmtxwxWFIuirV0T3INjKDCr1kWY="
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true
- },
- "des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
- "detect-file": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
- "dev": true
- },
- "detect-node": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
- "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
- "dev": true
- },
- "diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- }
- },
- "dir-glob": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
- "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
- "dev": true,
- "requires": {
- "path-type": "^3.0.0"
- }
- },
- "directory-tree": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/directory-tree/-/directory-tree-2.2.4.tgz",
- "integrity": "sha512-2N43msQptKbi3WMfIs+U09yi6bfyKL+MWyj5VMj8t1F/Tx04bt1cn/EEIU3o1JBltlJk7NQnzOEuTNa/KQvbWA==",
- "dev": true
- },
- "dns-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
- "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
- "dev": true
- },
- "dns-packet": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
- "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
- "dev": true,
- "requires": {
- "ip": "^1.1.0",
- "safe-buffer": "^5.0.1"
- }
- },
- "dns-txt": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
- "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
- "dev": true,
- "requires": {
- "buffer-indexof": "^1.0.0"
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "dom-align": {
- "version": "1.10.4",
- "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.10.4.tgz",
- "integrity": "sha512-wytDzaru67AmqFOY4B9GUb/hrwWagezoYYK97D/vpK+ezg+cnuZO0Q2gltUPa7KfNmIqfRIYVCF8UhRDEHAmgQ=="
- },
- "dom-converter": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
- "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
- "dev": true,
- "requires": {
- "utila": "~0.4"
- }
- },
- "dom-helpers": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
- "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
- "requires": {
- "@babel/runtime": "^7.1.2"
- }
- },
- "dom-scroll-into-view": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz",
- "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4="
- },
- "dom-serializer": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
- "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
- "dev": true,
- "requires": {
- "domelementtype": "^2.0.1",
- "entities": "^2.0.0"
- },
- "dependencies": {
- "domelementtype": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
- "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
- "dev": true
- }
- }
- },
- "dom-walk": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
- "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=",
- "dev": true
- },
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
- "dev": true
- },
- "domelementtype": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
- "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
- "dev": true
- },
- "domhandler": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
- "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
- "dev": true,
- "requires": {
- "domelementtype": "1"
- }
- },
- "domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
- "dev": true,
- "requires": {
- "dom-serializer": "0",
- "domelementtype": "1"
- }
- },
- "dot-prop": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
- "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
- "dev": true,
- "requires": {
- "is-obj": "^2.0.0"
- }
- },
- "duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "editorconfig": {
- "version": "0.15.3",
- "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
- "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
- "requires": {
- "commander": "^2.19.0",
- "lru-cache": "^4.1.5",
- "semver": "^5.6.0",
- "sigmund": "^1.0.1"
- }
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
- },
- "electron-to-chromium": {
- "version": "1.3.355",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.355.tgz",
- "integrity": "sha512-zKO/wS+2ChI/jz9WAo647xSW8t2RmgRLFdbUb/77cORkUTargO+SCj4ctTHjBn2VeNFrsLgDT7IuDVrd3F8mLQ==",
- "dev": true
- },
- "elliptic": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
- "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
- "dev": true,
- "requires": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "dev": true
- },
- "encoding": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
- "requires": {
- "iconv-lite": "~0.4.13"
- }
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "enhanced-resolve": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
- "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- }
- }
- },
- "entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
- "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
- "dev": true
- },
- "errno": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
- "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=",
- "dev": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-abstract": {
- "version": "1.17.4",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz",
- "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==",
- "dev": true,
- "requires": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.1.5",
- "is-regex": "^1.0.5",
- "object-inspect": "^1.7.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.0",
- "string.prototype.trimleft": "^2.1.1",
- "string.prototype.trimright": "^2.1.1"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "es6-templates": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz",
- "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=",
- "dev": true,
- "requires": {
- "recast": "~0.11.12",
- "through": "~2.3.6"
- }
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "eslint": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "ajv": "^6.10.0",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^1.4.3",
- "eslint-visitor-keys": "^1.1.0",
- "espree": "^6.1.2",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "inquirer": "^7.0.0",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.14",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.3",
- "progress": "^2.0.0",
- "regexpp": "^2.0.1",
- "semver": "^6.1.2",
- "strip-ansi": "^5.2.0",
- "strip-json-comments": "^3.0.1",
- "table": "^5.2.3",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz",
- "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- }
- },
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
- "dev": true
- },
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "dev": true,
- "requires": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- }
- },
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "glob-parent": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
- "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globals": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz",
- "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "inquirer": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz",
- "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^2.4.2",
- "cli-cursor": "^3.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.15",
- "mute-stream": "0.0.8",
- "run-async": "^2.2.0",
- "rxjs": "^6.5.3",
- "string-width": "^4.1.0",
- "strip-ansi": "^5.1.0",
- "through": "^2.3.6"
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "dev": true
- },
- "onetime": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
- "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- }
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "eslint-config-angular": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/eslint-config-angular/-/eslint-config-angular-0.5.0.tgz",
- "integrity": "sha1-4KrgEy4550Z98/dUf+yBpE02hcQ=",
- "dev": true
- },
- "eslint-import-resolver-node": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz",
- "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==",
- "dev": true,
- "requires": {
- "debug": "^2.6.9",
- "resolve": "^1.13.1"
- }
- },
- "eslint-loader": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
- "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
- "dev": true,
- "requires": {
- "loader-fs-cache": "^1.0.0",
- "loader-utils": "^1.0.2",
- "object-assign": "^4.0.1",
- "object-hash": "^1.1.4",
- "rimraf": "^2.6.1"
- }
- },
- "eslint-module-utils": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz",
- "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==",
- "dev": true,
- "requires": {
- "debug": "^2.6.9",
- "pkg-dir": "^2.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "pkg-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
- "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
- "dev": true,
- "requires": {
- "find-up": "^2.1.0"
- }
- }
- }
- },
- "eslint-plugin-angular": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-angular/-/eslint-plugin-angular-4.0.1.tgz",
- "integrity": "sha512-OaW5G461C2lIkOG+/bhnBoXB9UQm/r0Dj2Qf9uiIN0/ncvf2Llp30L0q1tqWkN8/CxyBwQKh1v0hpCLLDjaIKQ==",
- "dev": true
- },
- "eslint-plugin-import": {
- "version": "2.20.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz",
- "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==",
- "dev": true,
- "requires": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
- "contains-path": "^0.1.0",
- "debug": "^2.6.9",
- "doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.2",
- "eslint-module-utils": "^2.4.1",
- "has": "^1.0.3",
- "minimatch": "^3.0.4",
- "object.values": "^1.1.0",
- "read-pkg-up": "^2.0.0",
- "resolve": "^1.12.0"
- },
- "dependencies": {
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
- "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
- "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
- "dev": true
- },
- "espree": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz",
- "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.0",
- "acorn-jsx": "^5.1.0",
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz",
- "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==",
- "dev": true,
- "requires": {
- "estraverse": "^4.0.0"
- }
- },
- "esrecurse": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
- "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
- "dev": true,
- "requires": {
- "estraverse": "^4.1.0"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true
- },
- "eve-raphael": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/eve-raphael/-/eve-raphael-0.5.0.tgz",
- "integrity": "sha1-F8dUt5K+7z+maE15z1pHxjxM2jA="
- },
- "event-source-polyfill": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/event-source-polyfill/-/event-source-polyfill-0.0.9.tgz",
- "integrity": "sha1-GMYgXRcKsJ24if/OqjPw5JPxSlA="
- },
- "eventemitter3": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
- "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
- "dev": true
- },
- "events": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
- "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==",
- "dev": true
- },
- "eventsource": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
- "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
- "dev": true,
- "requires": {
- "original": "^1.0.0"
- }
- },
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "execall": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
- "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
- "dev": true,
- "requires": {
- "clone-regexp": "^2.1.0"
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "expand-tilde": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
- "dev": true
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "external-editor": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
- "integrity": "sha1-BFURz9jRM/OEZnPRBHwVTiFK09U=",
- "requires": {
- "chardet": "^0.4.0",
- "iconv-lite": "^0.4.17",
- "tmp": "^0.0.33"
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
- "dev": true
- },
- "fast-glob": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
- "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
- "dev": true,
- "requires": {
- "@mrmlnc/readdir-enhanced": "^2.2.1",
- "@nodelib/fs.stat": "^1.1.2",
- "glob-parent": "^3.1.0",
- "is-glob": "^4.0.0",
- "merge2": "^1.2.3",
- "micromatch": "^3.1.10"
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fastparse": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
- "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
- "dev": true
- },
- "fastq": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz",
- "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.0"
- }
- },
- "faye-websocket": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
- "dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- },
- "fbjs": {
- "version": "0.8.17",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
- "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
- "requires": {
- "core-js": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.18"
- },
- "dependencies": {
- "core-js": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
- "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
- }
- }
- },
- "figgy-pudding": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
- "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
- "dev": true
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "file-entry-cache": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
- "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
- "dev": true,
- "requires": {
- "flat-cache": "^2.0.1"
- }
- },
- "file-loader": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz",
- "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.2.3",
- "schema-utils": "^2.5.0"
- }
- },
- "file-type": {
- "version": "10.11.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz",
- "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==",
- "dev": true
- },
- "file-uri-to-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
- "dev": true,
- "optional": true
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- }
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "findup-sync": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
- "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
- "dev": true,
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^4.0.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- }
- },
- "flat-cache": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
- "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
- "dev": true,
- "requires": {
- "flatted": "^2.0.0",
- "rimraf": "2.6.3",
- "write": "1.0.3"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
- "flatted": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
- "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
- "dev": true
- },
- "flot": {
- "version": "git://github.com/thingsboard/flot.git#6e1a37095868f174d31d5c627c3659b70f9b92dd",
- "from": "git://github.com/thingsboard/flot.git#0.9-work"
- },
- "flot.curvedlines": {
- "version": "git://github.com/MichaelZinsmaier/CurvedLines.git#22ed1fc2a6ccafc816c2d07b36027cc123825c4b",
- "from": "git://github.com/MichaelZinsmaier/CurvedLines.git#master"
- },
- "flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- }
- },
- "follow-redirects": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz",
- "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==",
- "dev": true,
- "requires": {
- "debug": "^3.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "font-awesome": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
- "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
- "dev": true
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true
- },
- "from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "fs-readdir-recursive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
- "integrity": "sha1-4y/AMKLM7kSmtTcTCNpUvgs5fSc=",
- "dev": true
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "fsevents": {
- "version": "1.2.11",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz",
- "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==",
- "dev": true,
- "optional": true,
- "requires": {
- "bindings": "^1.5.0",
- "nan": "^2.12.1",
- "node-pre-gyp": "*"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "3.2.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true,
- "dev": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true
- },
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.14.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4.4.2"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.13",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "yallist": {
- "version": "3.1.1",
- "bundled": true,
- "dev": true
- }
- }
- },
- "fstream": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
- "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "gaze": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
- "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
- "dev": true,
- "requires": {
- "globule": "^1.0.0"
- }
- },
- "gensync": {
- "version": "1.0.0-beta.1",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
- "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
- "dev": true
- },
- "get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true
- },
- "get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
- "dev": true
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
- "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.2",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "glob-to-regexp": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
- "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
- "dev": true
- },
- "global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dev": true,
- "requires": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
- "global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "dev": true,
- "requires": {
- "global-prefix": "^3.0.0"
- }
- },
- "global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "dev": true,
- "requires": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- }
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "globby": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
- "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "dir-glob": "^2.0.0",
- "glob": "^7.1.2",
- "ignore": "^3.3.5",
- "pify": "^3.0.0",
- "slash": "^1.0.0"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "dev": true
- }
- }
- },
- "globjoin": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
- "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=",
- "dev": true
- },
- "globule": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz",
- "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==",
- "dev": true,
- "requires": {
- "glob": "~7.1.1",
- "lodash": "~4.17.12",
- "minimatch": "~3.0.2"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
- }
- },
- "gonzales-pe": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.4.tgz",
- "integrity": "sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ==",
- "dev": true,
- "requires": {
- "minimist": "1.1.x"
- },
- "dependencies": {
- "minimist": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
- "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=",
- "dev": true
- }
- }
- },
- "good-listener": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
- "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
- "requires": {
- "delegate": "^3.1.2"
- }
- },
- "graceful-fs": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
- "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
- "dev": true
- },
- "handle-thing": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
- "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
- "dev": true
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
- "dev": true,
- "requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
- }
- },
- "hard-rejection": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
- "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
- "dev": true
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-symbols": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
- "dev": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "hash-base": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true,
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "hoist-non-react-statics": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz",
- "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
- },
- "homedir-polyfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
- "dev": true,
- "requires": {
- "parse-passwd": "^1.0.0"
- }
- },
- "hosted-git-info": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
- "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
- "dev": true
- },
- "hpack.js": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
- "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "obuf": "^1.0.0",
- "readable-stream": "^2.0.1",
- "wbuf": "^1.1.0"
- }
- },
- "html-entities": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
- "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
- "dev": true
- },
- "html-loader": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz",
- "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==",
- "dev": true,
- "requires": {
- "es6-templates": "^0.2.3",
- "fastparse": "^1.1.1",
- "html-minifier": "^3.5.8",
- "loader-utils": "^1.1.0",
- "object-assign": "^4.1.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
- "dev": true
- },
- "html-minifier": {
- "version": "3.5.21",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
- "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
- "dev": true,
- "requires": {
- "camel-case": "3.0.x",
- "clean-css": "4.2.x",
- "commander": "2.17.x",
- "he": "1.2.x",
- "param-case": "2.1.x",
- "relateurl": "0.2.x",
- "uglify-js": "3.4.x"
- }
- }
- }
- },
- "html-minifier": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz",
- "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==",
- "dev": true,
- "requires": {
- "camel-case": "^3.0.0",
- "clean-css": "^4.2.1",
- "commander": "^2.19.0",
- "he": "^1.2.0",
- "param-case": "^2.1.1",
- "relateurl": "^0.2.7",
- "uglify-js": "^3.5.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "uglify-js": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.0.tgz",
- "integrity": "sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ==",
- "dev": true,
- "requires": {
- "commander": "~2.20.3",
- "source-map": "~0.6.1"
- }
- }
- }
- },
- "html-minifier-loader": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/html-minifier-loader/-/html-minifier-loader-1.4.1.tgz",
- "integrity": "sha1-ZfBeKl+R9rBxPMIIGuTr5L/A1pY=",
- "dev": true,
- "requires": {
- "loader-utils": "^1.1.0"
- }
- },
- "html-tags": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
- "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
- "dev": true
- },
- "html-webpack-plugin": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
- "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
- "dev": true,
- "requires": {
- "html-minifier": "^3.2.3",
- "loader-utils": "^0.2.16",
- "lodash": "^4.17.3",
- "pretty-error": "^2.0.2",
- "tapable": "^1.0.0",
- "toposort": "^1.0.0",
- "util.promisify": "1.0.0"
- },
- "dependencies": {
- "big.js": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
- "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
- "dev": true
- },
- "commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
- "dev": true
- },
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
- "dev": true
- },
- "html-minifier": {
- "version": "3.5.21",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
- "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
- "dev": true,
- "requires": {
- "camel-case": "3.0.x",
- "clean-css": "4.2.x",
- "commander": "2.17.x",
- "he": "1.2.x",
- "param-case": "2.1.x",
- "relateurl": "0.2.x",
- "uglify-js": "3.4.x"
- }
- },
- "json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true
- },
- "loader-utils": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
- "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
- "dev": true,
- "requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0",
- "object-assign": "^4.0.1"
- }
- }
- }
- },
- "htmlparser2": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
- "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
- "dev": true,
- "requires": {
- "domelementtype": "^1.3.1",
- "domhandler": "^2.3.0",
- "domutils": "^1.5.1",
- "entities": "^1.1.1",
- "inherits": "^2.0.1",
- "readable-stream": "^3.1.1"
- },
- "dependencies": {
- "entities": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
- "dev": true
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "http-deceiver": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
- "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
- "dev": true
- },
- "http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- }
- }
- },
- "http-parser-js": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
- "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
- "dev": true
- },
- "http-proxy": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
- "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
- "dev": true,
- "requires": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- }
- },
- "http-proxy-middleware": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
- "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
- "dev": true,
- "requires": {
- "http-proxy": "^1.17.0",
- "is-glob": "^4.0.0",
- "lodash": "^4.17.11",
- "micromatch": "^3.1.10"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
- "dev": true
- },
- "hyphenate-style-name": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz",
- "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ=="
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "icss-utils": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
- "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.14"
- }
- },
- "ieee754": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
- "dev": true
- },
- "iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
- "dev": true
- },
- "ignore": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
- "dev": true
- },
- "image-size": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
- "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
- "dev": true,
- "optional": true
- },
- "imagemin": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz",
- "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==",
- "dev": true,
- "requires": {
- "file-type": "^10.7.0",
- "globby": "^8.0.1",
- "make-dir": "^1.0.0",
- "p-pipe": "^1.1.0",
- "pify": "^4.0.1",
- "replace-ext": "^1.0.0"
- },
- "dependencies": {
- "dir-glob": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
- "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.1",
- "path-type": "^3.0.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "globby": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz",
- "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "dir-glob": "2.0.0",
- "fast-glob": "^2.0.2",
- "glob": "^7.1.2",
- "ignore": "^3.3.5",
- "pify": "^3.0.0",
- "slash": "^1.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "dev": true
- }
- }
- },
- "img-loader": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz",
- "integrity": "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.1.0"
- }
- },
- "immediate": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
- "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
- },
- "import-cwd": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
- "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
- "dev": true,
- "requires": {
- "import-from": "^2.1.0"
- }
- },
- "import-fresh": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
- "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "import-from": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
- "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
- "dev": true,
- "requires": {
- "resolve-from": "^3.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
- }
- }
- },
- "import-lazy": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
- "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
- "dev": true
- },
- "import-local": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
- "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
- "dev": true,
- "requires": {
- "pkg-dir": "^3.0.0",
- "resolve-cwd": "^2.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "in-publish": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
- "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
- "dev": true
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- },
- "indexes-of": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
- "dev": true
- },
- "infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc="
- },
- "inline-style-prefixer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz",
- "integrity": "sha1-wVPH6I/YT+9cYC6VqBaLJ3BnH+c=",
- "requires": {
- "bowser": "^1.0.0",
- "hyphenate-style-name": "^1.0.1"
- }
- },
- "inquirer": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz",
- "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=",
- "requires": {
- "ansi-escapes": "^1.1.0",
- "chalk": "^1.0.0",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^2.0.1",
- "figures": "^2.0.0",
- "lodash": "^4.3.0",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rx": "^4.1.0",
- "string-width": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "through": "^2.3.6"
- }
- },
- "internal-ip": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
- "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
- "dev": true,
- "requires": {
- "default-gateway": "^4.2.0",
- "ipaddr.js": "^1.9.0"
- }
- },
- "interpret": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
- "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
- "dev": true
- },
- "invariant": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
- "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
- "dev": true,
- "requires": {
- "loose-envify": "^1.0.0"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
- },
- "ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
- "dev": true
- },
- "ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
- "dev": true
- },
- "ipaddr.js": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
- "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
- "dev": true
- },
- "is-absolute-url": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
- "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
- "dev": true
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
- "dev": true
- },
- "is-alphanumeric": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz",
- "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=",
- "dev": true
- },
- "is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
- "dev": true,
- "requires": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
- }
- },
- "is-arguments": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
- "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
- "dev": true
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
- "dev": true,
- "requires": {
- "binary-extensions": "^1.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
- "dev": true
- },
- "is-callable": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
- "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-date-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
- "dev": true
- },
- "is-decimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
- "dev": true
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
- "dev": true
- }
- }
- },
- "is-directory": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
- "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-finite": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
- "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-hexadecimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
- "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "dev": true
- },
- "is-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
- "dev": true
- },
- "is-path-in-cwd": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
- "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
- "dev": true,
- "requires": {
- "is-path-inside": "^2.1.0"
- }
- },
- "is-path-inside": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
- "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
- "dev": true,
- "requires": {
- "path-is-inside": "^1.0.2"
- }
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "dev": true
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
- },
- "is-regex": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
- "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-regexp": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
- "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "is-string": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
- "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
- "dev": true
- },
- "is-symbol": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
- "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
- },
- "is-whitespace-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
- "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
- "dev": true
- },
- "is-word-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
- "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
- "dev": true
- },
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "isomorphic-fetch": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
- "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
- "requires": {
- "node-fetch": "^1.0.1",
- "whatwg-fetch": ">=0.10.0"
- }
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "javascript-detect-element-resize": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/javascript-detect-element-resize/-/javascript-detect-element-resize-0.5.3.tgz",
- "integrity": "sha1-GnHNUd/lZZB/KZAS/nOilBBAJd4="
- },
- "jquery": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz",
- "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="
- },
- "jquery.terminal": {
- "version": "1.23.2",
- "resolved": "https://registry.npmjs.org/jquery.terminal/-/jquery.terminal-1.23.2.tgz",
- "integrity": "sha512-ULKxZNzL8W4CoeAx5CJZTVY80SrNoeetA4lhnBeHd792uaLAkfRXMeJeARLWhBOrzDWo1yqn2nm4td0a+EU0dg==",
- "requires": {
- "@types/jquery": "^3.3.6",
- "jquery": "~3",
- "prismjs": "^1.15.0",
- "wcwidth": "^1.0.1"
- }
- },
- "js-base64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz",
- "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==",
- "dev": true
- },
- "js-beautify": {
- "version": "1.10.3",
- "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.3.tgz",
- "integrity": "sha512-wfk/IAWobz1TfApSdivH5PJ0miIHgDoYb1ugSqHcODPmaYu46rYe5FVuIEkhjg8IQiv6rDNPyhsqbsohI/C2vQ==",
- "requires": {
- "config-chain": "^1.1.12",
- "editorconfig": "^0.15.3",
- "glob": "^7.1.3",
- "mkdirp": "~0.5.1",
- "nopt": "~4.0.1"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
- "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- }
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
- "json-schema-defaults": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/json-schema-defaults/-/json-schema-defaults-0.2.0.tgz",
- "integrity": "sha1-ic64b/BTffvBpt21LyvQPvqF/4k="
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "json3": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
- "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
- "dev": true
- },
- "json5": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
- "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "jsonminify": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/jsonminify/-/jsonminify-0.4.1.tgz",
- "integrity": "sha1-gF2vuzk5UYjO6atYLIHvlZ1+cQw=",
- "dev": true
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "jstree": {
- "version": "3.3.9",
- "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.9.tgz",
- "integrity": "sha512-jRIbhg+BHrIs1Wm6oiJt3oKTVBE6sWS0PCp2/RlkIUqsLUPWUYgV3q8LfKoi1/E+YMzGtP6BuK4okk+0mwfmhQ==",
- "requires": {
- "jquery": ">=1.9.1"
- }
- },
- "jstree-bootstrap-theme": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/jstree-bootstrap-theme/-/jstree-bootstrap-theme-1.0.1.tgz",
- "integrity": "sha1-fV7cc6hG6Np/lPV6HMXd7p2eq0s=",
- "requires": {
- "jquery": ">=1.9.1"
- }
- },
- "jszip": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz",
- "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==",
- "requires": {
- "lie": "~3.3.0",
- "pako": "~1.0.2",
- "readable-stream": "~2.3.6",
- "set-immediate-shim": "~1.0.1"
- }
- },
- "keycode": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz",
- "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ="
- },
- "killable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
- "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "known-css-properties": {
- "version": "0.17.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.17.0.tgz",
- "integrity": "sha512-Vi3nxDGMm/z+lAaCjvAR1u+7fiv+sG6gU/iYDj5QOF8h76ytK9EW/EKfF0NeTyiGBi8Jy6Hklty/vxISrLox3w==",
- "dev": true
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "leaflet": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz",
- "integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ=="
- },
- "leaflet-polylinedecorator": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/leaflet-polylinedecorator/-/leaflet-polylinedecorator-1.6.0.tgz",
- "integrity": "sha1-nvef0bUwLWe3Lv6Vmo7NJVPycmY=",
- "requires": {
- "leaflet-rotatedmarker": "^0.2.0"
- }
- },
- "leaflet-providers": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/leaflet-providers/-/leaflet-providers-1.9.1.tgz",
- "integrity": "sha512-YpJB9y4/nT5NGicU9vuqlttJaCer6paD3J3b8Wrw+IIQvK9dtcdzE9CsTkDg7Dg9FeGp5NEr3hu17xcHbYI/2w=="
- },
- "leaflet-rotatedmarker": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/leaflet-rotatedmarker/-/leaflet-rotatedmarker-0.2.0.tgz",
- "integrity": "sha1-RGf0n5jRv9VpWb2cZwUgPdJgEnc="
- },
- "leaflet.markercluster": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.4.1.tgz",
- "integrity": "sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw=="
- },
- "less": {
- "version": "3.11.1",
- "resolved": "https://registry.npmjs.org/less/-/less-3.11.1.tgz",
- "integrity": "sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g==",
- "dev": true,
- "requires": {
- "clone": "^2.1.2",
- "errno": "^0.1.1",
- "graceful-fs": "^4.1.2",
- "image-size": "~0.5.0",
- "mime": "^1.4.1",
- "mkdirp": "^0.5.0",
- "promise": "^7.1.1",
- "request": "^2.83.0",
- "source-map": "~0.6.0",
- "tslib": "^1.10.0"
- },
- "dependencies": {
- "clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true
- }
- }
- },
- "less-loader": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz",
- "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==",
- "dev": true,
- "requires": {
- "clone": "^2.1.1",
- "loader-utils": "^1.1.0",
- "pify": "^4.0.1"
- },
- "dependencies": {
- "clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
- "dev": true
- }
- }
- },
- "leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true
- },
- "levenary": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz",
- "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==",
- "dev": true,
- "requires": {
- "leven": "^3.1.0"
- }
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "lie": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
- "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
- "requires": {
- "immediate": "~3.0.5"
- }
- },
- "lines-and-columns": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
- "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
- "dev": true
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
- "loader-fs-cache": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz",
- "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==",
- "dev": true,
- "requires": {
- "find-cache-dir": "^0.1.1",
- "mkdirp": "0.5.1"
- },
- "dependencies": {
- "find-cache-dir": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
- "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "mkdirp": "^0.5.1",
- "pkg-dir": "^1.0.0"
- }
- },
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "pkg-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
- "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0"
- }
- }
- }
- },
- "loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true
- },
- "loader-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "dependencies": {
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- }
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
- },
- "lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=",
- "dev": true
- },
- "lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
- },
- "lodash.isregexp": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isregexp/-/lodash.isregexp-4.0.1.tgz",
- "integrity": "sha1-4T5kezDNVZdSoEzZEghvr32hwws=",
- "dev": true
- },
- "lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
- },
- "lodash.throttle": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
- "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
- },
- "log-symbols": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
- "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "loglevel": {
- "version": "1.6.7",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.7.tgz",
- "integrity": "sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A==",
- "dev": true
- },
- "longest-streak": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
- "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
- "dev": true
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "dev": true,
- "requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
- }
- },
- "lower-case": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
- "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
- "dev": true
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- }
- },
- "make-plural": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-3.0.6.tgz",
- "integrity": "sha1-IDOgO6wpC487uRJY9lud9+iwHKc=",
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "mamacro": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
- "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==",
- "dev": true
- },
- "map-age-cleaner": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
- "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
- "dev": true,
- "requires": {
- "p-defer": "^1.0.0"
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "markdown-escapes": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
- "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
- "dev": true
- },
- "markdown-table": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz",
- "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==",
- "dev": true
- },
- "material-design-icons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/material-design-icons/-/material-design-icons-3.0.1.tgz",
- "integrity": "sha1-mnHEh0chjrylHlGmbaaCA4zct78=",
- "dev": true
- },
- "material-steppers": {
- "version": "git://github.com/thingsboard/material-steppers.git#ee6241d63b97b7c4a3f3b240cdb347c02a3dcb0a",
- "from": "git://github.com/thingsboard/material-steppers.git#master"
- },
- "material-ui": {
- "version": "0.16.7",
- "resolved": "https://registry.npmjs.org/material-ui/-/material-ui-0.16.7.tgz",
- "integrity": "sha1-XsUIDV8ieBcJLESRBd+cvIgHlBw=",
- "requires": {
- "babel-runtime": "^6.11.6",
- "inline-style-prefixer": "^2.0.1",
- "keycode": "^2.1.1",
- "lodash.merge": "^4.6.0",
- "lodash.throttle": "^4.1.1",
- "react-addons-create-fragment": "^15.0.0",
- "react-addons-transition-group": "^15.0.0",
- "react-event-listener": "^0.4.0",
- "recompose": "^0.21.0",
- "simple-assign": "^0.1.0",
- "warning": "^3.0.0"
- }
- },
- "material-ui-number-input": {
- "version": "5.0.24",
- "resolved": "https://registry.npmjs.org/material-ui-number-input/-/material-ui-number-input-5.0.24.tgz",
- "integrity": "sha1-CRJdGoK2whnpr4s8LGjJ7GwN+8Q=",
- "requires": {
- "bind-decorator": "^1.0.11",
- "object-assign": "^4.1.1",
- "prop-types": "^15.5.10"
- }
- },
- "mathml-tag-names": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
- "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
- "dev": true
- },
- "md-color-picker": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/md-color-picker/-/md-color-picker-0.2.6.tgz",
- "integrity": "sha1-OCfUkssPzZcgIG4+MqpRU/rfaIs=",
- "requires": {
- "tinycolor2": "*"
- }
- },
- "md-date-range-picker": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/md-date-range-picker/-/md-date-range-picker-0.8.4.tgz",
- "integrity": "sha512-TgLyozMJypi92yvXaljLcermTFhd1+0rlaVwV+Duo0EplbKfDJfFF3WohWhB7VmPwJNP//o44sUlecY+r/ZvXA==",
- "requires": {
- "angular": "^1.5.8",
- "angular-animate": "^1.5.8",
- "angular-aria": "^1.5.8",
- "angular-material": "^1.1.0",
- "angular-messages": "^1.5.8"
- }
- },
- "md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "mdPickers": {
- "version": "git://github.com/alenaksu/mdPickers.git#72592ae51c81a7260701055ea21870efa57fa7c8",
- "from": "git://github.com/alenaksu/mdPickers.git#0.7.5"
- },
- "mdast-util-compact": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz",
- "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==",
- "dev": true,
- "requires": {
- "unist-util-visit": "^1.1.0"
- }
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
- "dev": true
- },
- "mem": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
- "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
- "dev": true,
- "requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^2.0.0",
- "p-is-promise": "^2.0.0"
- },
- "dependencies": {
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- }
- }
- },
- "memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "dev": true,
- "requires": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dev": true,
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- }
- },
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
- "requires": {
- "is-utf8": "^0.2.0"
- }
- }
- }
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
- "dev": true
- },
- "merge2": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
- "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
- "dev": true
- },
- "messageformat": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-1.0.2.tgz",
- "integrity": "sha1-kI9GkfKf8o2uNcRUNqJM/5NAI4g=",
- "requires": {
- "glob": "~7.0.6",
- "make-plural": "~3.0.6",
- "messageformat-parser": "^1.0.0",
- "nopt": "~3.0.6",
- "reserved-words": "^0.1.1"
- }
- },
- "messageformat-parser": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-1.1.0.tgz",
- "integrity": "sha1-E7oiUKdrvejg/KDbs0dflcWUqQo="
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- }
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
- "dev": true
- },
- "mime-db": {
- "version": "1.43.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
- "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.26",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
- "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
- "dev": true,
- "requires": {
- "mime-db": "1.43.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI="
- },
- "min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "dev": true,
- "requires": {
- "dom-walk": "^0.1.0"
- }
- },
- "min-indent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz",
- "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=",
- "dev": true
- },
- "mini-css-extract-plugin": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz",
- "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.1.0",
- "normalize-url": "1.9.1",
- "schema-utils": "^1.0.0",
- "webpack-sources": "^1.1.0"
- },
- "dependencies": {
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- }
- }
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
- },
- "minimist-options": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.0.2.tgz",
- "integrity": "sha512-seq4hpWkYSUh1y7NXxzucwAN9yVlBc3Upgdjz8vLCP97jG8kaOmzYrVH/m7tQ1NYD1wdtZbSLfdy4zFmRWuc/w==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0"
- }
- },
- "minipass": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz",
- "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
- },
- "minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-pipeline": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz",
- "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "mississippi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
- "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
- "dev": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
- }
- }
- },
- "moment": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
- "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
- },
- "move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "multicast-dns": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
- "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
- "dev": true,
- "requires": {
- "dns-packet": "^1.3.1",
- "thunky": "^1.0.2"
- }
- },
- "multicast-dns-service-types": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
- "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
- },
- "nan": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
- "dev": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "dev": true
- },
- "neo-async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
- "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
- "dev": true
- },
- "ng-annotate": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ng-annotate/-/ng-annotate-1.2.1.tgz",
- "integrity": "sha1-64vBpnMccNCK9rAsPq8abj+55rs=",
- "dev": true,
- "requires": {
- "acorn": "~2.6.4",
- "alter": "~0.2.0",
- "convert-source-map": "~1.1.2",
- "optimist": "~0.6.1",
- "ordered-ast-traverse": "~1.1.1",
- "simple-fmt": "~0.1.0",
- "simple-is": "~0.2.0",
- "source-map": "~0.5.3",
- "stable": "~0.1.5",
- "stringmap": "~0.2.2",
- "stringset": "~0.2.1",
- "tryor": "~0.1.2"
- },
- "dependencies": {
- "acorn": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.6.4.tgz",
- "integrity": "sha1-6x9FtKQ/ox0DcBpexG87Umc+kO4=",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
- "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
- "dev": true
- }
- }
- },
- "ng-annotate-loader": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/ng-annotate-loader/-/ng-annotate-loader-0.6.1.tgz",
- "integrity": "sha1-6be3oVYrnHlzfVCIbVWN5/DfQlc=",
- "dev": true,
- "requires": {
- "clone": "^2.1.1",
- "loader-utils": "1.1.0",
- "ng-annotate": "1.2.1",
- "normalize-path": "2.0.1",
- "source-map": "0.5.6"
- },
- "dependencies": {
- "big.js": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
- "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
- "dev": true
- },
- "clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
- "dev": true
- },
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
- "dev": true
- },
- "json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true
- },
- "loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
- "dev": true,
- "requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
- }
- },
- "normalize-path": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz",
- "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=",
- "dev": true
- },
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- }
- }
- },
- "ng-annotate-patched": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/ng-annotate-patched/-/ng-annotate-patched-1.11.1.tgz",
- "integrity": "sha512-DmReqLu/cAdnXt7d0NpLC1hEDUH2z1CGs5ymQCjHd5+eAvWfkTl0k17pdFc0/C/EZRx+oed+4DJ7TsRILQVLUQ==",
- "dev": true,
- "requires": {
- "acorn": "^7.0.0",
- "acorn-walk": "^7.0.0",
- "commander": "^3.0.1",
- "convert-source-map": "^1.1.2",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "commander": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
- "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "ngFlowchart": {
- "version": "git://github.com/thingsboard/ngFlowchart.git#1343a7478961f68280d81f0ecda4e722a2068e0f",
- "from": "git://github.com/thingsboard/ngFlowchart.git#master"
- },
- "ngclipboard": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/ngclipboard/-/ngclipboard-1.1.2.tgz",
- "integrity": "sha1-RZ8B8+4eisQBWZquo3uXdQh9WW0=",
- "requires": {
- "clipboard": "~1.5.5"
- },
- "dependencies": {
- "clipboard": {
- "version": "1.5.16",
- "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.5.16.tgz",
- "integrity": "sha1-kW1ec5sAZL5hsLSKU1cx7K7z02c=",
- "requires": {
- "good-listener": "^1.2.0",
- "select": "^1.0.6",
- "tiny-emitter": "^1.0.0"
- }
- },
- "tiny-emitter": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-1.2.0.tgz",
- "integrity": "sha1-bchFBSywjr78GHRyO1jySmSMO28="
- }
- }
- },
- "ngreact": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/ngreact/-/ngreact-0.3.0.tgz",
- "integrity": "sha1-g4u3Z5BGKb6ApduynAp76xKbRKA="
- },
- "ngtemplate-loader": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ngtemplate-loader/-/ngtemplate-loader-2.0.1.tgz",
- "integrity": "sha1-nX7S6KI2NSOte2TXSqxALY2v8/M=",
- "dev": true,
- "requires": {
- "jsesc": "^0.5.0",
- "loader-utils": "^1.0.2"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true
- }
- }
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "no-case": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
- "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
- "dev": true,
- "requires": {
- "lower-case": "^1.1.1"
- }
- },
- "node-environment-flags": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
- "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
- "dev": true,
- "requires": {
- "object.getownpropertydescriptors": "^2.0.3",
- "semver": "^5.7.0"
- }
- },
- "node-fetch": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
- "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=",
- "requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
- }
- },
- "node-forge": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz",
- "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==",
- "dev": true
- },
- "node-gyp": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
- "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
- "dev": true,
- "requires": {
- "fstream": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "osenv": "0",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^2.0.0",
- "which": "1"
- },
- "dependencies": {
- "semver": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
- "dev": true
- }
- }
- },
- "node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dev": true,
- "requires": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- }
- }
- },
- "node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true
- },
- "node-releases": {
- "version": "1.1.49",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.49.tgz",
- "integrity": "sha512-xH8t0LS0disN0mtRCh+eByxFPie+msJUBL/lJDBuap53QGiYPa9joh83K4pCZgWJ+2L4b9h88vCVdXQ60NO2bg==",
- "dev": true,
- "requires": {
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "node-sass": {
- "version": "4.13.1",
- "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz",
- "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==",
- "dev": true,
- "requires": {
- "async-foreach": "^0.1.3",
- "chalk": "^1.1.1",
- "cross-spawn": "^3.0.0",
- "gaze": "^1.0.0",
- "get-stdin": "^4.0.1",
- "glob": "^7.0.3",
- "in-publish": "^2.0.0",
- "lodash": "^4.17.15",
- "meow": "^3.7.0",
- "mkdirp": "^0.5.1",
- "nan": "^2.13.2",
- "node-gyp": "^3.8.0",
- "npmlog": "^4.0.0",
- "request": "^2.88.0",
- "sass-graph": "^2.2.4",
- "stdout-stream": "^1.4.0",
- "true-case-path": "^1.0.2"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
- "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "which": "^1.2.9"
- }
- }
- }
- },
- "nopt": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
- "requires": {
- "abbrev": "1"
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
- "dev": true
- },
- "normalize-selector": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
- "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
- "dev": true
- },
- "normalize-url": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
- "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
- "dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "prepend-http": "^1.0.0",
- "query-string": "^4.1.0",
- "sort-keys": "^1.0.0"
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "dev": true,
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=",
- "dev": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "nth-check": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
- "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
- "dev": true,
- "requires": {
- "boolbase": "~1.0.0"
- }
- },
- "num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
- "dev": true
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-hash": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
- "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
- "dev": true
- },
- "object-inspect": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
- "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
- "dev": true
- },
- "object-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz",
- "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==",
- "dev": true
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.assign": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.0",
- "object-keys": "^1.0.11"
- }
- },
- "object.getownpropertydescriptors": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
- "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "object.values": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
- "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3"
- }
- },
- "objectpath": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/objectpath/-/objectpath-1.2.2.tgz",
- "integrity": "sha512-ie+GY5tJsKt7daHH6qGROf3JqxfD2XhfBPLY+HQrVuRY8MQE1ySKVSqQ/TQz/Dx7jDwuy3etQALDE1cRJAC0cg=="
- },
- "obuf": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
- "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
- "dev": true
- },
- "oclazyload": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/oclazyload/-/oclazyload-1.1.0.tgz",
- "integrity": "sha1-qYBzIvGQggqBwCLy7xcB0DbYPoc="
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "opencollective": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz",
- "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=",
- "requires": {
- "babel-polyfill": "6.23.0",
- "chalk": "1.1.3",
- "inquirer": "3.0.6",
- "minimist": "1.2.0",
- "node-fetch": "1.6.3",
- "opn": "4.0.2"
- },
- "dependencies": {
- "node-fetch": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz",
- "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=",
- "requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
- }
- }
- }
- },
- "opn": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
- "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
- "requires": {
- "object-assign": "^4.0.1",
- "pinkie-promise": "^2.0.0"
- }
- },
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
- "dev": true,
- "requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
- "dev": true
- }
- }
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "options": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
- "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
- },
- "ordered-ast-traverse": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ordered-ast-traverse/-/ordered-ast-traverse-1.1.1.tgz",
- "integrity": "sha1-aEOhcLwO7otSDMjdwd3TqjD6BXw=",
- "dev": true,
- "requires": {
- "ordered-esprima-props": "~1.1.0"
- }
- },
- "ordered-esprima-props": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ordered-esprima-props/-/ordered-esprima-props-1.1.0.tgz",
- "integrity": "sha1-qYJwht9fAQqmDpvQK24DNc6i/8s=",
- "dev": true
- },
- "original": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
- "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
- "dev": true,
- "requires": {
- "url-parse": "^1.4.3"
- }
- },
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
- "dev": true
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
- },
- "osenv": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
- "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=",
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "p-defer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
- "dev": true
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
- },
- "p-is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
- "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
- "dev": true
- },
- "p-limit": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
- "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "p-pipe": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz",
- "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=",
- "dev": true
- },
- "p-retry": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
- "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
- "dev": true,
- "requires": {
- "retry": "^0.12.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
- },
- "parallel-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
- "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
- "dev": true,
- "requires": {
- "cyclist": "^1.0.1",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "param-case": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
- "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
- "dev": true,
- "requires": {
- "no-case": "^2.2.0"
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-asn1": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
- "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
- "dev": true,
- "requires": {
- "asn1.js": "^4.0.0",
- "browserify-aes": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "parse-entities": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz",
- "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==",
- "dev": true,
- "requires": {
- "character-entities": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "character-reference-invalid": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-hexadecimal": "^1.0.0"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true
- },
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
- "dev": true
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "pbkdf2": {
- "version": "3.0.17",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
- "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
- "dev": true,
- "requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "picomatch": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
- "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==",
- "dev": true
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
- "pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- }
- },
- "portfinder": {
- "version": "1.0.25",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz",
- "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==",
- "dev": true,
- "requires": {
- "async": "^2.6.2",
- "debug": "^3.1.1",
- "mkdirp": "^0.5.1"
- },
- "dependencies": {
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.14"
- }
- },
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "postcss": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
- "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "postcss-html": {
- "version": "0.36.0",
- "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz",
- "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==",
- "dev": true,
- "requires": {
- "htmlparser2": "^3.10.0"
- }
- },
- "postcss-jsx": {
- "version": "0.36.4",
- "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.4.tgz",
- "integrity": "sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA==",
- "dev": true,
- "requires": {
- "@babel/core": ">=7.2.2"
- }
- },
- "postcss-less": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz",
- "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.14"
- }
- },
- "postcss-load-config": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
- "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
- "dev": true,
- "requires": {
- "cosmiconfig": "^5.0.0",
- "import-cwd": "^2.0.0"
- }
- },
- "postcss-loader": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
- "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=",
- "dev": true,
- "requires": {
- "loader-utils": "^1.1.0",
- "postcss": "^7.0.0",
- "postcss-load-config": "^2.0.0",
- "schema-utils": "^1.0.0"
- },
- "dependencies": {
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- }
- }
- },
- "postcss-markdown": {
- "version": "0.36.0",
- "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz",
- "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==",
- "dev": true,
- "requires": {
- "remark": "^10.0.1",
- "unist-util-find-all-after": "^1.0.2"
- }
- },
- "postcss-media-query-parser": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
- "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=",
- "dev": true
- },
- "postcss-modules-extract-imports": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
- "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.5"
- }
- },
- "postcss-modules-local-by-default": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
- "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
- "dev": true,
- "requires": {
- "icss-utils": "^4.1.1",
- "postcss": "^7.0.16",
- "postcss-selector-parser": "^6.0.2",
- "postcss-value-parser": "^4.0.0"
- }
- },
- "postcss-modules-scope": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz",
- "integrity": "sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.6",
- "postcss-selector-parser": "^6.0.0"
- }
- },
- "postcss-modules-values": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
- "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
- "dev": true,
- "requires": {
- "icss-utils": "^4.0.0",
- "postcss": "^7.0.6"
- }
- },
- "postcss-reporter": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz",
- "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.1",
- "lodash": "^4.17.11",
- "log-symbols": "^2.2.0",
- "postcss": "^7.0.7"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.1"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "postcss-resolve-nested-selector": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
- "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=",
- "dev": true
- },
- "postcss-safe-parser": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz",
- "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.26"
- }
- },
- "postcss-sass": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.2.tgz",
- "integrity": "sha512-hcRgnd91OQ6Ot9R90PE/khUDCJHG8Uxxd3F7Y0+9VHjBiJgNv7sK5FxyHMCBtoLmmkzVbSj3M3OlqUfLJpq0CQ==",
- "dev": true,
- "requires": {
- "gonzales-pe": "^4.2.4",
- "postcss": "^7.0.21"
- }
- },
- "postcss-scss": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.0.0.tgz",
- "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.0"
- }
- },
- "postcss-selector-parser": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
- "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
- "dev": true,
- "requires": {
- "cssesc": "^3.0.0",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
- }
- },
- "postcss-sorting": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz",
- "integrity": "sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.14",
- "postcss": "^7.0.17"
- }
- },
- "postcss-syntax": {
- "version": "0.36.2",
- "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz",
- "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==",
- "dev": true
- },
- "postcss-value-parser": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz",
- "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
- "dev": true
- },
- "pretty-error": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
- "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
- "dev": true,
- "requires": {
- "renderkid": "^2.0.1",
- "utila": "~0.4"
- }
- },
- "prismjs": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.19.0.tgz",
- "integrity": "sha512-IVFtbW9mCWm9eOIaEkNyo2Vl4NnEifis2GQ7/MLRG5TQe6t+4Sj9J5QWI9i3v+SS43uZBlCAOn+zYTVYQcPXJw==",
- "requires": {
- "clipboard": "^2.0.0"
- },
- "dependencies": {
- "clipboard": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz",
- "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==",
- "optional": true,
- "requires": {
- "good-listener": "^1.2.2",
- "select": "^1.1.2",
- "tiny-emitter": "^2.0.0"
- }
- }
- }
- },
- "private": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
- "requires": {
- "asap": "~2.0.3"
- }
- },
- "promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
- "dev": true
- },
- "prop-types": {
- "version": "15.7.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
- "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "proto-list": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
- "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
- },
- "proxy-addr": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
- "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
- "dev": true,
- "requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.9.0"
- }
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
- "psl": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz",
- "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==",
- "dev": true
- },
- "public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
- "dev": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
- "query-string": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
- "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- }
- },
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "dev": true
- },
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
- "dev": true
- },
- "querystringify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
- "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
- "dev": true
- },
- "quick-lru": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
- "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
- "dev": true
- },
- "raf": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
- "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
- "requires": {
- "performance-now": "^2.1.0"
- }
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true
- },
- "raphael": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/raphael/-/raphael-2.3.0.tgz",
- "integrity": "sha512-w2yIenZAQnp257XUWGni4bLMVxpUpcIl7qgxEgDIXtmSypYtlNxfXWpOBxs7LBTps5sDwhRnrToJrMUrivqNTQ==",
- "requires": {
- "eve-raphael": "0.5.0"
- }
- },
- "raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "dev": true,
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "dev": true
- }
- }
- },
- "raw-loader": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-3.1.0.tgz",
- "integrity": "sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.1.0",
- "schema-utils": "^2.0.1"
- }
- },
- "rc-align": {
- "version": "2.4.5",
- "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz",
- "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==",
- "requires": {
- "babel-runtime": "^6.26.0",
- "dom-align": "^1.7.0",
- "prop-types": "^15.5.8",
- "rc-util": "^4.0.4"
- }
- },
- "rc-animate": {
- "version": "2.10.2",
- "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.10.2.tgz",
- "integrity": "sha512-cE/A7piAzoWFSgUD69NmmMraqCeqVBa51UErod8NS3LUEqWfppSVagHfa0qHAlwPVPiIBg3emRONyny3eiH0Dg==",
- "requires": {
- "babel-runtime": "6.x",
- "classnames": "^2.2.6",
- "css-animation": "^1.3.2",
- "prop-types": "15.x",
- "raf": "^3.4.0",
- "rc-util": "^4.15.3",
- "react-lifecycles-compat": "^3.0.4"
- }
- },
- "rc-menu": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-5.1.4.tgz",
- "integrity": "sha1-5d8I/ouDPoFGkTX/E7MKuPIf88Y=",
- "requires": {
- "babel-runtime": "6.x",
- "classnames": "2.x",
- "create-react-class": "^15.5.2",
- "dom-scroll-into-view": "1.x",
- "prop-types": "^15.5.6",
- "rc-animate": "2.x",
- "rc-util": "^4.0.2"
- }
- },
- "rc-select": {
- "version": "6.9.8",
- "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-6.9.8.tgz",
- "integrity": "sha512-PO665G7iD0+CWTXQBd+wsVrDd/Y4FRrjppOYbc0R5O/di92Aj8NItVFYFtBN4olqvdUh5yXDkvf2TW0QAPQJvQ==",
- "requires": {
- "babel-runtime": "^6.23.0",
- "classnames": "2.x",
- "component-classes": "1.x",
- "dom-scroll-into-view": "1.x",
- "prop-types": "^15.5.8",
- "rc-animate": "2.x",
- "rc-menu": "^5.0.11",
- "rc-trigger": "1.x",
- "rc-util": "^4.0.4",
- "warning": "^3.0.0"
- }
- },
- "rc-trigger": {
- "version": "1.11.5",
- "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-1.11.5.tgz",
- "integrity": "sha1-+I+fhODnn44O8cjRv4rCIItxViA=",
- "requires": {
- "babel-runtime": "6.x",
- "create-react-class": "15.x",
- "prop-types": "15.x",
- "rc-align": "2.x",
- "rc-animate": "2.x",
- "rc-util": "4.x"
- }
- },
- "rc-util": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.19.0.tgz",
- "integrity": "sha512-mptALlLwpeczS3nrv83DbwJNeupolbuvlIEjcvimSiWI8NUBjpF0HgG3kWp1RymiuiRCNm9yhaXqDz0a99dpgQ==",
- "requires": {
- "add-dom-event-listener": "^1.1.0",
- "babel-runtime": "6.x",
- "prop-types": "^15.5.10",
- "react-lifecycles-compat": "^3.0.4",
- "shallowequal": "^1.1.0"
- }
- },
- "react": {
- "version": "15.6.2",
- "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz",
- "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=",
- "requires": {
- "create-react-class": "^15.6.0",
- "fbjs": "^0.8.9",
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.0",
- "prop-types": "^15.5.10"
- }
- },
- "react-ace": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-4.4.0.tgz",
- "integrity": "sha1-be42amljyzOur8ndPCWaJGAXSSY=",
- "requires": {
- "brace": "^0.10.0",
- "lodash.isequal": "^4.1.1",
- "opencollective": "^1.0.3",
- "prop-types": "^15.5.8"
- }
- },
- "react-addons-create-fragment": {
- "version": "15.6.2",
- "resolved": "https://registry.npmjs.org/react-addons-create-fragment/-/react-addons-create-fragment-15.6.2.tgz",
- "integrity": "sha1-o5TefCx77Na1R1uhuXrEcs58dPg=",
- "requires": {
- "fbjs": "^0.8.4",
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.0"
- }
- },
- "react-addons-transition-group": {
- "version": "15.6.2",
- "resolved": "https://registry.npmjs.org/react-addons-transition-group/-/react-addons-transition-group-15.6.2.tgz",
- "integrity": "sha1-i668Kukczb8kX+Kcn9PTb4tHGSM=",
- "requires": {
- "react-transition-group": "^1.2.0"
- }
- },
- "react-dom": {
- "version": "15.6.2",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz",
- "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=",
- "requires": {
- "fbjs": "^0.8.9",
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.0",
- "prop-types": "^15.5.10"
- }
- },
- "react-dropzone": {
- "version": "3.13.4",
- "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-3.13.4.tgz",
- "integrity": "sha1-hNomgVxAM5aRxJtFRMLvehaRLMw=",
- "requires": {
- "attr-accept": "^1.0.3",
- "prop-types": "^15.5.7"
- }
- },
- "react-event-listener": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.4.5.tgz",
- "integrity": "sha1-4+iVoJcM8U7o+JAROvaBl6vz0LE=",
- "requires": {
- "babel-runtime": "^6.20.0",
- "fbjs": "^0.8.4",
- "prop-types": "^15.5.4",
- "warning": "^3.0.0"
- }
- },
- "react-hot-loader": {
- "version": "4.12.19",
- "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.19.tgz",
- "integrity": "sha512-p8AnA4QE2GtrvkdmqnKrEiijtVlqdTIDCHZOwItkI9kW51bt5XnQ/4Anz8giiWf9kqBpEQwsmnChDCAFBRyR/Q==",
- "dev": true,
- "requires": {
- "fast-levenshtein": "^2.0.6",
- "global": "^4.3.0",
- "hoist-non-react-statics": "^3.3.0",
- "loader-utils": "^1.1.0",
- "prop-types": "^15.6.1",
- "react-lifecycles-compat": "^3.0.4",
- "shallowequal": "^1.1.0",
- "source-map": "^0.7.3"
- },
- "dependencies": {
- "hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "dev": true,
- "requires": {
- "react-is": "^16.7.0"
- }
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
- }
- },
- "react-is": {
- "version": "16.12.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz",
- "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q=="
- },
- "react-lifecycles-compat": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
- "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
- },
- "react-schema-form": {
- "version": "0.3.11",
- "resolved": "https://registry.npmjs.org/react-schema-form/-/react-schema-form-0.3.11.tgz",
- "integrity": "sha1-gWdjoGUuehisJBBzVsceOmfUHYE=",
- "requires": {
- "classnames": "^2.2.5",
- "lodash": "^4.16.6",
- "objectpath": "^1.2.1",
- "tv4": "^1.2.7"
- }
- },
- "react-tap-event-plugin": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/react-tap-event-plugin/-/react-tap-event-plugin-2.0.1.tgz",
- "integrity": "sha1-MWvrO8ZVbinshppyk+icgmqQdNI=",
- "requires": {
- "fbjs": "^0.8.6"
- }
- },
- "react-transition-group": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.1.tgz",
- "integrity": "sha1-4R9yslf5IbITIpp3TfRmEjRsfKY=",
- "requires": {
- "chain-function": "^1.0.0",
- "dom-helpers": "^3.2.0",
- "loose-envify": "^1.3.1",
- "prop-types": "^15.5.6",
- "warning": "^3.0.0"
- }
- },
- "reactcss": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
- "integrity": "sha1-wAATh15Vexzw39mjaKHD2rO1SN0=",
- "requires": {
- "lodash": "^4.0.1"
- }
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- },
- "dependencies": {
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- }
- },
- "recast": {
- "version": "0.11.23",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
- "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
- "dev": true,
- "requires": {
- "ast-types": "0.9.6",
- "esprima": "~3.1.0",
- "private": "~0.1.5",
- "source-map": "~0.5.0"
- },
- "dependencies": {
- "esprima": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
- "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
- "dev": true
- }
- }
- },
- "recompose": {
- "version": "0.21.2",
- "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.21.2.tgz",
- "integrity": "sha1-/z+9sjl7HHfEfUUb4qY7kpXURoE=",
- "requires": {
- "change-emitter": "^0.1.2",
- "fbjs": "^0.8.1",
- "hoist-non-react-statics": "^1.0.0",
- "symbol-observable": "^1.0.4"
- }
- },
- "redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "dev": true,
- "requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- },
- "dependencies": {
- "indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- }
- }
- },
- "regenerate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
- "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
- "dev": true
- },
- "regenerate-unicode-properties": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
- "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.0"
- }
- },
- "regenerator-runtime": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
- },
- "regenerator-transform": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
- "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
- "dev": true,
- "requires": {
- "private": "^0.1.6"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "regexp.prototype.flags": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
- "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
- }
- },
- "regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
- "dev": true
- },
- "regexpu-core": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
- "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^8.1.0",
- "regjsgen": "^0.5.0",
- "regjsparser": "^0.6.0",
- "unicode-match-property-ecmascript": "^1.0.4",
- "unicode-match-property-value-ecmascript": "^1.1.0"
- }
- },
- "regjsgen": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
- "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
- "dev": true
- },
- "regjsparser": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.3.tgz",
- "integrity": "sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA==",
- "dev": true,
- "requires": {
- "jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true
- }
- }
- },
- "relateurl": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
- "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
- "dev": true
- },
- "remark": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz",
- "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==",
- "dev": true,
- "requires": {
- "remark-parse": "^6.0.0",
- "remark-stringify": "^6.0.0",
- "unified": "^7.0.0"
- }
- },
- "remark-parse": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz",
- "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==",
- "dev": true,
- "requires": {
- "collapse-white-space": "^1.0.2",
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-whitespace-character": "^1.0.0",
- "is-word-character": "^1.0.0",
- "markdown-escapes": "^1.0.0",
- "parse-entities": "^1.1.0",
- "repeat-string": "^1.5.4",
- "state-toggle": "^1.0.0",
- "trim": "0.0.1",
- "trim-trailing-lines": "^1.0.0",
- "unherit": "^1.0.4",
- "unist-util-remove-position": "^1.0.0",
- "vfile-location": "^2.0.0",
- "xtend": "^4.0.1"
- }
- },
- "remark-stringify": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz",
- "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==",
- "dev": true,
- "requires": {
- "ccount": "^1.0.0",
- "is-alphanumeric": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-whitespace-character": "^1.0.0",
- "longest-streak": "^2.0.1",
- "markdown-escapes": "^1.0.0",
- "markdown-table": "^1.1.0",
- "mdast-util-compact": "^1.0.0",
- "parse-entities": "^1.0.2",
- "repeat-string": "^1.5.4",
- "state-toggle": "^1.0.0",
- "stringify-entities": "^1.0.1",
- "unherit": "^1.0.4",
- "xtend": "^4.0.1"
- }
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
- "renderkid": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
- "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
- "dev": true,
- "requires": {
- "css-select": "^1.1.0",
- "dom-converter": "^0.2",
- "htmlparser2": "^3.3.0",
- "strip-ansi": "^3.0.0",
- "utila": "^0.4.0"
- }
- },
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true,
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
- "dev": true
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
- "dev": true
- },
- "reserved-words": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz",
- "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE="
- },
- "resolve": {
- "version": "1.15.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
- "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "resolve-cwd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
- "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
- "dev": true,
- "requires": {
- "resolve-from": "^3.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
- }
- }
- },
- "resolve-dir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.0",
- "global-modules": "^1.0.0"
- },
- "dependencies": {
- "global-modules": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
- "dev": true,
- "requires": {
- "global-prefix": "^1.0.1",
- "is-windows": "^1.0.1",
- "resolve-dir": "^1.0.0"
- }
- },
- "global-prefix": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.2",
- "homedir-polyfill": "^1.0.1",
- "ini": "^1.3.4",
- "is-windows": "^1.0.1",
- "which": "^1.2.14"
- }
- }
- }
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=",
- "dev": true
- },
- "retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
- "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
- "dev": true
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
- }
- },
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "run-async": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
- "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "requires": {
- "is-promise": "^2.1.0"
- }
- },
- "run-parallel": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
- "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
- "dev": true
- },
- "run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1"
- }
- },
- "rx": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
- "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
- },
- "rxjs": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
- "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
- "dev": true,
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
- },
- "sass-graph": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
- "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
- "dev": true,
- "requires": {
- "glob": "^7.0.0",
- "lodash": "^4.0.0",
- "scss-tokenizer": "^0.2.3",
- "yargs": "^7.0.0"
- }
- },
- "sass-loader": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz",
- "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==",
- "dev": true,
- "requires": {
- "clone-deep": "^4.0.1",
- "loader-utils": "^1.0.1",
- "neo-async": "^2.5.0",
- "pify": "^4.0.1",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "sass-material-colors": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/sass-material-colors/-/sass-material-colors-0.0.5.tgz",
- "integrity": "sha1-uURTkjbJTi1OzjXS7j+iLxCy7UM="
- },
- "schema-inspector": {
- "version": "1.6.9",
- "resolved": "https://registry.npmjs.org/schema-inspector/-/schema-inspector-1.6.9.tgz",
- "integrity": "sha512-MNS3SOn6noecIv9R+gwroIgiOLQoRY1IRXToFvVBo2QMfnXy1E+SGRVWJFsJPqgy0lAivUfPLaVLhvAI35HKRg==",
- "requires": {
- "async": "^3.1.0"
- }
- },
- "schema-utils": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.4.tgz",
- "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==",
- "dev": true,
- "requires": {
- "ajv": "^6.10.2",
- "ajv-keywords": "^3.4.1"
- }
- },
- "scss-tokenizer": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
- "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
- "dev": true,
- "requires": {
- "js-base64": "^2.1.8",
- "source-map": "^0.4.2"
- },
- "dependencies": {
- "source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "dev": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
- }
- }
- },
- "select": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
- "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
- },
- "select-hose": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
- "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
- "dev": true
- },
- "selfsigned": {
- "version": "1.10.7",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz",
- "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==",
- "dev": true,
- "requires": {
- "node-forge": "0.9.0"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- }
- }
- },
- "serialize-javascript": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
- "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==",
- "dev": true
- },
- "serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
- "dev": true,
- "requires": {
- "accepts": "~1.3.4",
- "batch": "0.6.1",
- "debug": "2.6.9",
- "escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
- },
- "dependencies": {
- "http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
- }
- }
- },
- "serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "dev": true,
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "set-immediate-shim": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
- "dev": true
- },
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.2"
- }
- },
- "shallowequal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
- "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "sigmund": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA="
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
- },
- "simple-assign": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/simple-assign/-/simple-assign-0.1.0.tgz",
- "integrity": "sha1-F/0wZqXz13OPUDIbsPFMooHMS6o="
- },
- "simple-fmt": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz",
- "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=",
- "dev": true
- },
- "simple-is": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz",
- "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=",
- "dev": true
- },
- "slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true
- },
- "slice-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
- "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- }
- }
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "sockjs": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
- "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=",
- "dev": true,
- "requires": {
- "faye-websocket": "^0.10.0",
- "uuid": "^3.0.1"
- }
- },
- "sockjs-client": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
- "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
- "dev": true,
- "requires": {
- "debug": "^3.2.5",
- "eventsource": "^1.0.7",
- "faye-websocket": "~0.11.1",
- "inherits": "^2.0.3",
- "json3": "^3.3.2",
- "url-parse": "^1.4.3"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "faye-websocket": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
- "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
- "dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "sort-keys": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
- "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
- "dev": true,
- "requires": {
- "is-plain-obj": "^1.0.0"
- }
- },
- "source-list-map": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
- "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
- "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
- "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
- "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
- "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
- "dev": true
- },
- "spdy": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz",
- "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==",
- "dev": true,
- "requires": {
- "debug": "^4.1.0",
- "handle-thing": "^2.0.0",
- "http-deceiver": "^1.2.7",
- "select-hose": "^2.0.0",
- "spdy-transport": "^3.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "spdy-transport": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
- "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.0",
- "detect-node": "^2.0.4",
- "hpack.js": "^2.1.6",
- "obuf": "^1.1.2",
- "readable-stream": "^3.0.6",
- "wbuf": "^1.7.3"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "specificity": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
- "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
- "dev": true
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "split.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/split.js/-/split.js-1.3.5.tgz",
- "integrity": "sha1-YuLOZtLPkcx3SqXwdJ/yUTgDn1A="
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "ssri": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz",
- "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.1",
- "minipass": "^3.1.1"
- }
- },
- "stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
- "dev": true
- },
- "state-toggle": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
- "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
- "dev": true
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "dev": true
- },
- "stdout-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
- "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.1"
- }
- },
- "stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "dev": true,
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "stream-each": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
- "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dev": true,
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- }
- },
- "stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
- "strict-uri-encode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "string.prototype.trimleft": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
- "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "function-bind": "^1.1.1"
- }
- },
- "string.prototype.trimright": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
- "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "function-bind": "^1.1.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "stringify-entities": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz",
- "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==",
- "dev": true,
- "requires": {
- "character-entities-html4": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-hexadecimal": "^1.0.0"
- }
- },
- "stringmap": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz",
- "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=",
- "dev": true
- },
- "stringset": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz",
- "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
- },
- "strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1"
- }
- },
- "strip-json-comments": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
- "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
- "dev": true
- },
- "style-loader": {
- "version": "0.23.1",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
- "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.1.0",
- "schema-utils": "^1.0.0"
- },
- "dependencies": {
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- }
- }
- },
- "style-search": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
- "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
- "dev": true
- },
- "stylelint": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.0.0.tgz",
- "integrity": "sha512-6sjgOJbM3iLhnUtmRO0J1vvxie9VnhIZX/2fCehjylv9Gl9u0ytehGCTm9Lhw2p1F8yaNZn5UprvhCB8C3g/Tg==",
- "dev": true,
- "requires": {
- "autoprefixer": "^9.7.3",
- "balanced-match": "^1.0.0",
- "chalk": "^3.0.0",
- "cosmiconfig": "^6.0.0",
- "debug": "^4.1.1",
- "execall": "^2.0.0",
- "file-entry-cache": "^5.0.1",
- "get-stdin": "^7.0.0",
- "global-modules": "^2.0.0",
- "globby": "^11.0.0",
- "globjoin": "^0.1.4",
- "html-tags": "^3.1.0",
- "ignore": "^5.1.4",
- "import-lazy": "^4.0.0",
- "imurmurhash": "^0.1.4",
- "known-css-properties": "^0.17.0",
- "leven": "^3.1.0",
- "lodash": "^4.17.15",
- "log-symbols": "^3.0.0",
- "mathml-tag-names": "^2.1.1",
- "meow": "^6.0.0",
- "micromatch": "^4.0.2",
- "normalize-selector": "^0.2.0",
- "postcss": "^7.0.26",
- "postcss-html": "^0.36.0",
- "postcss-jsx": "^0.36.3",
- "postcss-less": "^3.1.4",
- "postcss-markdown": "^0.36.0",
- "postcss-media-query-parser": "^0.2.3",
- "postcss-reporter": "^6.0.1",
- "postcss-resolve-nested-selector": "^0.1.1",
- "postcss-safe-parser": "^4.0.1",
- "postcss-sass": "^0.4.2",
- "postcss-scss": "^2.0.0",
- "postcss-selector-parser": "^3.1.0",
- "postcss-syntax": "^0.36.2",
- "postcss-value-parser": "^4.0.2",
- "resolve-from": "^5.0.0",
- "slash": "^3.0.0",
- "specificity": "^0.4.1",
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "style-search": "^0.1.0",
- "sugarss": "^2.0.0",
- "svg-tags": "^1.0.0",
- "table": "^5.4.6",
- "v8-compile-cache": "^2.1.0",
- "write-file-atomic": "^3.0.1"
- },
- "dependencies": {
- "@nodelib/fs.stat": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
- "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "camelcase-keys": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.1.2.tgz",
- "integrity": "sha512-QfFrU0CIw2oltVvpndW32kuJ/9YOJwUnmWrjlXt1nnJZHCaS9i6bfOpg9R4Lw8aZjStkJWM+jc0cdXjWBgVJSw==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "map-obj": "^4.0.0",
- "quick-lru": "^4.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "dev": true,
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "fast-glob": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz",
- "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.0",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.2"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "get-stdin": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
- "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
- "dev": true
- },
- "glob-parent": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
- "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globby": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz",
- "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "ignore": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
- "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "map-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz",
- "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==",
- "dev": true
- },
- "meow": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-6.0.1.tgz",
- "integrity": "sha512-kxGTFgT/b7/oSRSQsJ0qsT5IMU+bgZ1eAdSA3kIV7onkW0QWo/hL5RbGlMfvBjHJKPE1LaPX0kdecYFiqYWjUw==",
- "dev": true,
- "requires": {
- "@types/minimist": "^1.2.0",
- "camelcase-keys": "^6.1.1",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.0.0",
- "minimist-options": "^4.0.1",
- "normalize-package-data": "^2.5.0",
- "read-pkg-up": "^7.0.0",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.8.1",
- "yargs-parser": "^16.1.0"
- }
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "parse-json": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
- "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1",
- "lines-and-columns": "^1.1.6"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "postcss-selector-parser": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
- "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
- "dev": true,
- "requires": {
- "dot-prop": "^5.2.0",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
- }
- },
- "read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
- "requires": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
- }
- }
- },
- "read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
- "requires": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- }
- },
- "redent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
- "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
- "dev": true,
- "requires": {
- "indent-string": "^4.0.0",
- "strip-indent": "^3.0.0"
- }
- },
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "strip-indent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
- "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
- "dev": true,
- "requires": {
- "min-indent": "^1.0.0"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "trim-newlines": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz",
- "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==",
- "dev": true
- },
- "yargs-parser": {
- "version": "16.1.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz",
- "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "stylelint-config-recommended": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz",
- "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==",
- "dev": true
- },
- "stylelint-config-recommended-scss": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-4.1.0.tgz",
- "integrity": "sha512-4012ca0weVi92epm3RRBRZcRJIyl5vJjJ/tJAKng+Qat5+cnmuCwyOI2vXkKdjNfGd0gvzyKCKEkvTMDcbtd7Q==",
- "dev": true,
- "requires": {
- "stylelint-config-recommended": "^3.0.0"
- }
- },
- "stylelint-config-standard": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-19.0.0.tgz",
- "integrity": "sha512-VvcODsL1PryzpYteWZo2YaA5vU/pWfjqBpOvmeA8iB2MteZ/ZhI1O4hnrWMidsS4vmEJpKtjdhLdfGJmmZm6Cg==",
- "dev": true,
- "requires": {
- "stylelint-config-recommended": "^3.0.0"
- }
- },
- "stylelint-order": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-4.0.0.tgz",
- "integrity": "sha512-bXV0v+jfB0+JKsqIn3mLglg1Dj2QCYkFHNfL1c+rVMEmruZmW5LUqT/ARBERfBm8SFtCuXpEdatidw/3IkcoiA==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15",
- "postcss": "^7.0.26",
- "postcss-sorting": "^5.0.1"
- }
- },
- "stylelint-scss": {
- "version": "3.13.0",
- "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.13.0.tgz",
- "integrity": "sha512-SaLnvQyndaPcsgVJsMh6zJ1uKVzkRZJx+Wg/stzoB1mTBdEmGketbHrGbMQNymzH/0mJ06zDSpeCDvNxqIJE5A==",
- "dev": true,
- "requires": {
- "lodash.isboolean": "^3.0.3",
- "lodash.isregexp": "^4.0.1",
- "lodash.isstring": "^4.0.1",
- "postcss-media-query-parser": "^0.2.3",
- "postcss-resolve-nested-selector": "^0.1.1",
- "postcss-selector-parser": "^6.0.2",
- "postcss-value-parser": "^4.0.2"
- }
- },
- "stylelint-webpack-plugin": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stylelint-webpack-plugin/-/stylelint-webpack-plugin-1.2.3.tgz",
- "integrity": "sha512-XEevZZzlI6k3e0Amp7AtpZ/elgaOdPPwLFY9InNoajw4KNRcZTkK61ZsZdHvIyK32Ej9L9u4fwfXG2QGKW0imA==",
- "dev": true,
- "requires": {
- "arrify": "^2.0.1",
- "micromatch": "^4.0.2",
- "schema-utils": "^2.6.1"
- },
- "dependencies": {
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "sugarss": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz",
- "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.2"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
- },
- "svg-tags": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
- "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
- "dev": true
- },
- "symbol-observable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
- "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ="
- },
- "table": {
- "version": "5.4.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "dev": true,
- "requires": {
- "ajv": "^6.10.2",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
- "dev": true
- },
- "tar": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
- "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
- "dev": true,
- "requires": {
- "block-stream": "*",
- "fstream": "^1.0.12",
- "inherits": "2"
- }
- },
- "terser": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.3.tgz",
- "integrity": "sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "terser-webpack-plugin": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
- "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
- "dev": true,
- "requires": {
- "cacache": "^12.0.2",
- "find-cache-dir": "^2.1.0",
- "is-wsl": "^1.1.0",
- "schema-utils": "^1.0.0",
- "serialize-javascript": "^2.1.2",
- "source-map": "^0.6.1",
- "terser": "^4.1.2",
- "webpack-sources": "^1.4.0",
- "worker-farm": "^1.7.0"
- },
- "dependencies": {
- "cacache": {
- "version": "12.0.3",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
- "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "ssri": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- }
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "thunky": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
- "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
- "dev": true
- },
- "timers-browserify": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
- "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
- "dev": true,
- "requires": {
- "setimmediate": "^1.0.4"
- }
- },
- "tiny-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
- "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
- },
- "tinycolor2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz",
- "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g="
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
- "dev": true
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "dev": true
- },
- "tooltipster": {
- "version": "4.2.7",
- "resolved": "https://registry.npmjs.org/tooltipster/-/tooltipster-4.2.7.tgz",
- "integrity": "sha512-W4tY3LG2eyPY2VQZRH3JcsNuRl3jPCEGmKBPOMTP/05E3+1kOJjASzPRRkcpP+uf9vqX7+896ivU86f6B8Esgw=="
- },
- "toposort": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
- "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
- "dev": true
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "trim": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
- "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
- "dev": true
- },
- "trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
- "dev": true
- },
- "trim-trailing-lines": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz",
- "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==",
- "dev": true
- },
- "trough": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
- "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
- "dev": true
- },
- "true-case-path": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
- "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
- "dev": true,
- "requires": {
- "glob": "^7.1.2"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
- }
- },
- "tryor": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz",
- "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=",
- "dev": true
- },
- "tslib": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
- "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
- "dev": true
- },
- "tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
- "dev": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tv4": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz",
- "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM="
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- },
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dev": true,
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "typeface-roboto": {
- "version": "0.0.22",
- "resolved": "https://registry.npmjs.org/typeface-roboto/-/typeface-roboto-0.0.22.tgz",
- "integrity": "sha1-A7YLsCsQ+VCaaDImsDmucEFj5WE="
- },
- "ua-parser-js": {
- "version": "0.7.21",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz",
- "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ=="
- },
- "uglify-js": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
- "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
- "dev": true,
- "requires": {
- "commander": "~2.19.0",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
- "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
- "dev": true
- }
- }
- },
- "uglifyjs-webpack-plugin": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz",
- "integrity": "sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg==",
- "dev": true,
- "requires": {
- "cacache": "^12.0.2",
- "find-cache-dir": "^2.1.0",
- "is-wsl": "^1.1.0",
- "schema-utils": "^1.0.0",
- "serialize-javascript": "^1.7.0",
- "source-map": "^0.6.1",
- "uglify-js": "^3.6.0",
- "webpack-sources": "^1.4.0",
- "worker-farm": "^1.7.0"
- },
- "dependencies": {
- "cacache": {
- "version": "12.0.3",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
- "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "serialize-javascript": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
- "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "ssri": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "uglify-js": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.0.tgz",
- "integrity": "sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ==",
- "dev": true,
- "requires": {
- "commander": "~2.20.3",
- "source-map": "~0.6.1"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- }
- }
- },
- "ultron": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
- "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
- },
- "unherit": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
- "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.0",
- "xtend": "^4.0.0"
- }
- },
- "unicode-canonical-property-names-ecmascript": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
- "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
- "dev": true
- },
- "unicode-match-property-ecmascript": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
- "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
- "dev": true,
- "requires": {
- "unicode-canonical-property-names-ecmascript": "^1.0.4",
- "unicode-property-aliases-ecmascript": "^1.0.4"
- }
- },
- "unicode-match-property-value-ecmascript": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
- "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
- "dev": true
- },
- "unicode-property-aliases-ecmascript": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
- "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
- "dev": true
- },
- "unified": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz",
- "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "@types/vfile": "^3.0.0",
- "bail": "^1.0.0",
- "extend": "^3.0.0",
- "is-plain-obj": "^1.1.0",
- "trough": "^1.0.0",
- "vfile": "^3.0.0",
- "x-is-string": "^0.1.0"
- }
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- }
- },
- "uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
- "dev": true
- },
- "unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "dev": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
- "unist-util-find-all-after": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz",
- "integrity": "sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw==",
- "dev": true,
- "requires": {
- "unist-util-is": "^3.0.0"
- }
- },
- "unist-util-is": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
- "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
- "dev": true
- },
- "unist-util-remove-position": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz",
- "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==",
- "dev": true,
- "requires": {
- "unist-util-visit": "^1.1.0"
- }
- },
- "unist-util-stringify-position": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz",
- "integrity": "sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.2"
- }
- },
- "unist-util-visit": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
- "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
- "dev": true,
- "requires": {
- "unist-util-visit-parents": "^2.0.0"
- }
- },
- "unist-util-visit-parents": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
- "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
- "dev": true,
- "requires": {
- "unist-util-is": "^3.0.0"
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- }
- }
- },
- "upath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true
- },
- "upper-case": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
- "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
- "dev": true
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- }
- }
- },
- "url-loader": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz",
- "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==",
- "dev": true,
- "requires": {
- "loader-utils": "^1.2.3",
- "mime": "^2.4.4",
- "schema-utils": "^2.5.0"
- },
- "dependencies": {
- "mime": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
- "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
- "dev": true
- }
- }
- },
- "url-parse": {
- "version": "1.4.7",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
- "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
- "dev": true,
- "requires": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
- "dev": true
- },
- "util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "dev": true,
- "requires": {
- "inherits": "2.0.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- }
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "util.promisify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
- "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
- "utila": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
- "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
- "dev": true
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "dev": true
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- },
- "v-accordion": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/v-accordion/-/v-accordion-1.6.0.tgz",
- "integrity": "sha1-8KiaFsLWlcEe4sq4uptRkevIthM="
- },
- "v8-compile-cache": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
- "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
- "dev": true
- },
- "v8flags": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz",
- "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
- "dev": true
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "vfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz",
- "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^2.0.0",
- "replace-ext": "1.0.0",
- "unist-util-stringify-position": "^1.0.0",
- "vfile-message": "^1.0.0"
- },
- "dependencies": {
- "is-buffer": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
- "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==",
- "dev": true
- },
- "unist-util-stringify-position": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
- "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
- "dev": true
- },
- "vfile-message": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz",
- "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==",
- "dev": true,
- "requires": {
- "unist-util-stringify-position": "^1.1.1"
- }
- }
- }
- },
- "vfile-location": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz",
- "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==",
- "dev": true
- },
- "vfile-message": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.2.tgz",
- "integrity": "sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0"
- }
- },
- "vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
- "dev": true
- },
- "w3c-blob": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/w3c-blob/-/w3c-blob-0.0.1.tgz",
- "integrity": "sha1-sM01KhpQ9RVWNCD/1YYflQ8dhbg="
- },
- "warning": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
- "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
- "requires": {
- "loose-envify": "^1.0.0"
- }
- },
- "watchpack": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
- "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
- "dev": true,
- "requires": {
- "chokidar": "^2.0.2",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
- }
- },
- "wbuf": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
- "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
- "dev": true,
- "requires": {
- "minimalistic-assert": "^1.0.0"
- }
- },
- "wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
- "requires": {
- "defaults": "^1.0.3"
- }
- },
- "webpack": {
- "version": "4.41.6",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz",
- "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-module-context": "1.8.5",
- "@webassemblyjs/wasm-edit": "1.8.5",
- "@webassemblyjs/wasm-parser": "1.8.5",
- "acorn": "^6.2.1",
- "ajv": "^6.10.2",
- "ajv-keywords": "^3.4.1",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^4.1.0",
- "eslint-scope": "^4.0.3",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.4.0",
- "loader-utils": "^1.2.3",
- "memory-fs": "^0.4.1",
- "micromatch": "^3.1.10",
- "mkdirp": "^0.5.1",
- "neo-async": "^2.6.1",
- "node-libs-browser": "^2.2.1",
- "schema-utils": "^1.0.0",
- "tapable": "^1.1.3",
- "terser-webpack-plugin": "^1.4.3",
- "watchpack": "^1.6.0",
- "webpack-sources": "^1.4.1"
- },
- "dependencies": {
- "acorn": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz",
- "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==",
- "dev": true
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- }
- }
- },
- "webpack-cli": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz",
- "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==",
- "dev": true,
- "requires": {
- "chalk": "2.4.2",
- "cross-spawn": "6.0.5",
- "enhanced-resolve": "4.1.0",
- "findup-sync": "3.0.0",
- "global-modules": "2.0.0",
- "import-local": "2.0.0",
- "interpret": "1.2.0",
- "loader-utils": "1.2.3",
- "supports-color": "6.1.0",
- "v8-compile-cache": "2.0.3",
- "yargs": "13.2.4"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
- "dev": true
- },
- "enhanced-resolve": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
- "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.4.0",
- "tapable": "^1.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "invert-kv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
- "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
- "dev": true
- },
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "lcid": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
- "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
- "dev": true,
- "requires": {
- "invert-kv": "^2.0.0"
- }
- },
- "loader-utils": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
- "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^2.0.0",
- "json5": "^1.0.1"
- }
- },
- "os-locale": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
- "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
- "dev": true,
- "requires": {
- "execa": "^1.0.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
- }
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "v8-compile-cache": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
- "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
- "dev": true
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- },
- "yargs": {
- "version": "13.2.4",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
- "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
- "dev": true,
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "os-locale": "^3.1.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.0"
- }
- },
- "yargs-parser": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
- "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "webpack-dev-middleware": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
- "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
- "dev": true,
- "requires": {
- "memory-fs": "^0.4.1",
- "mime": "^2.4.4",
- "mkdirp": "^0.5.1",
- "range-parser": "^1.2.1",
- "webpack-log": "^2.0.0"
- },
- "dependencies": {
- "mime": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
- "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
- "dev": true
- }
- }
- },
- "webpack-dev-server": {
- "version": "3.10.3",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz",
- "integrity": "sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ==",
- "dev": true,
- "requires": {
- "ansi-html": "0.0.7",
- "bonjour": "^3.5.0",
- "chokidar": "^2.1.8",
- "compression": "^1.7.4",
- "connect-history-api-fallback": "^1.6.0",
- "debug": "^4.1.1",
- "del": "^4.1.1",
- "express": "^4.17.1",
- "html-entities": "^1.2.1",
- "http-proxy-middleware": "0.19.1",
- "import-local": "^2.0.0",
- "internal-ip": "^4.3.0",
- "ip": "^1.1.5",
- "is-absolute-url": "^3.0.3",
- "killable": "^1.0.1",
- "loglevel": "^1.6.6",
- "opn": "^5.5.0",
- "p-retry": "^3.0.1",
- "portfinder": "^1.0.25",
- "schema-utils": "^1.0.0",
- "selfsigned": "^1.10.7",
- "semver": "^6.3.0",
- "serve-index": "^1.9.1",
- "sockjs": "0.3.19",
- "sockjs-client": "1.4.0",
- "spdy": "^4.0.1",
- "strip-ansi": "^3.0.1",
- "supports-color": "^6.1.0",
- "url": "^0.11.0",
- "webpack-dev-middleware": "^3.7.2",
- "webpack-log": "^2.0.0",
- "ws": "^6.2.1",
- "yargs": "12.0.5"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
- "dev": true,
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "invert-kv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
- "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
- "dev": true
- },
- "lcid": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
- "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
- "dev": true,
- "requires": {
- "invert-kv": "^2.0.0"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "opn": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
- "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
- "dev": true,
- "requires": {
- "is-wsl": "^1.1.0"
- }
- },
- "os-locale": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
- "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
- "dev": true,
- "requires": {
- "execa": "^1.0.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "ws": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
- "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
- "dev": true,
- "requires": {
- "async-limiter": "~1.0.0"
- }
- },
- "yargs": {
- "version": "12.0.5",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
- "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
- "dev": true,
- "requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^3.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1 || ^4.0.0",
- "yargs-parser": "^11.1.1"
- }
- },
- "yargs-parser": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
- "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "webpack-hot-middleware": {
- "version": "2.25.0",
- "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz",
- "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==",
- "dev": true,
- "requires": {
- "ansi-html": "0.0.7",
- "html-entities": "^1.2.0",
- "querystring": "^0.2.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "webpack-log": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
- "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^3.0.0",
- "uuid": "^3.3.2"
- }
- },
- "webpack-material-design-icons": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/webpack-material-design-icons/-/webpack-material-design-icons-0.1.0.tgz",
- "integrity": "sha1-K0g5nxSBf3M9mRQ8l7gAjzQtL9Q=",
- "dev": true,
- "requires": {
- "material-design-icons": "^3.0.1"
- }
- },
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "websocket-driver": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
- "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
- "dev": true,
- "requires": {
- "http-parser-js": ">=0.4.0 <0.4.11",
- "safe-buffer": ">=5.1.0",
- "websocket-extensions": ">=0.1.1"
- }
- },
- "websocket-extensions": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
- "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=",
- "dev": true
- },
- "whatwg-fetch": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
- "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
- "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
- "dev": true
- },
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "dev": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "dev": true
- },
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
- "dev": true
- },
- "worker-farm": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
- "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
- "dev": true,
- "requires": {
- "errno": "~0.1.7"
- }
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "write": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
- "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
- "dev": true,
- "requires": {
- "mkdirp": "^0.5.1"
- }
- },
- "write-file-atomic": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz",
- "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "ws": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
- "integrity": "sha1-y9nm514J/F0skAFfIfDECHXg3VE=",
- "requires": {
- "options": ">=0.0.5",
- "ultron": "1.0.x"
- }
- },
- "x-is-string": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
- "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
- "dev": true
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
- "dev": true
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
- "yaml": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz",
- "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.6.3"
- }
- },
- "yargs": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
- "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^5.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- },
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dev": true,
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
- "requires": {
- "is-utf8": "^0.2.0"
- }
- },
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
- "dev": true
- }
- }
- },
- "yargs-parser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
- "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- }
- }
- }
- }
-}
diff --git a/ui/package.json b/ui/package.json
deleted file mode 100644
index 6181e70de0..0000000000
--- a/ui/package.json
+++ /dev/null
@@ -1,179 +0,0 @@
-{
- "name": "thingsboard",
- "private": true,
- "version": "2.5.0",
- "description": "ThingsBoard UI",
- "licenses": [
- {
- "type": "Apache-2.0",
- "url": "http://www.apache.org/licenses/LICENSE-2.0"
- }
- ],
- "scripts": {
- "start": "babel-node --max_old_space_size=4096 server.js",
- "build": "cross-env NODE_OPTIONS=--max_old_space_size=4096 NODE_ENV=production webpack"
- },
- "dependencies": {
- "@flowjs/ng-flow": "^2.7.1",
- "angular": "1.5.8",
- "angular-animate": "1.5.8",
- "angular-aria": "1.5.8",
- "angular-breadcrumb": "^0.4.1",
- "angular-carousel": "^1.0.1",
- "angular-cookies": "1.5.8",
- "angular-drag-and-drop-lists": "^1.4.0",
- "angular-fixed-table-header": "^0.2.1",
- "angular-fullscreen": "git://github.com/fabiobiondi/angular-fullscreen.git#master",
- "angular-gridster": "^0.13.14",
- "angular-hotkeys": "^1.7.0",
- "angular-jwt": "^0.1.11",
- "angular-material": "1.1.19",
- "angular-material-data-table": "^0.10.9",
- "angular-material-expansion-panel": "^0.7.2",
- "angular-material-icons": "^0.7.1",
- "angular-messages": "1.5.8",
- "angular-route": "1.5.8",
- "angular-sanitize": "1.5.8",
- "angular-socialshare": "^2.3.8",
- "angular-storage": "0.0.15",
- "angular-touch": "1.5.8",
- "angular-translate": "2.18.1",
- "angular-translate-handler-log": "2.18.1",
- "angular-translate-interpolation-messageformat": "2.18.1",
- "angular-translate-loader-static-files": "2.18.1",
- "angular-translate-storage-cookie": "2.18.1",
- "angular-translate-storage-local": "2.18.1",
- "angular-ui-ace": "^0.2.3",
- "angular-ui-router": "^0.3.1",
- "angular-websocket": "^2.0.1",
- "base64-js": "^1.2.1",
- "brace": "^0.10.0",
- "canvas-gauges": "^2.0.9",
- "clipboard": "^1.5.15",
- "compass-sass-mixins": "^0.12.7",
- "event-source-polyfill": "0.0.9",
- "flot": "git://github.com/thingsboard/flot.git#0.9-work",
- "flot.curvedlines": "git://github.com/MichaelZinsmaier/CurvedLines.git#master",
- "font-awesome": "^4.6.3",
- "javascript-detect-element-resize": "^0.5.3",
- "jquery": "^3.4.1",
- "jquery.terminal": "^1.5.0",
- "js-beautify": "^1.10.0",
- "json-schema-defaults": "^0.2.0",
- "jstree": "^3.3.8",
- "jszip": "^3.2.2",
- "jstree-bootstrap-theme": "^1.0.1",
- "leaflet": "^1.5.1",
- "leaflet-polylinedecorator": "^1.6.0",
- "leaflet-providers": "^1.8.0",
- "leaflet.markercluster": "^1.4.1",
- "material-steppers": "git://github.com/thingsboard/material-steppers.git#master",
- "material-ui": "^0.16.1",
- "material-ui-number-input": "^5.0.16",
- "md-color-picker": "0.2.6",
- "md-date-range-picker": "^0.8.4",
- "mdPickers": "git://github.com/alenaksu/mdPickers.git#0.7.5",
- "moment": "^2.24.0",
- "ngFlowchart": "git://github.com/thingsboard/ngFlowchart.git#master",
- "ngclipboard": "^1.1.1",
- "ngreact": "^0.3.0",
- "objectpath": "^1.2.1",
- "oclazyload": "^1.0.9",
- "raphael": "^2.2.8",
- "rc-select": "^6.6.1",
- "react": "^15.4.1",
- "react-ace": "^4.1.0",
- "react-dom": "^15.4.1",
- "react-dropzone": "^3.7.3",
- "react-schema-form": "^0.3.1",
- "react-tap-event-plugin": "^2.0.1",
- "reactcss": "^1.0.9",
- "sass-material-colors": "0.0.5",
- "schema-inspector": "^1.6.6",
- "split.js": "1.3.5",
- "tinycolor2": "^1.4.1",
- "tooltipster": "^4.2.4",
- "typeface-roboto": "0.0.22",
- "v-accordion": "^1.6.0"
- },
- "devDependencies": {
- "@babel/cli": "^7.5.5",
- "@babel/core": "^7.5.5",
- "@babel/node": "^7.5.5",
- "@babel/preset-env": "^7.5.5",
- "@babel/preset-react": "^7.0.0",
- "babel-eslint": "^10.0.2",
- "babel-loader": "^8.0.6",
- "browserslist": "^4.6.6",
- "compression-webpack-plugin": "^3.0.0",
- "connect-history-api-fallback": "^1.6.0",
- "copy-webpack-plugin": "^5.0.3",
- "cross-env": "^5.2.0",
- "css-loader": "^3.1.0",
- "directory-tree": "^2.2.3",
- "eslint": "^6.0.1",
- "eslint-config-angular": "^0.5.0",
- "eslint-loader": "^2.2.1",
- "eslint-plugin-angular": "^4.0.1",
- "eslint-plugin-import": "^2.18.1",
- "file-loader": "^4.1.0",
- "html-loader": "^0.5.5",
- "html-minifier": "^4.0.0",
- "html-minifier-loader": "^1.4.1",
- "html-webpack-plugin": "^3.2.0",
- "imagemin": "^6.0.0",
- "img-loader": "^3.0.1",
- "jsonminify": "^0.4.1",
- "less": "^3.9.0",
- "less-loader": "^5.0.0",
- "mini-css-extract-plugin": "^0.8.0",
- "ng-annotate-loader": "^0.6.1",
- "ng-annotate-patched": "^1.10.0",
- "ngtemplate-loader": "^2.0.1",
- "node-sass": "^4.12.0",
- "postcss-loader": "^3.0.0",
- "raw-loader": "^3.1.0",
- "react-hot-loader": "^4.12.8",
- "sass-loader": "^7.1.0",
- "style-loader": "^0.23.1",
- "stylelint": "13.0.0",
- "stylelint-config-recommended-scss": "4.1.0",
- "stylelint-config-standard": "19.0.0",
- "stylelint-order": "4.0.0",
- "stylelint-scss": "3.13.0",
- "stylelint-webpack-plugin": "^1.2.1",
- "uglifyjs-webpack-plugin": "^2.1.3",
- "url-loader": "^2.1.0",
- "webpack": "^4.37.0",
- "webpack-cli": "^3.3.6",
- "webpack-dev-middleware": "^3.7.0",
- "webpack-dev-server": "^3.7.2",
- "webpack-hot-middleware": "^2.25.0",
- "webpack-material-design-icons": "^0.1.0"
- },
- "engines": {
- "node": ">=8.0.0 <11.0.0"
- },
- "nyc": {
- "exclude": [
- "test",
- "__tests__",
- "node_modules",
- "target"
- ]
- },
- "browserslist": [
- "> 0.5%",
- "last 2 versions",
- "Firefox ESR",
- "not ie <= 10",
- "not ie_mob <= 10",
- "not bb <= 10",
- "not op_mob <= 12.1"
- ],
- "postcss": {
- "plugins": {
- "autoprefixer": true
- }
- }
-}
diff --git a/ui/pom.xml b/ui/pom.xml
deleted file mode 100644
index fc652eebea..0000000000
--- a/ui/pom.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
- 4.0.0
-
- org.thingsboard
- 2.5.0-SNAPSHOT
- thingsboard
-
- org.thingsboard
- ui
- jar
-
- Thingsboard Server UI
- https://thingsboard.io
-
-
- UTF-8
- ${basedir}/..
-
-
-
-
-
- ${project.build.directory}/generated-resources
-
-
-
-
- com.github.eirslett
- frontend-maven-plugin
- 1.0
-
- target
- ${basedir}
-
-
-
- install node and npm
-
- install-node-and-npm
-
-
- v10.16.0
- 6.4.1
-
-
-
- npm install
-
- npm
-
-
- install
-
-
-
-
-
-
-
-
- npm-build
-
- true
-
-
-
-
- com.github.eirslett
- frontend-maven-plugin
- 1.0
-
- target
- ${basedir}
-
-
-
- npm build
-
- npm
-
-
- run build
-
-
-
-
-
-
-
-
- npm-start
-
-
- npm-start
-
-
-
-
-
- com.github.eirslett
- frontend-maven-plugin
- 1.0
-
- target
- ${basedir}
-
-
-
- npm start
-
- npm
-
-
-
- start
-
-
-
-
-
-
-
-
-
diff --git a/ui/server.js b/ui/server.js
deleted file mode 100644
index e6cb1d650d..0000000000
--- a/ui/server.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* eslint-disable import/no-commonjs */
-/* eslint-disable global-require */
-/* eslint-disable import/no-nodejs-modules */
-
-const path = require('path');
-const webpack = require('webpack');
-const historyApiFallback = require("connect-history-api-fallback");
-const webpackDevMiddleware = require('webpack-dev-middleware');
-const webpackHotMiddleware = require('webpack-hot-middleware');
-const config = require('./webpack.config');
-
-const express = require('express');
-const http = require('http');
-const httpProxy = require('http-proxy');
-const forwardHost = 'localhost';
-const forwardPort = 8080;
-
-const ruleNodeUiforwardHost = 'localhost';
-const ruleNodeUiforwardPort = 8080;
-
-const app = express();
-const server = http.createServer(app);
-
-const PORT = 3000;
-
-const compiler = webpack(config);
-
-app.use(historyApiFallback());
-app.use(webpackDevMiddleware(compiler, {noInfo: true, publicPath: config.output.publicPath}));
-app.use(webpackHotMiddleware(compiler));
-
-const root = path.join(__dirname, '/src');
-
-app.use('/static', express.static(root));
-
-const apiProxy = httpProxy.createProxyServer({
- target: {
- host: forwardHost,
- port: forwardPort
- }
-});
-
-const ruleNodeUiApiProxy = httpProxy.createProxyServer({
- target: {
- host: ruleNodeUiforwardHost,
- port: ruleNodeUiforwardPort
- }
-});
-
-apiProxy.on('error', function (err, req, res) {
- console.warn('API proxy error: ' + err);
- res.end('Error.');
-});
-
-ruleNodeUiApiProxy.on('error', function (err, req, res) {
- console.warn('RuleNode UI API proxy error: ' + err);
- res.end('Error.');
-});
-
-console.info(`Forwarding API requests to http://${forwardHost}:${forwardPort}`);
-console.info(`Forwarding Rule Node UI requests to http://${ruleNodeUiforwardHost}:${ruleNodeUiforwardPort}`);
-
-app.all('/api/*', (req, res) => {
- apiProxy.web(req, res);
-});
-
-app.all('/static/rulenode/*', (req, res) => {
- ruleNodeUiApiProxy.web(req, res);
-});
-
-app.get('*', function(req, res) {
- res.sendFile(path.join(__dirname, 'src/index.html'));
-});
-
-server.on('upgrade', (req, socket, head) => {
- apiProxy.ws(req, socket, head);
-});
-
-server.listen(PORT, '0.0.0.0', (error) => {
- if (error) {
- console.error(error);
- } else {
- console.info(`==> 🌎 Listening on port ${PORT}. Open up http://localhost:${PORT}/ in your browser.`);
- }
-});
diff --git a/ui/src/app/admin/admin.controller.js b/ui/src/app/admin/admin.controller.js
deleted file mode 100644
index 8a2f04c621..0000000000
--- a/ui/src/app/admin/admin.controller.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import './settings-card.scss';
-
-/*@ngInject*/
-export default function AdminController(adminService, toast, $scope, $rootScope, $state, $translate) {
-
- var vm = this;
- vm.save = save;
- vm.sendTestMail = sendTestMail;
- vm.smtpProtocols = ('smtp smtps').split(' ').map(function (protocol) {
- return protocol;
- });
-
- vm.tlsVersions = ['TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3'];
-
- $translate('admin.test-mail-sent').then(function (translation) {
- vm.testMailSent = translation;
- }, function (translationId) {
- vm.testMailSent = translationId;
- });
-
-
- loadSettings();
-
- function loadSettings() {
- adminService.getAdminSettings($state.$current.data.key).then(function success(settings) {
- vm.settings = settings;
- });
- }
-
- function save() {
- adminService.saveAdminSettings(vm.settings).then(function success(settings) {
- vm.settings = settings;
- vm.settingsForm.$setPristine();
- });
- }
-
- function sendTestMail() {
- adminService.sendTestMail(vm.settings).then(function success() {
- toast.showSuccess($translate.instant('admin.test-mail-sent'));
- });
- }
-
-}
diff --git a/ui/src/app/admin/admin.routes.js b/ui/src/app/admin/admin.routes.js
deleted file mode 100644
index c35117e27c..0000000000
--- a/ui/src/app/admin/admin.routes.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* eslint-disable import/no-unresolved, import/default */
-
-import generalSettingsTemplate from '../admin/general-settings.tpl.html';
-import outgoingMailSettingsTemplate from '../admin/outgoing-mail-settings.tpl.html';
-import securitySettingsTemplate from '../admin/security-settings.tpl.html';
-
-/* eslint-enable import/no-unresolved, import/default */
-
-/*@ngInject*/
-export default function AdminRoutes($stateProvider) {
- $stateProvider
- .state('home.settings', {
- url: '/settings',
- module: 'private',
- auth: ['SYS_ADMIN'],
- redirectTo: 'home.settings.general',
- ncyBreadcrumb: {
- label: '{"icon": "settings", "label": "admin.system-settings"}'
- }
- })
- .state('home.settings.general', {
- url: '/general',
- module: 'private',
- auth: ['SYS_ADMIN'],
- views: {
- "content@home": {
- templateUrl: generalSettingsTemplate,
- controllerAs: 'vm',
- controller: 'AdminController'
- }
- },
- data: {
- key: 'general',
- pageTitle: 'admin.general-settings'
- },
- ncyBreadcrumb: {
- label: '{"icon": "settings_applications", "label": "admin.general"}'
- }
- })
- .state('home.settings.outgoing-mail', {
- url: '/outgoing-mail',
- module: 'private',
- auth: ['SYS_ADMIN'],
- views: {
- "content@home": {
- templateUrl: outgoingMailSettingsTemplate,
- controllerAs: 'vm',
- controller: 'AdminController'
- }
- },
- data: {
- key: 'mail',
- pageTitle: 'admin.outgoing-mail-settings'
- },
- ncyBreadcrumb: {
- label: '{"icon": "mail", "label": "admin.outgoing-mail"}'
- }
- })
- .state('home.settings.security-settings', {
- url: '/security-settings',
- module: 'private',
- auth: ['SYS_ADMIN'],
- views: {
- "content@home": {
- templateUrl: securitySettingsTemplate,
- controllerAs: 'vm',
- controller: 'SecuritySettingsController'
- }
- },
- data: {
- pageTitle: 'admin.security-settings'
- },
- ncyBreadcrumb: {
- label: '{"icon": "security", "label": "admin.security-settings"}'
- }
- });
-}
diff --git a/ui/src/app/admin/general-settings.tpl.html b/ui/src/app/admin/general-settings.tpl.html
deleted file mode 100644
index b6eea094bf..0000000000
--- a/ui/src/app/admin/general-settings.tpl.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
- admin.general-settings
-
-
-
-
-
-
-
-
-
-
diff --git a/ui/src/app/admin/index.js b/ui/src/app/admin/index.js
deleted file mode 100644
index d0d47247f9..0000000000
--- a/ui/src/app/admin/index.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import uiRouter from 'angular-ui-router';
-import ngMaterial from 'angular-material';
-import ngMessages from 'angular-messages';
-import thingsboardApiAdmin from '../api/admin.service';
-import thingsboardConfirmOnExit from '../components/confirm-on-exit.directive';
-import thingsboardToast from '../services/toast';
-
-import AdminRoutes from './admin.routes';
-import AdminController from './admin.controller';
-import SecuritySettingsController from './security-settings.controller';
-
-export default angular.module('thingsboard.admin', [
- uiRouter,
- ngMaterial,
- ngMessages,
- thingsboardApiAdmin,
- thingsboardConfirmOnExit,
- thingsboardToast
-])
- .config(AdminRoutes)
- .controller('AdminController', AdminController)
- .controller('SecuritySettingsController', SecuritySettingsController)
- .name;
diff --git a/ui/src/app/admin/outgoing-mail-settings.tpl.html b/ui/src/app/admin/outgoing-mail-settings.tpl.html
deleted file mode 100644
index edb2e4e520..0000000000
--- a/ui/src/app/admin/outgoing-mail-settings.tpl.html
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
- admin.outgoing-mail-settings
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ui/src/app/admin/security-settings.controller.js b/ui/src/app/admin/security-settings.controller.js
deleted file mode 100644
index 40152e6497..0000000000
--- a/ui/src/app/admin/security-settings.controller.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import './settings-card.scss';
-
-/*@ngInject*/
-export default function SecuritySettingsController(adminService, $mdExpansionPanel) {
-
- var vm = this;
- vm.$mdExpansionPanel = $mdExpansionPanel;
-
- vm.save = save;
-
- loadSettings();
-
- function loadSettings() {
- adminService.getSecuritySettings().then(function success(securitySettings) {
- vm.securitySettings = securitySettings;
- });
- }
-
- function save() {
- adminService.saveSecuritySettings(vm.securitySettings).then(function success(securitySettings) {
- vm.securitySettings = securitySettings;
- vm.settingsForm.$setPristine();
- });
- }
-
-}
diff --git a/ui/src/app/admin/security-settings.tpl.html b/ui/src/app/admin/security-settings.tpl.html
deleted file mode 100644
index 311e7c0600..0000000000
--- a/ui/src/app/admin/security-settings.tpl.html
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
-
-
- admin.security-settings
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ui/src/app/admin/settings-card.scss b/ui/src/app/admin/settings-card.scss
deleted file mode 100644
index 4639207096..0000000000
--- a/ui/src/app/admin/settings-card.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-@import "../../scss/constants";
-
-md-card.settings-card {
- @media (min-width: $layout-breakpoint-sm) {
- width: 60%;
- }
-
- md-icon.md-expansion-panel-icon {
- margin-right: 0;
- }
-}
diff --git a/ui/src/app/alarm/alarm-details-dialog.controller.js b/ui/src/app/alarm/alarm-details-dialog.controller.js
deleted file mode 100644
index 412c4218b9..0000000000
--- a/ui/src/app/alarm/alarm-details-dialog.controller.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import 'brace/ext/language_tools';
-import 'brace/ext/searchbox';
-import 'brace/mode/json';
-import 'brace/theme/github';
-import beautify from 'js-beautify';
-
-import './alarm-details-dialog.scss';
-
-const js_beautify = beautify.js;
-
-/*@ngInject*/
-export default function AlarmDetailsDialogController($mdDialog, $filter, $translate, types,
- alarmService, alarmId, allowAcknowledgment, allowClear, displayDetails, showingCallback) {
-
- var vm = this;
-
- vm.alarmId = alarmId;
- vm.allowAcknowledgment = allowAcknowledgment;
- vm.allowClear = allowClear;
- vm.displayDetails = displayDetails;
- vm.types = types;
- vm.alarm = null;
-
- vm.alarmUpdated = false;
-
- showingCallback.onShowing = function(scope, element) {
- if (vm.displayDetails) {
- updateEditorSize(element);
- }
- }
-
- vm.alarmDetailsOptions = {
- useWrapMode: false,
- mode: 'json',
- showGutter: false,
- showPrintMargin: false,
- theme: 'github',
- advanced: {
- enableSnippets: false,
- enableBasicAutocompletion: false,
- enableLiveAutocompletion: false
- },
- onLoad: function (_ace) {
- vm.editor = _ace;
- }
- };
-
- vm.close = close;
- vm.acknowledge = acknowledge;
- vm.clear = clear;
-
- loadAlarm();
-
- function updateEditorSize(element) {
- var newWidth = 600;
- var newHeight = 200;
- angular.element('#tb-alarm-details', element).height(newHeight.toString() + "px")
- .width(newWidth.toString() + "px");
- vm.editor.resize();
- }
-
- function loadAlarm() {
- alarmService.getAlarmInfo(vm.alarmId).then(
- function success(alarm) {
- vm.alarm = alarm;
- loadAlarmFields();
- },
- function fail() {
- vm.alarm = null;
- }
- );
- }
-
- function loadAlarmFields() {
- vm.createdTime = $filter('date')(vm.alarm.createdTime, 'yyyy-MM-dd HH:mm:ss');
- vm.startTime = null;
- if (vm.alarm.startTs) {
- vm.startTime = $filter('date')(vm.alarm.startTs, 'yyyy-MM-dd HH:mm:ss');
- }
- vm.endTime = null;
- if (vm.alarm.endTs) {
- vm.endTime = $filter('date')(vm.alarm.endTs, 'yyyy-MM-dd HH:mm:ss');
- }
- vm.ackTime = null;
- if (vm.alarm.ackTs) {
- vm.ackTime = $filter('date')(vm.alarm.ackTs, 'yyyy-MM-dd HH:mm:ss')
- }
- vm.clearTime = null;
- if (vm.alarm.clearTs) {
- vm.clearTime = $filter('date')(vm.alarm.clearTs, 'yyyy-MM-dd HH:mm:ss');
- }
-
- vm.alarmSeverity = $translate.instant(types.alarmSeverity[vm.alarm.severity].name);
-
- vm.alarmStatus = $translate.instant('alarm.display-status.' + vm.alarm.status);
-
- vm.alarmDetails = null;
- if (vm.alarm.details) {
- vm.alarmDetails = angular.toJson(vm.alarm.details);
- vm.alarmDetails = js_beautify(vm.alarmDetails, {indent_size: 4});
- }
- }
-
- function acknowledge () {
- alarmService.ackAlarm(vm.alarmId).then(
- function success() {
- vm.alarmUpdated = true;
- loadAlarm();
- }
- );
- }
-
- function clear () {
- alarmService.clearAlarm(vm.alarmId).then(
- function success() {
- vm.alarmUpdated = true;
- loadAlarm();
- }
- );
- }
-
- function close () {
- $mdDialog.hide(vm.alarmUpdated ? vm.alarm : null);
- }
-
-}
diff --git a/ui/src/app/alarm/alarm-details-dialog.scss b/ui/src/app/alarm/alarm-details-dialog.scss
deleted file mode 100644
index a15e51044a..0000000000
--- a/ui/src/app/alarm/alarm-details-dialog.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-.tb-alarm-details-panel {
- height: 100%;
- margin-left: 15px;
- border: 1px solid #c0c0c0;
-
- #tb-alarm-details {
- width: 100%;
- min-width: 600px;
- height: 100%;
- min-height: 200px;
- }
-}
diff --git a/ui/src/app/alarm/alarm-details-dialog.tpl.html b/ui/src/app/alarm/alarm-details-dialog.tpl.html
deleted file mode 100644
index f5e7ec1a0b..0000000000
--- a/ui/src/app/alarm/alarm-details-dialog.tpl.html
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
alarm.alarm-details
-
-
-
-
-
-
-
-
-
-
- {{ 'alarm.acknowledge' |
- translate }}
-
- {{ 'alarm.clear' |
- translate }}
-
-
- {{ 'action.close' |
- translate }}
-
-
-
diff --git a/ui/src/app/alarm/alarm-header.directive.js b/ui/src/app/alarm/alarm-header.directive.js
deleted file mode 100644
index 08e61bc741..0000000000
--- a/ui/src/app/alarm/alarm-header.directive.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* eslint-disable import/no-unresolved, import/default */
-
-import alarmHeaderTemplate from './alarm-header.tpl.html';
-
-/* eslint-enable import/no-unresolved, import/default */
-
-/*@ngInject*/
-export default function AlarmHeaderDirective($compile, $templateCache) {
-
- var linker = function (scope, element) {
-
- var template = $templateCache.get(alarmHeaderTemplate);
- element.html(template);
- $compile(element.contents())(scope);
-
- }
-
- return {
- restrict: "A",
- replace: false,
- link: linker,
- scope: false
- };
-}
diff --git a/ui/src/app/alarm/alarm-header.tpl.html b/ui/src/app/alarm/alarm-header.tpl.html
deleted file mode 100644
index 06fa429912..0000000000
--- a/ui/src/app/alarm/alarm-header.tpl.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-alarm.created-time
-alarm.originator
-alarm.type
-alarm.severity
-alarm.status
-alarm.details
diff --git a/ui/src/app/alarm/alarm-row.directive.js b/ui/src/app/alarm/alarm-row.directive.js
deleted file mode 100644
index 63afb57afe..0000000000
--- a/ui/src/app/alarm/alarm-row.directive.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* eslint-disable import/no-unresolved, import/default */
-
-import alarmDetailsDialogTemplate from './alarm-details-dialog.tpl.html';
-
-import alarmRowTemplate from './alarm-row.tpl.html';
-
-/* eslint-enable import/no-unresolved, import/default */
-
-/*@ngInject*/
-export default function AlarmRowDirective($compile, $templateCache, types, $mdDialog, $document) {
-
- var linker = function (scope, element, attrs) {
-
- var template = $templateCache.get(alarmRowTemplate);
- element.html(template);
-
- scope.alarm = attrs.alarm;
- scope.types = types;
-
- scope.showAlarmDetails = function($event) {
- var onShowingCallback = {
- onShowing: function(){}
- }
- $mdDialog.show({
- controller: 'AlarmDetailsDialogController',
- controllerAs: 'vm',
- templateUrl: alarmDetailsDialogTemplate,
- locals: {
- alarmId: scope.alarm.id.id,
- allowAcknowledgment: true,
- allowClear: true,
- displayDetails: true,
- showingCallback: onShowingCallback
- },
- parent: angular.element($document[0].body),
- targetEvent: $event,
- fullscreen: true,
- multiple: true,
- onShowing: function(scope, element) {
- onShowingCallback.onShowing(scope, element);
- }
- }).then(function (alarm) {
- if (alarm) {
- scope.alarm = alarm;
- }
- });
- }
-
- $compile(element.contents())(scope);
- }
-
- return {
- restrict: "A",
- replace: false,
- link: linker,
- scope: false
- };
-}
diff --git a/ui/src/app/alarm/alarm-row.tpl.html b/ui/src/app/alarm/alarm-row.tpl.html
deleted file mode 100644
index d71d4a7494..0000000000
--- a/ui/src/app/alarm/alarm-row.tpl.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-{{alarm.createdTime | date : 'yyyy-MM-dd HH:mm:ss'}}
-{{alarm.originatorName}}
-{{alarm.type}}
-
- {{ alarm ? (types.alarmSeverity[alarm.severity].name | translate) : '' }}
-
-{{ alarm ? (('alarm.display-status.' + alarm.status) | translate) : '' }}
-
-
-
- {{ 'alarm.details' | translate }}
-
-
- more_horiz
-
-
-
diff --git a/ui/src/app/alarm/alarm-table.directive.js b/ui/src/app/alarm/alarm-table.directive.js
deleted file mode 100644
index 28b15392a9..0000000000
--- a/ui/src/app/alarm/alarm-table.directive.js
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import './alarm.scss';
-
-/* eslint-disable import/no-unresolved, import/default */
-
-import alarmTableTemplate from './alarm-table.tpl.html';
-
-/* eslint-enable import/no-unresolved, import/default */
-
-/*@ngInject*/
-export default function AlarmTableDirective($compile, $templateCache, $rootScope, types, alarmService) {
-
- var linker = function (scope, element) {
-
- var template = $templateCache.get(alarmTableTemplate);
-
- element.html(template);
-
- scope.types = types;
-
- scope.alarmSearchStatus = types.alarmSearchStatus.any;
-
- var pageSize = 20;
- var startTime = 0;
- var endTime = 0;
-
- scope.timewindow = {
- history: {
- timewindowMs: 24 * 60 * 60 * 1000 // 1 day
- }
- };
-
- scope.topIndex = 0;
-
- scope.theAlarms = {
- getItemAtIndex: function (index) {
- if (index > scope.alarms.data.length) {
- scope.theAlarms.fetchMoreItems_(index);
- return null;
- }
- var item = scope.alarms.data[index];
- if (item) {
- item.indexNumber = index + 1;
- }
- return item;
- },
-
- getLength: function () {
- if (scope.alarms.hasNext) {
- return scope.alarms.data.length + scope.alarms.nextPageLink.limit;
- } else {
- return scope.alarms.data.length;
- }
- },
-
- fetchMoreItems_: function () {
- if (scope.alarms.hasNext && !scope.alarms.pending) {
- if (scope.entityType && scope.entityId && scope.alarmSearchStatus) {
- var promise = alarmService.getAlarms(scope.entityType, scope.entityId,
- scope.alarms.nextPageLink, scope.alarmSearchStatus, null, true, false);
- if (promise) {
- scope.alarms.pending = true;
- promise.then(
- function success(alarms) {
- scope.alarms.data = scope.alarms.data.concat(alarms.data);
- scope.alarms.nextPageLink = alarms.nextPageLink;
- scope.alarms.hasNext = alarms.hasNext;
- if (scope.alarms.hasNext) {
- scope.alarms.nextPageLink.limit = pageSize;
- }
- scope.alarms.pending = false;
- },
- function fail() {
- scope.alarms.hasNext = false;
- scope.alarms.pending = false;
- });
- } else {
- scope.alarms.hasNext = false;
- }
- } else {
- scope.alarms.hasNext = false;
- }
- }
- }
- };
-
- scope.reload = reload;
-
- scope.$watch("entityId", function(newVal, prevVal) {
- if (newVal && !angular.equals(newVal, prevVal)) {
- resetFilter();
- reload();
- }
- });
-
-
-
- function destroyWatchers() {
- if (scope.alarmSearchStatusWatchHandle) {
- scope.alarmSearchStatusWatchHandle();
- scope.alarmSearchStatusWatchHandle = null;
- }
- if (scope.timewindowWatchHandle) {
- scope.timewindowWatchHandle();
- scope.timewindowWatchHandle = null;
- }
- }
-
- function initWatchers() {
- scope.alarmSearchStatusWatchHandle = scope.$watch("alarmSearchStatus", function(newVal, prevVal) {
- if (newVal && !angular.equals(newVal, prevVal)) {
- reload();
- }
- });
- scope.timewindowWatchHandle = scope.$watch("timewindow", function(newVal, prevVal) {
- if (newVal && !angular.equals(newVal, prevVal)) {
- reload();
- }
- }, true);
- }
-
- function resetFilter() {
- destroyWatchers();
- scope.timewindow = {
- history: {
- timewindowMs: 24 * 60 * 60 * 1000 // 1 day
- }
- };
- scope.alarmSearchStatus = types.alarmSearchStatus.any;
- initWatchers();
- }
-
- function updateTimeWindowRange () {
- if (scope.timewindow.history.timewindowMs) {
- var currentTime = (new Date).getTime();
- startTime = currentTime - scope.timewindow.history.timewindowMs;
- endTime = currentTime;
- } else {
- startTime = scope.timewindow.history.fixedTimewindow.startTimeMs;
- endTime = scope.timewindow.history.fixedTimewindow.endTimeMs;
- }
- }
-
- function reload () {
- scope.topIndex = 0;
- scope.selected = [];
- updateTimeWindowRange();
- scope.alarms = {
- data: [],
- nextPageLink: {
- limit: pageSize,
- startTime: startTime,
- endTime: endTime
- },
- hasNext: true,
- pending: false
- };
- scope.theAlarms.getItemAtIndex(pageSize);
- }
-
- scope.noData = function() {
- return scope.alarms.data.length == 0 && !scope.alarms.hasNext;
- }
-
- scope.hasData = function() {
- return scope.alarms.data.length > 0;
- }
-
- scope.loading = function() {
- return $rootScope.loading;
- }
-
- scope.hasScroll = function() {
- var repeatContainer = scope.repeatContainer[0];
- if (repeatContainer) {
- var scrollElement = repeatContainer.children[0];
- if (scrollElement) {
- return scrollElement.scrollHeight > scrollElement.clientHeight;
- }
- }
- return false;
- }
-
- reload();
-
- initWatchers();
-
- $compile(element.contents())(scope);
- }
-
- return {
- restrict: "E",
- link: linker,
- scope: {
- entityType: '=',
- entityId: '='
- }
- };
-}
diff --git a/ui/src/app/alarm/alarm-table.tpl.html b/ui/src/app/alarm/alarm-table.tpl.html
deleted file mode 100644
index 38719cfe5c..0000000000
--- a/ui/src/app/alarm/alarm-table.tpl.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
- alarm.alarm-status
-
-
- {{ ('alarm.search-status.' + searchStatus) | translate }}
-
-
-
-
-
- refresh
-
- {{ 'action.refresh' | translate }}
-
-
-
-
-
-
-
-
- alarm.no-alarms-prompt
-
-
-
-
-
-
-
-
-
-
diff --git a/ui/src/app/alarm/alarm.scss b/ui/src/app/alarm/alarm.scss
deleted file mode 100644
index 893327604d..0000000000
--- a/ui/src/app/alarm/alarm.scss
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-.tb-alarm-container {
- overflow-x: auto;
-}
-
-md-list.tb-alarm-table {
- min-width: 700px;
- padding: 0;
-
- md-list-item {
- padding: 0;
- }
-
- .tb-row {
- height: 48px;
- padding: 0;
- overflow: hidden;
- }
-
- .tb-row:hover {
- background-color: #eee;
- }
-
- .tb-header:hover {
- background: none;
- }
-
- .tb-header {
- .tb-cell {
- font-size: 12px;
- font-weight: 700;
- color: rgba(0, 0, 0, .54);
- white-space: nowrap;
- background: none;
- }
- }
-
- .tb-cell {
- padding: 0 24px;
- margin: auto 0;
- overflow: hidden;
- font-size: 13px;
- color: rgba(0, 0, 0, .87);
- text-align: left;
- vertical-align: middle;
-
- .md-button {
- padding: 0;
- margin: 0;
- }
- }
-
- .tb-cell.tb-number {
- text-align: right;
- }
-}
-
-#tb-alarm-content {
- width: 100%;
- min-width: 400px;
- height: 100%;
- min-height: 50px;
-}
diff --git a/ui/src/app/alarm/index.js b/ui/src/app/alarm/index.js
deleted file mode 100644
index 221f2a6e73..0000000000
--- a/ui/src/app/alarm/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import AlarmDetailsDialogController from './alarm-details-dialog.controller';
-import AlarmHeaderDirective from './alarm-header.directive';
-import AlarmRowDirective from './alarm-row.directive';
-import AlarmTableDirective from './alarm-table.directive';
-
-export default angular.module('thingsboard.alarm', [])
- .controller('AlarmDetailsDialogController', AlarmDetailsDialogController)
- .directive('tbAlarmHeader', AlarmHeaderDirective)
- .directive('tbAlarmRow', AlarmRowDirective)
- .directive('tbAlarmTable', AlarmTableDirective)
- .name;
diff --git a/ui/src/app/api/admin.service.js b/ui/src/app/api/admin.service.js
deleted file mode 100644
index c679fc6532..0000000000
--- a/ui/src/app/api/admin.service.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.admin', [])
- .factory('adminService', AdminService)
- .name;
-
-/*@ngInject*/
-function AdminService($http, $q) {
-
- var service = {
- getAdminSettings: getAdminSettings,
- saveAdminSettings: saveAdminSettings,
- getSecuritySettings: getSecuritySettings,
- saveSecuritySettings: saveSecuritySettings,
- sendTestMail: sendTestMail,
- checkUpdates: checkUpdates
- }
-
- return service;
-
- function getAdminSettings(key) {
- var deferred = $q.defer();
- var url = '/api/admin/settings/' + key;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function saveAdminSettings(settings) {
- var deferred = $q.defer();
- var url = '/api/admin/settings';
- $http.post(url, settings).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function getSecuritySettings() {
- var deferred = $q.defer();
- var url = '/api/admin/securitySettings';
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function saveSecuritySettings(securitySettings) {
- var deferred = $q.defer();
- var url = '/api/admin/securitySettings';
- $http.post(url, securitySettings).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function sendTestMail(settings) {
- var deferred = $q.defer();
- var url = '/api/admin/settings/testMail';
- $http.post(url, settings).then(function success() {
- deferred.resolve();
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function checkUpdates() {
- var deferred = $q.defer();
- var url = '/api/admin/updates';
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-}
diff --git a/ui/src/app/api/alarm.service.js b/ui/src/app/api/alarm.service.js
deleted file mode 100644
index f7f4111ec9..0000000000
--- a/ui/src/app/api/alarm.service.js
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.alarm', [])
- .factory('alarmService', AlarmService)
- .name;
-
-/*@ngInject*/
-function AlarmService($http, $q, $interval, $filter, $timeout, utils, types) {
-
- var alarmSourceListeners = {};
-
- var simulatedAlarm = {
- createdTime: (new Date).getTime(),
- startTs: (new Date).getTime(),
- endTs: 0,
- ackTs: 0,
- clearTs: 0,
- originatorName: 'Simulated',
- originator: {
- entityType: "DEVICE",
- id: "1"
- },
- type: 'TEMPERATURE',
- severity: "MAJOR",
- status: types.alarmStatus.activeUnack,
- details: {
- message: "Temperature is high!"
- }
- };
-
- var service = {
- getAlarm: getAlarm,
- getAlarmInfo: getAlarmInfo,
- saveAlarm: saveAlarm,
- ackAlarm: ackAlarm,
- clearAlarm: clearAlarm,
- deleteAlarm: deleteAlarm,
- getAlarms: getAlarms,
- getHighestAlarmSeverity: getHighestAlarmSeverity,
- pollAlarms: pollAlarms,
- cancelPollAlarms: cancelPollAlarms,
- subscribeForAlarms: subscribeForAlarms,
- unsubscribeFromAlarms: unsubscribeFromAlarms
- }
-
- return service;
-
- function getAlarm(alarmId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/alarm/' + alarmId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getAlarmInfo(alarmId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/alarm/info/' + alarmId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function saveAlarm(alarm, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/alarm';
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.post(url, alarm, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function ackAlarm(alarmId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/alarm/' + alarmId + '/ack';
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.post(url, null, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function clearAlarm(alarmId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/alarm/' + alarmId + '/clear';
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.post(url, null, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteAlarm(alarmId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/alarm/' + alarmId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.delete(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getAlarms(entityType, entityId, pageLink, alarmSearchStatus, alarmStatus, fetchOriginator, ascOrder, config) {
- var deferred = $q.defer();
- var url = '/api/alarm/' + entityType + '/' + entityId + '?limit=' + pageLink.limit;
-
- if (angular.isDefined(pageLink.startTime) && pageLink.startTime != null) {
- url += '&startTime=' + pageLink.startTime;
- }
- if (angular.isDefined(pageLink.endTime) && pageLink.endTime != null) {
- url += '&endTime=' + pageLink.endTime;
- }
- if (angular.isDefined(pageLink.idOffset) && pageLink.idOffset != null) {
- url += '&offset=' + pageLink.idOffset;
- }
- if (alarmSearchStatus) {
- url += '&searchStatus=' + alarmSearchStatus;
- }
- if (alarmStatus) {
- url += '&status=' + alarmStatus;
- }
- if (fetchOriginator) {
- url += '&fetchOriginator=' + ((fetchOriginator===true) ? 'true' : 'false');
- }
- if (angular.isDefined(ascOrder) && ascOrder != null) {
- url += '&ascOrder=' + (ascOrder ? 'true' : 'false');
- }
-
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getHighestAlarmSeverity(entityType, entityId, alarmSearchStatus, alarmStatus, config) {
- var deferred = $q.defer();
- var url = '/api/alarm/highestSeverity/' + entityType + '/' + entityId;
-
- if (alarmSearchStatus) {
- url += '?searchStatus=' + alarmSearchStatus;
- } else if (alarmStatus) {
- url += '?status=' + alarmStatus;
- }
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function fetchAlarms(alarmsQuery, pageLink, deferred, leftToLoad, alarmsList) {
- getAlarms(alarmsQuery.entityType, alarmsQuery.entityId,
- pageLink, alarmsQuery.alarmSearchStatus, alarmsQuery.alarmStatus,
- alarmsQuery.fetchOriginator, false, {ignoreLoading: true}).then(
- function success(alarms) {
- if (!alarmsList) {
- alarmsList = [];
- }
- alarmsList = alarmsList.concat(alarms.data);
- if (angular.isDefined(leftToLoad)) {
- leftToLoad -= pageLink.limit;
- if (leftToLoad === 0) {
- alarmsList = $filter('orderBy')(alarmsList, ['-createdTime']);
- deferred.resolve(alarmsList);
- return;
- }
- if (leftToLoad < pageLink.limit) {
- alarms.nextPageLink.limit = leftToLoad;
- }
- }
- if (alarms.hasNext && !alarmsQuery.limit) {
- fetchAlarms(alarmsQuery, alarms.nextPageLink, deferred, leftToLoad, alarmsList);
- } else {
- alarmsList = $filter('orderBy')(alarmsList, ['-createdTime']);
- deferred.resolve(alarmsList);
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- }
-
- function getAlarmsByQuery(alarmsQuery) {
- var deferred = $q.defer();
- var time = Date.now();
- var pageLink;
- var leftToLoad;
- if (alarmsQuery.limit) {
- pageLink = {
- limit: alarmsQuery.limit
- };
- } else if (alarmsQuery.interval) {
- pageLink = {
- limit: alarmsQuery.alarmsFetchSize || 100,
- startTime: time - alarmsQuery.interval
- };
- } else if (alarmsQuery.startTime) {
- pageLink = {
- limit: alarmsQuery.alarmsFetchSize || 100,
- startTime: Math.round(alarmsQuery.startTime)
- };
- if (alarmsQuery.endTime) {
- pageLink.endTime = Math.round(alarmsQuery.endTime);
- }
- }
-
- if (angular.isDefined(alarmsQuery.alarmsMaxCountLoad) && alarmsQuery.alarmsMaxCountLoad !== 0) {
- leftToLoad = alarmsQuery.alarmsMaxCountLoad;
- if (leftToLoad < pageLink.limit) {
- pageLink.limit = leftToLoad;
- }
- }
-
- fetchAlarms(alarmsQuery, pageLink, deferred, leftToLoad);
- return deferred.promise;
- }
-
- function onPollAlarms(alarmsQuery) {
- getAlarmsByQuery(alarmsQuery).then(
- function success(alarms) {
- alarmsQuery.onAlarms(alarms);
- },
- function fail() {}
- );
- }
-
- function pollAlarms(entityType, entityId, alarmStatus, interval, limit, pollingInterval, onAlarms) {
- var alarmsQuery = {
- entityType: entityType,
- entityId: entityId,
- alarmSearchStatus: null,
- alarmStatus: alarmStatus,
- fetchOriginator: false,
- interval: interval,
- limit: limit,
- onAlarms: onAlarms
- };
- onPollAlarms(alarmsQuery);
- return $interval(onPollAlarms, pollingInterval, 0, false, alarmsQuery);
- }
-
- function cancelPollAlarms(pollPromise) {
- if (angular.isDefined(pollPromise)) {
- $interval.cancel(pollPromise);
- }
- }
-
- function subscribeForAlarms(alarmSourceListener) {
- alarmSourceListener.id = utils.guid();
- alarmSourceListeners[alarmSourceListener.id] = alarmSourceListener;
- var alarmSource = alarmSourceListener.alarmSource;
- if (alarmSource.type == types.datasourceType.function) {
- $timeout(function() {
- alarmSourceListener.alarmsUpdated([simulatedAlarm], false);
- });
- } else if (alarmSource.entityType && alarmSource.entityId) {
- var pollingInterval = alarmSourceListener.alarmsPollingInterval;
- alarmSourceListener.alarmsQuery = {
- entityType: alarmSource.entityType,
- entityId: alarmSource.entityId,
- alarmSearchStatus: alarmSourceListener.alarmSearchStatus,
- alarmStatus: null,
- alarmsMaxCountLoad: alarmSourceListener.alarmsMaxCountLoad,
- alarmsFetchSize: alarmSourceListener.alarmsFetchSize
- };
- var originatorKeys = $filter('filter')(alarmSource.dataKeys, {name: 'originator'});
- if (originatorKeys && originatorKeys.length) {
- alarmSourceListener.alarmsQuery.fetchOriginator = true;
- }
- var subscriptionTimewindow = alarmSourceListener.subscriptionTimewindow;
- if (subscriptionTimewindow.realtimeWindowMs) {
- alarmSourceListener.alarmsQuery.startTime = subscriptionTimewindow.startTs;
- } else {
- alarmSourceListener.alarmsQuery.startTime = subscriptionTimewindow.fixedWindow.startTimeMs;
- alarmSourceListener.alarmsQuery.endTime = subscriptionTimewindow.fixedWindow.endTimeMs;
- }
- alarmSourceListener.alarmsQuery.onAlarms = function(alarms) {
- if (subscriptionTimewindow.realtimeWindowMs) {
- var now = Date.now();
- if (alarmSourceListener.lastUpdateTs) {
- var interval = now - alarmSourceListener.lastUpdateTs;
- alarmSourceListener.alarmsQuery.startTime += interval;
- }
- alarmSourceListener.lastUpdateTs = now;
- }
- alarmSourceListener.alarmsUpdated(alarms, false);
- }
- onPollAlarms(alarmSourceListener.alarmsQuery);
- alarmSourceListener.pollPromise = $interval(onPollAlarms, pollingInterval,
- 0, false, alarmSourceListener.alarmsQuery);
- }
-
- }
-
- function unsubscribeFromAlarms(alarmSourceListener) {
- if (alarmSourceListener && alarmSourceListener.id) {
- if (alarmSourceListener.pollPromise) {
- $interval.cancel(alarmSourceListener.pollPromise);
- alarmSourceListener.pollPromise = null;
- }
- delete alarmSourceListeners[alarmSourceListener.id];
- }
- }
-}
diff --git a/ui/src/app/api/alias-controller.js b/ui/src/app/api/alias-controller.js
deleted file mode 100644
index 3f570a904f..0000000000
--- a/ui/src/app/api/alias-controller.js
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default class AliasController {
-
- constructor($scope, $q, $filter, utils, types, entityService, stateController, entityAliases) {
- this.$scope = $scope;
- this.$q = $q;
- this.$filter = $filter;
- this.utils = utils;
- this.types = types;
- this.entityService = entityService;
- this.stateController = stateController;
- this.entityAliases = angular.copy(entityAliases);
- this.resolvedAliases = {};
- this.resolvedAliasesPromise = {};
- this.resolvedAliasesToStateEntities = {};
- }
-
- updateEntityAliases(newEntityAliases) {
- var changedAliasIds = [];
- for (var aliasId in newEntityAliases) {
- var newEntityAlias = newEntityAliases[aliasId];
- var prevEntityAlias = this.entityAliases[aliasId];
- if (!angular.equals(newEntityAlias, prevEntityAlias)) {
- changedAliasIds.push(aliasId);
- this.setAliasUnresolved(aliasId);
- }
- }
- for (aliasId in this.entityAliases) {
- if (!newEntityAliases[aliasId]) {
- changedAliasIds.push(aliasId);
- this.setAliasUnresolved(aliasId);
- }
- }
- this.entityAliases = angular.copy(newEntityAliases);
- if (changedAliasIds.length) {
- this.$scope.$broadcast('entityAliasesChanged', changedAliasIds);
- }
- }
-
- dashboardStateChanged() {
- var changedAliasIds = [];
- for (var aliasId in this.resolvedAliasesToStateEntities) {
- var stateEntityInfo = this.resolvedAliasesToStateEntities[aliasId];
- var newEntityId = this.stateController.getEntityId(stateEntityInfo.entityParamName);
- var prevEntityId = stateEntityInfo.entityId;
- if (!angular.equals(newEntityId, prevEntityId)) {
- changedAliasIds.push(aliasId);
- this.setAliasUnresolved(aliasId);
- }
- }
- if (changedAliasIds.length) {
- this.$scope.$broadcast('entityAliasesChanged', changedAliasIds);
- }
- }
-
- setAliasUnresolved(aliasId) {
- delete this.resolvedAliases[aliasId];
- delete this.resolvedAliasesPromise[aliasId];
- delete this.resolvedAliasesToStateEntities[aliasId];
- }
-
- getEntityAliases() {
- return this.entityAliases;
- }
-
- getEntityAliasId(aliasName) {
- for (var aliasId in this.entityAliases) {
- var alias = this.entityAliases[aliasId];
- if (alias.alias == aliasName) {
- return aliasId;
- }
- }
- return null;
- }
-
- getAliasInfo(aliasId) {
- var deferred = this.$q.defer();
- var aliasInfo = this.resolvedAliases[aliasId];
- if (aliasInfo) {
- deferred.resolve(aliasInfo);
- return deferred.promise;
- } else if (this.resolvedAliasesPromise[aliasId]) {
- return this.resolvedAliasesPromise[aliasId];
- } else {
- this.resolvedAliasesPromise[aliasId] = deferred.promise;
- var aliasCtrl = this;
- var entityAlias = this.entityAliases[aliasId];
- if (entityAlias) {
- this.entityService.resolveAlias(entityAlias, this.stateController.getStateParams()).then(
- function success(aliasInfo) {
- aliasCtrl.resolvedAliases[aliasId] = aliasInfo;
- delete aliasCtrl.resolvedAliasesPromise[aliasId];
- if (aliasInfo.stateEntity) {
- var stateEntityInfo = {
- entityParamName: aliasInfo.entityParamName,
- entityId: aliasCtrl.stateController.getEntityId(aliasInfo.entityParamName)
- };
- aliasCtrl.resolvedAliasesToStateEntities[aliasId] =
- stateEntityInfo;
- }
- aliasCtrl.$scope.$broadcast('entityAliasResolved', aliasId);
- deferred.resolve(aliasInfo);
- },
- function fail() {
- deferred.reject();
- delete aliasCtrl.resolvedAliasesPromise[aliasId];
- }
- );
- } else {
- deferred.reject();
- delete aliasCtrl.resolvedAliasesPromise[aliasId];
- }
- return this.resolvedAliasesPromise[aliasId];
- }
- }
-
- resolveDatasource(datasource, isSingle) {
- var deferred = this.$q.defer();
- if (datasource.type === this.types.datasourceType.entity) {
- if (datasource.entityAliasId) {
- this.getAliasInfo(datasource.entityAliasId).then(
- function success(aliasInfo) {
- datasource.aliasName = aliasInfo.alias;
- if (aliasInfo.resolveMultiple && !isSingle) {
- var newDatasource;
- var resolvedEntities = aliasInfo.resolvedEntities;
- if (resolvedEntities && resolvedEntities.length) {
- var datasources = [];
- for (var i=0;i 0 ? true : false;
- datasources.push(newDatasource);
- }
- deferred.resolve(datasources);
- } else {
- if (aliasInfo.stateEntity) {
- newDatasource = angular.copy(datasource);
- newDatasource.unresolvedStateEntity = true;
- deferred.resolve([newDatasource]);
- } else {
- deferred.reject();
- }
- }
- } else {
- var entity = aliasInfo.currentEntity;
- if (entity) {
- if (entity.origEntity) {
- datasource.entity = angular.copy(entity.origEntity);
- } else {
- datasource.entity = {};
- }
- datasource.entityId = entity.id;
- datasource.entityType = entity.entityType;
- datasource.entityName = entity.name;
- datasource.entityLabel = entity.label;
- datasource.name = entity.name;
- datasource.entityDescription = entity.entityDescription;
- deferred.resolve([datasource]);
- } else {
- if (aliasInfo.stateEntity) {
- datasource.unresolvedStateEntity = true;
- deferred.resolve([datasource]);
- } else {
- deferred.reject();
- }
- }
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- } else { // entityId
- datasource.aliasName = datasource.entityName;
- datasource.name = datasource.entityName;
- deferred.resolve([datasource]);
- }
- } else { // function
- deferred.resolve([datasource]);
- }
- return deferred.promise;
- }
-
- resolveAlarmSource(alarmSource) {
- var deferred = this.$q.defer();
- var aliasCtrl = this;
- this.resolveDatasource(alarmSource, true).then(
- function success(datasources) {
- var datasource = datasources[0];
- if (datasource.type === aliasCtrl.types.datasourceType.function) {
- var name;
- if (datasource.name && datasource.name.length) {
- name = datasource.name;
- } else {
- name = aliasCtrl.types.datasourceType.function;
- }
- datasource.name = name;
- datasource.aliasName = name;
- datasource.entityName = name;
- } else if (datasource.unresolvedStateEntity) {
- datasource.name = "Unresolved";
- datasource.entityName = "Unresolved";
- }
- deferred.resolve(datasource);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- resolveDatasources(datasources) {
-
- var aliasCtrl = this;
-
- function updateDataKeyLabel(dataKey, datasource) {
- if (!dataKey.pattern) {
- dataKey.pattern = angular.copy(dataKey.label);
- }
- dataKey.label = aliasCtrl.utils.createLabelFromDatasource(datasource, dataKey.pattern);
- }
-
- function updateDatasourceKeyLabels(datasource) {
- for (var dk = 0; dk < datasource.dataKeys.length; dk++) {
- updateDataKeyLabel(datasource.dataKeys[dk], datasource);
- }
- }
-
- var deferred = this.$q.defer();
- var newDatasources = angular.copy(datasources);
- var datasorceResolveTasks = [];
-
- newDatasources.forEach(function (datasource) {
- var resolveDatasourceTask = aliasCtrl.resolveDatasource(datasource);
- datasorceResolveTasks.push(resolveDatasourceTask);
- });
- this.$q.all(datasorceResolveTasks).then(
- function success(datasourcesArrays) {
- var datasources = [].concat.apply([], datasourcesArrays);
- datasources = aliasCtrl.$filter('orderBy')(datasources, '+generated');
- var index = 0;
- var functionIndex = 0;
- datasources.forEach(function(datasource) {
- if (datasource.type === aliasCtrl.types.datasourceType.function) {
- var name;
- if (datasource.name && datasource.name.length) {
- name = datasource.name;
- } else {
- functionIndex++;
- name = aliasCtrl.types.datasourceType.function;
- if (functionIndex > 1) {
- name += ' ' + functionIndex;
- }
- }
- datasource.name = name;
- datasource.aliasName = name;
- datasource.entityName = name;
- } else if (datasource.unresolvedStateEntity) {
- datasource.name = "Unresolved";
- datasource.entityName = "Unresolved";
- }
- datasource.dataKeys.forEach(function(dataKey) {
- if (datasource.generated) {
- dataKey._hash = Math.random();
- dataKey.color = aliasCtrl.utils.getMaterialColor(index);
- }
- index++;
- });
- updateDatasourceKeyLabels(datasource);
- });
- deferred.resolve(datasources);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- getInstantAliasInfo(aliasId) {
- return this.resolvedAliases[aliasId];
- }
-
- updateCurrentAliasEntity(aliasId, currentEntity) {
- var aliasInfo = this.resolvedAliases[aliasId];
- if (aliasInfo) {
- var prevCurrentEntity = aliasInfo.currentEntity;
- if (!angular.equals(currentEntity, prevCurrentEntity)) {
- aliasInfo.currentEntity = currentEntity;
- this.$scope.$broadcast('entityAliasesChanged', [aliasId]);
- }
- }
- }
-
-}
\ No newline at end of file
diff --git a/ui/src/app/api/asset.service.js b/ui/src/app/api/asset.service.js
deleted file mode 100644
index a936e33915..0000000000
--- a/ui/src/app/api/asset.service.js
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.asset', [])
- .factory('assetService', AssetService)
- .name;
-
-/*@ngInject*/
-function AssetService($http, $q, customerService, userService) {
-
- var service = {
- getAsset: getAsset,
- getAssets: getAssets,
- saveAsset: saveAsset,
- deleteAsset: deleteAsset,
- assignAssetToCustomer: assignAssetToCustomer,
- unassignAssetFromCustomer: unassignAssetFromCustomer,
- makeAssetPublic: makeAssetPublic,
- getTenantAssets: getTenantAssets,
- getCustomerAssets: getCustomerAssets,
- findByQuery: findByQuery,
- fetchAssetsByNameFilter: fetchAssetsByNameFilter,
- getAssetTypes: getAssetTypes,
- findByName: findByName
- }
-
- return service;
-
- function getAsset(assetId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/asset/' + assetId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getAssets(assetIds, config) {
- var deferred = $q.defer();
- var ids = '';
- for (var i=0;i0) {
- ids += ',';
- }
- ids += assetIds[i];
- }
- var url = '/api/assets?assetIds=' + ids;
- $http.get(url, config).then(function success(response) {
- var assets = response.data;
- assets.sort(function (asset1, asset2) {
- var id1 = asset1.id.id;
- var id2 = asset2.id.id;
- var index1 = assetIds.indexOf(id1);
- var index2 = assetIds.indexOf(id2);
- return index1 - index2;
- });
- deferred.resolve(assets);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function saveAsset(asset, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/asset';
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.post(url, asset, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteAsset(assetId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/asset/' + assetId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.delete(url, config).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function assignAssetToCustomer(customerId, assetId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/asset/' + assetId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.post(url, null, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function unassignAssetFromCustomer(assetId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/customer/asset/' + assetId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.delete(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function makeAssetPublic(assetId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/customer/public/asset/' + assetId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.post(url, null, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getTenantAssets(pageLink, applyCustomersInfo, config, type) {
- var deferred = $q.defer();
- var url = '/api/tenant/assets?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- if (angular.isDefined(type) && type.length) {
- url += '&type=' + type;
- }
- $http.get(url, config).then(function success(response) {
- if (applyCustomersInfo) {
- customerService.applyAssignedCustomersInfo(response.data.data).then(
- function success(data) {
- response.data.data = data;
- deferred.resolve(response.data);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.resolve(response.data);
- }
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getCustomerAssets(customerId, pageLink, applyCustomersInfo, config, type) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/assets?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- if (angular.isDefined(type) && type.length) {
- url += '&type=' + type;
- }
- $http.get(url, config).then(function success(response) {
- if (applyCustomersInfo) {
- customerService.applyAssignedCustomerInfo(response.data.data, customerId).then(
- function success(data) {
- response.data.data = data;
- deferred.resolve(response.data);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.resolve(response.data);
- }
- }, function fail() {
- deferred.reject();
- });
-
- return deferred.promise;
- }
-
- function findByQuery(query, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/assets';
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.post(url, query, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function fetchAssetsByNameFilter(assetNameFilter, limit, applyCustomersInfo, config) {
- var deferred = $q.defer();
- var user = userService.getCurrentUser();
- var promise;
- var pageLink = {limit: limit, textSearch: assetNameFilter};
- if (user.authority === 'CUSTOMER_USER') {
- var customerId = user.customerId;
- promise = getCustomerAssets(customerId, pageLink, applyCustomersInfo, config);
- } else {
- promise = getTenantAssets(pageLink, applyCustomersInfo, config);
- }
- promise.then(
- function success(result) {
- if (result.data && result.data.length > 0) {
- deferred.resolve(result.data);
- } else {
- deferred.resolve(null);
- }
- },
- function fail() {
- deferred.resolve(null);
- }
- );
- return deferred.promise;
- }
-
- function getAssetTypes(config) {
- var deferred = $q.defer();
- var url = '/api/asset/types';
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function findByName(assetName, config) {
- config = config || {};
- var deferred = $q.defer();
- var url = '/api/tenant/assets?assetName=' + assetName;
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/api/attribute.service.js b/ui/src/app/api/attribute.service.js
deleted file mode 100644
index 54655d7e29..0000000000
--- a/ui/src/app/api/attribute.service.js
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.attribute', [])
- .factory('attributeService', AttributeService)
- .name;
-
-/*@ngInject*/
-function AttributeService($http, $q, $filter, types, telemetryWebsocketService) {
-
- var entityAttributesSubscriptionMap = {};
-
- var service = {
- getEntityKeys: getEntityKeys,
- getEntityTimeseriesValues: getEntityTimeseriesValues,
- getEntityAttributesValues: getEntityAttributesValues,
- getEntityAttributes: getEntityAttributes,
- subscribeForEntityAttributes: subscribeForEntityAttributes,
- unsubscribeForEntityAttributes: unsubscribeForEntityAttributes,
- saveEntityAttributes: saveEntityAttributes,
- deleteEntityAttributes: deleteEntityAttributes,
- saveEntityTimeseries: saveEntityTimeseries,
- deleteEntityTimeseries: deleteEntityTimeseries
- }
-
- return service;
-
- function getEntityKeys(entityType, entityId, query, type, config) {
- var deferred = $q.defer();
- var url = '/api/plugins/telemetry/' + entityType + '/' + entityId + '/keys/';
- if (type === types.dataKeyType.timeseries) {
- url += 'timeseries';
- } else if (type === types.dataKeyType.attribute) {
- url += 'attributes';
- }
- $http.get(url, config).then(function success(response) {
- var result = [];
- if (response.data) {
- if (query) {
- var dataKeys = response.data;
- var lowercaseQuery = angular.lowercase(query);
- for (var i=0; i -1) {
- attribute = attributes[index];
- } else {
- attribute = {
- key: key
- };
- index = attributes.push(attribute)-1;
- keys[key] = index;
- }
- var attrData = data[key][0];
- attribute.lastUpdateTs = attrData[0];
- attribute.value = attrData[1];
- }
- if (entityAttributesSubscription.subscriptionCallback) {
- entityAttributesSubscription.subscriptionCallback(attributes);
- }
- }
- }
-
- function subscribeForEntityAttributes(entityType, entityId, attributeScope) {
- var subscriptionId = entityType + entityId + attributeScope;
- var entityAttributesSubscription = entityAttributesSubscriptionMap[subscriptionId];
- if (!entityAttributesSubscription) {
- var subscriptionCommand = {
- entityType: entityType,
- entityId: entityId,
- scope: attributeScope
- };
-
- var type = attributeScope === types.latestTelemetry.value ?
- types.dataKeyType.timeseries : types.dataKeyType.attribute;
-
- var subscriber = {
- subscriptionCommands: [subscriptionCommand],
- type: type,
- onData: function (data) {
- if (data.data) {
- onSubscriptionData(data.data, subscriptionId);
- }
- }
- };
- entityAttributesSubscription = {
- subscriber: subscriber,
- attributes: null
- };
- entityAttributesSubscriptionMap[subscriptionId] = entityAttributesSubscription;
- telemetryWebsocketService.subscribe(subscriber);
- }
- return subscriptionId;
- }
-
- function unsubscribeForEntityAttributes(subscriptionId) {
- var entityAttributesSubscription = entityAttributesSubscriptionMap[subscriptionId];
- if (entityAttributesSubscription) {
- telemetryWebsocketService.unsubscribe(entityAttributesSubscription.subscriber);
- delete entityAttributesSubscriptionMap[subscriptionId];
- }
- }
-
- function saveEntityAttributes(entityType, entityId, attributeScope, attributes, config) {
- config = config || {};
- var deferred = $q.defer();
- var attributesData = {};
- var deleteAttributes = [];
- for (var a=0; a 0) {
- keys += ',';
- }
- keys += attributes[i].key;
- }
- var url = '/api/plugins/telemetry/' + entityType + '/' + entityId + '/' + attributeScope + '?keys=' + keys;
- $http.delete(url, config).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteEntityTimeseries(entityType, entityId, timeseries, config, deleteAllDataForKeys) {
- config = config || {};
- deleteAllDataForKeys = deleteAllDataForKeys || false;
- var deferred = $q.defer();
- var keys = '';
- for (var i = 0; i < timeseries.length; i++) {
- if (i > 0) {
- keys += ',';
- }
- keys += timeseries[i].key;
- }
- var url = '/api/plugins/telemetry/' + entityType + '/' + entityId + '/timeseries/delete' +
- '?keys=' + keys +
- '&deleteAllDataForKeys=' + deleteAllDataForKeys;
- $http.delete(url, config).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/api/audit-log.service.js b/ui/src/app/api/audit-log.service.js
deleted file mode 100644
index 3cb18ca040..0000000000
--- a/ui/src/app/api/audit-log.service.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.auditLog', [])
- .factory('auditLogService', AuditLogService)
- .name;
-
-/*@ngInject*/
-function AuditLogService($http, $q) {
-
- var service = {
- getAuditLogsByEntityId: getAuditLogsByEntityId,
- getAuditLogsByUserId: getAuditLogsByUserId,
- getAuditLogsByCustomerId: getAuditLogsByCustomerId,
- getAuditLogs: getAuditLogs
- }
-
- return service;
-
- function getAuditLogsByEntityId (entityType, entityId, pageLink) {
- var deferred = $q.defer();
- var url = `/api/audit/logs/entity/${entityType}/${entityId}?limit=${pageLink.limit}`;
-
- if (angular.isDefined(pageLink.startTime) && pageLink.startTime != null) {
- url += '&startTime=' + pageLink.startTime;
- }
- if (angular.isDefined(pageLink.endTime) && pageLink.endTime != null) {
- url += '&endTime=' + pageLink.endTime;
- }
- if (angular.isDefined(pageLink.idOffset) && pageLink.idOffset != null) {
- url += '&offset=' + pageLink.idOffset;
- }
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getAuditLogsByUserId (userId, pageLink) {
- var deferred = $q.defer();
- var url = `/api/audit/logs/user/${userId}?limit=${pageLink.limit}`;
-
- if (angular.isDefined(pageLink.startTime) && pageLink.startTime != null) {
- url += '&startTime=' + pageLink.startTime;
- }
- if (angular.isDefined(pageLink.endTime) && pageLink.endTime != null) {
- url += '&endTime=' + pageLink.endTime;
- }
- if (angular.isDefined(pageLink.idOffset) && pageLink.idOffset != null) {
- url += '&offset=' + pageLink.idOffset;
- }
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getAuditLogsByCustomerId (customerId, pageLink) {
- var deferred = $q.defer();
- var url = `/api/audit/logs/customer/${customerId}?limit=${pageLink.limit}`;
-
- if (angular.isDefined(pageLink.startTime) && pageLink.startTime != null) {
- url += '&startTime=' + pageLink.startTime;
- }
- if (angular.isDefined(pageLink.endTime) && pageLink.endTime != null) {
- url += '&endTime=' + pageLink.endTime;
- }
- if (angular.isDefined(pageLink.idOffset) && pageLink.idOffset != null) {
- url += '&offset=' + pageLink.idOffset;
- }
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getAuditLogs (pageLink) {
- var deferred = $q.defer();
- var url = `/api/audit/logs?limit=${pageLink.limit}`;
-
- if (angular.isDefined(pageLink.startTime) && pageLink.startTime != null) {
- url += '&startTime=' + pageLink.startTime;
- }
- if (angular.isDefined(pageLink.endTime) && pageLink.endTime != null) {
- url += '&endTime=' + pageLink.endTime;
- }
- if (angular.isDefined(pageLink.idOffset) && pageLink.idOffset != null) {
- url += '&offset=' + pageLink.idOffset;
- }
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/api/component-descriptor.service.js b/ui/src/app/api/component-descriptor.service.js
deleted file mode 100644
index 3c17d6ca45..0000000000
--- a/ui/src/app/api/component-descriptor.service.js
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.componentDescriptor', [])
- .factory('componentDescriptorService', ComponentDescriptorService).name;
-
-/*@ngInject*/
-function ComponentDescriptorService($http, $q) {
-
- var componentsByType = {};
- var componentsByClazz = {};
- var actionsByPlugin = {};
-
- var service = {
- getComponentDescriptorsByType: getComponentDescriptorsByType,
- getComponentDescriptorByClazz: getComponentDescriptorByClazz,
- getPluginActionsByPluginClazz: getPluginActionsByPluginClazz,
- getComponentDescriptorsByTypes: getComponentDescriptorsByTypes
- }
-
- return service;
-
- function getComponentDescriptorsByType(componentType) {
- var deferred = $q.defer();
- if (componentsByType[componentType]) {
- deferred.resolve(componentsByType[componentType]);
- } else {
- var url = '/api/components/' + componentType;
- $http.get(url, null).then(function success(response) {
- componentsByType[componentType] = response.data;
- for (var i = 0; i < componentsByType[componentType].length; i++) {
- var component = componentsByType[componentType][i];
- componentsByClazz[component.clazz] = component;
- }
- deferred.resolve(componentsByType[componentType]);
- }, function fail() {
- deferred.reject();
- });
-
- }
- return deferred.promise;
- }
-
- function getComponentDescriptorsByTypes(componentTypes) {
- var deferred = $q.defer();
- var result = [];
- for (var i=componentTypes.length-1;i>=0;i--) {
- var componentType = componentTypes[i];
- if (componentsByType[componentType]) {
- result = result.concat(componentsByType[componentType]);
- componentTypes.splice(i, 1);
- }
- }
- if (!componentTypes.length) {
- deferred.resolve(result);
- } else {
- var url = '/api/components?componentTypes=' + componentTypes.join(',');
- $http.get(url, null).then(function success(response) {
- var components = response.data;
- for (var i = 0; i < components.length; i++) {
- var component = components[i];
- var componentsList = componentsByType[component.type];
- if (!componentsList) {
- componentsList = [];
- componentsByType[component.type] = componentsList;
- }
- componentsList.push(component);
- componentsByClazz[component.clazz] = component;
- }
- result = result.concat(components);
- deferred.resolve(components);
- }, function fail() {
- deferred.reject();
- });
- }
- return deferred.promise;
- }
-
- function getComponentDescriptorByClazz(componentDescriptorClazz) {
- var deferred = $q.defer();
- if (componentsByClazz[componentDescriptorClazz]) {
- deferred.resolve(componentsByClazz[componentDescriptorClazz]);
- } else {
- var url = '/api/component/' + componentDescriptorClazz;
- $http.get(url, null).then(function success(response) {
- componentsByClazz[componentDescriptorClazz] = response.data;
- deferred.resolve(componentsByClazz[componentDescriptorClazz]);
- }, function fail() {
- deferred.reject();
- });
- }
- return deferred.promise;
- }
-
- function getPluginActionsByPluginClazz(pluginClazz) {
- var deferred = $q.defer();
- if (actionsByPlugin[pluginClazz]) {
- deferred.resolve(actionsByPlugin[pluginClazz]);
- } else {
- var url = '/api/components/actions/' + pluginClazz;
- $http.get(url, null).then(function success(response) {
- actionsByPlugin[pluginClazz] = response.data;
- deferred.resolve(actionsByPlugin[pluginClazz]);
- }, function fail() {
- deferred.reject();
- });
- }
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/api/customer.service.js b/ui/src/app/api/customer.service.js
deleted file mode 100644
index 2042130ae8..0000000000
--- a/ui/src/app/api/customer.service.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.customer', [])
- .factory('customerService', CustomerService)
- .name;
-
-/*@ngInject*/
-function CustomerService($http, $q, types) {
-
- var service = {
- getCustomers: getCustomers,
- getCustomer: getCustomer,
- getShortCustomerInfo: getShortCustomerInfo,
- applyAssignedCustomersInfo: applyAssignedCustomersInfo,
- applyAssignedCustomerInfo: applyAssignedCustomerInfo,
- deleteCustomer: deleteCustomer,
- saveCustomer: saveCustomer
- }
-
- return service;
-
- function getCustomers(pageLink, config) {
- var deferred = $q.defer();
- var url = '/api/customers?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getCustomer(customerId, config) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId;
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function getShortCustomerInfo(customerId) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/shortInfo';
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function applyAssignedCustomersInfo(items) {
- var deferred = $q.defer();
- var assignedCustomersMap = {};
- function loadNextCustomerInfoOrComplete(i) {
- i++;
- if (i < items.length) {
- loadNextCustomerInfo(i);
- } else {
- deferred.resolve(items);
- }
- }
-
- function loadNextCustomerInfo(i) {
- var item = items[i];
- item.assignedCustomer = {};
- if (item.customerId && item.customerId.id != types.id.nullUid) {
- item.assignedCustomer.id = item.customerId.id;
- var assignedCustomer = assignedCustomersMap[item.customerId.id];
- if (assignedCustomer){
- item.assignedCustomer = assignedCustomer;
- loadNextCustomerInfoOrComplete(i);
- } else {
- getShortCustomerInfo(item.customerId.id).then(
- function success(info) {
- assignedCustomer = {
- id: item.customerId.id,
- title: info.title,
- isPublic: info.isPublic
- };
- assignedCustomersMap[assignedCustomer.id] = assignedCustomer;
- item.assignedCustomer = assignedCustomer;
- loadNextCustomerInfoOrComplete(i);
- },
- function fail() {
- loadNextCustomerInfoOrComplete(i);
- }
- );
- }
- } else {
- loadNextCustomerInfoOrComplete(i);
- }
- }
- if (items.length > 0) {
- loadNextCustomerInfo(0);
- } else {
- deferred.resolve(items);
- }
- return deferred.promise;
- }
-
- function applyAssignedCustomerInfo(items, customerId) {
- var deferred = $q.defer();
- getShortCustomerInfo(customerId).then(
- function success(info) {
- var assignedCustomer = {
- id: customerId,
- title: info.title,
- isPublic: info.isPublic
- }
- items.forEach(function(item) {
- item.assignedCustomer = assignedCustomer;
- });
- deferred.resolve(items);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function saveCustomer(customer) {
- var deferred = $q.defer();
- var url = '/api/customer';
- $http.post(url, customer).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function deleteCustomer(customerId) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId;
- $http.delete(url).then(function success() {
- deferred.resolve();
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/api/dashboard.service.js b/ui/src/app/api/dashboard.service.js
deleted file mode 100644
index dbe8f44d0a..0000000000
--- a/ui/src/app/api/dashboard.service.js
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.dashboard', [])
- .factory('dashboardService', DashboardService).name;
-
-/*@ngInject*/
-function DashboardService($rootScope, $http, $q, $location, $filter) {
-
- var stDiffPromise;
-
- $rootScope.dadshboardServiceStateChangeStartHandle = $rootScope.$on('$stateChangeStart', function () {
- stDiffPromise = undefined;
- });
-
-
- var service = {
- assignDashboardToCustomer: assignDashboardToCustomer,
- getCustomerDashboards: getCustomerDashboards,
- getServerTimeDiff: getServerTimeDiff,
- getDashboard: getDashboard,
- getDashboardInfo: getDashboardInfo,
- getTenantDashboardsByTenantId: getTenantDashboardsByTenantId,
- getTenantDashboards: getTenantDashboards,
- deleteDashboard: deleteDashboard,
- saveDashboard: saveDashboard,
- unassignDashboardFromCustomer: unassignDashboardFromCustomer,
- updateDashboardCustomers: updateDashboardCustomers,
- addDashboardCustomers: addDashboardCustomers,
- removeDashboardCustomers: removeDashboardCustomers,
- makeDashboardPublic: makeDashboardPublic,
- makeDashboardPrivate: makeDashboardPrivate,
- getPublicDashboardLink: getPublicDashboardLink
- }
-
- return service;
-
- function getTenantDashboardsByTenantId(tenantId, pageLink, config) {
- var deferred = $q.defer();
- var url = '/api/tenant/' + tenantId + '/dashboards?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- $http.get(url, config).then(function success(response) {
- deferred.resolve(prepareDashboards(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getTenantDashboards(pageLink, config) {
- var deferred = $q.defer();
- var url = '/api/tenant/dashboards?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- $http.get(url, config).then(function success(response) {
- deferred.resolve(prepareDashboards(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getCustomerDashboards(customerId, pageLink, config) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/dashboards?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&offset=' + pageLink.idOffset;
- }
- $http.get(url, config).then(function success(response) {
- response.data = prepareDashboards(response.data);
- if (pageLink.textSearch) {
- response.data.data = $filter('filter')(response.data.data, {title: pageLink.textSearch});
- }
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getServerTimeDiff() {
- if (stDiffPromise) {
- return stDiffPromise;
- } else {
- var deferred = $q.defer();
- stDiffPromise = deferred.promise;
- var url = '/api/dashboard/serverTime';
- var ct1 = Date.now();
- $http.get(url, {ignoreLoading: true}).then(function success(response) {
- var ct2 = Date.now();
- var st = response.data;
- var stDiff = Math.ceil(st - (ct1 + ct2) / 2);
- deferred.resolve(stDiff);
- }, function fail() {
- deferred.reject();
- });
- }
- return stDiffPromise;
- }
-
- function getDashboard(dashboardId) {
- var deferred = $q.defer();
- var url = '/api/dashboard/' + dashboardId;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getDashboardInfo(dashboardId, config) {
- var deferred = $q.defer();
- var url = '/api/dashboard/info/' + dashboardId;
- $http.get(url, config).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function saveDashboard(dashboard) {
- var deferred = $q.defer();
- var url = '/api/dashboard';
- $http.post(url, cleanDashboard(dashboard)).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteDashboard(dashboardId) {
- var deferred = $q.defer();
- var url = '/api/dashboard/' + dashboardId;
- $http.delete(url).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function assignDashboardToCustomer(customerId, dashboardId) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/dashboard/' + dashboardId;
- $http.post(url, null).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function unassignDashboardFromCustomer(customerId, dashboardId) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/dashboard/' + dashboardId;
- $http.delete(url).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function updateDashboardCustomers(dashboardId, customerIds) {
- var deferred = $q.defer();
- var url = '/api/dashboard/' + dashboardId + '/customers';
- $http.post(url, customerIds).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function addDashboardCustomers(dashboardId, customerIds) {
- var deferred = $q.defer();
- var url = '/api/dashboard/' + dashboardId + '/customers/add';
- $http.post(url, customerIds).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function removeDashboardCustomers(dashboardId, customerIds) {
- var deferred = $q.defer();
- var url = '/api/dashboard/' + dashboardId + '/customers/remove';
- $http.post(url, customerIds).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function makeDashboardPublic(dashboardId) {
- var deferred = $q.defer();
- var url = '/api/customer/public/dashboard/' + dashboardId;
- $http.post(url, null).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function makeDashboardPrivate(dashboardId) {
- var deferred = $q.defer();
- var url = '/api/customer/public/dashboard/' + dashboardId;
- $http.delete(url).then(function success(response) {
- deferred.resolve(prepareDashboard(response.data));
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getPublicDashboardLink(dashboard) {
- var url = $location.protocol() + '://' + $location.host();
- var port = $location.port();
- if (port != 80 && port != 443) {
- url += ":" + port;
- }
- url += "/dashboard/" + dashboard.id.id + "?publicId=" + dashboard.publicCustomerId;
- return url;
- }
-
- function prepareDashboards(dashboardsData) {
- if (dashboardsData.data) {
- for (var i = 0; i < dashboardsData.data.length; i++) {
- dashboardsData.data[i] = prepareDashboard(dashboardsData.data[i]);
- }
- }
- return dashboardsData;
- }
-
- function prepareDashboard(dashboard) {
- dashboard.publicCustomerId = null;
- dashboard.assignedCustomersText = "";
- dashboard.assignedCustomersIds = [];
- if (dashboard.assignedCustomers && dashboard.assignedCustomers.length) {
- var assignedCustomersTitles = [];
- for (var i = 0; i < dashboard.assignedCustomers.length; i++) {
- var assignedCustomer = dashboard.assignedCustomers[i];
- dashboard.assignedCustomersIds.push(assignedCustomer.customerId.id);
- if (assignedCustomer.public) {
- dashboard.publicCustomerId = assignedCustomer.customerId.id;
- } else {
- assignedCustomersTitles.push(assignedCustomer.title);
- }
- }
- dashboard.assignedCustomersText = assignedCustomersTitles.join(', ');
- }
- return dashboard;
- }
-
- function cleanDashboard(dashboard) {
- delete dashboard.publicCustomerId;
- delete dashboard.assignedCustomersText;
- delete dashboard.assignedCustomersIds;
- return dashboard;
- }
-
-}
diff --git a/ui/src/app/api/data-aggregator.js b/ui/src/app/api/data-aggregator.js
deleted file mode 100644
index 6efdeff4e7..0000000000
--- a/ui/src/app/api/data-aggregator.js
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default class DataAggregator {
-
- constructor(onDataCb, tsKeyNames, startTs, limit, aggregationType, timeWindow, interval,
- stateData, types, $timeout, $filter) {
- this.onDataCb = onDataCb;
- this.tsKeyNames = tsKeyNames;
- this.dataBuffer = {};
- for (var k = 0; k < tsKeyNames.length; k++) {
- this.dataBuffer[tsKeyNames[k]] = [];
- }
- this.startTs = startTs;
- this.aggregationType = aggregationType;
- this.types = types;
- this.$timeout = $timeout;
- this.$filter = $filter;
- this.dataReceived = false;
- this.resetPending = false;
- this.noAggregation = aggregationType === types.aggregation.none.value;
- this.limit = limit;
- this.timeWindow = timeWindow;
- this.interval = interval;
- this.stateData = stateData;
- if (this.stateData) {
- this.lastPrevKvPairData = {};
- }
- this.aggregationTimeout = Math.max(this.interval, 1000);
- switch (aggregationType) {
- case types.aggregation.min.value:
- this.aggFunction = min;
- break;
- case types.aggregation.max.value:
- this.aggFunction = max;
- break;
- case types.aggregation.avg.value:
- this.aggFunction = avg;
- break;
- case types.aggregation.sum.value:
- this.aggFunction = sum;
- break;
- case types.aggregation.count.value:
- this.aggFunction = count;
- break;
- case types.aggregation.none.value:
- this.aggFunction = none;
- break;
- default:
- this.aggFunction = avg;
- }
- }
-
- reset(startTs, timeWindow, interval) {
- if (this.intervalTimeoutHandle) {
- this.$timeout.cancel(this.intervalTimeoutHandle);
- this.intervalTimeoutHandle = null;
- }
- this.intervalScheduledTime = currentTime();
- this.startTs = startTs;
- this.timeWindow = timeWindow;
- this.interval = interval;
- this.endTs = this.startTs + this.timeWindow;
- this.elapsed = 0;
- this.aggregationTimeout = Math.max(this.interval, 1000);
- this.resetPending = true;
- var self = this;
- this.intervalTimeoutHandle = this.$timeout(function() {
- self.onInterval();
- }, this.aggregationTimeout, false);
- }
-
- onData(data, update, history, apply) {
- if (!this.dataReceived || this.resetPending) {
- var updateIntervalScheduledTime = true;
- if (!this.dataReceived) {
- this.elapsed = 0;
- this.dataReceived = true;
- this.endTs = this.startTs + this.timeWindow;
- }
- if (this.resetPending) {
- this.resetPending = false;
- updateIntervalScheduledTime = false;
- }
- if (update) {
- this.aggregationMap = {};
- updateAggregatedData(this.aggregationMap, this.aggregationType === this.types.aggregation.count.value,
- this.noAggregation, this.aggFunction, data.data, this.interval, this.startTs);
- } else {
- this.aggregationMap = processAggregatedData(data.data, this.aggregationType === this.types.aggregation.count.value, this.noAggregation);
- }
- if (updateIntervalScheduledTime) {
- this.intervalScheduledTime = currentTime();
- }
- this.onInterval(history, apply);
- } else {
- updateAggregatedData(this.aggregationMap, this.aggregationType === this.types.aggregation.count.value,
- this.noAggregation, this.aggFunction, data.data, this.interval, this.startTs);
- if (history) {
- this.intervalScheduledTime = currentTime();
- this.onInterval(history, apply);
- }
- }
- }
-
- onInterval(history, apply) {
- var now = currentTime();
- this.elapsed += now - this.intervalScheduledTime;
- this.intervalScheduledTime = now;
- if (this.intervalTimeoutHandle) {
- this.$timeout.cancel(this.intervalTimeoutHandle);
- this.intervalTimeoutHandle = null;
- }
- if (!history) {
- var delta = Math.floor(this.elapsed / this.interval);
- if (delta || !this.data) {
- this.startTs += delta * this.interval;
- this.endTs += delta * this.interval;
- this.data = this.updateData();
- this.elapsed = this.elapsed - delta * this.interval;
- }
- } else {
- this.data = this.updateData();
- }
- if (this.onDataCb) {
- this.onDataCb(this.data, apply);
- }
-
- var self = this;
- if (!history) {
- this.intervalTimeoutHandle = this.$timeout(function() {
- self.onInterval();
- }, this.aggregationTimeout, false);
- }
- }
-
- updateData() {
- for (var k = 0; k < this.tsKeyNames.length; k++) {
- this.dataBuffer[this.tsKeyNames[k]] = [];
- }
- for (var key in this.aggregationMap) {
- var aggKeyData = this.aggregationMap[key];
- var keyData = this.dataBuffer[key];
- for (var aggTimestamp in aggKeyData) {
- if (aggTimestamp <= this.startTs) {
- if (this.stateData &&
- (!this.lastPrevKvPairData[key] || this.lastPrevKvPairData[key][0] < aggTimestamp)) {
- this.lastPrevKvPairData[key] = [Number(aggTimestamp), aggKeyData[aggTimestamp].aggValue];
- }
- delete aggKeyData[aggTimestamp];
- } else if (aggTimestamp <= this.endTs) {
- var aggData = aggKeyData[aggTimestamp];
- var kvPair = [Number(aggTimestamp), aggData.aggValue];
- keyData.push(kvPair);
- }
- }
- keyData = this.$filter('orderBy')(keyData, '+this[0]');
- if (this.stateData) {
- this.updateStateBounds(keyData, angular.copy(this.lastPrevKvPairData[key]));
- }
- if (keyData.length > this.limit) {
- keyData = keyData.slice(keyData.length - this.limit);
- }
- this.dataBuffer[key] = keyData;
- }
- return this.dataBuffer;
- }
-
- updateStateBounds(keyData, lastPrevKvPair) {
- if (lastPrevKvPair) {
- lastPrevKvPair[0] = this.startTs;
- }
- var firstKvPair;
- if (!keyData.length) {
- if (lastPrevKvPair) {
- firstKvPair = lastPrevKvPair;
- keyData.push(firstKvPair);
- }
- } else {
- firstKvPair = keyData[0];
- }
- if (firstKvPair && firstKvPair[0] > this.startTs) {
- if (lastPrevKvPair) {
- keyData.unshift(lastPrevKvPair);
- }
- }
- if (keyData.length) {
- var lastKvPair = keyData[keyData.length-1];
- if (lastKvPair[0] < this.endTs) {
- lastKvPair = angular.copy(lastKvPair);
- lastKvPair[0] = this.endTs;
- keyData.push(lastKvPair);
- }
- }
- }
-
- destroy() {
- if (this.intervalTimeoutHandle) {
- this.$timeout.cancel(this.intervalTimeoutHandle);
- this.intervalTimeoutHandle = null;
- }
- this.aggregationMap = null;
- }
-
-}
-
-/* eslint-disable */
-function currentTime() {
- return window.performance && window.performance.now ?
- window.performance.now() : Date.now();
-}
-/* eslint-enable */
-
-function processAggregatedData(data, isCount, noAggregation) {
- var aggregationMap = {};
- for (var key in data) {
- var aggKeyData = aggregationMap[key];
- if (!aggKeyData) {
- aggKeyData = {};
- aggregationMap[key] = aggKeyData;
- }
- var keyData = data[key];
- for (var i = 0; i < keyData.length; i++) {
- var kvPair = keyData[i];
- var timestamp = kvPair[0];
- var value = convertValue(kvPair[1], noAggregation);
- var aggKey = timestamp;
- var aggData = {
- count: isCount ? value : 1,
- sum: value,
- aggValue: value
- }
- aggKeyData[aggKey] = aggData;
- }
- }
- return aggregationMap;
-}
-
-function updateAggregatedData(aggregationMap, isCount, noAggregation, aggFunction, data, interval, startTs) {
- for (var key in data) {
- var aggKeyData = aggregationMap[key];
- if (!aggKeyData) {
- aggKeyData = {};
- aggregationMap[key] = aggKeyData;
- }
- var keyData = data[key];
- for (var i = 0; i < keyData.length; i++) {
- var kvPair = keyData[i];
- var timestamp = kvPair[0];
- var value = convertValue(kvPair[1], noAggregation);
- var aggTimestamp = noAggregation ? timestamp : (startTs + Math.floor((timestamp - startTs) / interval) * interval + interval/2);
- var aggData = aggKeyData[aggTimestamp];
- if (!aggData) {
- aggData = {
- count: 1,
- sum: value,
- aggValue: isCount ? 1 : value
- }
- aggKeyData[aggTimestamp] = aggData;
- } else {
- aggFunction(aggData, value);
- }
- }
- }
-}
-
-function convertValue(value, noAggregation) {
- if (!noAggregation || value && isNumeric(value)) {
- return Number(value);
- } else {
- return value;
- }
-}
-
-function isNumeric(value) {
- return (value - parseFloat( value ) + 1) >= 0;
-}
-
-function avg(aggData, value) {
- aggData.count++;
- aggData.sum += value;
- aggData.aggValue = aggData.sum / aggData.count;
-}
-
-function min(aggData, value) {
- aggData.aggValue = Math.min(aggData.aggValue, value);
-}
-
-function max(aggData, value) {
- aggData.aggValue = Math.max(aggData.aggValue, value);
-}
-
-function sum(aggData, value) {
- aggData.aggValue = aggData.aggValue + value;
-}
-
-function count(aggData) {
- aggData.count++;
- aggData.aggValue = aggData.count;
-}
-
-function none(aggData, value) {
- aggData.aggValue = value;
-}
diff --git a/ui/src/app/api/datasource.service.js b/ui/src/app/api/datasource.service.js
deleted file mode 100644
index 72a1a3087d..0000000000
--- a/ui/src/app/api/datasource.service.js
+++ /dev/null
@@ -1,747 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import thingsboardApiDevice from './device.service';
-import thingsboardApiTelemetryWebsocket from './telemetry-websocket.service';
-import thingsboardTypes from '../common/types.constant';
-import thingsboardUtils from '../common/utils.service';
-import DataAggregator from './data-aggregator';
-
-export default angular.module('thingsboard.api.datasource', [thingsboardApiDevice, thingsboardApiTelemetryWebsocket, thingsboardTypes, thingsboardUtils])
- .factory('datasourceService', DatasourceService)
- .name;
-
-const YEAR = 1000 * 60 * 60 * 24 * 365;
-
-/*@ngInject*/
-function DatasourceService($timeout, $filter, $log, telemetryWebsocketService, types, utils) {
-
- var subscriptions = {};
-
- var service = {
- subscribeToDatasource: subscribeToDatasource,
- unsubscribeFromDatasource: unsubscribeFromDatasource
- }
-
- return service;
-
- function subscribeToDatasource(listener) {
- var datasource = listener.datasource;
-
- if (datasource.type === types.datasourceType.entity && (!listener.entityId || !listener.entityType)) {
- return;
- }
-
- var subscriptionDataKeys = [];
- for (var d = 0; d < datasource.dataKeys.length; d++) {
- var dataKey = datasource.dataKeys[d];
- var subscriptionDataKey = {
- name: dataKey.name,
- type: dataKey.type,
- funcBody: dataKey.funcBody,
- postFuncBody: dataKey.postFuncBody
- }
- subscriptionDataKeys.push(subscriptionDataKey);
- }
-
- var datasourceSubscription = {
- datasourceType: datasource.type,
- dataKeys: subscriptionDataKeys,
- type: listener.subscriptionType
- };
-
- if (listener.subscriptionType === types.widgetType.timeseries.value) {
- datasourceSubscription.subscriptionTimewindow = angular.copy(listener.subscriptionTimewindow);
- }
- if (datasourceSubscription.datasourceType === types.datasourceType.entity) {
- datasourceSubscription.entityType = listener.entityType;
- datasourceSubscription.entityId = listener.entityId;
- }
-
- listener.datasourceSubscriptionKey = utils.objectHashCode(datasourceSubscription);
- var subscription;
- if (subscriptions[listener.datasourceSubscriptionKey]) {
- subscription = subscriptions[listener.datasourceSubscriptionKey];
- subscription.syncListener(listener);
- } else {
- subscription = new DatasourceSubscription(datasourceSubscription, telemetryWebsocketService, $timeout, $filter, $log, types, utils);
- subscriptions[listener.datasourceSubscriptionKey] = subscription;
- subscription.start();
- }
- subscription.addListener(listener);
- }
-
- function unsubscribeFromDatasource(listener) {
- if (listener.datasourceSubscriptionKey) {
- if (subscriptions[listener.datasourceSubscriptionKey]) {
- var subscription = subscriptions[listener.datasourceSubscriptionKey];
- subscription.removeListener(listener);
- if (!subscription.hasListeners()) {
- subscription.unsubscribe();
- delete subscriptions[listener.datasourceSubscriptionKey];
- }
- }
- listener.datasourceSubscriptionKey = null;
- }
- }
-
-}
-
-function DatasourceSubscription(datasourceSubscription, telemetryWebsocketService, $timeout, $filter, $log, types, utils) {
-
- var listeners = [];
- var datasourceType = datasourceSubscription.datasourceType;
- var datasourceData = {};
- var dataSourceOrigData = {};
- var dataKeys = {};
- var subscribers = [];
- var history = datasourceSubscription.subscriptionTimewindow &&
- datasourceSubscription.subscriptionTimewindow.fixedWindow;
- var realtime = datasourceSubscription.subscriptionTimewindow &&
- datasourceSubscription.subscriptionTimewindow.realtimeWindowMs;
- var timer;
- var frequency;
- var tickElapsed = 0;
- var tickScheduledTime = 0;
- var dataAggregator;
-
- var subscription = {
- addListener: addListener,
- hasListeners: hasListeners,
- removeListener: removeListener,
- syncListener: syncListener,
- start: start,
- unsubscribe: unsubscribe
- }
-
- initializeSubscription();
-
- return subscription;
-
- function initializeSubscription() {
- for (var i = 0; i < datasourceSubscription.dataKeys.length; i++) {
- var dataKey = angular.copy(datasourceSubscription.dataKeys[i]);
- dataKey.index = i;
- var key;
- if (datasourceType === types.datasourceType.function) {
- if (!dataKey.func) {
- dataKey.func = new Function("time", "prevValue", dataKey.funcBody);
- }
- } else {
- if (dataKey.postFuncBody && !dataKey.postFunc) {
- dataKey.postFunc = new Function("time", "value", "prevValue", "timePrev", "prevOrigValue", dataKey.postFuncBody);
- }
- }
- if (datasourceType === types.datasourceType.entity || datasourceSubscription.type === types.widgetType.timeseries.value) {
- if (datasourceType === types.datasourceType.function) {
- key = dataKey.name + '_' + dataKey.index + '_' + dataKey.type;
- } else {
- key = dataKey.name + '_' + dataKey.type;
- }
- var dataKeysList = dataKeys[key];
- if (!dataKeysList) {
- dataKeysList = [];
- dataKeys[key] = dataKeysList;
- }
- var index = dataKeysList.push(dataKey) - 1;
- datasourceData[key + '_' + index] = {
- data: []
- };
- } else {
- key = utils.objectHashCode(dataKey);
- datasourceData[key] = {
- data: []
- };
- dataKeys[key] = dataKey;
- }
- dataSourceOrigData = angular.copy(datasourceData);
- dataKey.key = key;
- }
- if (datasourceType === types.datasourceType.function) {
- frequency = 1000;
- if (datasourceSubscription.type === types.widgetType.timeseries.value) {
- frequency = Math.min(datasourceSubscription.subscriptionTimewindow.aggregation.interval, 5000);
- }
- }
- }
-
- function addListener(listener) {
- listeners.push(listener);
- if (history) {
- start();
- }
- }
-
- function hasListeners() {
- return listeners.length > 0;
- }
-
- function removeListener(listener) {
- listeners.splice(listeners.indexOf(listener), 1);
- }
-
- function syncListener(listener) {
- var key;
- var dataKey;
- if (datasourceType === types.datasourceType.entity || datasourceSubscription.type === types.widgetType.timeseries.value) {
- for (key in dataKeys) {
- var dataKeysList = dataKeys[key];
- for (var i = 0; i < dataKeysList.length; i++) {
- dataKey = dataKeysList[i];
- var datasourceKey = key + '_' + i;
- listener.dataUpdated(datasourceData[datasourceKey],
- listener.datasourceIndex,
- dataKey.index, false);
- }
- }
- } else {
- for (key in dataKeys) {
- dataKey = dataKeys[key];
- listener.dataUpdated(datasourceData[key],
- listener.datasourceIndex,
- dataKey.index, false);
- }
- }
- }
-
- function start() {
- if (history && !hasListeners()) {
- return;
- }
- var subsTw = datasourceSubscription.subscriptionTimewindow;
- var tsKeyNames = [];
- var dataKey;
-
- if (datasourceType === types.datasourceType.entity) {
-
- //send subscribe command
-
- var tsKeys = '';
- var attrKeys = '';
-
- for (var key in dataKeys) {
- var dataKeysList = dataKeys[key];
- dataKey = dataKeysList[0];
- if (dataKey.type === types.dataKeyType.timeseries) {
- if (tsKeys.length > 0) {
- tsKeys += ',';
- }
- tsKeys += dataKey.name;
- tsKeyNames.push(dataKey.name);
- } else if (dataKey.type === types.dataKeyType.attribute) {
- if (attrKeys.length > 0) {
- attrKeys += ',';
- }
- attrKeys += dataKey.name;
- }
- }
-
- if (tsKeys.length > 0) {
-
- var subscriber;
-
- if (history) {
-
- var historyCommand = {
- entityType: datasourceSubscription.entityType,
- entityId: datasourceSubscription.entityId,
- keys: tsKeys,
- startTs: subsTw.fixedWindow.startTimeMs,
- endTs: subsTw.fixedWindow.endTimeMs,
- interval: subsTw.aggregation.interval,
- limit: subsTw.aggregation.limit,
- agg: subsTw.aggregation.type
- };
-
- subscriber = {
- historyCommands: [ historyCommand ],
- type: types.dataKeyType.timeseries,
- subsTw: subsTw
- };
-
- if (subsTw.aggregation.stateData) {
- subscriber.firstStateHistoryCommand = createFirstStateHistoryCommand(subsTw.fixedWindow.startTimeMs, tsKeys);
- subscriber.historyCommands.push(subscriber.firstStateHistoryCommand);
- }
-
- subscriber.onData = function (data, subscriptionId) {
- if (this.subsTw.aggregation.stateData &&
- this.firstStateHistoryCommand && this.firstStateHistoryCommand.cmdId == subscriptionId) {
- if (this.data) {
- onStateHistoryData(data, this.data, this.subsTw.aggregation.limit,
- subsTw.fixedWindow.startTimeMs, this.subsTw.fixedWindow.endTimeMs,
- (data) => {
- onData(data.data, types.dataKeyType.timeseries, true);
- });
- } else {
- this.firstStateData = data;
- }
- } else {
- if (this.subsTw.aggregation.stateData) {
- if (this.firstStateData) {
- onStateHistoryData(this.firstStateData, data, this.subsTw.aggregation.limit,
- this.subsTw.fixedWindow.startTimeMs, this.subsTw.fixedWindow.endTimeMs,
- (data) => {
- onData(data.data, types.dataKeyType.timeseries, true);
- });
- } else {
- this.data = data;
- }
- } else {
- for (key in data.data) {
- var keyData = data.data[key];
- data.data[key] = $filter('orderBy')(keyData, '+this[0]');
- }
- onData(data.data, types.dataKeyType.timeseries, true);
- }
- }
- };
- subscriber.onReconnected = function() {};
- telemetryWebsocketService.subscribe(subscriber);
- subscribers.push(subscriber);
-
- } else {
-
- var subscriptionCommand = {
- entityType: datasourceSubscription.entityType,
- entityId: datasourceSubscription.entityId,
- keys: tsKeys
- };
-
- subscriber = {
- subscriptionCommands: [subscriptionCommand],
- type: types.dataKeyType.timeseries
- };
-
- if (datasourceSubscription.type === types.widgetType.timeseries.value) {
- subscriber.subsTw = subsTw;
- updateRealtimeSubscriptionCommand(subscriptionCommand, subsTw);
-
- if (subsTw.aggregation.stateData) {
- subscriber.firstStateSubscriptionCommand = createFirstStateHistoryCommand(subsTw.startTs, tsKeys);
- subscriber.historyCommands = [subscriber.firstStateSubscriptionCommand];
- }
- dataAggregator = createRealtimeDataAggregator(subsTw, tsKeyNames, types.dataKeyType.timeseries);
- subscriber.onData = function(data, subscriptionId) {
- if (this.subsTw.aggregation.stateData &&
- this.firstStateSubscriptionCommand && this.firstStateSubscriptionCommand.cmdId == subscriptionId) {
- if (this.data) {
- onStateHistoryData(data, this.data, this.subsTw.aggregation.limit,
- this.subsTw.startTs, this.subsTw.startTs + this.subsTw.aggregation.timeWindow,
- (data) => {
- dataAggregator.onData(data, false, false, true);
- });
- this.stateDataReceived = true;
- } else {
- this.firstStateData = data;
- }
- } else {
- if (this.subsTw.aggregation.stateData && !this.stateDataReceived) {
- if (this.firstStateData) {
- onStateHistoryData(this.firstStateData, data, this.subsTw.aggregation.limit,
- this.subsTw.startTs, this.subsTw.startTs + this.subsTw.aggregation.timeWindow,
- (data) => {
- dataAggregator.onData(data, false, false, true);
- });
- this.stateDataReceived = true;
- } else {
- this.data = data;
- }
- } else {
- dataAggregator.onData(data, false, false, true);
- }
- }
- }
- subscriber.onReconnected = function() {
- var newSubsTw = null;
- for (var i2 = 0; i2 < listeners.length; i2++) {
- var listener = listeners[i2];
- if (!newSubsTw) {
- newSubsTw = listener.updateRealtimeSubscription();
- } else {
- listener.setRealtimeSubscription(newSubsTw);
- }
- }
- this.subsTw = newSubsTw;
- this.firstStateData = null;
- this.data = null;
- this.stateDataReceived = false;
- updateRealtimeSubscriptionCommand(this.subscriptionCommands[0], this.subsTw);
- if (this.subsTw.aggregation.stateData) {
- updateFirstStateHistoryCommand(this.firstStateSubscriptionCommand, this.subsTw.startTs);
- }
- dataAggregator.reset(newSubsTw.startTs, newSubsTw.aggregation.timeWindow, newSubsTw.aggregation.interval);
- }
- } else {
- subscriber.onReconnected = function() {}
- subscriber.onData = function(data) {
- if (data.data) {
- onData(data.data, types.dataKeyType.timeseries, true);
- }
- }
- }
-
- telemetryWebsocketService.subscribe(subscriber);
- subscribers.push(subscriber);
-
- }
- }
-
- if (attrKeys.length > 0) {
-
- var attrsSubscriptionCommand = {
- entityType: datasourceSubscription.entityType,
- entityId: datasourceSubscription.entityId,
- keys: attrKeys
- };
-
- subscriber = {
- subscriptionCommands: [attrsSubscriptionCommand],
- type: types.dataKeyType.attribute,
- onData: function (data) {
- if (data.data) {
- onData(data.data, types.dataKeyType.attribute, true);
- }
- },
- onReconnected: function() {}
- };
-
- telemetryWebsocketService.subscribe(subscriber);
- subscribers.push(subscriber);
-
- }
-
- } else if (datasourceType === types.datasourceType.function) {
- if (datasourceSubscription.type === types.widgetType.timeseries.value) {
- for (key in dataKeys) {
- var dataKeyList = dataKeys[key];
- for (var index = 0; index < dataKeyList.length; index++) {
- dataKey = dataKeyList[index];
- tsKeyNames.push(dataKey.name+'_'+dataKey.index);
- }
- }
- dataAggregator = createRealtimeDataAggregator(subsTw, tsKeyNames, types.dataKeyType.function);
- }
- tickScheduledTime = currentTime();
- if (history) {
- onTick(false);
- } else {
- timer = $timeout(
- function() {
- onTick(true)
- },
- 0,
- false
- );
- }
- }
- }
-
- function createFirstStateHistoryCommand(startTs, tsKeys) {
- return {
- entityType: datasourceSubscription.entityType,
- entityId: datasourceSubscription.entityId,
- keys: tsKeys,
- startTs: startTs - YEAR,
- endTs: startTs,
- interval: 1000,
- limit: 1,
- agg: types.aggregation.none.value
- };
- }
-
- function updateFirstStateHistoryCommand(stateHistoryCommand, startTs) {
- stateHistoryCommand.startTs = startTs - YEAR;
- stateHistoryCommand.endTs = startTs;
- }
-
- function onStateHistoryData(firstStateData, data, limit, startTs, endTs, onData) {
- for (var key in data.data) {
- var keyData = data.data[key];
- data.data[key] = $filter('orderBy')(keyData, '+this[0]');
- keyData = data.data[key];
- if (keyData.length < limit) {
- var firstStateKeyData = firstStateData.data[key];
- if (firstStateKeyData.length) {
- var firstStateDataTsKv = firstStateKeyData[0];
- firstStateDataTsKv[0] = startTs;
- firstStateKeyData = [
- [ startTs, firstStateKeyData[0][1] ]
- ];
- keyData.unshift(firstStateDataTsKv);
- }
- }
- if (keyData.length) {
- var lastTsKv = angular.copy(keyData[keyData.length-1]);
- lastTsKv[0] = endTs;
- keyData.push(lastTsKv);
- }
- }
- onData(data);
- }
-
- function createRealtimeDataAggregator(subsTw, tsKeyNames, dataKeyType) {
- return new DataAggregator(
- function(data, apply) {
- onData(data, dataKeyType, apply);
- },
- tsKeyNames,
- subsTw.startTs,
- subsTw.aggregation.limit,
- subsTw.aggregation.type,
- subsTw.aggregation.timeWindow,
- subsTw.aggregation.interval,
- subsTw.aggregation.stateData,
- types,
- $timeout,
- $filter
- );
- }
-
- function updateRealtimeSubscriptionCommand(subscriptionCommand, subsTw) {
- subscriptionCommand.startTs = subsTw.startTs;
- subscriptionCommand.timeWindow = subsTw.aggregation.timeWindow;
- subscriptionCommand.interval = subsTw.aggregation.interval;
- subscriptionCommand.limit = subsTw.aggregation.limit;
- subscriptionCommand.agg = subsTw.aggregation.type;
- }
-
- function unsubscribe() {
- if (timer) {
- $timeout.cancel(timer);
- timer = null;
- }
- if (datasourceType === types.datasourceType.entity) {
- for (var i=0;i 0) {
- prevSeries = datasourceKeyData[datasourceKeyData.length - 1];
- } else {
- prevSeries = [0, 0];
- }
- for (var time = startTime; time <= endTime && (timer || history); time += frequency) {
- var series = [];
- series.push(time);
- var value = dataKey.func(time, prevSeries[1]);
- series.push(value);
- data.push(series);
- prevSeries = series;
- }
- if (data.length > 0) {
- dataKey.lastUpdateTime = data[data.length - 1][0];
- }
- return data;
- }
-
- function generateLatest(dataKey, apply) {
- var prevSeries;
- var datasourceKeyData = datasourceData[dataKey.key].data;
- if (datasourceKeyData.length > 0) {
- prevSeries = datasourceKeyData[datasourceKeyData.length - 1];
- } else {
- prevSeries = [0, 0];
- }
- var series = [];
- var time = (new Date).getTime();
- series.push(time);
- var value = dataKey.func(time, prevSeries[1]);
- series.push(value);
- datasourceData[dataKey.key].data = [series];
- for (var i = 0; i < listeners.length; i++) {
- var listener = listeners[i];
- listener.dataUpdated(datasourceData[dataKey.key],
- listener.datasourceIndex,
- dataKey.index, apply);
- }
- }
-
- /* eslint-disable */
- function currentTime() {
- return window.performance && window.performance.now ?
- window.performance.now() : Date.now();
- }
- /* eslint-enable */
-
-
- function onTick(apply) {
-
- var now = currentTime();
- tickElapsed += now - tickScheduledTime;
- tickScheduledTime = now;
-
- if (timer) {
- $timeout.cancel(timer);
- }
-
- var key;
- if (datasourceSubscription.type === types.widgetType.timeseries.value) {
- var startTime;
- var endTime;
- var delta;
- var generatedData = {
- data: {
- }
- };
- if (!history) {
- delta = Math.floor(tickElapsed / frequency);
- }
- var deltaElapsed = history ? frequency : delta * frequency;
- tickElapsed = tickElapsed - deltaElapsed;
- for (key in dataKeys) {
- var dataKeyList = dataKeys[key];
- for (var index = 0; index < dataKeyList.length && (timer || history); index ++) {
- var dataKey = dataKeyList[index];
- if (!startTime) {
- if (realtime) {
- if (dataKey.lastUpdateTime) {
- startTime = dataKey.lastUpdateTime + frequency;
- endTime = dataKey.lastUpdateTime + deltaElapsed;
- } else {
- startTime = datasourceSubscription.subscriptionTimewindow.startTs;
- endTime = startTime + datasourceSubscription.subscriptionTimewindow.realtimeWindowMs + frequency;
- if (datasourceSubscription.subscriptionTimewindow.aggregation.type == types.aggregation.none.value) {
- var time = endTime - frequency * datasourceSubscription.subscriptionTimewindow.aggregation.limit;
- startTime = Math.max(time, startTime);
- }
- }
- } else {
- startTime = datasourceSubscription.subscriptionTimewindow.fixedWindow.startTimeMs;
- endTime = datasourceSubscription.subscriptionTimewindow.fixedWindow.endTimeMs;
- }
- }
- var data = generateSeries(dataKey, index, startTime, endTime);
- generatedData.data[dataKey.name+'_'+dataKey.index] = data;
- }
- }
- if (dataAggregator) {
- dataAggregator.onData(generatedData, true, history, apply);
- }
- } else if (datasourceSubscription.type === types.widgetType.latest.value) {
- for (key in dataKeys) {
- generateLatest(dataKeys[key], apply);
- }
- }
-
- if (!history) {
- timer = $timeout(function() {onTick(true)}, frequency, false);
- }
- }
-
- function isNumeric(val) {
- return (val - parseFloat( val ) + 1) >= 0;
- }
-
- function convertValue(val) {
- if (val && isNumeric(val)) {
- return Number(val);
- } else {
- return val;
- }
- }
-
- function onData(sourceData, type, apply) {
- for (var keyName in sourceData) {
- var keyData = sourceData[keyName];
- var key = keyName + '_' + type;
- var dataKeyList = dataKeys[key];
- for (var keyIndex = 0; dataKeyList && keyIndex < dataKeyList.length; keyIndex++) {
- var datasourceKey = key + "_" + keyIndex;
- if (datasourceData[datasourceKey].data) {
- var dataKey = dataKeyList[keyIndex];
- var data = [];
- var prevSeries;
- var prevOrigSeries;
- var datasourceKeyData;
- var datasourceOrigKeyData;
- var update = false;
- if (realtime) {
- datasourceKeyData = [];
- datasourceOrigKeyData = [];
- } else {
- datasourceKeyData = datasourceData[datasourceKey].data;
- datasourceOrigKeyData = dataSourceOrigData[datasourceKey].data;
- }
- if (datasourceKeyData.length > 0) {
- prevSeries = datasourceKeyData[datasourceKeyData.length - 1];
- prevOrigSeries = datasourceOrigKeyData[datasourceOrigKeyData.length -1];
- } else {
- prevSeries = [0, 0];
- prevOrigSeries = [0, 0];
- }
- dataSourceOrigData[datasourceKey].data = [];
- if (datasourceSubscription.type === types.widgetType.timeseries.value) {
- var series, time, value;
- for (var i = 0; i < keyData.length; i++) {
- series = keyData[i];
- time = series[0];
- dataSourceOrigData[datasourceKey].data.push(series);
- value = convertValue(series[1]);
- if (dataKey.postFunc) {
- value = dataKey.postFunc(time, value, prevSeries[1], prevOrigSeries[0], prevOrigSeries[1]);
- }
- prevOrigSeries = series;
- series = [time, value];
- data.push(series);
- prevSeries = series;
- }
- update = true;
- } else if (datasourceSubscription.type === types.widgetType.latest.value) {
- if (keyData.length > 0) {
- series = keyData[0];
- time = series[0];
- dataSourceOrigData[datasourceKey].data.push(series);
- value = convertValue(series[1]);
- if (dataKey.postFunc) {
- value = dataKey.postFunc(time, value, prevSeries[1], prevOrigSeries[0], prevOrigSeries[1]);
- }
- series = [time, value];
- data.push(series);
- }
- update = true;
- }
- if (update) {
- datasourceData[datasourceKey].data = data;
- for (var i2 = 0; i2 < listeners.length; i2++) {
- var listener = listeners[i2];
- if (angular.isFunction(listener))
- continue;
- listener.dataUpdated(datasourceData[datasourceKey],
- listener.datasourceIndex,
- dataKey.index, apply);
- }
- }
- }
- }
- }
- }
-}
diff --git a/ui/src/app/api/device.service.js b/ui/src/app/api/device.service.js
deleted file mode 100644
index b803ec333a..0000000000
--- a/ui/src/app/api/device.service.js
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import thingsboardTypes from '../common/types.constant';
-
-export default angular.module('thingsboard.api.device', [thingsboardTypes])
- .factory('deviceService', DeviceService)
- .name;
-
-/*@ngInject*/
-function DeviceService($http, $q, $window, userService, attributeService, customerService, types) {
-
- var service = {
- assignDeviceToCustomer: assignDeviceToCustomer,
- deleteDevice: deleteDevice,
- getCustomerDevices: getCustomerDevices,
- getDevice: getDevice,
- getDevices: getDevices,
- getDeviceCredentials: getDeviceCredentials,
- getTenantDevices: getTenantDevices,
- saveDevice: saveDevice,
- saveDeviceCredentials: saveDeviceCredentials,
- unassignDeviceFromCustomer: unassignDeviceFromCustomer,
- makeDevicePublic: makeDevicePublic,
- getDeviceAttributes: getDeviceAttributes,
- subscribeForDeviceAttributes: subscribeForDeviceAttributes,
- unsubscribeForDeviceAttributes: unsubscribeForDeviceAttributes,
- saveDeviceAttributes: saveDeviceAttributes,
- deleteDeviceAttributes: deleteDeviceAttributes,
- sendOneWayRpcCommand: sendOneWayRpcCommand,
- sendTwoWayRpcCommand: sendTwoWayRpcCommand,
- findByQuery: findByQuery,
- getDeviceTypes: getDeviceTypes,
- findByName: findByName,
- claimDevice: claimDevice,
- unclaimDevice: unclaimDevice
- };
-
- return service;
-
- function getTenantDevices(pageLink, applyCustomersInfo, config, type) {
- var deferred = $q.defer();
- var url = '/api/tenant/devices?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- if (angular.isDefined(type) && type.length) {
- url += '&type=' + type;
- }
- $http.get(url, config).then(function success(response) {
- if (applyCustomersInfo) {
- customerService.applyAssignedCustomersInfo(response.data.data).then(
- function success(data) {
- response.data.data = data;
- deferred.resolve(response.data);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.resolve(response.data);
- }
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getCustomerDevices(customerId, pageLink, applyCustomersInfo, config, type) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/devices?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- if (angular.isDefined(type) && type.length) {
- url += '&type=' + type;
- }
- $http.get(url, config).then(function success(response) {
- if (applyCustomersInfo) {
- customerService.applyAssignedCustomerInfo(response.data.data, customerId).then(
- function success(data) {
- response.data.data = data;
- deferred.resolve(response.data);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.resolve(response.data);
- }
- }, function fail() {
- deferred.reject();
- });
-
- return deferred.promise;
- }
-
- function getDevice(deviceId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/device/' + deviceId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, {ignoreErrors: ignoreErrors});
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function getDevices(deviceIds, config) {
- var deferred = $q.defer();
- var ids = '';
- for (var i = 0; i < deviceIds.length; i++) {
- if (i > 0) {
- ids += ',';
- }
- ids += deviceIds[i];
- }
- var url = '/api/devices?deviceIds=' + ids;
- $http.get(url, config).then(function success(response) {
- var devices = response.data;
- devices.sort(function (device1, device2) {
- var id1 = device1.id.id;
- var id2 = device2.id.id;
- var index1 = deviceIds.indexOf(id1);
- var index2 = deviceIds.indexOf(id2);
- return index1 - index2;
- });
- deferred.resolve(devices);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function saveDevice(device, config) {
- config = config || {};
- var deferred = $q.defer();
- var url = '/api/device';
- $http.post(url, device, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteDevice(deviceId) {
- var deferred = $q.defer();
- var url = '/api/device/' + deviceId;
- $http.delete(url).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getDeviceCredentials(deviceId, sync, config) {
- config = config || {};
- var deferred = $q.defer();
- var url = '/api/device/' + deviceId + '/credentials';
- if (sync) {
- var request = new $window.XMLHttpRequest();
- request.open('GET', url, false);
- request.setRequestHeader("Accept", "application/json, text/plain, */*");
- userService.setAuthorizationRequestHeader(request);
- request.send(null);
- if (request.status === 200) {
- deferred.resolve(angular.fromJson(request.responseText));
- } else {
- deferred.reject();
- }
- } else {
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- }
- return deferred.promise;
- }
-
- function saveDeviceCredentials(deviceCredentials, config) {
- config = config || {};
- var deferred = $q.defer();
- var url = '/api/device/credentials';
- $http.post(url, deviceCredentials, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function assignDeviceToCustomer(customerId, deviceId) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/device/' + deviceId;
- $http.post(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function unassignDeviceFromCustomer(deviceId) {
- var deferred = $q.defer();
- var url = '/api/customer/device/' + deviceId;
- $http.delete(url).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function makeDevicePublic(deviceId) {
- var deferred = $q.defer();
- var url = '/api/customer/public/device/' + deviceId;
- $http.post(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getDeviceAttributes(deviceId, attributeScope, query, successCallback, config) {
- return attributeService.getEntityAttributes(types.entityType.device, deviceId, attributeScope, query, successCallback, config);
- }
-
- function subscribeForDeviceAttributes(deviceId, attributeScope) {
- return attributeService.subscribeForEntityAttributes(types.entityType.device, deviceId, attributeScope);
- }
-
- function unsubscribeForDeviceAttributes(subscriptionId) {
- attributeService.unsubscribeForEntityAttributes(subscriptionId);
- }
-
- function saveDeviceAttributes(deviceId, attributeScope, attributes) {
- return attributeService.saveEntityAttributes(types.entityType.device, deviceId, attributeScope, attributes);
- }
-
- function deleteDeviceAttributes(deviceId, attributeScope, attributes) {
- return attributeService.deleteEntityAttributes(types.entityType.device, deviceId, attributeScope, attributes);
- }
-
- function sendOneWayRpcCommand(deviceId, requestBody) {
- var deferred = $q.defer();
- var url = '/api/plugins/rpc/oneway/' + deviceId;
- $http.post(url, requestBody).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(rejection) {
- deferred.reject(rejection);
- });
- return deferred.promise;
- }
-
- function sendTwoWayRpcCommand(deviceId, requestBody) {
- var deferred = $q.defer();
- var url = '/api/plugins/rpc/twoway/' + deviceId;
- $http.post(url, requestBody).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(rejection) {
- deferred.reject(rejection);
- });
- return deferred.promise;
- }
-
- function findByQuery(query, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/devices';
- if (!config) {
- config = {};
- }
- config = Object.assign(config, {ignoreErrors: ignoreErrors});
- $http.post(url, query, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getDeviceTypes(config) {
- var deferred = $q.defer();
- var url = '/api/device/types';
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function findByName(deviceName, config) {
- config = config || {};
- var deferred = $q.defer();
- var url = '/api/tenant/devices?deviceName=' + deviceName;
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function claimDevice(deviceName, deviceSecret, config) {
- deviceSecret = deviceSecret || {};
- config = config || {};
- const deferred = $q.defer();
- const url = '/api/customer/device/' + deviceName + '/claim';
- $http.post(url, deviceSecret, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(rejection) {
- deferred.reject(rejection);
- });
- return deferred.promise;
- }
-
- function unclaimDevice(deviceName) {
- const deferred = $q.defer();
- const url = '/api/customer/device/' + deviceName + '/claim';
- $http.delete(url).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(rejection) {
- deferred.reject(rejection);
- });
- return deferred.promise;
- }
-}
diff --git a/ui/src/app/api/entity-relation.service.js b/ui/src/app/api/entity-relation.service.js
deleted file mode 100644
index cfa287da8e..0000000000
--- a/ui/src/app/api/entity-relation.service.js
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.entityRelation', [])
- .factory('entityRelationService', EntityRelationService)
- .name;
-
-/*@ngInject*/
-function EntityRelationService($http, $q) {
-
- var service = {
- saveRelation: saveRelation,
- deleteRelation: deleteRelation,
- deleteRelations: deleteRelations,
- getRelation: getRelation,
- findByFrom: findByFrom,
- findInfoByFrom: findInfoByFrom,
- findByFromAndType: findByFromAndType,
- findByTo: findByTo,
- findInfoByTo: findInfoByTo,
- findByToAndType: findByToAndType,
- findByQuery: findByQuery,
- findInfoByQuery: findInfoByQuery
- }
-
- return service;
-
- function saveRelation(relation) {
- var deferred = $q.defer();
- var url = '/api/relation';
- $http.post(url, relation).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteRelation(fromId, fromType, relationType, toId, toType) {
- var deferred = $q.defer();
- var url = '/api/relation?fromId=' + fromId;
- url += '&fromType=' + fromType;
- url += '&relationType=' + relationType;
- url += '&toId=' + toId;
- url += '&toType=' + toType;
- $http.delete(url).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteRelations(entityId, entityType) {
- var deferred = $q.defer();
- var url = '/api/relations?entityId=' + entityId;
- url += '&entityType=' + entityType;
- $http.delete(url).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getRelation(fromId, fromType, relationType, toId, toType) {
- var deferred = $q.defer();
- var url = '/api/relation?fromId=' + fromId;
- url += '&fromType=' + fromType;
- url += '&relationType=' + relationType;
- url += '&toId=' + toId;
- url += '&toType=' + toType;
- $http.get(url).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function findByFrom(fromId, fromType) {
- var deferred = $q.defer();
- var url = '/api/relations?fromId=' + fromId;
- url += '&fromType=' + fromType;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function findInfoByFrom(fromId, fromType) {
- var deferred = $q.defer();
- var url = '/api/relations/info?fromId=' + fromId;
- url += '&fromType=' + fromType;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function findByFromAndType(fromId, fromType, relationType) {
- var deferred = $q.defer();
- var url = '/api/relations?fromId=' + fromId;
- url += '&fromType=' + fromType;
- url += '&relationType=' + relationType;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function findByTo(toId, toType) {
- var deferred = $q.defer();
- var url = '/api/relations?toId=' + toId;
- url += '&toType=' + toType;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function findInfoByTo(toId, toType) {
- var deferred = $q.defer();
- var url = '/api/relations/info?toId=' + toId;
- url += '&toType=' + toType;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function findByToAndType(toId, toType, relationType) {
- var deferred = $q.defer();
- var url = '/api/relations?toId=' + toId;
- url += '&toType=' + toType;
- url += '&relationType=' + relationType;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function findByQuery(query, config) {
- var deferred = $q.defer();
- var url = '/api/relations';
- $http.post(url, query, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(e) {
- deferred.reject(e);
- });
- return deferred.promise;
- }
-
- function findInfoByQuery(query, config) {
- var deferred = $q.defer();
- var url = '/api/relations/info';
- $http.post(url, query, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/api/entity-view.service.js b/ui/src/app/api/entity-view.service.js
deleted file mode 100644
index 83e4b49fd0..0000000000
--- a/ui/src/app/api/entity-view.service.js
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import thingsboardTypes from '../common/types.constant';
-
-export default angular.module('thingsboard.api.entityView', [thingsboardTypes])
- .factory('entityViewService', EntityViewService)
- .name;
-
-/*@ngInject*/
-function EntityViewService($http, $q, $window, userService, attributeService, customerService, types) {
-
- var service = {
- assignEntityViewToCustomer: assignEntityViewToCustomer,
- deleteEntityView: deleteEntityView,
- getCustomerEntityViews: getCustomerEntityViews,
- getEntityView: getEntityView,
- getTenantEntityViews: getTenantEntityViews,
- saveEntityView: saveEntityView,
- unassignEntityViewFromCustomer: unassignEntityViewFromCustomer,
- getEntityViewAttributes: getEntityViewAttributes,
- subscribeForEntityViewAttributes: subscribeForEntityViewAttributes,
- unsubscribeForEntityViewAttributes: unsubscribeForEntityViewAttributes,
- findByQuery: findByQuery,
- getEntityViewTypes: getEntityViewTypes,
- makeEntityViewPublic: makeEntityViewPublic
- }
-
- return service;
-
- function getTenantEntityViews(pageLink, applyCustomersInfo, config, type) {
- var deferred = $q.defer();
- var url = '/api/tenant/entityViews?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- if (angular.isDefined(type) && type.length) {
- url += '&type=' + type;
- }
- $http.get(url, config).then(function success(response) {
- if (applyCustomersInfo) {
- customerService.applyAssignedCustomersInfo(response.data.data).then(
- function success(data) {
- response.data.data = data;
- deferred.resolve(response.data);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.resolve(response.data);
- }
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getCustomerEntityViews(customerId, pageLink, applyCustomersInfo, config, type) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/entityViews?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- if (angular.isDefined(type) && type.length) {
- url += '&type=' + type;
- }
- $http.get(url, config).then(function success(response) {
- if (applyCustomersInfo) {
- customerService.applyAssignedCustomerInfo(response.data.data, customerId).then(
- function success(data) {
- response.data.data = data;
- deferred.resolve(response.data);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.resolve(response.data);
- }
- }, function fail() {
- deferred.reject();
- });
-
- return deferred.promise;
- }
-
- function getEntityView(entityViewId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/entityView/' + entityViewId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function saveEntityView(entityView) {
- var deferred = $q.defer();
- var url = '/api/entityView';
-
- $http.post(url, entityView).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteEntityView(entityViewId) {
- var deferred = $q.defer();
- var url = '/api/entityView/' + entityViewId;
- $http.delete(url).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function assignEntityViewToCustomer(customerId, entityViewId) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/entityView/' + entityViewId;
- $http.post(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function unassignEntityViewFromCustomer(entityViewId) {
- var deferred = $q.defer();
- var url = '/api/customer/entityView/' + entityViewId;
- $http.delete(url).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getEntityViewAttributes(entityViewId, attributeScope, query, successCallback, config) {
- return attributeService.getEntityAttributes(types.entityType.entityView, entityViewId, attributeScope, query, successCallback, config);
- }
-
- function subscribeForEntityViewAttributes(entityViewId, attributeScope) {
- return attributeService.subscribeForEntityAttributes(types.entityType.entityView, entityViewId, attributeScope);
- }
-
- function unsubscribeForEntityViewAttributes(subscriptionId) {
- attributeService.unsubscribeForEntityAttributes(subscriptionId);
- }
-
- function findByQuery(query, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/entityViews';
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.post(url, query, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getEntityViewTypes(config) {
- var deferred = $q.defer();
- var url = '/api/entityView/types';
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function makeEntityViewPublic(entityViewId) {
- var deferred = $q.defer();
- var url = '/api/customer/public/entityView/' + entityViewId;
- $http.post(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
-
-}
diff --git a/ui/src/app/api/entity.service.js b/ui/src/app/api/entity.service.js
deleted file mode 100644
index f692c99051..0000000000
--- a/ui/src/app/api/entity.service.js
+++ /dev/null
@@ -1,1581 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import thingsboardTypes from '../common/types.constant';
-
-export default angular.module('thingsboard.api.entity', [thingsboardTypes])
- .factory('entityService', EntityService)
- .name;
-
-/*@ngInject*/
-function EntityService($http, $q, $filter, $translate, $log, userService, deviceService, assetService, tenantService,
- customerService, ruleChainService, dashboardService, entityRelationService, attributeService,
- entityViewService, types, utils) {
- var service = {
- getEntity: getEntity,
- getEntities: getEntities,
- getEntitiesByNameFilter: getEntitiesByNameFilter,
- resolveAlias: resolveAlias,
- resolveAliasFilter: resolveAliasFilter,
- checkEntityAlias: checkEntityAlias,
- filterAliasByEntityTypes: filterAliasByEntityTypes,
- getAliasFilterTypesByEntityTypes: getAliasFilterTypesByEntityTypes,
- prepareAllowedEntityTypesList: prepareAllowedEntityTypesList,
- getEntityKeys: getEntityKeys,
- createDatasourcesFromSubscriptionsInfo: createDatasourcesFromSubscriptionsInfo,
- createAlarmSourceFromSubscriptionInfo: createAlarmSourceFromSubscriptionInfo,
- getRelatedEntities: getRelatedEntities,
- saveRelatedEntity: saveRelatedEntity,
- saveEntityParameters: saveEntityParameters,
- getRelatedEntity: getRelatedEntity,
- deleteRelatedEntity: deleteRelatedEntity,
- moveEntity: moveEntity,
- copyEntity: copyEntity
- };
-
- return service;
-
- function getEntityPromise(entityType, entityId, config) {
- var promise;
- switch (entityType) {
- case types.entityType.device:
- promise = deviceService.getDevice(entityId, true, config);
- break;
- case types.entityType.asset:
- promise = assetService.getAsset(entityId, true, config);
- break;
- case types.entityType.entityView:
- promise = entityViewService.getEntityView(entityId, true, config);
- break;
- case types.entityType.tenant:
- promise = tenantService.getTenant(entityId, config);
- break;
- case types.entityType.customer:
- promise = customerService.getCustomer(entityId, config);
- break;
- case types.entityType.dashboard:
- promise = dashboardService.getDashboardInfo(entityId, config);
- break;
- case types.entityType.user:
- promise = userService.getUser(entityId, true, config);
- break;
- case types.entityType.rulechain:
- promise = ruleChainService.getRuleChain(entityId, config);
- break;
- case types.entityType.alarm:
- $log.error('Get Alarm Entity is not implemented!');
- break;
- }
- return promise;
- }
-
- function getEntity(entityType, entityId, config) {
- var deferred = $q.defer();
- var promise = getEntityPromise(entityType, entityId, config);
- if (promise) {
- promise.then(
- function success(result) {
- deferred.resolve(result);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.reject();
- }
- return deferred.promise;
- }
-
- function getEntitiesByIdsPromise(fetchEntityFunction, entityIds) {
- var tasks = [];
- var deferred = $q.defer();
- for (var i=0;i entityViewService.getEntityView(id, config), entityIds);
- break;
- case types.entityType.tenant:
- promise = getEntitiesByIdsPromise(
- (id) => tenantService.getTenant(id, config), entityIds);
- break;
- case types.entityType.customer:
- promise = getEntitiesByIdsPromise(
- (id) => customerService.getCustomer(id, config), entityIds);
- break;
- case types.entityType.dashboard:
- promise = getEntitiesByIdsPromise(
- (id) => dashboardService.getDashboardInfo(id, config), entityIds);
- break;
- case types.entityType.user:
- promise = getEntitiesByIdsPromise(
- (id) => userService.getUser(id, true, config), entityIds);
- break;
- case types.entityType.alarm:
- $log.error('Get Alarm Entity is not implemented!');
- break;
- }
- return promise;
- }
-
- function getEntities(entityType, entityIds, config) {
- var deferred = $q.defer();
- var promise = getEntitiesPromise(entityType, entityIds, config);
- if (promise) {
- promise.then(
- function success(result) {
- deferred.resolve(result);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.reject();
- }
- return deferred.promise;
- }
-
- function getSingleTenantByPageLinkPromise(pageLink, config) {
- var user = userService.getCurrentUser();
- var tenantId = user.tenantId;
- var deferred = $q.defer();
- tenantService.getTenant(tenantId, config).then(
- function success(tenant) {
- var tenantName = tenant.name;
- var result = {
- data: [],
- nextPageLink: pageLink,
- hasNext: false
- };
- if (tenantName.toLowerCase().startsWith(pageLink.textSearch)) {
- result.data.push(tenant);
- }
- deferred.resolve(result);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function getSingleCustomerByPageLinkPromise(pageLink, config) {
- var user = userService.getCurrentUser();
- var customerId = user.customerId;
- var deferred = $q.defer();
- customerService.getCustomer(customerId, config).then(
- function success(customer) {
- var customerName = customer.name;
- var result = {
- data: [],
- nextPageLink: pageLink,
- hasNext: false
- };
- if (customerName.toLowerCase().startsWith(pageLink.textSearch)) {
- result.data.push(customer);
- }
- deferred.resolve(result);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function getEntitiesByPageLinkPromise(entityType, pageLink, config, subType) {
- var promise;
- var user = userService.getCurrentUser();
- var customerId = user.customerId;
- switch (entityType) {
- case types.entityType.device:
- if (user.authority === 'CUSTOMER_USER') {
- promise = deviceService.getCustomerDevices(customerId, pageLink, false, config, subType);
- } else {
- promise = deviceService.getTenantDevices(pageLink, false, config, subType);
- }
- break;
- case types.entityType.asset:
- if (user.authority === 'CUSTOMER_USER') {
- promise = assetService.getCustomerAssets(customerId, pageLink, false, config, subType);
- } else {
- promise = assetService.getTenantAssets(pageLink, false, config, subType);
- }
- break;
- case types.entityType.entityView:
- if (user.authority === 'CUSTOMER_USER') {
- promise = entityViewService.getCustomerEntityViews(customerId, pageLink, false, config, subType);
- } else {
- promise = entityViewService.getTenantEntityViews(pageLink, false, config, subType);
- }
- break;
- case types.entityType.tenant:
- if (user.authority === 'TENANT_ADMIN') {
- promise = getSingleTenantByPageLinkPromise(pageLink, config);
- } else {
- promise = tenantService.getTenants(pageLink, config);
- }
- break;
- case types.entityType.customer:
- if (user.authority === 'CUSTOMER_USER') {
- promise = getSingleCustomerByPageLinkPromise(pageLink, config);
- } else {
- promise = customerService.getCustomers(pageLink, config);
- }
- break;
- case types.entityType.rulechain:
- promise = ruleChainService.getRuleChains(pageLink, config);
- break;
- case types.entityType.dashboard:
- if (user.authority === 'CUSTOMER_USER') {
- promise = dashboardService.getCustomerDashboards(customerId, pageLink, config);
- } else {
- promise = dashboardService.getTenantDashboards(pageLink, config);
- }
- break;
- case types.entityType.user:
- $log.error('Get User Entities is not implemented!');
- break;
- case types.entityType.alarm:
- $log.error('Get Alarm Entities is not implemented!');
- break;
- }
- return promise;
- }
-
- function getEntitiesByPageLink(entityType, pageLink, config, subType, data, deferred) {
- var promise = getEntitiesByPageLinkPromise(entityType, pageLink, config, subType);
- if (promise) {
- promise.then(
- function success(result) {
- data = data.concat(result.data);
- if (result.hasNext) {
- pageLink = result.nextPageLink;
- getEntitiesByPageLink(entityType, pageLink, config, subType, data, deferred);
- } else {
- if (data && data.length > 0) {
- deferred.resolve(data);
- } else {
- deferred.resolve(null);
- }
- }
- },
- function fail() {
- deferred.resolve(null);
- }
- );
- } else {
- deferred.resolve(null);
- }
- }
-
- function getEntitiesByNameFilter(entityType, entityNameFilter, limit, config, subType) {
- var deferred = $q.defer();
- var pageLink = {limit: limit, textSearch: entityNameFilter};
- if (limit == -1) { // all
- var data = [];
- pageLink.limit = 100;
- getEntitiesByPageLink(entityType, pageLink, config, subType, data, deferred);
- } else {
- var promise = getEntitiesByPageLinkPromise(entityType, pageLink, config, subType);
- if (promise) {
- promise.then(
- function success(result) {
- if (result.data && result.data.length > 0) {
- deferred.resolve(result.data);
- } else {
- deferred.resolve(null);
- }
- },
- function fail() {
- deferred.resolve(null);
- }
- );
- } else {
- deferred.resolve(null);
- }
- }
- return deferred.promise;
- }
-
- function entityToEntityInfo(entity) {
- return {
- origEntity: entity,
- name: entity.name,
- label: entity.label?entity.label:"",
- entityType: entity.id.entityType,
- id: entity.id.id,
- entityDescription: entity.additionalInfo?entity.additionalInfo.description:""
- };
- }
-
- function entityRelationInfoToEntityInfo(entityRelationInfo, direction) {
- var deferred = $q.defer();
- var entityId = direction == types.entitySearchDirection.from ? entityRelationInfo.to : entityRelationInfo.from;
- getEntity(entityId.entityType, entityId.id, {ignoreLoading: true}).then(
- function success(entity) {
- deferred.resolve(entityToEntityInfo(entity));
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function entitiesToEntitiesInfo(entities) {
- var entitiesInfo = [];
- if (entities) {
- for (var d = 0; d < entities.length; d++) {
- entitiesInfo.push(entityToEntityInfo(entities[d]));
- }
- }
- return entitiesInfo;
- }
-
- function entityRelationInfosToEntitiesInfo(entityRelations, direction) {
- var deferred = $q.defer();
- var entitiesInfoTaks = [];
- if (entityRelations) {
- for (var d = 0; d < entityRelations.length; d++) {
- entitiesInfoTaks.push(entityRelationInfoToEntityInfo(entityRelations[d], direction));
- }
- }
- $q.all(entitiesInfoTaks).then(
- function success(entitiesInfo) {
- deferred.resolve(entitiesInfo);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
-
- function resolveAlias(entityAlias, stateParams) {
- var deferred = $q.defer();
- var filter = entityAlias.filter;
- resolveAliasFilter(filter, stateParams, -1, false).then(
- function (result) {
- var aliasInfo = {
- alias: entityAlias.alias,
- stateEntity: result.stateEntity,
- entityParamName: result.entityParamName,
- resolveMultiple: filter.resolveMultiple
- };
- aliasInfo.resolvedEntities = result.entities;
- aliasInfo.currentEntity = null;
- if (aliasInfo.resolvedEntities.length) {
- aliasInfo.currentEntity = aliasInfo.resolvedEntities[0];
- }
- deferred.resolve(aliasInfo);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function resolveAliasEntityId(entityType, id) {
- var entityId = {
- entityType: entityType,
- id: id
- };
- if (entityType == types.aliasEntityType.current_customer) {
- var user = userService.getCurrentUser();
- entityId.entityType = types.entityType.customer;
- if (user.authority === 'CUSTOMER_USER') {
- entityId.id = user.customerId;
- }
- } else if (entityType === types.aliasEntityType.current_tenant){
- let user = userService.getCurrentUser();
- entityId.entityType = types.entityType.tenant;
- entityId.id = user.tenantId;
- }
- return entityId;
- }
-
- function getStateEntityInfo(filter, stateParams) {
- var entityId = null;
- if (stateParams) {
- if (filter.stateEntityParamName && filter.stateEntityParamName.length) {
- if (stateParams[filter.stateEntityParamName]) {
- entityId = stateParams[filter.stateEntityParamName].entityId;
- }
- } else {
- entityId = stateParams.entityId;
- }
- }
- if (!entityId) {
- entityId = filter.defaultStateEntity;
- }
- if (entityId) {
- entityId = resolveAliasEntityId(entityId.entityType, entityId.id);
- }
- return {
- entityId: entityId
- };
- }
-
- function resolveAliasFilter(filter, stateParams, maxItems, failOnEmpty) {
- var deferred = $q.defer();
- var result = {
- entities: [],
- stateEntity: false
- };
- if (filter.stateEntityParamName && filter.stateEntityParamName.length) {
- result.entityParamName = filter.stateEntityParamName;
- }
- var stateEntityInfo = getStateEntityInfo(filter, stateParams);
- var stateEntityId = stateEntityInfo.entityId;
- switch (filter.type) {
- case types.aliasFilterType.singleEntity.value:
- var aliasEntityId = resolveAliasEntityId(filter.singleEntity.entityType, filter.singleEntity.id);
- getEntity(aliasEntityId.entityType, aliasEntityId.id, {ignoreLoading: true}).then(
- function success(entity) {
- result.entities = entitiesToEntitiesInfo([entity]);
- deferred.resolve(result);
- },
- function fail() {
- deferred.reject();
- }
- );
- break;
- case types.aliasFilterType.entityList.value:
- getEntities(filter.entityType, filter.entityList, {ignoreLoading: true}).then(
- function success(entities) {
- if (entities && entities.length || !failOnEmpty) {
- result.entities = entitiesToEntitiesInfo(entities);
- deferred.resolve(result);
- } else {
- deferred.reject();
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- break;
- case types.aliasFilterType.entityName.value:
- getEntitiesByNameFilter(filter.entityType, filter.entityNameFilter, maxItems, {ignoreLoading: true}).then(
- function success(entities) {
- if (entities && entities.length || !failOnEmpty) {
- result.entities = entitiesToEntitiesInfo(entities);
- deferred.resolve(result);
- } else {
- deferred.reject();
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- break;
- case types.aliasFilterType.stateEntity.value:
- result.stateEntity = true;
- if (stateEntityId) {
- getEntity(stateEntityId.entityType, stateEntityId.id, {ignoreLoading: true}).then(
- function success(entity) {
- result.entities = entitiesToEntitiesInfo([entity]);
- deferred.resolve(result);
- },
- function fail() {
- deferred.resolve(result);
- }
- );
- } else {
- deferred.resolve(result);
- }
- break;
- case types.aliasFilterType.assetType.value:
- getEntitiesByNameFilter(types.entityType.asset, filter.assetNameFilter, maxItems, {ignoreLoading: true}, filter.assetType).then(
- function success(entities) {
- if (entities && entities.length || !failOnEmpty) {
- result.entities = entitiesToEntitiesInfo(entities);
- deferred.resolve(result);
- } else {
- deferred.reject();
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- break;
- case types.aliasFilterType.deviceType.value:
- getEntitiesByNameFilter(types.entityType.device, filter.deviceNameFilter, maxItems, {ignoreLoading: true}, filter.deviceType).then(
- function success(entities) {
- if (entities && entities.length || !failOnEmpty) {
- result.entities = entitiesToEntitiesInfo(entities);
- deferred.resolve(result);
- } else {
- deferred.reject();
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- break;
- case types.aliasFilterType.entityViewType.value:
- getEntitiesByNameFilter(types.entityType.entityView, filter.entityViewNameFilter, maxItems, {ignoreLoading: true}, filter.entityViewType).then(
- function success(entities) {
- if (entities && entities.length || !failOnEmpty) {
- result.entities = entitiesToEntitiesInfo(entities);
- deferred.resolve(result);
- } else {
- deferred.reject();
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- break;
- case types.aliasFilterType.relationsQuery.value:
- result.stateEntity = filter.rootStateEntity;
- var rootEntityType;
- var rootEntityId;
- if (result.stateEntity && stateEntityId) {
- rootEntityType = stateEntityId.entityType;
- rootEntityId = stateEntityId.id;
- } else if (!result.stateEntity) {
- rootEntityType = filter.rootEntity.entityType;
- rootEntityId = filter.rootEntity.id;
- }
- if (rootEntityType && rootEntityId) {
- var relationQueryRootEntityId = resolveAliasEntityId(rootEntityType, rootEntityId);
- var searchQuery = {
- parameters: {
- rootId: relationQueryRootEntityId.id,
- rootType: relationQueryRootEntityId.entityType,
- direction: filter.direction,
- fetchLastLevelOnly: filter.fetchLastLevelOnly
- },
- filters: filter.filters
- };
- searchQuery.parameters.maxLevel = filter.maxLevel && filter.maxLevel > 0 ? filter.maxLevel : -1;
- entityRelationService.findInfoByQuery(searchQuery, {ignoreLoading: true}).then(
- function success(allRelations) {
- if (allRelations && allRelations.length || !failOnEmpty) {
- if (angular.isDefined(maxItems) && maxItems > 0 && allRelations) {
- var limit = Math.min(allRelations.length, maxItems);
- allRelations.length = limit;
- }
- entityRelationInfosToEntitiesInfo(allRelations, filter.direction).then(
- function success(entities) {
- result.entities = entities;
- deferred.resolve(result);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.reject();
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.resolve(result);
- }
- break;
- case types.aliasFilterType.assetSearchQuery.value:
- case types.aliasFilterType.deviceSearchQuery.value:
- case types.aliasFilterType.entityViewSearchQuery.value:
- result.stateEntity = filter.rootStateEntity;
- if (result.stateEntity && stateEntityId) {
- rootEntityType = stateEntityId.entityType;
- rootEntityId = stateEntityId.id;
- } else if (!result.stateEntity) {
- rootEntityType = filter.rootEntity.entityType;
- rootEntityId = filter.rootEntity.id;
- }
- if (rootEntityType && rootEntityId) {
- var searchQueryRootEntityId = resolveAliasEntityId(rootEntityType, rootEntityId);
- searchQuery = {
- parameters: {
- rootId: searchQueryRootEntityId.id,
- rootType: searchQueryRootEntityId.entityType,
- direction: filter.direction,
- fetchLastLevelOnly: filter.fetchLastLevelOnly
- },
- relationType: filter.relationType
- };
- searchQuery.parameters.maxLevel = filter.maxLevel && filter.maxLevel > 0 ? filter.maxLevel : -1;
- var findByQueryPromise;
- if (filter.type == types.aliasFilterType.assetSearchQuery.value) {
- searchQuery.assetTypes = filter.assetTypes;
- findByQueryPromise = assetService.findByQuery(searchQuery, false, {ignoreLoading: true});
- } else if (filter.type == types.aliasFilterType.deviceSearchQuery.value) {
- searchQuery.deviceTypes = filter.deviceTypes;
- findByQueryPromise = deviceService.findByQuery(searchQuery, false, {ignoreLoading: true});
- } else if (filter.type == types.aliasFilterType.entityViewSearchQuery.value) {
- searchQuery.entityViewTypes = filter.entityViewTypes;
- findByQueryPromise = entityViewService.findByQuery(searchQuery, false, {ignoreLoading: true});
- }
- findByQueryPromise.then(
- function success(entities) {
- if (entities && entities.length || !failOnEmpty) {
- if (angular.isDefined(maxItems) && maxItems > 0 && entities) {
- var limit = Math.min(entities.length, maxItems);
- entities.length = limit;
- }
- result.entities = entitiesToEntitiesInfo(entities);
- deferred.resolve(result);
- } else {
- deferred.reject();
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- deferred.resolve(result);
- }
- break;
- }
- return deferred.promise;
- }
-
- function filterAliasByEntityTypes(entityAlias, entityTypes) {
- var filter = entityAlias.filter;
- if (filterAliasFilterTypeByEntityTypes(filter.type, entityTypes)) {
- switch (filter.type) {
- case types.aliasFilterType.singleEntity.value:
- return entityTypes.indexOf(filter.singleEntity.entityType) > -1 ? true : false;
- case types.aliasFilterType.entityList.value:
- return entityTypes.indexOf(filter.entityType) > -1 ? true : false;
- case types.aliasFilterType.entityName.value:
- return entityTypes.indexOf(filter.entityType) > -1 ? true : false;
- case types.aliasFilterType.stateEntity.value:
- return true;
- case types.aliasFilterType.assetType.value:
- return entityTypes.indexOf(types.entityType.asset) > -1 ? true : false;
- case types.aliasFilterType.deviceType.value:
- return entityTypes.indexOf(types.entityType.device) > -1 ? true : false;
- case types.aliasFilterType.entityViewType.value:
- return entityTypes.indexOf(types.entityType.entityView) > -1 ? true : false;
- case types.aliasFilterType.relationsQuery.value:
- if (filter.filters && filter.filters.length) {
- var match = false;
- for (var f=0;f -1) {
- match = true;
- break;
- }
- }
- } else {
- match = true;
- break;
- }
- }
- return match;
- } else {
- return true;
- }
- case types.aliasFilterType.assetSearchQuery.value:
- return entityTypes.indexOf(types.entityType.asset) > -1 ? true : false;
- case types.aliasFilterType.deviceSearchQuery.value:
- return entityTypes.indexOf(types.entityType.device) > -1 ? true : false;
- case types.aliasFilterType.entityViewSearchQuery.value:
- return entityTypes.indexOf(types.entityType.entityView) > -1 ? true : false;
- }
- }
- return false;
- }
-
- function filterAliasFilterTypeByEntityType(aliasFilterType, entityType) {
- switch (aliasFilterType) {
- case types.aliasFilterType.singleEntity.value:
- return true;
- case types.aliasFilterType.entityList.value:
- return true;
- case types.aliasFilterType.entityName.value:
- return true;
- case types.aliasFilterType.stateEntity.value:
- return true;
- case types.aliasFilterType.assetType.value:
- return entityType === types.entityType.asset;
- case types.aliasFilterType.deviceType.value:
- return entityType === types.entityType.device;
- case types.aliasFilterType.entityViewType.value:
- return entityType === types.entityType.entityView;
- case types.aliasFilterType.relationsQuery.value:
- return true;
- case types.aliasFilterType.assetSearchQuery.value:
- return entityType === types.entityType.asset;
- case types.aliasFilterType.deviceSearchQuery.value:
- return entityType === types.entityType.device;
- case types.aliasFilterType.entityViewSearchQuery.value:
- return entityType === types.entityType.entityView;
- }
- return false;
- }
-
- function filterAliasFilterTypeByEntityTypes(aliasFilterType, entityTypes) {
- if (!entityTypes || !entityTypes.length) {
- return true;
- }
- var valid = false;
- entityTypes.forEach(function(entityType) {
- valid = valid || filterAliasFilterTypeByEntityType(aliasFilterType, entityType);
- });
- return valid;
- }
-
- function getAliasFilterTypesByEntityTypes(entityTypes) {
- var allAliasFilterTypes = types.aliasFilterType;
- if (!entityTypes || !entityTypes.length) {
- return allAliasFilterTypes;
- }
- var result = {};
- for (var type in allAliasFilterTypes) {
- var aliasFilterType = allAliasFilterTypes[type];
- if (filterAliasFilterTypeByEntityTypes(aliasFilterType.value, entityTypes)) {
- result[type] = aliasFilterType;
- }
- }
- return result;
- }
-
- function prepareAllowedEntityTypesList(allowedEntityTypes, useAliasEntityTypes) {
- var authority = userService.getAuthority();
- var entityTypes = {};
- switch(authority) {
- case 'SYS_ADMIN':
- entityTypes.tenant = types.entityType.tenant;
- break;
- case 'TENANT_ADMIN':
- entityTypes.device = types.entityType.device;
- entityTypes.asset = types.entityType.asset;
- entityTypes.entityView = types.entityType.entityView;
- entityTypes.tenant = types.entityType.tenant;
- entityTypes.customer = types.entityType.customer;
- entityTypes.dashboard = types.entityType.dashboard;
- if (useAliasEntityTypes) {
- entityTypes.current_customer = types.aliasEntityType.current_customer;
- entityTypes.current_tenant = types.aliasEntityType.current_tenant;
- }
- break;
- case 'CUSTOMER_USER':
- entityTypes.device = types.entityType.device;
- entityTypes.asset = types.entityType.asset;
- entityTypes.entityView = types.entityType.entityView;
- entityTypes.customer = types.entityType.customer;
- entityTypes.dashboard = types.entityType.dashboard;
- if (useAliasEntityTypes) {
- entityTypes.current_customer = types.aliasEntityType.current_customer;
- }
- break;
- }
-
- if (allowedEntityTypes) {
- for (var entityType in entityTypes) {
- if (allowedEntityTypes.indexOf(entityTypes[entityType]) === -1) {
- delete entityTypes[entityType];
- }
- }
- }
- return entityTypes;
- }
-
-
- function checkEntityAlias(entityAlias) {
- var deferred = $q.defer();
- resolveAliasFilter(entityAlias.filter, null, 1, true).then(
- function success(result) {
- if (result.stateEntity) {
- deferred.resolve(true);
- } else {
- var entities = result.entities;
- if (entities && entities.length) {
- deferred.resolve(true);
- } else {
- deferred.resolve(false);
- }
- }
- },
- function fail() {
- deferred.resolve(false);
- }
- );
- return deferred.promise;
- }
-
- function getEntityFieldKeys (entityType, searchText) {
- let entityFieldKeys = [];
- let query = searchText ? searchText.toLowerCase() : "";
- switch(entityType) {
- case types.entityType.user:
- entityFieldKeys.push(types.entityField.name.keyName);
- entityFieldKeys.push(types.entityField.email.keyName);
- entityFieldKeys.push(types.entityField.firstName.keyName);
- entityFieldKeys.push(types.entityField.lastName.keyName);
- break;
- case types.entityType.tenant:
- case types.entityType.customer:
- entityFieldKeys.push(types.entityField.title.keyName);
- entityFieldKeys.push(types.entityField.email.keyName);
- entityFieldKeys.push(types.entityField.country.keyName);
- entityFieldKeys.push(types.entityField.state.keyName);
- entityFieldKeys.push(types.entityField.city.keyName);
- entityFieldKeys.push(types.entityField.address.keyName);
- entityFieldKeys.push(types.entityField.address2.keyName);
- entityFieldKeys.push(types.entityField.zip.keyName);
- entityFieldKeys.push(types.entityField.phone.keyName);
- break;
- case types.entityType.entityView:
- entityFieldKeys.push(types.entityField.name.keyName);
- entityFieldKeys.push(types.entityField.type.keyName);
- break;
- case types.entityType.device:
- case types.entityType.asset:
- entityFieldKeys.push(types.entityField.name.keyName);
- entityFieldKeys.push(types.entityField.type.keyName);
- entityFieldKeys.push(types.entityField.label.keyName);
- break;
- case types.entityType.dashboard:
- entityFieldKeys.push(types.entityField.title.keyName);
- break;
- }
-
- return query ? entityFieldKeys.filter((entityField) => entityField.toLowerCase().indexOf(query) === 0) : entityFieldKeys;
- }
-
- function getEntityKeys(entityType, entityId, query, type, config) {
- if (type === types.dataKeyType.entityField) {
- return $q.when(getEntityFieldKeys(entityType, query));
- }
- var deferred = $q.defer();
- var url = '/api/plugins/telemetry/' + entityType + '/' + entityId + '/keys/';
- if (type === types.dataKeyType.timeseries) {
- url += 'timeseries';
- } else if (type === types.dataKeyType.attribute) {
- url += 'attributes';
- }
- $http.get(url, config).then(function success(response) {
- var result = [];
- if (response.data) {
- if (query) {
- var dataKeys = response.data;
- var lowercaseQuery = angular.lowercase(query);
- for (var i=0; i 0) {
- for (var i = 0; i < entities.length; i++) {
- var entity = entities[i];
- createDatasourceFromSubscription(subscriptionInfo, datasources, entity);
- }
- }
- index++;
- processSubscriptionsInfo(index, subscriptionsInfo, datasources, deferred);
- },
- function fail() {
- index++;
- processSubscriptionsInfo(index, subscriptionsInfo, datasources, deferred);
- }
- )
- } else {
- index++;
- processSubscriptionsInfo(index, subscriptionsInfo, datasources, deferred);
- }
- } else if (subscriptionInfo.type === types.datasourceType.function) {
- createDatasourceFromSubscription(subscriptionInfo, datasources);
- index++;
- processSubscriptionsInfo(index, subscriptionsInfo, datasources, deferred);
- }
- } else {
- deferred.resolve(datasources);
- }
- }
-
- function validateSubscriptionInfo(subscriptionInfo) {
- if (subscriptionInfo.type === 'device') {
- subscriptionInfo.type = types.datasourceType.entity;
- subscriptionInfo.entityType = types.entityType.device;
- if (subscriptionInfo.deviceId) {
- subscriptionInfo.entityId = subscriptionInfo.deviceId;
- } else if (subscriptionInfo.deviceName) {
- subscriptionInfo.entityName = subscriptionInfo.deviceName;
- } else if (subscriptionInfo.deviceNamePrefix) {
- subscriptionInfo.entityNamePrefix = subscriptionInfo.deviceNamePrefix;
- } else if (subscriptionInfo.deviceIds) {
- subscriptionInfo.entityIds = subscriptionInfo.deviceIds;
- }
- }
- return subscriptionInfo;
- }
-
- function createDatasourceFromSubscription(subscriptionInfo, datasources, entity) {
- var datasource;
- if (subscriptionInfo.type === types.datasourceType.entity) {
- datasource = {
- type: subscriptionInfo.type,
- entityName: entity.name ? entity.name : entity.title,
- name: entity.name ? entity.name : entity.title,
- entityType: subscriptionInfo.entityType,
- entityId: entity.id.id,
- dataKeys: []
- }
- } else if (subscriptionInfo.type === types.datasourceType.function) {
- datasource = {
- type: subscriptionInfo.type,
- name: subscriptionInfo.name || types.datasourceType.function,
- dataKeys: []
- }
- }
- datasources.push(datasource);
- if (subscriptionInfo.timeseries) {
- createDatasourceKeys(subscriptionInfo.timeseries, types.dataKeyType.timeseries, datasource, datasources);
- }
- if (subscriptionInfo.attributes) {
- createDatasourceKeys(subscriptionInfo.attributes, types.dataKeyType.attribute, datasource, datasources);
- }
- if (subscriptionInfo.functions) {
- createDatasourceKeys(subscriptionInfo.functions, types.dataKeyType.function, datasource, datasources);
- }
- if (subscriptionInfo.alarmFields) {
- createDatasourceKeys(subscriptionInfo.alarmFields, types.dataKeyType.alarm, datasource, datasources);
- }
- }
-
- function createDatasourceKeys(keyInfos, type, datasource, datasources) {
- for (var i=0;i -1) {
- var deleteRelatedEntityPromise = deleteRelatedEntity(relationEntityId, deleteRelatedEntityTypes);
- deleteRelatedEntitiesTasks.push(deleteRelatedEntityPromise);
- }
- }
- deleteRelatedEntitiesTasks.push(deleteEntityPromise(entityId));
- $q.all(deleteRelatedEntitiesTasks).then(
- function success() {
- deferred.resolve();
- },
- function fail() {
- deferred.reject();
- }
- );
- },
- function fail() {
- deferred.reject();
- }
- )
- } else {
- deleteEntityPromise(entityId).then(
- function success() {
- deferred.resolve();
- },
- function fail() {
- deferred.reject();
- }
- );
- }
- return deferred.promise;
- }
-
- function moveEntity(entityId, prevParentId, targetParentId) {
- var deferred = $q.defer();
- entityRelationService.deleteRelation(prevParentId.id, prevParentId.entityType,
- types.entityRelationType.contains, entityId.id, entityId.entityType).then(
- function success() {
- var relation = {
- from: targetParentId,
- to: entityId,
- type: types.entityRelationType.contains
- };
- entityRelationService.saveRelation(relation).then(
- function success() {
- deferred.resolve();
- },
- function fail() {
- deferred.reject();
- }
- );
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function copyEntity(entity, targetParentId, keys) {
- var deferred = $q.defer();
- if (!entity.id && !entity.id.id) {
- deferred.reject();
- } else {
- getRelatedEntity(entity.id, keys).then(
- function success(relatedEntity) {
- delete relatedEntity.id.id;
- relatedEntity.name = entity.name;
- saveRelatedEntity(relatedEntity, targetParentId, keys).then(
- function success(savedEntity) {
- deferred.resolve(savedEntity);
- },
- function fail() {
- deferred.reject();
- }
- );
- },
- function fail() {
- deferred.reject();
- }
- );
- }
- return deferred.promise;
- }
-
- function saveEntityPromise(entity) {
- var entityType = entity.id.entityType;
- if (!entity.id.id) {
- delete entity.id;
- }
- if (entityType == types.entityType.asset) {
- return assetService.saveAsset(entity);
- } else if (entityType == types.entityType.device) {
- return deviceService.saveDevice(entity);
- } else if (entityType == types.entityType.entityView) {
- return entityViewService.saveEntityView(entity);
- }
- }
-
- function addRelatedEntity(relatedEntity, parentEntityId, keys, deferred, relation, direction) {
- var entity = {};
- entity.id = relatedEntity.id;
- entity.name = relatedEntity.name;
- entity.type = relatedEntity.type;
- saveEntityPromise(entity).then(
- function success(entity) {
- relatedEntity.id = entity.id;
- if (!relation) {
- relation = {
- type: types.entityRelationType.contains
- };
- }
-
- if (direction == types.entitySearchDirection.from) {
- relation.from = parentEntityId;
- relation.to = relatedEntity.id;
- } else {
- relation.from = relatedEntity.id;
- relation.to = parentEntityId;
- }
-
- entityRelationService.saveRelation(relation).then(
- function success() {
- updateEntity(entity, relatedEntity, keys, deferred, relation);
- },
- function fail() {
- deferred.reject();
- }
- );
- },
- function fail() {
- deferred.reject();
- }
- );
- }
-
- function updateRelatedEntity(relatedEntity, keys, deferred, relation, direction) {
- getEntityPromise(relatedEntity.id.entityType, relatedEntity.id.id, {ignoreLoading: true}).then(
- function success(entity) {
- if (relation) {
- if (direction == types.entitySearchDirection.from) {
- relation.to = relatedEntity.id;
- } else {
- relation.from = relatedEntity.id;
- }
- entityRelationService.saveRelation(relation).then(
- function success() {
- updateEntity(entity, relatedEntity, keys, deferred);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- updateEntity(entity, relatedEntity, keys, deferred);
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- }
-
- function updateEntity(entity, relatedEntity, keys, deferred) {
- if (!angular.equals(entity.name, relatedEntity.name) || !angular.equals(entity.type, relatedEntity.type)) {
- entity.name = relatedEntity.name;
- entity.type = relatedEntity.type;
- saveEntityPromise(entity).then(
- function success (entity) {
- updateEntityAttributes(entity, relatedEntity, keys, deferred);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- updateEntityAttributes(entity, relatedEntity, keys, deferred);
- }
- }
-
- function updateEntityAttributes(entity, relatedEntity, keys, deferred) {
- var attributes = [];
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- attributes.push({key: key, value: relatedEntity[key]});
- }
- attributeService.saveEntityAttributes(entity.id.entityType, entity.id.id, types.attributesScope.server.value, attributes)
- .then(
- function success() {
- deferred.resolve(relatedEntity);
- },
- function fail() {
- deferred.reject();
- }
- );
- }
-
- function constructRelatedEntitiesSearchQuery(rootEntityId, entityType, entitySubTypes, maxLevel, relationType, direction, fetchLastLevelOnly) {
-
- var searchQuery = {
- parameters: {
- rootId: rootEntityId.id,
- rootType: rootEntityId.entityType,
- direction: direction,
- fetchLastLevelOnly: !!fetchLastLevelOnly
- },
- relationType: relationType
- };
- if (!direction) {
- searchQuery.parameters.direction = types.entitySearchDirection.from;
- }
- if (!relationType) {
- searchQuery.relationType = types.entityRelationType.contains;
- }
-
- if (maxLevel) {
- searchQuery.parameters.maxLevel = maxLevel;
- } else {
- searchQuery.parameters.maxLevel = 1;
- }
-
- if (entityType == types.entityType.asset) {
- searchQuery.assetTypes = entitySubTypes;
- } else if (entityType == types.entityType.device) {
- searchQuery.deviceTypes = entitySubTypes;
- } else if (entityType == types.entityType.entityView) {
- searchQuery.entityViewTypes = entitySubTypes;
- } else {
- return null; //Not supported
- }
-
- return searchQuery;
- }
-
- function constructEntity(entity, keys, typeTranslatePrefix) {
- var deferred = $q.defer();
- if (typeTranslatePrefix) {
- entity.typeName = $translate.instant(typeTranslatePrefix+'.'+entity.type);
- } else {
- entity.typeName = entity.type;
- }
- attributeService.getEntityAttributesValues(entity.id.entityType, entity.id.id,
- types.attributesScope.server.value, keys.join(','),
- {ignoreLoading: true}).then(
- function success(attributes) {
- if (attributes && attributes.length > 0) {
- for (var i=0;i 0) {
- return foundAttributes[0].value;
- } else {
- return null;
- }
- }
-
-}
diff --git a/ui/src/app/api/event.service.js b/ui/src/app/api/event.service.js
deleted file mode 100644
index 99cdae3e47..0000000000
--- a/ui/src/app/api/event.service.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.event', [])
- .factory('eventService', EventService)
- .name;
-
-/*@ngInject*/
-function EventService($http, $q) {
-
- var service = {
- getEvents: getEvents
- }
-
- return service;
-
- function getEvents (entityType, entityId, eventType, tenantId, pageLink) {
- var deferred = $q.defer();
- var url = '/api/events/'+entityType+'/'+entityId+'/'+eventType+'?tenantId=' + tenantId + '&limit=' + pageLink.limit;
-
- if (angular.isDefined(pageLink.startTime) && pageLink.startTime != null) {
- url += '&startTime=' + pageLink.startTime;
- }
- if (angular.isDefined(pageLink.endTime) && pageLink.endTime != null) {
- url += '&endTime=' + pageLink.endTime;
- }
- if (angular.isDefined(pageLink.idOffset) && pageLink.idOffset != null) {
- url += '&offset=' + pageLink.idOffset;
- }
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/api/login.service.js b/ui/src/app/api/login.service.js
deleted file mode 100644
index 292268642f..0000000000
--- a/ui/src/app/api/login.service.js
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.login', [])
- .factory('loginService', LoginService)
- .name;
-
-/*@ngInject*/
-function LoginService($http, $q, $rootScope) {
-
- var service = {
- activate: activate,
- changePassword: changePassword,
- hasUser: hasUser,
- login: login,
- publicLogin: publicLogin,
- resetPassword: resetPassword,
- sendResetPasswordLink: sendResetPasswordLink,
- loadOAuth2Clients: loadOAuth2Clients
- }
-
- return service;
-
- function hasUser() {
- return true;
- }
-
- function login(user) {
- var deferred = $q.defer();
- var loginRequest = {
- username: user.name,
- password: user.password
- };
- $http.post('/api/auth/login', loginRequest).then(function success(response) {
- deferred.resolve(response);
- }, function fail(response) {
- deferred.reject(response);
- });
- return deferred.promise;
- }
-
- function publicLogin(publicId) {
- var deferred = $q.defer();
- var pubilcLoginRequest = {
- publicId: publicId
- };
- $http.post('/api/auth/login/public', pubilcLoginRequest).then(function success(response) {
- deferred.resolve(response);
- }, function fail(response) {
- deferred.reject(response);
- });
- return deferred.promise;
- }
-
- function sendResetPasswordLink(email) {
- var deferred = $q.defer();
- var url = '/api/noauth/resetPasswordByEmail';
- $http.post(url, {email: email}).then(function success(response) {
- deferred.resolve(response);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function resetPassword(resetToken, password) {
- var deferred = $q.defer();
- var url = '/api/noauth/resetPassword';
- $http.post(url, {resetToken: resetToken, password: password}).then(function success(response) {
- deferred.resolve(response);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function activate(activateToken, password, sendActivationMail) {
- var deferred = $q.defer();
- var url = '/api/noauth/activate';
- if(sendActivationMail === true || sendActivationMail === false) {
- url += '?sendActivationMail=' + sendActivationMail;
- }
- $http.post(url, {activateToken: activateToken, password: password}).then(function success(response) {
- deferred.resolve(response);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function changePassword(currentPassword, newPassword) {
- var deferred = $q.defer();
- var url = '/api/auth/changePassword';
- $http.post(url, {currentPassword: currentPassword, newPassword: newPassword}).then(function success(response) {
- deferred.resolve(response);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function loadOAuth2Clients(){
- var deferred = $q.defer();
- var url = '/api/noauth/oauth2Clients';
- $http.post(url).then(function success(response) {
- $rootScope.oauth2Clients = response.data;
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-}
diff --git a/ui/src/app/api/queue.service.js b/ui/src/app/api/queue.service.js
deleted file mode 100644
index 0fe93e5fa6..0000000000
--- a/ui/src/app/api/queue.service.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default angular.module('thingsboard.api.queue', [])
- .factory('queueService', queueService)
- .name;
-
-/*@ngInject*/
-function queueService($http, $q) {
- var service = {
- getTenantQueuesByServiceType: getTenantQueuesByServiceType
- };
-
- return service;
-
- function getTenantQueuesByServiceType(serviceType, config) {
- let deferred = $q.defer();
- let url = '/api/tenant/queues?serviceType=' + serviceType;
-
- $http.get(url, config).then(function success(data) {
- deferred.resolve(data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-}
\ No newline at end of file
diff --git a/ui/src/app/api/rule-chain.service.js b/ui/src/app/api/rule-chain.service.js
deleted file mode 100644
index 87d2df5cae..0000000000
--- a/ui/src/app/api/rule-chain.service.js
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.ruleChain', [])
- .factory('ruleChainService', RuleChainService).name;
-
-/*@ngInject*/
-function RuleChainService($http, $q, $filter, $ocLazyLoad, $translate, types, componentDescriptorService) {
-
- var ruleNodeComponents = null;
-
- var service = {
- getRuleChains: getRuleChains,
- getRuleChain: getRuleChain,
- saveRuleChain: saveRuleChain,
- setRootRuleChain: setRootRuleChain,
- deleteRuleChain: deleteRuleChain,
- getRuleChainMetaData: getRuleChainMetaData,
- saveRuleChainMetaData: saveRuleChainMetaData,
- getRuleNodeComponents: getRuleNodeComponents,
- getRuleNodeComponentByClazz: getRuleNodeComponentByClazz,
- getRuleNodeSupportedLinks: getRuleNodeSupportedLinks,
- ruleNodeAllowCustomLinks: ruleNodeAllowCustomLinks,
- resolveTargetRuleChains: resolveTargetRuleChains,
- testScript: testScript,
- getLatestRuleNodeDebugInput: getLatestRuleNodeDebugInput
- };
-
- return service;
-
- function getRuleChains (pageLink, config) {
- var deferred = $q.defer();
- var url = '/api/ruleChains?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getRuleChain(ruleChainId, config) {
- var deferred = $q.defer();
- var url = '/api/ruleChain/' + ruleChainId;
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function saveRuleChain(ruleChain) {
- var deferred = $q.defer();
- var url = '/api/ruleChain';
- $http.post(url, ruleChain).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function setRootRuleChain(ruleChainId) {
- var deferred = $q.defer();
- var url = '/api/ruleChain/' + ruleChainId + '/root';
- $http.post(url).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteRuleChain(ruleChainId) {
- var deferred = $q.defer();
- var url = '/api/ruleChain/' + ruleChainId;
- $http.delete(url).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getRuleChainMetaData(ruleChainId, config) {
- var deferred = $q.defer();
- var url = '/api/ruleChain/' + ruleChainId + '/metadata';
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function saveRuleChainMetaData(ruleChainMetaData) {
- var deferred = $q.defer();
- var url = '/api/ruleChain/metadata';
- $http.post(url, ruleChainMetaData).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getRuleNodeSupportedLinks(component) {
- var relationTypes = component.configurationDescriptor.nodeDefinition.relationTypes;
- var linkLabels = {};
- for (var i=0;i {
- resolveRuleNodeComponentsUiResources(components).then(
- (components) => {
- ruleNodeComponents = components;
- ruleNodeComponents.push(
- types.ruleChainNodeComponent
- );
- ruleNodeComponents.sort(
- (comp1, comp2) => {
- var result = comp1.type.localeCompare(comp2.type);
- if (result == 0) {
- result = comp1.name.localeCompare(comp2.name);
- }
- return result;
- }
- );
- deferred.resolve(ruleNodeComponents);
- },
- () => {
- deferred.reject();
- }
- );
- },
- () => {
- deferred.reject();
- }
- );
- }
- return deferred.promise;
- }
-
- function resolveRuleNodeComponentsUiResources(components) {
- var deferred = $q.defer();
- var tasks = [];
- for (var i=0;i {
- deferred.resolve(components);
- },
- () => {
- deferred.resolve(components);
- }
- );
- return deferred.promise;
- }
-
- function resolveRuleNodeComponentUiResources(component) {
- var deferred = $q.defer();
- var uiResources = component.configurationDescriptor.nodeDefinition.uiResources;
- if (uiResources && uiResources.length) {
- var tasks = [];
- for (var i=0;i {
- deferred.resolve(component);
- },
- () => {
- component.configurationDescriptor.nodeDefinition.uiResourceLoadError = $translate.instant('rulenode.ui-resources-load-error');
- deferred.resolve(component);
- }
- )
- } else {
- deferred.resolve(component);
- }
- return deferred.promise;
- }
-
- function getRuleNodeComponentByClazz(clazz) {
- var res = $filter('filter')(ruleNodeComponents, {clazz: clazz}, true);
- if (res && res.length) {
- return res[0];
- }
- var unknownComponent = angular.copy(types.unknownNodeComponent);
- unknownComponent.clazz = clazz;
- unknownComponent.configurationDescriptor.nodeDefinition.details = "Unknown Rule Node class: " + clazz;
- return unknownComponent;
- }
-
- function resolveTargetRuleChains(ruleChainConnections) {
- var deferred = $q.defer();
- if (ruleChainConnections && ruleChainConnections.length) {
- var tasks = [];
- for (var i = 0; i < ruleChainConnections.length; i++) {
- tasks.push(resolveRuleChain(ruleChainConnections[i].targetRuleChainId.id));
- }
- $q.all(tasks).then(
- (ruleChains) => {
- var ruleChainsMap = {};
- for (var i = 0; i < ruleChains.length; i++) {
- ruleChainsMap[ruleChains[i].id.id] = ruleChains[i];
- }
- deferred.resolve(ruleChainsMap);
- },
- () => {
- deferred.reject();
- }
- );
- } else {
- deferred.resolve({});
- }
- return deferred.promise;
- }
-
- function resolveRuleChain(ruleChainId) {
- var deferred = $q.defer();
- getRuleChain(ruleChainId, {ignoreErrors: true}).then(
- (ruleChain) => {
- deferred.resolve(ruleChain);
- },
- () => {
- deferred.resolve({
- id: {id: ruleChainId, entityType: types.entityType.rulechain}
- });
- }
- );
- return deferred.promise;
- }
-
- function loadRuleNodeComponents() {
- return componentDescriptorService.getComponentDescriptorsByTypes(types.ruleNodeTypeComponentTypes);
- }
-
- function testScript(inputParams) {
- var deferred = $q.defer();
- var url = '/api/ruleChain/testScript';
- $http.post(url, inputParams).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getLatestRuleNodeDebugInput(ruleNodeId) {
- var deferred = $q.defer();
- var url = '/api/ruleNode/' + ruleNodeId + '/debugIn';
- $http.get(url).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/api/subscription.js b/ui/src/app/api/subscription.js
deleted file mode 100644
index 3f4b0e0183..0000000000
--- a/ui/src/app/api/subscription.js
+++ /dev/null
@@ -1,1072 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- options = {
- type,
- targetDeviceAliasIds, // RPC
- targetDeviceIds, // RPC
- datasources,
- timeWindowConfig,
- useDashboardTimewindow,
- legendConfig,
- decimals,
- units,
- callbacks
- }
- */
-
-export default class Subscription {
- constructor(subscriptionContext, options) {
-
- this.ctx = subscriptionContext;
- this.type = options.type;
- this.callbacks = options.callbacks;
- this.id = this.ctx.utils.guid();
- this.cafs = {};
- this.registrations = [];
- this.hasResolvedData = false;
-
- var subscription = this;
- var deferred = this.ctx.$q.defer();
-
- if (this.type === this.ctx.types.widgetType.rpc.value) {
- this.callbacks.rpcStateChanged = this.callbacks.rpcStateChanged || function(){};
- this.callbacks.onRpcSuccess = this.callbacks.onRpcSuccess || function(){};
- this.callbacks.onRpcFailed = this.callbacks.onRpcFailed || function(){};
- this.callbacks.onRpcErrorCleared = this.callbacks.onRpcErrorCleared || function(){};
-
- this.targetDeviceAliasIds = options.targetDeviceAliasIds;
- this.targetDeviceIds = options.targetDeviceIds;
-
- this.targetDeviceAliasId = null;
- this.targetDeviceId = null;
-
- this.rpcRejection = null;
- this.rpcErrorText = null;
- this.rpcEnabled = false;
- this.executingRpcRequest = false;
- this.executingPromises = [];
- this.initRpc().then(
- function() {
- deferred.resolve(subscription);
- }
- );
- } else if (this.type === this.ctx.types.widgetType.alarm.value) {
- this.callbacks.onDataUpdated = this.callbacks.onDataUpdated || function(){};
- this.callbacks.onDataUpdateError = this.callbacks.onDataUpdateError || function(){};
- this.callbacks.dataLoading = this.callbacks.dataLoading || function(){};
- this.callbacks.timeWindowUpdated = this.callbacks.timeWindowUpdated || function(){};
- this.alarmSource = options.alarmSource;
-
- this.alarmSearchStatus = angular.isDefined(options.alarmSearchStatus) ?
- options.alarmSearchStatus : this.ctx.types.alarmSearchStatus.any;
- this.alarmsPollingInterval = angular.isDefined(options.alarmsPollingInterval) ?
- options.alarmsPollingInterval : 5000;
- this.alarmsMaxCountLoad = angular.isDefined(options.alarmsMaxCountLoad) ?
- options.alarmsMaxCountLoad : 0;
- this.alarmsFetchSize = angular.isDefined(options.alarmsFetchSize) ?
- options.alarmsFetchSize : 100;
-
- this.alarmSourceListener = null;
- this.alarms = [];
-
- this.originalTimewindow = null;
- this.timeWindow = {};
- this.useDashboardTimewindow = options.useDashboardTimewindow;
-
- if (this.useDashboardTimewindow) {
- this.timeWindowConfig = angular.copy(options.dashboardTimewindow);
- } else {
- this.timeWindowConfig = angular.copy(options.timeWindowConfig);
- }
-
- this.subscriptionTimewindow = null;
-
- this.loadingData = false;
- this.displayLegend = false;
- this.initAlarmSubscription().then(
- function success() {
- deferred.resolve(subscription);
- },
- function fail() {
- deferred.reject();
- }
- );
- } else {
- this.callbacks.onDataUpdated = this.callbacks.onDataUpdated || function(){};
- this.callbacks.onDataUpdateError = this.callbacks.onDataUpdateError || function(){};
- this.callbacks.dataLoading = this.callbacks.dataLoading || function(){};
- this.callbacks.legendDataUpdated = this.callbacks.legendDataUpdated || function(){};
- this.callbacks.timeWindowUpdated = this.callbacks.timeWindowUpdated || function(){};
-
- this.datasources = this.ctx.utils.validateDatasources(options.datasources);
- this.datasourceListeners = [];
-
- /*
- * data = array of datasourceData
- * datasourceData = {
- * tbDatasource,
- * dataKey, { name, config }
- * data = array of [time, value]
- * }
- */
- this.data = [];
- this.hiddenData = [];
- this.originalTimewindow = null;
- this.timeWindow = {};
- this.useDashboardTimewindow = options.useDashboardTimewindow;
- this.stateData = options.stateData;
- if (this.useDashboardTimewindow) {
- this.timeWindowConfig = angular.copy(options.dashboardTimewindow);
- } else {
- this.timeWindowConfig = angular.copy(options.timeWindowConfig);
- }
-
- this.subscriptionTimewindow = null;
- this.comparisonEnabled = options.comparisonEnabled;
- if (this.comparisonEnabled) {
- this.timeForComparison = options.timeForComparison;
-
- this.comparisonTimeWindow = {};
- this.timewindowForComparison = null;
- }
-
- this.units = options.units || '';
- this.decimals = angular.isDefined(options.decimals) ? options.decimals : 2;
-
- this.loadingData = false;
-
- if (options.legendConfig) {
- this.legendConfig = options.legendConfig;
- this.legendData = {
- keys: [],
- data: []
- };
- this.displayLegend = true;
- } else {
- this.displayLegend = false;
- }
- this.caulculateLegendData = this.displayLegend &&
- this.type === this.ctx.types.widgetType.timeseries.value &&
- (this.legendConfig.showMin === true ||
- this.legendConfig.showMax === true ||
- this.legendConfig.showAvg === true ||
- this.legendConfig.showTotal === true);
- this.initDataSubscription().then(
- function success() {
- deferred.resolve(subscription);
- },
- function fail() {
- deferred.reject();
- }
- );
- }
-
- return deferred.promise;
- }
-
- getFirstEntityInfo() {
- var entityId, entityName, entityLabel = null;
- if (this.type === this.ctx.types.widgetType.rpc.value) {
- if (this.targetDeviceId) {
- entityId = {
- entityType: this.ctx.types.entityType.device,
- id: this.targetDeviceId
- };
- entityName = this.targetDeviceName;
- }
- } else if (this.type == this.ctx.types.widgetType.alarm.value) {
- if (this.alarmSource && this.alarmSource.entityType && this.alarmSource.entityId) {
- entityId = {
- entityType: this.alarmSource.entityType,
- id: this.alarmSource.entityId
- };
- entityName = this.alarmSource.entityName;
- entityLabel = this.alarmSource.entityLabel;
- }
- } else {
- for (var i=0;i {
- this.timeWindow.stDiff = stDiff;
- deferred.resolve();
- },
- () => {
- this.timeWindow.stDiff = 0;
- deferred.resolve();
- }
- );
- } else {
- if (this.timeWindow) {
- this.timeWindow.stDiff = 0;
- }
- deferred.resolve();
- }
- return deferred.promise;
- }
-
- initAlarmSubscription() {
- var deferred = this.ctx.$q.defer();
- var subscription = this;
- this.loadStDiff().then(() => {
- if (!subscription.ctx.aliasController) {
- subscription.hasResolvedData = true;
- subscription.configureAlarmsData();
- deferred.resolve();
- } else {
- subscription.ctx.aliasController.resolveAlarmSource(subscription.alarmSource).then(
- function success(alarmSource) {
- subscription.alarmSource = alarmSource;
- if (alarmSource) {
- subscription.hasResolvedData = true;
- }
- subscription.configureAlarmsData();
- deferred.resolve();
- },
- function fail() {
- deferred.reject();
- }
- );
- }
- });
- return deferred.promise;
- }
-
- configureAlarmsData() {
- var subscription = this;
- var registration;
- if (this.useDashboardTimewindow) {
- registration = this.ctx.$scope.$on('dashboardTimewindowChanged', function (event, newDashboardTimewindow) {
- if (!angular.equals(subscription.timeWindowConfig, newDashboardTimewindow) && newDashboardTimewindow) {
- subscription.timeWindowConfig = angular.copy(newDashboardTimewindow);
- subscription.update();
- }
- });
- this.registrations.push(registration);
- } else {
- this.startWatchingTimewindow();
- }
- registration = this.ctx.$scope.$watch(function () {
- return subscription.alarmSearchStatus;
- }, function (newAlarmSearchStatus, prevAlarmSearchStatus) {
- if (!angular.equals(newAlarmSearchStatus, prevAlarmSearchStatus)) {
- subscription.update();
- }
- }, true);
- this.registrations.push(registration);
- }
-
- initDataSubscription() {
- var deferred = this.ctx.$q.defer();
- var subscription = this;
- this.loadStDiff().then(() => {
- if (!subscription.ctx.aliasController) {
- subscription.hasResolvedData = true;
- subscription.configureData();
- deferred.resolve();
- } else {
- subscription.ctx.aliasController.resolveDatasources(subscription.datasources).then(
- function success(datasources) {
- subscription.datasources = datasources;
- if (datasources && datasources.length) {
- subscription.hasResolvedData = true;
- }
- subscription.configureData();
- deferred.resolve();
- },
- function fail() {
- subscription.notifyDataLoaded();
- deferred.reject();
- }
- );
- }
- });
- return deferred.promise;
- }
-
- configureData() {
- var additionalDatasources = [];
- var dataIndex = 0;
- var additionalKeysNumber = 0;
- for (var i = 0; i < this.datasources.length; i++) {
- var datasource = this.datasources[i];
- var additionalDataKeys = [];
- let datasourceAdditionalKeysNumber = 0;
-
- for (var a = 0; a < datasource.dataKeys.length; a++) {
- var dataKey = datasource.dataKeys[a];
- dataKey.hidden = dataKey.settings.hideDataByDefault ? true : false;
- dataKey.inLegend = dataKey.settings.removeFromLegend ? false : true;
- dataKey.pattern = angular.copy(dataKey.label);
-
- if (this.comparisonEnabled && dataKey.settings.comparisonSettings && dataKey.settings.comparisonSettings.showValuesForComparison) {
- datasourceAdditionalKeysNumber++;
- additionalKeysNumber++;
- let additionalDataKey = this.ctx.utils.createAdditionalDataKey(dataKey,datasource, this.timeForComparison,this.datasources,additionalKeysNumber);
- dataKey.settings.comparisonSettings.color = additionalDataKey.color;
-
- additionalDataKeys.push(additionalDataKey);
- }
-
- var datasourceData = {
- datasource: datasource,
- dataKey: dataKey,
- data: []
- };
- if (dataKey.type === this.ctx.types.dataKeyType.entityField) {
- if(datasource.entity && datasource.entity[this.ctx.types.entityField[dataKey.name].value]){
- datasourceData.data.push([Date.now(), datasource.entity[this.ctx.types.entityField[dataKey.name].value]]);
- }
- }
- this.data.push(datasourceData);
- this.hiddenData.push({data: []});
- if (this.displayLegend) {
- var legendKey = {
- dataKey: dataKey,
- dataIndex: dataIndex++
- };
- this.legendData.keys.push(legendKey);
- var legendKeyData = {
- min: null,
- max: null,
- avg: null,
- total: null,
- hidden: false
- };
- this.legendData.data.push(legendKeyData);
- }
- }
-
- if (datasourceAdditionalKeysNumber > 0) {
- let additionalDatasource = angular.copy(datasource);
- additionalDatasource.dataKeys = additionalDataKeys;
- additionalDatasource.isAdditional = true;
- additionalDatasources.push(additionalDatasource);
- }
- }
-
- for (var j=0; j < additionalDatasources.length; j++) {
- let additionalDatasource = additionalDatasources[j];
- for (var k=0; k < additionalDatasource.dataKeys.length; k++) {
- let additionalDataKey = additionalDatasource.dataKeys[k];
- var additionalDatasourceData = {
- datasource: additionalDatasource,
- dataKey: additionalDataKey,
- data: []
- };
- this.data.push(additionalDatasourceData);
- this.hiddenData.push({data: []});
- if (this.displayLegend) {
- var additionalLegendKey = {
- dataKey: additionalDataKey,
- dataIndex: dataIndex++
- };
- this.legendData.keys.push(additionalLegendKey);
- var additionalLegendKeyData = {
- min: null,
- max: null,
- avg: null,
- total: null,
- hidden: false
- };
- this.legendData.data.push(additionalLegendKeyData);
- }
- }
- }
-
- this.datasources = this.datasources.concat(additionalDatasources);
-
- var subscription = this;
- var registration;
-
- if (this.displayLegend) {
- this.legendData.keys = this.ctx.$filter('orderBy')(this.legendData.keys, '+label');
- registration = this.ctx.$scope.$watch(
- function() {
- return subscription.legendData.keys;
- },
- function (newValue, oldValue) {
- for(var i = 0; i < newValue.length; i++) {
- if(newValue[i].dataKey.hidden != oldValue[i].dataKey.hidden) {
- subscription.updateDataVisibility(i);
- }
- }
- }, true);
- this.registrations.push(registration);
- }
-
- if (this.type === this.ctx.types.widgetType.timeseries.value) {
- if (this.useDashboardTimewindow) {
- registration = this.ctx.$scope.$on('dashboardTimewindowChanged', function (event, newDashboardTimewindow) {
- if (!angular.equals(subscription.timeWindowConfig, newDashboardTimewindow) && newDashboardTimewindow) {
- subscription.timeWindowConfig = angular.copy(newDashboardTimewindow);
- subscription.update();
- }
- });
- this.registrations.push(registration);
- } else {
- this.startWatchingTimewindow();
- }
- }
- }
-
- resetData() {
- for (var i=0;i -1) {
- this.registrations.splice(index, 1);
- }
- }
- }
-
- initRpc() {
- var deferred = this.ctx.$q.defer();
- if (this.targetDeviceAliasIds && this.targetDeviceAliasIds.length > 0) {
- this.targetDeviceAliasId = this.targetDeviceAliasIds[0];
- var subscription = this;
- this.ctx.aliasController.getAliasInfo(this.targetDeviceAliasId).then(
- function success(aliasInfo) {
- if (aliasInfo.currentEntity && aliasInfo.currentEntity.entityType == subscription.ctx.types.entityType.device) {
- subscription.targetDeviceId = aliasInfo.currentEntity.id;
- subscription.targetDeviceName = aliasInfo.currentEntity.name;
- if (subscription.targetDeviceId) {
- subscription.rpcEnabled = true;
- } else {
- subscription.rpcEnabled = subscription.ctx.$scope.widgetEditMode ? true : false;
- }
- subscription.hasResolvedData = subscription.rpcEnabled;
- subscription.callbacks.rpcStateChanged(subscription);
- deferred.resolve();
- } else {
- subscription.rpcEnabled = false;
- subscription.callbacks.rpcStateChanged(subscription);
- deferred.resolve();
- }
- },
- function fail () {
- subscription.rpcEnabled = false;
- subscription.callbacks.rpcStateChanged(subscription);
- deferred.resolve();
- }
- );
- } else {
- if (this.targetDeviceIds && this.targetDeviceIds.length > 0) {
- this.targetDeviceId = this.targetDeviceIds[0];
- }
- if (this.targetDeviceId) {
- this.rpcEnabled = true;
- } else {
- this.rpcEnabled = this.ctx.$scope.widgetEditMode ? true : false;
- }
- this.hasResolvedData = true;
- this.callbacks.rpcStateChanged(this);
- deferred.resolve();
- }
- return deferred.promise;
- }
-
- clearRpcError() {
- this.rpcRejection = null;
- this.rpcErrorText = null;
- this.callbacks.onRpcErrorCleared(this);
- }
-
- sendOneWayCommand(method, params, timeout) {
- return this.sendCommand(true, method, params, timeout);
- }
-
- sendTwoWayCommand(method, params, timeout) {
- return this.sendCommand(false, method, params, timeout);
- }
-
- sendCommand(oneWayElseTwoWay, method, params, timeout) {
- if (!this.rpcEnabled) {
- return this.ctx.$q.reject();
- }
-
- if (this.rpcRejection && this.rpcRejection.status !== 408) {
- this.rpcRejection = null;
- this.rpcErrorText = null;
- this.callbacks.onRpcErrorCleared(this);
- }
-
- var subscription = this;
-
- var requestBody = {
- method: method,
- params: params
- };
-
- if (timeout && timeout > 0) {
- requestBody.timeout = timeout;
- }
-
- var deferred = this.ctx.$q.defer();
- this.executingRpcRequest = true;
- this.callbacks.rpcStateChanged(this);
- if (this.ctx.$scope.widgetEditMode) {
- this.ctx.$timeout(function() {
- subscription.executingRpcRequest = false;
- subscription.callbacks.rpcStateChanged(subscription);
- if (oneWayElseTwoWay) {
- deferred.resolve();
- } else {
- deferred.resolve(requestBody);
- }
- }, 500);
- } else {
- this.executingPromises.push(deferred.promise);
- var targetSendFunction = oneWayElseTwoWay ? this.ctx.deviceService.sendOneWayRpcCommand : this.ctx.deviceService.sendTwoWayRpcCommand;
- targetSendFunction(this.targetDeviceId, requestBody).then(
- function success(responseBody) {
- subscription.rpcRejection = null;
- subscription.rpcErrorText = null;
- var index = subscription.executingPromises.indexOf(deferred.promise);
- if (index >= 0) {
- subscription.executingPromises.splice( index, 1 );
- }
- subscription.executingRpcRequest = subscription.executingPromises.length > 0;
- subscription.callbacks.onRpcSuccess(subscription);
- deferred.resolve(responseBody);
- },
- function fail(rejection) {
- var index = subscription.executingPromises.indexOf(deferred.promise);
- if (index >= 0) {
- subscription.executingPromises.splice( index, 1 );
- }
- subscription.executingRpcRequest = subscription.executingPromises.length > 0;
- subscription.callbacks.rpcStateChanged(subscription);
- if (!subscription.executingRpcRequest || rejection.status === 408) {
- subscription.rpcRejection = rejection;
- if (rejection.status === 408) {
- subscription.rpcErrorText = 'Device is offline.';
- } else {
- subscription.rpcErrorText = 'Error : ' + rejection.status + ' - ' + rejection.statusText;
- if (rejection.data && rejection.data.length > 0) {
- subscription.rpcErrorText += '';
- subscription.rpcErrorText += rejection.data;
- }
- }
- subscription.callbacks.onRpcFailed(subscription);
- }
- deferred.reject(rejection);
- }
- );
- }
- return deferred.promise;
- }
-
- updateDataVisibility(index) {
- var hidden = this.legendData.keys[index].dataKey.hidden;
- if (hidden) {
- this.hiddenData[index].data = this.data[index].data;
- this.data[index].data = [];
- } else {
- this.data[index].data = this.hiddenData[index].data;
- this.hiddenData[index].data = [];
- }
- this.onDataUpdated();
- }
-
- onAliasesChanged(aliasIds) {
- if (this.type === this.ctx.types.widgetType.rpc.value) {
- return this.checkRpcTarget(aliasIds);
- } else if (this.type === this.ctx.types.widgetType.alarm.value) {
- return this.checkAlarmSource(aliasIds);
- } else {
- return this.checkSubscriptions(aliasIds);
- }
- }
-
- onDataUpdated(apply) {
- if (this.cafs['dataUpdated']) {
- this.cafs['dataUpdated']();
- this.cafs['dataUpdated'] = null;
- }
- var subscription = this;
- this.cafs['dataUpdated'] = this.ctx.tbRaf(function() {
- try {
- subscription.callbacks.onDataUpdated(subscription, apply);
- } catch (e) {
- subscription.callbacks.onDataUpdateError(subscription, e);
- }
- });
- if (apply) {
- this.ctx.$scope.$digest();
- }
- }
-
- updateTimewindowConfig(newTimewindow) {
- this.timeWindowConfig = newTimewindow;
- }
-
- onResetTimewindow() {
- if (this.useDashboardTimewindow) {
- this.ctx.dashboardTimewindowApi.onResetTimewindow();
- } else {
- if (this.originalTimewindow) {
- this.stopWatchingTimewindow();
- this.timeWindowConfig = angular.copy(this.originalTimewindow);
- this.originalTimewindow = null;
- this.callbacks.timeWindowUpdated(this, this.timeWindowConfig);
- this.update();
- this.startWatchingTimewindow();
- }
- }
- }
-
- onUpdateTimewindow(startTimeMs, endTimeMs) {
- if (this.useDashboardTimewindow) {
- this.ctx.dashboardTimewindowApi.onUpdateTimewindow(startTimeMs, endTimeMs);
- } else {
- this.stopWatchingTimewindow();
- if (!this.originalTimewindow) {
- this.originalTimewindow = angular.copy(this.timeWindowConfig);
- }
- this.timeWindowConfig = this.ctx.timeService.toHistoryTimewindow(this.timeWindowConfig, startTimeMs, endTimeMs);
- this.callbacks.timeWindowUpdated(this, this.timeWindowConfig);
- this.update();
- this.startWatchingTimewindow();
- }
- }
-
- notifyDataLoading() {
- this.loadingData = true;
- this.callbacks.dataLoading(this);
- }
-
- notifyDataLoaded() {
- this.loadingData = false;
- this.callbacks.dataLoading(this);
- }
-
- updateTimewindow() {
- this.timeWindow.interval = this.subscriptionTimewindow.aggregation.interval || 1000;
- if (this.subscriptionTimewindow.realtimeWindowMs) {
- this.timeWindow.maxTime = (moment()).valueOf() + this.timeWindow.stDiff;//eslint-disable-line
- this.timeWindow.minTime = this.timeWindow.maxTime - this.subscriptionTimewindow.realtimeWindowMs;
- } else if (this.subscriptionTimewindow.fixedWindow) {
- this.timeWindow.maxTime = this.subscriptionTimewindow.fixedWindow.endTimeMs;
- this.timeWindow.minTime = this.subscriptionTimewindow.fixedWindow.startTimeMs;
- }
- }
-
- updateRealtimeSubscription(subscriptionTimewindow) {
- if (subscriptionTimewindow) {
- this.subscriptionTimewindow = subscriptionTimewindow;
- } else {
- this.subscriptionTimewindow =
- this.ctx.timeService.createSubscriptionTimewindow(
- this.timeWindowConfig,
- this.timeWindow.stDiff, this.stateData);
- }
- this.updateTimewindow();
- return this.subscriptionTimewindow;
- }
-
- updateComparisonTimewindow() {
- this.comparisonTimeWindow.interval = this.timewindowForComparison.aggregation.interval || 1000;
- if (this.timewindowForComparison.realtimeWindowMs) {
- this.comparisonTimeWindow.maxTime = moment(this.timeWindow.maxTime).subtract(1, this.timeForComparison).valueOf(); //eslint-disable-line
- this.comparisonTimeWindow.minTime = this.comparisonTimeWindow.maxTime - this.timewindowForComparison.realtimeWindowMs;
- } else if (this.timewindowForComparison.fixedWindow) {
- this.comparisonTimeWindow.maxTime = this.timewindowForComparison.fixedWindow.endTimeMs;
- this.comparisonTimeWindow.minTime = this.timewindowForComparison.fixedWindow.startTimeMs;
- }
- }
-
- updateSubscriptionForComparison() {
- if (!this.subscriptionTimewindow) {
- this.subscriptionTimewindow = this.updateRealtimeSubscription();
- }
- this.timewindowForComparison = this.ctx.timeService.createTimewindowForComparison(this.subscriptionTimewindow, this.timeForComparison);
- this.updateComparisonTimewindow();
- return this.timewindowForComparison;
- }
-
- dataUpdated(sourceData, datasourceIndex, dataKeyIndex, apply) {
- for (var x = 0; x < this.datasourceListeners.length; x++) {
- this.datasources[x].dataReceived = this.datasources[x].dataReceived === true;
- if (this.datasourceListeners[x].datasourceIndex === datasourceIndex && sourceData.data.length > 0) {
- this.datasources[x].dataReceived = true;
- }
- }
- this.notifyDataLoaded();
- var update = true;
- var currentData;
- if (this.displayLegend && this.legendData.keys[datasourceIndex + dataKeyIndex].dataKey.hidden) {
- currentData = this.hiddenData[datasourceIndex + dataKeyIndex];
- } else {
- currentData = this.data[datasourceIndex + dataKeyIndex];
- }
- if (this.type === this.ctx.types.widgetType.latest.value) {
- var prevData = currentData.data;
- if (!sourceData.data.length) {
- update = false;
- } else if (prevData && prevData[0] && prevData[0].length > 1 && sourceData.data.length > 0) {
- var prevTs = prevData[0][0];
- var prevValue = prevData[0][1];
- if (prevTs === sourceData.data[0][0] && prevValue === sourceData.data[0][1]) {
- update = false;
- }
- }
- }
- if (update) {
- if (this.subscriptionTimewindow && this.subscriptionTimewindow.realtimeWindowMs) {
- this.updateTimewindow();
- if (this.timewindowForComparison && this.timewindowForComparison.realtimeWindowMs) {
- this.updateComparisonTimewindow();
- }
- }
- currentData.data = sourceData.data;
- if (this.caulculateLegendData) {
- this.updateLegend(datasourceIndex + dataKeyIndex, sourceData.data, apply);
- }
- this.onDataUpdated(apply);
- }
- }
-
- alarmsUpdated(alarms, apply) {
- this.notifyDataLoaded();
- var updated = !this.alarms || !angular.equals(this.alarms, alarms);
- this.alarms = alarms;
- if (this.subscriptionTimewindow && this.subscriptionTimewindow.realtimeWindowMs) {
- this.updateTimewindow();
- }
- if (updated) {
- this.onDataUpdated(apply);
- }
- }
-
- updateLegend(dataIndex, data, apply) {
- var dataKey = this.legendData.keys[dataIndex].dataKey;
- var decimals = angular.isDefined(dataKey.decimals) ? dataKey.decimals : this.decimals;
- var units = dataKey.units && dataKey.units.length ? dataKey.units : this.units;
- var legendKeyData = this.legendData.data[dataIndex];
- if (this.legendConfig.showMin) {
- legendKeyData.min = this.ctx.widgetUtils.formatValue(calculateMin(data), decimals, units);
- }
- if (this.legendConfig.showMax) {
- legendKeyData.max = this.ctx.widgetUtils.formatValue(calculateMax(data), decimals, units);
- }
- if (this.legendConfig.showAvg) {
- legendKeyData.avg = this.ctx.widgetUtils.formatValue(calculateAvg(data), decimals, units);
- }
- if (this.legendConfig.showTotal) {
- legendKeyData.total = this.ctx.widgetUtils.formatValue(calculateTotal(data), decimals, units);
- }
- this.callbacks.legendDataUpdated(this, apply !== false);
- }
-
- update() {
- this.unsubscribe();
- this.subscribe();
- }
-
- subscribe() {
- if (this.type === this.ctx.types.widgetType.rpc.value) {
- return;
- }
- if (this.type === this.ctx.types.widgetType.alarm.value) {
- this.alarmsSubscribe();
- } else {
- this.notifyDataLoading();
- if (this.type === this.ctx.types.widgetType.timeseries.value && this.timeWindowConfig) {
- this.updateRealtimeSubscription();
- if (this.comparisonEnabled) {
- this.updateSubscriptionForComparison();
- }
- if (this.subscriptionTimewindow.fixedWindow) {
- this.onDataUpdated();
- }
- }
- var index = 0;
- for (var i = 0; i < this.datasources.length; i++) {
- var datasource = this.datasources[i];
- if (angular.isFunction(datasource))
- continue;
-
- var subscription = this;
-
- var listener = {
- subscriptionType: this.type,
- subscriptionTimewindow: this.subscriptionTimewindow,
- datasource: datasource,
- entityType: datasource.entityType,
- entityId: datasource.entityId,
- dataUpdated: function (data, datasourceIndex, dataKeyIndex, apply) {
- subscription.dataUpdated(data, datasourceIndex, dataKeyIndex, apply);
- },
- updateRealtimeSubscription: function () {
- this.subscriptionTimewindow = subscription.updateRealtimeSubscription();
- return this.subscriptionTimewindow;
- },
- setRealtimeSubscription: function (subscriptionTimewindow) {
- subscription.updateRealtimeSubscription(angular.copy(subscriptionTimewindow));
- },
- datasourceIndex: index
- };
-
- if (this.comparisonEnabled && datasource.isAdditional) {
- listener.subscriptionTimewindow = this.timewindowForComparison;
- listener.updateRealtimeSubscription = function () {
- this.subscriptionTimewindow = subscription.updateSubscriptionForComparison();
- return this.subscriptionTimewindow;
- };
- listener.setRealtimeSubscription = function () {
- subscription.updateSubscriptionForComparison();
- };
- }
-
- var entityFieldKey = false;
-
- for (var a = 0; a < datasource.dataKeys.length; a++) {
- if (datasource.dataKeys[a].type !== this.ctx.types.dataKeyType.entityField) {
- this.data[index + a].data = [];
- } else {
- entityFieldKey = true;
- }
- }
-
- index += datasource.dataKeys.length;
-
- this.datasourceListeners.push(listener);
-
- if (datasource.dataKeys.length) {
- this.ctx.datasourceService.subscribeToDatasource(listener);
- }
-
- var forceUpdate = false;
- if (datasource.unresolvedStateEntity || entityFieldKey ||
- !datasource.dataKeys.length ||
- (datasource.type === this.ctx.types.datasourceType.entity && !datasource.entityId)
- ) {
- forceUpdate = true;
- }
-
- if (forceUpdate) {
- this.notifyDataLoaded();
- this.onDataUpdated();
- }
- }
- }
- }
-
- alarmsSubscribe() {
- this.notifyDataLoading();
- if (this.timeWindowConfig) {
- this.updateRealtimeSubscription();
- if (this.subscriptionTimewindow.fixedWindow) {
- this.onDataUpdated();
- }
- }
- var subscription = this;
- this.alarmSourceListener = {
- subscriptionTimewindow: this.subscriptionTimewindow,
- alarmSource: this.alarmSource,
- alarmSearchStatus: this.alarmSearchStatus,
- alarmsPollingInterval: this.alarmsPollingInterval,
- alarmsMaxCountLoad: this.alarmsMaxCountLoad,
- alarmsFetchSize: this.alarmsFetchSize,
- alarmsUpdated: function(alarms, apply) {
- subscription.alarmsUpdated(alarms, apply);
- }
- }
- this.alarms = null;
-
- this.ctx.alarmService.subscribeForAlarms(this.alarmSourceListener);
-
- var forceUpdate = false;
- if (this.alarmSource.unresolvedStateEntity ||
- (this.alarmSource.type === this.ctx.types.datasourceType.entity && !this.alarmSource.entityId)
- ) {
- forceUpdate = true;
- }
-
- if (forceUpdate) {
- this.notifyDataLoaded();
- this.onDataUpdated();
- }
- }
-
- unsubscribe() {
- if (this.type !== this.ctx.types.widgetType.rpc.value) {
- if (this.type == this.ctx.types.widgetType.alarm.value) {
- this.alarmsUnsubscribe();
- } else {
- for (var i = 0; i < this.datasourceListeners.length; i++) {
- var listener = this.datasourceListeners[i];
- this.ctx.datasourceService.unsubscribeFromDatasource(listener);
- }
- this.datasourceListeners = [];
- this.resetData();
- }
- }
- }
-
- alarmsUnsubscribe() {
- if (this.alarmSourceListener) {
- this.ctx.alarmService.unsubscribeFromAlarms(this.alarmSourceListener);
- this.alarmSourceListener = null;
- }
- }
-
- checkRpcTarget(aliasIds) {
- if (aliasIds.indexOf(this.targetDeviceAliasId) > -1) {
- return true;
- } else {
- return false;
- }
- }
-
- checkAlarmSource(aliasIds) {
- if (this.alarmSource && this.alarmSource.entityAliasId) {
- return aliasIds.indexOf(this.alarmSource.entityAliasId) > -1;
- } else {
- return false;
- }
- }
-
- checkSubscriptions(aliasIds) {
- var subscriptionsChanged = false;
- for (var i = 0; i < this.datasourceListeners.length; i++) {
- var listener = this.datasourceListeners[i];
- if (listener.datasource.entityAliasId) {
- if (aliasIds.indexOf(listener.datasource.entityAliasId) > -1) {
- subscriptionsChanged = true;
- break;
- }
- }
- }
- return subscriptionsChanged;
- }
-
- isDataResolved() {
- return this.hasResolvedData;
- }
-
- destroy() {
- this.unsubscribe();
- for (var cafId in this.cafs) {
- if (this.cafs[cafId]) {
- this.cafs[cafId]();
- this.cafs[cafId] = null;
- }
- }
- this.registrations.forEach(function (registration) {
- registration();
- });
- this.registrations = [];
- }
-}
-
-function calculateMin(data) {
- if (data.length > 0) {
- var result = Number(data[0][1]);
- for (var i=1;i 0) {
- var result = Number(data[0][1]);
- for (var i=1;i 0) {
- return calculateTotal(data)/data.length;
- } else {
- return null;
- }
-}
-
-function calculateTotal(data) {
- if (data.length > 0) {
- var result = 0;
- for (var i = 0; i < data.length; i++) {
- result += Number(data[i][1]);
- }
- return result;
- } else {
- return null;
- }
-}
diff --git a/ui/src/app/api/telemetry-websocket.service.js b/ui/src/app/api/telemetry-websocket.service.js
deleted file mode 100644
index edc1fb3147..0000000000
--- a/ui/src/app/api/telemetry-websocket.service.js
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import 'angular-websocket';
-import thingsboardTypes from '../common/types.constant';
-
-export default angular.module('thingsboard.api.telemetryWebsocket', [thingsboardTypes])
- .factory('telemetryWebsocketService', TelemetryWebsocketService)
- .name;
-
-const RECONNECT_INTERVAL = 2000;
-const WS_IDLE_TIMEOUT = 90000;
-
-const MAX_PUBLISH_COMMANDS = 10;
-
-/*@ngInject*/
-function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, $mdUtil, $log, toast, types, userService) {
-
- var isOpening = false,
- isOpened = false,
- isActive = false,
- isReconnect = false,
- reconnectSubscribers = [],
- lastCmdId = 0,
- subscribers = {},
- subscribersCount = 0,
- commands = {},
- cmdsWrapper = {
- tsSubCmds: [],
- historyCmds: [],
- attrSubCmds: []
- },
- telemetryUri,
- dataStream,
- location = $window.location,
- socketCloseTimer,
- reconnectTimer;
-
- var port = location.port;
- if (location.protocol === "https:") {
- if (!port) {
- port = "443";
- }
- telemetryUri = "wss:";
- } else {
- if (!port) {
- port = "80";
- }
- telemetryUri = "ws:";
- }
- telemetryUri += "//" + location.hostname + ":" + port;
- telemetryUri += "/api/ws/plugins/telemetry";
-
- var service = {
- subscribe: subscribe,
- unsubscribe: unsubscribe
- }
-
- $rootScope.telemetryWsLogoutHandle = $rootScope.$on('unauthenticated', function (event, doLogout) {
- if (doLogout) {
- reset(true);
- }
- });
-
- $rootScope.telemetryWsLoginHandle = $rootScope.$on('authenticated', function () {
- reset(true);
- });
-
- return service;
-
- function publishCommands () {
- while(isOpened && hasCommands()) {
- dataStream.send(preparePublishCommands()).then(function () {
- checkToClose();
- });
- }
- tryOpenSocket();
- }
-
- function hasCommands() {
- return cmdsWrapper.tsSubCmds.length > 0 ||
- cmdsWrapper.historyCmds.length > 0 ||
- cmdsWrapper.attrSubCmds.length > 0;
- }
-
- function preparePublishCommands() {
- var preparedWrapper = {};
- var leftCount = MAX_PUBLISH_COMMANDS;
- preparedWrapper.tsSubCmds = popCmds(cmdsWrapper.tsSubCmds, leftCount);
- leftCount -= preparedWrapper.tsSubCmds.length;
- preparedWrapper.historyCmds = popCmds(cmdsWrapper.historyCmds, leftCount);
- leftCount -= preparedWrapper.historyCmds.length;
- preparedWrapper.attrSubCmds = popCmds(cmdsWrapper.attrSubCmds, leftCount);
- return preparedWrapper;
- }
-
- function popCmds(cmds, leftCount) {
- var toPublish = Math.min(cmds.length, leftCount);
- if (toPublish > 0) {
- return cmds.splice(0, toPublish);
- } else {
- return [];
- }
- }
-
- function onError (errorEvent) {
- if (errorEvent) {
- //showWsError(0, errorEvent);
- $log.warn('WebSocket error event', errorEvent);
- }
- isOpening = false;
- }
-
- function onOpen () {
- isOpening = false;
- isOpened = true;
- if (reconnectTimer) {
- $timeout.cancel(reconnectTimer);
- reconnectTimer = null;
- }
- if (isReconnect) {
- isReconnect = false;
- for (var r=0; r 1000 && closeEvent.code !== 1006) {
- showWsError(closeEvent.code, closeEvent.reason);
- }
- isOpening = false;
- isOpened = false;
- if (isActive) {
- if (!isReconnect) {
- reconnectSubscribers = [];
- for (var id in subscribers) {
- var subscriber = subscribers[id];
- if (reconnectSubscribers.indexOf(subscriber) === -1) {
- reconnectSubscribers.push(subscriber);
- }
- }
- reset(false);
- isReconnect = true;
- }
- if (reconnectTimer) {
- $timeout.cancel(reconnectTimer);
- }
- reconnectTimer = $timeout(tryOpenSocket, RECONNECT_INTERVAL, false);
- }
- }
-
- function onMessage (message) {
- if (message.data) {
- var data = angular.fromJson(message.data);
- if (data.errorCode) {
- showWsError(data.errorCode, data.errorMsg);
- } else if (data.subscriptionId) {
- var subscriber = subscribers[data.subscriptionId];
- if (subscriber && data) {
- var keys = fetchKeys(data.subscriptionId);
- if (!data.data) {
- data.data = {};
- }
- for (var k = 0; k < keys.length; k++) {
- var key = keys[k];
- if (!data.data[key]) {
- data.data[key] = [];
- }
- }
- subscriber.onData(data, data.subscriptionId);
- }
- }
- }
- checkToClose();
- }
-
- function showWsError(errorCode, errorMsg) {
- var message = 'WebSocket Error: ';
- if (errorMsg) {
- message += errorMsg;
- } else {
- message += "error code - " + errorCode + ".";
- }
- $mdUtil.nextTick(function () {
- toast.showError(message);
- });
- }
-
- function fetchKeys(subscriptionId) {
- var command = commands[subscriptionId];
- if (command && command.keys && command.keys.length > 0) {
- return command.keys.split(",");
- } else {
- return [];
- }
- }
-
- function nextCmdId () {
- lastCmdId++;
- return lastCmdId;
- }
-
- function subscribe (subscriber) {
- isActive = true;
- var cmdId;
- if (angular.isDefined(subscriber.subscriptionCommands)) {
- for (var i=0;i -1) {
- reconnectSubscribers.splice(index, 1);
- }
- subscribersCount--;
- publishCommands();
- }
- }
-
- function checkToClose () {
- if (subscribersCount === 0 && isOpened) {
- if (!socketCloseTimer) {
- socketCloseTimer = $timeout(closeSocket, WS_IDLE_TIMEOUT, false);
- }
- }
- }
-
- function tryOpenSocket () {
- if (isActive) {
- if (!isOpened && !isOpening) {
- isOpening = true;
- if (userService.isJwtTokenValid()) {
- openSocket(userService.getJwtToken());
- } else {
- userService.refreshJwtToken().then(function success() {
- openSocket(userService.getJwtToken());
- }, function fail() {
- isOpening = false;
- $rootScope.$broadcast('unauthenticated');
- });
- }
- }
- if (socketCloseTimer) {
- $timeout.cancel(socketCloseTimer);
- socketCloseTimer = null;
- }
- }
- }
-
- function openSocket(token) {
- dataStream = $websocket(telemetryUri + '?token=' + token);
- dataStream.onError(onError);
- dataStream.onOpen(onOpen);
- dataStream.onClose(onClose);
- dataStream.onMessage(onMessage, {autoApply: false});
- }
-
- function closeSocket() {
- isActive = false;
- if (isOpened) {
- dataStream.close();
- }
- }
-
- function reset(close) {
- if (socketCloseTimer) {
- $timeout.cancel(socketCloseTimer);
- socketCloseTimer = null;
- }
- lastCmdId = 0;
- subscribers = {};
- subscribersCount = 0;
- commands = {};
- cmdsWrapper.tsSubCmds = [];
- cmdsWrapper.historyCmds = [];
- cmdsWrapper.attrSubCmds = [];
- if (close) {
- closeSocket();
- }
- }
-}
diff --git a/ui/src/app/api/tenant.service.js b/ui/src/app/api/tenant.service.js
deleted file mode 100644
index dfc83a13f9..0000000000
--- a/ui/src/app/api/tenant.service.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.tenant', [])
- .factory('tenantService', TenantService)
- .name;
-
-/*@ngInject*/
-function TenantService($http, $q) {
-
- var service = {
- deleteTenant: deleteTenant,
- getTenant: getTenant,
- getTenants: getTenants,
- saveTenant: saveTenant,
- }
-
- return service;
-
- function getTenants (pageLink, config) {
- var deferred = $q.defer();
- var url = '/api/tenants?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getTenant (tenantId, config) {
- var deferred = $q.defer();
- var url = '/api/tenant/' + tenantId;
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function saveTenant (tenant) {
- var deferred = $q.defer();
- var url = '/api/tenant';
- $http.post(url, tenant).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function deleteTenant (tenantId) {
- var deferred = $q.defer();
- var url = '/api/tenant/' + tenantId;
- $http.delete(url).then(function success() {
- deferred.resolve();
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/api/time.service.js b/ui/src/app/api/time.service.js
deleted file mode 100644
index 93c0db302c..0000000000
--- a/ui/src/app/api/time.service.js
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export default angular.module('thingsboard.api.time', [])
- .factory('timeService', TimeService)
- .name;
-
-const SECOND = 1000;
-const MINUTE = 60 * SECOND;
-const HOUR = 60 * MINUTE;
-const DAY = 24 * HOUR;
-
-const MIN_INTERVAL = SECOND;
-const MAX_INTERVAL = 365 * 20 * DAY;
-
-const MIN_LIMIT = 10;
-//const AVG_LIMIT = 200;
-//const MAX_LIMIT = 500;
-
-/*@ngInject*/
-function TimeService($translate, $http, $q, types) {
-
- var predefIntervals;
- var maxDatapointsLimit;
-
- var service = {
- loadMaxDatapointsLimit: loadMaxDatapointsLimit,
- minIntervalLimit: minIntervalLimit,
- maxIntervalLimit: maxIntervalLimit,
- boundMinInterval: boundMinInterval,
- boundMaxInterval: boundMaxInterval,
- getIntervals: getIntervals,
- matchesExistingInterval: matchesExistingInterval,
- boundToPredefinedInterval: boundToPredefinedInterval,
- defaultTimewindow: defaultTimewindow,
- toHistoryTimewindow: toHistoryTimewindow,
- createSubscriptionTimewindow: createSubscriptionTimewindow,
- createTimewindowForComparison: createTimewindowForComparison,
- getMaxDatapointsLimit: function () {
- return maxDatapointsLimit;
- },
- getMinDatapointsLimit: function () {
- return MIN_LIMIT;
- }
- }
-
- return service;
-
- function loadMaxDatapointsLimit() {
- var deferred = $q.defer();
- var url = '/api/dashboard/maxDatapointsLimit';
- $http.get(url, {ignoreLoading: true}).then(function success(response) {
- maxDatapointsLimit = response.data;
- if (!maxDatapointsLimit || maxDatapointsLimit <= MIN_LIMIT) {
- maxDatapointsLimit = MIN_LIMIT + 1;
- }
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function minIntervalLimit(timewindow) {
- var min = timewindow / 500;
- return boundMinInterval(min);
- }
-
- function avgInterval(timewindow) {
- var avg = timewindow / 200;
- return boundMinInterval(avg);
- }
-
- function maxIntervalLimit(timewindow) {
- var max = timewindow / MIN_LIMIT;
- return boundMaxInterval(max);
- }
-
- function boundMinInterval(min) {
- return toBound(min, MIN_INTERVAL, MAX_INTERVAL, MIN_INTERVAL);
- }
-
- function boundMaxInterval(max) {
- return toBound(max, MIN_INTERVAL, MAX_INTERVAL, MAX_INTERVAL);
- }
-
- function toBound(value, min, max, defValue) {
- if (angular.isDefined(value)) {
- value = Math.max(value, min);
- value = Math.min(value, max);
- return value;
- } else {
- return defValue;
- }
- }
-
- function getIntervals(min, max) {
- min = boundMinInterval(min);
- max = boundMaxInterval(max);
- var intervals = [];
- initPredefIntervals();
- for (var i in predefIntervals) {
- var interval = predefIntervals[i];
- if (interval.value >= min && interval.value <= max) {
- intervals.push(interval);
- }
- }
- return intervals;
- }
-
- function initPredefIntervals() {
- if (!predefIntervals) {
- predefIntervals = [
- {
- name: $translate.instant('timeinterval.seconds-interval', {seconds: 1}, 'messageformat'),
- value: 1 * SECOND
- },
- {
- name: $translate.instant('timeinterval.seconds-interval', {seconds: 5}, 'messageformat'),
- value: 5 * SECOND
- },
- {
- name: $translate.instant('timeinterval.seconds-interval', {seconds: 10}, 'messageformat'),
- value: 10 * SECOND
- },
- {
- name: $translate.instant('timeinterval.seconds-interval', {seconds: 15}, 'messageformat'),
- value: 15 * SECOND
- },
- {
- name: $translate.instant('timeinterval.seconds-interval', {seconds: 30}, 'messageformat'),
- value: 30 * SECOND
- },
- {
- name: $translate.instant('timeinterval.minutes-interval', {minutes: 1}, 'messageformat'),
- value: 1 * MINUTE
- },
- {
- name: $translate.instant('timeinterval.minutes-interval', {minutes: 2}, 'messageformat'),
- value: 2 * MINUTE
- },
- {
- name: $translate.instant('timeinterval.minutes-interval', {minutes: 5}, 'messageformat'),
- value: 5 * MINUTE
- },
- {
- name: $translate.instant('timeinterval.minutes-interval', {minutes: 10}, 'messageformat'),
- value: 10 * MINUTE
- },
- {
- name: $translate.instant('timeinterval.minutes-interval', {minutes: 15}, 'messageformat'),
- value: 15 * MINUTE
- },
- {
- name: $translate.instant('timeinterval.minutes-interval', {minutes: 30}, 'messageformat'),
- value: 30 * MINUTE
- },
- {
- name: $translate.instant('timeinterval.hours-interval', {hours: 1}, 'messageformat'),
- value: 1 * HOUR
- },
- {
- name: $translate.instant('timeinterval.hours-interval', {hours: 2}, 'messageformat'),
- value: 2 * HOUR
- },
- {
- name: $translate.instant('timeinterval.hours-interval', {hours: 5}, 'messageformat'),
- value: 5 * HOUR
- },
- {
- name: $translate.instant('timeinterval.hours-interval', {hours: 10}, 'messageformat'),
- value: 10 * HOUR
- },
- {
- name: $translate.instant('timeinterval.hours-interval', {hours: 12}, 'messageformat'),
- value: 12 * HOUR
- },
- {
- name: $translate.instant('timeinterval.days-interval', {days: 1}, 'messageformat'),
- value: 1 * DAY
- },
- {
- name: $translate.instant('timeinterval.days-interval', {days: 7}, 'messageformat'),
- value: 7 * DAY
- },
- {
- name: $translate.instant('timeinterval.days-interval', {days: 30}, 'messageformat'),
- value: 30 * DAY
- }
- ];
- }
- }
-
- function matchesExistingInterval(min, max, intervalMs) {
- var intervals = getIntervals(min, max);
- for (var i in intervals) {
- var interval = intervals[i];
- if (intervalMs === interval.value) {
- return true;
- }
- }
- return false;
- }
-
- function boundToPredefinedInterval(min, max, intervalMs) {
- var intervals = getIntervals(min, max);
- var minDelta = MAX_INTERVAL;
- var boundedInterval = intervalMs || min;
- var matchedInterval;
- for (var i in intervals) {
- var interval = intervals[i];
- var delta = Math.abs(interval.value - boundedInterval);
- if (delta < minDelta) {
- matchedInterval = interval;
- minDelta = delta;
- }
- }
- boundedInterval = matchedInterval.value;
- return boundedInterval;
- }
-
- function defaultTimewindow() {
- var currentTime = (new Date).getTime();
- var timewindow = {
- displayValue: "",
- selectedTab: 0,
- hideInterval: false,
- hideAggregation: false,
- hideAggInterval: false,
- realtime: {
- interval: SECOND,
- timewindowMs: MINUTE // 1 min by default
- },
- history: {
- historyType: 0,
- interval: SECOND,
- timewindowMs: MINUTE, // 1 min by default
- fixedTimewindow: {
- startTimeMs: currentTime - DAY, // 1 day by default
- endTimeMs: currentTime
- }
- },
- aggregation: {
- type: types.aggregation.avg.value,
- limit: Math.floor(maxDatapointsLimit / 2)
- }
- }
- return timewindow;
- }
-
- function toHistoryTimewindow(timewindow, startTimeMs, endTimeMs, interval) {
- if (timewindow.history) {
- interval = angular.isDefined(interval) ? interval : timewindow.history.interval;
- } else if (timewindow.realtime) {
- interval = timewindow.realtime.interval;
- } else {
- interval = 0;
- }
-
- var aggType;
- var limit;
- if (timewindow.aggregation) {
- aggType = timewindow.aggregation.type || types.aggregation.avg.value;
- limit = timewindow.aggregation.limit || maxDatapointsLimit;
- } else {
- aggType = types.aggregation.avg.value;
- limit = maxDatapointsLimit;
- }
-
-
- var historyTimewindow = {
- hideInterval: timewindow.hideInterval || false,
- hideAggregation: timewindow.hideAggregation || false,
- hideAggInterval: timewindow.hideAggInterval || false,
- history: {
- fixedTimewindow: {
- startTimeMs: startTimeMs,
- endTimeMs: endTimeMs
- },
- interval: boundIntervalToTimewindow(endTimeMs - startTimeMs, interval, types.aggregation.avg.value)
- },
- aggregation: {
- type: aggType,
- limit: limit
- }
- }
-
- return historyTimewindow;
- }
-
- function createSubscriptionTimewindow(timewindow, stDiff, stateData) {
-
- var subscriptionTimewindow = {
- fixedWindow: null,
- realtimeWindowMs: null,
- aggregation: {
- interval: SECOND,
- limit: maxDatapointsLimit,
- type: types.aggregation.avg.value
- }
- };
- var aggTimewindow = 0;
- if (stateData) {
- subscriptionTimewindow.aggregation = {
- interval: SECOND,
- limit: maxDatapointsLimit,
- type: types.aggregation.none.value,
- stateData: true
- };
- } else {
- subscriptionTimewindow.aggregation = {
- interval: SECOND,
- limit: maxDatapointsLimit,
- type: types.aggregation.avg.value
- };
- }
-
- if (angular.isDefined(timewindow.aggregation) && !stateData) {
- subscriptionTimewindow.aggregation = {
- type: timewindow.aggregation.type || types.aggregation.avg.value,
- limit: timewindow.aggregation.limit || maxDatapointsLimit
- };
- }
- if (angular.isDefined(timewindow.realtime)) {
- subscriptionTimewindow.realtimeWindowMs = timewindow.realtime.timewindowMs;
- subscriptionTimewindow.aggregation.interval =
- boundIntervalToTimewindow(subscriptionTimewindow.realtimeWindowMs, timewindow.realtime.interval,
- subscriptionTimewindow.aggregation.type);
- subscriptionTimewindow.startTs = (new Date).getTime() + stDiff - subscriptionTimewindow.realtimeWindowMs;
- var startDiff = subscriptionTimewindow.startTs % subscriptionTimewindow.aggregation.interval;
- aggTimewindow = subscriptionTimewindow.realtimeWindowMs;
- if (startDiff) {
- subscriptionTimewindow.startTs -= startDiff;
- aggTimewindow += subscriptionTimewindow.aggregation.interval;
- }
- } else if (angular.isDefined(timewindow.history)) {
- if (angular.isDefined(timewindow.history.timewindowMs)) {
- var currentTime = (new Date).getTime();
- subscriptionTimewindow.fixedWindow = {
- startTimeMs: currentTime - timewindow.history.timewindowMs,
- endTimeMs: currentTime
- }
- aggTimewindow = timewindow.history.timewindowMs;
-
- } else {
- subscriptionTimewindow.fixedWindow = {
- startTimeMs: timewindow.history.fixedTimewindow.startTimeMs,
- endTimeMs: timewindow.history.fixedTimewindow.endTimeMs
- }
- aggTimewindow = subscriptionTimewindow.fixedWindow.endTimeMs - subscriptionTimewindow.fixedWindow.startTimeMs;
- }
- subscriptionTimewindow.startTs = subscriptionTimewindow.fixedWindow.startTimeMs;
- subscriptionTimewindow.aggregation.interval =
- boundIntervalToTimewindow(aggTimewindow, timewindow.history.interval, subscriptionTimewindow.aggregation.type);
- }
- var aggregation = subscriptionTimewindow.aggregation;
- aggregation.timeWindow = aggTimewindow;
- if (aggregation.type !== types.aggregation.none.value) {
- aggregation.limit = Math.ceil(aggTimewindow / subscriptionTimewindow.aggregation.interval);
- }
- return subscriptionTimewindow;
- }
-
- function boundIntervalToTimewindow(timewindow, intervalMs, aggType) {
- if (aggType === types.aggregation.none.value) {
- return SECOND;
- } else {
- var min = minIntervalLimit(timewindow);
- var max = maxIntervalLimit(timewindow);
- if (intervalMs) {
- return toBound(intervalMs, min, max, intervalMs);
- } else {
- return boundToPredefinedInterval(min, max, avgInterval(timewindow));
- }
- }
- }
-
- function createTimewindowForComparison(subscriptionTimewindow, timeUnit) {
- var timewindowForComparison = {
- fixedWindow: null,
- realtimeWindowMs: null,
- aggregation: subscriptionTimewindow.aggregation
- };
-
- if (subscriptionTimewindow.realtimeWindowMs) {
- timewindowForComparison.startTs = moment(subscriptionTimewindow.startTs).subtract(1, timeUnit).valueOf(); //eslint-disable-line
- timewindowForComparison.realtimeWindowMs = subscriptionTimewindow.realtimeWindowMs;
- } else if (subscriptionTimewindow.fixedWindow) {
- var timeInterval = subscriptionTimewindow.fixedWindow.endTimeMs - subscriptionTimewindow.fixedWindow.startTimeMs;
- var endTimeMs = moment(subscriptionTimewindow.fixedWindow.endTimeMs).subtract(1, timeUnit).valueOf(); //eslint-disable-line
-
- timewindowForComparison.startTs = endTimeMs - timeInterval;
- timewindowForComparison.fixedWindow = {
- startTimeMs: timewindowForComparison.startTs,
- endTimeMs: endTimeMs
- };
- }
-
- return timewindowForComparison;
- }
-}
diff --git a/ui/src/app/api/user.service.js b/ui/src/app/api/user.service.js
deleted file mode 100644
index b84bcf8428..0000000000
--- a/ui/src/app/api/user.service.js
+++ /dev/null
@@ -1,688 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import thingsboardApiLogin from './login.service';
-import angularStorage from 'angular-storage';
-
-export default angular.module('thingsboard.api.user', [thingsboardApiLogin,
- angularStorage])
- .factory('userService', UserService)
- .name;
-
-/*@ngInject*/
-function UserService($http, $q, $rootScope, adminService, dashboardService, timeService, loginService, toast, store, jwtHelper, $translate, $state, $location, $mdDialog) {
- var currentUser = null,
- currentUserDetails = null,
- lastPublicDashboardId = null,
- allowedDashboardIds = [],
- redirectParams = null,
- userTokenAccessEnabled = false,
- userLoaded = false;
-
- var refreshTokenQueue = [];
-
- var service = {
- deleteUser: deleteUser,
- getAuthority: getAuthority,
- isPublic: isPublic,
- getPublicId: getPublicId,
- parsePublicId: parsePublicId,
- isAuthenticated: isAuthenticated,
- getCurrentUser: getCurrentUser,
- getCustomerUsers: getCustomerUsers,
- getUser: getUser,
- getTenantAdmins: getTenantAdmins,
- isUserLoaded: isUserLoaded,
- saveUser: saveUser,
- sendActivationEmail: sendActivationEmail,
- getActivationLink: getActivationLink,
- setUserFromJwtToken: setUserFromJwtToken,
- getJwtToken: getJwtToken,
- clearJwtToken: clearJwtToken,
- isJwtTokenValid : isJwtTokenValid,
- validateJwtToken: validateJwtToken,
- refreshJwtToken: refreshJwtToken,
- refreshTokenPending: refreshTokenPending,
- updateAuthorizationHeader: updateAuthorizationHeader,
- setAuthorizationRequestHeader: setAuthorizationRequestHeader,
- setRedirectParams: setRedirectParams,
- gotoDefaultPlace: gotoDefaultPlace,
- forceDefaultPlace: forceDefaultPlace,
- updateLastPublicDashboardId: updateLastPublicDashboardId,
- logout: logout,
- reloadUser: reloadUser,
- isUserTokenAccessEnabled: isUserTokenAccessEnabled,
- loginAsUser: loginAsUser,
- setUserCredentialsEnabled: setUserCredentialsEnabled
- }
-
- reloadUser();
-
- return service;
-
- function reloadUser() {
- userLoaded = false;
- loadUser(true).then(function success() {
- notifyUserLoaded();
- }, function fail() {
- notifyUserLoaded();
- });
- }
-
- function updateAndValidateToken(token, prefix, notify) {
- var valid = false;
- var tokenData = jwtHelper.decodeToken(token);
- var issuedAt = tokenData.iat;
- var expTime = tokenData.exp;
- if (issuedAt && expTime) {
- var ttl = expTime - issuedAt;
- if (ttl > 0) {
- var clientExpiration = new Date().valueOf() + ttl*1000;
- store.set(prefix, token);
- store.set(prefix + '_expiration', clientExpiration);
- valid = true;
- }
- }
- if (!valid && notify) {
- $rootScope.$broadcast('unauthenticated');
- }
- }
-
- function clearTokenData() {
- store.remove('jwt_token');
- store.remove('jwt_token_expiration');
- store.remove('refresh_token');
- store.remove('refresh_token_expiration');
- }
-
- function setUserFromJwtToken(jwtToken, refreshToken, notify, doLogout) {
- currentUser = null;
- currentUserDetails = null;
- lastPublicDashboardId = null;
- userTokenAccessEnabled = false;
- allowedDashboardIds = [];
- if (!jwtToken) {
- clearTokenData();
- if (notify) {
- $rootScope.$broadcast('unauthenticated', doLogout);
- }
- } else {
- updateAndValidateToken(jwtToken, 'jwt_token', true);
- updateAndValidateToken(refreshToken, 'refresh_token', true);
- if (notify) {
- loadUser(false).then(function success() {
- $rootScope.$broadcast('authenticated');
- }, function fail() {
- $rootScope.$broadcast('unauthenticated');
- });
- } else {
- loadUser(false);
- }
- }
- }
-
- function isAuthenticated() {
- return store.get('jwt_token');
- }
-
- function getJwtToken() {
- return store.get('jwt_token');
- }
-
- function logout() {
- $http.post('/api/auth/logout', null, {ignoreErrors: true}).then(function success() {
- clearJwtToken(true);
- }, function fail() {
- clearJwtToken(true);
- });
- }
-
- function clearJwtToken(doLogout) {
- setUserFromJwtToken(null, null, true, doLogout);
- }
-
- function isJwtTokenValid() {
- return isTokenValid('jwt_token');
- }
-
- function isTokenValid(prefix) {
- var clientExpiration = store.get(prefix + '_expiration');
- return clientExpiration && clientExpiration > new Date().valueOf();
- }
-
- function validateJwtToken(doRefresh) {
- var deferred = $q.defer();
- if (!isTokenValid('jwt_token')) {
- if (doRefresh) {
- refreshJwtToken().then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- } else {
- clearJwtToken(false);
- deferred.reject();
- }
- } else {
- deferred.resolve();
- }
- return deferred.promise;
- }
-
- function resolveRefreshTokenQueue(data) {
- for (var q=0; q < refreshTokenQueue.length;q++) {
- refreshTokenQueue[q].resolve(data);
- }
- refreshTokenQueue = [];
- }
-
- function rejectRefreshTokenQueue(message) {
- for (var q=0;q 0;
- }
-
- function refreshJwtToken() {
- var deferred = $q.defer();
- refreshTokenQueue.push(deferred);
- if (refreshTokenQueue.length === 1) {
- var refreshToken = store.get('refresh_token');
- var refreshTokenValid = isTokenValid('refresh_token');
- setUserFromJwtToken(null, null, false, false);
- if (!refreshTokenValid) {
- rejectRefreshTokenQueue($translate.instant('access.refresh-token-expired'));
- } else {
- var refreshTokenRequest = {
- refreshToken: refreshToken
- };
- $http.post('/api/auth/token', refreshTokenRequest).then(function success(response) {
- var token = response.data.token;
- var refreshToken = response.data.refreshToken;
- setUserFromJwtToken(token, refreshToken, false);
- resolveRefreshTokenQueue(response.data);
- }, function fail() {
- clearJwtToken(false);
- rejectRefreshTokenQueue($translate.instant('access.refresh-token-failed'));
- });
- }
- }
- return deferred.promise;
- }
-
- function getCurrentUser() {
- return currentUser;
- }
-
- function getAuthority() {
- if (currentUser) {
- return currentUser.authority;
- } else {
- return '';
- }
- }
-
- function isPublic() {
- if (currentUser) {
- return currentUser.isPublic;
- } else {
- return false;
- }
- }
-
- function getPublicId() {
- if (isPublic()) {
- return currentUser.sub;
- } else {
- return null;
- }
- }
-
- function parsePublicId() {
- var token = getJwtToken();
- if (token) {
- var tokenData = jwtHelper.decodeToken(token);
- if (tokenData && tokenData.isPublic) {
- return tokenData.sub;
- }
- }
- return null;
- }
-
- function isUserLoaded() {
- return userLoaded;
- }
-
- function loadUser(doTokenRefresh) {
-
- var deferred = $q.defer();
-
- function fetchAllowedDashboardIds() {
- var pageLink = {limit: 100};
- var fetchDashboardsPromise;
- if (currentUser.authority === 'TENANT_ADMIN') {
- fetchDashboardsPromise = dashboardService.getTenantDashboards(pageLink);
- } else {
- fetchDashboardsPromise = dashboardService.getCustomerDashboards(currentUser.customerId, pageLink);
- }
- fetchDashboardsPromise.then(
- function success(result) {
- var dashboards = result.data;
- for (var d=0;d 0) {
- currentUser.authority = currentUser.scopes[0];
- } else if (currentUser) {
- currentUser.authority = "ANONYMOUS";
- }
- var sysParamsPromise = loadSystemParams();
- if (currentUser.isPublic) {
- $rootScope.forceFullscreen = true;
- sysParamsPromise.then(
- () => { fetchAllowedDashboardIds(); },
- () => { deferred.reject(); }
- );
- } else if (currentUser.userId) {
- getUser(currentUser.userId, true).then(
- function success(user) {
- sysParamsPromise.then(
- () => {
- currentUserDetails = user;
- updateUserLang();
- $rootScope.forceFullscreen = false;
- if (userForceFullscreen()) {
- $rootScope.forceFullscreen = true;
- }
- if ($rootScope.forceFullscreen && (currentUser.authority === 'TENANT_ADMIN' ||
- currentUser.authority === 'CUSTOMER_USER')) {
- fetchAllowedDashboardIds();
- } else {
- deferred.resolve();
- }
- },
- () => {
- deferred.reject();
- logout();
- }
- );
- },
- function fail() {
- deferred.reject();
- logout();
- }
- )
- } else {
- deferred.reject();
- }
- }, function fail() {
- deferred.reject();
- });
- }
-
- if (!currentUser) {
- var locationSearch = $location.search();
- if (locationSearch.publicId) {
- loginService.publicLogin(locationSearch.publicId).then(function success(response) {
- var token = response.data.token;
- var refreshToken = response.data.refreshToken;
- updateAndValidateToken(token, 'jwt_token', false);
- updateAndValidateToken(refreshToken, 'refresh_token', false);
- procceedJwtTokenValidate();
- }, function fail() {
- $location.search('publicId', null);
- deferred.reject();
- });
- } else if (locationSearch.accessToken) {
- var token = locationSearch.accessToken;
- var refreshToken = locationSearch.refreshToken;
- $location.search('accessToken', null);
- if (refreshToken) {
- $location.search('refreshToken', null);
- }
- try {
- updateAndValidateToken(token, 'jwt_token', false);
- if (refreshToken) {
- updateAndValidateToken(refreshToken, 'refresh_token', false);
- } else {
- store.remove('refresh_token');
- store.remove('refresh_token_expiration');
- }
- } catch (e) {
- deferred.reject();
- }
- procceedJwtTokenValidate();
- } else if (locationSearch.username && locationSearch.password) {
- var user = {};
- user.name = locationSearch.username;
- user.password = locationSearch.password;
- $location.search('username', null);
- $location.search('password', null);
-
- loginService.login(user).then(function success(response) {
- var token = response.data.token;
- var refreshToken = response.data.refreshToken;
- try {
- updateAndValidateToken(token, 'jwt_token', false);
- updateAndValidateToken(refreshToken, 'refresh_token', false);
- } catch (e) {
- deferred.reject();
- }
- procceedJwtTokenValidate();
- }, function fail() {
- deferred.reject();
- });
- } else if (locationSearch.loginError) {
- showLoginErrorDialog(locationSearch.loginError);
- $location.search('loginError', null);
- deferred.reject();
- } else {
- procceedJwtTokenValidate();
- }
- } else {
- deferred.resolve();
- }
- return deferred.promise;
- }
-
- function showLoginErrorDialog(loginError) {
- $translate(['login.error',
- 'action.close']).then(function (translations) {
- var alert = $mdDialog.alert()
- .title(translations['login.error'])
- .htmlContent(loginError)
- .ok(translations['action.close']);
- $mdDialog.show(alert);
- });
- }
-
- function loadIsUserTokenAccessEnabled() {
- var deferred = $q.defer();
- if (currentUser.authority === 'SYS_ADMIN' || currentUser.authority === 'TENANT_ADMIN') {
- var url = '/api/user/tokenAccessEnabled';
- $http.get(url).then(function success(response) {
- userTokenAccessEnabled = response.data;
- deferred.resolve(response.data);
- }, function fail() {
- userTokenAccessEnabled = false;
- deferred.reject();
- });
- } else {
- userTokenAccessEnabled = false;
- deferred.resolve(false);
- }
- return deferred.promise;
- }
-
- function loadSystemParams() {
- var promises = [];
- promises.push(loadIsUserTokenAccessEnabled());
- promises.push(timeService.loadMaxDatapointsLimit());
- return $q.all(promises);
- }
-
- function notifyUserLoaded() {
- if (!userLoaded) {
- userLoaded = true;
- $rootScope.$broadcast('userLoaded');
- }
- }
-
- function updateAuthorizationHeader(headers) {
- var jwtToken = store.get('jwt_token');
- if (jwtToken) {
- headers['X-Authorization'] = 'Bearer ' + jwtToken;
- }
- return jwtToken;
- }
-
- function setAuthorizationRequestHeader(request) {
- var jwtToken = store.get('jwt_token');
- if (jwtToken) {
- request.setRequestHeader('X-Authorization', 'Bearer ' + jwtToken);
- }
- return jwtToken;
- }
-
- function getTenantAdmins(tenantId, pageLink) {
- var deferred = $q.defer();
- var url = '/api/tenant/' + tenantId + '/users?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getCustomerUsers(customerId, pageLink) {
- var deferred = $q.defer();
- var url = '/api/customer/' + customerId + '/users?limit=' + pageLink.limit;
- if (angular.isDefined(pageLink.textSearch)) {
- url += '&textSearch=' + pageLink.textSearch;
- }
- if (angular.isDefined(pageLink.idOffset)) {
- url += '&idOffset=' + pageLink.idOffset;
- }
- if (angular.isDefined(pageLink.textOffset)) {
- url += '&textOffset=' + pageLink.textOffset;
- }
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function saveUser(user, sendActivationMail) {
- var deferred = $q.defer();
- var url = '/api/user';
- if (angular.isDefined(sendActivationMail)) {
- url += '?sendActivationMail=' + sendActivationMail;
- }
- $http.post(url, user).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function setUserCredentialsEnabled(userId, userCredentialsEnabled) {
- var deferred = $q.defer();
- var url = '/api/user/' + userId + '/userCredentialsEnabled';
- if (angular.isDefined(userCredentialsEnabled)) {
- url += '?userCredentialsEnabled=' + userCredentialsEnabled;
- }
- $http.post(url, null).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getUser(userId, ignoreErrors, config) {
- var deferred = $q.defer();
- var url = '/api/user/' + userId;
- if (!config) {
- config = {};
- }
- config = Object.assign(config, { ignoreErrors: ignoreErrors });
- $http.get(url, config).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteUser(userId) {
- var deferred = $q.defer();
- var url = '/api/user/' + userId;
- $http.delete(url).then(function success() {
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function sendActivationEmail(email) {
- var deferred = $q.defer();
- var url = '/api/user/sendActivationMail?email=' + email;
- $http.post(url, null).then(function success(response) {
- deferred.resolve(response);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getActivationLink(userId) {
- var deferred = $q.defer();
- var url = `/api/user/${userId}/activationLink`
- $http.get(url).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function forceDefaultPlace(to, params) {
- if (currentUser && isAuthenticated()) {
- if (currentUser.authority === 'TENANT_ADMIN' || currentUser.authority === 'CUSTOMER_USER') {
- if ((userHasDefaultDashboard() && $rootScope.forceFullscreen) || isPublic()) {
- if (to.name === 'home.profile') {
- if (userHasProfile()) {
- return false;
- } else {
- return true;
- }
- } else if ((to.name === 'home.dashboards.dashboard' || to.name === 'dashboard')
- && allowedDashboardIds.indexOf(params.dashboardId) > -1) {
- return false;
- } else {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- function setRedirectParams(params) {
- redirectParams = params;
- }
-
- function gotoDefaultPlace(params) {
- if (currentUser && isAuthenticated()) {
- var place = redirectParams ? redirectParams.toName : 'home.links';
- params = redirectParams ? redirectParams.params : params;
- redirectParams = null;
- if (currentUser.authority === 'TENANT_ADMIN' || currentUser.authority === 'CUSTOMER_USER') {
- if (userHasDefaultDashboard()) {
- place = $rootScope.forceFullscreen ? 'dashboard' : 'home.dashboards.dashboard';
- params = {dashboardId: currentUserDetails.additionalInfo.defaultDashboardId};
- } else if (isPublic()) {
- place = 'dashboard';
- params = {dashboardId: lastPublicDashboardId};
- }
- } else if (currentUser.authority === 'SYS_ADMIN') {
- adminService.checkUpdates().then(
- function (updateMessage) {
- if (updateMessage && updateMessage.updateAvailable) {
- toast.showInfo(updateMessage.message, 0, null, 'bottom right');
- }
- }
- );
- }
- $state.go(place, params, {reload: true});
- } else {
- $state.go('login', params);
- }
- }
-
- function userHasDefaultDashboard() {
- return currentUserDetails &&
- currentUserDetails.additionalInfo &&
- currentUserDetails.additionalInfo.defaultDashboardId;
- }
-
- function userForceFullscreen() {
- return (currentUser && currentUser.isPublic) ||
- (currentUserDetails.additionalInfo &&
- currentUserDetails.additionalInfo.defaultDashboardFullscreen &&
- currentUserDetails.additionalInfo.defaultDashboardFullscreen === true);
- }
-
- function userHasProfile() {
- return currentUser && !currentUser.isPublic;
- }
-
- function updateLastPublicDashboardId(dashboardId) {
- if (isPublic()) {
- lastPublicDashboardId = dashboardId;
- }
- }
-
- function isUserTokenAccessEnabled() {
- return userTokenAccessEnabled;
- }
-
- function loginAsUser(userId) {
- var url = '/api/user/' + userId + '/token';
- $http.get(url).then(function success(response) {
- var token = response.data.token;
- var refreshToken = response.data.refreshToken;
- setUserFromJwtToken(token, refreshToken, true);
- }, function fail() {
- });
- }
-
-}
diff --git a/ui/src/app/api/widget.service.js b/ui/src/app/api/widget.service.js
deleted file mode 100644
index 4b706e827d..0000000000
--- a/ui/src/app/api/widget.service.js
+++ /dev/null
@@ -1,832 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import $ from 'jquery';
-import moment from 'moment';
-import tinycolor from 'tinycolor2';
-
-import thingsboardLedLight from '../components/led-light.directive';
-import thingsboardTimeseriesTableWidget from '../widget/lib/timeseries-table-widget';
-import thingsboardAlarmsTableWidget from '../widget/lib/alarms-table-widget';
-import thingsboardEntitiesTableWidget from '../widget/lib/entities-table-widget';
-import thingsboardEntitiesHierarchyWidget from '../widget/lib/entities-hierarchy-widget';
-import thingsboardExtensionsTableWidget from '../widget/lib/extensions-table-widget';
-import thingsboardDateRangeNavigatorWidget from '../widget/lib/date-range-navigator/date-range-navigator';
-import thingsboardMultipleInputWidget from '../widget/lib/multiple-input-widget';
-import thingsboardWebCameraInputWidget from '../widget/lib/web-camera-input-widget';
-
-import thingsboardRpcWidgets from '../widget/lib/rpc';
-
-import thingsboardJsonToString from '../components/tb-json-to-string.directive';
-
-import TbFlot from '../widget/lib/flot-widget';
-import TbAnalogueLinearGauge from '../widget/lib/analogue-linear-gauge';
-import TbAnalogueRadialGauge from '../widget/lib/analogue-radial-gauge';
-import TbAnalogueCompass from '../widget/lib/analogue-compass';
-import TbCanvasDigitalGauge from '../widget/lib/canvas-digital-gauge';
-import TbMapWidget from '../widget/lib/map-widget';
-import TbMapWidgetV2 from '../widget/lib/map-widget2';
-import TripAnimationWidget from '../widget/lib/tripAnimation/trip-animation-widget';
-
-
-import 'jquery.terminal/js/jquery.terminal.min.js';
-import 'jquery.terminal/css/jquery.terminal.min.css';
-
-import 'oclazyload';
-import cssjs from '../../vendor/css.js/css';
-
-import thingsboardTypes from '../common/types.constant';
-import thingsboardUtils from '../common/utils.service';
-
-export default angular.module('thingsboard.api.widget', ['oc.lazyLoad', thingsboardLedLight,
- thingsboardTimeseriesTableWidget, thingsboardAlarmsTableWidget, thingsboardEntitiesTableWidget,
- thingsboardEntitiesHierarchyWidget, thingsboardExtensionsTableWidget, thingsboardDateRangeNavigatorWidget,
- thingsboardMultipleInputWidget, thingsboardWebCameraInputWidget, thingsboardRpcWidgets, thingsboardTypes,
- thingsboardUtils, thingsboardJsonToString, TripAnimationWidget])
- .factory('widgetService', WidgetService)
- .name;
-
-/*@ngInject*/
-function WidgetService($rootScope, $http, $q, $filter, $ocLazyLoad, $window, $translate, types, utils) {
-
- $window.$ = $;
- $window.jQuery = $;
- $window.moment = moment;
- $window.tinycolor = tinycolor;
- $window.lazyLoad = $ocLazyLoad;
-
- $window.TbFlot = TbFlot;
- $window.TbAnalogueLinearGauge = TbAnalogueLinearGauge;
- $window.TbAnalogueRadialGauge = TbAnalogueRadialGauge;
- $window.TbAnalogueCompass = TbAnalogueCompass;
- $window.TbCanvasDigitalGauge = TbCanvasDigitalGauge;
- $window.TbMapWidget = TbMapWidget;
- $window.TbMapWidgetV2 = TbMapWidgetV2;
-
- $window.cssjs = cssjs;
-
- var cssParser = new cssjs();
- cssParser.testMode = false;
-
- var missingWidgetType;
- var errorWidgetType;
-
- var editingWidgetType;
-
- var widgetsInfoInMemoryCache = {};
- var widgetsTypeFunctionsInMemoryCache = {};
- var widgetsInfoFetchQueue = {};
-
- var allWidgetsBundles = undefined;
- var systemWidgetsBundles = undefined;
- var tenantWidgetsBundles = undefined;
-
- $rootScope.widgetServiceStateChangeStartHandle = $rootScope.$on('$stateChangeStart', function () {
- invalidateWidgetsBundleCache();
- });
-
- initEditingWidgetType();
- initWidgetPlaceholders();
-
- var service = {
- getWidgetTemplate: getWidgetTemplate,
- getSystemWidgetsBundles: getSystemWidgetsBundles,
- getTenantWidgetsBundles: getTenantWidgetsBundles,
- getAllWidgetsBundles: getAllWidgetsBundles,
- getSystemWidgetsBundlesByPageLink: getSystemWidgetsBundlesByPageLink,
- getTenantWidgetsBundlesByPageLink: getTenantWidgetsBundlesByPageLink,
- getAllWidgetsBundlesByPageLink: getAllWidgetsBundlesByPageLink,
- getWidgetsBundleByAlias: getWidgetsBundleByAlias,
- saveWidgetsBundle: saveWidgetsBundle,
- getWidgetsBundle: getWidgetsBundle,
- deleteWidgetsBundle: deleteWidgetsBundle,
- getBundleWidgetTypes: getBundleWidgetTypes,
- getWidgetInfo: getWidgetInfo,
- getWidgetTypeFunction: getWidgetTypeFunction,
- getInstantWidgetInfo: getInstantWidgetInfo,
- deleteWidgetType: deleteWidgetType,
- saveWidgetType: saveWidgetType,
- saveImportedWidgetType: saveImportedWidgetType,
- getWidgetType: getWidgetType,
- getWidgetTypeById: getWidgetTypeById,
- toWidgetInfo: toWidgetInfo
- }
-
- return service;
-
- function initEditingWidgetType() {
- if ($rootScope.widgetEditMode) {
- editingWidgetType =
- toWidgetType({
- widgetName: $rootScope.editWidgetInfo.widgetName,
- alias: 'customWidget',
- type: $rootScope.editWidgetInfo.type,
- sizeX: $rootScope.editWidgetInfo.sizeX,
- sizeY: $rootScope.editWidgetInfo.sizeY,
- resources: $rootScope.editWidgetInfo.resources,
- templateHtml: $rootScope.editWidgetInfo.templateHtml,
- templateCss: $rootScope.editWidgetInfo.templateCss,
- controllerScript: $rootScope.editWidgetInfo.controllerScript,
- settingsSchema: $rootScope.editWidgetInfo.settingsSchema,
- dataKeySettingsSchema: $rootScope.editWidgetInfo.dataKeySettingsSchema,
- defaultConfig: $rootScope.editWidgetInfo.defaultConfig
- }, {id: '1'}, { id: types.id.nullUid }, 'customWidgetBundle');
- }
- }
-
- function initWidgetPlaceholders() {
-
- missingWidgetType = {
- widgetName: 'Widget type not found',
- alias: 'undefined',
- sizeX: 8,
- sizeY: 6,
- resources: [],
- templateHtml: '',
- templateCss: '',
- controllerScript: 'self.onInit = function() {}',
- settingsSchema: '{}\n',
- dataKeySettingsSchema: '{}\n',
- defaultConfig: '{\n' +
- '"title": "Widget type not found",\n' +
- '"datasources": [],\n' +
- '"settings": {}\n' +
- '}\n'
- };
-
- errorWidgetType = {
- widgetName: 'Error loading widget',
- alias: 'error',
- sizeX: 8,
- sizeY: 6,
- resources: [],
- templateHtml: 'widget.widget-type-load-error
',
- templateCss: '',
- controllerScript: 'self.onInit = function() {}',
- settingsSchema: '{}\n',
- dataKeySettingsSchema: '{}\n',
- defaultConfig: '{\n' +
- '"title": "Widget failed to load",\n' +
- '"datasources": [],\n' +
- '"settings": {}\n' +
- '}\n'
- };
- }
-
- function toWidgetInfo(widgetType) {
-
- var widgetInfo = {
- widgetName: widgetType.name,
- alias: widgetType.alias
- }
-
- var descriptor = widgetType.descriptor;
-
- widgetInfo.type = descriptor.type;
- widgetInfo.sizeX = descriptor.sizeX;
- widgetInfo.sizeY = descriptor.sizeY;
- widgetInfo.resources = descriptor.resources;
- widgetInfo.templateHtml = descriptor.templateHtml;
- widgetInfo.templateCss = descriptor.templateCss;
- widgetInfo.controllerScript = descriptor.controllerScript;
- widgetInfo.settingsSchema = descriptor.settingsSchema;
- widgetInfo.dataKeySettingsSchema = descriptor.dataKeySettingsSchema;
- widgetInfo.defaultConfig = descriptor.defaultConfig;
-
- return widgetInfo;
- }
-
- function toWidgetType(widgetInfo, id, tenantId, bundleAlias) {
- var widgetType = {
- id: id,
- tenantId: tenantId,
- bundleAlias: bundleAlias,
- alias: widgetInfo.alias,
- name: widgetInfo.widgetName
- }
-
- var descriptor = {
- type: widgetInfo.type,
- sizeX: widgetInfo.sizeX,
- sizeY: widgetInfo.sizeY,
- resources: widgetInfo.resources,
- templateHtml: widgetInfo.templateHtml,
- templateCss: widgetInfo.templateCss,
- controllerScript: widgetInfo.controllerScript,
- settingsSchema: widgetInfo.settingsSchema,
- dataKeySettingsSchema: widgetInfo.dataKeySettingsSchema,
- defaultConfig: widgetInfo.defaultConfig
- }
-
- widgetType.descriptor = descriptor;
-
- return widgetType;
- }
-
- function getWidgetTemplate(type) {
- var deferred = $q.defer();
- var templateWidgetType = types.widgetType.timeseries;
- for (var t in types.widgetType) {
- var widgetType = types.widgetType[t];
- if (widgetType.value === type) {
- templateWidgetType = widgetType;
- break;
- }
- }
- getWidgetType(templateWidgetType.template.bundleAlias,
- templateWidgetType.template.alias, true).then(
- function success(widgetType) {
- var widgetInfo = toWidgetInfo(widgetType);
- widgetInfo.alias = undefined;
- deferred.resolve(widgetInfo);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- /** Cache functions **/
-
- function createWidgetInfoCacheKey(bundleAlias, widgetTypeAlias, isSystem) {
- return (isSystem ? 'sys_' : '') + bundleAlias + '_' + widgetTypeAlias;
- }
-
- function getWidgetInfoFromCache(bundleAlias, widgetTypeAlias, isSystem) {
- var key = createWidgetInfoCacheKey(bundleAlias, widgetTypeAlias, isSystem);
- return widgetsInfoInMemoryCache[key];
- }
-
- function getWidgetTypeFunctionFromCache(bundleAlias, widgetTypeAlias, isSystem) {
- var key = createWidgetInfoCacheKey(bundleAlias, widgetTypeAlias, isSystem);
- return widgetsTypeFunctionsInMemoryCache[key];
- }
-
- function putWidgetInfoToCache(widgetInfo, bundleAlias, widgetTypeAlias, isSystem) {
- var key = createWidgetInfoCacheKey(bundleAlias, widgetTypeAlias, isSystem);
- widgetsInfoInMemoryCache[key] = widgetInfo;
- }
-
- function putWidgetTypeFunctionToCache(widgetTypeFunction, bundleAlias, widgetTypeAlias, isSystem) {
- var key = createWidgetInfoCacheKey(bundleAlias, widgetTypeAlias, isSystem);
- widgetsTypeFunctionsInMemoryCache[key] = widgetTypeFunction;
- }
-
- function deleteWidgetInfoFromCache(bundleAlias, widgetTypeAlias, isSystem) {
- var key = createWidgetInfoCacheKey(bundleAlias, widgetTypeAlias, isSystem);
- delete widgetsInfoInMemoryCache[key];
- delete widgetsTypeFunctionsInMemoryCache[key];
- }
-
- function deleteWidgetsBundleFromCache(bundleAlias, isSystem) {
- var key = (isSystem ? 'sys_' : '') + bundleAlias;
- for (var cacheKey in widgetsInfoInMemoryCache) {
- if (cacheKey.startsWith(key)) {
- delete widgetsInfoInMemoryCache[cacheKey];
- delete widgetsTypeFunctionsInMemoryCache[cacheKey];
- }
- }
- }
-
- /** Bundle functions **/
-
- function invalidateWidgetsBundleCache() {
- allWidgetsBundles = undefined;
- systemWidgetsBundles = undefined;
- tenantWidgetsBundles = undefined;
- }
-
- function loadWidgetsBundleCache(config) {
- var deferred = $q.defer();
- if (!allWidgetsBundles) {
- var url = '/api/widgetsBundles';
- $http.get(url, config).then(function success(response) {
- allWidgetsBundles = response.data;
- systemWidgetsBundles = [];
- tenantWidgetsBundles = [];
- allWidgetsBundles = $filter('orderBy')(allWidgetsBundles, ['+title', '-createdTime']);
- for (var i = 0; i < allWidgetsBundles.length; i++) {
- var widgetsBundle = allWidgetsBundles[i];
- if (widgetsBundle.tenantId.id === types.id.nullUid) {
- systemWidgetsBundles.push(widgetsBundle);
- } else {
- tenantWidgetsBundles.push(widgetsBundle);
- }
- }
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- } else {
- deferred.resolve();
- }
- return deferred.promise;
- }
-
-
- function getSystemWidgetsBundles(config) {
- var deferred = $q.defer();
- loadWidgetsBundleCache(config).then(
- function success() {
- deferred.resolve(systemWidgetsBundles);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function getTenantWidgetsBundles(config) {
- var deferred = $q.defer();
- loadWidgetsBundleCache(config).then(
- function success() {
- deferred.resolve(tenantWidgetsBundles);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function getAllWidgetsBundles(config) {
- var deferred = $q.defer();
- loadWidgetsBundleCache(config).then(
- function success() {
- deferred.resolve(allWidgetsBundles);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function getSystemWidgetsBundlesByPageLink(pageLink) {
- var deferred = $q.defer();
- loadWidgetsBundleCache().then(
- function success() {
- utils.filterSearchTextEntities(systemWidgetsBundles, 'title', pageLink, deferred);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function getTenantWidgetsBundlesByPageLink(pageLink) {
- var deferred = $q.defer();
- loadWidgetsBundleCache().then(
- function success() {
- utils.filterSearchTextEntities(tenantWidgetsBundles, 'title', pageLink, deferred);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function getAllWidgetsBundlesByPageLink(pageLink) {
- var deferred = $q.defer();
- loadWidgetsBundleCache().then(
- function success() {
- utils.filterSearchTextEntities(allWidgetsBundles, 'title', pageLink, deferred);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function getWidgetsBundleByAlias(bundleAlias) {
- var deferred = $q.defer();
- loadWidgetsBundleCache().then(
- function success() {
- var widgetsBundles = $filter('filter')(allWidgetsBundles, {alias: bundleAlias});
- if (widgetsBundles.length > 0) {
- deferred.resolve(widgetsBundles[0]);
- } else {
- deferred.resolve();
- }
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function saveWidgetsBundle(widgetsBundle) {
- var deferred = $q.defer();
- var url = '/api/widgetsBundle';
- $http.post(url, widgetsBundle).then(function success(response) {
- invalidateWidgetsBundleCache();
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- function getWidgetsBundle(widgetsBundleId) {
- var deferred = $q.defer();
-
- var url = '/api/widgetsBundle/' + widgetsBundleId;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
-
- return deferred.promise;
- }
-
- function deleteWidgetsBundle(widgetsBundleId) {
- var deferred = $q.defer();
-
- getWidgetsBundle(widgetsBundleId).then(
- function success(response) {
- var widgetsBundle = response;
- var url = '/api/widgetsBundle/' + widgetsBundleId;
- $http.delete(url).then(function success() {
- invalidateWidgetsBundleCache();
- deleteWidgetsBundleFromCache(widgetsBundle.alias,
- widgetsBundle.tenantId.id === types.id.nullUid);
- deferred.resolve();
- }, function fail(response) {
- deferred.reject(response.data);
- });
- },
- function fail() {
- deferred.reject();
- }
- );
-
- return deferred.promise;
- }
-
- function getBundleWidgetTypes(bundleAlias, isSystem) {
- var deferred = $q.defer();
- var url = '/api/widgetTypes?isSystem=' + (isSystem ? 'true' : 'false') +
- '&bundleAlias='+bundleAlias;
- $http.get(url, null).then(function success(response) {
- deferred.resolve(response.data);
- }, function fail(response) {
- deferred.reject(response.data);
- });
- return deferred.promise;
- }
-
- /** Widget type functions **/
-
- function getInstantWidgetInfo(widget) {
- var widgetInfo = getWidgetInfoFromCache(widget.bundleAlias, widget.typeAlias, widget.isSystemType);
- if (widgetInfo) {
- return widgetInfo;
- } else {
- return {};
- }
- }
-
- function resolveWidgetsInfoFetchQueue(key, widgetInfo) {
- var fetchQueue = widgetsInfoFetchQueue[key];
- if (fetchQueue) {
- for (var q in fetchQueue) {
- if (isNaN(q))
- continue;
- fetchQueue[q].resolve(widgetInfo);
- }
- delete widgetsInfoFetchQueue[key];
- }
- }
-
- function getWidgetInfo(bundleAlias, widgetTypeAlias, isSystem) {
- var deferred = $q.defer();
- var widgetInfo = getWidgetInfoFromCache(bundleAlias, widgetTypeAlias, isSystem);
- if (widgetInfo) {
- deferred.resolve(widgetInfo);
- } else {
- if ($rootScope.widgetEditMode) {
- loadWidget(editingWidgetType, bundleAlias, isSystem, deferred);
- } else {
- var key = createWidgetInfoCacheKey(bundleAlias, widgetTypeAlias, isSystem);
- var fetchQueue = widgetsInfoFetchQueue[key];
- if (fetchQueue) {
- fetchQueue.push(deferred);
- } else {
- fetchQueue = [];
- widgetsInfoFetchQueue[key] = fetchQueue;
- getWidgetType(bundleAlias, widgetTypeAlias, isSystem).then(
- function success(widgetType) {
- loadWidget(widgetType, bundleAlias, isSystem, deferred);
- }, function fail() {
- deferred.resolve(missingWidgetType);
- resolveWidgetsInfoFetchQueue(key, missingWidgetType);
- }
- );
- }
- }
- }
- return deferred.promise;
- }
-
- function getWidgetTypeFunction(bundleAlias, widgetTypeAlias, isSystem) {
- var widgetType = getWidgetTypeFunctionFromCache(bundleAlias, widgetTypeAlias, isSystem);
- return widgetType;
- }
-
- function createWidgetTypeFunction(widgetInfo, name) {
- var widgetTypeFunctionBody = 'return function '+ name +' (ctx) {\n' +
- ' var self = this;\n' +
- ' self.ctx = ctx;\n\n'; /*+
-
- ' self.onInit = function() {\n\n' +
-
- ' }\n\n' +
-
- ' self.onDataUpdated = function() {\n\n' +
-
- ' }\n\n' +
-
- ' self.useCustomDatasources = function() {\n\n' +
-
- ' }\n\n' +
-
- ' self.typeParameters = function() {\n\n' +
- return {
- useCustomDatasources: false,
- maxDatasources: -1, //unlimited
- maxDataKeys: -1, //unlimited
- dataKeysOptional: false,
- stateData: false
- };
- ' }\n\n' +
-
- ' self.actionSources = function() {\n\n' +
- return {
- 'headerButton': {
- name: 'Header button',
- multiple: true
- }
- };
- }\n\n' +
- ' self.onResize = function() {\n\n' +
-
- ' }\n\n' +
-
- ' self.onEditModeChanged = function() {\n\n' +
-
- ' }\n\n' +
-
- ' self.onMobileModeChanged = function() {\n\n' +
-
- ' }\n\n' +
-
- ' self.getSettingsSchema = function() {\n\n' +
-
- ' }\n\n' +
-
- ' self.getDataKeySettingsSchema = function() {\n\n' +
-
- ' }\n\n' +
-
- ' self.onDestroy = function() {\n\n' +
-
- ' }\n\n' +
- '}';*/
-
- widgetTypeFunctionBody += widgetInfo.controllerScript;
- widgetTypeFunctionBody += '\n};\n';
- try {
- var widgetTypeFunction = new Function(widgetTypeFunctionBody);
- var widgetType = widgetTypeFunction.apply(this);
- var widgetTypeInstance = new widgetType();
- var result = {
- widgetTypeFunction: widgetType
- };
- if (angular.isFunction(widgetTypeInstance.getSettingsSchema)) {
- result.settingsSchema = widgetTypeInstance.getSettingsSchema();
- }
- if (angular.isFunction(widgetTypeInstance.getDataKeySettingsSchema)) {
- result.dataKeySettingsSchema = widgetTypeInstance.getDataKeySettingsSchema();
- }
- if (angular.isFunction(widgetTypeInstance.typeParameters)) {
- result.typeParameters = widgetTypeInstance.typeParameters();
- } else {
- result.typeParameters = {};
- }
- if (angular.isFunction(widgetTypeInstance.useCustomDatasources)) {
- result.typeParameters.useCustomDatasources = widgetTypeInstance.useCustomDatasources();
- } else {
- result.typeParameters.useCustomDatasources = false;
- }
- if (angular.isUndefined(result.typeParameters.maxDatasources)) {
- result.typeParameters.maxDatasources = -1;
- }
- if (angular.isUndefined(result.typeParameters.maxDataKeys)) {
- result.typeParameters.maxDataKeys = -1;
- }
- if (angular.isUndefined(result.typeParameters.dataKeysOptional)) {
- result.typeParameters.dataKeysOptional = false;
- }
- if (angular.isUndefined(result.typeParameters.stateData)) {
- result.typeParameters.stateData = false;
- }
- if (angular.isFunction(widgetTypeInstance.actionSources)) {
- result.actionSources = widgetTypeInstance.actionSources();
- } else {
- result.actionSources = {};
- }
- for (var actionSourceId in types.widgetActionSources) {
- result.actionSources[actionSourceId] = angular.copy(types.widgetActionSources[actionSourceId]);
- result.actionSources[actionSourceId].name = $translate.instant(result.actionSources[actionSourceId].name) + '';
- }
-
- return result;
- } catch (e) {
- utils.processWidgetException(e);
- throw e;
- }
- }
-
- function processWidgetLoadError(errorMessages, cacheKey, deferred) {
- var widgetInfo = angular.copy(errorWidgetType);
- for (var e in errorMessages) {
- var error = errorMessages[e];
- widgetInfo.templateHtml += '
' + error + '
';
- }
- widgetInfo.templateHtml += '
';
- deferred.resolve(widgetInfo);
- resolveWidgetsInfoFetchQueue(cacheKey, widgetInfo);
- }
-
- function loadWidget(widgetType, bundleAlias, isSystem, deferred) {
- var widgetInfo = toWidgetInfo(widgetType);
- var key = createWidgetInfoCacheKey(bundleAlias, widgetInfo.alias, isSystem);
- loadWidgetResources(widgetInfo, bundleAlias, isSystem).then(
- function success() {
- var widgetType = null;
- try {
- widgetType = createWidgetTypeFunction(widgetInfo, key);
- } catch (e) {
- var details = utils.parseException(e);
- var errorMessage = 'Failed to compile widget script. \n Error: ' + details.message;
- processWidgetLoadError([errorMessage], key, deferred);
- }
- if (widgetType) {
- if (widgetType.settingsSchema) {
- widgetInfo.typeSettingsSchema = widgetType.settingsSchema;
- }
- if (widgetType.dataKeySettingsSchema) {
- widgetInfo.typeDataKeySettingsSchema = widgetType.dataKeySettingsSchema;
- }
- widgetInfo.typeParameters = widgetType.typeParameters;
- widgetInfo.actionSources = widgetType.actionSources;
- putWidgetInfoToCache(widgetInfo, bundleAlias, widgetInfo.alias, isSystem);
- putWidgetTypeFunctionToCache(widgetType.widgetTypeFunction, bundleAlias, widgetInfo.alias, isSystem);
- deferred.resolve(widgetInfo);
- resolveWidgetsInfoFetchQueue(key, widgetInfo);
- }
- }, function fail(errorMessages) {
- processWidgetLoadError(errorMessages, key, deferred);
- }
- );
- }
-
- function getWidgetType(bundleAlias, widgetTypeAlias, isSystem) {
- var deferred = $q.defer();
- var url = '/api/widgetType?isSystem=' + (isSystem ? 'true' : 'false') +
- '&bundleAlias='+bundleAlias+'&alias='+widgetTypeAlias;
- $http.get(url, null).then(function success(response) {
- var widgetType = response.data;
- deferred.resolve(widgetType);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function getWidgetTypeById(widgetTypeId) {
- var deferred = $q.defer();
- var url = '/api/widgetType/' + widgetTypeId;
- $http.get(url, null).then(function success(response) {
- var widgetType = response.data;
- deferred.resolve(widgetType);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function deleteWidgetType(bundleAlias, widgetTypeAlias, isSystem) {
- var deferred = $q.defer();
- getWidgetType(bundleAlias, widgetTypeAlias, isSystem).then(
- function success(widgetType) {
- var url = '/api/widgetType/' + widgetType.id.id;
- $http.delete(url).then(function success() {
- deleteWidgetInfoFromCache(bundleAlias, widgetTypeAlias, isSystem);
- deferred.resolve();
- }, function fail() {
- deferred.reject();
- });
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
- function saveWidgetType(widgetInfo, id, bundleAlias) {
- var deferred = $q.defer();
- var widgetType = toWidgetType(widgetInfo, id, undefined, bundleAlias);
- var url = '/api/widgetType';
- $http.post(url, widgetType).then(function success(response) {
- var widgetType = response.data;
- deleteWidgetInfoFromCache(widgetType.bundleAlias, widgetType.alias, widgetType.tenantId.id === types.id.nullUid);
- deferred.resolve(widgetType);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function saveImportedWidgetType(widgetType) {
- var deferred = $q.defer();
- var url = '/api/widgetType';
- $http.post(url, widgetType).then(function success(response) {
- var widgetType = response.data;
- deleteWidgetInfoFromCache(widgetType.bundleAlias, widgetType.alias, widgetType.tenantId.id === types.id.nullUid);
- deferred.resolve(widgetType);
- }, function fail() {
- deferred.reject();
- });
- return deferred.promise;
- }
-
- function loadWidgetResources(widgetInfo, bundleAlias, isSystem) {
-
- var deferred = $q.defer();
- var errors = [];
-
- var widgetNamespace = "widget-type-" + (isSystem ? 'sys-' : '') + bundleAlias + '-' + widgetInfo.alias;
- cssParser.cssPreviewNamespace = widgetNamespace;
- cssParser.createStyleElement(widgetNamespace, widgetInfo.templateCss);
-
- function loadNextOrComplete(i) {
- i++;
- if (i < widgetInfo.resources.length) {
- loadNext(i);
- } else {
- if (errors.length > 0) {
- deferred.reject(errors);
- } else {
- deferred.resolve();
- }
- }
- }
-
- function loadNext(i) {
- var resourceUrl = widgetInfo.resources[i].url;
- if (resourceUrl && resourceUrl.length > 0) {
- $ocLazyLoad.load(resourceUrl).then(
- function success() {
- loadNextOrComplete(i);
- },
- function fail() {
- errors.push('Failed to load widget resource: \'' + resourceUrl + '\'');
- loadNextOrComplete(i);
- }
- );
- } else {
- loadNextOrComplete(i);
- }
- }
-
- if (widgetInfo.resources.length > 0) {
- loadNext(0);
- } else {
- deferred.resolve();
- }
-
- return deferred.promise;
- }
-
-}
diff --git a/ui/src/app/app.config.js b/ui/src/app/app.config.js
deleted file mode 100644
index 82b4f923ce..0000000000
--- a/ui/src/app/app.config.js
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import injectTapEventPlugin from 'react-tap-event-plugin';
-import UrlHandler from './url.handler';
-
-/* eslint-disable import/no-unresolved, import/default */
-
-import mdiIconSet from '../svg/mdi.svg';
-
-/* eslint-enable import/no-unresolved, import/default */
-
-const PRIMARY_BACKGROUND_COLOR = "#305680";//#2856b6";//"#3f51b5";
-const SECONDARY_BACKGROUND_COLOR = "#527dad";
-const HUE3_COLOR = "#a7c1de";
-
-/*@ngInject*/
-export default function AppConfig($provide,
- $urlRouterProvider,
- $locationProvider,
- $mdIconProvider,
- ngMdIconServiceProvider,
- $mdThemingProvider,
- $httpProvider,
- $translateProvider,
- storeProvider) {
-
- injectTapEventPlugin();
- $locationProvider.html5Mode(true);
- $urlRouterProvider.otherwise(UrlHandler);
- storeProvider.setCaching(false);
-
- $translateProvider.useSanitizeValueStrategy(null)
- .useMissingTranslationHandler('tbMissingTranslationHandler')
- .addInterpolation('$translateMessageFormatInterpolation')
- .useStaticFilesLoader({
- files: [
- {
- prefix: PUBLIC_PATH + 'locale/locale.constant-', //eslint-disable-line
- suffix: '.json'
- }
- ]
- })
- .registerAvailableLanguageKeys(SUPPORTED_LANGS, getLanguageAliases(SUPPORTED_LANGS)) //eslint-disable-line
- .fallbackLanguage('en_US') // must be before determinePreferredLanguage
- .uniformLanguageTag('java') // must be before determinePreferredLanguage
- .determinePreferredLanguage();
-
- $httpProvider.interceptors.push('globalInterceptor');
-
- $provide.decorator("$exceptionHandler", ['$delegate', '$injector', function ($delegate/*, $injector*/) {
- return function (exception, cause) {
-/* var rootScope = $injector.get("$rootScope");
- var $window = $injector.get("$window");
- var utils = $injector.get("utils");
- if (rootScope.widgetEditMode) {
- var parentScope = $window.parent.angular.element($window.frameElement).scope();
- var data = utils.parseException(exception);
- parentScope.$emit('widgetException', data);
- parentScope.$apply();
- }*/
- $delegate(exception, cause);
- };
- }]);
-
- $mdIconProvider.iconSet('mdi', mdiIconSet);
-
- ngMdIconServiceProvider
- .addShape('alpha-a-circle-outline', ' ')
- .addShape('alpha-e-circle-outline', ' ');
-
- configureTheme();
-
- function blueGrayTheme() {
- var tbPrimaryPalette = $mdThemingProvider.extendPalette('blue-grey');
- var tbAccentPalette = $mdThemingProvider.extendPalette('orange', {
- 'contrastDefaultColor': 'light'
- });
-
- $mdThemingProvider.definePalette('tb-primary', tbPrimaryPalette);
- $mdThemingProvider.definePalette('tb-accent', tbAccentPalette);
-
- $mdThemingProvider.theme('default')
- .primaryPalette('tb-primary')
- .accentPalette('tb-accent');
-
- $mdThemingProvider.theme('tb-dark')
- .primaryPalette('tb-primary')
- .accentPalette('tb-accent')
- .backgroundPalette('tb-primary')
- .dark();
- }
-
- function indigoTheme() {
- var tbPrimaryPalette = $mdThemingProvider.extendPalette('indigo', {
- '500': PRIMARY_BACKGROUND_COLOR,
- '600': SECONDARY_BACKGROUND_COLOR,
- 'A100': HUE3_COLOR
- });
-
- var tbAccentPalette = $mdThemingProvider.extendPalette('deep-orange');
-
- $mdThemingProvider.definePalette('tb-primary', tbPrimaryPalette);
- $mdThemingProvider.definePalette('tb-accent', tbAccentPalette);
-
- var tbDarkPrimaryPalette = $mdThemingProvider.extendPalette('tb-primary', {
- '500': '#9fa8da'
- });
-
- var tbDarkPrimaryBackgroundPalette = $mdThemingProvider.extendPalette('tb-primary', {
- '800': PRIMARY_BACKGROUND_COLOR
- });
-
- $mdThemingProvider.definePalette('tb-dark-primary', tbDarkPrimaryPalette);
- $mdThemingProvider.definePalette('tb-dark-primary-background', tbDarkPrimaryBackgroundPalette);
-
- $mdThemingProvider.theme('default')
- .primaryPalette('tb-primary')
- .accentPalette('tb-accent');
-
- $mdThemingProvider.theme('tb-dark')
- .primaryPalette('tb-dark-primary')
- .accentPalette('tb-accent')
- .backgroundPalette('tb-dark-primary-background')
- .dark();
- }
-
- function configureTheme() {
-
- var theme = 'indigo';
-
- if (theme === 'blueGray') {
- blueGrayTheme();
- } else {
- indigoTheme();
- }
-
- $mdThemingProvider.setDefaultTheme('default');
- //$mdThemingProvider.alwaysWatchTheme(true);
- }
-
- function getLanguageAliases(supportedLangs) {
- var aliases = {};
-
- supportedLangs.sort().forEach(function(item, index, array) {
- if (item.length === 2) {
- aliases[item] = item;
- aliases[item + '_*'] = item;
- } else {
- var key = item.slice(0, 2);
- if (index === 0 || key !== array[index - 1].slice(0, 2)) {
- aliases[key] = item;
- aliases[key + '_*'] = item;
- } else {
- aliases[item] = item;
- }
- }
- });
-
- return aliases;
- }
-}
diff --git a/ui/src/app/app.js b/ui/src/app/app.js
deleted file mode 100644
index 0b48a76cdb..0000000000
--- a/ui/src/app/app.js
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import './ie.support';
-
-import 'event-source-polyfill';
-
-import angular from 'angular';
-import ngMaterial from 'angular-material';
-import ngMdIcons from 'angular-material-icons';
-import ngCookies from 'angular-cookies';
-import angularSocialshare from 'angular-socialshare';
-import 'angular-translate';
-import 'angular-translate-loader-static-files';
-import 'angular-translate-storage-local';
-import 'angular-translate-storage-cookie';
-import 'angular-translate-handler-log';
-import 'angular-translate-interpolation-messageformat';
-import 'md-color-picker';
-import 'md-date-range-picker';
-import mdPickers from 'mdPickers';
-import ngSanitize from 'angular-sanitize';
-import FBAngular from 'angular-fullscreen';
-import vAccordion from 'v-accordion';
-import ngAnimate from 'angular-animate';
-import 'angular-websocket';
-import uiRouter from 'angular-ui-router';
-import angularJwt from 'angular-jwt';
-import 'angular-drag-and-drop-lists';
-import mdDataTable from 'angular-material-data-table';
-import fixedTableHeader from 'angular-fixed-table-header';
-import 'angular-material-expansion-panel';
-import ngTouch from 'angular-touch';
-import 'angular-carousel';
-import 'clipboard';
-import 'ngclipboard';
-import 'react';
-import 'react-dom';
-import 'material-ui';
-import 'react-schema-form';
-import react from 'ngreact';
-import '@flowjs/ng-flow/dist/ng-flow-standalone.min';
-import 'ngFlowchart/dist/ngFlowchart';
-import 'jstree/dist/jstree.min';
-import 'material-steppers/dist/material-steppers';
-import 'material-steppers/dist/material-steppers.css'
-import 'jstree-bootstrap-theme/dist/themes/proton/style.min.css';
-import 'typeface-roboto';
-import 'font-awesome/css/font-awesome.min.css';
-import 'angular-material/angular-material.min.css';
-import 'angular-material-icons/angular-material-icons.css';
-import 'angular-gridster/dist/angular-gridster.min.css';
-import 'v-accordion/dist/v-accordion.min.css';
-import 'md-color-picker/dist/mdColorPicker.min.css';
-import 'mdPickers/dist/mdPickers.min.css';
-import 'angular-hotkeys/build/hotkeys.min.css';
-import 'angular-carousel/dist/angular-carousel.min.css';
-import 'angular-material-expansion-panel/dist/md-expansion-panel.min.css';
-import 'ngFlowchart/dist/flowchart.css';
-import 'md-date-range-picker/src/md-date-range-picker.css';
-import '../scss/main.scss';
-
-import thingsboardThirdpartyFix from './common/thirdparty-fix';
-import thingsboardTranslateHandler from './locale/translate-handler';
-import thingsboardLogin from './login';
-import thingsboardDialogs from './components/datakey-config-dialog.controller';
-import thingsboardMenu from './services/menu.service';
-import thingsboardRaf from './common/raf.provider';
-import thingsboardUtils from './common/utils.service';
-import thingsboardDashboardUtils from './common/dashboard-utils.service';
-import thingsboardTypes from './common/types.constant';
-import thingsboardApiTime from './api/time.service';
-import thingsboardKeyboardShortcut from './components/keyboard-shortcut.filter';
-import thingsboardHelp from './help/help.directive';
-import thingsboardToast from './services/toast';
-import thingsboardClipboard from './services/clipboard.service';
-import thingsboardHome from './layout';
-import thingsboardApiLogin from './api/login.service';
-import thingsboardApiDevice from './api/device.service';
-import thingsboardApiEntityView from './api/entity-view.service';
-import thingsboardApiUser from './api/user.service';
-import thingsboardApiEntityRelation from './api/entity-relation.service';
-import thingsboardApiAsset from './api/asset.service';
-import thingsboardApiAttribute from './api/attribute.service';
-import thingsboardApiEntity from './api/entity.service';
-import thingsboardApiAlarm from './api/alarm.service';
-import thingsboardApiAuditLog from './api/audit-log.service';
-import thingsboardApiComponentDescriptor from './api/component-descriptor.service';
-import thingsboardApiRuleChain from './api/rule-chain.service';
-
-import AppConfig from './app.config';
-import GlobalInterceptor from './global-interceptor.service';
-import AppRun from './app.run';
-
-angular.module('thingsboard', [
- ngMaterial,
- ngMdIcons,
- ngCookies,
- angularSocialshare,
- 'pascalprecht.translate',
- 'mdColorPicker',
- 'ngMaterialDateRangePicker',
- mdPickers,
- ngSanitize,
- FBAngular.name,
- vAccordion,
- ngAnimate,
- 'ngWebSocket',
- angularJwt,
- 'dndLists',
- mdDataTable,
- fixedTableHeader,
- 'material.components.expansionPanels',
- ngTouch,
- 'angular-carousel',
- 'ngclipboard',
- react.name,
- 'flow',
- 'flowchart',
- 'mdSteppers',
- thingsboardThirdpartyFix,
- thingsboardTranslateHandler,
- thingsboardLogin,
- thingsboardDialogs,
- thingsboardMenu,
- thingsboardRaf,
- thingsboardUtils,
- thingsboardDashboardUtils,
- thingsboardTypes,
- thingsboardApiTime,
- thingsboardKeyboardShortcut,
- thingsboardHelp,
- thingsboardToast,
- thingsboardClipboard,
- thingsboardHome,
- thingsboardApiLogin,
- thingsboardApiDevice,
- thingsboardApiEntityView,
- thingsboardApiUser,
- thingsboardApiEntityRelation,
- thingsboardApiAsset,
- thingsboardApiAttribute,
- thingsboardApiEntity,
- thingsboardApiAlarm,
- thingsboardApiAuditLog,
- thingsboardApiComponentDescriptor,
- thingsboardApiRuleChain,
- uiRouter])
- .config(AppConfig)
- .factory('globalInterceptor', GlobalInterceptor)
- .run(AppRun);
diff --git a/ui/src/app/app.run.js b/ui/src/app/app.run.js
deleted file mode 100644
index 3255c0a917..0000000000
--- a/ui/src/app/app.run.js
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright © 2016-2020 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import Flow from '@flowjs/ng-flow/dist/ng-flow-standalone.min';
-import UrlHandler from './url.handler';
-
-/*@ngInject*/
-export default function AppRun($rootScope, $window, $injector, $location, $log, $state, $mdDialog, $filter, $q, loginService, userService, $translate) {
-
- $window.Flow = Flow;
- var frame = null;
- try {
- frame = $window.frameElement;
- } catch(e) {
- // ie11 fix
- }
-
- var forbiddenDialog = null;
-
- $rootScope.iframeMode = false;
-
- if (frame) {
- $rootScope.iframeMode = true;
- var dataWidgetAttr = angular.element(frame).attr('data-widget');
- if (dataWidgetAttr) {
- $rootScope.editWidgetInfo = angular.fromJson(dataWidgetAttr);
- $rootScope.widgetEditMode = true;
- }
- }
-
- initWatchers();
-
- var skipStateChange = false;
-
- function initWatchers() {
- $rootScope.unauthenticatedHandle = $rootScope.$on('unauthenticated', function (event, doLogout) {
- if (doLogout) {
- gotoPublicModule('login');
- } else {
- UrlHandler($injector, $location);
- }
- });
-
- $rootScope.authenticatedHandle = $rootScope.$on('authenticated', function () {
- UrlHandler($injector, $location);
- });
-
- $rootScope.forbiddenHandle = $rootScope.$on('forbidden', function () {
- showForbiddenDialog();
- });
-
- $rootScope.stateChangeStartHandle = $rootScope.$on('$stateChangeStart', function (evt, to, params) {
-
- if (skipStateChange) {
- skipStateChange = false;
- return;
- }
-
- function waitForUserLoaded() {
- if ($rootScope.userLoadedHandle) {
- $rootScope.userLoadedHandle();
- }
- $rootScope.userLoadedHandle = $rootScope.$on('userLoaded', function () {
- $rootScope.userLoadedHandle();
- $state.go(to.name, params);
- });
- }
-
- function reloadUserFromPublicId() {
- userService.setUserFromJwtToken(null, null, false);
- waitForUserLoaded();
- userService.reloadUser();
- }
-
- var locationSearch = $location.search();
- var publicId = locationSearch.publicId;
- var activateToken = locationSearch.activateToken;
-
- if (to.url === '/createPassword?activateToken' && activateToken && activateToken.length) {
- userService.setUserFromJwtToken(null, null, false);
- }
-
- if (userService.isUserLoaded() === true) {
- if (userService.isAuthenticated()) {
- if (userService.isPublic()) {
- if (userService.parsePublicId() !== publicId) {
- evt.preventDefault();
- if (publicId && publicId.length > 0) {
- reloadUserFromPublicId();
- } else {
- userService.logout();
- }
- return;
- }
- }
- if (userService.forceDefaultPlace(to, params)) {
- evt.preventDefault();
- gotoDefaultPlace(params);
- } else {
- var authority = userService.getAuthority();
- if (to.module === 'public') {
- evt.preventDefault();
- gotoDefaultPlace(params);
- } else if (angular.isDefined(to.auth) &&
- to.auth.indexOf(authority) === -1) {
- evt.preventDefault();
- showForbiddenDialog();
- } else if (to.redirectTo) {
- evt.preventDefault();
- $state.go(to.redirectTo, params);
- } else if (to.name === 'home.dashboards.dashboard' && $rootScope.forceFullscreen) {
- evt.preventDefault();
- $state.go('dashboard', params);
- }
- }
- } else {
- if (publicId && publicId.length > 0) {
- evt.preventDefault();
- reloadUserFromPublicId();
- } else if (to.module === 'private') {
- evt.preventDefault();
- var redirectParams = {};
- redirectParams.toName = to.name;
- redirectParams.params = params;
- userService.setRedirectParams(redirectParams);
- gotoPublicModule('login', params);
- } else {
- evt.preventDefault();
- gotoPublicModule(to.name, params);
- }
- }
- } else {
- evt.preventDefault();
- waitForUserLoaded();
- }
- })
-
- $rootScope.pageTitle = 'ThingsBoard';
-
- $rootScope.stateChangeSuccessHandle = $rootScope.$on('$stateChangeSuccess', function (evt, to, params) {
- if (userService.isPublic() && to.name === 'dashboard') {
- $location.search('publicId', userService.getPublicId());
- userService.updateLastPublicDashboardId(params.dashboardId);
- }
- if (angular.isDefined(to.data.pageTitle)) {
- $translate(to.data.pageTitle).then(function (translation) {
- $rootScope.pageTitle = 'ThingsBoard | ' + translation;
- }, function (translationId) {
- $rootScope.pageTitle = 'ThingsBoard | ' + translationId;
- });
- }
- })
- }
-
- function gotoDefaultPlace(params) {
- userService.gotoDefaultPlace(params);
- }
-
- function gotoPublicModule(name, params) {
- let tasks = [];
- if (name === "login") {
- tasks.push(loginService.loadOAuth2Clients());
- }
- $q.all(tasks).then(
- () => {
- skipStateChange = true;
- $state.go(name, params);
- },
- () => {
- skipStateChange = true;
- $state.go(name, params);
- }
- );
- }
-
- function showForbiddenDialog() {
- if (forbiddenDialog === null) {
- $translate(['access.access-forbidden',
- 'access.access-forbidden-text',
- 'action.cancel',
- 'action.sign-in']).then(function (translations) {
- if (forbiddenDialog === null) {
- forbiddenDialog = $mdDialog.confirm()
- .title(translations['access.access-forbidden'])
- .htmlContent(translations['access.access-forbidden-text'])
- .cancel(translations['action.cancel'])
- .ok(translations['action.sign-in']);
- $mdDialog.show(forbiddenDialog).then(function () {
- forbiddenDialog = null;
- userService.logout();
- }, function () {
- forbiddenDialog = null;
- });
- }
- });
- }
- }
-}
diff --git a/ui/src/app/asset/add-asset.tpl.html b/ui/src/app/asset/add-asset.tpl.html
deleted file mode 100644
index fafd91329f..0000000000
--- a/ui/src/app/asset/add-asset.tpl.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-