aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/controller/iframeController.js7
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/controller/iframeDialogController.js71
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/services/crService.js31
-rw-r--r--vid-webpack-master/.angular-cli.json59
-rw-r--r--vid-webpack-master/.editorconfig12
-rw-r--r--vid-webpack-master/.gitignore57
-rw-r--r--vid-webpack-master/.node-version1
-rw-r--r--vid-webpack-master/.npm-version1
-rw-r--r--vid-webpack-master/CHANGELOG.md33
-rw-r--r--vid-webpack-master/LICENSE21
-rw-r--r--vid-webpack-master/README.md149
-rw-r--r--vid-webpack-master/cypress.json12
-rw-r--r--vid-webpack-master/cypress/fixtures/constants.ts3
-rw-r--r--vid-webpack-master/cypress/fixtures/example.json5
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/ala-carte.e2e.ts80
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/auditInfo.modal.e2e.ts37
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts130
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/instantiationStatus.e2e.ts50
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/service.popup.e2e.ts57
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/tenantIsolation.e2e.ts18
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/viewEdit.e2e.ts424
-rw-r--r--vid-webpack-master/cypress/integration/shared/error.message.popup.e2e.ts33
-rw-r--r--vid-webpack-master/cypress/integration/shared/spinner.e2e.ts36
-rw-r--r--vid-webpack-master/cypress/plugins/cy-ts-preprocessor.js26
-rw-r--r--vid-webpack-master/cypress/plugins/index.js6
-rw-r--r--vid-webpack-master/cypress/support/application/application.session.actions.ts21
-rw-r--r--vid-webpack-master/cypress/support/commands.ts15
-rw-r--r--vid-webpack-master/cypress/support/elements/element.actions.ts49
-rw-r--r--vid-webpack-master/cypress/support/elements/element.input.actions.ts46
-rw-r--r--vid-webpack-master/cypress/support/elements/element.select.actions.ts16
-rw-r--r--vid-webpack-master/cypress/support/elements/element.table.actions.ts15
-rw-r--r--vid-webpack-master/cypress/support/index.js30
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/jsonBuilder.ts31
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/aai.mock.ts80
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/a-la-carteService.json159
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstancePnfs.json1
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstances.json14
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServices.json46
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiSubDetails.json478
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiSubViewEditForComplexService.json113
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json274
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/auditInfoMSO.json12
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/auditInfoVid.json32
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicAsyncInstantiation.json274
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicRedux.json2003
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicService.json46
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/categoryParametres.json52
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/emptyObjectResponse.json1
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json2657
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.json15
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/service.json495
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/serviceWithVnfAndVfModules.json2718
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/subscribers.json24
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/topMenuInfo.json8
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/zones.json772
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/vid.mock.ts91
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/models/aaiSubDetails.model.ts8
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/models/aaiSubViewEdit.model.ts5
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/models/asyncInstantiation.model.ts36
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/models/pnf.model.ts3
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/models/service.model.ts27
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/models/serviceInstances.model.ts4
-rw-r--r--vid-webpack-master/cypress/support/steps/login.step.ts43
-rw-r--r--vid-webpack-master/cypress/tsconfig.json16
-rw-r--r--vid-webpack-master/karma.conf.js37
-rw-r--r--vid-webpack-master/package-lock.json18190
-rw-r--r--vid-webpack-master/package.json89
-rw-r--r--vid-webpack-master/polyfills.ts66
-rw-r--r--vid-webpack-master/pom.xml305
-rw-r--r--vid-webpack-master/postcss.config.js8
-rw-r--r--vid-webpack-master/protractor.conf.js43
-rw-r--r--vid-webpack-master/src/WEB-INF/web.xml61
-rw-r--r--vid-webpack-master/src/app/app.component.e2e-spec.js27
-rw-r--r--vid-webpack-master/src/app/app.component.html6
-rw-r--r--vid-webpack-master/src/app/app.component.scss24
-rw-r--r--vid-webpack-master/src/app/app.component.ts28
-rw-r--r--vid-webpack-master/src/app/app.module.ts79
-rw-r--r--vid-webpack-master/src/app/app.routing.ts40
-rw-r--r--vid-webpack-master/src/app/browseSdc/browseSdc.component.html26
-rw-r--r--vid-webpack-master/src/app/browseSdc/browseSdc.component.scss59
-rw-r--r--vid-webpack-master/src/app/browseSdc/browseSdc.component.ts176
-rw-r--r--vid-webpack-master/src/app/browseSdc/browseSdc.module.ts35
-rw-r--r--vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.component.ts29
-rw-r--r--vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.css4
-rw-r--r--vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.html18
-rw-r--r--vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.html26
-rw-r--r--vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.scss40
-rw-r--r--vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.ts59
-rw-r--r--vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.component.ts80
-rw-r--r--vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.html22
-rw-r--r--vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.scss58
-rw-r--r--vid-webpack-master/src/app/components/form-async/form-async.component.ts80
-rw-r--r--vid-webpack-master/src/app/components/form-async/form-async.style.scss15
-rw-r--r--vid-webpack-master/src/app/components/form-async/form-async.template.html67
-rw-r--r--vid-webpack-master/src/app/components/instance-popup/instance-popup.components.ts9
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.component.ts238
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.html168
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.scss64
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.service.spec.ts26
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.service.ts22
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-instance-details/servicePopupDataModel.ts32
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-popup.component.ts144
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-popup.html52
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-popup.scss185
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-popup.service.spec.ts138
-rw-r--r--vid-webpack-master/src/app/components/service-popup/service-popup.service.ts33
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.component.ts275
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.html114
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.scss64
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.service.spec.ts241
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.service.ts64
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnfPopupDataModel.ts26
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-popup-service.ts55
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-popup.components.ts190
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-popup.html54
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-popup.scss185
-rw-r--r--vid-webpack-master/src/app/components/vnf-popup/vnf-popup.service.spec.ts827
-rw-r--r--vid-webpack-master/src/app/configuration/vid.configuration.ts98
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.html35
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.scss398
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.ts166
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.spec.ts450
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts36
-rw-r--r--vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.html33
-rw-r--r--vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.scss95
-rw-r--r--vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.ts119
-rw-r--r--vid-webpack-master/src/app/drawingBoard/drawing-board-header/tmp_instansiate_request.ts52
-rw-r--r--vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.component.ts133
-rw-r--r--vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.html42
-rw-r--r--vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.scss274
-rw-r--r--vid-webpack-master/src/app/drawingBoard/drawingBoard.module.ts41
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.html13
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.scss16
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.ts77
-rw-r--r--vid-webpack-master/src/app/factories/models/requestDetails.model.ts126
-rw-r--r--vid-webpack-master/src/app/factories/mso.factory.spec.ts319
-rw-r--r--vid-webpack-master/src/app/factories/mso.factory.ts92
-rw-r--r--vid-webpack-master/src/app/global.actions.ts23
-rw-r--r--vid-webpack-master/src/app/global.reducer.ts29
-rw-r--r--vid-webpack-master/src/app/healthStatus/health-status.component.html36
-rw-r--r--vid-webpack-master/src/app/healthStatus/health-status.component.scss187
-rw-r--r--vid-webpack-master/src/app/healthStatus/health-status.component.ts42
-rw-r--r--vid-webpack-master/src/app/home/home.component.e2e-spec.js13
-rw-r--r--vid-webpack-master/src/app/home/home.component.html3
-rw-r--r--vid-webpack-master/src/app/home/home.component.scss4
-rw-r--r--vid-webpack-master/src/app/home/home.component.ts30
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/InstantiationStatus.module.ts33
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.html84
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.scss159
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.service.ts0
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.ts83
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.html100
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.scss277
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.service.spec.ts278
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.service.ts75
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.spec.ts88
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.ts145
-rw-r--r--vid-webpack-master/src/app/modules/inputs.module.ts20
-rw-r--r--vid-webpack-master/src/app/service.actions.ts197
-rw-r--r--vid-webpack-master/src/app/service.reducer.spec.ts286
-rw-r--r--vid-webpack-master/src/app/service.reducer.ts214
-rw-r--r--vid-webpack-master/src/app/services/aaiService/aai.actions.ts75
-rw-r--r--vid-webpack-master/src/app/services/aaiService/aai.epics.ts81
-rw-r--r--vid-webpack-master/src/app/services/aaiService/aai.service.ts189
-rw-r--r--vid-webpack-master/src/app/services/aaiService/responseInterfaces/getAicZonesResponseInterface.ts3
-rw-r--r--vid-webpack-master/src/app/services/aaiService/responseInterfaces/getCategoryParamsResponseInterface.ts10
-rw-r--r--vid-webpack-master/src/app/services/aaiService/responseInterfaces/getServiceModelResponseInterface.ts5
-rw-r--r--vid-webpack-master/src/app/services/aaiService/responseInterfaces/getServicesResponseInterface.ts9
-rw-r--r--vid-webpack-master/src/app/services/aaiService/responseInterfaces/getSubDetailsResponseInterface.ts12
-rw-r--r--vid-webpack-master/src/app/services/aaiService/responseInterfaces/getSubscribersResponseInterface.ts5
-rw-r--r--vid-webpack-master/src/app/services/configuration.service.ts34
-rw-r--r--vid-webpack-master/src/app/services/data.service.ts528
-rw-r--r--vid-webpack-master/src/app/services/flags.resolve.ts14
-rw-r--r--vid-webpack-master/src/app/services/msoService/mso.service.ts26
-rw-r--r--vid-webpack-master/src/app/services/sdc.service.ts28
-rw-r--r--vid-webpack-master/src/app/services/service-planning.service.spec.ts467
-rw-r--r--vid-webpack-master/src/app/services/service-planning.service.ts282
-rw-r--r--vid-webpack-master/src/app/shared/api.service.ts6
-rw-r--r--vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts27
-rw-r--r--vid-webpack-master/src/app/shared/components/error/error.component.service.ts35
-rw-r--r--vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.html4
-rw-r--r--vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.scss14
-rw-r--r--vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.ts10
-rw-r--r--vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.html10
-rw-r--r--vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss48
-rw-r--r--vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.ts11
-rw-r--r--vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts50
-rw-r--r--vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts51
-rw-r--r--vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts49
-rw-r--r--vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts18
-rw-r--r--vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts42
-rw-r--r--vid-webpack-master/src/app/shared/components/model-information/model-information.html12
-rw-r--r--vid-webpack-master/src/app/shared/components/model-information/model-information.scss34
-rw-r--r--vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html5
-rw-r--r--vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss26
-rw-r--r--vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts23
-rw-r--r--vid-webpack-master/src/app/shared/components/popover/popover.component.html8
-rw-r--r--vid-webpack-master/src/app/shared/components/popover/popover.component.scss4
-rw-r--r--vid-webpack-master/src/app/shared/components/popover/popover.component.ts17
-rw-r--r--vid-webpack-master/src/app/shared/components/spinner/spinner.component.html2
-rw-r--r--vid-webpack-master/src/app/shared/components/spinner/spinner.component.scss87
-rw-r--r--vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts42
-rw-r--r--vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts18
-rw-r--r--vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts39
-rw-r--r--vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts20
-rw-r--r--vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.spec.ts66
-rw-r--r--vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.ts24
-rw-r--r--vid-webpack-master/src/app/shared/directives/svg/svg.directive.html0
-rw-r--r--vid-webpack-master/src/app/shared/directives/svg/svg.directive.ts34
-rw-r--r--vid-webpack-master/src/app/shared/index.ts1
-rw-r--r--vid-webpack-master/src/app/shared/models/ServiceNodeTypes.ts8
-rw-r--r--vid-webpack-master/src/app/shared/models/aicZone.ts9
-rw-r--r--vid-webpack-master/src/app/shared/models/categoryParams.ts15
-rw-r--r--vid-webpack-master/src/app/shared/models/dynamicInput.ts123
-rw-r--r--vid-webpack-master/src/app/shared/models/externalComponentStatus.ts11
-rw-r--r--vid-webpack-master/src/app/shared/models/inputTypes.ts12
-rw-r--r--vid-webpack-master/src/app/shared/models/lcpRegion.ts11
-rw-r--r--vid-webpack-master/src/app/shared/models/lcpRegionTenants.ts13
-rw-r--r--vid-webpack-master/src/app/shared/models/lcpRegionsAndTenants.ts12
-rw-r--r--vid-webpack-master/src/app/shared/models/modelInfo.ts21
-rw-r--r--vid-webpack-master/src/app/shared/models/nodeModel.ts29
-rw-r--r--vid-webpack-master/src/app/shared/models/owningEntity.ts14
-rw-r--r--vid-webpack-master/src/app/shared/models/productFamily.ts13
-rw-r--r--vid-webpack-master/src/app/shared/models/project.ts14
-rw-r--r--vid-webpack-master/src/app/shared/models/selectOption.ts17
-rw-r--r--vid-webpack-master/src/app/shared/models/serviceInstance.ts28
-rw-r--r--vid-webpack-master/src/app/shared/models/serviceModel.ts44
-rw-r--r--vid-webpack-master/src/app/shared/models/serviceNodeTypeToModelKeyMapper.ts8
-rw-r--r--vid-webpack-master/src/app/shared/models/serviceType.ts17
-rw-r--r--vid-webpack-master/src/app/shared/models/subscriber.ts11
-rw-r--r--vid-webpack-master/src/app/shared/models/tenant.ts11
-rw-r--r--vid-webpack-master/src/app/shared/models/vfModule.ts39
-rw-r--r--vid-webpack-master/src/app/shared/models/vfModuleInstance.ts5
-rw-r--r--vid-webpack-master/src/app/shared/models/vfModuleTreeNode.ts17
-rw-r--r--vid-webpack-master/src/app/shared/models/vfModulesMap.ts5
-rw-r--r--vid-webpack-master/src/app/shared/models/vfcInstanceGroup.ts14
-rw-r--r--vid-webpack-master/src/app/shared/models/vfcInstanceGroupMap.ts5
-rw-r--r--vid-webpack-master/src/app/shared/models/vfcInstanceGroupProperties.ts7
-rw-r--r--vid-webpack-master/src/app/shared/models/vnfInstance.ts19
-rw-r--r--vid-webpack-master/src/app/shared/models/vnfModel.ts52
-rw-r--r--vid-webpack-master/src/app/shared/models/vnfTreeNode.ts18
-rw-r--r--vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.spec.ts25
-rw-r--r--vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.ts12
-rw-r--r--vid-webpack-master/src/app/shared/pipes/data-filter.pipe.ts29
-rw-r--r--vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.spec.ts43
-rw-r--r--vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.ts12
-rw-r--r--vid-webpack-master/src/app/shared/pipes/highlight-filter.pipe.ts10
-rw-r--r--vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.spec.ts58
-rw-r--r--vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.ts13
-rw-r--r--vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.spec.ts60
-rw-r--r--vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.ts17
-rw-r--r--vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts10
-rw-r--r--vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts38
-rw-r--r--vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.spec.ts235
-rw-r--r--vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.ts38
-rw-r--r--vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts73
-rw-r--r--vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.ts82
-rw-r--r--vid-webpack-master/src/app/shared/shared.module.ts92
-rw-r--r--vid-webpack-master/src/app/shared/utils/constants.ts287
-rw-r--r--vid-webpack-master/src/app/shared/utils/httpInterceptor/httpInterceptor.service.ts32
-rw-r--r--vid-webpack-master/src/app/shared/utils/iframe.service.ts19
-rw-r--r--vid-webpack-master/src/app/shared/utils/log/log.service.spec.ts29
-rw-r--r--vid-webpack-master/src/app/shared/utils/log/log.service.ts58
-rw-r--r--vid-webpack-master/src/app/store/epics.ts13
-rw-r--r--vid-webpack-master/src/app/store/module.ts29
-rw-r--r--vid-webpack-master/src/app/store/reducers.ts17
-rw-r--r--vid-webpack-master/src/app/utils/utils.ts271
-rw-r--r--vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.html14
-rw-r--r--vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.scss17
-rw-r--r--vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.ts66
-rw-r--r--vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.html27
-rw-r--r--vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.scss168
-rw-r--r--vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.ts203
-rw-r--r--vid-webpack-master/src/app/vlanTagging/vlan-tagging.module.ts33
-rw-r--r--vid-webpack-master/src/assets/.gitkeep0
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/Apache License.txt201
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Bold.ttfbin0 -> 224592 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-BoldItalic.ttfbin0 -> 213292 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-ExtraBold.ttfbin0 -> 222584 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttfbin0 -> 213420 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Italic.ttfbin0 -> 212896 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Light.ttfbin0 -> 222412 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-LightItalic.ttfbin0 -> 213128 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Regular.ttfbin0 -> 217360 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Semibold.ttfbin0 -> 221328 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-SemiboldItalic.ttfbin0 -> 212820 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/icomoon.eotbin0 -> 14864 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/icomoon.svg70
-rw-r--r--vid-webpack-master/src/assets/fonts/icomoon.ttfbin0 -> 14700 bytes
-rw-r--r--vid-webpack-master/src/assets/fonts/icomoon.woffbin0 -> 14776 bytes
-rw-r--r--vid-webpack-master/src/assets/img/Menu.svg8
-rw-r--r--vid-webpack-master/src/assets/img/UPLOAD.svg15
-rw-r--r--vid-webpack-master/src/assets/img/X_o.svg8
-rw-r--r--vid-webpack-master/src/assets/img/angular.pngbin0 -> 4509 bytes
-rw-r--r--vid-webpack-master/src/assets/img/chevron.svg8
-rw-r--r--vid-webpack-master/src/assets/img/fail.svg8
-rw-r--r--vid-webpack-master/src/assets/img/favicon.icobin0 -> 5430 bytes
-rw-r--r--vid-webpack-master/src/assets/img/inprogress.svg14
-rw-r--r--vid-webpack-master/src/assets/img/pause.svg14
-rw-r--r--vid-webpack-master/src/assets/img/pending.svg14
-rw-r--r--vid-webpack-master/src/assets/img/stoped.svg14
-rw-r--r--vid-webpack-master/src/assets/img/success+Circle.svg14
-rw-r--r--vid-webpack-master/src/environments/environment.prod.ts3
-rw-r--r--vid-webpack-master/src/environments/environment.ts8
-rw-r--r--vid-webpack-master/src/index.html12
-rw-r--r--vid-webpack-master/src/main.ts11
-rw-r--r--vid-webpack-master/src/polyfills.ts66
-rw-r--r--vid-webpack-master/src/public/img/UPLOAD.svg15
-rw-r--r--vid-webpack-master/src/public/img/angular.pngbin0 -> 4509 bytes
-rw-r--r--vid-webpack-master/src/public/img/favicon.icobin0 -> 5430 bytes
-rw-r--r--vid-webpack-master/src/public/img/spinner.gifbin0 -> 7358 bytes
-rw-r--r--vid-webpack-master/src/public/index.html14
-rw-r--r--vid-webpack-master/src/public/service-worker.js1
-rw-r--r--vid-webpack-master/src/style/app.scss125
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/Apache License.txt201
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Bold.ttfbin0 -> 224592 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-BoldItalic.ttfbin0 -> 213292 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-ExtraBold.ttfbin0 -> 222584 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttfbin0 -> 213420 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Italic.ttfbin0 -> 212896 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Light.ttfbin0 -> 222412 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-LightItalic.ttfbin0 -> 213128 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Regular.ttfbin0 -> 217360 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Semibold.ttfbin0 -> 221328 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/OpenSans/OpenSans-SemiboldItalic.ttfbin0 -> 212820 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/icomoon.eotbin0 -> 14864 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/icomoon.svg70
-rw-r--r--vid-webpack-master/src/style/fonts/icomoon.ttfbin0 -> 14700 bytes
-rw-r--r--vid-webpack-master/src/style/fonts/icomoon.woffbin0 -> 14776 bytes
-rw-r--r--vid-webpack-master/src/styles.scss171
-rw-r--r--vid-webpack-master/src/test.ts20
-rw-r--r--vid-webpack-master/src/tsconfig.app.json13
-rw-r--r--vid-webpack-master/src/tsconfig.spec.json19
-rw-r--r--vid-webpack-master/src/vendor.ts16
-rw-r--r--vid-webpack-master/tsconfig.json19
-rw-r--r--vid-webpack-master/tslint.json117
-rw-r--r--vid-webpack-master/typedoc.json15
337 files changed, 46774 insertions, 0 deletions
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/controller/iframeController.js b/vid-app-common/src/main/webapp/app/vid/scripts/controller/iframeController.js
new file mode 100644
index 000000000..007ed0570
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/controller/iframeController.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var iframeController = function($scope, $location) {
+ $scope.url = "app/ui/#" + $location.$$url;
+}
+
+app.controller("iframeController", [ "$scope", "$location", iframeController ]); \ No newline at end of file
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/controller/iframeDialogController.js b/vid-app-common/src/main/webapp/app/vid/scripts/controller/iframeDialogController.js
new file mode 100644
index 000000000..ab3320697
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/controller/iframeDialogController.js
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. 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
+ *
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+"use strict";
+
+var iframeDialogController = function (COMPONENT, FIELD, PARAMETER, $scope, $http, $timeout, $log,
+ CreationService, UtilityService, DataService, $routeParams) {
+
+ $scope.isDialogVisible = false;
+
+ function receiveMessage(event) {
+ window.removeEventListener("message", receiveMessage, false);
+ $scope.isDialogVisible = false;
+ $scope.popup.isVisible = false;
+
+ if (event.data.eventId == 'submitIframe') {
+ CreationService.initializeComponent(COMPONENT.VNF);
+ var instanceId = $routeParams.serviceInstanceId;
+ DataService.setServiceInstanceId(instanceId);
+ console.log(event.data.data);
+
+ $scope.$broadcast(COMPONENT.MSO_CREATE_REQ, {
+ url: CreationService.getMsoUrl(),
+ requestDetails: event.data.data,
+ componentId: COMPONENT.VNF,
+ callbackFunction: function (response) {
+ // if (response.isSuccessful) {
+ // $scope.popup.shouldShowIframePopup = false;
+ // } else {
+ $scope.isDialogVisible = false;
+ $scope.popup.isVisible = false;
+ // }
+ }
+ })
+ }
+ $scope.$apply();
+ }
+
+
+ $scope.$on(COMPONENT.IFRAME_DIALOG, function (event, data) {
+ var queryString = Object.keys(data).map(function(key) {
+ return key + '=' + data[key]
+ }).join('&');
+ $scope.url = COMPONENT.SUB_INTERFACE_POPUP_IFRAME_URL + queryString;
+ $scope.isDialogVisible = true;
+ $scope.popup.isVisible = true;
+
+ window.addEventListener("message", receiveMessage, false);
+ });
+};
+
+appDS2.controller("iframeDialogController", ["COMPONENT", "FIELD", "PARAMETER", "$scope", "$http",
+ "$timeout", "$log", "CreationService", "UtilityService", "DataService", "$routeParams",
+ iframeDialogController]);
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/services/crService.js b/vid-app-common/src/main/webapp/app/vid/scripts/services/crService.js
new file mode 100644
index 000000000..ee45596d0
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/services/crService.js
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. 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
+ *
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+"use strict";
+
+var CrService = function (AaiService) {
+ return {
+ getCr: function (instance) {
+ return AaiService.getCRInformationByInstanceId(instance.serviceInstanceId);
+ }
+ };
+};
+
+appDS2.factory("CrService", ["AaiService", CrService]);
diff --git a/vid-webpack-master/.angular-cli.json b/vid-webpack-master/.angular-cli.json
new file mode 100644
index 000000000..0c2ce561b
--- /dev/null
+++ b/vid-webpack-master/.angular-cli.json
@@ -0,0 +1,59 @@
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "project": {
+ "name": "vid-cli"
+ },
+ "apps": [
+ {
+ "root": "src",
+ "outDir": "dist",
+ "assets": [
+ "assets",
+ "favicon.ico"
+ ],
+ "index": "index.html",
+ "main": "main.ts",
+ "polyfills": "polyfills.ts",
+ "test": "test.ts",
+ "tsconfig": "tsconfig.app.json",
+ "testTsconfig": "tsconfig.spec.json",
+ "prefix": "app",
+ "styles": [
+ "styles.scss",
+ "../node_modules/font-awesome/css/font-awesome.css",
+ "../node_modules/bootstrap/dist/css/bootstrap.min.css",
+ "../node_modules/angular-tree-component/dist/angular-tree-component.css"
+ ],
+ "scripts": [],
+ "environmentSource": "environments/environment.ts",
+ "environments": {
+ "dev": "environments/environment.ts",
+ "prod": "environments/environment.prod.ts"
+ }
+ }
+ ],
+ "e2e": {
+ "protractor": {
+ "config": "./protractor.conf.js"
+ }
+ },
+ "lint": [
+ {
+ "project": "src/tsconfig.app.json",
+ "exclude": "**/node_modules/**"
+ },
+ {
+ "project": "src/tsconfig.spec.json",
+ "exclude": "**/node_modules/**"
+ }
+ ],
+ "test": {
+ "karma": {
+ "config": "./karma.conf.js"
+ }
+ },
+ "defaults": {
+ "styleExt": "scss",
+ "component": {}
+ }
+}
diff --git a/vid-webpack-master/.editorconfig b/vid-webpack-master/.editorconfig
new file mode 100644
index 000000000..a443ba780
--- /dev/null
+++ b/vid-webpack-master/.editorconfig
@@ -0,0 +1,12 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+insert_final_newline = true
+trim_trailing_whitespace = true
diff --git a/vid-webpack-master/.gitignore b/vid-webpack-master/.gitignore
new file mode 100644
index 000000000..cb1cd7b1d
--- /dev/null
+++ b/vid-webpack-master/.gitignore
@@ -0,0 +1,57 @@
+# Logs
+logs
+*.log
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Users Environment Variables
+.lock-wscript
+
+# OS generated files #
+.DS_Store
+ehthumbs.db
+Icon?
+Thumbs.db
+
+# Node Files #
+/node
+/node_modules
+/bower_components
+
+# Coverage #
+/coverage/
+
+# Typing #
+/src/typings/tsd/
+/typings/
+/tsd_typings/
+
+# Dist #
+/dist
+!/dist/.placeholder
+/public/__build__/
+/src/*/__build__/
+__build__/**
+.webpack.json
+
+# Doc #
+/doc/
+
+# IDE #
+.idea/
+*.swp
diff --git a/vid-webpack-master/.node-version b/vid-webpack-master/.node-version
new file mode 100644
index 000000000..675e45a4e
--- /dev/null
+++ b/vid-webpack-master/.node-version
@@ -0,0 +1 @@
+8.9.3 \ No newline at end of file
diff --git a/vid-webpack-master/.npm-version b/vid-webpack-master/.npm-version
new file mode 100644
index 000000000..d41f08f1f
--- /dev/null
+++ b/vid-webpack-master/.npm-version
@@ -0,0 +1 @@
+5.5.1 \ No newline at end of file
diff --git a/vid-webpack-master/CHANGELOG.md b/vid-webpack-master/CHANGELOG.md
new file mode 100644
index 000000000..ba275de11
--- /dev/null
+++ b/vid-webpack-master/CHANGELOG.md
@@ -0,0 +1,33 @@
+# Changelog
+
+# 04 October 2016
+
+- Migrate to webpack 2
+
+# 18 September 2016
+
+- Using `awesome-typescript-loader` instead of `ts-loader`.
+
+# 5 September 2016
+
+- Migration to TS2 and @types
+
+## 1 September 2016
+
+- Using RC6.
+
+## 28 August 2016
+
+- Adding webpack-dashboard.
+
+## 23 August 2016
+
+- Adding HMR support.
+
+## 3 July 2016
+
+- Use html5mode instead of hash navigation.
+
+## 24 June 2016
+
+- Be able to import Component's templates and styles without using require.
diff --git a/vid-webpack-master/LICENSE b/vid-webpack-master/LICENSE
new file mode 100644
index 000000000..ad6b74029
--- /dev/null
+++ b/vid-webpack-master/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Preboot team
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/vid-webpack-master/README.md b/vid-webpack-master/README.md
new file mode 100644
index 000000000..5c37773bd
--- /dev/null
+++ b/vid-webpack-master/README.md
@@ -0,0 +1,149 @@
+# angular-webpack
+
+[![Dependency Status](https://david-dm.org/preboot/angular-webpack/status.svg)](https://david-dm.org/preboot/angular-webpack#info=dependencies) [![devDependency Status](https://david-dm.org/preboot/angular-webpack/dev-status.svg)](https://david-dm.org/preboot/angular-webpack#info=devDependencies)
+[![Join the chat at https://gitter.im/preboot/angular-webpack](https://badges.gitter.im/preboot/angular-webpack.svg)](https://gitter.im/preboot/angular-webpack?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+A complete, yet simple, starter for Angular v2+ using Webpack.
+
+This seed repo serves as an Angular starter for anyone looking to get up and running with Angular and TypeScript fast. Using [Webpack](http://webpack.github.io/) for building our files and assisting with boilerplate. We're also using Protractor for our end-to-end story and Karma for our unit tests.
+* Best practices in file and application organization for [Angular](https://angular.io/).
+* Ready to go build system using [Webpack](https://webpack.github.io/docs/) for working with [TypeScript](http://www.typescriptlang.org/).
+* Testing Angular code with [Jasmine](http://jasmine.github.io/) and [Karma](http://karma-runner.github.io/).
+* Coverage with [Istanbul](https://github.com/gotwarlost/istanbul)
+* End-to-end Angular code using [Protractor](https://angular.github.io/protractor/).
+* Stylesheets with [SASS](http://sass-lang.com/) (not required, it supports regular css too).
+* Error reported with [TSLint](http://palantir.github.io/tslint/) and [Codelyzer](https://github.com/mgechev/codelyzer).
+* Documentation with [TypeDoc](http://typedoc.org/).
+
+>Warning: Make sure you're using the latest version of Node.js and NPM
+
+### Quick start
+
+```bash
+# clone our repo
+$ git clone https://github.com/preboot/angular-webpack.git my-app
+
+# change directory to your app
+$ cd vid-app
+
+# install the dependencies with npm
+$ npm install
+
+# start the server
+$ npm start
+```
+go to [http://localhost:8181](http://localhost:8181) in your browser.
+
+# Table of Contents
+
+* [Getting Started](#getting-started)
+ * [Dependencies](#dependencies)
+ * [Installing](#installing)
+ * [Developing](#developing)
+ * [Testing](#testing)
+ * [Production](#production)
+ * [Documentation](#documentation)
+* [Frequently asked questions](#faq)
+* [TypeScript](#typescript)
+* [License](#license)
+
+# Getting Started
+
+## Dependencies
+
+What you need to run this app:
+* `node` and `npm` (Use [NVM](https://github.com/creationix/nvm))
+* Ensure you're running Node (`v6.x.x`+) and NPM (`3.x.x`+)
+
+## Installing
+
+* `fork` this repo
+* `clone` your fork
+* `npm install` to install all dependencies
+
+## Developing
+
+After you have installed all dependencies you can now start developing with:
+
+* `npm start`
+
+It will start a local server using `webpack-dev-server` which will watch, build (in-memory), and reload for you. The application can be checked at `http://localhost:8181`.
+
+As an alternative, you can work using Hot Module Replacement (HMR):
+
+* `npm run start:hmr`
+
+And you are all set! You can now modify your components on the fly without having to reload the entire page.
+
+## Testing
+
+#### 1. Unit Tests
+
+* single run: `npm test`
+* live mode (TDD style): `npm run test-watch`
+
+#### 2. End-to-End Tests (aka. e2e, integration)
+
+* single run:
+ * in a tab, *if not already running!*: `npm start`
+ * in a new tab: `npm run webdriver-start`
+ * in another new tab: `npm run e2e`
+* interactive mode:
+ * instead of the last command above, you can run: `npm run e2e-live`
+ * when debugging or first writing test suites, you may find it helpful to try out Protractor commands without starting up the entire test suite. You can do this with the element explorer.
+ * you can learn more about [Protractor Interactive Mode here](https://github.com/angular/protractor/blob/master/docs/debugging.md#testing-out-protractor-interactively)
+
+## Production
+
+To build your application, run:
+
+* `npm run build`
+
+You can now go to `/dist` and deploy that to your server!
+
+## Documentation
+
+You can generate api docs (using [TypeDoc](http://typedoc.org/)) for your code with the following:
+
+* `npm run docs`
+
+# FAQ
+
+#### Do I need to add script / link tags into index.html ?
+
+No, Webpack will add all the needed Javascript bundles as script tags and all the CSS files as link tags. The advantage is that you don't need to modify the index.html every time you build your solution to update the hashes.
+
+#### How to include external angular libraries ?
+
+It's simple, just install the lib via npm and import it in your code when you need it. Don't forget that you need to configure some external libs in the [bootstrap](https://github.com/preboot/angular-webpack/blob/master/src/main.ts) of your application.
+
+#### How to include external css files such as bootstrap.css ?
+
+Just install the lib and import the css files in [vendor.ts](https://github.com/preboot/angular-webpack/blob/master/src/vendor.ts). For example this is how to do it with bootstrap:
+
+```sh
+npm install bootstrap@next --save
+```
+
+And in [vendor.ts](https://github.com/preboot/angular-webpack/blob/master/src/vendor.ts) add the following:
+
+```ts
+import 'bootstrap/dist/css/bootstrap.css';
+```
+
+# TypeScript
+
+> To take full advantage of TypeScript with autocomplete you would have to use an editor with the correct TypeScript plugins.
+
+## Use a TypeScript-aware editor
+
+We have good experience using these editors:
+
+* [Visual Studio Code](https://code.visualstudio.com/)
+* [Webstorm 11+](https://www.jetbrains.com/webstorm/download/)
+* [Atom](https://atom.io/) with [TypeScript plugin](https://atom.io/packages/atom-typescript)
+* [Sublime Text](http://www.sublimetext.com/3) with [Typescript-Sublime-Plugin](https://github.com/Microsoft/Typescript-Sublime-plugin#installation)
+
+# License
+
+[MIT](/LICENSE)
diff --git a/vid-webpack-master/cypress.json b/vid-webpack-master/cypress.json
new file mode 100644
index 000000000..eb8c6e41d
--- /dev/null
+++ b/vid-webpack-master/cypress.json
@@ -0,0 +1,12 @@
+{
+ "chromeWebSecurity": false,
+ "hostPortPath": null,
+ "reporter": "junit",
+ "pageLoadTimeout" : 100000,
+ "defaultCommandTimeout" : 10000,
+ "responseTimeout" : 100000,
+ "reporterOptions": {
+ "mochaFile": "cypress/junitreport.xml",
+ "toConsole": true
+ }
+}
diff --git a/vid-webpack-master/cypress/fixtures/constants.ts b/vid-webpack-master/cypress/fixtures/constants.ts
new file mode 100644
index 000000000..794bcdc05
--- /dev/null
+++ b/vid-webpack-master/cypress/fixtures/constants.ts
@@ -0,0 +1,3 @@
+export const global = {
+ loginCookies : null
+};
diff --git a/vid-webpack-master/cypress/fixtures/example.json b/vid-webpack-master/cypress/fixtures/example.json
new file mode 100644
index 000000000..da18d9352
--- /dev/null
+++ b/vid-webpack-master/cypress/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io",
+ "body": "Fixtures are a great way to mock data for responses to routes"
+} \ No newline at end of file
diff --git a/vid-webpack-master/cypress/integration/iFrames/ala-carte.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/ala-carte.e2e.ts
new file mode 100644
index 000000000..22eb88ca7
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/iFrames/ala-carte.e2e.ts
@@ -0,0 +1,80 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/>
+/// <reference types="Cypress" />
+import { JsonBuilder } from '../../support/jsonBuilders/jsonBuilder';
+import { ServiceModel } from '../../support/jsonBuilders/models/service.model';
+
+describe('A la carte', function () {
+ describe('check service name', () => {
+ var jsonBuilderAAIService : JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>();
+
+
+ beforeEach(() => {
+ cy.window().then((win) => {
+ win.sessionStorage.clear();
+ cy.setReduxState();
+ cy.preventErrorsOnLoading();
+ cy.initAAIMock();
+ cy.initVidMock();
+ cy.initAlaCarteService();
+ cy.initZones();
+ cy.login();
+ });
+ });
+
+ const SERVICE_ID: string = '4d71990b-d8ad-4510-ac61-496288d9078e';
+ const INSTANCE_NAME_MANDATORY_MESSAGE: string = 'Missing data ("Instance Name" and 3 other fields';
+ const INSTANCE_NAME_NOT_MANDATORY_MESSAGE: string = 'Missing data ("Subscriber Name" and 2 other fields)';
+ const CONFIRM_BUTTON : string = 'confirmButton';
+
+
+ // function changeServiceName(obj : AAIServiceModel){
+ // obj.service.version = "NEW VALUE";
+ // return obj;
+ // }
+ it(`service name should be mandatory : serviceEcompNaming = false`, function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/basicService.json').then((res) => {
+ jsonBuilderAAIService.basicJson(res,
+ Cypress.config('baseUrl') + '/rest/models/services/4d71990b-d8ad-4510-ac61-496288d9078e',
+ 200,
+ 0,
+ SERVICE_ID + ' - service',
+ changeServiceEcompNamingToFalse);
+
+ checkServiceNameInputIdMandatory();
+ });
+ });
+
+ it(`service name should be mandatory : serviceEcompNaming = true`, function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/basicService.json').then((res) => {
+ jsonBuilderAAIService.basicJson(res,
+ Cypress.config('baseUrl') + '/rest/models/services/4d71990b-d8ad-4510-ac61-496288d9078e',
+ 200,
+ 0,
+ SERVICE_ID + ' - service',
+ changeServiceEcompNamingToTrue);
+ checkServiceNameInputIdMandatory();
+ });
+ });
+
+ function changeServiceEcompNamingToTrue(obj : ServiceModel){
+ obj.service.serviceEcompNaming = "true";
+ return obj;
+ }
+
+ function changeServiceEcompNamingToFalse(obj : ServiceModel){
+ obj.service.serviceEcompNaming = "false";
+ return obj;
+ }
+
+ function checkServiceNameInputIdMandatory(){
+ cy.get('span').contains('Browse ASDC Service Models').click({force: true})
+ .getElementByDataTestsId('deploy-' + SERVICE_ID).click({force: true})
+ .wait(1000).getElementByDataTestsId(CONFIRM_BUTTON).click({force: true})
+ .get('.error').contains(INSTANCE_NAME_MANDATORY_MESSAGE)
+ .typeToInput('instanceName', 'testService');
+
+ cy.getElementByDataTestsId(CONFIRM_BUTTON).click({force: true})
+ .get('.error').contains(INSTANCE_NAME_NOT_MANDATORY_MESSAGE);
+ }
+ });
+});
diff --git a/vid-webpack-master/cypress/integration/iFrames/auditInfo.modal.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/auditInfo.modal.e2e.ts
new file mode 100644
index 000000000..c915d48e9
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/iFrames/auditInfo.modal.e2e.ts
@@ -0,0 +1,37 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/>
+import { JsonBuilder } from '../../support/jsonBuilders/jsonBuilder';
+import { AsyncInstantiationModel } from '../../support/jsonBuilders/models/asyncInstantiation.model';
+
+describe('Audit information modal', function () {
+ describe('basic UI tests', () => {
+ var jsonBuilderInstantiationBuilder : JsonBuilder<AsyncInstantiationModel> = new JsonBuilder<AsyncInstantiationModel>();
+ beforeEach(() => {
+ cy.window().then((win) => {
+ win.sessionStorage.clear();
+ cy.setReduxState();
+ cy.preventErrorsOnLoading();
+ jsonBuilderInstantiationBuilder.basicMock('/cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json',
+ Cypress.config('baseUrl') + "/asyncInstantiation**");
+ cy.initAAIMock();
+ cy.initVidMock();
+ cy.login();
+ })
+ });
+
+ it(`should display 2 tables with information's`, function () {
+
+ cy.openIframe('app/ui/#/instantiationStatus');
+ cy.get('.instantiation-status-data tbody tr').each(function (row, index) {
+ cy.get('.icon-menu').eq(index).click()
+ .get('.audit-icon').click()
+ .get('#service-model-name').should('contain', row.find('#serviceModelName').text().trim())
+ .getElementByDataTestsId('model-item-value-userId').should('contain', row.find('#userId').text().trim())
+ .get('#service-instantiation-audit-info-vid').should('be.visible')
+ .get('#service-instantiation-audit-info-vid').find('#vidJobStatus').should('be.visible')
+ .get('#service-instantiation-audit-info-mso').should('be.visible')
+ .get('#service-instantiation-audit-info-mso').find('#msoJobStatus').should('be.visible')
+ .get('#cancelButton').click();
+ });
+ });
+ });
+});
diff --git a/vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts
new file mode 100644
index 000000000..2f98ba864
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts
@@ -0,0 +1,130 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/>
+describe('Drawing board', function () {
+ describe('basic UI tests', () => {
+
+ beforeEach(() => {
+ cy.window().then((win) => {
+ win.sessionStorage.clear();
+ cy.setReduxState();
+ cy.preventErrorsOnLoading();
+ cy.initAAIMock();
+ cy.initVidMock();
+ cy.login();
+ });
+ });
+
+
+ it('should display service model name', function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
+ cy.setReduxState(<any>res);
+ cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
+ cy.get('#service-model-name').contains('action-data');
+ });
+ });
+
+ it('should display icon and message if no vnf and vnfModules', function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
+ cy.setReduxState(<any>res);
+ cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
+
+ cy.get('#not-node-img-id').and('be.visible');
+ });
+ });
+
+ it('should show alert on remove vnf with modules', function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/serviceWithVnfAndVfModules.json').then((res) => {
+ cy.setReduxState(<any>res);
+ cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
+ cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_ADIOD-vPE 0-menu-btn')
+ .click({force: true});
+ // assert vfModules are enabled
+ cy.get('.tree-node-disabled div[data-tests-id="node-2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1"]')
+ .should('not.be.visible');
+ cy.get('.icon-trash').click();
+ cy.get('.title').contains('Remove VNF');
+ cy.get('.sdc-button').contains('Remove VNF').click();
+ // assert vfModules are disabled after remove parent vnf
+ cy.get('.tree-node-disabled div[data-tests-id="node-2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1"]')
+ .should('be.visible');
+ });
+ });
+
+ it('should not show alert on remove vnf without modules', function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/serviceWithVnfAndVfModules.json').then((res) => {
+ cy.setReduxState(<any>res);
+ cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
+ cy.getElementByDataTestsId('node-0903e1c0-8e03-4936-b5c2-260653b96413-2017-388_ADIOD-vPE 1-menu-btn')
+ .click({force: true});
+ cy.get('.icon-trash').click();
+ });
+ });
+
+ it('should show <Automatically Assigned> if ecomp is true', function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
+ cy.setReduxState(<any>res);
+ cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
+ cy.getElementByDataTestsId('node-2017-488_ADIOD-vPE 0-add-btn').click({force: true});
+
+ cy.selectDropdownOptionByText('productFamily', 'DHV');
+ cy.selectDropdownOptionByText('lcpRegion', 'mtn6');
+ cy.selectDropdownOptionByText('tenant', 'AIN Web Tool-15-D-testgamma');
+ cy.selectDropdownOptionByText('lineOfBusiness', 'ECOMP');
+ cy.selectDropdownOptionByText('platform', 'platform');
+
+ cy.getElementByDataTestsId('vnf-form-set').click({force: true});
+
+ cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_ADIOD-vPE 0').contains('<Automatically Assigned>');
+ });
+ });
+
+ it('should show model nameif ecomp is false', function () {
+ const vnfModelName: string = '2017-488_ADIOD-vPE 0';
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json').then((res) => {
+ res.service.serviceHierarchy['2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd'].vnfs[vnfModelName].properties.ecomp_generated_naming = 'false';
+ cy.setReduxState(<any>res);
+ cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
+ cy.getElementByDataTestsId('node-2017-488_ADIOD-vPE 0-add-btn').click({force: true});
+
+ cy.selectDropdownOptionByText('productFamily', 'DHV');
+ cy.selectDropdownOptionByText('lcpRegion', 'mtn6');
+ cy.selectDropdownOptionByText('tenant', 'AIN Web Tool-15-D-testgamma');
+ cy.selectDropdownOptionByText('lineOfBusiness', 'ECOMP');
+ cy.selectDropdownOptionByText('platform', 'platform');
+
+ cy.getElementByDataTestsId('vnf-form-set').click({force: true});
+
+ cy.getElementByDataTestsId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_ADIOD-vPE 0').contains(vnfModelName);
+ });
+ });
+
+ // describe('add instance open a popup', () => {
+ //
+ // it('shouldn add vfModule without popup with no empty required fields', function () {
+ // cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/serviceWithVnfAndVfModules.json').then((res) => {
+ // res.service.serviceInstance["2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"].vnfs["2017-488_ADIOD-vPE 0"].vfModules = [];
+ // cy.setReduxState(<any>res);
+ // cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
+ // cy.get('available-models-tree tree-node-expander').eq(2).click();
+ // cy.getElementByDataTestsId('node-2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1-add-btn').click();
+ // cy.get('drawing-board-tree .toggle-children').click();
+ // cy.getElementByDataTestsId('node-25284168-24bb-4698-8cb4-3f509146eca5-2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1')
+ // .and('be.visible');
+ // });
+ // });
+ //
+ // it('should add vfModule with popup if empty required dynamic input', function () {
+ // cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/serviceWithVnfAndVfModules.json').then((res) => {
+ // res.service.serviceHierarchy["2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"].vnfs["2017-488_ADIOD-vPE 0"].vfModules["2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1"].inputs["adiodvpe0_bandwidth"].default = '';
+ // res.service.serviceInstance["2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd"].vnfs["2017-488_ADIOD-vPE 0"].vfModules = [];
+ // cy.setReduxState(<any>res);
+ // cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
+ // cy.get('available-models-tree tree-node-expander').eq(2).click();
+ // cy.getElementByDataTestsId('node-2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1-add-btn').click();
+ // cy.get('#instance-popup').and('be.visible');
+ // });
+ //
+ // });
+ //
+ // });
+ });
+});
diff --git a/vid-webpack-master/cypress/integration/iFrames/instantiationStatus.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/instantiationStatus.e2e.ts
new file mode 100644
index 000000000..be1b2ac7d
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/iFrames/instantiationStatus.e2e.ts
@@ -0,0 +1,50 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/>
+/// <reference types="Cypress" />
+
+import { JsonBuilder } from '../../support/jsonBuilders/jsonBuilder';
+import { AsyncInstantiationModel } from '../../support/jsonBuilders/models/asyncInstantiation.model';
+
+describe('Instantiation status page', function () {
+ var jsonBuilderInstantiationBuilder : JsonBuilder<AsyncInstantiationModel> = new JsonBuilder<AsyncInstantiationModel>();
+ beforeEach(() => {
+ cy.window().then((win) => {
+ win.sessionStorage.clear();
+ cy.setReduxState();
+ cy.preventErrorsOnLoading();
+ cy.initAAIMock();
+ cy.initVidMock();
+ jsonBuilderInstantiationBuilder.basicMock('/cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json',
+ Cypress.config('baseUrl') + "/asyncInstantiation**");
+ cy.login();
+ })
+ });
+
+ it('should disaplay the correct icons per status', function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json').then((res) => {
+ cy.openIframe('app/ui/#/instantiationStatus');
+ for(let i = 0 ; i < res.length; i++){
+ if(res[i].project){
+ cy.getTableRowByIndex('instantiation-status', i).get('td#project span').contains(res[i].project);
+ }
+ if(res[i].userId){
+ cy.getTableRowByIndex('instantiation-status', i).get('td#userId span').contains(res[i].userId);
+ }
+ if(res[i].tenantName){
+ cy.getTableRowByIndex('instantiation-status', i).get('td#tenantName span').contains(res[i].tenantName);
+ }
+ if(res[i].serviceModelName){
+ cy.getTableRowByIndex('instantiation-status', i).get('td#serviceModelName span').contains(res[i].serviceModelName);
+ }
+ if(res[i].serviceInstanceName){
+ cy.getTableRowByIndex('instantiation-status', i).get('td#serviceInstanceName span').contains(res[i].serviceInstanceName);
+ }
+ if(res[i].serviceModelVersion){
+ cy.getTableRowByIndex('instantiation-status', i).get('td#serviceModelVersion span').contains(res[i].serviceModelVersion);
+ }
+ if(res[i].subscriberName){
+ cy.getTableRowByIndex('instantiation-status', i).get('td#subscriberName span').contains(res[i].subscriberName);
+ }
+ }
+ });
+ });
+});
diff --git a/vid-webpack-master/cypress/integration/iFrames/service.popup.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/service.popup.e2e.ts
new file mode 100644
index 000000000..9d1fbfdf0
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/iFrames/service.popup.e2e.ts
@@ -0,0 +1,57 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/>
+describe('Service popup', function () {
+ describe('basic UI tests', () => {
+
+ beforeEach(() => {
+ cy.window().then((win) => {
+ win.sessionStorage.clear();
+ cy.setReduxState();
+ cy.preventErrorsOnLoading();
+ cy.initAAIMock();
+ cy.initVidMock();
+ cy.login();
+ })
+ });
+
+ it('should contains basic selects with required astrix', function () {
+ cy.openIframe('/app/ui/#/servicePopup?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd&isCreate=true');
+ cy.isElementContainsAttr('service-form-set', 'disabled');
+ cy.get('label').contains('Subscriber name:').should('have.class', 'required')
+ .get('label').contains('Service type:').should('have.class', 'required')
+ .get('label').contains('LCP region:').should('have.class', 'required')
+ .get('label').contains('Tenant:').should('have.class', 'required')
+ .get('label').contains('Owning entity:').should('have.class', 'required')
+ .get('label').contains('Product family:').should('have.class', 'required')
+ .get('label').contains('AIC Zone:').should('not.have.class', 'required')
+ .get('label').contains('Project').should('not.have.class', 'required')
+ .get('label').contains('Rollback On Failure').should('have.class', 'required');
+ });
+
+ it('should be able fill all selects', function () {
+ cy.openIframe('/app/ui/#/servicePopup?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd&isCreate=true');
+
+ cy.selectDropdownOptionByText('subscriberName', 'USP VOICE');
+ cy.selectDropdownOptionByText('serviceType', 'VIRTUAL USP');
+ cy.selectDropdownOptionByText('productFamily', 'VIRTUAL USP');
+ cy.selectDropdownOptionByText('lcpRegion', 'mtn6');
+ cy.selectDropdownOptionByText('tenant', 'AIN Web Tool-15-D-testgamma');
+ cy.selectDropdownOptionByText('aic_zone', 'NFTJSSSS-NFT1');
+ cy.selectDropdownOptionByText('project', 'DFW');
+ cy.selectDropdownOptionByText('owningEntity', 'aaa1');
+ cy.selectDropdownOptionByText('rollback', 'Rollback');
+
+ });
+
+ it('should display error when api return empty data', function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/categoryParametres.json').then((res)=>{
+ res.categoryParameters.owningEntity = [];
+ cy.initCategoryParameter(<any>res);
+
+ cy.openIframe('/app/ui/#/servicePopup?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd&isCreate=true');
+
+ cy.get('.message').contains('No results for this request. Please change criteria.');
+ cy.get('form-general-error').contains('Page contains errors. Please see details next to the relevant fields.');
+ });
+ });
+ });
+});
diff --git a/vid-webpack-master/cypress/integration/iFrames/tenantIsolation.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/tenantIsolation.e2e.ts
new file mode 100644
index 000000000..7b848ba5b
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/iFrames/tenantIsolation.e2e.ts
@@ -0,0 +1,18 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/> / <reference types="Cypress" />
+
+describe('Tenant isolation - Test Environments Page', function () {
+ describe('New Test Environment popup', () => {
+
+ beforeEach(() => {
+ cy.login();
+ });
+
+ it(`verifying proper text for the "Tenant Context" label; instead of "Select VSP"`, function () {
+
+ cy.visit('/app/vid/scripts/modals/new-test-environment/new-test-environment.html');
+ cy.get('label[for=tenantContext]').contains('Tenant Context');
+ });
+ });
+ });
+
+
diff --git a/vid-webpack-master/cypress/integration/iFrames/viewEdit.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/viewEdit.e2e.ts
new file mode 100644
index 000000000..e589b1e73
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/iFrames/viewEdit.e2e.ts
@@ -0,0 +1,424 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/> / <reference types="Cypress" />
+import { JsonBuilder } from '../../support/jsonBuilders/jsonBuilder';
+import { PnfModel } from '../../support/jsonBuilders/models/pnf.model';
+import { ServiceModel } from '../../support/jsonBuilders/models/service.model';
+import { AaiServiceInstancesModel } from '../../support/jsonBuilders/models/serviceInstances.model';
+import { AAISubDetailsModel } from '../../support/jsonBuilders/models/aaiSubDetails.model';
+import { AAISubViewEditModel } from '../../support/jsonBuilders/models/aaiSubViewEdit.model';
+
+describe('View Edit Page', function () {
+ describe('basic UI tests', () => {
+ var jsonBuilderAAIService : JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>();
+
+
+ var jsonBuilderAAISubViewEditModel: JsonBuilder<AAISubViewEditModel> = new JsonBuilder<AAISubViewEditModel>();
+ var jsonBuilderAAISubDetailsModel: JsonBuilder<AAISubDetailsModel> = new JsonBuilder<AAISubDetailsModel>();
+ var jsonBuilderPNF: JsonBuilder<PnfModel> = new JsonBuilder<PnfModel>();
+ var jsonBuilderAaiServiceInstances: JsonBuilder<AaiServiceInstancesModel> = new JsonBuilder<AaiServiceInstancesModel>();
+ var jsonBuilderEmpty: JsonBuilder<Object> = new JsonBuilder<Object>();
+ beforeEach(() => {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/basicService.json').then((res) => {
+ jsonBuilderAAIService.basicJson(
+ res,
+ Cypress.config('baseUrl') + "/rest/models/services/6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+ 200, 0,
+ "service-complexService",
+ changeServiceModel)
+ });
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/aaiSubViewEditForComplexService.json').then((res) => {
+ jsonBuilderAAISubViewEditModel.basicJson(
+ res,
+ Cypress.config('baseUrl') + "/aai_sub_viewedit/**",
+ 200,
+ 0,
+ "aai-sub-view-edit")
+ });
+
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/aaiSubDetails.json').then((res) => {
+ jsonBuilderAAISubDetailsModel.basicJson(
+ res,
+ Cypress.config('baseUrl') + "/aai_sub_details/**",
+ 200,
+ 0,
+ "aai-sub-details")
+ });
+
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstancePnfs.json').then((res) => {
+ jsonBuilderPNF.basicJson(
+ res,
+ Cypress.config('baseUrl') + "/aai_get_service_instance_pnfs/**",
+ 200,
+ 0,
+ "aai-get-service-instance-pnfs")
+ });
+
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstances.json').then((res) => {
+ jsonBuilderAaiServiceInstances.basicJson(
+ res,
+ Cypress.config('baseUrl') + "/search_service_instances**",
+ 200,
+ 0,
+ "aai-get-service-instances")
+ });
+
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/emptyObjectResponse.json').then((res) => {
+ jsonBuilderEmpty.basicJson(
+ res,
+ Cypress.config('baseUrl') + "/aai_getPortMirroringConfigsData**",
+ 200,
+ 0,
+ "aai_getPortMirroringConfigsDate - empty response")
+ });
+
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/emptyObjectResponse.json').then((res) => {
+ jsonBuilderEmpty.basicJson(
+ res,
+ Cypress.config('baseUrl') + "/aai_getPortMirroringSourcePorts**",
+ 200,
+ 0,
+ "aai_getPortMirroringSourcePorts - empty response")
+ });
+
+ cy.login();
+ });
+
+
+ it(`should display service model name and version on each info form`, function () {
+ let typesToIncludeModel:Array<string> = ['service', 'vnf', 'vfmodule', 'volume-group', 'network'];
+ cy.visit('/serviceModels.htm#/instantiate?subscriberId=e433710f-9217-458d-a79d-1c7aff376d89&subscriberName=USP%20VOICE&serviceType=VIRTUAL%20USP&serviceInstanceId=3f93c7cb-2fd0-4557-9514-e189b7b04f9d&aaiModelVersionId=6e59c5de-f052-46fa-aa7e-2fca9d674c44&isPermitted=true');
+ cy.wait('@service-complexService');
+ typesToIncludeModel.forEach((type) => {
+ cy.get('.' + type + '-info').click({force: true});
+ cy.getElementByDataTestsId("Model Version").contains('1.0');
+ cy.getElementByDataTestsId("Model Name").contains('vidmacrofalsenaming');
+ cy.getElementByDataTestsId("detailsCloseBtn").click();
+ });
+ });
+ });
+
+ function changeServiceModel(serviceModel: ServiceModel) {
+ serviceModel.service.uuid = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+ serviceModel.vnfs = {
+ "VF_vMee 0": {
+ "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+ "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+ "description": "VSP_vMee",
+ "name": "VF_vMee",
+ "version": "2.0",
+ "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "gpb2_Internal2_mac": "00:80:37:0E:02:22",
+ "sctp-b-ipv6-egress_src_start_port": "0",
+ "sctp-a-ipv6-egress_rule_application": "any",
+ "Internal2_allow_transit": "true",
+ "sctp-b-IPv6_ethertype": "IPv6",
+ "sctp-a-egress_rule_application": "any",
+ "sctp-b-ingress_action": "pass",
+ "sctp-b-ingress_rule_protocol": "icmp",
+ "ncb2_Internal1_mac": "00:80:37:0E:0F:12",
+ "sctp-b-ipv6-ingress-src_start_port": "0.0",
+ "ncb1_Internal2_mac": "00:80:37:0E:09:12",
+ "fsb_volume_size_0": "320.0",
+ "sctp-b-egress_src_addresses": "local",
+ "sctp-a-ipv6-ingress_ethertype": "IPv4",
+ "sctp-a-ipv6-ingress-dst_start_port": "0",
+ "sctp-b-ipv6-ingress_rule_application": "any",
+ "domain_name": "default-domain",
+ "sctp-a-ingress_rule_protocol": "icmp",
+ "sctp-b-egress-src_start_port": "0.0",
+ "sctp-a-egress_src_addresses": "local",
+ "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+ "sctp-a-egress-src_start_port": "0.0",
+ "sctp-a-ingress_ethertype": "IPv4",
+ "sctp-b-ipv6-ingress-dst_end_port": "65535",
+ "sctp-b-dst_subnet_prefix_v6": "::",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+ "sctp-b-egress-dst_start_port": "0.0",
+ "ncb_flavor_name": "nv.c20r64d1",
+ "gpb1_Internal1_mac": "00:80:37:0E:01:22",
+ "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+ "Internal2_net_cidr": "169.255.0.0",
+ "sctp-a-ingress-dst_start_port": "0.0",
+ "sctp-a-egress-dst_start_port": "0.0",
+ "fsb1_Internal2_mac": "00:80:37:0E:0B:12",
+ "sctp-a-egress_ethertype": "IPv4",
+ "vlc_st_service_mode": "in-network-nat",
+ "sctp-a-ipv6-egress_ethertype": "IPv4",
+ "sctp-a-egress-src_end_port": "65535.0",
+ "sctp-b-ipv6-egress_rule_application": "any",
+ "sctp-b-egress_action": "pass",
+ "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+ "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+ "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+ "fsb2_Internal1_mac": "00:80:37:0E:0D:12",
+ "sctp-a-ipv6-ingress-src_start_port": "0.0",
+ "sctp-b-ipv6-egress_ethertype": "IPv4",
+ "Internal1_net_cidr": "169.253.0.0",
+ "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+ "fsb_flavor_name": "nv.c20r64d1",
+ "sctp_rule_protocol": "132",
+ "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+ "sctp-a-ipv6-ingress_rule_application": "any",
+ "ecomp_generated_naming": "true",
+ "sctp-a-IPv6_ethertype": "IPv6",
+ "vlc2_Internal1_mac": "00:80:37:0E:02:12",
+ "vlc_st_virtualization_type": "virtual-machine",
+ "sctp-b-ingress-dst_start_port": "0.0",
+ "sctp-b-ingress-dst_end_port": "65535.0",
+ "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+ "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+ "sctp-b-ingress_rule_application": "any",
+ "int2_sec_group_name": "int2-sec-group",
+ "vlc_flavor_name": "nd.c16r64d1",
+ "sctp-b-ipv6-egress_src_addresses": "local",
+ "vlc_st_interface_type_int1": "other1",
+ "sctp-b-egress-src_end_port": "65535.0",
+ "sctp-a-ipv6-egress-dst_start_port": "0",
+ "vlc_st_interface_type_int2": "other2",
+ "sctp-a-ipv6-egress_rule_protocol": "any",
+ "Internal2_shared": "false",
+ "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+ "Internal2_rpf": "disable",
+ "vlc1_Internal1_mac": "00:80:37:0E:01:12",
+ "sctp-b-ipv6-egress_src_end_port": "65535",
+ "sctp-a-ipv6-egress_src_addresses": "local",
+ "sctp-a-ingress-dst_end_port": "65535.0",
+ "sctp-a-ipv6-egress_src_end_port": "65535",
+ "Internal1_forwarding_mode": "l2",
+ "Internal2_dhcp": "false",
+ "sctp-a-dst_subnet_prefix_v6": "::",
+ "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+ "vlc_st_interface_type_gtp": "other0",
+ "ncb1_Internal1_mac": "00:80:37:0E:09:12",
+ "sctp-b-src_subnet_prefix_v6": "::",
+ "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+ "int1_sec_group_name": "int1-sec-group",
+ "Internal1_dhcp": "false",
+ "sctp-a-ipv6-egress_dst_end_port": "65535",
+ "Internal2_forwarding_mode": "l2",
+ "fsb2_Internal2_mac": "00:80:37:0E:0D:12",
+ "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+ "Internal1_net_cidr_len": "17",
+ "gpb2_Internal1_mac": "00:80:37:0E:02:22",
+ "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+ "sctp-a-ingress_dst_addresses": "local",
+ "sctp-a-egress_action": "pass",
+ "fsb_volume_type_0": "SF-Default-SSD",
+ "ncb2_Internal2_mac": "00:80:37:0E:0F:12",
+ "vlc_st_interface_type_sctp_a": "left",
+ "vlc_st_interface_type_sctp_b": "right",
+ "sctp-a-src_subnet_prefix_v6": "::",
+ "vlc_st_version": "2",
+ "sctp-b-egress_ethertype": "IPv4",
+ "sctp-a-ingress_rule_application": "any",
+ "gpb1_Internal2_mac": "00:80:37:0E:01:22",
+ "instance_ip_family_v6": "v6",
+ "sctp-a-ipv6-egress_src_start_port": "0",
+ "sctp-b-ingress-src_start_port": "0.0",
+ "sctp-b-ingress_dst_addresses": "local",
+ "fsb1_Internal1_mac": "00:80:37:0E:0B:12",
+ "vlc_st_interface_type_oam": "management",
+ "multi_stage_design": "false",
+ "oam_sec_group_name": "oam-sec-group",
+ "Internal2_net_gateway": "169.255.0.3",
+ "sctp-a-ipv6-ingress-dst_end_port": "65535",
+ "sctp-b-ipv6-egress-dst_start_port": "0",
+ "Internal1_net_gateway": "169.253.0.3",
+ "sctp-b-ipv6-egress_rule_protocol": "any",
+ "gtp_sec_group_name": "gtp-sec-group",
+ "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+ "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+ "sctp-a-ipv6-ingress_dst_addresses": "local",
+ "sctp-a-egress_rule_protocol": "icmp",
+ "sctp-b-ipv6-egress_action": "pass",
+ "sctp-a-ipv6-egress_action": "pass",
+ "Internal1_shared": "false",
+ "sctp-b-ipv6-ingress_rule_protocol": "any",
+ "Internal2_net_cidr_len": "17",
+ "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+ "sctp-a-ingress-src_end_port": "65535.0",
+ "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+ "sctp-a-egress-dst_end_port": "65535.0",
+ "sctp-a-ingress_action": "pass",
+ "sctp-b-egress_rule_protocol": "icmp",
+ "sctp-b-ipv6-ingress_action": "pass",
+ "vlc_st_service_type": "firewall",
+ "sctp-b-ipv6-egress_dst_end_port": "65535",
+ "sctp-b-ipv6-ingress-dst_start_port": "0",
+ "vlc2_Internal2_mac": "00:80:37:0E:02:12",
+ "vlc_st_availability_zone": "true",
+ "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+ "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+ "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+ "Internal1_allow_transit": "true",
+ "gpb_flavor_name": "nv.c20r64d1",
+ "availability_zone_max_count": "1",
+ "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+ "sctp-b-ipv6-ingress_dst_addresses": "local",
+ "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+ "sctp-b-ipv6-ingress_ethertype": "IPv4",
+ "vlc1_Internal2_mac": "00:80:37:0E:01:12",
+ "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+ "sctp-a-ipv6-ingress_action": "pass",
+ "Internal1_rpf": "disable",
+ "sctp-b-ingress_ethertype": "IPv4",
+ "sctp-b-egress_rule_application": "any",
+ "sctp-b-ingress-src_end_port": "65535.0",
+ "sctp-a-ipv6-ingress_rule_protocol": "any",
+ "sctp-a-ingress-src_start_port": "0.0",
+ "sctp-b-egress-dst_end_port": "65535.0"
+ },
+ "type": "VF",
+ "modelCustomizationName": "VF_vMee 0",
+ "vfModules": {
+ "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+ "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+ "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+ "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+ "description": null,
+ "name": "VfVmee..vmme_vlc..module-1",
+ "version": "2",
+ "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "vmme_vlc"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+ "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+ "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+ "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+ "description": null,
+ "name": "VfVmee..vmme_gpb..module-2",
+ "version": "2",
+ "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "vmme_gpb"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "vf_vmee0..VfVmee..base_vmme..module-0": {
+ "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+ "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+ "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+ "description": null,
+ "name": "VfVmee..base_vmme..module-0",
+ "version": "2",
+ "modelCustomizationName": "VfVmee..base_vmme..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "base_vmme"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "vf_vmee0..VfVmee..base_vmme..module-0": {
+ "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+ "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+ "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+ "description": null,
+ "name": "VfVmee..base_vmme..module-0",
+ "version": "2",
+ "modelCustomizationName": "VfVmee..base_vmme..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "base_vmme"
+ },
+ "inputs": {}
+ }
+ },
+ "vfcInstanceGroups": {}
+ }
+ };
+ serviceModel.vfModules = {
+ "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+ "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+ "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+ "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+ "description": null,
+ "name": "VfVmee..vmme_vlc..module-1",
+ "version": "2",
+ "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "vmme_vlc"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+ "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+ "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+ "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+ "description": null,
+ "name": "VfVmee..vmme_gpb..module-2",
+ "version": "2",
+ "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "vmme_gpb"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "vf_vmee0..VfVmee..base_vmme..module-0": {
+ "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+ "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+ "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+ "description": null,
+ "name": "VfVmee..base_vmme..module-0",
+ "version": "2",
+ "modelCustomizationName": "VfVmee..base_vmme..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "base_vmme"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ };
+ serviceModel.volumeGroups = {
+ "vf_vmee0..VfVmee..base_vmme..module-0": {
+ "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+ "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+ "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+ "description": null,
+ "name": "VfVmee..base_vmme..module-0",
+ "version": "2",
+ "modelCustomizationName": "VfVmee..base_vmme..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "base_vmme"
+ },
+ "inputs": {}
+ }
+ };
+ return serviceModel;
+ }
+});
+
diff --git a/vid-webpack-master/cypress/integration/shared/error.message.popup.e2e.ts b/vid-webpack-master/cypress/integration/shared/error.message.popup.e2e.ts
new file mode 100644
index 000000000..8e78067e1
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/shared/error.message.popup.e2e.ts
@@ -0,0 +1,33 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/>
+/// <reference types="Cypress" />
+
+import { JsonBuilder } from '../../support/jsonBuilders/jsonBuilder';
+import { AsyncInstantiationModel } from '../../support/jsonBuilders/models/asyncInstantiation.model';
+
+describe('Error message popup', function () {
+ describe('show error on status 500', () => {
+ var jsonBuilderInstantiationBuilder : JsonBuilder<AsyncInstantiationModel> = new JsonBuilder<AsyncInstantiationModel>();
+ beforeEach(() => {
+ cy.window().then((win) => {
+ win.sessionStorage.clear();
+ cy.setReduxState();
+ cy.preventErrorsOnLoading();
+ cy.initAAIMock();
+ cy.initVidMock();
+ cy.login();
+ })
+ });
+
+ it('spinner should display after api call', function () {
+ // adding call with delay of 2000 sec
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json').then((res) => {
+ jsonBuilderInstantiationBuilder.basicJson(res, Cypress.config('baseUrl') + "/asyncInstantiation**", 500,0, "error 500 asyncInstantiation");
+
+ cy.openIframe('app/ui/#/instantiationStatus');
+ cy.get('div.title')
+ .contains('Server not available');
+
+ });
+ });
+ });
+});
diff --git a/vid-webpack-master/cypress/integration/shared/spinner.e2e.ts b/vid-webpack-master/cypress/integration/shared/spinner.e2e.ts
new file mode 100644
index 000000000..35f386fd5
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/shared/spinner.e2e.ts
@@ -0,0 +1,36 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/>
+/// <reference types="Cypress" />
+import { JsonBuilder } from '../../support/jsonBuilders/jsonBuilder';
+import { AsyncInstantiationModel } from '../../support/jsonBuilders/models/asyncInstantiation.model';
+
+describe('Spinner', function () {
+ describe('spinner', () => {
+ var jsonBuilderInstantiationBuilder : JsonBuilder<AsyncInstantiationModel> = new JsonBuilder<AsyncInstantiationModel>();
+ beforeEach(() => {
+ cy.window().then((win) => {
+ win.sessionStorage.clear();
+ cy.setReduxState();
+ cy.preventErrorsOnLoading();
+ cy.initAAIMock();
+ cy.initVidMock();
+ cy.login();
+ })
+ });
+
+ it('spinner should display after api call', function () {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json').then((res) => {
+
+ jsonBuilderInstantiationBuilder.basicJson(res,
+ Cypress.config('baseUrl') + "/asyncInstantiation**",
+ 200,
+ 2000,
+ "error 500 asyncInstantiation");
+ cy.openIframe('app/ui/#/instantiationStatus');
+
+ cy.get('.spinner')
+ .and('be.visible');
+
+ });
+ });
+ });
+});
diff --git a/vid-webpack-master/cypress/plugins/cy-ts-preprocessor.js b/vid-webpack-master/cypress/plugins/cy-ts-preprocessor.js
new file mode 100644
index 000000000..7f0bba98c
--- /dev/null
+++ b/vid-webpack-master/cypress/plugins/cy-ts-preprocessor.js
@@ -0,0 +1,26 @@
+const wp = require('@cypress/webpack-preprocessor')
+
+const webpackOptions = {
+ resolve: {
+ extensions: ['.ts', '.js']
+ },
+ module: {
+ rules: [
+ {
+ test: /\.ts$/,
+ exclude: [/node_modules/],
+ use: [
+ {
+ loader: 'ts-loader'
+ }
+ ]
+ }
+ ]
+ }
+}
+
+const options = {
+ webpackOptions
+}
+
+module.exports = wp(options)
diff --git a/vid-webpack-master/cypress/plugins/index.js b/vid-webpack-master/cypress/plugins/index.js
new file mode 100644
index 000000000..4170a8f4b
--- /dev/null
+++ b/vid-webpack-master/cypress/plugins/index.js
@@ -0,0 +1,6 @@
+const cypressTypeScriptPreprocessor = require('./cy-ts-preprocessor')
+module.exports = on => {
+ on('file:preprocessor', cypressTypeScriptPreprocessor);
+ on('fail', (err, runnable) => {return false});
+};
+
diff --git a/vid-webpack-master/cypress/support/application/application.session.actions.ts b/vid-webpack-master/cypress/support/application/application.session.actions.ts
new file mode 100644
index 000000000..490016bf6
--- /dev/null
+++ b/vid-webpack-master/cypress/support/application/application.session.actions.ts
@@ -0,0 +1,21 @@
+declare namespace Cypress {
+ interface Chainable {
+ setReduxState : typeof setReduxState;
+ }
+}
+
+/**********************************
+ Type to input with id some text
+ *********************************/
+function setReduxState(state?: string) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/basicRedux.json').then((res) => {
+ cy.window().then((win) => {
+ win.sessionStorage.setItem('reduxState', JSON.stringify(state ? state : res));
+ });
+ });
+}
+
+
+
+Cypress.Commands.add('setReduxState', setReduxState);
+
diff --git a/vid-webpack-master/cypress/support/commands.ts b/vid-webpack-master/cypress/support/commands.ts
new file mode 100644
index 000000000..3f72c2339
--- /dev/null
+++ b/vid-webpack-master/cypress/support/commands.ts
@@ -0,0 +1,15 @@
+// Cypress.Commands.add('login', () => {
+// const constant = {
+// 'LOGIN_ID': '#loginId',
+// 'PASSWORD_ID': '#password'
+// };
+//
+// cy.on('fail', (err, runnable) => { return false});
+// cy.visit('/login_external.htm')
+// .get(constant.LOGIN_ID).type('16807000')
+// .get(constant.PASSWORD_ID).type('16807000')
+// .get('#loginBtn').click()
+// .getCookies().then((cookies) => {
+// console.log(cookies[0].value)
+// })
+// });
diff --git a/vid-webpack-master/cypress/support/elements/element.actions.ts b/vid-webpack-master/cypress/support/elements/element.actions.ts
new file mode 100644
index 000000000..2d30aa1b1
--- /dev/null
+++ b/vid-webpack-master/cypress/support/elements/element.actions.ts
@@ -0,0 +1,49 @@
+import Chainable = Cypress.Chainable;
+
+declare namespace Cypress {
+ interface Chainable {
+ isElementContainsAttr : typeof isElementContainsAttr;
+ isElementDisabled : typeof isElementDisabled;
+ isElementEnabled : typeof isElementEnabled;
+ hasClass : typeof hasClass;
+ getElementByDataTestsId : typeof getElementByDataTestsId;
+ }
+}
+
+/*************************************************************************
+ isElementContainsAttr : check if element with id contains some attribute
+ *************************************************************************/
+function isElementContainsAttr(id : string, attr: string) : void {
+ cy.get("[data-tests-id='" + id +"']")
+ .should('have.attr', attr);
+}
+
+/*********************************************************
+ isElementDisabled : check if element with id is disabled
+ *********************************************************/
+function isElementDisabled(id : string) : void {
+ cy.get( "[data-tests-id='" + id +"']").should('be:disabled');
+}
+
+function isElementEnabled(id : string) : void {
+ cy.get( "button[data-tests-id='" + id +"']").should('be:enabled');
+}
+
+/****************************************************************
+ hasClass : check if element with id contains some class name
+ ****************************************************************/
+function hasClass(id : string, className : string) : void {
+ cy.get( "[data-tests-id='" + id +"']")
+ .should('have.class', className);
+}
+
+function getElementByDataTestsId(dataTestsId : string) : Chainable<JQuery<HTMLElement>> {
+ return cy.get( "[data-tests-id='" + dataTestsId +"']");
+}
+
+
+Cypress.Commands.add('isElementContainsAttr', isElementContainsAttr);
+Cypress.Commands.add('isElementDisabled', isElementDisabled);
+Cypress.Commands.add('isElementEnabled', isElementEnabled);
+Cypress.Commands.add('hasClass', hasClass);
+Cypress.Commands.add('getElementByDataTestsId', getElementByDataTestsId);
diff --git a/vid-webpack-master/cypress/support/elements/element.input.actions.ts b/vid-webpack-master/cypress/support/elements/element.input.actions.ts
new file mode 100644
index 000000000..714daf98a
--- /dev/null
+++ b/vid-webpack-master/cypress/support/elements/element.input.actions.ts
@@ -0,0 +1,46 @@
+declare namespace Cypress {
+ interface Chainable {
+ typeToInput : typeof typeToInput;
+ blurInput : typeof blurInput;
+ focusInput : typeof focusInput;
+ shouldInputContainsText: typeof shouldInputContainsText;
+ }
+}
+
+/**********************************
+ Type to input with id some text
+ *********************************/
+function typeToInput(id : string, text : string) : void {
+ cy.get( "[data-tests-id='" + id +"']")
+ .type(text, {force: true});
+}
+
+/********************
+ blur input with id
+ ********************/
+function blurInput(id : string) : void {
+ cy.get( "[data-tests-id='" + id +"']")
+ .blur();
+}
+
+/********************
+ focus input with id
+ ********************/
+function focusInput(id : string) : void {
+ cy.get( "[data-tests-id='" + id +"']")
+ .focus();
+}
+
+/*****************************************
+ test if input with id contains some text
+ ****************************************/
+function shouldInputContainsText(id : string, text : string) : void {
+ cy.get( "[data-tests-id='" + id +"']")
+ .contains('text')
+}
+
+Cypress.Commands.add('typeToInput', typeToInput);
+Cypress.Commands.add('blurInput', blurInput);
+Cypress.Commands.add('focusInput', focusInput);
+Cypress.Commands.add('shouldInputContainsText', shouldInputContainsText);
+
diff --git a/vid-webpack-master/cypress/support/elements/element.select.actions.ts b/vid-webpack-master/cypress/support/elements/element.select.actions.ts
new file mode 100644
index 000000000..452323d3d
--- /dev/null
+++ b/vid-webpack-master/cypress/support/elements/element.select.actions.ts
@@ -0,0 +1,16 @@
+declare namespace Cypress {
+ interface Chainable {
+ selectDropdownOptionByText : typeof selectDropdownOptionByText;
+ }
+}
+
+/************************************************
+ select option with some text with select tag id
+ ************************************************/
+function selectDropdownOptionByText(selectId : string, optionText : string) : void {
+ cy.getElementByDataTestsId(selectId)
+ .select(optionText);
+}
+
+Cypress.Commands.add('selectDropdownOptionByText', selectDropdownOptionByText);
+
diff --git a/vid-webpack-master/cypress/support/elements/element.table.actions.ts b/vid-webpack-master/cypress/support/elements/element.table.actions.ts
new file mode 100644
index 000000000..4994723d7
--- /dev/null
+++ b/vid-webpack-master/cypress/support/elements/element.table.actions.ts
@@ -0,0 +1,15 @@
+declare namespace Cypress {
+ interface Chainable {
+ getTableRowByIndex : typeof getTableRowByIndex;
+ }
+}
+
+/***************************************
+ get table row by table id and index
+ *************************************/
+function getTableRowByIndex(id : string, index : number) : Chainable<JQuery<HTMLElement>> {
+ return cy.get('table#' + id + ' tbody tr').eq(index);
+}
+
+Cypress.Commands.add('getTableRowByIndex', getTableRowByIndex);
+
diff --git a/vid-webpack-master/cypress/support/index.js b/vid-webpack-master/cypress/support/index.js
new file mode 100644
index 000000000..7b8506a1b
--- /dev/null
+++ b/vid-webpack-master/cypress/support/index.js
@@ -0,0 +1,30 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands';
+import './steps/login.step';
+import './elements/element.actions';
+import './elements/element.input.actions';
+import './elements/element.select.actions';
+import './application/application.session.actions';
+import './elements/element.table.actions';
+import './jsonBuilders/mocks/aai.mock';
+import './jsonBuilders/mocks/vid.mock';
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
+
+
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/jsonBuilder.ts b/vid-webpack-master/cypress/support/jsonBuilders/jsonBuilder.ts
new file mode 100644
index 000000000..0bab4e1da
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/jsonBuilder.ts
@@ -0,0 +1,31 @@
+export class JsonBuilder<T> implements IJsonBuilder<T>{
+ currentValue: T;
+
+ public basicJson(json: JSON, url: string, status: number, delay: number, alias: string, changeResFunc?: Function) : void {
+ this.currentValue = <T>JSON.parse(JSON.stringify(json));
+ this.currentValue = changeResFunc ? changeResFunc(this.currentValue) : this.currentValue;
+ return this.initMockCall(url, status, delay, alias);
+ }
+
+ public initMockCall(url: string, status: number, delay: number, alias: string) {
+ cy.server()
+ .route({
+ method: 'GET',
+ status: status,
+ delay : delay ? delay : 0,
+ url: url,
+ response: JSON.stringify(this.currentValue)
+ }).as(alias);
+ }
+ public basicMock(jsonPath: string, url: string) {
+ cy.readFile(jsonPath).then((res) => {
+ this.basicJson(res, url, 200, 0, url,);
+ })
+ }
+}
+
+export interface IJsonBuilder<T>{
+ basicJson(json: JSON, url: string, status: number, delay: number, alias: string, changeResFunc?: Function) : void;
+ initMockCall(url: string, status: number, delay: number, alias: string): void;
+ basicMock(jsonPath: string, url: string): void;
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/aai.mock.ts b/vid-webpack-master/cypress/support/jsonBuilders/mocks/aai.mock.ts
new file mode 100644
index 000000000..a95487731
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/aai.mock.ts
@@ -0,0 +1,80 @@
+declare namespace Cypress {
+ interface Chainable {
+ initAAIMock: typeof initAAIMock;
+ initAlaCarteService : typeof initAlaCarteService;
+ initZones : typeof initZones;
+ }
+}
+
+function initGetSubscribers(response? : JSON) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/subscribers.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ status : 200,
+ url : Cypress.config('baseUrl') + "/aai_get_subscribers**",
+ response : response ? response : res
+ }).as('initGetSubscribers')
+ });
+}
+
+function initGetAAISubDetails(response? : JSON) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/aaiSubDetails.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ status: 200,
+ url: Cypress.config('baseUrl') + "/aai_sub_details**",
+ response: response ? response : res
+ })
+ });
+}
+
+function initAlaCarteService(response? : JSON) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/a-la-carteService.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ status: 200,
+ url: Cypress.config('baseUrl') + "/rest/models/services**",
+ response: response ? response : res
+ }).as('initAlaCarteService')
+ });
+}
+
+function initAAIServices(response? : JSON) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/aaiServices.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ status : 200,
+ url : Cypress.config('baseUrl') + "/aai_get_services**",
+ response : response ? response : res
+ }).as(('initAAIServices'));
+ });
+}
+
+function initZones(response? : JSON) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/zones.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ status : 200,
+ url : Cypress.config('baseUrl') + "/aai_get_aic_zones**",
+ response : response ? response : res
+ }).as(('zones'));
+ });
+}
+
+
+function initAAIMock(): void {
+ initGetSubscribers();
+ initAAIServices();
+}
+
+
+Cypress.Commands.add('initAAIMock', initAAIMock);
+Cypress.Commands.add('initAlaCarteService', initAlaCarteService);
+Cypress.Commands.add('initZones', initZones);
+
+
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/a-la-carteService.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/a-la-carteService.json
new file mode 100644
index 000000000..68a8d4539
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/a-la-carteService.json
@@ -0,0 +1,159 @@
+{
+ "services": [
+ {
+ "uuid": "4d71990b-d8ad-4510-ac61-496288d9078e",
+ "invariantUUID": "d27e42cf-087e-4d31-88ac-6c4b7585f800",
+ "name": "action-data",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "resource",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+ "invariantUUID": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+ "name": "action-data",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "resource",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "666a06ee-4b57-46df-bacf-908da8f10c3f",
+ "invariantUUID": "ea78c9e3-514d-4a0a-9162-13837fa54c35",
+ "name": "multicast-configuration",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "resource",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "20c4431c-246d-11e7-93ae-92361f002671",
+ "invariantUUID": "78ca26d0-246d-11e7-93ae-92361f002671",
+ "name": "vSAMP10aDEV::base::module-0",
+ "version": "2",
+ "toscaModelURL": null,
+ "category": "resource",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "797a6c41-0f80-4d35-a288-3920c4e06baa",
+ "invariantUUID": "5b607929-6088-4614-97ef-cac817508e0e",
+ "name": "CONTRAIL30_L2NODHCP",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "resource",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "f1bde010-cc5f-4765-941f-75f15b24f9fc",
+ "invariantUUID": "0143d57b-a517-4de9-a0a1-eb76db51f402",
+ "name": "BkVmxAv061917..base_vPE_AV..module-0",
+ "version": "2",
+ "toscaModelURL": null,
+ "category": "resource",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "ipe-resource-id-ps-02",
+ "invariantUUID": "ipe-resource-id-ps-02",
+ "name": "abc",
+ "version": "v1.0",
+ "toscaModelURL": null,
+ "category": "resource",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "lmoser410-connector-model-version-id",
+ "invariantUUID": "lmoser410-connector-model-id",
+ "name": "connector",
+ "version": "v1.0",
+ "toscaModelURL": null,
+ "category": "widget",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "ff2ae348-214a-11e7-93ae-92361f002673",
+ "invariantUUID": "3a97db99-c4bb-498a-a13a-38f65f1ced3d",
+ "name": "vSAMP10aDEV::base::module-0",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "resource",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "204c641a-3494-48c8-979a-86856f5fd32a",
+ "invariantUUID": "3c504d40-b847-424c-9d25-4fb7e0a3e994",
+ "name": "named-query-element",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "widget",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ },
+ {
+ "uuid": "acba1f72-c6e0-477f-9426-ad190151e100",
+ "invariantUUID": "93e56950-cb19-44e6-ace4-8b50f2d02e45",
+ "name": "RG_6-19_Test",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "resource",
+ "lifecycleState": null,
+ "lastUpdaterUserId": null,
+ "lastUpdaterFullName": null,
+ "distributionStatus": null,
+ "artifacts": null,
+ "resources": null
+ }
+ ],
+ "readOnly": false
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstancePnfs.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstancePnfs.json
new file mode 100644
index 000000000..fe51488c7
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstancePnfs.json
@@ -0,0 +1 @@
+[]
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstances.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstances.json
new file mode 100644
index 000000000..3435ff07e
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServiceInstances.json
@@ -0,0 +1,14 @@
+{
+ "service-instances": [
+ {
+ "aaiModelInvariantId": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "aaiModelVersionId": "240376de-870e-48df-915a-31f140eedd2c",
+ "globalCustomerId": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "isPermitted": true,
+ "serviceInstanceId": "3f93c7cb-2fd0-4557-9514-e189b7b04f9d",
+ "serviceInstanceName": "vid-test-444",
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "USP VOICE"
+ }
+ ]
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServices.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServices.json
new file mode 100644
index 000000000..7b4440d48
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiServices.json
@@ -0,0 +1,46 @@
+{
+ "service": {
+ "uuid": "4d71990b-d8ad-4510-ac61-496288d9078e",
+ "invariantUuid": "d27e42cf-087e-4d31-88ac-6c4b7585f800",
+ "name": "vidmacrofalsenaming",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "Network L1-3",
+ "serviceType": "",
+ "serviceRole": "",
+ "description": "vidmacrofalsenaming",
+ "serviceEcompNaming": "false",
+ "instantiationType": "A-La-Carte",
+ "inputs": {}
+ },
+ "vnfs": {},
+ "networks": {
+ "MULTI_PROVIDER_PORT_GROUP 0": {
+ "uuid": "e5d235de-2188-4f9f-a28c-fe38967883f2",
+ "invariantUuid": "b0303003-0abb-454c-9119-8cbe2e09e003",
+ "description": "Creates a neutron multi-provider VLAN network with dummy subnet",
+ "name": "MULTI_PROVIDER_PORT_GROUP",
+ "version": "1.0",
+ "customizationUuid": "0fde4286-ee4c-439d-9556-74b6be6bbc42",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+ "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+ "network_scope": "GLOBAL",
+ "network_ecomp_naming": "{ecomp_generated_naming=true}",
+ "network_type": "MULTI_PROVIDER_PORT_GROUP",
+ "network_technology": "MULTI_GROUP",
+ "network_homing": "{ecomp_selected_instance_node_target=false}"
+ },
+ "type": "VL",
+ "modelCustomizationName": "MULTI_PROVIDER_PORT_GROUP 0"
+ }
+ },
+ "collectionResource": {},
+ "configurations": {},
+ "serviceProxies": {},
+ "vfModules": {},
+ "volumeGroups": {},
+ "pnfs": {}
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiSubDetails.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiSubDetails.json
new file mode 100644
index 000000000..0063a9d46
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiSubDetails.json
@@ -0,0 +1,478 @@
+{
+ "global-customer-id": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "subscriber-name": "USP VOICE",
+ "subscriber-type": "INFRA",
+ "resource-version": "1494001938080",
+ "service-subscriptions": {
+ "service-subscription": [
+ {
+ "service-type": "HOSTED COMMUNICATIONS",
+ "resource-version": "1494001920845",
+ "service-instances": {
+ "service-instance": [
+ {
+ "service-instance-id": "67aba9ab-f745-442e-a37b-2040a17ec9c7",
+ "service-instance-name": "test_948473",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1501137356564",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "1de57bcf-365a-4ba7-8a51-7377b7144586"
+ },
+ {
+ "service-instance-id": "328e117c-8f27-4a59-beea-3b3c36e4652f",
+ "service-instance-name": "test_inputs_002",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1501142919029",
+ "orchestration-status": "Active",
+ "model-invariant-id": "74b2fa72-e3b9-4942-8448-983a4b50891a",
+ "model-version-id": "8c16d416-f183-4f2e-8a05-48a7ee0738f7"
+ },
+ {
+ "service-instance-id": "66608fd9-a786-4f60-ae7b-c18d030c499b",
+ "service-instance-name": "testtt",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1503224667654",
+ "orchestration-status": "Active",
+ "model-invariant-id": "1cc41b64-5c12-4d51-bac9-448e963bd81d",
+ "model-version-id": "91f79100-6450-4078-80d7-531427b4fe74"
+ },
+ {
+ "service-instance-id": "9d29dcf2-7742-4384-bca0-a38f6c296a79",
+ "service-instance-name": "test_9sdfkdfj",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500813552431",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "5b174112-cea4-4a36-b540-853b9d0548fc"
+ },
+ {
+ "service-instance-id": "e10414d0-692b-4e8e-b56e-9fdc5ef24059",
+ "service-instance-name": "test_04598485",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1501144603052",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "1de57bcf-365a-4ba7-8a51-7377b7144586"
+ },
+ {
+ "service-instance-id": "25a5cc93-73df-4c9c-9cc5-e2df9a72f3b7",
+ "service-instance-name": "test_inputs_values1",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1501412516301",
+ "orchestration-status": "Active",
+ "model-invariant-id": "b594a6ec-94e0-4c95-826f-4c3d3af56339",
+ "model-version-id": "59f3ea84-313a-4670-b7c2-8997e5749864"
+ },
+ {
+ "service-instance-id": "9cfcd777-7f14-425c-80bf-a562fba03cfa",
+ "service-instance-name": "test_vl_inputs01",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1501421232100",
+ "orchestration-status": "Active",
+ "model-invariant-id": "9f5ed6d5-c960-4903-9625-4ccb6ba9c63a",
+ "model-version-id": "f263c8f6-b52f-4b6c-9ed9-0c83ad098697"
+ },
+ {
+ "service-instance-id": "4173d5da-df33-474e-a4ef-c93be61a1355",
+ "service-instance-name": "test_instance_vl_01",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500966394803",
+ "orchestration-status": "Active",
+ "model-invariant-id": "9f5ed6d5-c960-4903-9625-4ccb6ba9c63a",
+ "model-version-id": "25447dd8-4154-4146-b57b-bc3d82e1a670"
+ },
+ {
+ "service-instance-id": "1753f7eb-85db-498c-aa6a-c68a06fc77db",
+ "service-instance-name": "sdfjdfj",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500991399818",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "1de57bcf-365a-4ba7-8a51-7377b7144586"
+ },
+ {
+ "service-instance-id": "5d5520c7-dcbc-4287-bed2-50ff57c41a6f",
+ "service-instance-name": "tesy_jsdjjdj",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1501400257544",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "240376de-870e-48df-915a-31f140eedd2c"
+ },
+ {
+ "service-instance-id": "1ab8ad18-1445-412a-81f2-671b936ab650",
+ "service-instance-name": "Test_098765",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500562034054",
+ "orchestration-status": "Active",
+ "model-invariant-id": "74b2fa72-e3b9-4942-8448-983a4b50891a",
+ "model-version-id": "8c16d416-f183-4f2e-8a05-48a7ee0738f7"
+ },
+ {
+ "service-instance-id": "a1427609-254d-4637-906f-8f0f6f6d4711",
+ "service-instance-name": "test343445",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502111792531",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "c079d859-4d81-4add-a9c3-94551f96e2b0"
+ },
+ {
+ "service-instance-id": "f87c0dbe-2658-4971-8014-ad5da1f9df51",
+ "service-instance-name": "test_03494595",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502006858511",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "240376de-870e-48df-915a-31f140eedd2c"
+ },
+ {
+ "service-instance-id": "7a8dea9f-5f67-4755-9344-ec3736240b9e",
+ "service-instance-name": "test_045045",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502111390681",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "c079d859-4d81-4add-a9c3-94551f96e2b0"
+ },
+ {
+ "service-instance-id": "8d0f4c13-a564-43ec-b756-c0017161dee2",
+ "service-instance-name": "testkjhjjj",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500553831697",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "5b174112-cea4-4a36-b540-853b9d0548fc"
+ },
+ {
+ "service-instance-id": "27535e2a-785e-47e8-a482-16f4d019033a",
+ "service-instance-name": "test765766",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502109495302",
+ "orchestration-status": "Active",
+ "model-invariant-id": "452538c0-ef1e-4d65-9939-697f6ed58934",
+ "model-version-id": "f430728a-4530-42be-a577-1206b9484cef"
+ },
+ {
+ "service-instance-id": "9601d34e-d3f9-4108-932c-fc52312c260a",
+ "service-instance-name": "test_9459495",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502028721334",
+ "orchestration-status": "Active",
+ "model-invariant-id": "d2103eaa-8cc7-4422-ad67-1ce582af0097",
+ "model-version-id": "5801fed3-b6db-4969-abb4-d1171c4c3202"
+ },
+ {
+ "service-instance-id": "e65ae593-afdd-4f31-8192-ba7606a026e4",
+ "service-instance-name": "test_84574854",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502026481024",
+ "orchestration-status": "Active",
+ "model-invariant-id": "d2103eaa-8cc7-4422-ad67-1ce582af0097",
+ "model-version-id": "5801fed3-b6db-4969-abb4-d1171c4c3202"
+ },
+ {
+ "service-instance-id": "29e210af-9fa5-44ae-940c-acca84b1b287",
+ "service-instance-name": "testjkdfkdf",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502114664500",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "c079d859-4d81-4add-a9c3-94551f96e2b0"
+ },
+ {
+ "service-instance-id": "c1a81ab3-2bc6-4b6f-b04f-d358e67c1d01",
+ "service-instance-name": "test499494",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500552497782",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "1de57bcf-365a-4ba7-8a51-7377b7144586"
+ },
+ {
+ "service-instance-id": "01834681-686a-4258-aff0-6eea448deddd",
+ "service-instance-name": "tesr_iii_999",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502019889568",
+ "orchestration-status": "Active",
+ "model-invariant-id": "d2103eaa-8cc7-4422-ad67-1ce582af0097",
+ "model-version-id": "5801fed3-b6db-4969-abb4-d1171c4c3202"
+ },
+ {
+ "service-instance-id": "266008e8-04f9-440a-90e9-d9299821ec08",
+ "service-instance-name": null,
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1494001993349",
+ "orchestration-status": null,
+ "model-invariant-id": "",
+ "model-version-id": null
+ },
+ {
+ "service-instance-id": "6c3a22e9-6b04-49d2-b1fa-1e49103971ca",
+ "service-instance-name": null,
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1494001986409",
+ "orchestration-status": null,
+ "model-invariant-id": "",
+ "model-version-id": null
+ },
+ {
+ "service-instance-id": "918085fc-29cf-41c2-acc8-15878c0d58b3",
+ "service-instance-name": null,
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1494001986411",
+ "orchestration-status": null,
+ "model-invariant-id": "",
+ "model-version-id": null
+ },
+ {
+ "service-instance-id": "1c464a9d-eff7-4d29-8e97-ed1e9e3c8458",
+ "service-instance-name": null,
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1494001953169",
+ "orchestration-status": null,
+ "model-invariant-id": "",
+ "model-version-id": null
+ },
+ {
+ "service-instance-id": "bb2f563f-6db7-46ec-b521-fc6ee07e4f3e",
+ "service-instance-name": null,
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1494002002228",
+ "orchestration-status": null,
+ "model-invariant-id": "",
+ "model-version-id": null
+ },
+ {
+ "service-instance-id": "4cf94a42-85b8-414f-8fb4-a43b1dac1d2f",
+ "service-instance-name": null,
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1494001834026",
+ "orchestration-status": null,
+ "model-invariant-id": "",
+ "model-version-id": null
+ },
+ {
+ "service-instance-id": "ed7c0d8e-de81-408f-b695-47b9dd6b2ca0",
+ "service-instance-name": null,
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1494001986403",
+ "orchestration-status": null,
+ "model-invariant-id": "",
+ "model-version-id": null
+ },
+ {
+ "service-instance-id": "8bf34b89-1648-4a41-a21f-9b752833bd4b",
+ "service-instance-name": "test-gkmf546g",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500377885652",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "1de57bcf-365a-4ba7-8a51-7377b7144586"
+ },
+ {
+ "service-instance-id": "082c606c-60d7-4d9a-87c7-1370de6e56ba",
+ "service-instance-name": "test123456",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500375305701",
+ "orchestration-status": "Active",
+ "model-invariant-id": "d2103eaa-8cc7-4422-ad67-1ce582af0097",
+ "model-version-id": "5801fed3-b6db-4969-abb4-d1171c4c3202"
+ },
+ {
+ "service-instance-id": "c4707aae-9b16-49b4-8b52-cbeb8c4129ab",
+ "service-instance-name": "test_sdfdlfldl",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500376318829",
+ "orchestration-status": "Active",
+ "model-invariant-id": "d27e42cf-087e-4d31-88ac-6c4b7585f800",
+ "model-version-id": "cad9f2eb-39f7-4692-90c2-8726bb594610"
+ },
+ {
+ "service-instance-id": "86ab6048-9037-4367-ac01-f2e5881e8034",
+ "service-instance-name": "test1234456",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500369079277",
+ "orchestration-status": "Active",
+ "model-invariant-id": "b1ed0d58-0700-4631-be18-d2f1e527d637",
+ "model-version-id": "849a6347-cca7-4ae6-b5c2-7d41e9f6d9b2"
+ },
+ {
+ "service-instance-id": "a5e3b6ae-7b4c-4247-b975-1cd46c3b3e9a",
+ "service-instance-name": "pavel_usp_voice",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1506931067790",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "5b174112-cea4-4a36-b540-853b9d0548fc"
+ },
+ {
+ "service-instance-id": "c9fb03a4-8c21-444a-84ee-a6f969698d9c",
+ "service-instance-name": "test_0e459495945kg",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502021459612",
+ "orchestration-status": "Active",
+ "model-invariant-id": "d2103eaa-8cc7-4422-ad67-1ce582af0097",
+ "model-version-id": "5801fed3-b6db-4969-abb4-d1171c4c3202"
+ },
+ {
+ "service-instance-id": "4fd55324-bc4d-4acf-8f76-2e1eb01ae6a5",
+ "service-instance-name": "test_0w459495",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502019352627",
+ "orchestration-status": "Active",
+ "model-invariant-id": "e3ee9d25-2c6b-4734-8a8c-b6e0dee11ca9",
+ "model-version-id": "159cc54d-a6be-4c3b-bea3-3214181ebb5d"
+ },
+ {
+ "service-instance-id": "bbccd5cf-f641-4082-8411-7ae123530d92",
+ "service-instance-name": "kkk",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1502087710872",
+ "orchestration-status": "Active",
+ "model-invariant-id": "331a194d-9248-4533-88bc-62c812ccb5c1",
+ "model-version-id": "171b3887-e73e-479d-8ef8-2690bf74f2aa"
+ },
+ {
+ "service-instance-id": "4c263e04-260e-434a-8ac2-b0335a02f30b",
+ "service-instance-name": null,
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1494001791264",
+ "orchestration-status": null,
+ "model-invariant-id": "",
+ "model-version-id": null
+ },
+ {
+ "service-instance-id": "e4feb759-e4a9-4614-b2d2-985848ba3b9f",
+ "service-instance-name": "test345345342334f",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1499869396079",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "240376de-870e-48df-915a-31f140eedd2c"
+ }
+ ]
+ },
+ "is-permitted": false
+ },
+ {
+ "service-type": "TSBC",
+ "resource-version": "1494001891362",
+ "service-instances": {
+ "service-instance": [
+ {
+ "service-instance-id": "c0edefb0-2505-4a34-85cc-96c4cd5a121d",
+ "service-instance-name": "test-343432",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1500370094198",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "240376de-870e-48df-915a-31f140eedd2c"
+ },
+ {
+ "service-instance-id": "7cb54908-f3fb-46b9-b547-d1e670ea95b2",
+ "service-instance-name": "test765445g",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1499868690949",
+ "orchestration-status": "Active",
+ "model-invariant-id": "709d1be4-9a3f-4a29-8c4d-a20465e808a3",
+ "model-version-id": "240376de-870e-48df-915a-31f140eedd2c"
+ },
+ {
+ "service-instance-id": "8e953267-4cd8-45ec-ae7f-bdeb018656c0",
+ "service-instance-name": "a1",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1509355912484",
+ "orchestration-status": "Active",
+ "model-invariant-id": "340f3957-ff0a-4503-866d-a34fd1b97450",
+ "model-version-id": "ee2d8783-8495-4fb1-9553-6cdbd2dd3a50"
+ },
+ {
+ "service-instance-id": "e2ecfd33-b5d3-4a7b-85ba-1a709b26b66c",
+ "service-instance-name": "a3",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1509356358573",
+ "orchestration-status": "Active",
+ "model-invariant-id": "d5937aa1-37fb-4ed0-8c30-5144b89a64ae",
+ "model-version-id": "06ac9663-54cf-4c77-b926-6e8757cf6380"
+ },
+ {
+ "service-instance-id": "7dfef88f-fec0-421f-90d4-91eea35a5813",
+ "service-instance-name": "shanitest",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1508144995828",
+ "orchestration-status": "Active",
+ "model-invariant-id": "d7b48529-6ae2-49f0-8633-b29e7cd4d4ce",
+ "model-version-id": "44671b15-83dd-4db7-a36e-dfada3eaa2f9"
+ },
+ {
+ "service-instance-id": "a46ca55c-e9bd-4e68-9c49-c98933240218",
+ "service-instance-name": "si_failtest",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1494001997513",
+ "orchestration-status": null,
+ "model-invariant-id": "732263bd-0655-428d-a347-d65676d1a949",
+ "model-version-id": null
+ },
+ {
+ "service-instance-id": "e165f1af-a3cf-4323-8cd2-607acb55baa9",
+ "service-instance-name": "first_macro_shani",
+ "persona-model-id": null,
+ "persona-model-version": null,
+ "resource-version": "1508071197869",
+ "orchestration-status": "Active",
+ "model-invariant-id": "5b9c0f33-eec1-484a-bf77-736a6644d7a8",
+ "model-version-id": "b75e0d22-05ff-4448-9266-5f0d4e1dbbd6"
+ }
+ ]
+ },
+ "is-permitted": false
+ }
+ ]
+ }
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiSubViewEditForComplexService.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiSubViewEditForComplexService.json
new file mode 100644
index 000000000..0706036a1
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/aaiSubViewEditForComplexService.json
@@ -0,0 +1,113 @@
+{
+ "inventory-response-item": [
+ {
+ "model-name": "1707vidnf",
+ "service-instance": {
+ "service-instance-id": "3f93c7cb-2fd0-4557-9514-e189b7b04f9d",
+ "service-instance-name": "complex-service"
+ },
+ "extra-properties": {},
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "model-name": "VID-PCRF-05-15-17",
+ "generic-vnf": {
+ "vnf-id": "c015cc0f-0f37-4488-aabf-53795fd93cd3",
+ "vnf-name": "fsd",
+ "vnf-type": "1707vidnf/VID-PCRF-05-15-17 0",
+ "service-id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+ "prov-status": "PREPROV",
+ "orchestration-status": "Created",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1502299355826",
+ "model-invariant-id": "4160458e-f648-4b30-a176-43881ffffe9e",
+ "model-version-id": "d6557200-ecf2-4641-8094-5393ae3aae60",
+ "model-customization-id": "91415b44-753d-494c-926a-456a9172bbb9",
+ "nf-type": "null",
+ "nf-function": "null",
+ "nf-role": "null",
+ "nf-naming-code": "null"
+ },
+ "extra-properties": {},
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "volume-group": {
+ "volume-group-id": "d9db0900-31f6-4880-8658-8c996c6123b4",
+ "volume-group-name": "f",
+ "heat-stack-id": "",
+ "vnf-type": "1707vidnf/null",
+ "orchestration-status": "Pending",
+ "vf-module-model-customization-id": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+ "resource-version": "1508048984071"
+ },
+ "extra-properties": {}
+ },
+ {
+ "model-name": "VidPcrf051517..pcrf_base_template_v3_0..module-0",
+ "vf-module": {
+ "vf-module-id": "f2805715-e24f-4c8a-9eb3-6c618da7691d",
+ "vf-module-name": "aa",
+ "orchestration-status": "pendingactivation",
+ "is-base-vf-module": true,
+ "resource-version": "1504770843380",
+ "model-invariant-id": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+ "model-version-id": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+ "model-customization-id": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+ "module-index": 0
+ },
+ "extra-properties": {}
+ }
+ ]
+ }
+ },
+ {
+ "l3-network": {
+ "network-id": "6adc05e4-85c6-4f91-aa5a-1eb9546c4369",
+ "network-name": "APP-C-DND_vEPDG-FN_hsl_fn_net_1",
+ "network-type": "CONTRAIL30_BASIC",
+ "network-role": "hsl",
+ "network-technology": "contrail",
+ "neutron-network-id": "41a61725-f623-4166-bc84-e76a219cca9d",
+ "is-bound-to-vpn": false,
+ "service-id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "network-role-instance": 0,
+ "resource-version": "1511279493784",
+ "orchestration-status": "Created",
+ "heat-stack-id": "APP-C-DND_vEPDG-FN_hsl_fn_net_1/af134fb1-8ce3-4d41-88d9-8a83f5f79776",
+ "contrail-network-fqdn": "default-domain:APP-C-DND:APP-C-DND_vEPDG-FN_hsl_fn_net_1",
+ "physical-network-name": "leave blank",
+ "is-provider-network": false,
+ "is-shared-network": true,
+ "is-external-network": false
+ },
+ "extra-properties": {},
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "subnet": {
+ "subnet-id": "1254dd9b-e689-4075-a089-f0deeb23c00c",
+ "subnet-name": "APP-C-DND_vEPDG-FN_hsl_fn_net_1_subnet_1",
+ "neutron-subnet-id": "7b5ea34d-fb95-4278-a148-4f6677ebe866",
+ "gateway-address": "107.243.49.1",
+ "network-start-address": "107.243.49.0",
+ "cidr-mask": "26",
+ "ip-version": "4",
+ "orchestration-status": "Created",
+ "dhcp-enabled": true,
+ "dhcp-start": "107.243.49.3",
+ "dhcp-end": "107.243.49.62",
+ "ip-assignment-direction": "false",
+ "resource-version": "1511279493791"
+ },
+ "extra-properties": {}
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json
new file mode 100644
index 000000000..f9d4d0661
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json
@@ -0,0 +1,274 @@
+[
+ {
+ "id": 8,
+ "created": 1525075968000,
+ "modified": 1525075971000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "5c2cd8e5-27d0-42e3-85a1-85db5eaba459",
+ "templateId": "d42ba7c8-9e19-4e34-ae2c-d8af3f24498e",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1525075968000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "owningEntityName": "MetroPacketCore",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "tenantName": "AIN Web Tool-15-D-testgamma",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "nWUfl instance name_002",
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "action-data",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1525075968000
+ },
+ {
+ "id": 7,
+ "created": 1525075968000,
+ "modified": 1525075971000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "13063a83-924e-4500-a3a1-e53d1b58450b",
+ "templateId": "d42ba7c8-9e19-4e34-ae2c-d8af3f24498e",
+ "userId": "16807000",
+ "jobStatus": "IN_PROGRESS",
+ "statusModifiedDate": 1525075968000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "owningEntityName": "MetroPacketCore",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "tenantName": "AIN Web Tool-15-D-testgamma",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "nWUfl instance name_001",
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "action-data",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1525075968000
+ },
+ {
+ "id": 6,
+ "created": 1525007432000,
+ "modified": 1525007434000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "e1db03c3-6274-4ff7-84cf-7bd3a3946de7",
+ "templateId": "cad41760-8653-4c5a-a5fd-8ee34780ae69",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1525007432000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "someID",
+ "owningEntityName": "expected-owningEntityName",
+ "project": "a-project-name57322c07-bb83-4e9a-9ef2-8fd53c4dd012",
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": "greatTenant",
+ "tenantName": null,
+ "regionId": "my-expected-region-id",
+ "regionName": null,
+ "serviceType": "mySubType",
+ "subscriberName": "ac040e8a-b43a-441b-ab87-603f5b70be55",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "MichaelJordan_01",
+ "serviceModelId": "300adb1e-9b0c-4d52-bfb5-fa5393c4eabb",
+ "serviceModelName": "AIM_TRANSPORT_00004",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1525007432000
+ },
+ {
+ "id": 5,
+ "created": 1524995555000,
+ "modified": 1524995556000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "9f88fdb5-bb47-4bf3-8c5f-98f1ad0ec87c",
+ "templateId": "ce4ec177-cfc8-483e-8a2c-b7aea53fd740",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1524995555000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "aaa1",
+ "owningEntityName": "aaa1",
+ "project": "DFW",
+ "aicZoneId": "BAN1",
+ "aicZoneName": "VSDKYUTP-BAN1",
+ "tenantId": "1178612d2b394be4834ad77f567c0af2",
+ "tenantName": "AIN Web Tool-15-D-SSPtestcustome",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": null,
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "ComplexService",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524995555000
+ },
+ {
+ "id": 4,
+ "created": 1524994349000,
+ "modified": 1524994350000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "b73b1543-fa12-4ad5-8ef5-49f02eb33698",
+ "templateId": "79af00c6-4712-432a-8989-b6419c8baa40",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1524994349000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "aaa1",
+ "owningEntityName": "aaa1",
+ "project": "DFW",
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+ "tenantName": "AIN Web Tool-15-D-STTest2",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": null,
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "ComplexService",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524994349000
+ },
+ {
+ "id": 3,
+ "created": 1524991828000,
+ "modified": 1524991830000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "725ef127-4ee5-4665-bdf1-55ee342b362f",
+ "templateId": "6bd53c0d-8742-43f6-9ed2-efbb87062779",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1524991828000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "aaa1",
+ "owningEntityName": "aaa1",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "tenantName": "USP-SIP-IC-24335-T-01",
+ "regionId": "AAIAIC25",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": null,
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "ComplexService",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524991828000
+ },
+ {
+ "id": 2,
+ "created": 1524663233000,
+ "modified": 1524663236000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "b1ff271b-829a-43f9-a2e3-23987a34f261",
+ "templateId": "262fccc5-cae9-4258-b522-540c4010e0a9",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1524663233000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "owningEntityName": "MetroPacketCore",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "tenantName": "AIN Web Tool-15-D-testgamma",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "sPenLiZXXpqzsVck instance name_02",
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "action-data",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524663233000
+ },
+ {
+ "id": 1,
+ "created": 1524663233000,
+ "modified": 1524663236000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "850dc7d2-5240-437f-9bcd-b1ed7dc339ca",
+ "templateId": "262fccc5-cae9-4258-b522-540c4010e0a9",
+ "userId": "16807000",
+ "jobStatus": "IN_PROGRESS",
+ "statusModifiedDate": 1524663233000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "owningEntityName": "MetroPacketCore",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "tenantName": "AIN Web Tool-15-D-testgamma",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "sPenLiZXXpqzsVck instance name_01",
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "action-data",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524663233000
+ }
+]
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/auditInfoMSO.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/auditInfoMSO.json
new file mode 100644
index 000000000..0f7646dfa
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/auditInfoMSO.json
@@ -0,0 +1,12 @@
+[
+ {
+ "id": null,
+ "jobId": "20fb575c-130a-4c5e-b434-50440bf992ec",
+ "jobStatus": "COMPLETE",
+ "source": "MSO",
+ "requestId": "c0011670-0e1a-4b74-945d-8bf5aede1d9c",
+ "additionalInfo": "Service Instance was created successfully.",
+ "final": null,
+ "createdDate": 1526471134058
+ }
+]
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/auditInfoVid.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/auditInfoVid.json
new file mode 100644
index 000000000..d1764a1c1
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/auditInfoVid.json
@@ -0,0 +1,32 @@
+[
+ {
+ "id": null,
+ "jobId": "20fb575c-130a-4c5e-b434-50440bf992ec",
+ "jobStatus": "PENDING",
+ "source": "VID",
+ "requestId": null,
+ "additionalInfo": null,
+ "final": false,
+ "createdDate": 1526471134058
+ },
+ {
+ "id": null,
+ "jobId": "20fb575c-130a-4c5e-b434-50440bf992ec",
+ "jobStatus": "IN_PROGRESS",
+ "source": "VID",
+ "requestId": null,
+ "additionalInfo": null,
+ "final": false,
+ "createdDate": 1526471134058
+ },
+ {
+ "id": null,
+ "jobId": "20fb575c-130a-4c5e-b434-50440bf992ec",
+ "jobStatus": "COMPLETED",
+ "source": "VID",
+ "requestId": null,
+ "additionalInfo": null,
+ "final": true,
+ "createdDate": 1526471134058
+ }
+]
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicAsyncInstantiation.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicAsyncInstantiation.json
new file mode 100644
index 000000000..f9d4d0661
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicAsyncInstantiation.json
@@ -0,0 +1,274 @@
+[
+ {
+ "id": 8,
+ "created": 1525075968000,
+ "modified": 1525075971000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "5c2cd8e5-27d0-42e3-85a1-85db5eaba459",
+ "templateId": "d42ba7c8-9e19-4e34-ae2c-d8af3f24498e",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1525075968000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "owningEntityName": "MetroPacketCore",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "tenantName": "AIN Web Tool-15-D-testgamma",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "nWUfl instance name_002",
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "action-data",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1525075968000
+ },
+ {
+ "id": 7,
+ "created": 1525075968000,
+ "modified": 1525075971000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "13063a83-924e-4500-a3a1-e53d1b58450b",
+ "templateId": "d42ba7c8-9e19-4e34-ae2c-d8af3f24498e",
+ "userId": "16807000",
+ "jobStatus": "IN_PROGRESS",
+ "statusModifiedDate": 1525075968000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "owningEntityName": "MetroPacketCore",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "tenantName": "AIN Web Tool-15-D-testgamma",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "nWUfl instance name_001",
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "action-data",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1525075968000
+ },
+ {
+ "id": 6,
+ "created": 1525007432000,
+ "modified": 1525007434000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "e1db03c3-6274-4ff7-84cf-7bd3a3946de7",
+ "templateId": "cad41760-8653-4c5a-a5fd-8ee34780ae69",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1525007432000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "someID",
+ "owningEntityName": "expected-owningEntityName",
+ "project": "a-project-name57322c07-bb83-4e9a-9ef2-8fd53c4dd012",
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": "greatTenant",
+ "tenantName": null,
+ "regionId": "my-expected-region-id",
+ "regionName": null,
+ "serviceType": "mySubType",
+ "subscriberName": "ac040e8a-b43a-441b-ab87-603f5b70be55",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "MichaelJordan_01",
+ "serviceModelId": "300adb1e-9b0c-4d52-bfb5-fa5393c4eabb",
+ "serviceModelName": "AIM_TRANSPORT_00004",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1525007432000
+ },
+ {
+ "id": 5,
+ "created": 1524995555000,
+ "modified": 1524995556000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "9f88fdb5-bb47-4bf3-8c5f-98f1ad0ec87c",
+ "templateId": "ce4ec177-cfc8-483e-8a2c-b7aea53fd740",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1524995555000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "aaa1",
+ "owningEntityName": "aaa1",
+ "project": "DFW",
+ "aicZoneId": "BAN1",
+ "aicZoneName": "VSDKYUTP-BAN1",
+ "tenantId": "1178612d2b394be4834ad77f567c0af2",
+ "tenantName": "AIN Web Tool-15-D-SSPtestcustome",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": null,
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "ComplexService",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524995555000
+ },
+ {
+ "id": 4,
+ "created": 1524994349000,
+ "modified": 1524994350000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "b73b1543-fa12-4ad5-8ef5-49f02eb33698",
+ "templateId": "79af00c6-4712-432a-8989-b6419c8baa40",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1524994349000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "aaa1",
+ "owningEntityName": "aaa1",
+ "project": "DFW",
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+ "tenantName": "AIN Web Tool-15-D-STTest2",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": null,
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "ComplexService",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524994349000
+ },
+ {
+ "id": 3,
+ "created": 1524991828000,
+ "modified": 1524991830000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "725ef127-4ee5-4665-bdf1-55ee342b362f",
+ "templateId": "6bd53c0d-8742-43f6-9ed2-efbb87062779",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1524991828000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "aaa1",
+ "owningEntityName": "aaa1",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "tenantName": "USP-SIP-IC-24335-T-01",
+ "regionId": "AAIAIC25",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": null,
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "ComplexService",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524991828000
+ },
+ {
+ "id": 2,
+ "created": 1524663233000,
+ "modified": 1524663236000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "b1ff271b-829a-43f9-a2e3-23987a34f261",
+ "templateId": "262fccc5-cae9-4258-b522-540c4010e0a9",
+ "userId": "16807000",
+ "jobStatus": "FAILED",
+ "statusModifiedDate": 1524663233000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "owningEntityName": "MetroPacketCore",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "tenantName": "AIN Web Tool-15-D-testgamma",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "sPenLiZXXpqzsVck instance name_02",
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "action-data",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524663233000
+ },
+ {
+ "id": 1,
+ "created": 1524663233000,
+ "modified": 1524663236000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "850dc7d2-5240-437f-9bcd-b1ed7dc339ca",
+ "templateId": "262fccc5-cae9-4258-b522-540c4010e0a9",
+ "userId": "16807000",
+ "jobStatus": "IN_PROGRESS",
+ "statusModifiedDate": 1524663233000,
+ "hidden": false,
+ "pause": false,
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "owningEntityName": "MetroPacketCore",
+ "project": "DFW",
+ "aicZoneId": "NFT1",
+ "aicZoneName": "NFTJSSSS-NFT1",
+ "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "tenantName": "AIN Web Tool-15-D-testgamma",
+ "regionId": "mtn6",
+ "regionName": null,
+ "serviceType": "VIRTUAL USP",
+ "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "serviceInstanceId": null,
+ "serviceInstanceName": "sPenLiZXXpqzsVck instance name_01",
+ "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceModelName": "action-data",
+ "serviceModelVersion": "1.0",
+ "createdBulkDate": 1524663233000
+ }
+]
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicRedux.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicRedux.json
new file mode 100644
index 000000000..714b3a429
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicRedux.json
@@ -0,0 +1,2003 @@
+{
+ "global": {
+ "name": null
+ },
+ "service": {
+ "serviceHierarchy": {
+ "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd": {
+ "service": {
+ "uuid": "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+ "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "name": "action-data",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "",
+ "serviceType": "",
+ "serviceRole": "",
+ "description": "",
+ "serviceEcompNaming": "true",
+ "instantiationType": "Macro",
+ "inputs": {
+ "2017488_adiodvpe0_ASN": {
+ "type": "string",
+ "description": "AV/PE",
+ "entry_schema": null,
+ "inputProperties": null,
+ "constraints": [],
+ "required": true,
+ "default": "AV_vPE"
+ }
+ }
+ },
+ "vnfs": {
+ "2017-388_ADIOD-vPE 1": {
+ "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+ "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-388_ADIOD-vPE",
+ "version": "1.0",
+ "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 1",
+ "vfModules": {},
+ "volumeGroups": {},
+ "vfcInstanceGroups": {}
+ },
+ "2017-388_ADIOD-vPE 0": {
+ "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+ "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-388_ADIOD-vPE",
+ "version": "4.0",
+ "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+ "vfModules": {},
+ "volumeGroups": {},
+ "vfcInstanceGroups": {}
+ },
+ "2017-488_ADIOD-vPE 0": {
+ "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+ "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-488_ADIOD-vPE",
+ "version": "5.0",
+ "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "5",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {}
+ }
+ },
+ "vfcInstanceGroups": {}
+ }
+ },
+ "networks": {},
+ "collectionResource": {},
+ "configurations": {},
+ "serviceProxies": {},
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "5",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {}
+ }
+ },
+ "pnfs": {}
+ }
+ },
+ "serviceInstance": {},
+ "lcpRegionsAndTenants": {
+ "lcpRegionList": [
+ {
+ "id": "AAIAIC25",
+ "name": "AAIAIC25",
+ "isPermitted": true
+ },
+ {
+ "id": "mtn6",
+ "name": "mtn6",
+ "isPermitted": true
+ }
+ ],
+ "lcpRegionsTenantsMap": {
+ "AAIAIC25": [
+ {
+ "id": "092eb9e8e4b7412e8787dd091bc58e86",
+ "name": "USP-SIP-IC-24335-T-01",
+ "isPermitted": true
+ }
+ ],
+ "mtn6": [
+ {
+ "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "name": "AIN Web Tool-15-D-testgamma",
+ "isPermitted": true
+ },
+ {
+ "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+ "name": "AIN Web Tool-15-D-STTest2",
+ "isPermitted": true
+ },
+ {
+ "id": "1178612d2b394be4834ad77f567c0af2",
+ "name": "AIN Web Tool-15-D-SSPtestcustome",
+ "isPermitted": true
+ },
+ {
+ "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+ "name": "AIN Web Tool-15-D-UncheckedEcopm",
+ "isPermitted": true
+ },
+ {
+ "id": "de007636e25249238447264a988a927b",
+ "name": "AIN Web Tool-15-D-dfsdf",
+ "isPermitted": true
+ },
+ {
+ "id": "62f29b3613634ca6a3065cbe0e020c44",
+ "name": "AIN/SMS-16-D-Multiservices1",
+ "isPermitted": true
+ },
+ {
+ "id": "649289e30d3244e0b48098114d63c2aa",
+ "name": "AIN Web Tool-15-D-SSPST66",
+ "isPermitted": true
+ },
+ {
+ "id": "3f21eeea6c2c486bba31dab816c05a32",
+ "name": "AIN Web Tool-15-D-ASSPST47",
+ "isPermitted": true
+ },
+ {
+ "id": "f60ce21d3ee6427586cff0d22b03b773",
+ "name": "CESAR-100-D-sspjg67246",
+ "isPermitted": true
+ },
+ {
+ "id": "8774659e425f479895ae091bb5d46560",
+ "name": "CESAR-100-D-sspjg68359",
+ "isPermitted": true
+ },
+ {
+ "id": "624eb554b0d147c19ff8885341760481",
+ "name": "AINWebTool-15-D-iftach",
+ "isPermitted": true
+ },
+ {
+ "id": "214f55f5fc414c678059c383b03e4962",
+ "name": "CESAR-100-D-sspjg612401",
+ "isPermitted": true
+ },
+ {
+ "id": "c90666c291664841bb98e4d981ff1db5",
+ "name": "CESAR-100-D-sspjg621340",
+ "isPermitted": true
+ },
+ {
+ "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+ "name": "sspjg621351cloned",
+ "isPermitted": true
+ },
+ {
+ "id": "b386b768a3f24c8e953abbe0b3488c02",
+ "name": "AINWebTool-15-D-eteancomp",
+ "isPermitted": true
+ },
+ {
+ "id": "dc6c4dbfd225474e9deaadd34968646c",
+ "name": "AINWebTool-15-T-SPFET",
+ "isPermitted": true
+ },
+ {
+ "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+ "name": "AINWebTool-15-X-eeweww",
+ "isPermitted": true
+ },
+ {
+ "id": "f2f3830e4c984d45bcd00e1a04158a79",
+ "name": "CESAR-100-D-spjg61909",
+ "isPermitted": true
+ },
+ {
+ "id": "05b91bd5137f4929878edd965755c06d",
+ "name": "CESAR-100-D-sspjg621512cloned",
+ "isPermitted": true
+ },
+ {
+ "id": "7002fbe8482d4a989ddf445b1ce336e0",
+ "name": "AINWebTool-15-X-vdr",
+ "isPermitted": true
+ },
+ {
+ "id": "4008522be43741dcb1f5422022a2aa0b",
+ "name": "AINWebTool-15-D-ssasa",
+ "isPermitted": true
+ },
+ {
+ "id": "f44e2e96a1b6476abfda2fa407b00169",
+ "name": "AINWebTool-15-D-PFNPT",
+ "isPermitted": true
+ },
+ {
+ "id": "b69a52bec8a84669a37a1e8b72708be7",
+ "name": "AINWebTool-15-X-vdre",
+ "isPermitted": true
+ },
+ {
+ "id": "fac7d9fd56154caeb9332202dcf2969f",
+ "name": "AINWebTool-15-X-NONPODECOMP",
+ "isPermitted": true
+ },
+ {
+ "id": "2d34d8396e194eb49969fd61ffbff961",
+ "name": "DN5242-Nov16-T5",
+ "isPermitted": true
+ },
+ {
+ "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+ "name": "ro-T11",
+ "isPermitted": true
+ },
+ {
+ "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+ "name": "ro-T112",
+ "isPermitted": true
+ },
+ {
+ "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+ "name": "DN5242-Nov21-T1",
+ "isPermitted": true
+ },
+ {
+ "id": "d0a3e3f2964542259d155a81c41aadc3",
+ "name": "test-mtn6-09",
+ "isPermitted": true
+ },
+ {
+ "id": "cbb99fe4ada84631b7baf046b6fd2044",
+ "name": "DN5242-Nov16-T3",
+ "isPermitted": true
+ }
+ ]
+ }
+ },
+ "subscribers": [
+ {
+ "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "name": "Mobility",
+ "isPermitted": false
+ },
+ {
+ "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fc",
+ "name": "PACKET CORE",
+ "isPermitted": false
+ },
+ {
+ "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "name": "USP VOICE",
+ "isPermitted": true
+ }
+ ],
+ "productFamilies": [
+ {
+ "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+ "name": "DHV",
+ "isPermitted": true
+ },
+ {
+ "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+ "name": "FLEXREACH",
+ "isPermitted": true
+ },
+ {
+ "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+ "name": "Netbond",
+ "isPermitted": true
+ },
+ {
+ "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+ "name": "Enhanced Services",
+ "isPermitted": true
+ },
+ {
+ "id": "vRRaaS",
+ "name": "vRRaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+ "name": "vSCP",
+ "isPermitted": true
+ },
+ {
+ "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "name": "Mobility",
+ "isPermitted": true
+ },
+ {
+ "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+ "name": "BVOIP",
+ "isPermitted": true
+ },
+ {
+ "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+ "name": "FIRSTNET",
+ "isPermitted": true
+ },
+ {
+ "id": "LRSI-OSPF",
+ "name": "LRSI-OSPF",
+ "isPermitted": true
+ },
+ {
+ "id": "vHNGWaas",
+ "name": "HNGATEWAY",
+ "isPermitted": true
+ },
+ {
+ "id": "vHNPaas",
+ "name": "HNPORTAL",
+ "isPermitted": true
+ },
+ {
+ "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "name": "VIRTUAL USP",
+ "isPermitted": true
+ },
+ {
+ "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+ "name": "VROUTER",
+ "isPermitted": true
+ },
+ {
+ "id": "VIPRaaS",
+ "name": "vIPRaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+ "name": "WAN Bonding",
+ "isPermitted": true
+ },
+ {
+ "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+ "name": "HOSTED COMMUNICATIONS",
+ "isPermitted": true
+ },
+ {
+ "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+ "name": "Transport",
+ "isPermitted": true
+ },
+ {
+ "id": "vVIGaaS",
+ "name": "vVIGaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+ "name": "uCPE-VMS",
+ "isPermitted": true
+ },
+ {
+ "id": "vPEaaS",
+ "name": "vPEaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+ "name": "HOSTED COMMUNICATIONS",
+ "isPermitted": true
+ }
+ ],
+ "serviceTypes": {
+ "e433710f-9217-458d-a79d-1c7aff376d89": [
+ {
+ "id": "0",
+ "name": "vFlowLogic",
+ "isPermitted": false
+ },
+ {
+ "id": "1",
+ "name": "VIRTUAL USP",
+ "isPermitted": true
+ },
+ {
+ "id": "2",
+ "name": "Mobility",
+ "isPermitted": false
+ },
+ {
+ "id": "3",
+ "name": "vBNG",
+ "isPermitted": false
+ },
+ {
+ "id": "4",
+ "name": "vVoiceMail",
+ "isPermitted": false
+ },
+ {
+ "id": "5",
+ "name": "Nimbus",
+ "isPermitted": false
+ },
+ {
+ "id": "6",
+ "name": "vSEGW",
+ "isPermitted": false
+ },
+ {
+ "id": "7",
+ "name": "vVM",
+ "isPermitted": false
+ },
+ {
+ "id": "8",
+ "name": "vOTA",
+ "isPermitted": false
+ },
+ {
+ "id": "9",
+ "name": "vMME",
+ "isPermitted": false
+ },
+ {
+ "id": "10",
+ "name": "vMNS",
+ "isPermitted": false
+ },
+ {
+ "id": "11",
+ "name": "vSCP",
+ "isPermitted": false
+ },
+ {
+ "id": "12",
+ "name": "VPMS",
+ "isPermitted": false
+ },
+ {
+ "id": "13",
+ "name": "vMMSC",
+ "isPermitted": false
+ },
+ {
+ "id": "14",
+ "name": "SSD",
+ "isPermitted": false
+ },
+ {
+ "id": "15",
+ "name": "vMOG",
+ "isPermitted": false
+ },
+ {
+ "id": "16",
+ "name": "FIRSTNET",
+ "isPermitted": false
+ },
+ {
+ "id": "17",
+ "name": "ACTIVE_CHARGE",
+ "isPermitted": false
+ },
+ {
+ "id": "18",
+ "name": "vHSS",
+ "isPermitted": false
+ }
+ ]
+ },
+ "aicZones": [
+ {
+ "id": "NFT1",
+ "name": "NFTJSSSS-NFT1"
+ },
+ {
+ "id": "JAG1",
+ "name": "YUDFJULP-JAG1"
+ },
+ {
+ "id": "YYY1",
+ "name": "UUUAIAAI-YYY1"
+ },
+ {
+ "id": "BAN1",
+ "name": "VSDKYUTP-BAN1"
+ },
+ {
+ "id": "DKJ1",
+ "name": "DKJSJDKA-DKJ1"
+ },
+ {
+ "id": "MCS1",
+ "name": "ASACMAMS-MCS1"
+ },
+ {
+ "id": "UIO1",
+ "name": "uioclli1-UIO1"
+ },
+ {
+ "id": "RAJ1",
+ "name": "YGBIJNLQ-RAJ1"
+ },
+ {
+ "id": "OPA1",
+ "name": "opaclli1-OPA1"
+ },
+ {
+ "id": "SDE1",
+ "name": "ZXCVBNMA-SDE1"
+ },
+ {
+ "id": "VEN2",
+ "name": "FGHJUHIL-VEN2"
+ },
+ {
+ "id": "ORL1",
+ "name": "ORLDFLMA-ORL1"
+ },
+ {
+ "id": "JAD1",
+ "name": "JADECLLI-JAD1"
+ },
+ {
+ "id": "ZXL1",
+ "name": "LWLWCANN-ZXL1"
+ },
+ {
+ "id": "CKL1",
+ "name": "CLKSKCKK-CKL1"
+ },
+ {
+ "id": "SDF1",
+ "name": "sdfclli1-SDF1"
+ },
+ {
+ "id": "RAD1",
+ "name": "RADICAL1-RAD1"
+ },
+ {
+ "id": "KIT1",
+ "name": "BHYJFGLN-KIT1"
+ },
+ {
+ "id": "REL1",
+ "name": "INGERFGT-REL1"
+ },
+ {
+ "id": "JNL1",
+ "name": "CJALSDAC-JNL1"
+ },
+ {
+ "id": "OLK1",
+ "name": "OLKOLKLS-OLK1"
+ },
+ {
+ "id": "CHI1",
+ "name": "CHILLIWE-CHI1"
+ },
+ {
+ "id": "UUU4",
+ "name": "UUUAAAUU-UUU4"
+ },
+ {
+ "id": "TUF1",
+ "name": "TUFCLLI1-TUF1"
+ },
+ {
+ "id": "KJN1",
+ "name": "CKALDKSA-KJN1"
+ },
+ {
+ "id": "SAM1",
+ "name": "SNDGCA64-SAN1"
+ },
+ {
+ "id": "SCK1",
+ "name": "SCKSCKSK-SCK1"
+ },
+ {
+ "id": "HJH1",
+ "name": "AOEEQQQD-HJH1"
+ },
+ {
+ "id": "HGD1",
+ "name": "SDFQWHGD-HGD1"
+ },
+ {
+ "id": "KOR1",
+ "name": "HYFLNBVT-KOR1"
+ },
+ {
+ "id": "ATL43",
+ "name": "AICLOCID-ATL43"
+ },
+ {
+ "id": "ATL54",
+ "name": "AICFTAAI-ATL54"
+ },
+ {
+ "id": "ATL66",
+ "name": "CLLIAAII-ATL66"
+ },
+ {
+ "id": "VEL1",
+ "name": "BNMLKUIK-VEL1"
+ },
+ {
+ "id": "ICC1",
+ "name": "SANJITAT-ICC1"
+ },
+ {
+ "id": "MNT11",
+ "name": "WSXEFBTH-MNT11"
+ },
+ {
+ "id": "DEF2",
+ "name": "WSBHGTYL-DEF2"
+ },
+ {
+ "id": "MAD11",
+ "name": "SDFQWGKL-MAD11"
+ },
+ {
+ "id": "OLG1",
+ "name": "OLHOLHOL-OLG1"
+ },
+ {
+ "id": "GAR1",
+ "name": "NGFVSJKO-GAR1"
+ },
+ {
+ "id": "SAN22",
+ "name": "GNVLSCTL-SAN22"
+ },
+ {
+ "id": "HRG1",
+ "name": "HRGHRGGS-HRG1"
+ },
+ {
+ "id": "JCS1",
+ "name": "JCSJSCJS-JCS1"
+ },
+ {
+ "id": "DHA12",
+ "name": "WSXEDECF-DHA12"
+ },
+ {
+ "id": "HJE1",
+ "name": "AOEEWWWD-HJE1"
+ },
+ {
+ "id": "NCA1",
+ "name": "NCANCANN-NCA1"
+ },
+ {
+ "id": "IOP1",
+ "name": "iopclli1-IOP1"
+ },
+ {
+ "id": "RTY1",
+ "name": "rtyclli1-RTY1"
+ },
+ {
+ "id": "KAP1",
+ "name": "HIOUYTRQ-KAP1"
+ },
+ {
+ "id": "ZEN1",
+ "name": "ZENCLLI1-ZEN1"
+ },
+ {
+ "id": "HKA1",
+ "name": "JAKHLASS-HKA1"
+ },
+ {
+ "id": "CQK1",
+ "name": "CQKSCAKK-CQK1"
+ },
+ {
+ "id": "SAI1",
+ "name": "UBEKQLPD-SAI1"
+ },
+ {
+ "id": "ERT1",
+ "name": "ertclli1-ERT1"
+ },
+ {
+ "id": "IBB1",
+ "name": "PLMKOIJU-IBB1"
+ },
+ {
+ "id": "TIR2",
+ "name": "PLKINHYI-TIR2"
+ },
+ {
+ "id": "HSD1",
+ "name": "CHASKCDS-HSD1"
+ },
+ {
+ "id": "SLF78",
+ "name": "SDCTLFN1-SLF78"
+ },
+ {
+ "id": "SEE78",
+ "name": "SDCTEEE4-SEE78"
+ },
+ {
+ "id": "SAN13",
+ "name": "TOKYJPFA-SAN13"
+ },
+ {
+ "id": "SAA78",
+ "name": "SDCTAAA1-SAA78"
+ },
+ {
+ "id": "LUC1",
+ "name": "ATLDFGYC-LUC1"
+ },
+ {
+ "id": "AMD13",
+ "name": "MEMATLAN-AMD13"
+ },
+ {
+ "id": "TOR1",
+ "name": "TOROONXN-TOR1"
+ },
+ {
+ "id": "QWE1",
+ "name": "QWECLLI1-QWE1"
+ },
+ {
+ "id": "ZOG1",
+ "name": "ZOGASTRO-ZOG1"
+ },
+ {
+ "id": "CAL33",
+ "name": "CALIFORN-CAL33"
+ },
+ {
+ "id": "SHH78",
+ "name": "SDIT1HHH-SHH78"
+ },
+ {
+ "id": "DSA1",
+ "name": "LKJHGFDS-DSA1"
+ },
+ {
+ "id": "CLG1",
+ "name": "CLGRABAD-CLG1"
+ },
+ {
+ "id": "BNA1",
+ "name": "BNARAGBK-BNA1"
+ },
+ {
+ "id": "ATL84",
+ "name": "CANTTCOC-ATL84"
+ },
+ {
+ "id": "APP1",
+ "name": "WBHGTYUI-APP1"
+ },
+ {
+ "id": "RJN1",
+ "name": "RJNRBZAW-RJN1"
+ },
+ {
+ "id": "EHH78",
+ "name": "SDCSHHH5-EHH78"
+ },
+ {
+ "id": "mac10",
+ "name": "PKGTESTF-mac10"
+ },
+ {
+ "id": "SXB78",
+ "name": "SDCTGXB1-SXB78"
+ },
+ {
+ "id": "SAX78",
+ "name": "SDCTAXG1-SAX78"
+ },
+ {
+ "id": "SYD1",
+ "name": "SYDNAUBV-SYD1"
+ },
+ {
+ "id": "TOK1",
+ "name": "TOKYJPFA-TOK1"
+ },
+ {
+ "id": "KGM2",
+ "name": "KGMTNC20-KGM2"
+ },
+ {
+ "id": "DCC1b",
+ "name": "POIUYTGH-DCC1b"
+ },
+ {
+ "id": "SKK78",
+ "name": "SDCTKKK1-SKK78"
+ },
+ {
+ "id": "SGG78",
+ "name": "SDCTGGG1-SGG78"
+ },
+ {
+ "id": "SJJ78",
+ "name": "SDCTJJJ1-SJJ78"
+ },
+ {
+ "id": "SBX78",
+ "name": "SDCTBXG1-SBX78"
+ },
+ {
+ "id": "LAG1",
+ "name": "LARGIZON-LAG1"
+ },
+ {
+ "id": "IAA1",
+ "name": "QAZXSWED-IAA1"
+ },
+ {
+ "id": "POI1",
+ "name": "PLMNJKIU-POI1"
+ },
+ {
+ "id": "LAG1a",
+ "name": "LARGIZON-LAG1a"
+ },
+ {
+ "id": "PBL1",
+ "name": "PBLAPBAI-PBL1"
+ },
+ {
+ "id": "LAG45",
+ "name": "LARGIZON-LAG1a"
+ },
+ {
+ "id": "MAR1",
+ "name": "MNBVCXZM-MAR1"
+ },
+ {
+ "id": "HST70",
+ "name": "HSTNTX70-HST70"
+ },
+ {
+ "id": "DCC1a",
+ "name": "POIUYTGH-DCC1a"
+ },
+ {
+ "id": "TOL1",
+ "name": "TOLDOH21-TOL1"
+ },
+ {
+ "id": "LON1",
+ "name": "LONEENCO-LON1"
+ },
+ {
+ "id": "SJU78",
+ "name": "SDIT1JUB-SJU78"
+ },
+ {
+ "id": "STN27",
+ "name": "HSTNTX01-STN27"
+ },
+ {
+ "id": "SSW56",
+ "name": "ss8126GT-SSW56"
+ },
+ {
+ "id": "SBB78",
+ "name": "SDIT1BBB-SBB78"
+ },
+ {
+ "id": "DCC3",
+ "name": "POIUYTGH-DCC3"
+ },
+ {
+ "id": "GNV1",
+ "name": "GNVLSCTL-GNV1"
+ },
+ {
+ "id": "WAS1",
+ "name": "WASHDCSW-WAS1"
+ },
+ {
+ "id": "TOY1",
+ "name": "TORYONNZ-TOY1"
+ },
+ {
+ "id": "STT1",
+ "name": "STTLWA02-STT1"
+ },
+ {
+ "id": "STG1",
+ "name": "STTGGE62-STG1"
+ },
+ {
+ "id": "SLL78",
+ "name": "SDCTLLL1-SLL78"
+ },
+ {
+ "id": "SBU78",
+ "name": "SDIT1BUB-SBU78"
+ },
+ {
+ "id": "ATL2",
+ "name": "ATLNGANW-ATL2"
+ },
+ {
+ "id": "BOT1",
+ "name": "BOTHWAKY-BOT1"
+ },
+ {
+ "id": "SNG1",
+ "name": "SNGPSIAU-SNG1"
+ },
+ {
+ "id": "NYC1",
+ "name": "NYCMNY54-NYC1"
+ },
+ {
+ "id": "LAG1b",
+ "name": "LARGIZON-LAG1b"
+ },
+ {
+ "id": "AMD15",
+ "name": "AMDFAA01-AMD15"
+ },
+ {
+ "id": "SNA1",
+ "name": "SNANTXCA-SNA1"
+ },
+ {
+ "id": "PLT1",
+ "name": "PLTNCA60-PLT1"
+ },
+ {
+ "id": "TLP1",
+ "name": "TLPNXM18-TLP1"
+ },
+ {
+ "id": "SDD81",
+ "name": "SAIT1DD6-SDD81"
+ },
+ {
+ "id": "DCC1",
+ "name": "POIUYTGH-DCC1"
+ },
+ {
+ "id": "DCC2",
+ "name": "POIUYTGH-DCC2"
+ },
+ {
+ "id": "OKC1",
+ "name": "OKCBOK55-OKC1"
+ },
+ {
+ "id": "PAR1",
+ "name": "PARSFRCG-PAR1"
+ },
+ {
+ "id": "TES36",
+ "name": "ABCEETES-TES36"
+ },
+ {
+ "id": "COM1",
+ "name": "PLMKOPIU-COM1"
+ },
+ {
+ "id": "ANI1",
+ "name": "ATLNGTRE-ANI1"
+ },
+ {
+ "id": "SDG78",
+ "name": "SDIT1BDG-SDG78"
+ },
+ {
+ "id": "mac20",
+ "name": "PKGTESTF-mac20"
+ },
+ {
+ "id": "DSF45",
+ "name": "DSFBG123-DSF45"
+ },
+ {
+ "id": "HST25",
+ "name": "HSTNTX01-HST25"
+ },
+ {
+ "id": "AMD18",
+ "name": "AUDIMA01-AMD18"
+ },
+ {
+ "id": "SAA80",
+ "name": "SAIT9AA3-SAA80"
+ },
+ {
+ "id": "SSA56",
+ "name": "SSIT2AA7-SSA56"
+ },
+ {
+ "id": "SDD82",
+ "name": "SAIT1DD9-SDD82"
+ },
+ {
+ "id": "JCV1",
+ "name": "JCVLFLBW-JCV1"
+ },
+ {
+ "id": "SUL2",
+ "name": "WERTYUJK-SUL2"
+ },
+ {
+ "id": "PUR1",
+ "name": "purelyde-PUR1"
+ },
+ {
+ "id": "FDE55",
+ "name": "FDERT555-FDE55"
+ },
+ {
+ "id": "SITE",
+ "name": "LONEENCO-SITE"
+ },
+ {
+ "id": "ATL1",
+ "name": "ATLNGAMA-ATL1"
+ },
+ {
+ "id": "JUL1",
+ "name": "ZXCVBNMM-JUL1"
+ },
+ {
+ "id": "TAT34",
+ "name": "TESAAISB-TAT34"
+ },
+ {
+ "id": "XCP12",
+ "name": "CHKGH123-XCP12"
+ },
+ {
+ "id": "RAI1",
+ "name": "poiuytre-RAI1"
+ },
+ {
+ "id": "HPO1",
+ "name": "ATLNGAUP-HPO1"
+ },
+ {
+ "id": "KJF12",
+ "name": "KJFDH123-KJF12"
+ },
+ {
+ "id": "SCC80",
+ "name": "SAIT9CC3-SCC80"
+ },
+ {
+ "id": "SAA12",
+ "name": "SAIT9AF8-SAA12"
+ },
+ {
+ "id": "SAA14",
+ "name": "SAIT1AA9-SAA14"
+ },
+ {
+ "id": "ATL35",
+ "name": "TTESSAAI-ATL35"
+ },
+ {
+ "id": "CWY1",
+ "name": "CWYMOWBS-CWY1"
+ },
+ {
+ "id": "ATL76",
+ "name": "TELEPAAI-ATL76"
+ },
+ {
+ "id": "DSL12",
+ "name": "DSLFK242-DSL12"
+ },
+ {
+ "id": "ATL53",
+ "name": "AAIATLTE-ATL53"
+ },
+ {
+ "id": "SAA11",
+ "name": "SAIT9AA2-SAA11"
+ },
+ {
+ "id": "ATL62",
+ "name": "TESSASCH-ATL62"
+ },
+ {
+ "id": "AUG1",
+ "name": "ASDFGHJK-AUG1"
+ },
+ {
+ "id": "POI22",
+ "name": "POIUY123-POI22"
+ },
+ {
+ "id": "SAA13",
+ "name": "SAIT1AA9-SAA13"
+ },
+ {
+ "id": "BHY17",
+ "name": "BHYTFRF3-BHY17"
+ },
+ {
+ "id": "LIS1",
+ "name": "HOSTPROF-LIS1"
+ },
+ {
+ "id": "SIP1",
+ "name": "ZXCVBNMK-SIP1"
+ },
+ {
+ "id": "ATL99",
+ "name": "TEESTAAI-ATL43"
+ },
+ {
+ "id": "ATL64",
+ "name": "FORLOAAJ-ATL64"
+ },
+ {
+ "id": "TAT33",
+ "name": "TESAAISA-TAT33"
+ },
+ {
+ "id": "RAD10",
+ "name": "INDIPUNE-RAD10"
+ },
+ {
+ "id": "RTW5",
+ "name": "BHYTFRY4-RTW5"
+ },
+ {
+ "id": "JGS1",
+ "name": "KSJKKKKK-JGS1"
+ },
+ {
+ "id": "ATL98",
+ "name": "TEESTAAI-ATL43"
+ },
+ {
+ "id": "WAN1",
+ "name": "LEIWANGW-WAN1"
+ },
+ {
+ "id": "ATL44",
+ "name": "ATLSANAB-ATL44"
+ },
+ {
+ "id": "RTD2",
+ "name": "BHYTFRk4-RTD2"
+ },
+ {
+ "id": "NIR1",
+ "name": "ORFLMANA-NIR1"
+ },
+ {
+ "id": "ATL75",
+ "name": "SANAAIRE-ATL75"
+ },
+ {
+ "id": "NUM1",
+ "name": "QWERTYUI-NUM1"
+ },
+ {
+ "id": "MTN32",
+ "name": "MDTWNJ21-MTN32"
+ },
+ {
+ "id": "RTZ4",
+ "name": "BHYTFRZ6-RTZ4"
+ },
+ {
+ "id": "ATL56",
+ "name": "ATLSANAC-ATL56"
+ },
+ {
+ "id": "AMS1",
+ "name": "AMSTNLBW-AMS1"
+ },
+ {
+ "id": "RCT1",
+ "name": "AMSTERNL-RCT1"
+ },
+ {
+ "id": "JAN1",
+ "name": "ORFLMATT-JAN1"
+ },
+ {
+ "id": "ABC14",
+ "name": "TESAAISA-ABC14"
+ },
+ {
+ "id": "TAT37",
+ "name": "TESAAISD-TAT37"
+ },
+ {
+ "id": "MIC54",
+ "name": "MICHIGAN-MIC54"
+ },
+ {
+ "id": "ABC11",
+ "name": "ATLSANAI-ABC11"
+ },
+ {
+ "id": "AMF11",
+ "name": "AMDOCS01-AMF11"
+ },
+ {
+ "id": "ATL63",
+ "name": "ATLSANEW-ATL63"
+ },
+ {
+ "id": "ABC12",
+ "name": "ATLSECIA-ABC12"
+ },
+ {
+ "id": "MTN20",
+ "name": "MDTWNJ21-MTN20"
+ },
+ {
+ "id": "ABC15",
+ "name": "AAITESAN-ABC15"
+ },
+ {
+ "id": "AVT1",
+ "name": "AVTRFLHD-AVT1"
+ },
+ {
+ "id": "ATL34",
+ "name": "ATLSANAI-ATL34"
+ }
+ ],
+ "categoryParameters": {
+ "owningEntityList": [
+ {
+ "id": "aaa1",
+ "name": "aaa1"
+ },
+ {
+ "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "name": "MetroPacketCore"
+ },
+ {
+ "id": "Wireline",
+ "name": "Wireline"
+ }
+ ],
+ "projectList": [
+ {
+ "id": "DFW",
+ "name": "DFW"
+ },
+ {
+ "id": "x1",
+ "name": "x1"
+ },
+ {
+ "id": "yyy1",
+ "name": "yyy1"
+ }
+ ],
+ "lineOfBusinessList": [
+ {
+ "id": "ECOMP",
+ "name": "ECOMP"
+ },
+ {
+ "id": "zzz1",
+ "name": "zzz1"
+ }
+ ],
+ "platformList": [
+ {
+ "id": "platform",
+ "name": "platform"
+ },
+ {
+ "id": "xxx1",
+ "name": "xxx1"
+ }
+ ]
+ },
+ "type": "[PRODUCT_FAMILIES] Update"
+ }
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicService.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicService.json
new file mode 100644
index 000000000..7b4440d48
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/basicService.json
@@ -0,0 +1,46 @@
+{
+ "service": {
+ "uuid": "4d71990b-d8ad-4510-ac61-496288d9078e",
+ "invariantUuid": "d27e42cf-087e-4d31-88ac-6c4b7585f800",
+ "name": "vidmacrofalsenaming",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "Network L1-3",
+ "serviceType": "",
+ "serviceRole": "",
+ "description": "vidmacrofalsenaming",
+ "serviceEcompNaming": "false",
+ "instantiationType": "A-La-Carte",
+ "inputs": {}
+ },
+ "vnfs": {},
+ "networks": {
+ "MULTI_PROVIDER_PORT_GROUP 0": {
+ "uuid": "e5d235de-2188-4f9f-a28c-fe38967883f2",
+ "invariantUuid": "b0303003-0abb-454c-9119-8cbe2e09e003",
+ "description": "Creates a neutron multi-provider VLAN network with dummy subnet",
+ "name": "MULTI_PROVIDER_PORT_GROUP",
+ "version": "1.0",
+ "customizationUuid": "0fde4286-ee4c-439d-9556-74b6be6bbc42",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+ "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+ "network_scope": "GLOBAL",
+ "network_ecomp_naming": "{ecomp_generated_naming=true}",
+ "network_type": "MULTI_PROVIDER_PORT_GROUP",
+ "network_technology": "MULTI_GROUP",
+ "network_homing": "{ecomp_selected_instance_node_target=false}"
+ },
+ "type": "VL",
+ "modelCustomizationName": "MULTI_PROVIDER_PORT_GROUP 0"
+ }
+ },
+ "collectionResource": {},
+ "configurations": {},
+ "serviceProxies": {},
+ "vfModules": {},
+ "volumeGroups": {},
+ "pnfs": {}
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/categoryParametres.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/categoryParametres.json
new file mode 100644
index 000000000..93a8bf5d6
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/categoryParametres.json
@@ -0,0 +1,52 @@
+{
+ "categoryParameters": {
+ "lineOfBusiness": [
+ {
+ "id": "ECOMP",
+ "name": "ECOMP"
+ },
+ {
+ "id": "zzz1",
+ "name": "zzz1"
+ }
+ ],
+ "owningEntity": [
+ {
+ "id": "aaa1",
+ "name": "aaa1"
+ },
+ {
+ "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "name": "MetroPacketCore"
+ },
+ {
+ "id": "Wireline",
+ "name": "Wireline"
+ }
+ ],
+ "project": [
+ {
+ "id": "DFW",
+ "name": "DFW"
+ },
+ {
+ "id": "x1",
+ "name": "x1"
+ },
+ {
+ "id": "yyy1",
+ "name": "yyy1"
+ }
+ ],
+ "platform": [
+ {
+ "id": "platform",
+ "name": "platform"
+ },
+ {
+ "id": "xxx1",
+ "name": "xxx1"
+ }
+ ]
+ }
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/emptyObjectResponse.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/emptyObjectResponse.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/emptyObjectResponse.json
@@ -0,0 +1 @@
+{}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json
new file mode 100644
index 000000000..bf5420497
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/emptyServiceRedux.json
@@ -0,0 +1,2657 @@
+{
+ "global": {
+ "name": null
+ },
+ "service": {
+ "serviceHierarchy": {
+ "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd": {
+ "service": {
+ "uuid": "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+ "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "name": "action-data",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "",
+ "serviceType": "",
+ "serviceRole": "",
+ "description": "",
+ "serviceEcompNaming": "true",
+ "instantiationType": "Macro",
+ "inputs": {
+ "2017488_adiodvpe0_ASN": {
+ "type": "string",
+ "description": "AV/PE",
+ "entry_schema": null,
+ "inputProperties": null,
+ "constraints": [],
+ "required": true,
+ "default": "AV_vPE"
+ }
+ }
+ },
+ "vnfs": {
+ "2017-388_ADIOD-vPE 1": {
+ "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+ "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-388_ADIOD-vPE",
+ "version": "1.0",
+ "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 1",
+ "vfModules": {},
+ "volumeGroups": {},
+ "vfcInstanceGroups": {}
+ },
+ "2017-388_ADIOD-vPE 0": {
+ "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+ "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-388_ADIOD-vPE",
+ "version": "4.0",
+ "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+ "vfModules": {},
+ "volumeGroups": {},
+ "vfcInstanceGroups": {}
+ },
+ "2017-488_ADIOD-vPE 0": {
+ "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+ "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-488_ADIOD-vPE",
+ "version": "5.0",
+ "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "5",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {}
+ }
+ },
+ "vfcInstanceGroups": {}
+ }
+ },
+ "networks": {},
+ "collectionResource": {},
+ "configurations": {},
+ "serviceProxies": {},
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "5",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {}
+ }
+ },
+ "pnfs": {}
+ },
+ "f4d84bb4-a416-4b4e-997e-0059973630b9": {
+ "service": {
+ "uuid": "f4d84bb4-a416-4b4e-997e-0059973630b9",
+ "invariantUuid": "598e3f9e-3244-4d8f-a8e0-0e5d7a29eda9",
+ "name": "ADIOD vMX vPE_BV Service 488",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "Network L1-3",
+ "serviceType": "",
+ "serviceRole": "",
+ "description": "ADIOD vMX vPE based on Juniper 17.2 release. Updated with updated VF for v8.0 of VLM",
+ "serviceEcompNaming": "true",
+ "instantiationType": "Macro",
+ "inputs": {
+ "2017488_adiodvpe0_ASN": {
+ "type": "string",
+ "description": "AV/PE",
+ "entry_schema": null,
+ "inputProperties": null,
+ "constraints": [],
+ "required": true,
+ "default": "AV_vPE"
+ }
+ }
+ },
+ "vnfs": {
+ "2017-488_ADIOD-vPE 0": {
+ "uuid": "ea81d6f7-0861-44a7-b7d5-d173b562c350",
+ "invariantUuid": "5be7e99e-8eb2-4d97-be63-8081ff3cd10e",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-488_ADIOD-vPE",
+ "version": "9.0",
+ "customizationUuid": "41516cc6-5098-4b40-a619-f8d5f55fc4d8",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "ROUTER",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "vre172_nova_img",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "multi_stage_design": "false",
+ "nf_naming_code": "me6",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "vpfe172_nova_img",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "ADIOD vPE",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:2017488_adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "get_input:2017488_adiodvpe0_availability_zone_0",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:2017488_adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "vPE",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "a5d8df05-11cb-4351-96e0-b6d4168ea4df",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f3d97417-0c8d-424e-8ff7-b2eb4fbcecc3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ },
+ "2017488_adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "040e591e-5d30-4e0d-850f-7266e5a8e013",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "5c5f91f9-5e31-4120-b892-5536587ec258",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "b3e8b26e-cff0-49fc-a4e6-f3e16c8440fe",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "6e410843-257c-46d9-ba8a-8d94e1362452",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_availability_zone_0": {
+ "type": "string",
+ "description": "The Availability Zone to launch the instance.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vPFE_BV",
+ "paramName": "availability_zone_0"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtpocfo-kvm-az01"
+ }
+ },
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "a5d8df05-11cb-4351-96e0-b6d4168ea4df",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f3d97417-0c8d-424e-8ff7-b2eb4fbcecc3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ },
+ "2017488_adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "b3e8b26e-cff0-49fc-a4e6-f3e16c8440fe",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "6e410843-257c-46d9-ba8a-8d94e1362452",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_availability_zone_0": {
+ "type": "string",
+ "description": "The Availability Zone to launch the instance.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vPFE_BV",
+ "paramName": "availability_zone_0"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtpocfo-kvm-az01"
+ }
+ }
+ }
+ },
+ "vfcInstanceGroups": {}
+ }
+ },
+ "networks": {},
+ "collectionResource": {},
+ "configurations": {},
+ "serviceProxies": {},
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "a5d8df05-11cb-4351-96e0-b6d4168ea4df",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f3d97417-0c8d-424e-8ff7-b2eb4fbcecc3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ },
+ "2017488_adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "040e591e-5d30-4e0d-850f-7266e5a8e013",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "5c5f91f9-5e31-4120-b892-5536587ec258",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "b3e8b26e-cff0-49fc-a4e6-f3e16c8440fe",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "6e410843-257c-46d9-ba8a-8d94e1362452",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_availability_zone_0": {
+ "type": "string",
+ "description": "The Availability Zone to launch the instance.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vPFE_BV",
+ "paramName": "availability_zone_0"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtpocfo-kvm-az01"
+ }
+ },
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "a5d8df05-11cb-4351-96e0-b6d4168ea4df",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f3d97417-0c8d-424e-8ff7-b2eb4fbcecc3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ },
+ "2017488_adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "b3e8b26e-cff0-49fc-a4e6-f3e16c8440fe",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "6e410843-257c-46d9-ba8a-8d94e1362452",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_availability_zone_0": {
+ "type": "string",
+ "description": "The Availability Zone to launch the instance.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vPFE_BV",
+ "paramName": "availability_zone_0"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtpocfo-kvm-az01"
+ }
+ }
+ }
+ },
+ "pnfs": {}
+ }
+ },
+ "serviceInstance": {
+ "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd": {
+ "vnfs": {},
+ "instanceParams": [
+ {
+ "2017488_adiodvpe0_ASN": "AV_vPE"
+ }
+ ],
+ "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+ "subscriptionServiceType": "VIRTUAL USP",
+ "lcpCloudRegionId": "AAIAIC25",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "aicZoneId": "JAG1",
+ "projectName": "DFW",
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "bulkSize": 1,
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "modelVersionId": "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+ "modelName": "action-data",
+ "modelVersion": "1.0"
+ },
+ "isUserProvidedNaming": false,
+ "tenantName": "USP-SIP-IC-24335-T-01",
+ "aicZoneName": "YUDFJULP-JAG1"
+ }
+ },
+ "lcpRegionsAndTenants": {
+ "lcpRegionList": [
+ {
+ "id": "AAIAIC25",
+ "name": "AAIAIC25",
+ "isPermitted": true
+ },
+ {
+ "id": "mtn6",
+ "name": "mtn6",
+ "isPermitted": true
+ }
+ ],
+ "lcpRegionsTenantsMap": {
+ "AAIAIC25": [
+ {
+ "id": "092eb9e8e4b7412e8787dd091bc58e86",
+ "name": "USP-SIP-IC-24335-T-01",
+ "isPermitted": true
+ }
+ ],
+ "mtn6": [
+ {
+ "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "name": "AIN Web Tool-15-D-testgamma",
+ "isPermitted": true
+ },
+ {
+ "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+ "name": "AIN Web Tool-15-D-STTest2",
+ "isPermitted": true
+ },
+ {
+ "id": "1178612d2b394be4834ad77f567c0af2",
+ "name": "AIN Web Tool-15-D-SSPtestcustome",
+ "isPermitted": true
+ },
+ {
+ "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+ "name": "AIN Web Tool-15-D-UncheckedEcopm",
+ "isPermitted": true
+ },
+ {
+ "id": "de007636e25249238447264a988a927b",
+ "name": "AIN Web Tool-15-D-dfsdf",
+ "isPermitted": true
+ },
+ {
+ "id": "62f29b3613634ca6a3065cbe0e020c44",
+ "name": "AIN/SMS-16-D-Multiservices1",
+ "isPermitted": true
+ },
+ {
+ "id": "649289e30d3244e0b48098114d63c2aa",
+ "name": "AIN Web Tool-15-D-SSPST66",
+ "isPermitted": true
+ },
+ {
+ "id": "3f21eeea6c2c486bba31dab816c05a32",
+ "name": "AIN Web Tool-15-D-ASSPST47",
+ "isPermitted": true
+ },
+ {
+ "id": "f60ce21d3ee6427586cff0d22b03b773",
+ "name": "CESAR-100-D-sspjg67246",
+ "isPermitted": true
+ },
+ {
+ "id": "8774659e425f479895ae091bb5d46560",
+ "name": "CESAR-100-D-sspjg68359",
+ "isPermitted": true
+ },
+ {
+ "id": "624eb554b0d147c19ff8885341760481",
+ "name": "AINWebTool-15-D-iftach",
+ "isPermitted": true
+ },
+ {
+ "id": "214f55f5fc414c678059c383b03e4962",
+ "name": "CESAR-100-D-sspjg612401",
+ "isPermitted": true
+ },
+ {
+ "id": "c90666c291664841bb98e4d981ff1db5",
+ "name": "CESAR-100-D-sspjg621340",
+ "isPermitted": true
+ },
+ {
+ "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+ "name": "sspjg621351cloned",
+ "isPermitted": true
+ },
+ {
+ "id": "b386b768a3f24c8e953abbe0b3488c02",
+ "name": "AINWebTool-15-D-eteancomp",
+ "isPermitted": true
+ },
+ {
+ "id": "dc6c4dbfd225474e9deaadd34968646c",
+ "name": "AINWebTool-15-T-SPFET",
+ "isPermitted": true
+ },
+ {
+ "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+ "name": "AINWebTool-15-X-eeweww",
+ "isPermitted": true
+ },
+ {
+ "id": "f2f3830e4c984d45bcd00e1a04158a79",
+ "name": "CESAR-100-D-spjg61909",
+ "isPermitted": true
+ },
+ {
+ "id": "05b91bd5137f4929878edd965755c06d",
+ "name": "CESAR-100-D-sspjg621512cloned",
+ "isPermitted": true
+ },
+ {
+ "id": "7002fbe8482d4a989ddf445b1ce336e0",
+ "name": "AINWebTool-15-X-vdr",
+ "isPermitted": true
+ },
+ {
+ "id": "4008522be43741dcb1f5422022a2aa0b",
+ "name": "AINWebTool-15-D-ssasa",
+ "isPermitted": true
+ },
+ {
+ "id": "f44e2e96a1b6476abfda2fa407b00169",
+ "name": "AINWebTool-15-D-PFNPT",
+ "isPermitted": true
+ },
+ {
+ "id": "b69a52bec8a84669a37a1e8b72708be7",
+ "name": "AINWebTool-15-X-vdre",
+ "isPermitted": true
+ },
+ {
+ "id": "fac7d9fd56154caeb9332202dcf2969f",
+ "name": "AINWebTool-15-X-NONPODECOMP",
+ "isPermitted": true
+ },
+ {
+ "id": "2d34d8396e194eb49969fd61ffbff961",
+ "name": "DN5242-Nov16-T5",
+ "isPermitted": true
+ },
+ {
+ "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+ "name": "ro-T11",
+ "isPermitted": true
+ },
+ {
+ "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+ "name": "ro-T112",
+ "isPermitted": true
+ },
+ {
+ "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+ "name": "DN5242-Nov21-T1",
+ "isPermitted": true
+ },
+ {
+ "id": "d0a3e3f2964542259d155a81c41aadc3",
+ "name": "test-mtn6-09",
+ "isPermitted": true
+ },
+ {
+ "id": "cbb99fe4ada84631b7baf046b6fd2044",
+ "name": "DN5242-Nov16-T3",
+ "isPermitted": true
+ }
+ ]
+ }
+ },
+ "subscribers": [
+ {
+ "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "name": "Mobility",
+ "isPermitted": false
+ },
+ {
+ "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fc",
+ "name": "PACKET CORE",
+ "isPermitted": false
+ },
+ {
+ "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "name": "USP VOICE",
+ "isPermitted": true
+ }
+ ],
+ "productFamilies": [
+ {
+ "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+ "name": "DHV",
+ "isPermitted": true
+ },
+ {
+ "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+ "name": "FLEXREACH",
+ "isPermitted": true
+ },
+ {
+ "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+ "name": "Netbond",
+ "isPermitted": true
+ },
+ {
+ "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+ "name": "Enhanced Services",
+ "isPermitted": true
+ },
+ {
+ "id": "vRRaaS",
+ "name": "vRRaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+ "name": "vSCP",
+ "isPermitted": true
+ },
+ {
+ "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "name": "Mobility",
+ "isPermitted": true
+ },
+ {
+ "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+ "name": "BVOIP",
+ "isPermitted": true
+ },
+ {
+ "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+ "name": "FIRSTNET",
+ "isPermitted": true
+ },
+ {
+ "id": "LRSI-OSPF",
+ "name": "LRSI-OSPF",
+ "isPermitted": true
+ },
+ {
+ "id": "vHNGWaas",
+ "name": "HNGATEWAY",
+ "isPermitted": true
+ },
+ {
+ "id": "vHNPaas",
+ "name": "HNPORTAL",
+ "isPermitted": true
+ },
+ {
+ "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "name": "VIRTUAL USP",
+ "isPermitted": true
+ },
+ {
+ "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+ "name": "VROUTER",
+ "isPermitted": true
+ },
+ {
+ "id": "VIPRaaS",
+ "name": "vIPRaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+ "name": "WAN Bonding",
+ "isPermitted": true
+ },
+ {
+ "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+ "name": "HOSTED COMMUNICATIONS",
+ "isPermitted": true
+ },
+ {
+ "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+ "name": "Transport",
+ "isPermitted": true
+ },
+ {
+ "id": "vVIGaaS",
+ "name": "vVIGaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+ "name": "uCPE-VMS",
+ "isPermitted": true
+ },
+ {
+ "id": "vPEaaS",
+ "name": "vPEaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+ "name": "HOSTED COMMUNICATIONS",
+ "isPermitted": true
+ }
+ ],
+ "serviceTypes": {
+ "e433710f-9217-458d-a79d-1c7aff376d89": [
+ {
+ "id": "0",
+ "name": "vFlowLogic",
+ "isPermitted": false
+ },
+ {
+ "id": "1",
+ "name": "VIRTUAL USP",
+ "isPermitted": true
+ },
+ {
+ "id": "2",
+ "name": "Mobility",
+ "isPermitted": false
+ },
+ {
+ "id": "3",
+ "name": "vBNG",
+ "isPermitted": false
+ },
+ {
+ "id": "4",
+ "name": "vVoiceMail",
+ "isPermitted": false
+ },
+ {
+ "id": "5",
+ "name": "Nimbus",
+ "isPermitted": false
+ },
+ {
+ "id": "6",
+ "name": "vSEGW",
+ "isPermitted": false
+ },
+ {
+ "id": "7",
+ "name": "vVM",
+ "isPermitted": false
+ },
+ {
+ "id": "8",
+ "name": "vOTA",
+ "isPermitted": false
+ },
+ {
+ "id": "9",
+ "name": "vMME",
+ "isPermitted": false
+ },
+ {
+ "id": "10",
+ "name": "vMNS",
+ "isPermitted": false
+ },
+ {
+ "id": "11",
+ "name": "vSCP",
+ "isPermitted": false
+ },
+ {
+ "id": "12",
+ "name": "VPMS",
+ "isPermitted": false
+ },
+ {
+ "id": "13",
+ "name": "vMMSC",
+ "isPermitted": false
+ },
+ {
+ "id": "14",
+ "name": "SSD",
+ "isPermitted": false
+ },
+ {
+ "id": "15",
+ "name": "vMOG",
+ "isPermitted": false
+ },
+ {
+ "id": "16",
+ "name": "FIRSTNET",
+ "isPermitted": false
+ },
+ {
+ "id": "17",
+ "name": "ACTIVE_CHARGE",
+ "isPermitted": false
+ },
+ {
+ "id": "18",
+ "name": "vHSS",
+ "isPermitted": false
+ }
+ ]
+ },
+ "aicZones": [
+ {
+ "id": "NFT1",
+ "name": "NFTJSSSS-NFT1"
+ },
+ {
+ "id": "JAG1",
+ "name": "YUDFJULP-JAG1"
+ },
+ {
+ "id": "YYY1",
+ "name": "UUUAIAAI-YYY1"
+ },
+ {
+ "id": "BAN1",
+ "name": "VSDKYUTP-BAN1"
+ },
+ {
+ "id": "DKJ1",
+ "name": "DKJSJDKA-DKJ1"
+ },
+ {
+ "id": "MCS1",
+ "name": "ASACMAMS-MCS1"
+ },
+ {
+ "id": "UIO1",
+ "name": "uioclli1-UIO1"
+ },
+ {
+ "id": "RAJ1",
+ "name": "YGBIJNLQ-RAJ1"
+ },
+ {
+ "id": "OPA1",
+ "name": "opaclli1-OPA1"
+ },
+ {
+ "id": "SDE1",
+ "name": "ZXCVBNMA-SDE1"
+ },
+ {
+ "id": "VEN2",
+ "name": "FGHJUHIL-VEN2"
+ },
+ {
+ "id": "ORL1",
+ "name": "ORLDFLMA-ORL1"
+ },
+ {
+ "id": "JAD1",
+ "name": "JADECLLI-JAD1"
+ },
+ {
+ "id": "ZXL1",
+ "name": "LWLWCANN-ZXL1"
+ },
+ {
+ "id": "CKL1",
+ "name": "CLKSKCKK-CKL1"
+ },
+ {
+ "id": "SDF1",
+ "name": "sdfclli1-SDF1"
+ },
+ {
+ "id": "RAD1",
+ "name": "RADICAL1-RAD1"
+ },
+ {
+ "id": "KIT1",
+ "name": "BHYJFGLN-KIT1"
+ },
+ {
+ "id": "REL1",
+ "name": "INGERFGT-REL1"
+ },
+ {
+ "id": "JNL1",
+ "name": "CJALSDAC-JNL1"
+ },
+ {
+ "id": "OLK1",
+ "name": "OLKOLKLS-OLK1"
+ },
+ {
+ "id": "CHI1",
+ "name": "CHILLIWE-CHI1"
+ },
+ {
+ "id": "UUU4",
+ "name": "UUUAAAUU-UUU4"
+ },
+ {
+ "id": "TUF1",
+ "name": "TUFCLLI1-TUF1"
+ },
+ {
+ "id": "KJN1",
+ "name": "CKALDKSA-KJN1"
+ },
+ {
+ "id": "SAM1",
+ "name": "SNDGCA64-SAN1"
+ },
+ {
+ "id": "SCK1",
+ "name": "SCKSCKSK-SCK1"
+ },
+ {
+ "id": "HJH1",
+ "name": "AOEEQQQD-HJH1"
+ },
+ {
+ "id": "HGD1",
+ "name": "SDFQWHGD-HGD1"
+ },
+ {
+ "id": "KOR1",
+ "name": "HYFLNBVT-KOR1"
+ },
+ {
+ "id": "ATL43",
+ "name": "AICLOCID-ATL43"
+ },
+ {
+ "id": "ATL54",
+ "name": "AICFTAAI-ATL54"
+ },
+ {
+ "id": "ATL66",
+ "name": "CLLIAAII-ATL66"
+ },
+ {
+ "id": "VEL1",
+ "name": "BNMLKUIK-VEL1"
+ },
+ {
+ "id": "ICC1",
+ "name": "SANJITAT-ICC1"
+ },
+ {
+ "id": "MNT11",
+ "name": "WSXEFBTH-MNT11"
+ },
+ {
+ "id": "DEF2",
+ "name": "WSBHGTYL-DEF2"
+ },
+ {
+ "id": "MAD11",
+ "name": "SDFQWGKL-MAD11"
+ },
+ {
+ "id": "OLG1",
+ "name": "OLHOLHOL-OLG1"
+ },
+ {
+ "id": "GAR1",
+ "name": "NGFVSJKO-GAR1"
+ },
+ {
+ "id": "SAN22",
+ "name": "GNVLSCTL-SAN22"
+ },
+ {
+ "id": "HRG1",
+ "name": "HRGHRGGS-HRG1"
+ },
+ {
+ "id": "JCS1",
+ "name": "JCSJSCJS-JCS1"
+ },
+ {
+ "id": "DHA12",
+ "name": "WSXEDECF-DHA12"
+ },
+ {
+ "id": "HJE1",
+ "name": "AOEEWWWD-HJE1"
+ },
+ {
+ "id": "NCA1",
+ "name": "NCANCANN-NCA1"
+ },
+ {
+ "id": "IOP1",
+ "name": "iopclli1-IOP1"
+ },
+ {
+ "id": "RTY1",
+ "name": "rtyclli1-RTY1"
+ },
+ {
+ "id": "KAP1",
+ "name": "HIOUYTRQ-KAP1"
+ },
+ {
+ "id": "ZEN1",
+ "name": "ZENCLLI1-ZEN1"
+ },
+ {
+ "id": "HKA1",
+ "name": "JAKHLASS-HKA1"
+ },
+ {
+ "id": "CQK1",
+ "name": "CQKSCAKK-CQK1"
+ },
+ {
+ "id": "SAI1",
+ "name": "UBEKQLPD-SAI1"
+ },
+ {
+ "id": "ERT1",
+ "name": "ertclli1-ERT1"
+ },
+ {
+ "id": "IBB1",
+ "name": "PLMKOIJU-IBB1"
+ },
+ {
+ "id": "TIR2",
+ "name": "PLKINHYI-TIR2"
+ },
+ {
+ "id": "HSD1",
+ "name": "CHASKCDS-HSD1"
+ },
+ {
+ "id": "SLF78",
+ "name": "SDCTLFN1-SLF78"
+ },
+ {
+ "id": "SEE78",
+ "name": "SDCTEEE4-SEE78"
+ },
+ {
+ "id": "SAN13",
+ "name": "TOKYJPFA-SAN13"
+ },
+ {
+ "id": "SAA78",
+ "name": "SDCTAAA1-SAA78"
+ },
+ {
+ "id": "LUC1",
+ "name": "ATLDFGYC-LUC1"
+ },
+ {
+ "id": "AMD13",
+ "name": "MEMATLAN-AMD13"
+ },
+ {
+ "id": "TOR1",
+ "name": "TOROONXN-TOR1"
+ },
+ {
+ "id": "QWE1",
+ "name": "QWECLLI1-QWE1"
+ },
+ {
+ "id": "ZOG1",
+ "name": "ZOGASTRO-ZOG1"
+ },
+ {
+ "id": "CAL33",
+ "name": "CALIFORN-CAL33"
+ },
+ {
+ "id": "SHH78",
+ "name": "SDIT1HHH-SHH78"
+ },
+ {
+ "id": "DSA1",
+ "name": "LKJHGFDS-DSA1"
+ },
+ {
+ "id": "CLG1",
+ "name": "CLGRABAD-CLG1"
+ },
+ {
+ "id": "BNA1",
+ "name": "BNARAGBK-BNA1"
+ },
+ {
+ "id": "ATL84",
+ "name": "CANTTCOC-ATL84"
+ },
+ {
+ "id": "APP1",
+ "name": "WBHGTYUI-APP1"
+ },
+ {
+ "id": "RJN1",
+ "name": "RJNRBZAW-RJN1"
+ },
+ {
+ "id": "EHH78",
+ "name": "SDCSHHH5-EHH78"
+ },
+ {
+ "id": "mac10",
+ "name": "PKGTESTF-mac10"
+ },
+ {
+ "id": "SXB78",
+ "name": "SDCTGXB1-SXB78"
+ },
+ {
+ "id": "SAX78",
+ "name": "SDCTAXG1-SAX78"
+ },
+ {
+ "id": "SYD1",
+ "name": "SYDNAUBV-SYD1"
+ },
+ {
+ "id": "TOK1",
+ "name": "TOKYJPFA-TOK1"
+ },
+ {
+ "id": "KGM2",
+ "name": "KGMTNC20-KGM2"
+ },
+ {
+ "id": "DCC1b",
+ "name": "POIUYTGH-DCC1b"
+ },
+ {
+ "id": "SKK78",
+ "name": "SDCTKKK1-SKK78"
+ },
+ {
+ "id": "SGG78",
+ "name": "SDCTGGG1-SGG78"
+ },
+ {
+ "id": "SJJ78",
+ "name": "SDCTJJJ1-SJJ78"
+ },
+ {
+ "id": "SBX78",
+ "name": "SDCTBXG1-SBX78"
+ },
+ {
+ "id": "LAG1",
+ "name": "LARGIZON-LAG1"
+ },
+ {
+ "id": "IAA1",
+ "name": "QAZXSWED-IAA1"
+ },
+ {
+ "id": "POI1",
+ "name": "PLMNJKIU-POI1"
+ },
+ {
+ "id": "LAG1a",
+ "name": "LARGIZON-LAG1a"
+ },
+ {
+ "id": "PBL1",
+ "name": "PBLAPBAI-PBL1"
+ },
+ {
+ "id": "LAG45",
+ "name": "LARGIZON-LAG1a"
+ },
+ {
+ "id": "MAR1",
+ "name": "MNBVCXZM-MAR1"
+ },
+ {
+ "id": "HST70",
+ "name": "HSTNTX70-HST70"
+ },
+ {
+ "id": "DCC1a",
+ "name": "POIUYTGH-DCC1a"
+ },
+ {
+ "id": "TOL1",
+ "name": "TOLDOH21-TOL1"
+ },
+ {
+ "id": "LON1",
+ "name": "LONEENCO-LON1"
+ },
+ {
+ "id": "SJU78",
+ "name": "SDIT1JUB-SJU78"
+ },
+ {
+ "id": "STN27",
+ "name": "HSTNTX01-STN27"
+ },
+ {
+ "id": "SSW56",
+ "name": "ss8126GT-SSW56"
+ },
+ {
+ "id": "SBB78",
+ "name": "SDIT1BBB-SBB78"
+ },
+ {
+ "id": "DCC3",
+ "name": "POIUYTGH-DCC3"
+ },
+ {
+ "id": "GNV1",
+ "name": "GNVLSCTL-GNV1"
+ },
+ {
+ "id": "WAS1",
+ "name": "WASHDCSW-WAS1"
+ },
+ {
+ "id": "TOY1",
+ "name": "TORYONNZ-TOY1"
+ },
+ {
+ "id": "STT1",
+ "name": "STTLWA02-STT1"
+ },
+ {
+ "id": "STG1",
+ "name": "STTGGE62-STG1"
+ },
+ {
+ "id": "SLL78",
+ "name": "SDCTLLL1-SLL78"
+ },
+ {
+ "id": "SBU78",
+ "name": "SDIT1BUB-SBU78"
+ },
+ {
+ "id": "ATL2",
+ "name": "ATLNGANW-ATL2"
+ },
+ {
+ "id": "BOT1",
+ "name": "BOTHWAKY-BOT1"
+ },
+ {
+ "id": "SNG1",
+ "name": "SNGPSIAU-SNG1"
+ },
+ {
+ "id": "NYC1",
+ "name": "NYCMNY54-NYC1"
+ },
+ {
+ "id": "LAG1b",
+ "name": "LARGIZON-LAG1b"
+ },
+ {
+ "id": "AMD15",
+ "name": "AMDFAA01-AMD15"
+ },
+ {
+ "id": "SNA1",
+ "name": "SNANTXCA-SNA1"
+ },
+ {
+ "id": "PLT1",
+ "name": "PLTNCA60-PLT1"
+ },
+ {
+ "id": "TLP1",
+ "name": "TLPNXM18-TLP1"
+ },
+ {
+ "id": "SDD81",
+ "name": "SAIT1DD6-SDD81"
+ },
+ {
+ "id": "DCC1",
+ "name": "POIUYTGH-DCC1"
+ },
+ {
+ "id": "DCC2",
+ "name": "POIUYTGH-DCC2"
+ },
+ {
+ "id": "OKC1",
+ "name": "OKCBOK55-OKC1"
+ },
+ {
+ "id": "PAR1",
+ "name": "PARSFRCG-PAR1"
+ },
+ {
+ "id": "TES36",
+ "name": "ABCEETES-TES36"
+ },
+ {
+ "id": "COM1",
+ "name": "PLMKOPIU-COM1"
+ },
+ {
+ "id": "ANI1",
+ "name": "ATLNGTRE-ANI1"
+ },
+ {
+ "id": "SDG78",
+ "name": "SDIT1BDG-SDG78"
+ },
+ {
+ "id": "mac20",
+ "name": "PKGTESTF-mac20"
+ },
+ {
+ "id": "DSF45",
+ "name": "DSFBG123-DSF45"
+ },
+ {
+ "id": "HST25",
+ "name": "HSTNTX01-HST25"
+ },
+ {
+ "id": "AMD18",
+ "name": "AUDIMA01-AMD18"
+ },
+ {
+ "id": "SAA80",
+ "name": "SAIT9AA3-SAA80"
+ },
+ {
+ "id": "SSA56",
+ "name": "SSIT2AA7-SSA56"
+ },
+ {
+ "id": "SDD82",
+ "name": "SAIT1DD9-SDD82"
+ },
+ {
+ "id": "JCV1",
+ "name": "JCVLFLBW-JCV1"
+ },
+ {
+ "id": "SUL2",
+ "name": "WERTYUJK-SUL2"
+ },
+ {
+ "id": "PUR1",
+ "name": "purelyde-PUR1"
+ },
+ {
+ "id": "FDE55",
+ "name": "FDERT555-FDE55"
+ },
+ {
+ "id": "SITE",
+ "name": "LONEENCO-SITE"
+ },
+ {
+ "id": "ATL1",
+ "name": "ATLNGAMA-ATL1"
+ },
+ {
+ "id": "JUL1",
+ "name": "ZXCVBNMM-JUL1"
+ },
+ {
+ "id": "TAT34",
+ "name": "TESAAISB-TAT34"
+ },
+ {
+ "id": "XCP12",
+ "name": "CHKGH123-XCP12"
+ },
+ {
+ "id": "RAI1",
+ "name": "poiuytre-RAI1"
+ },
+ {
+ "id": "HPO1",
+ "name": "ATLNGAUP-HPO1"
+ },
+ {
+ "id": "KJF12",
+ "name": "KJFDH123-KJF12"
+ },
+ {
+ "id": "SCC80",
+ "name": "SAIT9CC3-SCC80"
+ },
+ {
+ "id": "SAA12",
+ "name": "SAIT9AF8-SAA12"
+ },
+ {
+ "id": "SAA14",
+ "name": "SAIT1AA9-SAA14"
+ },
+ {
+ "id": "ATL35",
+ "name": "TTESSAAI-ATL35"
+ },
+ {
+ "id": "CWY1",
+ "name": "CWYMOWBS-CWY1"
+ },
+ {
+ "id": "ATL76",
+ "name": "TELEPAAI-ATL76"
+ },
+ {
+ "id": "DSL12",
+ "name": "DSLFK242-DSL12"
+ },
+ {
+ "id": "ATL53",
+ "name": "AAIATLTE-ATL53"
+ },
+ {
+ "id": "SAA11",
+ "name": "SAIT9AA2-SAA11"
+ },
+ {
+ "id": "ATL62",
+ "name": "TESSASCH-ATL62"
+ },
+ {
+ "id": "AUG1",
+ "name": "ASDFGHJK-AUG1"
+ },
+ {
+ "id": "POI22",
+ "name": "POIUY123-POI22"
+ },
+ {
+ "id": "SAA13",
+ "name": "SAIT1AA9-SAA13"
+ },
+ {
+ "id": "BHY17",
+ "name": "BHYTFRF3-BHY17"
+ },
+ {
+ "id": "LIS1",
+ "name": "HOSTPROF-LIS1"
+ },
+ {
+ "id": "SIP1",
+ "name": "ZXCVBNMK-SIP1"
+ },
+ {
+ "id": "ATL99",
+ "name": "TEESTAAI-ATL43"
+ },
+ {
+ "id": "ATL64",
+ "name": "FORLOAAJ-ATL64"
+ },
+ {
+ "id": "TAT33",
+ "name": "TESAAISA-TAT33"
+ },
+ {
+ "id": "RAD10",
+ "name": "INDIPUNE-RAD10"
+ },
+ {
+ "id": "RTW5",
+ "name": "BHYTFRY4-RTW5"
+ },
+ {
+ "id": "JGS1",
+ "name": "KSJKKKKK-JGS1"
+ },
+ {
+ "id": "ATL98",
+ "name": "TEESTAAI-ATL43"
+ },
+ {
+ "id": "WAN1",
+ "name": "LEIWANGW-WAN1"
+ },
+ {
+ "id": "ATL44",
+ "name": "ATLSANAB-ATL44"
+ },
+ {
+ "id": "RTD2",
+ "name": "BHYTFRk4-RTD2"
+ },
+ {
+ "id": "NIR1",
+ "name": "ORFLMANA-NIR1"
+ },
+ {
+ "id": "ATL75",
+ "name": "SANAAIRE-ATL75"
+ },
+ {
+ "id": "NUM1",
+ "name": "QWERTYUI-NUM1"
+ },
+ {
+ "id": "MTN32",
+ "name": "MDTWNJ21-MTN32"
+ },
+ {
+ "id": "RTZ4",
+ "name": "BHYTFRZ6-RTZ4"
+ },
+ {
+ "id": "ATL56",
+ "name": "ATLSANAC-ATL56"
+ },
+ {
+ "id": "AMS1",
+ "name": "AMSTNLBW-AMS1"
+ },
+ {
+ "id": "RCT1",
+ "name": "AMSTERNL-RCT1"
+ },
+ {
+ "id": "JAN1",
+ "name": "ORFLMATT-JAN1"
+ },
+ {
+ "id": "ABC14",
+ "name": "TESAAISA-ABC14"
+ },
+ {
+ "id": "TAT37",
+ "name": "TESAAISD-TAT37"
+ },
+ {
+ "id": "MIC54",
+ "name": "MICHIGAN-MIC54"
+ },
+ {
+ "id": "ABC11",
+ "name": "ATLSANAI-ABC11"
+ },
+ {
+ "id": "AMF11",
+ "name": "AMDOCS01-AMF11"
+ },
+ {
+ "id": "ATL63",
+ "name": "ATLSANEW-ATL63"
+ },
+ {
+ "id": "ABC12",
+ "name": "ATLSECIA-ABC12"
+ },
+ {
+ "id": "MTN20",
+ "name": "MDTWNJ21-MTN20"
+ },
+ {
+ "id": "ABC15",
+ "name": "AAITESAN-ABC15"
+ },
+ {
+ "id": "AVT1",
+ "name": "AVTRFLHD-AVT1"
+ },
+ {
+ "id": "ATL34",
+ "name": "ATLSANAI-ATL34"
+ }
+ ],
+ "categoryParameters": {
+ "owningEntityList": [
+ {
+ "id": "aaa1",
+ "name": "aaa1"
+ },
+ {
+ "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "name": "MetroPacketCore"
+ },
+ {
+ "id": "Wireline",
+ "name": "Wireline"
+ }
+ ],
+ "projectList": [
+ {
+ "id": "DFW",
+ "name": "DFW"
+ },
+ {
+ "id": "x1",
+ "name": "x1"
+ },
+ {
+ "id": "yyy1",
+ "name": "yyy1"
+ }
+ ],
+ "lineOfBusinessList": [
+ {
+ "id": "ECOMP",
+ "name": "ECOMP"
+ },
+ {
+ "id": "zzz1",
+ "name": "zzz1"
+ }
+ ],
+ "platformList": [
+ {
+ "id": "platform",
+ "name": "platform"
+ },
+ {
+ "id": "xxx1",
+ "name": "xxx1"
+ }
+ ]
+ },
+ "type": "[PRODUCT_FAMILIES] Update"
+ }
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.json
new file mode 100644
index 000000000..a2e154308
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.json
@@ -0,0 +1,15 @@
+{
+ "FLAG_ADVANCED_PORTS_FILTER": true,
+ "CREATE_INSTANCE_TEST": false,
+ "EMPTY_DRAWING_BOARD_TEST": false,
+ "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": true,
+ "FLAG_REGION_ID_FROM_REMOTE": true,
+ "FLAG_ASYNC_INSTANTIATION": true,
+ "FLAG_ASYNC_JOBS": true,
+ "FLAG_ADD_MSO_TESTAPI_FIELD": true,
+ "FLAG_UNASSIGN_SERVICE": false,
+ "FLAG_SERVICE_MODEL_CACHE": false,
+ "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+ "FLAG_SHOW_ASSIGNMENTS": true
+
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/service.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/service.json
new file mode 100644
index 000000000..3da9015ad
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/service.json
@@ -0,0 +1,495 @@
+{
+ "service": {
+ "uuid": "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+ "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "name": "action-data",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "Network L1-3",
+ "serviceType": "pnf",
+ "serviceRole": "Testing",
+ "description": "ADIOD vMX vPE based on Juniper 17.2 release. Updated with updated VF for v8.0 of VLM",
+ "serviceEcompNaming": "false",
+ "instantiationType": "Macro",
+ "inputs": {}
+ },
+ "vnfs": {
+ "2017-388_ADIOD-vPE 1": {
+ "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+ "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-388_ADIOD-vPE",
+ "version": "1.0",
+ "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:2017488_adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:2017488_adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 1",
+ "vfModules": {},
+ "volumeGroups": {},
+ "vfcInstanceGroups": {}
+ },
+ "2017-388_ADIOD-vPE 0": {
+ "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+ "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-388_ADIOD-vPE",
+ "version": "4.0",
+ "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:2017488_adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:2017488_adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+ "vfModules": {},
+ "volumeGroups": {},
+ "vfcInstanceGroups": {}
+ },
+ "2017-488_ADIOD-vPE 0": {
+ "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+ "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-488_ADIOD-vPE",
+ "version": "5.0",
+ "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:2017488_adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:2017488_adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "5",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {}
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {}
+ }
+ },
+ "vfcInstanceGroups": {}
+ }
+ },
+ "networks": {},
+ "collectionResource": {},
+ "configurations": {},
+ "serviceProxies": {},
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "5",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {}
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {}
+ }
+ },
+ "pnfs": {}
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/serviceWithVnfAndVfModules.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/serviceWithVnfAndVfModules.json
new file mode 100644
index 000000000..a95803f7d
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/serviceWithVnfAndVfModules.json
@@ -0,0 +1,2718 @@
+{
+ "global": {
+ "name": null
+ },
+ "service": {
+ "serviceHierarchy": {
+ "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd": {
+ "service": {
+ "uuid": "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+ "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "name": "action-data",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "",
+ "serviceType": "",
+ "serviceRole": "",
+ "description": "",
+ "serviceEcompNaming": "true",
+ "instantiationType": "Macro",
+ "inputs": {
+ "2017488_adiodvpe0_ASN": {
+ "type": "string",
+ "description": "AV/PE",
+ "entry_schema": null,
+ "inputProperties": null,
+ "constraints": [],
+ "required": true,
+ "default": "AV_vPE"
+ }
+ }
+ },
+ "vnfs": {
+ "2017-388_ADIOD-vPE 1": {
+ "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+ "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-388_ADIOD-vPE",
+ "version": "1.0",
+ "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 1",
+ "vfModules": {},
+ "volumeGroups": {},
+ "vfcInstanceGroups": {}
+ },
+ "2017-388_ADIOD-vPE 0": {
+ "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+ "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-388_ADIOD-vPE",
+ "version": "4.0",
+ "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+ "vfModules": {},
+ "volumeGroups": {},
+ "vfcInstanceGroups": {}
+ },
+ "2017-488_ADIOD-vPE 0": {
+ "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+ "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-488_ADIOD-vPE",
+ "version": "5.0",
+ "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "vPE",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "nf_naming_code": "Navneet",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "JAI",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "mtpocfo-kvm-az01",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "Testing",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "5",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {}
+ }
+ },
+ "vfcInstanceGroups": {}
+ }
+ },
+ "networks": {},
+ "collectionResource": {},
+ "configurations": {},
+ "serviceProxies": {},
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "5",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ },
+ "adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {}
+ }
+ },
+ "pnfs": {}
+ },
+ "f4d84bb4-a416-4b4e-997e-0059973630b9": {
+ "service": {
+ "uuid": "f4d84bb4-a416-4b4e-997e-0059973630b9",
+ "invariantUuid": "598e3f9e-3244-4d8f-a8e0-0e5d7a29eda9",
+ "name": "ADIOD vMX vPE_BV Service 488",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "Network L1-3",
+ "serviceType": "",
+ "serviceRole": "",
+ "description": "ADIOD vMX vPE based on Juniper 17.2 release. Updated with updated VF for v8.0 of VLM",
+ "serviceEcompNaming": "true",
+ "instantiationType": "Macro",
+ "inputs": {
+ "2017488_adiodvpe0_ASN": {
+ "type": "string",
+ "description": "AV/PE",
+ "entry_schema": null,
+ "inputProperties": null,
+ "constraints": [],
+ "required": true,
+ "default": "AV_vPE"
+ }
+ }
+ },
+ "vnfs": {
+ "2017-488_ADIOD-vPE 0": {
+ "uuid": "ea81d6f7-0861-44a7-b7d5-d173b562c350",
+ "invariantUuid": "5be7e99e-8eb2-4d97-be63-8081ff3cd10e",
+ "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+ "name": "2017-488_ADIOD-vPE",
+ "version": "9.0",
+ "customizationUuid": "41516cc6-5098-4b40-a619-f8d5f55fc4d8",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "vmxvre_retype": "RE-VMX",
+ "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+ "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+ "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+ "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+ "int_ctl_net_name": "VMX-INTXI",
+ "vmx_int_ctl_prefix": "128.0.0.0",
+ "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+ "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+ "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+ "nf_type": "ROUTER",
+ "vmxvpfe_int_ctl_ip_1": "128.0.0.16",
+ "is_AVPN_service": "false",
+ "vmx_RSG_name": "vREXI-affinity",
+ "vmx_int_ctl_forwarding": "l2",
+ "vmxvre_oam_ip_0": "10.40.123.5",
+ "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+ "vmxvre_image_name_0": "vre172_nova_img",
+ "vmxvre_instance": "0",
+ "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvre_flavor_name": "ns.c1r16d32.v5",
+ "vmxvpfe_volume_size_0": "40.0",
+ "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "multi_stage_design": "false",
+ "nf_naming_code": "me6",
+ "vmxvre_name_0": "vREXI",
+ "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+ "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+ "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+ "vmxvpfe_image_name_0": "vpfe172_nova_img",
+ "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+ "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+ "vmxvre_console": "vidconsole",
+ "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+ "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+ "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+ "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+ "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+ "vf_module_id": "123",
+ "nf_function": "ADIOD vPE",
+ "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+ "vmxvre_int_ctl_ip_0": "128.0.0.1",
+ "ecomp_generated_naming": "true",
+ "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+ "vnf_name": "mtnj309me6vre",
+ "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+ "vmxvre_volume_type_1": "HITACHI",
+ "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+ "vmxvre_volume_type_0": "HITACHI",
+ "vmxvpfe_volume_type_0": "HITACHI",
+ "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+ "bandwidth_units": "get_input:2017488_adiodvpe0_bandwidth_units",
+ "vnf_id": "123",
+ "vmxvre_oam_prefix": "24",
+ "availability_zone_0": "get_input:2017488_adiodvpe0_availability_zone_0",
+ "ASN": "get_input:2017488_adiodvpe0_ASN",
+ "vmxvre_chassis_i2cid": "161",
+ "vmxvpfe_name_0": "vPFEXI",
+ "bandwidth": "get_input:2017488_adiodvpe0_bandwidth",
+ "availability_zone_max_count": "1",
+ "vmxvre_volume_size_0": "45.0",
+ "vmxvre_volume_size_1": "50.0",
+ "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+ "vmxvre_oam_gateway": "10.40.123.1",
+ "vmxvre_volume_name_1": "vREXI_FAVolume",
+ "vmxvre_ore_present": "0",
+ "vmxvre_volume_name_0": "vREXI_FBVolume",
+ "vmxvre_type": "0",
+ "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+ "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+ "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+ "vmx_int_ctl_len": "24",
+ "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+ "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+ "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+ "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+ "nf_role": "vPE",
+ "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+ "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+ "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+ },
+ "type": "VF",
+ "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "a5d8df05-11cb-4351-96e0-b6d4168ea4df",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f3d97417-0c8d-424e-8ff7-b2eb4fbcecc3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ },
+ "2017488_adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "040e591e-5d30-4e0d-850f-7266e5a8e013",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "5c5f91f9-5e31-4120-b892-5536587ec258",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "b3e8b26e-cff0-49fc-a4e6-f3e16c8440fe",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "6e410843-257c-46d9-ba8a-8d94e1362452",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_availability_zone_0": {
+ "type": "string",
+ "description": "The Availability Zone to launch the instance.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vPFE_BV",
+ "paramName": "availability_zone_0"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtpocfo-kvm-az01"
+ }
+ },
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "a5d8df05-11cb-4351-96e0-b6d4168ea4df",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f3d97417-0c8d-424e-8ff7-b2eb4fbcecc3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ },
+ "2017488_adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "b3e8b26e-cff0-49fc-a4e6-f3e16c8440fe",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "6e410843-257c-46d9-ba8a-8d94e1362452",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_availability_zone_0": {
+ "type": "string",
+ "description": "The Availability Zone to launch the instance.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vPFE_BV",
+ "paramName": "availability_zone_0"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtpocfo-kvm-az01"
+ }
+ }
+ }
+ },
+ "vfcInstanceGroups": {}
+ }
+ },
+ "networks": {},
+ "collectionResource": {},
+ "configurations": {},
+ "serviceProxies": {},
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "a5d8df05-11cb-4351-96e0-b6d4168ea4df",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f3d97417-0c8d-424e-8ff7-b2eb4fbcecc3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ },
+ "2017488_adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ }
+ },
+ "volumeGroupAllowed": true
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+ "uuid": "040e591e-5d30-4e0d-850f-7266e5a8e013",
+ "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+ "customizationUuid": "5c5f91f9-5e31-4120-b892-5536587ec258",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "version": "6",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "ADIOD_base_vPE_BV"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "b3e8b26e-cff0-49fc-a4e6-f3e16c8440fe",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "6e410843-257c-46d9-ba8a-8d94e1362452",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_availability_zone_0": {
+ "type": "string",
+ "description": "The Availability Zone to launch the instance.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vPFE_BV",
+ "paramName": "availability_zone_0"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtpocfo-kvm-az01"
+ }
+ },
+ "volumeGroupAllowed": true
+ }
+ },
+ "volumeGroups": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "uuid": "a5d8df05-11cb-4351-96e0-b6d4168ea4df",
+ "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "customizationUuid": "f3d97417-0c8d-424e-8ff7-b2eb4fbcecc3",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vRE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_bandwidth_units": {
+ "type": "string",
+ "description": "Units of bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth_units"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "Gbps"
+ },
+ "2017488_adiodvpe0_bandwidth": {
+ "type": "string",
+ "description": "Requested VPE bandwidth",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "bandwidth"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "10"
+ },
+ "2017488_adiodvpe0_vnf_instance_name": {
+ "type": "string",
+ "description": "The hostname assigned to the vpe.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_instance_name"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtnj309me6"
+ },
+ "2017488_adiodvpe0_vnf_config_template_version": {
+ "type": "string",
+ "description": "VPE Software Version",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "vnf_config_template_version"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "17.2"
+ },
+ "2017488_adiodvpe0_AIC_CLLI": {
+ "type": "string",
+ "description": "AIC Site CLLI",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vRE_BV",
+ "paramName": "AIC_CLLI"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "ATLMY8GA"
+ }
+ }
+ },
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+ "uuid": "b3e8b26e-cff0-49fc-a4e6-f3e16c8440fe",
+ "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+ "customizationUuid": "6e410843-257c-46d9-ba8a-8d94e1362452",
+ "description": null,
+ "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "version": "8",
+ "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+ "properties": {
+ "minCountInstances": 0,
+ "maxCountInstances": null,
+ "initialCount": 0,
+ "vfModuleLabel": "ADIOD_vPFE_BV"
+ },
+ "inputs": {
+ "2017488_adiodvpe0_availability_zone_0": {
+ "type": "string",
+ "description": "The Availability Zone to launch the instance.",
+ "entry_schema": null,
+ "inputProperties": {
+ "sourceType": "HEAT",
+ "vfModuleLabel": "ADIOD_vPFE_BV",
+ "paramName": "availability_zone_0"
+ },
+ "constraints": null,
+ "required": true,
+ "default": "mtpocfo-kvm-az01"
+ }
+ }
+ }
+ },
+ "pnfs": {}
+ }
+ },
+ "serviceInstance": {
+ "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd": {
+ "vnfs": {
+ "2017-388_ADIOD-vPE 1": {
+ "rollbackOnFailure": "false",
+ "vfModules": {},
+ "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+ "lcpCloudRegionId": "mtn6",
+ "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+ "lineOfBusiness": "zzz1",
+ "platformName": "platform",
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+ "modelVersionId": "0903e1c0-8e03-4936-b5c2-260653b96413",
+ "modelName": "2017-388_ADIOD-vPE",
+ "modelVersion": "1.0",
+ "modelCustomizationId": "280dec31-f16d-488b-9668-4aae55d6648a",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 1"
+ },
+ "isUserProvidedNaming": false
+ },
+ "2017-488_ADIOD-vPE 0": {
+ "rollbackOnFailure": "false",
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "rollbackOnFailure": true,
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "modelVersion": "6"
+ },
+ "instanceParams": [
+ {
+ "adiodvpe0_bandwidth": "10",
+ "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6",
+ "2017488_adiodvpe0_vnf_config_template_version": "17.2",
+ "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA",
+ "adiodvpe0_bandwidth_units": "Gbps"
+ }
+ ]
+ }
+ }
+ },
+ "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+ "lcpCloudRegionId": "mtn6",
+ "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+ "lineOfBusiness": "ECOMP",
+ "platformName": "platform",
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+ "modelName": "2017-488_ADIOD-vPE",
+ "modelVersion": "5.0",
+ "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+ "modelCustomizationName": "2017-488_ADIOD-vPE 0"
+ },
+ "isUserProvidedNaming": false
+ }
+ },
+ "instanceParams": [
+ {
+ "2017488_adiodvpe0_ASN": "AV_vPE"
+ }
+ ],
+ "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+ "subscriptionServiceType": "VIRTUAL USP",
+ "lcpCloudRegionId": "AAIAIC25",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "aicZoneId": "JAG1",
+ "projectName": "DFW",
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "bulkSize": 1,
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "modelVersionId": "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+ "modelName": "action-data",
+ "modelVersion": "1.0"
+ },
+ "isUserProvidedNaming": false,
+ "tenantName": "USP-SIP-IC-24335-T-01",
+ "aicZoneName": "YUDFJULP-JAG1"
+ }
+ },
+ "lcpRegionsAndTenants": {
+ "lcpRegionList": [
+ {
+ "id": "AAIAIC25",
+ "name": "AAIAIC25",
+ "isPermitted": true
+ },
+ {
+ "id": "mtn6",
+ "name": "mtn6",
+ "isPermitted": true
+ }
+ ],
+ "lcpRegionsTenantsMap": {
+ "AAIAIC25": [
+ {
+ "id": "092eb9e8e4b7412e8787dd091bc58e86",
+ "name": "USP-SIP-IC-24335-T-01",
+ "isPermitted": true
+ }
+ ],
+ "mtn6": [
+ {
+ "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+ "name": "AIN Web Tool-15-D-testgamma",
+ "isPermitted": true
+ },
+ {
+ "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+ "name": "AIN Web Tool-15-D-STTest2",
+ "isPermitted": true
+ },
+ {
+ "id": "1178612d2b394be4834ad77f567c0af2",
+ "name": "AIN Web Tool-15-D-SSPtestcustome",
+ "isPermitted": true
+ },
+ {
+ "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+ "name": "AIN Web Tool-15-D-UncheckedEcopm",
+ "isPermitted": true
+ },
+ {
+ "id": "de007636e25249238447264a988a927b",
+ "name": "AIN Web Tool-15-D-dfsdf",
+ "isPermitted": true
+ },
+ {
+ "id": "62f29b3613634ca6a3065cbe0e020c44",
+ "name": "AIN/SMS-16-D-Multiservices1",
+ "isPermitted": true
+ },
+ {
+ "id": "649289e30d3244e0b48098114d63c2aa",
+ "name": "AIN Web Tool-15-D-SSPST66",
+ "isPermitted": true
+ },
+ {
+ "id": "3f21eeea6c2c486bba31dab816c05a32",
+ "name": "AIN Web Tool-15-D-ASSPST47",
+ "isPermitted": true
+ },
+ {
+ "id": "f60ce21d3ee6427586cff0d22b03b773",
+ "name": "CESAR-100-D-sspjg67246",
+ "isPermitted": true
+ },
+ {
+ "id": "8774659e425f479895ae091bb5d46560",
+ "name": "CESAR-100-D-sspjg68359",
+ "isPermitted": true
+ },
+ {
+ "id": "624eb554b0d147c19ff8885341760481",
+ "name": "AINWebTool-15-D-iftach",
+ "isPermitted": true
+ },
+ {
+ "id": "214f55f5fc414c678059c383b03e4962",
+ "name": "CESAR-100-D-sspjg612401",
+ "isPermitted": true
+ },
+ {
+ "id": "c90666c291664841bb98e4d981ff1db5",
+ "name": "CESAR-100-D-sspjg621340",
+ "isPermitted": true
+ },
+ {
+ "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+ "name": "sspjg621351cloned",
+ "isPermitted": true
+ },
+ {
+ "id": "b386b768a3f24c8e953abbe0b3488c02",
+ "name": "AINWebTool-15-D-eteancomp",
+ "isPermitted": true
+ },
+ {
+ "id": "dc6c4dbfd225474e9deaadd34968646c",
+ "name": "AINWebTool-15-T-SPFET",
+ "isPermitted": true
+ },
+ {
+ "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+ "name": "AINWebTool-15-X-eeweww",
+ "isPermitted": true
+ },
+ {
+ "id": "f2f3830e4c984d45bcd00e1a04158a79",
+ "name": "CESAR-100-D-spjg61909",
+ "isPermitted": true
+ },
+ {
+ "id": "05b91bd5137f4929878edd965755c06d",
+ "name": "CESAR-100-D-sspjg621512cloned",
+ "isPermitted": true
+ },
+ {
+ "id": "7002fbe8482d4a989ddf445b1ce336e0",
+ "name": "AINWebTool-15-X-vdr",
+ "isPermitted": true
+ },
+ {
+ "id": "4008522be43741dcb1f5422022a2aa0b",
+ "name": "AINWebTool-15-D-ssasa",
+ "isPermitted": true
+ },
+ {
+ "id": "f44e2e96a1b6476abfda2fa407b00169",
+ "name": "AINWebTool-15-D-PFNPT",
+ "isPermitted": true
+ },
+ {
+ "id": "b69a52bec8a84669a37a1e8b72708be7",
+ "name": "AINWebTool-15-X-vdre",
+ "isPermitted": true
+ },
+ {
+ "id": "fac7d9fd56154caeb9332202dcf2969f",
+ "name": "AINWebTool-15-X-NONPODECOMP",
+ "isPermitted": true
+ },
+ {
+ "id": "2d34d8396e194eb49969fd61ffbff961",
+ "name": "DN5242-Nov16-T5",
+ "isPermitted": true
+ },
+ {
+ "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+ "name": "ro-T11",
+ "isPermitted": true
+ },
+ {
+ "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+ "name": "ro-T112",
+ "isPermitted": true
+ },
+ {
+ "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+ "name": "DN5242-Nov21-T1",
+ "isPermitted": true
+ },
+ {
+ "id": "d0a3e3f2964542259d155a81c41aadc3",
+ "name": "test-mtn6-09",
+ "isPermitted": true
+ },
+ {
+ "id": "cbb99fe4ada84631b7baf046b6fd2044",
+ "name": "DN5242-Nov16-T3",
+ "isPermitted": true
+ }
+ ]
+ }
+ },
+ "subscribers": [
+ {
+ "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "name": "Mobility",
+ "isPermitted": false
+ },
+ {
+ "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fc",
+ "name": "PACKET CORE",
+ "isPermitted": false
+ },
+ {
+ "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "name": "USP VOICE",
+ "isPermitted": true
+ }
+ ],
+ "productFamilies": [
+ {
+ "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+ "name": "DHV",
+ "isPermitted": true
+ },
+ {
+ "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+ "name": "FLEXREACH",
+ "isPermitted": true
+ },
+ {
+ "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+ "name": "Netbond",
+ "isPermitted": true
+ },
+ {
+ "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+ "name": "Enhanced Services",
+ "isPermitted": true
+ },
+ {
+ "id": "vRRaaS",
+ "name": "vRRaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+ "name": "vSCP",
+ "isPermitted": true
+ },
+ {
+ "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "name": "Mobility",
+ "isPermitted": true
+ },
+ {
+ "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+ "name": "BVOIP",
+ "isPermitted": true
+ },
+ {
+ "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+ "name": "FIRSTNET",
+ "isPermitted": true
+ },
+ {
+ "id": "LRSI-OSPF",
+ "name": "LRSI-OSPF",
+ "isPermitted": true
+ },
+ {
+ "id": "vHNGWaas",
+ "name": "HNGATEWAY",
+ "isPermitted": true
+ },
+ {
+ "id": "vHNPaas",
+ "name": "HNPORTAL",
+ "isPermitted": true
+ },
+ {
+ "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "name": "VIRTUAL USP",
+ "isPermitted": true
+ },
+ {
+ "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+ "name": "VROUTER",
+ "isPermitted": true
+ },
+ {
+ "id": "VIPRaaS",
+ "name": "vIPRaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+ "name": "WAN Bonding",
+ "isPermitted": true
+ },
+ {
+ "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+ "name": "HOSTED COMMUNICATIONS",
+ "isPermitted": true
+ },
+ {
+ "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+ "name": "Transport",
+ "isPermitted": true
+ },
+ {
+ "id": "vVIGaaS",
+ "name": "vVIGaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+ "name": "uCPE-VMS",
+ "isPermitted": true
+ },
+ {
+ "id": "vPEaaS",
+ "name": "vPEaaS",
+ "isPermitted": true
+ },
+ {
+ "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+ "name": "HOSTED COMMUNICATIONS",
+ "isPermitted": true
+ }
+ ],
+ "serviceTypes": {
+ "e433710f-9217-458d-a79d-1c7aff376d89": [
+ {
+ "id": "0",
+ "name": "vFlowLogic",
+ "isPermitted": false
+ },
+ {
+ "id": "1",
+ "name": "VIRTUAL USP",
+ "isPermitted": true
+ },
+ {
+ "id": "2",
+ "name": "Mobility",
+ "isPermitted": false
+ },
+ {
+ "id": "3",
+ "name": "vBNG",
+ "isPermitted": false
+ },
+ {
+ "id": "4",
+ "name": "vVoiceMail",
+ "isPermitted": false
+ },
+ {
+ "id": "5",
+ "name": "Nimbus",
+ "isPermitted": false
+ },
+ {
+ "id": "6",
+ "name": "vSEGW",
+ "isPermitted": false
+ },
+ {
+ "id": "7",
+ "name": "vVM",
+ "isPermitted": false
+ },
+ {
+ "id": "8",
+ "name": "vOTA",
+ "isPermitted": false
+ },
+ {
+ "id": "9",
+ "name": "vMME",
+ "isPermitted": false
+ },
+ {
+ "id": "10",
+ "name": "vMNS",
+ "isPermitted": false
+ },
+ {
+ "id": "11",
+ "name": "vSCP",
+ "isPermitted": false
+ },
+ {
+ "id": "12",
+ "name": "VPMS",
+ "isPermitted": false
+ },
+ {
+ "id": "13",
+ "name": "vMMSC",
+ "isPermitted": false
+ },
+ {
+ "id": "14",
+ "name": "SSD",
+ "isPermitted": false
+ },
+ {
+ "id": "15",
+ "name": "vMOG",
+ "isPermitted": false
+ },
+ {
+ "id": "16",
+ "name": "FIRSTNET",
+ "isPermitted": false
+ },
+ {
+ "id": "17",
+ "name": "ACTIVE_CHARGE",
+ "isPermitted": false
+ },
+ {
+ "id": "18",
+ "name": "vHSS",
+ "isPermitted": false
+ }
+ ]
+ },
+ "aicZones": [
+ {
+ "id": "NFT1",
+ "name": "NFTJSSSS-NFT1"
+ },
+ {
+ "id": "JAG1",
+ "name": "YUDFJULP-JAG1"
+ },
+ {
+ "id": "YYY1",
+ "name": "UUUAIAAI-YYY1"
+ },
+ {
+ "id": "BAN1",
+ "name": "VSDKYUTP-BAN1"
+ },
+ {
+ "id": "DKJ1",
+ "name": "DKJSJDKA-DKJ1"
+ },
+ {
+ "id": "MCS1",
+ "name": "ASACMAMS-MCS1"
+ },
+ {
+ "id": "UIO1",
+ "name": "uioclli1-UIO1"
+ },
+ {
+ "id": "RAJ1",
+ "name": "YGBIJNLQ-RAJ1"
+ },
+ {
+ "id": "OPA1",
+ "name": "opaclli1-OPA1"
+ },
+ {
+ "id": "SDE1",
+ "name": "ZXCVBNMA-SDE1"
+ },
+ {
+ "id": "VEN2",
+ "name": "FGHJUHIL-VEN2"
+ },
+ {
+ "id": "ORL1",
+ "name": "ORLDFLMA-ORL1"
+ },
+ {
+ "id": "JAD1",
+ "name": "JADECLLI-JAD1"
+ },
+ {
+ "id": "ZXL1",
+ "name": "LWLWCANN-ZXL1"
+ },
+ {
+ "id": "CKL1",
+ "name": "CLKSKCKK-CKL1"
+ },
+ {
+ "id": "SDF1",
+ "name": "sdfclli1-SDF1"
+ },
+ {
+ "id": "RAD1",
+ "name": "RADICAL1-RAD1"
+ },
+ {
+ "id": "KIT1",
+ "name": "BHYJFGLN-KIT1"
+ },
+ {
+ "id": "REL1",
+ "name": "INGERFGT-REL1"
+ },
+ {
+ "id": "JNL1",
+ "name": "CJALSDAC-JNL1"
+ },
+ {
+ "id": "OLK1",
+ "name": "OLKOLKLS-OLK1"
+ },
+ {
+ "id": "CHI1",
+ "name": "CHILLIWE-CHI1"
+ },
+ {
+ "id": "UUU4",
+ "name": "UUUAAAUU-UUU4"
+ },
+ {
+ "id": "TUF1",
+ "name": "TUFCLLI1-TUF1"
+ },
+ {
+ "id": "KJN1",
+ "name": "CKALDKSA-KJN1"
+ },
+ {
+ "id": "SAM1",
+ "name": "SNDGCA64-SAN1"
+ },
+ {
+ "id": "SCK1",
+ "name": "SCKSCKSK-SCK1"
+ },
+ {
+ "id": "HJH1",
+ "name": "AOEEQQQD-HJH1"
+ },
+ {
+ "id": "HGD1",
+ "name": "SDFQWHGD-HGD1"
+ },
+ {
+ "id": "KOR1",
+ "name": "HYFLNBVT-KOR1"
+ },
+ {
+ "id": "ATL43",
+ "name": "AICLOCID-ATL43"
+ },
+ {
+ "id": "ATL54",
+ "name": "AICFTAAI-ATL54"
+ },
+ {
+ "id": "ATL66",
+ "name": "CLLIAAII-ATL66"
+ },
+ {
+ "id": "VEL1",
+ "name": "BNMLKUIK-VEL1"
+ },
+ {
+ "id": "ICC1",
+ "name": "SANJITAT-ICC1"
+ },
+ {
+ "id": "MNT11",
+ "name": "WSXEFBTH-MNT11"
+ },
+ {
+ "id": "DEF2",
+ "name": "WSBHGTYL-DEF2"
+ },
+ {
+ "id": "MAD11",
+ "name": "SDFQWGKL-MAD11"
+ },
+ {
+ "id": "OLG1",
+ "name": "OLHOLHOL-OLG1"
+ },
+ {
+ "id": "GAR1",
+ "name": "NGFVSJKO-GAR1"
+ },
+ {
+ "id": "SAN22",
+ "name": "GNVLSCTL-SAN22"
+ },
+ {
+ "id": "HRG1",
+ "name": "HRGHRGGS-HRG1"
+ },
+ {
+ "id": "JCS1",
+ "name": "JCSJSCJS-JCS1"
+ },
+ {
+ "id": "DHA12",
+ "name": "WSXEDECF-DHA12"
+ },
+ {
+ "id": "HJE1",
+ "name": "AOEEWWWD-HJE1"
+ },
+ {
+ "id": "NCA1",
+ "name": "NCANCANN-NCA1"
+ },
+ {
+ "id": "IOP1",
+ "name": "iopclli1-IOP1"
+ },
+ {
+ "id": "RTY1",
+ "name": "rtyclli1-RTY1"
+ },
+ {
+ "id": "KAP1",
+ "name": "HIOUYTRQ-KAP1"
+ },
+ {
+ "id": "ZEN1",
+ "name": "ZENCLLI1-ZEN1"
+ },
+ {
+ "id": "HKA1",
+ "name": "JAKHLASS-HKA1"
+ },
+ {
+ "id": "CQK1",
+ "name": "CQKSCAKK-CQK1"
+ },
+ {
+ "id": "SAI1",
+ "name": "UBEKQLPD-SAI1"
+ },
+ {
+ "id": "ERT1",
+ "name": "ertclli1-ERT1"
+ },
+ {
+ "id": "IBB1",
+ "name": "PLMKOIJU-IBB1"
+ },
+ {
+ "id": "TIR2",
+ "name": "PLKINHYI-TIR2"
+ },
+ {
+ "id": "HSD1",
+ "name": "CHASKCDS-HSD1"
+ },
+ {
+ "id": "SLF78",
+ "name": "SDCTLFN1-SLF78"
+ },
+ {
+ "id": "SEE78",
+ "name": "SDCTEEE4-SEE78"
+ },
+ {
+ "id": "SAN13",
+ "name": "TOKYJPFA-SAN13"
+ },
+ {
+ "id": "SAA78",
+ "name": "SDCTAAA1-SAA78"
+ },
+ {
+ "id": "LUC1",
+ "name": "ATLDFGYC-LUC1"
+ },
+ {
+ "id": "AMD13",
+ "name": "MEMATLAN-AMD13"
+ },
+ {
+ "id": "TOR1",
+ "name": "TOROONXN-TOR1"
+ },
+ {
+ "id": "QWE1",
+ "name": "QWECLLI1-QWE1"
+ },
+ {
+ "id": "ZOG1",
+ "name": "ZOGASTRO-ZOG1"
+ },
+ {
+ "id": "CAL33",
+ "name": "CALIFORN-CAL33"
+ },
+ {
+ "id": "SHH78",
+ "name": "SDIT1HHH-SHH78"
+ },
+ {
+ "id": "DSA1",
+ "name": "LKJHGFDS-DSA1"
+ },
+ {
+ "id": "CLG1",
+ "name": "CLGRABAD-CLG1"
+ },
+ {
+ "id": "BNA1",
+ "name": "BNARAGBK-BNA1"
+ },
+ {
+ "id": "ATL84",
+ "name": "CANTTCOC-ATL84"
+ },
+ {
+ "id": "APP1",
+ "name": "WBHGTYUI-APP1"
+ },
+ {
+ "id": "RJN1",
+ "name": "RJNRBZAW-RJN1"
+ },
+ {
+ "id": "EHH78",
+ "name": "SDCSHHH5-EHH78"
+ },
+ {
+ "id": "mac10",
+ "name": "PKGTESTF-mac10"
+ },
+ {
+ "id": "SXB78",
+ "name": "SDCTGXB1-SXB78"
+ },
+ {
+ "id": "SAX78",
+ "name": "SDCTAXG1-SAX78"
+ },
+ {
+ "id": "SYD1",
+ "name": "SYDNAUBV-SYD1"
+ },
+ {
+ "id": "TOK1",
+ "name": "TOKYJPFA-TOK1"
+ },
+ {
+ "id": "KGM2",
+ "name": "KGMTNC20-KGM2"
+ },
+ {
+ "id": "DCC1b",
+ "name": "POIUYTGH-DCC1b"
+ },
+ {
+ "id": "SKK78",
+ "name": "SDCTKKK1-SKK78"
+ },
+ {
+ "id": "SGG78",
+ "name": "SDCTGGG1-SGG78"
+ },
+ {
+ "id": "SJJ78",
+ "name": "SDCTJJJ1-SJJ78"
+ },
+ {
+ "id": "SBX78",
+ "name": "SDCTBXG1-SBX78"
+ },
+ {
+ "id": "LAG1",
+ "name": "LARGIZON-LAG1"
+ },
+ {
+ "id": "IAA1",
+ "name": "QAZXSWED-IAA1"
+ },
+ {
+ "id": "POI1",
+ "name": "PLMNJKIU-POI1"
+ },
+ {
+ "id": "LAG1a",
+ "name": "LARGIZON-LAG1a"
+ },
+ {
+ "id": "PBL1",
+ "name": "PBLAPBAI-PBL1"
+ },
+ {
+ "id": "LAG45",
+ "name": "LARGIZON-LAG1a"
+ },
+ {
+ "id": "MAR1",
+ "name": "MNBVCXZM-MAR1"
+ },
+ {
+ "id": "HST70",
+ "name": "HSTNTX70-HST70"
+ },
+ {
+ "id": "DCC1a",
+ "name": "POIUYTGH-DCC1a"
+ },
+ {
+ "id": "TOL1",
+ "name": "TOLDOH21-TOL1"
+ },
+ {
+ "id": "LON1",
+ "name": "LONEENCO-LON1"
+ },
+ {
+ "id": "SJU78",
+ "name": "SDIT1JUB-SJU78"
+ },
+ {
+ "id": "STN27",
+ "name": "HSTNTX01-STN27"
+ },
+ {
+ "id": "SSW56",
+ "name": "ss8126GT-SSW56"
+ },
+ {
+ "id": "SBB78",
+ "name": "SDIT1BBB-SBB78"
+ },
+ {
+ "id": "DCC3",
+ "name": "POIUYTGH-DCC3"
+ },
+ {
+ "id": "GNV1",
+ "name": "GNVLSCTL-GNV1"
+ },
+ {
+ "id": "WAS1",
+ "name": "WASHDCSW-WAS1"
+ },
+ {
+ "id": "TOY1",
+ "name": "TORYONNZ-TOY1"
+ },
+ {
+ "id": "STT1",
+ "name": "STTLWA02-STT1"
+ },
+ {
+ "id": "STG1",
+ "name": "STTGGE62-STG1"
+ },
+ {
+ "id": "SLL78",
+ "name": "SDCTLLL1-SLL78"
+ },
+ {
+ "id": "SBU78",
+ "name": "SDIT1BUB-SBU78"
+ },
+ {
+ "id": "ATL2",
+ "name": "ATLNGANW-ATL2"
+ },
+ {
+ "id": "BOT1",
+ "name": "BOTHWAKY-BOT1"
+ },
+ {
+ "id": "SNG1",
+ "name": "SNGPSIAU-SNG1"
+ },
+ {
+ "id": "NYC1",
+ "name": "NYCMNY54-NYC1"
+ },
+ {
+ "id": "LAG1b",
+ "name": "LARGIZON-LAG1b"
+ },
+ {
+ "id": "AMD15",
+ "name": "AMDFAA01-AMD15"
+ },
+ {
+ "id": "SNA1",
+ "name": "SNANTXCA-SNA1"
+ },
+ {
+ "id": "PLT1",
+ "name": "PLTNCA60-PLT1"
+ },
+ {
+ "id": "TLP1",
+ "name": "TLPNXM18-TLP1"
+ },
+ {
+ "id": "SDD81",
+ "name": "SAIT1DD6-SDD81"
+ },
+ {
+ "id": "DCC1",
+ "name": "POIUYTGH-DCC1"
+ },
+ {
+ "id": "DCC2",
+ "name": "POIUYTGH-DCC2"
+ },
+ {
+ "id": "OKC1",
+ "name": "OKCBOK55-OKC1"
+ },
+ {
+ "id": "PAR1",
+ "name": "PARSFRCG-PAR1"
+ },
+ {
+ "id": "TES36",
+ "name": "ABCEETES-TES36"
+ },
+ {
+ "id": "COM1",
+ "name": "PLMKOPIU-COM1"
+ },
+ {
+ "id": "ANI1",
+ "name": "ATLNGTRE-ANI1"
+ },
+ {
+ "id": "SDG78",
+ "name": "SDIT1BDG-SDG78"
+ },
+ {
+ "id": "mac20",
+ "name": "PKGTESTF-mac20"
+ },
+ {
+ "id": "DSF45",
+ "name": "DSFBG123-DSF45"
+ },
+ {
+ "id": "HST25",
+ "name": "HSTNTX01-HST25"
+ },
+ {
+ "id": "AMD18",
+ "name": "AUDIMA01-AMD18"
+ },
+ {
+ "id": "SAA80",
+ "name": "SAIT9AA3-SAA80"
+ },
+ {
+ "id": "SSA56",
+ "name": "SSIT2AA7-SSA56"
+ },
+ {
+ "id": "SDD82",
+ "name": "SAIT1DD9-SDD82"
+ },
+ {
+ "id": "JCV1",
+ "name": "JCVLFLBW-JCV1"
+ },
+ {
+ "id": "SUL2",
+ "name": "WERTYUJK-SUL2"
+ },
+ {
+ "id": "PUR1",
+ "name": "purelyde-PUR1"
+ },
+ {
+ "id": "FDE55",
+ "name": "FDERT555-FDE55"
+ },
+ {
+ "id": "SITE",
+ "name": "LONEENCO-SITE"
+ },
+ {
+ "id": "ATL1",
+ "name": "ATLNGAMA-ATL1"
+ },
+ {
+ "id": "JUL1",
+ "name": "ZXCVBNMM-JUL1"
+ },
+ {
+ "id": "TAT34",
+ "name": "TESAAISB-TAT34"
+ },
+ {
+ "id": "XCP12",
+ "name": "CHKGH123-XCP12"
+ },
+ {
+ "id": "RAI1",
+ "name": "poiuytre-RAI1"
+ },
+ {
+ "id": "HPO1",
+ "name": "ATLNGAUP-HPO1"
+ },
+ {
+ "id": "KJF12",
+ "name": "KJFDH123-KJF12"
+ },
+ {
+ "id": "SCC80",
+ "name": "SAIT9CC3-SCC80"
+ },
+ {
+ "id": "SAA12",
+ "name": "SAIT9AF8-SAA12"
+ },
+ {
+ "id": "SAA14",
+ "name": "SAIT1AA9-SAA14"
+ },
+ {
+ "id": "ATL35",
+ "name": "TTESSAAI-ATL35"
+ },
+ {
+ "id": "CWY1",
+ "name": "CWYMOWBS-CWY1"
+ },
+ {
+ "id": "ATL76",
+ "name": "TELEPAAI-ATL76"
+ },
+ {
+ "id": "DSL12",
+ "name": "DSLFK242-DSL12"
+ },
+ {
+ "id": "ATL53",
+ "name": "AAIATLTE-ATL53"
+ },
+ {
+ "id": "SAA11",
+ "name": "SAIT9AA2-SAA11"
+ },
+ {
+ "id": "ATL62",
+ "name": "TESSASCH-ATL62"
+ },
+ {
+ "id": "AUG1",
+ "name": "ASDFGHJK-AUG1"
+ },
+ {
+ "id": "POI22",
+ "name": "POIUY123-POI22"
+ },
+ {
+ "id": "SAA13",
+ "name": "SAIT1AA9-SAA13"
+ },
+ {
+ "id": "BHY17",
+ "name": "BHYTFRF3-BHY17"
+ },
+ {
+ "id": "LIS1",
+ "name": "HOSTPROF-LIS1"
+ },
+ {
+ "id": "SIP1",
+ "name": "ZXCVBNMK-SIP1"
+ },
+ {
+ "id": "ATL99",
+ "name": "TEESTAAI-ATL43"
+ },
+ {
+ "id": "ATL64",
+ "name": "FORLOAAJ-ATL64"
+ },
+ {
+ "id": "TAT33",
+ "name": "TESAAISA-TAT33"
+ },
+ {
+ "id": "RAD10",
+ "name": "INDIPUNE-RAD10"
+ },
+ {
+ "id": "RTW5",
+ "name": "BHYTFRY4-RTW5"
+ },
+ {
+ "id": "JGS1",
+ "name": "KSJKKKKK-JGS1"
+ },
+ {
+ "id": "ATL98",
+ "name": "TEESTAAI-ATL43"
+ },
+ {
+ "id": "WAN1",
+ "name": "LEIWANGW-WAN1"
+ },
+ {
+ "id": "ATL44",
+ "name": "ATLSANAB-ATL44"
+ },
+ {
+ "id": "RTD2",
+ "name": "BHYTFRk4-RTD2"
+ },
+ {
+ "id": "NIR1",
+ "name": "ORFLMANA-NIR1"
+ },
+ {
+ "id": "ATL75",
+ "name": "SANAAIRE-ATL75"
+ },
+ {
+ "id": "NUM1",
+ "name": "QWERTYUI-NUM1"
+ },
+ {
+ "id": "MTN32",
+ "name": "MDTWNJ21-MTN32"
+ },
+ {
+ "id": "RTZ4",
+ "name": "BHYTFRZ6-RTZ4"
+ },
+ {
+ "id": "ATL56",
+ "name": "ATLSANAC-ATL56"
+ },
+ {
+ "id": "AMS1",
+ "name": "AMSTNLBW-AMS1"
+ },
+ {
+ "id": "RCT1",
+ "name": "AMSTERNL-RCT1"
+ },
+ {
+ "id": "JAN1",
+ "name": "ORFLMATT-JAN1"
+ },
+ {
+ "id": "ABC14",
+ "name": "TESAAISA-ABC14"
+ },
+ {
+ "id": "TAT37",
+ "name": "TESAAISD-TAT37"
+ },
+ {
+ "id": "MIC54",
+ "name": "MICHIGAN-MIC54"
+ },
+ {
+ "id": "ABC11",
+ "name": "ATLSANAI-ABC11"
+ },
+ {
+ "id": "AMF11",
+ "name": "AMDOCS01-AMF11"
+ },
+ {
+ "id": "ATL63",
+ "name": "ATLSANEW-ATL63"
+ },
+ {
+ "id": "ABC12",
+ "name": "ATLSECIA-ABC12"
+ },
+ {
+ "id": "MTN20",
+ "name": "MDTWNJ21-MTN20"
+ },
+ {
+ "id": "ABC15",
+ "name": "AAITESAN-ABC15"
+ },
+ {
+ "id": "AVT1",
+ "name": "AVTRFLHD-AVT1"
+ },
+ {
+ "id": "ATL34",
+ "name": "ATLSANAI-ATL34"
+ }
+ ],
+ "categoryParameters": {
+ "owningEntityList": [
+ {
+ "id": "aaa1",
+ "name": "aaa1"
+ },
+ {
+ "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "name": "MetroPacketCore"
+ },
+ {
+ "id": "Wireline",
+ "name": "Wireline"
+ }
+ ],
+ "projectList": [
+ {
+ "id": "DFW",
+ "name": "DFW"
+ },
+ {
+ "id": "x1",
+ "name": "x1"
+ },
+ {
+ "id": "yyy1",
+ "name": "yyy1"
+ }
+ ],
+ "lineOfBusinessList": [
+ {
+ "id": "ECOMP",
+ "name": "ECOMP"
+ },
+ {
+ "id": "zzz1",
+ "name": "zzz1"
+ }
+ ],
+ "platformList": [
+ {
+ "id": "platform",
+ "name": "platform"
+ },
+ {
+ "id": "xxx1",
+ "name": "xxx1"
+ }
+ ]
+ },
+ "type": "[PRODUCT_FAMILIES] Update"
+ }
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/subscribers.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/subscribers.json
new file mode 100644
index 000000000..088fbe7ea
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/subscribers.json
@@ -0,0 +1,24 @@
+{
+ "customer": [
+ {
+ "global-customer-id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "subscriber-name": "Mobility",
+ "subscriber-type": "INFRA",
+ "resource-version": "1494255056308",
+ "is-permitted": false
+ },
+ {
+ "global-customer-id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fc",
+ "subscriber-name": "PACKET CORE",
+ "subscriber-type": "INFRA",
+ "resource-version": "1506548476111",
+ "is-permitted": false
+ },
+ {
+ "global-customer-id": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "subscriber-name": "USP VOICE",
+ "subscriber-type": "INFRA",
+ "is-permitted": true
+ }
+ ]
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/topMenuInfo.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/topMenuInfo.json
new file mode 100644
index 000000000..92627f42b
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/topMenuInfo.json
@@ -0,0 +1,8 @@
+{
+ "contactUsLink": "https://wiki.web.att.com/display/EcompPortal/ECOMP+Portal+Home",
+ "firstName": "uspVoiceVirtualUsp",
+ "portalUrl": "https://www.e-access.att.com/ecomp_portal_dev_n1/ecompui/process_csp",
+ "getAccessUrl": "https://www.e-access.att.com/ecomp_portal_dev_n1/ecompui/get_access",
+ "userName": "uspVoiceVirtualUsp null",
+ "userid": "uspVoiceVirtualUsp"
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/zones.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/zones.json
new file mode 100644
index 000000000..de18d8b36
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/zones.json
@@ -0,0 +1,772 @@
+{
+ "zone": [
+ {
+ "zone-id": "NFT1",
+ "zone-name": "NFTJSSSS-NFT1"
+ },
+ {
+ "zone-id": "JAG1",
+ "zone-name": "YUDFJULP-JAG1"
+ },
+ {
+ "zone-id": "YYY1",
+ "zone-name": "UUUAIAAI-YYY1"
+ },
+ {
+ "zone-id": "BAN1",
+ "zone-name": "VSDKYUTP-BAN1"
+ },
+ {
+ "zone-id": "DKJ1",
+ "zone-name": "DKJSJDKA-DKJ1"
+ },
+ {
+ "zone-id": "MCS1",
+ "zone-name": "ASACMAMS-MCS1"
+ },
+ {
+ "zone-id": "UIO1",
+ "zone-name": "uioclli1-UIO1"
+ },
+ {
+ "zone-id": "RAJ1",
+ "zone-name": "YGBIJNLQ-RAJ1"
+ },
+ {
+ "zone-id": "OPA1",
+ "zone-name": "opaclli1-OPA1"
+ },
+ {
+ "zone-id": "SDE1",
+ "zone-name": "ZXCVBNMA-SDE1"
+ },
+ {
+ "zone-id": "VEN2",
+ "zone-name": "FGHJUHIL-VEN2"
+ },
+ {
+ "zone-id": "ORL1",
+ "zone-name": "ORLDFLMA-ORL1"
+ },
+ {
+ "zone-id": "JAD1",
+ "zone-name": "JADECLLI-JAD1"
+ },
+ {
+ "zone-id": "ZXL1",
+ "zone-name": "LWLWCANN-ZXL1"
+ },
+ {
+ "zone-id": "CKL1",
+ "zone-name": "CLKSKCKK-CKL1"
+ },
+ {
+ "zone-id": "SDF1",
+ "zone-name": "sdfclli1-SDF1"
+ },
+ {
+ "zone-id": "RAD1",
+ "zone-name": "RADICAL1-RAD1"
+ },
+ {
+ "zone-id": "KIT1",
+ "zone-name": "BHYJFGLN-KIT1"
+ },
+ {
+ "zone-id": "REL1",
+ "zone-name": "INGERFGT-REL1"
+ },
+ {
+ "zone-id": "JNL1",
+ "zone-name": "CJALSDAC-JNL1"
+ },
+ {
+ "zone-id": "OLK1",
+ "zone-name": "OLKOLKLS-OLK1"
+ },
+ {
+ "zone-id": "CHI1",
+ "zone-name": "CHILLIWE-CHI1"
+ },
+ {
+ "zone-id": "UUU4",
+ "zone-name": "UUUAAAUU-UUU4"
+ },
+ {
+ "zone-id": "TUF1",
+ "zone-name": "TUFCLLI1-TUF1"
+ },
+ {
+ "zone-id": "KJN1",
+ "zone-name": "CKALDKSA-KJN1"
+ },
+ {
+ "zone-id": "SAM1",
+ "zone-name": "SNDGCA64-SAN1"
+ },
+ {
+ "zone-id": "SCK1",
+ "zone-name": "SCKSCKSK-SCK1"
+ },
+ {
+ "zone-id": "HJH1",
+ "zone-name": "AOEEQQQD-HJH1"
+ },
+ {
+ "zone-id": "HGD1",
+ "zone-name": "SDFQWHGD-HGD1"
+ },
+ {
+ "zone-id": "KOR1",
+ "zone-name": "HYFLNBVT-KOR1"
+ },
+ {
+ "zone-id": "ATL43",
+ "zone-name": "AICLOCID-ATL43"
+ },
+ {
+ "zone-id": "ATL54",
+ "zone-name": "AICFTAAI-ATL54"
+ },
+ {
+ "zone-id": "ATL66",
+ "zone-name": "CLLIAAII-ATL66"
+ },
+ {
+ "zone-id": "VEL1",
+ "zone-name": "BNMLKUIK-VEL1"
+ },
+ {
+ "zone-id": "ICC1",
+ "zone-name": "SANJITAT-ICC1"
+ },
+ {
+ "zone-id": "MNT11",
+ "zone-name": "WSXEFBTH-MNT11"
+ },
+ {
+ "zone-id": "DEF2",
+ "zone-name": "WSBHGTYL-DEF2"
+ },
+ {
+ "zone-id": "MAD11",
+ "zone-name": "SDFQWGKL-MAD11"
+ },
+ {
+ "zone-id": "OLG1",
+ "zone-name": "OLHOLHOL-OLG1"
+ },
+ {
+ "zone-id": "GAR1",
+ "zone-name": "NGFVSJKO-GAR1"
+ },
+ {
+ "zone-id": "SAN22",
+ "zone-name": "GNVLSCTL-SAN22"
+ },
+ {
+ "zone-id": "HRG1",
+ "zone-name": "HRGHRGGS-HRG1"
+ },
+ {
+ "zone-id": "JCS1",
+ "zone-name": "JCSJSCJS-JCS1"
+ },
+ {
+ "zone-id": "DHA12",
+ "zone-name": "WSXEDECF-DHA12"
+ },
+ {
+ "zone-id": "HJE1",
+ "zone-name": "AOEEWWWD-HJE1"
+ },
+ {
+ "zone-id": "NCA1",
+ "zone-name": "NCANCANN-NCA1"
+ },
+ {
+ "zone-id": "IOP1",
+ "zone-name": "iopclli1-IOP1"
+ },
+ {
+ "zone-id": "RTY1",
+ "zone-name": "rtyclli1-RTY1"
+ },
+ {
+ "zone-id": "KAP1",
+ "zone-name": "HIOUYTRQ-KAP1"
+ },
+ {
+ "zone-id": "ZEN1",
+ "zone-name": "ZENCLLI1-ZEN1"
+ },
+ {
+ "zone-id": "HKA1",
+ "zone-name": "JAKHLASS-HKA1"
+ },
+ {
+ "zone-id": "CQK1",
+ "zone-name": "CQKSCAKK-CQK1"
+ },
+ {
+ "zone-id": "SAI1",
+ "zone-name": "UBEKQLPD-SAI1"
+ },
+ {
+ "zone-id": "ERT1",
+ "zone-name": "ertclli1-ERT1"
+ },
+ {
+ "zone-id": "IBB1",
+ "zone-name": "PLMKOIJU-IBB1"
+ },
+ {
+ "zone-id": "TIR2",
+ "zone-name": "PLKINHYI-TIR2"
+ },
+ {
+ "zone-id": "HSD1",
+ "zone-name": "CHASKCDS-HSD1"
+ },
+ {
+ "zone-id": "SLF78",
+ "zone-name": "SDCTLFN1-SLF78"
+ },
+ {
+ "zone-id": "SEE78",
+ "zone-name": "SDCTEEE4-SEE78"
+ },
+ {
+ "zone-id": "SAN13",
+ "zone-name": "TOKYJPFA-SAN13"
+ },
+ {
+ "zone-id": "SAA78",
+ "zone-name": "SDCTAAA1-SAA78"
+ },
+ {
+ "zone-id": "LUC1",
+ "zone-name": "ATLDFGYC-LUC1"
+ },
+ {
+ "zone-id": "AMD13",
+ "zone-name": "MEMATLAN-AMD13"
+ },
+ {
+ "zone-id": "TOR1",
+ "zone-name": "TOROONXN-TOR1"
+ },
+ {
+ "zone-id": "QWE1",
+ "zone-name": "QWECLLI1-QWE1"
+ },
+ {
+ "zone-id": "ZOG1",
+ "zone-name": "ZOGASTRO-ZOG1"
+ },
+ {
+ "zone-id": "CAL33",
+ "zone-name": "CALIFORN-CAL33"
+ },
+ {
+ "zone-id": "SHH78",
+ "zone-name": "SDIT1HHH-SHH78"
+ },
+ {
+ "zone-id": "DSA1",
+ "zone-name": "LKJHGFDS-DSA1"
+ },
+ {
+ "zone-id": "CLG1",
+ "zone-name": "CLGRABAD-CLG1"
+ },
+ {
+ "zone-id": "BNA1",
+ "zone-name": "BNARAGBK-BNA1"
+ },
+ {
+ "zone-id": "ATL84",
+ "zone-name": "CANTTCOC-ATL84"
+ },
+ {
+ "zone-id": "APP1",
+ "zone-name": "WBHGTYUI-APP1"
+ },
+ {
+ "zone-id": "RJN1",
+ "zone-name": "RJNRBZAW-RJN1"
+ },
+ {
+ "zone-id": "EHH78",
+ "zone-name": "SDCSHHH5-EHH78"
+ },
+ {
+ "zone-id": "mac10",
+ "zone-name": "PKGTESTF-mac10"
+ },
+ {
+ "zone-id": "SXB78",
+ "zone-name": "SDCTGXB1-SXB78"
+ },
+ {
+ "zone-id": "SAX78",
+ "zone-name": "SDCTAXG1-SAX78"
+ },
+ {
+ "zone-id": "SYD1",
+ "zone-name": "SYDNAUBV-SYD1"
+ },
+ {
+ "zone-id": "TOK1",
+ "zone-name": "TOKYJPFA-TOK1"
+ },
+ {
+ "zone-id": "KGM2",
+ "zone-name": "KGMTNC20-KGM2"
+ },
+ {
+ "zone-id": "DCC1b",
+ "zone-name": "POIUYTGH-DCC1b"
+ },
+ {
+ "zone-id": "SKK78",
+ "zone-name": "SDCTKKK1-SKK78"
+ },
+ {
+ "zone-id": "SGG78",
+ "zone-name": "SDCTGGG1-SGG78"
+ },
+ {
+ "zone-id": "SJJ78",
+ "zone-name": "SDCTJJJ1-SJJ78"
+ },
+ {
+ "zone-id": "SBX78",
+ "zone-name": "SDCTBXG1-SBX78"
+ },
+ {
+ "zone-id": "LAG1",
+ "zone-name": "LARGIZON-LAG1"
+ },
+ {
+ "zone-id": "IAA1",
+ "zone-name": "QAZXSWED-IAA1"
+ },
+ {
+ "zone-id": "POI1",
+ "zone-name": "PLMNJKIU-POI1"
+ },
+ {
+ "zone-id": "LAG1a",
+ "zone-name": "LARGIZON-LAG1a"
+ },
+ {
+ "zone-id": "PBL1",
+ "zone-name": "PBLAPBAI-PBL1"
+ },
+ {
+ "zone-id": "LAG45",
+ "zone-name": "LARGIZON-LAG1a"
+ },
+ {
+ "zone-id": "MAR1",
+ "zone-name": "MNBVCXZM-MAR1"
+ },
+ {
+ "zone-id": "HST70",
+ "zone-name": "HSTNTX70-HST70"
+ },
+ {
+ "zone-id": "DCC1a",
+ "zone-name": "POIUYTGH-DCC1a"
+ },
+ {
+ "zone-id": "TOL1",
+ "zone-name": "TOLDOH21-TOL1"
+ },
+ {
+ "zone-id": "LON1",
+ "zone-name": "LONEENCO-LON1"
+ },
+ {
+ "zone-id": "SJU78",
+ "zone-name": "SDIT1JUB-SJU78"
+ },
+ {
+ "zone-id": "STN27",
+ "zone-name": "HSTNTX01-STN27"
+ },
+ {
+ "zone-id": "SSW56",
+ "zone-name": "ss8126GT-SSW56"
+ },
+ {
+ "zone-id": "SBB78",
+ "zone-name": "SDIT1BBB-SBB78"
+ },
+ {
+ "zone-id": "DCC3",
+ "zone-name": "POIUYTGH-DCC3"
+ },
+ {
+ "zone-id": "GNV1",
+ "zone-name": "GNVLSCTL-GNV1"
+ },
+ {
+ "zone-id": "WAS1",
+ "zone-name": "WASHDCSW-WAS1"
+ },
+ {
+ "zone-id": "TOY1",
+ "zone-name": "TORYONNZ-TOY1"
+ },
+ {
+ "zone-id": "STT1",
+ "zone-name": "STTLWA02-STT1"
+ },
+ {
+ "zone-id": "STG1",
+ "zone-name": "STTGGE62-STG1"
+ },
+ {
+ "zone-id": "SLL78",
+ "zone-name": "SDCTLLL1-SLL78"
+ },
+ {
+ "zone-id": "SBU78",
+ "zone-name": "SDIT1BUB-SBU78"
+ },
+ {
+ "zone-id": "ATL2",
+ "zone-name": "ATLNGANW-ATL2"
+ },
+ {
+ "zone-id": "BOT1",
+ "zone-name": "BOTHWAKY-BOT1"
+ },
+ {
+ "zone-id": "SNG1",
+ "zone-name": "SNGPSIAU-SNG1"
+ },
+ {
+ "zone-id": "NYC1",
+ "zone-name": "NYCMNY54-NYC1"
+ },
+ {
+ "zone-id": "LAG1b",
+ "zone-name": "LARGIZON-LAG1b"
+ },
+ {
+ "zone-id": "AMD15",
+ "zone-name": "AMDFAA01-AMD15"
+ },
+ {
+ "zone-id": "SNA1",
+ "zone-name": "SNANTXCA-SNA1"
+ },
+ {
+ "zone-id": "PLT1",
+ "zone-name": "PLTNCA60-PLT1"
+ },
+ {
+ "zone-id": "TLP1",
+ "zone-name": "TLPNXM18-TLP1"
+ },
+ {
+ "zone-id": "SDD81",
+ "zone-name": "SAIT1DD6-SDD81"
+ },
+ {
+ "zone-id": "DCC1",
+ "zone-name": "POIUYTGH-DCC1"
+ },
+ {
+ "zone-id": "DCC2",
+ "zone-name": "POIUYTGH-DCC2"
+ },
+ {
+ "zone-id": "OKC1",
+ "zone-name": "OKCBOK55-OKC1"
+ },
+ {
+ "zone-id": "PAR1",
+ "zone-name": "PARSFRCG-PAR1"
+ },
+ {
+ "zone-id": "TES36",
+ "zone-name": "ABCEETES-TES36"
+ },
+ {
+ "zone-id": "COM1",
+ "zone-name": "PLMKOPIU-COM1"
+ },
+ {
+ "zone-id": "ANI1",
+ "zone-name": "ATLNGTRE-ANI1"
+ },
+ {
+ "zone-id": "SDG78",
+ "zone-name": "SDIT1BDG-SDG78"
+ },
+ {
+ "zone-id": "mac20",
+ "zone-name": "PKGTESTF-mac20"
+ },
+ {
+ "zone-id": "DSF45",
+ "zone-name": "DSFBG123-DSF45"
+ },
+ {
+ "zone-id": "HST25",
+ "zone-name": "HSTNTX01-HST25"
+ },
+ {
+ "zone-id": "AMD18",
+ "zone-name": "AUDIMA01-AMD18"
+ },
+ {
+ "zone-id": "SAA80",
+ "zone-name": "SAIT9AA3-SAA80"
+ },
+ {
+ "zone-id": "SSA56",
+ "zone-name": "SSIT2AA7-SSA56"
+ },
+ {
+ "zone-id": "SDD82",
+ "zone-name": "SAIT1DD9-SDD82"
+ },
+ {
+ "zone-id": "JCV1",
+ "zone-name": "JCVLFLBW-JCV1"
+ },
+ {
+ "zone-id": "SUL2",
+ "zone-name": "WERTYUJK-SUL2"
+ },
+ {
+ "zone-id": "PUR1",
+ "zone-name": "purelyde-PUR1"
+ },
+ {
+ "zone-id": "FDE55",
+ "zone-name": "FDERT555-FDE55"
+ },
+ {
+ "zone-id": "SITE",
+ "zone-name": "LONEENCO-SITE"
+ },
+ {
+ "zone-id": "ATL1",
+ "zone-name": "ATLNGAMA-ATL1"
+ },
+ {
+ "zone-id": "JUL1",
+ "zone-name": "ZXCVBNMM-JUL1"
+ },
+ {
+ "zone-id": "TAT34",
+ "zone-name": "TESAAISB-TAT34"
+ },
+ {
+ "zone-id": "XCP12",
+ "zone-name": "CHKGH123-XCP12"
+ },
+ {
+ "zone-id": "RAI1",
+ "zone-name": "poiuytre-RAI1"
+ },
+ {
+ "zone-id": "HPO1",
+ "zone-name": "ATLNGAUP-HPO1"
+ },
+ {
+ "zone-id": "KJF12",
+ "zone-name": "KJFDH123-KJF12"
+ },
+ {
+ "zone-id": "SCC80",
+ "zone-name": "SAIT9CC3-SCC80"
+ },
+ {
+ "zone-id": "SAA12",
+ "zone-name": "SAIT9AF8-SAA12"
+ },
+ {
+ "zone-id": "SAA14",
+ "zone-name": "SAIT1AA9-SAA14"
+ },
+ {
+ "zone-id": "ATL35",
+ "zone-name": "TTESSAAI-ATL35"
+ },
+ {
+ "zone-id": "CWY1",
+ "zone-name": "CWYMOWBS-CWY1"
+ },
+ {
+ "zone-id": "ATL76",
+ "zone-name": "TELEPAAI-ATL76"
+ },
+ {
+ "zone-id": "DSL12",
+ "zone-name": "DSLFK242-DSL12"
+ },
+ {
+ "zone-id": "ATL53",
+ "zone-name": "AAIATLTE-ATL53"
+ },
+ {
+ "zone-id": "SAA11",
+ "zone-name": "SAIT9AA2-SAA11"
+ },
+ {
+ "zone-id": "ATL62",
+ "zone-name": "TESSASCH-ATL62"
+ },
+ {
+ "zone-id": "AUG1",
+ "zone-name": "ASDFGHJK-AUG1"
+ },
+ {
+ "zone-id": "POI22",
+ "zone-name": "POIUY123-POI22"
+ },
+ {
+ "zone-id": "SAA13",
+ "zone-name": "SAIT1AA9-SAA13"
+ },
+ {
+ "zone-id": "BHY17",
+ "zone-name": "BHYTFRF3-BHY17"
+ },
+ {
+ "zone-id": "LIS1",
+ "zone-name": "HOSTPROF-LIS1"
+ },
+ {
+ "zone-id": "SIP1",
+ "zone-name": "ZXCVBNMK-SIP1"
+ },
+ {
+ "zone-id": "ATL99",
+ "zone-name": "TEESTAAI-ATL43"
+ },
+ {
+ "zone-id": "ATL64",
+ "zone-name": "FORLOAAJ-ATL64"
+ },
+ {
+ "zone-id": "TAT33",
+ "zone-name": "TESAAISA-TAT33"
+ },
+ {
+ "zone-id": "RAD10",
+ "zone-name": "INDIPUNE-RAD10"
+ },
+ {
+ "zone-id": "RTW5",
+ "zone-name": "BHYTFRY4-RTW5"
+ },
+ {
+ "zone-id": "JGS1",
+ "zone-name": "KSJKKKKK-JGS1"
+ },
+ {
+ "zone-id": "ATL98",
+ "zone-name": "TEESTAAI-ATL43"
+ },
+ {
+ "zone-id": "WAN1",
+ "zone-name": "LEIWANGW-WAN1"
+ },
+ {
+ "zone-id": "ATL44",
+ "zone-name": "ATLSANAB-ATL44"
+ },
+ {
+ "zone-id": "RTD2",
+ "zone-name": "BHYTFRk4-RTD2"
+ },
+ {
+ "zone-id": "NIR1",
+ "zone-name": "ORFLMANA-NIR1"
+ },
+ {
+ "zone-id": "ATL75",
+ "zone-name": "SANAAIRE-ATL75"
+ },
+ {
+ "zone-id": "NUM1",
+ "zone-name": "QWERTYUI-NUM1"
+ },
+ {
+ "zone-id": "MTN32",
+ "zone-name": "MDTWNJ21-MTN32"
+ },
+ {
+ "zone-id": "RTZ4",
+ "zone-name": "BHYTFRZ6-RTZ4"
+ },
+ {
+ "zone-id": "ATL56",
+ "zone-name": "ATLSANAC-ATL56"
+ },
+ {
+ "zone-id": "AMS1",
+ "zone-name": "AMSTNLBW-AMS1"
+ },
+ {
+ "zone-id": "RCT1",
+ "zone-name": "AMSTERNL-RCT1"
+ },
+ {
+ "zone-id": "JAN1",
+ "zone-name": "ORFLMATT-JAN1"
+ },
+ {
+ "zone-id": "ABC14",
+ "zone-name": "TESAAISA-ABC14"
+ },
+ {
+ "zone-id": "TAT37",
+ "zone-name": "TESAAISD-TAT37"
+ },
+ {
+ "zone-id": "MIC54",
+ "zone-name": "MICHIGAN-MIC54"
+ },
+ {
+ "zone-id": "ABC11",
+ "zone-name": "ATLSANAI-ABC11"
+ },
+ {
+ "zone-id": "AMF11",
+ "zone-name": "AMDOCS01-AMF11"
+ },
+ {
+ "zone-id": "ATL63",
+ "zone-name": "ATLSANEW-ATL63"
+ },
+ {
+ "zone-id": "ABC12",
+ "zone-name": "ATLSECIA-ABC12"
+ },
+ {
+ "zone-id": "MTN20",
+ "zone-name": "MDTWNJ21-MTN20"
+ },
+ {
+ "zone-id": "ABC15",
+ "zone-name": "AAITESAN-ABC15"
+ },
+ {
+ "zone-id": "AVT1",
+ "zone-name": "AVTRFLHD-AVT1"
+ },
+ {
+ "zone-id": "ATL34",
+ "zone-name": "ATLSANAI-ATL34"
+ }
+ ]
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/vid.mock.ts b/vid-webpack-master/cypress/support/jsonBuilders/mocks/vid.mock.ts
new file mode 100644
index 000000000..5bc02d1c2
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/vid.mock.ts
@@ -0,0 +1,91 @@
+declare namespace Cypress {
+ interface Chainable {
+ initVidMock: typeof initVidMock;
+ preventErrorsOnLoading : typeof preventErrorsOnLoading;
+ initCategoryParameter : typeof initCategoryParameter;
+ }
+}
+
+function preventErrorsOnLoading() : void {
+ cy.on('uncaught:exception', (err, runnable) => {
+ return false
+ });
+}
+
+function initGetToMenuInfo(response? : JSON) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/topMenuInfo.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ status : 200,
+ url : Cypress.config('baseUrl') + "/get_topMenuInfo",
+ response : response ? response : res
+ });
+ });
+
+}
+
+
+function initCategoryParameter(response? : JSON) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/categoryParametres.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ status : 200,
+ url : Cypress.config('baseUrl') + "/category_parameter**",
+ response : response ? response : res
+ });
+ })
+}
+
+function initFlags(response? : JSON, delay?: number, status?: number) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/flags.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ delay : delay ? delay : 0,
+ status : status ? status : 200,
+ url : Cypress.config('baseUrl') + "/flags**",
+ response : response ? response : res
+ }).as('initFlags');
+ })
+}
+
+function initAuditInfoVID(response? : JSON, delay?: number, status?: number) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/auditInfoVid.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ delay : delay ? delay : 0,
+ status : status ? status : 200,
+ url : Cypress.config('baseUrl') + "/asyncInstantiation/auditStatus/**?source=VID",
+ response : response ? response : res
+ }).as('initAuditInfoVID');
+ })
+}
+
+function initAuditInfoMSO(response? : JSON, delay?: number, status?: number) : void {
+ cy.readFile('/cypress/support/jsonBuilders/mocks/jsons/auditInfoMSO.json').then((res) => {
+ cy.server()
+ .route({
+ method: 'GET',
+ delay : delay ? delay : 0,
+ status : status ? status : 200,
+ url : Cypress.config('baseUrl') + "/asyncInstantiation/auditStatus/**?source=MSO",
+ response : response ? response : res
+ }).as('initAuditInfoMSO');
+ })
+}
+
+function initVidMock(): void {
+ initGetToMenuInfo();
+ initCategoryParameter();
+ initFlags();
+ initAuditInfoVID();
+ initAuditInfoMSO();
+}
+
+
+Cypress.Commands.add('initVidMock', initVidMock);
+Cypress.Commands.add('preventErrorsOnLoading', preventErrorsOnLoading);
+Cypress.Commands.add('initCategoryParameter', initCategoryParameter);
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/models/aaiSubDetails.model.ts b/vid-webpack-master/cypress/support/jsonBuilders/models/aaiSubDetails.model.ts
new file mode 100644
index 000000000..6f72b7f43
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/models/aaiSubDetails.model.ts
@@ -0,0 +1,8 @@
+/// <reference types="Cypress" />
+export class AAISubDetailsModel{
+ "global-customer-id": string;
+ "subscriber-name": string;
+ "subscriber-type": string;
+ "resource-version": string;
+ "service-subscriptions": Object;
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/models/aaiSubViewEdit.model.ts b/vid-webpack-master/cypress/support/jsonBuilders/models/aaiSubViewEdit.model.ts
new file mode 100644
index 000000000..70a02aa03
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/models/aaiSubViewEdit.model.ts
@@ -0,0 +1,5 @@
+/// <reference types="Cypress" />
+
+export class AAISubViewEditModel{
+ "inventory-response-item": Array<any>;
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/models/asyncInstantiation.model.ts b/vid-webpack-master/cypress/support/jsonBuilders/models/asyncInstantiation.model.ts
new file mode 100644
index 000000000..fa394360c
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/models/asyncInstantiation.model.ts
@@ -0,0 +1,36 @@
+/// <reference types="Cypress" />
+
+export class AsyncInstantiationModel{
+ id: number;
+ created : number;
+ modified: number;
+ createdId : string;
+ modifiedId : string;
+ rowNum : string;
+ auditUserId : string;
+ auditTrail : string;
+ jobId : string;
+ templateId : string;
+ userId : string;
+ jobStatus : string;
+ statusModifiedDate: number;
+ hidden : boolean;
+ pause: boolean;
+ owningEntityId: string;
+ owningEntityName: string;
+ project: string;
+ aicZoneId: string;
+ aicZoneName: string;
+ tenantId: string;
+ tenantName: string;
+ regionId: string;
+ regionName: string;
+ serviceType: string;
+ subscriberName: string;
+ serviceInstanceId : number;
+ serviceInstanceName: string;
+ serviceModelId: string;
+ serviceModelName: string;
+ serviceModelVersion: string;
+ createdBulkDate: number;
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/models/pnf.model.ts b/vid-webpack-master/cypress/support/jsonBuilders/models/pnf.model.ts
new file mode 100644
index 000000000..9cc9795f5
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/models/pnf.model.ts
@@ -0,0 +1,3 @@
+/// <reference types="Cypress" />
+export class PnfModel{
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/models/service.model.ts b/vid-webpack-master/cypress/support/jsonBuilders/models/service.model.ts
new file mode 100644
index 000000000..af12dfbeb
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/models/service.model.ts
@@ -0,0 +1,27 @@
+/// <reference types="Cypress" />
+
+export class ServiceModel{
+ service: {
+ uuid: string;
+ invariantUuid: string;
+ name: string;
+ version: string;
+ toscaModelURL: string;
+ category: string;
+ serviceType: string;
+ serviceRole: string;
+ description: string;
+ serviceEcompNaming : string;
+ instantiationType: string;
+ inputs: Object;
+ };
+ vnfs: Object;
+ networks: Object;
+ collectionResource: Object;
+ configurations: Object;
+ serviceProxies: Object;
+ vfModules: Object;
+ volumeGroups: Object;
+ pnfs:Object;
+
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/models/serviceInstances.model.ts b/vid-webpack-master/cypress/support/jsonBuilders/models/serviceInstances.model.ts
new file mode 100644
index 000000000..1ac8df21c
--- /dev/null
+++ b/vid-webpack-master/cypress/support/jsonBuilders/models/serviceInstances.model.ts
@@ -0,0 +1,4 @@
+/// <reference types="Cypress" />
+export class AaiServiceInstancesModel{
+ "service-instances": Array<Object>;
+}
diff --git a/vid-webpack-master/cypress/support/steps/login.step.ts b/vid-webpack-master/cypress/support/steps/login.step.ts
new file mode 100644
index 000000000..f35e6e6b8
--- /dev/null
+++ b/vid-webpack-master/cypress/support/steps/login.step.ts
@@ -0,0 +1,43 @@
+// add new command to the existing Cypress interface
+declare namespace Cypress {
+ interface Chainable {
+ login: typeof login,
+ openIframe : typeof openIframe
+ }
+}
+
+let currentLoginCookies : any = null;
+
+
+function login(): void {
+ if(currentLoginCookies){
+ cy.setCookie('JSESSIONID', currentLoginCookies.value, {
+ expiry : currentLoginCookies.expiry,
+ path : currentLoginCookies.path,
+ domain : currentLoginCookies.domain
+ });
+ }else {
+ const constant = {
+ "LOGIN_ID" : "#loginId",
+ "PASSWORD_ID" : "#password",
+ "LOGIN_BTN_ID" : "#loginBtn"
+ };
+
+ cy.visit('/login_external.htm');
+ cy.get(constant.LOGIN_ID).type("us16807000")
+ .get(constant.PASSWORD_ID).type("us16807000")
+ .get(constant.LOGIN_BTN_ID).click();
+
+ cy.getCookie("JSESSIONID").then((res) => {
+ currentLoginCookies = res;
+ });
+ }
+
+}
+
+function openIframe(iframeUrl : string): void {
+ cy.visit(iframeUrl);
+}
+
+Cypress.Commands.add('login', login);
+Cypress.Commands.add('openIframe', openIframe);
diff --git a/vid-webpack-master/cypress/tsconfig.json b/vid-webpack-master/cypress/tsconfig.json
new file mode 100644
index 000000000..1e316ff36
--- /dev/null
+++ b/vid-webpack-master/cypress/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "compilerOptions": {
+ "strict": true,
+ "baseUrl": "../node_modules",
+ "target": "es5",
+ "lib": ["es5", "dom"],
+ "types": ["cypress"]
+ },
+ "extends": "../tsconfig.json",
+ "include": [
+ "../node_modules/cypress/types",
+ "**/*.e2e.ts",
+ "./integration/**/*.ts",
+ "./support/**/*.ts"
+ ]
+}
diff --git a/vid-webpack-master/karma.conf.js b/vid-webpack-master/karma.conf.js
new file mode 100644
index 000000000..6c0576008
--- /dev/null
+++ b/vid-webpack-master/karma.conf.js
@@ -0,0 +1,37 @@
+module.exports = function (config) {
+ config.set({
+ basePath: '',
+ frameworks: ['jasmine', '@angular/cli'],
+ plugins: [
+ require('karma-jasmine'),
+ require('karma-chrome-launcher'),
+ require('karma-jasmine-html-reporter'),
+ require('karma-coverage-istanbul-reporter'),
+ require('karma-junit-reporter'),
+ require('karma-phantomjs-launcher'),
+ require('@angular/cli/plugins/karma')
+ ],
+ client:{
+ clearContext: false // leave Jasmine Spec Runner output visible in browser
+ },
+ coverageIstanbulReporter: {
+ reports: [ 'html','json', 'lcovonly' ],
+ fixWebpackSourcePaths: true
+ },
+ angularCli: {
+ environment: 'dev'
+ },
+ reporters: ['progress', 'junit'],
+ port: 9876,
+ colors: true,
+ logLevel: config.LOG_ERROR,
+ autoWatch: false,
+ browsers: ['PhantomJS'],
+ junitReporter: {
+ outputFile: '../test-resultskarma.xml',
+ outputDir : 'coverage',
+ suite : ''
+ },
+ singleRun: true
+ });
+}
diff --git a/vid-webpack-master/package-lock.json b/vid-webpack-master/package-lock.json
new file mode 100644
index 000000000..2e2adc051
--- /dev/null
+++ b/vid-webpack-master/package-lock.json
@@ -0,0 +1,18190 @@
+{
+ "name": "vid-cli",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@angular-devkit/build-optimizer": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.3.2.tgz",
+ "integrity": "sha512-U0BCZtThq5rUfY08shHXpxe8ZhSsiYB/cJjUvAWRTs/ORrs8pbngS6xwseQws8d/vHoVrtqGD9GU9h8AmFRERQ==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "source-map": "0.5.7",
+ "typescript": "2.6.2",
+ "webpack-sources": "1.1.0"
+ },
+ "dependencies": {
+ "typescript": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz",
+ "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=",
+ "dev": true
+ }
+ }
+ },
+ "@angular-devkit/core": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.3.2.tgz",
+ "integrity": "sha512-zABk/iP7YX5SVbmK4e+IX7j2d0D37MQJQiKgWdV3JzfvVJhNJzddiirtT980pIafoq+KyvTgVwXtc+vnux0oeQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "chokidar": "1.7.0",
+ "rxjs": "5.5.6",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ }
+ }
+ },
+ "@angular-devkit/schematics": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.3.2.tgz",
+ "integrity": "sha512-B6zZoqvHaTJy+vVdA6EtlxnCdGMa5elCa4j9lQLC3JI8DLvMXUWkCIPVbPzJ/GSRR9nsKWpvYMYaJyfBDUqfhw==",
+ "dev": true,
+ "requires": {
+ "@ngtools/json-schema": "1.2.0",
+ "rxjs": "5.5.6"
+ }
+ },
+ "@angular-redux/store": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@angular-redux/store/-/store-7.1.1.tgz",
+ "integrity": "sha512-Uhj+wzByvQ04j6hh75xYdUMfi/sA71OLcxMl0U8uhfEGsM13GaLmf1cheDfaAMNv04KKNqj72Gdb1j+Ov2S2Nw=="
+ },
+ "@angular/animations": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.0.tgz",
+ "integrity": "sha512-JLR42YHiJppO4ruAkFxgbzghUDtHkXHkKPM8udd2qyt16T7e1OX7EEOrrmldUu59CC56tZnJ/32p4SrYmxyBSA==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/cdk": {
+ "version": "2.0.0-beta.12",
+ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-2.0.0-beta.12.tgz",
+ "integrity": "sha1-OiQ8tiuT9OA5EgunD5ANyeI1Yi4=",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/cli": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.7.2.tgz",
+ "integrity": "sha512-U0RXiG6rNe5GqZazn+FLy3p4rOhBwpf5NWAec/JKe+u/cekIsyeDXLfqGJwzLhMEV4Iv2k4i3o5imejkEc4A9g==",
+ "dev": true,
+ "requires": {
+ "@angular-devkit/build-optimizer": "0.3.2",
+ "@angular-devkit/core": "0.3.2",
+ "@angular-devkit/schematics": "0.3.2",
+ "@ngtools/json-schema": "1.2.0",
+ "@ngtools/webpack": "1.10.1",
+ "@schematics/angular": "0.3.2",
+ "@schematics/package-update": "0.3.2",
+ "ajv": "6.3.0",
+ "autoprefixer": "7.2.6",
+ "cache-loader": "1.2.2",
+ "chalk": "2.2.2",
+ "circular-dependency-plugin": "4.4.0",
+ "clean-css": "4.1.11",
+ "common-tags": "1.7.2",
+ "copy-webpack-plugin": "4.4.3",
+ "core-object": "3.1.5",
+ "denodeify": "1.2.1",
+ "ember-cli-string-utils": "1.1.0",
+ "extract-text-webpack-plugin": "3.0.2",
+ "file-loader": "1.1.11",
+ "fs-extra": "4.0.3",
+ "glob": "7.1.2",
+ "html-webpack-plugin": "2.30.1",
+ "istanbul-instrumenter-loader": "3.0.0",
+ "karma-source-map-support": "1.2.0",
+ "less": "2.7.3",
+ "less-loader": "4.1.0",
+ "license-webpack-plugin": "1.3.0",
+ "loader-utils": "1.1.0",
+ "lodash": "4.17.5",
+ "memory-fs": "0.4.1",
+ "minimatch": "3.0.4",
+ "node-modules-path": "1.0.1",
+ "node-sass": "4.7.2",
+ "nopt": "4.0.1",
+ "opn": "5.1.0",
+ "portfinder": "1.0.13",
+ "postcss": "6.0.20",
+ "postcss-import": "11.1.0",
+ "postcss-loader": "2.1.2",
+ "postcss-url": "7.3.1",
+ "raw-loader": "0.5.1",
+ "resolve": "1.5.0",
+ "rxjs": "5.5.6",
+ "sass-loader": "6.0.7",
+ "semver": "5.5.0",
+ "silent-error": "1.1.0",
+ "source-map-support": "0.4.18",
+ "style-loader": "0.19.1",
+ "stylus": "0.54.5",
+ "stylus-loader": "3.0.2",
+ "uglifyjs-webpack-plugin": "1.2.4",
+ "url-loader": "0.6.2",
+ "webpack": "3.11.0",
+ "webpack-dev-middleware": "1.12.2",
+ "webpack-dev-server": "2.11.2",
+ "webpack-merge": "4.1.2",
+ "webpack-sources": "1.1.0",
+ "webpack-subresource-integrity": "1.0.4"
+ }
+ },
+ "@angular/common": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.2.0.tgz",
+ "integrity": "sha512-yMFn2isC7/XOs56/2Kzzbb1AASHiwipAPOVFtKe7TdZQClO8fJXwCnk326rzr615+CG0eSBNQWeiFGyWN2riBA==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/compiler": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.2.0.tgz",
+ "integrity": "sha512-RfYa4ESgjGX0T0ob/Xz00IF7nd2xZkoyRy6oKgL82q42uzB3xZUDMrFNgeGxAUs3H22IkL46/5SSPOMOTMZ0NA==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/compiler-cli": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.2.0.tgz",
+ "integrity": "sha512-+Kef4NjuHwLj2hRPdVo4yAtPmv+kn0Nu/ShmKfaEK4mt9aaQMFxKNt6beUuDK5iUPMB5nuTCZ4bqEFpqd+EtxQ==",
+ "dev": true,
+ "requires": {
+ "chokidar": "1.7.0",
+ "minimist": "1.2.0",
+ "reflect-metadata": "0.1.12",
+ "tsickle": "0.26.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "@angular/core": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.2.0.tgz",
+ "integrity": "sha512-s2ne45DguNUubhC1YgybGECC4Tyx3G4EZCntUiRMDWWkmKXSK+6dgHMesyDo8R5Oat8VfN4Anf8l3JHS1He8kg==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/forms": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.2.0.tgz",
+ "integrity": "sha512-g1/SF9lY0ZwzJ0w4NXbFsTGGEuUdgtaZny8DmkaqtmA7idby3FW398X0tv25KQfVYKtL+p9Jp1Y8EI0CvrIsvw==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/http": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.2.0.tgz",
+ "integrity": "sha512-V5Cl24dP3rCXTTQvDc0TIKoWqBRAa0DWAQbtr7iuDAt5a1vPGdKz5K1sEiiV6ziwX6gzjiwHjUvL+B+WbIUrQA==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/language-service": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-5.2.0.tgz",
+ "integrity": "sha512-Yj/y5XrBBXbtwnZ6HJOBl/0XS/JBvVlHb1UWw5MIrsc81k7/eFiRAIKzmGpAba+Sw0G0dO22ABZ4yJjAMsML6A==",
+ "dev": true
+ },
+ "@angular/platform-browser": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.0.tgz",
+ "integrity": "sha512-c6cR15MfopPwGZ097HdRuAi9+R9BhA3bRRFpP2HmrSSB/BW4ZNovUYwB2QUMSYbd9s0lYTtnavqGm6DKcyF2QA==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/platform-browser-dynamic": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.0.tgz",
+ "integrity": "sha512-xG1eNoi8sm4Jcly2y98r5mqYVe3XV8sUJCtOhvGBYtvt4dKEQ5tOns6fWQ0nUbl6Vv3Y0xgGUS1JCtfut3DuaQ==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/router": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.2.0.tgz",
+ "integrity": "sha512-VXDXtp2A1GQEUEhXg0ZzqHdTUERLgDSo3/Mmpzt+dgLMKlXDSCykcm4gINwE5VQLGD1zQvDFCCRv3seGRNfrqA==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angularclass/hmr": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@angularclass/hmr/-/hmr-2.1.3.tgz",
+ "integrity": "sha1-NOZY7T2jfyOwogDi2lqJvpK7IJ8="
+ },
+ "@angularclass/hmr-loader": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@angularclass/hmr-loader/-/hmr-loader-3.0.4.tgz",
+ "integrity": "sha1-PjoHuoNWUMkBVim44Yf+jc1VJ7g=",
+ "requires": {
+ "loader-utils": "1.1.0"
+ }
+ },
+ "@bahmutov/add-typescript-to-cypress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@bahmutov/add-typescript-to-cypress/-/add-typescript-to-cypress-2.0.0.tgz",
+ "integrity": "sha512-tnM/bBrvOHAXvTD6WAnbkwi9Su6WXiuOBhDsNr9SLu42Ne6DjRKHZdxo8Ros6kToEoh+Pe2E6dP9u0QEDfMABg==",
+ "dev": true,
+ "requires": {
+ "@cypress/webpack-preprocessor": "1.1.3",
+ "am-i-a-dependency": "1.1.2",
+ "chalk": "2.3.0",
+ "debug": "3.1.0",
+ "shelljs": "0.8.0",
+ "terminal-banner": "1.1.0",
+ "ts-loader": "3.2.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "shelljs": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.0.tgz",
+ "integrity": "sha512-wb72o5SM27oFRq2mMeNSl70DVkkvwf3ZSgk9rvieRVz7xFMIQp02HYw0oxlZgeAWS+wzGB+jcJWQTF7hH9WIPg==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "interpret": "1.1.0",
+ "rechoir": "0.6.2"
+ }
+ }
+ }
+ },
+ "@cypress/listr-verbose-renderer": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz",
+ "integrity": "sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-cursor": "1.0.2",
+ "date-fns": "1.29.0",
+ "figures": "1.7.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "1.0.1"
+ }
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5",
+ "object-assign": "4.1.1"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "1.1.1",
+ "onetime": "1.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "@cypress/webpack-preprocessor": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-1.1.3.tgz",
+ "integrity": "sha512-guldaqrDN2+tINtgedExYKOO5lIl7ieacFb5V6vAqm7UgaLGguld7hm3lYip6HhfkVhE+gentdJ7yZeH36WChw==",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-loader": "7.1.2",
+ "babel-preset-env": "1.6.0",
+ "babel-preset-react": "6.24.1",
+ "bluebird": "3.5.0",
+ "debug": "3.1.0",
+ "lodash.clonedeep": "4.5.0",
+ "webpack": "3.6.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "babel-loader": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz",
+ "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "1.0.0",
+ "loader-utils": "1.1.0",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.0.tgz",
+ "integrity": "sha512-OVgtQRuOZKckrILgMA5rvctvFZPv72Gua9Rt006AiPoB0DJKGN07UmaQA+qRrYgK71MVct8fFhT0EyNWYorVew==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.11.3",
+ "invariant": "2.2.4",
+ "semver": "5.5.0"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
+ "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "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.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "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.3.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": "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.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "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.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "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=",
+ "dev": true
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
+ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-js": "2.8.29",
+ "webpack-sources": "1.1.0"
+ }
+ },
+ "webpack": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.6.0.tgz",
+ "integrity": "sha512-OsHT3D0W0KmPPh60tC7asNnOmST6bKTiR90UyEdT9QYoaJ4OYN4Gg7WK1k3VxHK07ZoiYWPsKvlS/gAjwL/vRA==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.5.3",
+ "acorn-dynamic-import": "2.0.2",
+ "ajv": "5.5.2",
+ "ajv-keywords": "2.1.1",
+ "async": "2.6.0",
+ "enhanced-resolve": "3.4.1",
+ "escope": "3.6.0",
+ "interpret": "1.1.0",
+ "json-loader": "0.5.7",
+ "json5": "0.5.1",
+ "loader-runner": "2.3.0",
+ "loader-utils": "1.1.0",
+ "memory-fs": "0.4.1",
+ "mkdirp": "0.5.1",
+ "node-libs-browser": "2.1.0",
+ "source-map": "0.5.7",
+ "supports-color": "4.5.0",
+ "tapable": "0.2.8",
+ "uglifyjs-webpack-plugin": "0.4.6",
+ "watchpack": "1.5.0",
+ "webpack-sources": "1.1.0",
+ "yargs": "8.0.2"
+ }
+ },
+ "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
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "dev": true,
+ "requires": {
+ "camelcase": "4.1.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "read-pkg-up": "2.0.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "7.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "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.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "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.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "dev": true,
+ "requires": {
+ "camelcase": "4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "@cypress/xvfb": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.1.3.tgz",
+ "integrity": "sha512-EfRzw+wgI0Zdb4ZlhSvjh3q7I+oenqEYPXvr7oH/2RnzQqGDrPr7IU1Pi2yzGwoXmkNUQbo6qvntnItvQj0F4Q==",
+ "dev": true,
+ "requires": {
+ "lodash.once": "4.1.1"
+ }
+ },
+ "@harmowatch/ngx-redux-core": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@harmowatch/ngx-redux-core/-/ngx-redux-core-0.2.2.tgz",
+ "integrity": "sha512-68I2L8Qe49ApUtezKtiNThcpIfnXAbHanxSJDLm9wQvAL4jBrQVN7K+DthGjO++THCQBHP1U64HHW8KVTRkqhw==",
+ "requires": {
+ "@harmowatch/redux-decorators": "0.1.0",
+ "tslib": "1.9.0"
+ }
+ },
+ "@harmowatch/redux-decorators": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@harmowatch/redux-decorators/-/redux-decorators-0.1.0.tgz",
+ "integrity": "sha512-BWpYM+8TYYO2N/gceHcEZVyri1KJ/P3fBfahi8YfyaR+2rQ7cHEWHh/cHciaIt0ceRSX3R1H5zNmo8AYnmYqaA=="
+ },
+ "@ngtools/json-schema": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.2.0.tgz",
+ "integrity": "sha512-pMh+HDc6mOjUO3agRfB1tInimo7hf67u+0Cska2bfXFe6oU7rSMnr5PLVtiZVgwMoBHpx/6XjBymvcnWPo2Uzg==",
+ "dev": true
+ },
+ "@ngtools/webpack": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.10.1.tgz",
+ "integrity": "sha512-Pa2FUy9n2Pu7kkTho6ADfHyypTmDMY8/HT7y9G3tZdaEsS7CjFMdchN5Dx+TCATGVh+G6FLS2mjgXBiGVTmbWw==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.2.2",
+ "enhanced-resolve": "3.4.1",
+ "loader-utils": "1.1.0",
+ "magic-string": "0.22.5",
+ "semver": "5.5.0",
+ "source-map": "0.5.7",
+ "tree-kill": "1.2.0",
+ "webpack-sources": "1.1.0"
+ }
+ },
+ "@nicky-lenaers/ngx-scroll-to": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/@nicky-lenaers/ngx-scroll-to/-/ngx-scroll-to-0.6.1.tgz",
+ "integrity": "sha512-K5Lffbnvr75VVrcxIM3F2+JX5Eh5cpsDqdcySsO9SLdsLZ0UdHfzoVjUab3452ocpTpNDfC5o24F2CtMx1ENfQ=="
+ },
+ "@schematics/angular": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.3.2.tgz",
+ "integrity": "sha512-Elrk0BA951s0ScFZU0AWrpUeJBYVR52DZ1QTIO5R0AhwEd1PW4olI8szPLGQlVW5Sd6H0FA/fyFLIvn2r9v6Rw==",
+ "dev": true,
+ "requires": {
+ "typescript": "2.6.2"
+ },
+ "dependencies": {
+ "typescript": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz",
+ "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=",
+ "dev": true
+ }
+ }
+ },
+ "@schematics/package-update": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@schematics/package-update/-/package-update-0.3.2.tgz",
+ "integrity": "sha512-7aVP4994Hu8vRdTTohXkfGWEwLhrdNP3EZnWyBootm5zshWqlQojUGweZe5zwewsKcixeVOiy2YtW+aI4aGSLA==",
+ "dev": true,
+ "requires": {
+ "rxjs": "5.5.6",
+ "semver": "5.5.0",
+ "semver-intersect": "1.3.1"
+ }
+ },
+ "@storybook/addon-actions": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-3.4.1.tgz",
+ "integrity": "sha512-mCpEbzex7WYkyIHn9QUnIz83IwMO9Zi4D2LC6c/0u42HzQdkmTJWnyEg4NY5Az/1WZZTtwe9aep/pLc+Zzokdw==",
+ "requires": {
+ "@storybook/components": "3.4.1",
+ "babel-runtime": "6.26.0",
+ "deep-equal": "1.0.1",
+ "glamor": "2.20.40",
+ "glamorous": "4.12.2",
+ "global": "4.3.2",
+ "make-error": "1.3.4",
+ "prop-types": "15.6.1",
+ "react-inspector": "2.3.0",
+ "uuid": "3.2.1"
+ }
+ },
+ "@storybook/addon-links": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-3.4.1.tgz",
+ "integrity": "sha512-yOVStezQO/VTTlxoqDdVu6CCI2kHBNdLD6lY9w1ly20b6J4hg2Cgy/d/VyPUKfM3fTkdAHeBFayg41KmR9lrMQ==",
+ "requires": {
+ "@storybook/components": "3.4.1",
+ "babel-runtime": "6.26.0",
+ "global": "4.3.2",
+ "prop-types": "15.6.1"
+ }
+ },
+ "@storybook/addons": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-3.4.1.tgz",
+ "integrity": "sha512-WFHwVnJq6zItotj89fGFtEJ/MPdbUaOXu0QsNUbM1Muqw/kVX7gVAwXDPllBJ5y1/42aAzsJCQ/WMdrD2M9Tcg=="
+ },
+ "@storybook/channel-postmessage": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-3.4.1.tgz",
+ "integrity": "sha512-3LhieYOBJFPi5JRFUCc0axSj28GWAJjnXSNKRsWoRy+oSnj/Ux56ywkGLuh20Mze9NoA45MIKvtrsTPq2UiEkw==",
+ "requires": {
+ "@storybook/channels": "3.4.1",
+ "global": "4.3.2",
+ "json-stringify-safe": "5.0.1"
+ }
+ },
+ "@storybook/channels": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-3.4.1.tgz",
+ "integrity": "sha512-D8q64LsAmjZ+MeMUr/j0r+a2M9mm5y1yXBGkbEzucI2e48RP4zcc9ZVNB8yqCDPwtQLDU6w2idFWcaJaZNHXQw=="
+ },
+ "@storybook/client-logger": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-3.4.1.tgz",
+ "integrity": "sha512-wGIdo9GxxZ8iRzjTD9IrOk5UycOm8cnxJfe1Pfw9G5pisthASsxBYeqSVI44K9WchV1fMSRZ4AKUPmpoJ1H+ww=="
+ },
+ "@storybook/components": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/components/-/components-3.4.1.tgz",
+ "integrity": "sha512-STu4EkkUWZgMb/Cbpdf3YUKcQVTqIpg+kEP9zG7519/Eg0OuBgRZ4qRr5jiDbLQMsaGS8oxwjhCoHufG903oZw==",
+ "requires": {
+ "glamor": "2.20.40",
+ "glamorous": "4.12.2",
+ "prop-types": "15.6.1"
+ }
+ },
+ "@storybook/core": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/core/-/core-3.4.1.tgz",
+ "integrity": "sha512-LGfJFaOjKKP2WQfVMcjxJ+Abv1DBJYmWcMXF1w5nt3sua/GYcidgFVj5txu6Ib44UZubp1iXXQAKr35T+iSNOg==",
+ "requires": {
+ "@storybook/addons": "3.4.1",
+ "@storybook/channel-postmessage": "3.4.1",
+ "@storybook/client-logger": "3.4.1",
+ "@storybook/node-logger": "3.4.1",
+ "@storybook/ui": "3.4.1",
+ "autoprefixer": "7.2.6",
+ "babel-runtime": "6.26.0",
+ "chalk": "2.3.2",
+ "commander": "2.15.0",
+ "css-loader": "0.28.11",
+ "dotenv": "5.0.1",
+ "events": "2.0.0",
+ "express": "4.16.3",
+ "file-loader": "1.1.11",
+ "global": "4.3.2",
+ "json-loader": "0.5.7",
+ "postcss-flexbugs-fixes": "3.3.0",
+ "postcss-loader": "2.1.2",
+ "prop-types": "15.6.1",
+ "qs": "6.5.1",
+ "serve-favicon": "2.5.0",
+ "shelljs": "0.8.1",
+ "style-loader": "0.20.3",
+ "url-loader": "0.6.2",
+ "webpack": "3.11.0",
+ "webpack-dev-middleware": "1.12.2",
+ "webpack-hot-middleware": "2.22.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "events": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz",
+ "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg=="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
+ },
+ "style-loader": {
+ "version": "0.20.3",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.20.3.tgz",
+ "integrity": "sha512-2I7AVP73MvK33U7B9TKlYZAqdROyMXDYSMvHLX43qy3GCOaJNiV6i0v/sv9idWIaQ42Yn2dNv79Q5mKXbKhAZg==",
+ "requires": {
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.4.5"
+ }
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
+ }
+ },
+ "@storybook/mantra-core": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/@storybook/mantra-core/-/mantra-core-1.7.2.tgz",
+ "integrity": "sha512-GD4OYJ8GsayVhIg306sfgcKDk9j8YfuSKIAWvdB/g7IDlw0pDgueONALVEEE2XWJtCwcsUyDtCYzXFgCBWLEjA==",
+ "requires": {
+ "@storybook/react-komposer": "2.0.4",
+ "@storybook/react-simple-di": "1.3.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "@storybook/node-logger": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-3.4.1.tgz",
+ "integrity": "sha512-vnM2+TIubLLsU5pcqydjnbPnska6zYvPSKIOO7lKTsGV0DdmDy7myvUn+oSRPubVyMh8+uno1J+XTHzdRkhsXQ==",
+ "requires": {
+ "npmlog": "4.1.2"
+ }
+ },
+ "@storybook/podda": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@storybook/podda/-/podda-1.2.3.tgz",
+ "integrity": "sha512-g7dsdsn50AhlGZ8iIDKdF8bi7Am++iFOq+QN+hNKz3FvgLuf8Dz+mpC/BFl90eE9bEYxXqXKeMf87399Ec5Qhw==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "immutable": "3.8.2"
+ }
+ },
+ "@storybook/react": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/react/-/react-3.4.1.tgz",
+ "integrity": "sha512-fBeHDwQPmsLcEPjEEDrOzBJMjbcidNms9aAtv8yo+pf8uvLMbe4nOxwt5/goKrj994wpqUrZ0gXXzarcQW59Vg==",
+ "requires": {
+ "@storybook/addon-actions": "3.4.1",
+ "@storybook/addon-links": "3.4.1",
+ "@storybook/addons": "3.4.1",
+ "@storybook/channel-postmessage": "3.4.1",
+ "@storybook/client-logger": "3.4.1",
+ "@storybook/core": "3.4.1",
+ "@storybook/node-logger": "3.4.1",
+ "@storybook/ui": "3.4.1",
+ "airbnb-js-shims": "1.4.1",
+ "babel-loader": "7.1.4",
+ "babel-plugin-macros": "2.2.0",
+ "babel-plugin-react-docgen": "1.9.0",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "babel-plugin-transform-runtime": "6.23.0",
+ "babel-preset-env": "1.6.1",
+ "babel-preset-minify": "0.3.0",
+ "babel-preset-react": "6.24.1",
+ "babel-preset-stage-0": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "case-sensitive-paths-webpack-plugin": "2.1.2",
+ "common-tags": "1.7.2",
+ "core-js": "2.5.5",
+ "dotenv-webpack": "1.5.5",
+ "find-cache-dir": "1.0.0",
+ "glamor": "2.20.40",
+ "glamorous": "4.12.2",
+ "global": "4.3.2",
+ "html-loader": "0.5.5",
+ "html-webpack-plugin": "2.30.1",
+ "json5": "0.5.1",
+ "lodash.flattendeep": "4.4.0",
+ "markdown-loader": "2.0.2",
+ "prop-types": "15.6.1",
+ "react-dev-utils": "5.0.1",
+ "redux": "3.7.2",
+ "uglifyjs-webpack-plugin": "1.2.4",
+ "util-deprecate": "1.0.2",
+ "webpack": "3.11.0",
+ "webpack-hot-middleware": "2.22.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs="
+ }
+ }
+ },
+ "@storybook/react-komposer": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@storybook/react-komposer/-/react-komposer-2.0.4.tgz",
+ "integrity": "sha1-wsDUp12bSpwMa0bxSrBQ9FitS7A=",
+ "requires": {
+ "@storybook/react-stubber": "1.0.1",
+ "babel-runtime": "6.26.0",
+ "hoist-non-react-statics": "1.2.0",
+ "lodash.pick": "4.4.0",
+ "shallowequal": "0.2.2"
+ }
+ },
+ "@storybook/react-simple-di": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@storybook/react-simple-di/-/react-simple-di-1.3.0.tgz",
+ "integrity": "sha512-RH6gPQaYMs/VzQX2dgbZU8DQMKFXVOv1ruohHjjNPys4q+YdqMFMDe5jOP1AUE3j9g01x0eW7bVjRawSpl++Ew==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "create-react-class": "15.6.3",
+ "hoist-non-react-statics": "1.2.0",
+ "prop-types": "15.6.1"
+ }
+ },
+ "@storybook/react-stubber": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@storybook/react-stubber/-/react-stubber-1.0.1.tgz",
+ "integrity": "sha512-k+CHH+vA8bQfCmzBTtJsPkITFgD+C/w19KuByZ9WeEvNUFtnDaCqfP+Vp3/OR+3IAfAXYYOWolqPLxNPcEqEjw==",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "@storybook/ui": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-3.4.1.tgz",
+ "integrity": "sha512-OX/mnl3jQwZwt1wltFcmO+8yPJlZgeQ4sksKy/jmMqfnk4GFP+UVmg2KIDYhh6Xl2/H1xi14iAdH9Z36losrpw==",
+ "requires": {
+ "@storybook/components": "3.4.1",
+ "@storybook/mantra-core": "1.7.2",
+ "@storybook/podda": "1.2.3",
+ "@storybook/react-komposer": "2.0.4",
+ "babel-runtime": "6.26.0",
+ "deep-equal": "1.0.1",
+ "events": "2.0.0",
+ "fuse.js": "3.2.0",
+ "global": "4.3.2",
+ "keycode": "2.2.0",
+ "lodash.debounce": "4.0.8",
+ "lodash.pick": "4.4.0",
+ "lodash.sortby": "4.7.0",
+ "lodash.throttle": "4.1.1",
+ "prop-types": "15.6.1",
+ "qs": "6.5.1",
+ "react-fuzzy": "0.5.2",
+ "react-icons": "2.2.7",
+ "react-modal": "3.3.2",
+ "react-split-pane": "0.1.77",
+ "react-treebeard": "2.1.0"
+ },
+ "dependencies": {
+ "events": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz",
+ "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg=="
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
+ }
+ }
+ },
+ "@types/blob-util": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@types/blob-util/-/blob-util-1.3.3.tgz",
+ "integrity": "sha512-4ahcL/QDnpjWA2Qs16ZMQif7HjGP2cw3AGjHabybjw7Vm1EKu+cfQN1D78BaZbS1WJNa1opSMF5HNMztx7lR0w==",
+ "dev": true
+ },
+ "@types/bluebird": {
+ "version": "3.5.18",
+ "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.18.tgz",
+ "integrity": "sha512-OTPWHmsyW18BhrnG5x8F7PzeZ2nFxmHGb42bZn79P9hl+GI5cMzyPgQTwNjbem0lJhoru/8vtjAFCUOu3+gE2w==",
+ "dev": true
+ },
+ "@types/chai": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.3.tgz",
+ "integrity": "sha512-f5dXGzOJycyzSMdaXVhiBhauL4dYydXwVpavfQ1mVCaGjR56a9QfklXObUxlIY9bGTmCPHEEZ04I16BZ/8w5ww==",
+ "dev": true
+ },
+ "@types/chai-jquery": {
+ "version": "1.1.35",
+ "resolved": "https://registry.npmjs.org/@types/chai-jquery/-/chai-jquery-1.1.35.tgz",
+ "integrity": "sha512-7aIt9QMRdxuagLLI48dPz96YJdhu64p6FCa6n4qkGN5DQLHnrIjZpD9bXCvV2G0NwgZ1FAmfP214dxc5zNCfgQ==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.3",
+ "@types/jquery": "3.2.16"
+ }
+ },
+ "@types/cypress": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@types/cypress/-/cypress-1.1.3.tgz",
+ "integrity": "sha512-OXe0Gw8LeCflkG1oPgFpyrYWJmEKqYncBsD/J0r17r0ETx/TnIGDNLwXt/pFYSYuYTpzcq1q3g62M9DrfsBL4g==",
+ "dev": true,
+ "requires": {
+ "cypress": "2.1.0"
+ }
+ },
+ "@types/jasmine": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.3.tgz",
+ "integrity": "sha512-BN0ho2/U55Td9k8RT2KqonDNmWZHTl1crIk8GIh+xNeCw8A60GMCIKN5a6u/Voz3pF3zzl3Ui+ldGrGxCSsYQw==",
+ "dev": true
+ },
+ "@types/jasminewd2": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.2.tgz",
+ "integrity": "sha1-X2jh5pe/ELxv2Mvy4Aaj1nEsW2Q=",
+ "dev": true,
+ "requires": {
+ "@types/jasmine": "2.8.3"
+ }
+ },
+ "@types/jquery": {
+ "version": "3.2.16",
+ "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.2.16.tgz",
+ "integrity": "sha512-q2WC02YxQoX2nY1HRKlYGHpGP1saPmD7GN0pwCDlTz35a4eOtJG+aHRlXyjCuXokUukSrR2aXyBhSW3j+jPc0A==",
+ "dev": true
+ },
+ "@types/lodash": {
+ "version": "4.14.91",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.91.tgz",
+ "integrity": "sha512-k+nc3moSlAaXacyvz4/c6D9lnUeI6AKsLvkXFuNzUEEqMw7sjDnLW2GqlJ4nyFgMX/p+QzvVG6zRoDo4lJIV5g=="
+ },
+ "@types/minimatch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.1.tgz",
+ "integrity": "sha512-rUO/jz10KRSyA9SHoCWQ8WX9BICyj5jZYu1/ucKEJKb4KzLZCKMURdYbadP157Q6Zl1x0vHsrU+Z/O0XlhYQDw==",
+ "dev": true
+ },
+ "@types/mocha": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.0.tgz",
+ "integrity": "sha512-YeDiSEzznwZwwp766SJ6QlrTyBYUGPSIwmREHVTmktUYiT/WADdWtpt9iH0KuUSf8lZLdI4lP0X6PBzPo5//JQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.60.tgz",
+ "integrity": "sha1-5+E068Z0rm7ZPDbHZ3ObEQ0sV/w=",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "0.0.32",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz",
+ "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=",
+ "dev": true
+ },
+ "@types/selenium-webdriver": {
+ "version": "2.53.43",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz",
+ "integrity": "sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==",
+ "dev": true
+ },
+ "@types/sinon": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.0.0.tgz",
+ "integrity": "sha512-cuK4xM8Lg2wd8cxshcQa8RG4IK/xfyB6TNE6tNVvkrShR4xdrYgsV04q6Dp6v1Lp6biEFdzD8k8zg/ujQeiw+A==",
+ "dev": true
+ },
+ "@types/sinon-chai": {
+ "version": "2.7.29",
+ "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-2.7.29.tgz",
+ "integrity": "sha512-EkI/ZvJT4hglWo7Ipf9SX+J+R9htNOMjW8xiOhce7+0csqvgoF5IXqY5Ae1GqRgNtWCuaywR5HjVa1snkTqpOw==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.3",
+ "@types/sinon": "4.0.0"
+ }
+ },
+ "@types/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=",
+ "dev": true
+ },
+ "@types/strip-json-comments": {
+ "version": "0.0.30",
+ "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz",
+ "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "requires": {
+ "mime-types": "2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
+ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ=="
+ },
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "requires": {
+ "acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
+ }
+ }
+ },
+ "address": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz",
+ "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg=="
+ },
+ "addressparser": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz",
+ "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=",
+ "dev": true,
+ "optional": true
+ },
+ "adm-zip": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz",
+ "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=",
+ "dev": true
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
+ "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "semver": "5.0.3"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
+ "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
+ "dev": true
+ }
+ }
+ },
+ "airbnb-js-shims": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-1.4.1.tgz",
+ "integrity": "sha512-b7S3d+DPRMwaDAs0cgKQTMLO/JG/iSehIlzEGvt2FpxIztRDDABEjWI73AfTxkSiK3/OsraPRYxVNAX3yhSNLw==",
+ "requires": {
+ "array-includes": "3.0.3",
+ "array.prototype.flatmap": "1.2.1",
+ "array.prototype.flatten": "1.2.1",
+ "es5-shim": "4.5.10",
+ "es6-shim": "0.35.3",
+ "function.prototype.name": "1.1.0",
+ "object.entries": "1.0.4",
+ "object.getownpropertydescriptors": "2.0.3",
+ "object.values": "1.0.4",
+ "promise.prototype.finally": "3.1.0",
+ "string.prototype.padend": "3.0.0",
+ "string.prototype.padstart": "3.0.0"
+ }
+ },
+ "ajv": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz",
+ "integrity": "sha1-FlCkERTvAFdMrBC4Ay2PTBSBLac=",
+ "requires": {
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz",
+ "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74="
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
+ },
+ "am-i-a-dependency": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/am-i-a-dependency/-/am-i-a-dependency-1.1.2.tgz",
+ "integrity": "sha1-+dNCIwTW9kL4IeTEB1ZQNfYWfx8=",
+ "dev": true
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+ },
+ "amqplib": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.2.tgz",
+ "integrity": "sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "bitsyntax": "0.0.4",
+ "bluebird": "3.5.1",
+ "buffer-more-ints": "0.0.2",
+ "readable-stream": "1.1.14",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true,
+ "optional": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "angular-svg-icon": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/angular-svg-icon/-/angular-svg-icon-5.0.0.tgz",
+ "integrity": "sha512-wIRpoQ3PwytxA4MRe9cgmdytXrHgTGUuTdmIFtAQvCcftUSWWkzkVaXF1QSlFip6ipHf/YacdJHFYXpnW2lWPQ=="
+ },
+ "angular-tree-component": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/angular-tree-component/-/angular-tree-component-7.0.1.tgz",
+ "integrity": "sha1-/I0OctjDS4cTGjuivTKtIJRWiaw=",
+ "requires": {
+ "lodash": "4.17.4",
+ "mobx": "4.1.0",
+ "mobx-angular": "3.0.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ }
+ }
+ },
+ "angular2-datatable": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/angular2-datatable/-/angular2-datatable-0.6.0.tgz",
+ "integrity": "sha1-ygCPdAh/DLh9pXCe0vLR0GF3JjI=",
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ },
+ "angular2-multiselect-dropdown": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/angular2-multiselect-dropdown/-/angular2-multiselect-dropdown-2.5.0.tgz",
+ "integrity": "sha1-6halE/Z0LN5V312fqumSzThU7dM=",
+ "requires": {
+ "font-awesome": "4.7.0"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw=="
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
+ },
+ "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": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "dev": true,
+ "requires": {
+ "micromatch": "2.3.11",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "app-root-path": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz",
+ "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=",
+ "dev": true
+ },
+ "append-transform": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+ "dev": true,
+ "requires": {
+ "default-require-extensions": "1.0.0"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-filter": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw="
+ },
+ "array-find": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz",
+ "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg="
+ },
+ "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.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
+ "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0"
+ }
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI="
+ },
+ "array-reduce": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys="
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
+ "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.3"
+ }
+ },
+ "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.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "array.prototype.flatmap": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.1.tgz",
+ "integrity": "sha512-i18e2APdsiezkcqDyZor78Pbfjfds3S94dG6dgIV2ZASJaUf1N0dz2tGdrmwrmlZuNUgxH+wz6Z0zYVH2c5xzQ==",
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0",
+ "function-bind": "1.1.1"
+ }
+ },
+ "array.prototype.flatten": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatten/-/array.prototype.flatten-1.2.1.tgz",
+ "integrity": "sha512-3GhsA78XgK//wQKbhUe6L93kknekGlTRY0kvYcpuSi0aa9rVrMr/okeIIv/XSpN8fZ5iUM+bWifhf2/7CYKtIg==",
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0",
+ "function-bind": "1.1.1"
+ }
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "dev": true
+ },
+ "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.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "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="
+ },
+ "ast-types": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz",
+ "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==",
+ "dev": true,
+ "optional": true
+ },
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+ },
+ "async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true,
+ "optional": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "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.0.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
+ "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10="
+ },
+ "autoprefixer": {
+ "version": "7.2.6",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
+ "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
+ "requires": {
+ "browserslist": "2.11.3",
+ "caniuse-lite": "1.0.30000815",
+ "normalize-range": "0.1.2",
+ "num2fraction": "1.2.2",
+ "postcss": "6.0.20",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.15.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz",
+ "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "follow-redirects": "1.0.0"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.1",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.5",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-helper-bindify-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz",
+ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "requires": {
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-builder-react-jsx": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "esutils": "2.0.2"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-helper-evaluate-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.3.0.tgz",
+ "integrity": "sha512-dRFlMTqUJRGzx5a2smKxmptDdNCXKSkPcXWzKLwAV72hvIZumrd/0z9RcewHkr7PmAEq+ETtpD1GK6wZ6ZUXzw=="
+ },
+ "babel-helper-explode-assignable-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
+ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-explode-class": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
+ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
+ "requires": {
+ "babel-helper-bindify-decorators": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-flip-expressions": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.3.0.tgz",
+ "integrity": "sha512-kNGohWmtAG3b7tN1xocRQ5rsKkH/hpvZsMiGOJ1VwGJKhnwzR5KlB3rvKBaBPl5/IGHcopB2JN+r1SUEX1iMAw=="
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-is-nodes-equiv": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz",
+ "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ="
+ },
+ "babel-helper-is-void-0": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.3.0.tgz",
+ "integrity": "sha512-JVqdX8y7Rf/x4NwbqtUI7mdQjL9HWoDnoAEQ8Gv8oxzjvbJv+n75f7l36m9Y8C7sCUltX3V5edndrp7Hp1oSXQ=="
+ },
+ "babel-helper-mark-eval-scopes": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.3.0.tgz",
+ "integrity": "sha512-nrho5Dg4vl0VUgURVpGpEGiwbst5JX7efIyDHFxmkCx/ocQFnrPt8ze9Kxl6TKjR29bJ7D/XKY1NMlSxOQJRbQ=="
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-remove-or-void": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.3.0.tgz",
+ "integrity": "sha512-D68W1M3ibCcbg0ysh3ww4/O0g10X1CXK720oOuR8kpfY7w0yP4tVcpK7zDmI1JecynycTQYAZ1rhLJo9aVtIKQ=="
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-to-multiple-sequence-expressions": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.3.0.tgz",
+ "integrity": "sha512-1uCrBD+EAaMnAYh7hc944n8Ga19y3daEnoXWPYDvFVsxMCc1l8aDjksApaCEaNSSuewq8BEcff47Cy1PbLg2Gw=="
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-loader": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz",
+ "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==",
+ "requires": {
+ "find-cache-dir": "1.0.0",
+ "loader-utils": "1.1.0",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-macros": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.2.0.tgz",
+ "integrity": "sha512-HGdenPU9+WGhg++P65O+6aIdmXx99p58K7VtAtizC3eUHbO4FXfyfK9SCJubylcyKziEB3nMAUDFHeyDUj38eA==",
+ "requires": {
+ "cosmiconfig": "4.0.0"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
+ "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
+ "requires": {
+ "is-directory": "0.3.1",
+ "js-yaml": "3.11.0",
+ "parse-json": "4.0.0",
+ "require-from-string": "2.0.2"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "requires": {
+ "error-ex": "1.3.1",
+ "json-parse-better-errors": "1.0.2"
+ }
+ },
+ "require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
+ }
+ }
+ },
+ "babel-plugin-minify-builtins": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.3.0.tgz",
+ "integrity": "sha512-MqhSHlxkmgURqj3144qPksbZ/qof1JWdumcbucc4tysFcf3P3V3z3munTevQgKEFNMd8F5/ECGnwb63xogLjAg==",
+ "requires": {
+ "babel-helper-evaluate-path": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-constant-folding": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.3.0.tgz",
+ "integrity": "sha512-1XeRpx+aY1BuNY6QU/cm6P+FtEi3ar3XceYbmC+4q4W+2Ewq5pL7V68oHg1hKXkBIE0Z4/FjSoHz6vosZLOe/A==",
+ "requires": {
+ "babel-helper-evaluate-path": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-dead-code-elimination": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.3.0.tgz",
+ "integrity": "sha512-SjM2Fzg85YZz+q/PNJ/HU4O3W98FKFOiP9K5z3sfonlamGOzvZw3Eup2OTiEBsbbqTeY8yzNCAv3qpJRYCgGmw==",
+ "requires": {
+ "babel-helper-evaluate-path": "0.3.0",
+ "babel-helper-mark-eval-scopes": "0.3.0",
+ "babel-helper-remove-or-void": "0.3.0",
+ "lodash.some": "4.6.0"
+ }
+ },
+ "babel-plugin-minify-flip-comparisons": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.3.0.tgz",
+ "integrity": "sha512-B8lK+ekcpSNVH7PZpWDe5nC5zxjRiiT4nTsa6h3QkF3Kk6y9qooIFLemdGlqBq6j0zALEnebvCpw8v7gAdpgnw==",
+ "requires": {
+ "babel-helper-is-void-0": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-guarded-expressions": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.3.0.tgz",
+ "integrity": "sha512-O+6CvF5/Ttsth3LMg4/BhyvVZ82GImeKMXGdVRQGK/8jFiP15EjRpdgFlxv3cnqRjqdYxLCS6r28VfLpb9C/kA==",
+ "requires": {
+ "babel-helper-flip-expressions": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-infinity": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.3.0.tgz",
+ "integrity": "sha512-Sj8ia3/w9158DWieUxU6/VvnYVy59geeFEkVgLZYBE8EBP+sN48tHtBM/jSgz0ejEdBlcfqJ6TnvPmVXTzR2BQ=="
+ },
+ "babel-plugin-minify-mangle-names": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.3.0.tgz",
+ "integrity": "sha512-PYTonhFWURsfAN8achDwvR5Xgy6EeTClLz+fSgGRqjAIXb0OyFm3/xfccbQviVi1qDXmlSnt6oJhBg8KE4Fn7Q==",
+ "requires": {
+ "babel-helper-mark-eval-scopes": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-numeric-literals": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.3.0.tgz",
+ "integrity": "sha512-TgZj6ay8zDw74AS3yiIfoQ8vRSNJisYO/Du60S8nPV7EW7JM6fDMx5Sar6yVHlVuuwNgvDUBh191K33bVrAhpg=="
+ },
+ "babel-plugin-minify-replace": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.3.0.tgz",
+ "integrity": "sha512-VR6tTg2Lt0TicHIOw04fsUtpPw7RaRP8PC8YzSFwEixnzvguZjZJoL7TgG7ZyEWQD1cJ96UezswECmFNa815bg=="
+ },
+ "babel-plugin-minify-simplify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.3.0.tgz",
+ "integrity": "sha512-2M16ytQOCqBi7bYMu4DCWn8e6KyFCA108F6+tVrBJxOmm5u2sOmTFEa8s94tR9RHRRNYmcUf+rgidfnzL3ik9Q==",
+ "requires": {
+ "babel-helper-flip-expressions": "0.3.0",
+ "babel-helper-is-nodes-equiv": "0.0.1",
+ "babel-helper-to-multiple-sequence-expressions": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-type-constructors": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.3.0.tgz",
+ "integrity": "sha512-XRXpvsUCPeVw9YEUw+9vSiugcSZfow81oIJT0yR9s8H4W7yJ6FHbImi5DJHoL8KcDUjYnL9wYASXk/fOkbyR6Q==",
+ "requires": {
+ "babel-helper-is-void-0": "0.3.0"
+ }
+ },
+ "babel-plugin-react-docgen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-1.9.0.tgz",
+ "integrity": "sha512-8lQ73p4BL+xcgba03NTiHrddl2X8J6PDMQHPpz73sesrRBf6JtAscQPLIjFWQR/abLokdv81HdshpjYGppOXgA==",
+ "requires": {
+ "babel-types": "6.26.0",
+ "lodash": "4.17.5",
+ "react-docgen": "3.0.0-beta9"
+ }
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU="
+ },
+ "babel-plugin-syntax-async-generators": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
+ "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o="
+ },
+ "babel-plugin-syntax-class-constructor-call": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz",
+ "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY="
+ },
+ "babel-plugin-syntax-class-properties": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
+ "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94="
+ },
+ "babel-plugin-syntax-decorators": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+ "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs="
+ },
+ "babel-plugin-syntax-do-expressions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz",
+ "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0="
+ },
+ "babel-plugin-syntax-dynamic-import": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+ "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo="
+ },
+ "babel-plugin-syntax-exponentiation-operator": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+ "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4="
+ },
+ "babel-plugin-syntax-export-extensions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz",
+ "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE="
+ },
+ "babel-plugin-syntax-flow": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0="
+ },
+ "babel-plugin-syntax-function-bind": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz",
+ "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y="
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM="
+ },
+ "babel-plugin-transform-async-generator-functions": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
+ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-generators": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-class-constructor-call": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz",
+ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=",
+ "requires": {
+ "babel-plugin-syntax-class-constructor-call": "6.18.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-class-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
+ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-plugin-syntax-class-properties": "6.13.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
+ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
+ "requires": {
+ "babel-helper-explode-class": "6.24.1",
+ "babel-plugin-syntax-decorators": "6.13.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-do-expressions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz",
+ "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=",
+ "requires": {
+ "babel-plugin-syntax-do-expressions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ },
+ "dependencies": {
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ }
+ }
+ },
+ "babel-plugin-transform-exponentiation-operator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
+ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-export-extensions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz",
+ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=",
+ "requires": {
+ "babel-plugin-syntax-export-extensions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-flow-strip-types": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+ "requires": {
+ "babel-plugin-syntax-flow": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-function-bind": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz",
+ "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=",
+ "requires": {
+ "babel-plugin-syntax-function-bind": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-inline-consecutive-adds": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.3.0.tgz",
+ "integrity": "sha512-iZsYAIjYLLfLK0yN5WVT7Xf7Y3wQ9Z75j9A8q/0IglQSpUt2ppTdHlwl/GeaXnxdaSmsxBu861klbTBbv2n+RA=="
+ },
+ "babel-plugin-transform-member-expression-literals": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.1.tgz",
+ "integrity": "sha1-lr4umWjn9UlzM64DKE7NU0BAVIk="
+ },
+ "babel-plugin-transform-merge-sibling-variables": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.1.tgz",
+ "integrity": "sha1-kHHkQ7IUWM5rCo04QbpaF09dwoI="
+ },
+ "babel-plugin-transform-minify-booleans": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.1.tgz",
+ "integrity": "sha1-UsunnAD6UJc3BkBV76siFm4UDE0="
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-property-literals": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.1.tgz",
+ "integrity": "sha1-aXD5Oxd5OrzenPJdLozRPgCI5ck=",
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "babel-plugin-transform-react-display-name": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "requires": {
+ "babel-helper-builder-react-jsx": "6.26.0",
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-self": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-source": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-regexp-constructors": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.3.0.tgz",
+ "integrity": "sha512-h92YHzyl042rb0naKO8frTHntpRFwRgKkfWD8602kFHoQingjJNtbvZzvxqHncJ6XmKVyYvfrBpDOSkCTDIIxw=="
+ },
+ "babel-plugin-transform-remove-console": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.1.tgz",
+ "integrity": "sha1-QP6V2YyuWBHYoOGImBLXixKFllE="
+ },
+ "babel-plugin-transform-remove-debugger": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.1.tgz",
+ "integrity": "sha1-dlUtLp1sQ9nGdrv8CPPCoswUvhQ="
+ },
+ "babel-plugin-transform-remove-undefined": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.3.0.tgz",
+ "integrity": "sha512-TYGQucc8iP3LJwN3kDZLEz5aa/2KuFrqpT+s8f8NnHsBU1sAgR3y8Opns0xhC+smyDYWscqFCKM1gbkWQOhhnw==",
+ "requires": {
+ "babel-helper-evaluate-path": "0.3.0"
+ }
+ },
+ "babel-plugin-transform-runtime": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
+ "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-simplify-comparison-operators": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.1.tgz",
+ "integrity": "sha1-Ww0GmAoXp4D1MYsnTAC+L7HHxP4="
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-undefined-to-void": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.1.tgz",
+ "integrity": "sha1-19+cHdDsEuD/6JXtFEX2Hxv14iE="
+ },
+ "babel-preset-env": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
+ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.11.3",
+ "invariant": "2.2.4",
+ "semver": "5.5.0"
+ }
+ },
+ "babel-preset-flow": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
+ "requires": {
+ "babel-plugin-transform-flow-strip-types": "6.22.0"
+ }
+ },
+ "babel-preset-minify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.3.0.tgz",
+ "integrity": "sha512-+VV2GWEyak3eDOmzT1DDMuqHrw3VbE9nBNkx2LLVs4pH/Me32ND8DRpVDd8IRvk1xX5p75nygyRPtkMh6GIAbQ==",
+ "requires": {
+ "babel-plugin-minify-builtins": "0.3.0",
+ "babel-plugin-minify-constant-folding": "0.3.0",
+ "babel-plugin-minify-dead-code-elimination": "0.3.0",
+ "babel-plugin-minify-flip-comparisons": "0.3.0",
+ "babel-plugin-minify-guarded-expressions": "0.3.0",
+ "babel-plugin-minify-infinity": "0.3.0",
+ "babel-plugin-minify-mangle-names": "0.3.0",
+ "babel-plugin-minify-numeric-literals": "0.3.0",
+ "babel-plugin-minify-replace": "0.3.0",
+ "babel-plugin-minify-simplify": "0.3.0",
+ "babel-plugin-minify-type-constructors": "0.3.0",
+ "babel-plugin-transform-inline-consecutive-adds": "0.3.0",
+ "babel-plugin-transform-member-expression-literals": "6.9.1",
+ "babel-plugin-transform-merge-sibling-variables": "6.9.1",
+ "babel-plugin-transform-minify-booleans": "6.9.1",
+ "babel-plugin-transform-property-literals": "6.9.1",
+ "babel-plugin-transform-regexp-constructors": "0.3.0",
+ "babel-plugin-transform-remove-console": "6.9.1",
+ "babel-plugin-transform-remove-debugger": "6.9.1",
+ "babel-plugin-transform-remove-undefined": "0.3.0",
+ "babel-plugin-transform-simplify-comparison-operators": "6.9.1",
+ "babel-plugin-transform-undefined-to-void": "6.9.1",
+ "lodash.isplainobject": "4.0.6"
+ }
+ },
+ "babel-preset-react": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-plugin-transform-react-display-name": "6.25.0",
+ "babel-plugin-transform-react-jsx": "6.24.1",
+ "babel-plugin-transform-react-jsx-self": "6.22.0",
+ "babel-plugin-transform-react-jsx-source": "6.22.0",
+ "babel-preset-flow": "6.23.0"
+ }
+ },
+ "babel-preset-stage-0": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz",
+ "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=",
+ "requires": {
+ "babel-plugin-transform-do-expressions": "6.22.0",
+ "babel-plugin-transform-function-bind": "6.22.0",
+ "babel-preset-stage-1": "6.24.1"
+ }
+ },
+ "babel-preset-stage-1": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz",
+ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=",
+ "requires": {
+ "babel-plugin-transform-class-constructor-call": "6.24.1",
+ "babel-plugin-transform-export-extensions": "6.22.0",
+ "babel-preset-stage-2": "6.24.1"
+ }
+ },
+ "babel-preset-stage-2": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
+ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "6.18.0",
+ "babel-plugin-transform-class-properties": "6.24.1",
+ "babel-plugin-transform-decorators": "6.24.1",
+ "babel-preset-stage-3": "6.24.1"
+ }
+ },
+ "babel-preset-stage-3": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
+ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
+ "requires": {
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-generator-functions": "6.24.1",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-object-rest-spread": "6.26.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.6",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.5",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz",
+ "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==",
+ "dev": true
+ }
+ }
+ },
+ "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.1",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "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": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "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=",
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz",
+ "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w=="
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+ "dev": true
+ },
+ "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.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "beeper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "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=="
+ },
+ "binary-extensions": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU="
+ },
+ "bitsyntax": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz",
+ "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "buffer-more-ints": "0.0.2"
+ }
+ },
+ "bl": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz",
+ "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "readable-stream": "2.0.6"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true,
+ "optional": true
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+ "dev": true
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "blocking-proxy": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz",
+ "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ },
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.16"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
+ }
+ }
+ },
+ "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.1",
+ "deep-equal": "1.0.1",
+ "dns-equal": "1.0.0",
+ "dns-txt": "2.0.2",
+ "multicast-dns": "6.2.3",
+ "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="
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "bootstrap": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz",
+ "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E="
+ },
+ "bowser": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.3.tgz",
+ "integrity": "sha512-/gp96UlcFw5DbV2KQPCqTqi0Mb9gZRyDAHiDsGEH+4B/KOQjeoE5lM1PxlVX8DQDvfEfitmC1rW2Oy8fk/XBDg=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "brcast": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.1.tgz",
+ "integrity": "sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg=="
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browserify-aes": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
+ "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "requires": {
+ "browserify-aes": "1.1.1",
+ "browserify-des": "1.0.0",
+ "evp_bytestokey": "1.0.3"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "randombytes": "2.0.6"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "elliptic": "6.4.0",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.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==",
+ "requires": {
+ "pako": "1.0.6"
+ }
+ },
+ "browserslist": {
+ "version": "2.11.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
+ "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
+ "requires": {
+ "caniuse-lite": "1.0.30000815",
+ "electron-to-chromium": "1.3.39"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "requires": {
+ "base64-js": "1.2.3",
+ "ieee754": "1.1.10",
+ "isarray": "1.0.0"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "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-more-ints": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz",
+ "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "buildmail": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz",
+ "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "addressparser": "1.0.1",
+ "libbase64": "0.1.0",
+ "libmime": "3.0.0",
+ "libqp": "1.1.0",
+ "nodemailer-fetch": "1.6.0",
+ "nodemailer-shared": "1.1.0",
+ "punycode": "1.4.1"
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "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="
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "cacache": {
+ "version": "10.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
+ "requires": {
+ "bluebird": "3.5.1",
+ "chownr": "1.0.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lru-cache": "4.1.2",
+ "mississippi": "2.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.2",
+ "ssri": "5.3.0",
+ "unique-filename": "1.1.0",
+ "y18n": "4.0.0"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "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"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "cache-loader": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-1.2.2.tgz",
+ "integrity": "sha512-rsGh4SIYyB9glU+d0OcHwiXHXBoUgDhHZaQ1KAbiXqfz1CDPxtTboh1gPbJ0q2qdO8a9lfcjgC5CJ2Ms32y5bw==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "mkdirp": "0.5.1",
+ "neo-async": "2.5.0",
+ "schema-utils": "0.4.5"
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "requires": {
+ "no-case": "2.3.2",
+ "upper-case": "1.1.3"
+ }
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "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.1.1",
+ "map-obj": "1.0.1"
+ }
+ },
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000827",
+ "lodash.memoize": "4.1.2",
+ "lodash.uniq": "4.5.0"
+ },
+ "dependencies": {
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "1.0.30000827",
+ "electron-to-chromium": "1.3.39"
+ }
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
+ }
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30000827",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000827.tgz",
+ "integrity": "sha1-vSg53Rlgk7RMKMF/k1ExQMnZJYg="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000815",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000815.tgz",
+ "integrity": "sha512-PGSOPK6gFe5fWd+eD0u2bG0aOsN1qC4B1E66tl3jOsIoKkTIcBYAc2+O6AeNzKW8RsFykWgnhkTlfOyuTzgI9A=="
+ },
+ "case-sensitive-paths-webpack-plugin": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz",
+ "integrity": "sha512-oEZgAFfEvKtjSRCu6VgYkuGxwrWXMnQzyBmlLPP7r6PWQVtHxP5Z5N6XsuJvtoVax78am/r7lr46bwo3IVEBOg=="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chain-function": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chain-function/-/chain-function-1.0.0.tgz",
+ "integrity": "sha1-DUqzfn4Y6tC9xHuSB2QRjOWHM9w="
+ },
+ "chalk": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.2.tgz",
+ "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==",
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
+ },
+ "check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "1.3.2",
+ "async-each": "1.0.1",
+ "fsevents": "1.1.3",
+ "glob-parent": "2.0.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "2.0.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE="
+ },
+ "ci-info": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz",
+ "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==",
+ "dev": true
+ },
+ "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==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "circular-dependency-plugin": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz",
+ "integrity": "sha512-yEFtUNUYT4jBykEX5ZOHw+5goA3glGZr9wAXIQqoyakjz5H5TeUmScnWRc52douAhb9eYzK3s7V6bXfNnjFdzg==",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.1.tgz",
+ "integrity": "sha512-UjgcRlTAhAkLeXmDe2wK7ktwy/tgAqxiSndTIPiFZuIPLZmzHzWMwUIe9h9m/OokypG7snxCDEuwJshGBdPvaw==",
+ "dev": true
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "requires": {
+ "chalk": "1.1.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "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=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "classnames": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz",
+ "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0="
+ },
+ "clean-css": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz",
+ "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=",
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "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-spinners": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
+ "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
+ "dev": true
+ },
+ "cli-truncate": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
+ "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "0.0.4",
+ "string-width": "1.0.2"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
+ },
+ "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.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "clone-deep": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
+ "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
+ "dev": true,
+ "requires": {
+ "for-own": "1.0.0",
+ "is-plain-object": "2.0.4",
+ "kind-of": "6.0.2",
+ "shallow-clone": "1.0.0"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "requires": {
+ "q": "1.4.1"
+ }
+ },
+ "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="
+ },
+ "codelyzer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.0.1.tgz",
+ "integrity": "sha512-MsOcaiLqcBK7hjHbfp9HZrflqWg5tD9A5qVSXkW208OJ8pkf63id8IiOjEiK/XU3o70W8tWbFKi1tAOwiJDMrQ==",
+ "dev": true,
+ "requires": {
+ "app-root-path": "2.0.1",
+ "css-selector-tokenizer": "0.7.0",
+ "cssauron": "1.4.0",
+ "semver-dsl": "1.0.1",
+ "source-map": "0.5.7",
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "requires": {
+ "clone": "1.0.4",
+ "color-convert": "1.9.1",
+ "color-string": "0.3.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
+ }
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "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="
+ },
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "requires": {
+ "color": "0.11.4",
+ "css-color-names": "0.0.4",
+ "has": "1.0.1"
+ }
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
+ },
+ "combine-lists": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
+ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz",
+ "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg=="
+ },
+ "common-tags": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.7.2.tgz",
+ "integrity": "sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "compare-versions": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz",
+ "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==",
+ "dev": true
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "compressible": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz",
+ "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.33.0"
+ }
+ },
+ "compression": {
+ "version": "1.7.2",
+ "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz",
+ "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "2.0.13",
+ "debug": "2.6.9",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.2"
+ }
+ },
+ "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.1",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5",
+ "typedarray": "0.0.6"
+ }
+ },
+ "connect": {
+ "version": "3.6.6",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+ "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.0",
+ "parseurl": "1.3.2",
+ "utils-merge": "1.0.1"
+ },
+ "dependencies": {
+ "finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
+ "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
+ "dev": true
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "requires": {
+ "date-now": "0.1.4"
+ }
+ },
+ "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="
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "requires": {
+ "aproba": "1.2.0",
+ "fs-write-stream-atomic": "1.0.10",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2",
+ "run-queue": "1.0.3"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "copy-webpack-plugin": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.4.3.tgz",
+ "integrity": "sha512-v4THQ24Tks2NkyOvZuFDgZVfDD9YaA9rwYLZTrWg2GHIA8lrH5DboEyeoorh5Skki+PUbgSmnsCwhMWqYrQZrA==",
+ "dev": true,
+ "requires": {
+ "cacache": "10.0.4",
+ "find-cache-dir": "1.0.0",
+ "globby": "7.1.1",
+ "is-glob": "4.0.0",
+ "loader-utils": "1.1.0",
+ "minimatch": "3.0.4",
+ "p-limit": "1.2.0",
+ "serialize-javascript": "1.4.0"
+ },
+ "dependencies": {
+ "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-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "core-js": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz",
+ "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4="
+ },
+ "core-object": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz",
+ "integrity": "sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.2.2"
+ }
+ },
+ "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": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "requires": {
+ "is-directory": "0.3.1",
+ "js-yaml": "3.11.0",
+ "minimist": "1.2.0",
+ "object-assign": "4.1.1",
+ "os-homedir": "1.0.2",
+ "parse-json": "2.2.0",
+ "require-from-string": "1.2.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "elliptic": "6.4.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
+ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.10"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
+ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.10"
+ }
+ },
+ "create-react-class": {
+ "version": "15.6.3",
+ "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
+ "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lru-cache": "4.1.2",
+ "which": "1.3.0"
+ }
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "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==",
+ "requires": {
+ "browserify-cipher": "1.0.0",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.0",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "diffie-hellman": "5.0.2",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.14",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.6",
+ "randomfill": "1.0.4"
+ }
+ },
+ "css": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz",
+ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=",
+ "requires": {
+ "inherits": "2.0.3",
+ "source-map": "0.1.43",
+ "source-map-resolve": "0.3.1",
+ "urix": "0.1.0"
+ },
+ "dependencies": {
+ "atob": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz",
+ "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M="
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "source-map-resolve": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
+ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
+ "requires": {
+ "atob": "1.1.3",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.3.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz",
+ "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk="
+ }
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
+ },
+ "css-in-js-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz",
+ "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==",
+ "requires": {
+ "hyphenate-style-name": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "css-loader": {
+ "version": "0.28.11",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz",
+ "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "css-selector-tokenizer": "0.7.0",
+ "cssnano": "3.10.0",
+ "icss-utils": "2.1.0",
+ "loader-utils": "1.1.0",
+ "lodash.camelcase": "4.3.0",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-modules-extract-imports": "1.2.0",
+ "postcss-modules-local-by-default": "1.2.0",
+ "postcss-modules-scope": "1.1.0",
+ "postcss-modules-values": "1.3.0",
+ "postcss-value-parser": "3.3.0",
+ "source-list-map": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "css-parse": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+ "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
+ "dev": true
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.1"
+ }
+ },
+ "css-selector-tokenizer": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
+ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
+ "requires": {
+ "cssesc": "0.1.0",
+ "fastparse": "1.1.1",
+ "regexpu-core": "1.0.0"
+ }
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0="
+ },
+ "cssauron": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz",
+ "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=",
+ "dev": true,
+ "requires": {
+ "through": "2.3.8"
+ }
+ },
+ "cssesc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
+ "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q="
+ },
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "requires": {
+ "autoprefixer": "6.7.7",
+ "decamelize": "1.2.0",
+ "defined": "1.0.0",
+ "has": "1.0.1",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-calc": "5.3.1",
+ "postcss-colormin": "2.2.2",
+ "postcss-convert-values": "2.6.1",
+ "postcss-discard-comments": "2.0.4",
+ "postcss-discard-duplicates": "2.1.0",
+ "postcss-discard-empty": "2.1.0",
+ "postcss-discard-overridden": "0.1.1",
+ "postcss-discard-unused": "2.2.3",
+ "postcss-filter-plugins": "2.0.2",
+ "postcss-merge-idents": "2.1.7",
+ "postcss-merge-longhand": "2.0.2",
+ "postcss-merge-rules": "2.1.2",
+ "postcss-minify-font-values": "1.0.5",
+ "postcss-minify-gradients": "1.0.5",
+ "postcss-minify-params": "1.2.2",
+ "postcss-minify-selectors": "2.1.1",
+ "postcss-normalize-charset": "1.1.1",
+ "postcss-normalize-url": "3.0.8",
+ "postcss-ordered-values": "2.2.3",
+ "postcss-reduce-idents": "2.4.0",
+ "postcss-reduce-initial": "1.0.1",
+ "postcss-reduce-transforms": "1.0.4",
+ "postcss-svgo": "2.1.6",
+ "postcss-unique-selectors": "2.0.2",
+ "postcss-value-parser": "3.3.0",
+ "postcss-zindex": "2.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000827",
+ "normalize-range": "0.1.2",
+ "num2fraction": "1.2.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "1.0.30000827",
+ "electron-to-chromium": "1.3.39"
+ }
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "requires": {
+ "clap": "1.2.3",
+ "source-map": "0.5.7"
+ }
+ },
+ "cuint": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
+ "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=",
+ "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.2"
+ }
+ },
+ "custom-event": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+ "dev": true
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA="
+ },
+ "cypress": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-2.1.0.tgz",
+ "integrity": "sha512-EKXGjKFKUkhXXfAkYixBN2Lo2Gji4ZGC+ezWflRf/co49+OyHarZaXp7Y/n826WjmMdpHTmkOw4wUWBgyFHEHQ==",
+ "dev": true,
+ "requires": {
+ "@cypress/listr-verbose-renderer": "0.4.1",
+ "@cypress/xvfb": "1.1.3",
+ "@types/blob-util": "1.3.3",
+ "@types/bluebird": "3.5.18",
+ "@types/chai": "4.0.8",
+ "@types/chai-jquery": "1.1.35",
+ "@types/jquery": "3.2.16",
+ "@types/lodash": "4.14.87",
+ "@types/minimatch": "3.0.1",
+ "@types/mocha": "2.2.44",
+ "@types/sinon": "4.0.0",
+ "@types/sinon-chai": "2.7.29",
+ "bluebird": "3.5.0",
+ "chalk": "2.1.0",
+ "check-more-types": "2.24.0",
+ "commander": "2.11.0",
+ "common-tags": "1.4.0",
+ "debug": "3.1.0",
+ "extract-zip": "1.6.6",
+ "fs-extra": "4.0.1",
+ "getos": "2.8.4",
+ "glob": "7.1.2",
+ "is-ci": "1.0.10",
+ "is-installed-globally": "0.1.0",
+ "lazy-ass": "1.6.0",
+ "listr": "0.12.0",
+ "lodash": "4.17.4",
+ "minimist": "1.2.0",
+ "progress": "1.1.8",
+ "ramda": "0.24.1",
+ "request": "2.81.0",
+ "request-progress": "0.3.1",
+ "supports-color": "5.1.0",
+ "tmp": "0.0.31",
+ "url": "0.11.0",
+ "yauzl": "2.8.0"
+ },
+ "dependencies": {
+ "@types/chai": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.0.8.tgz",
+ "integrity": "sha512-m812CONwdZn/dMzkIJEY0yAs4apyTkTORgfB2UsMOxgkUbC205AHnm4T8I0I5gPg9MHrFc1dJ35iS75c0CJkjg==",
+ "dev": true
+ },
+ "@types/lodash": {
+ "version": "4.14.87",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.87.tgz",
+ "integrity": "sha512-AqRC+aEF4N0LuNHtcjKtvF9OTfqZI0iaBoe3dA6m/W+/YZJBZjBmW/QIZ8fBeXC6cnytSY9tBoFBqZ9uSCeVsw==",
+ "dev": true
+ },
+ "@types/mocha": {
+ "version": "2.2.44",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.44.tgz",
+ "integrity": "sha512-k2tWTQU8G4+iSMvqKi0Q9IIsWAp/n8xzdZS4Q4YVIltApoMA00wFBFdlJnmoaK1/z7B0Cy0yPe6GgXteSmdUNw==",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
+ "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "commander": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "dev": true
+ },
+ "common-tags": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz",
+ "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz",
+ "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "3.0.1",
+ "universalify": "0.1.1"
+ }
+ },
+ "jsonfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "ramda": {
+ "version": "0.24.1",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz",
+ "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=",
+ "dev": true
+ },
+ "request-progress": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz",
+ "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=",
+ "dev": true,
+ "requires": {
+ "throttleit": "0.0.2"
+ }
+ },
+ "supports-color": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz",
+ "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "throttleit": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
+ "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
+ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "yauzl": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz",
+ "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "0.2.13",
+ "fd-slicer": "1.0.1"
+ }
+ }
+ }
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "requires": {
+ "es5-ext": "0.10.41"
+ }
+ },
+ "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"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "data-uri-to-buffer": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz",
+ "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==",
+ "dev": true,
+ "optional": true
+ },
+ "date-fns": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz",
+ "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==",
+ "dev": true
+ },
+ "date-format": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
+ "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=",
+ "dev": true
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+ },
+ "dateformat": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1",
+ "meow": "3.7.0"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "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="
+ },
+ "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="
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ },
+ "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-require-extensions": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+ "dev": true,
+ "requires": {
+ "strip-bom": "2.0.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
+ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "requires": {
+ "foreach": "2.0.5",
+ "object-keys": "1.0.11"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+ },
+ "degenerator": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz",
+ "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ast-types": "0.11.3",
+ "escodegen": "1.9.1",
+ "esprima": "3.1.3"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "6.1.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "p-map": "1.2.0",
+ "pify": "3.0.0",
+ "rimraf": "2.6.2"
+ },
+ "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.2",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "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
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+ "denodeify": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz",
+ "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "requires": {
+ "inherits": "2.0.3",
+ "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="
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "detect-node": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz",
+ "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
+ "dev": true
+ },
+ "detect-port-alt": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz",
+ "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==",
+ "requires": {
+ "address": "1.0.3",
+ "debug": "2.6.9"
+ }
+ },
+ "di": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+ "dev": true
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.0.6"
+ }
+ },
+ "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"
+ }
+ },
+ "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.5",
+ "safe-buffer": "5.1.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.1.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom-converter": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz",
+ "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
+ "requires": {
+ "utila": "0.3.3"
+ },
+ "dependencies": {
+ "utila": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
+ "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY="
+ }
+ }
+ },
+ "dom-helpers": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz",
+ "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg=="
+ },
+ "dom-serialize": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+ "dev": true,
+ "requires": {
+ "custom-event": "1.0.1",
+ "ent": "2.2.0",
+ "extend": "3.0.1",
+ "void-elements": "2.0.1"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "requires": {
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
+ }
+ }
+ },
+ "dom-walk": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
+ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg="
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
+ },
+ "domhandler": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz",
+ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "dotenv": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
+ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow=="
+ },
+ "dotenv-webpack": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.5.5.tgz",
+ "integrity": "sha1-NEEJTwTTBLYRnmtyUk5i+zJS9fI=",
+ "requires": {
+ "dotenv": "5.0.1"
+ }
+ },
+ "double-ended-queue": {
+ "version": "2.1.0-0",
+ "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz",
+ "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=",
+ "dev": true,
+ "optional": true
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
+ },
+ "duplexify": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz",
+ "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==",
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5",
+ "stream-shift": "1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "ejs": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz",
+ "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.39",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.39.tgz",
+ "integrity": "sha1-16RpZAnKCZXidQFW2mEsIhr62E0="
+ },
+ "elegant-spinner": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
+ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0",
+ "hash.js": "1.1.3",
+ "hmac-drbg": "1.0.1",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "ember-cli-string-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz",
+ "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "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.19"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "engine.io": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz",
+ "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.5",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.2",
+ "uws": "9.14.0",
+ "ws": "3.3.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz",
+ "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "3.3.3",
+ "xmlhttprequest-ssl": "1.5.5",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
+ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary2": "1.0.2"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
+ "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "memory-fs": "0.4.1",
+ "object-assign": "4.1.1",
+ "tapable": "0.2.8"
+ }
+ },
+ "ent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+ "dev": true
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA="
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "requires": {
+ "prr": "1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz",
+ "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==",
+ "requires": {
+ "es-to-primitive": "1.1.1",
+ "function-bind": "1.1.1",
+ "has": "1.0.1",
+ "is-callable": "1.1.3",
+ "is-regex": "1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+ "requires": {
+ "is-callable": "1.1.3",
+ "is-date-object": "1.0.1",
+ "is-symbol": "1.0.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.41",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz",
+ "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==",
+ "requires": {
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1",
+ "next-tick": "1.0.0"
+ }
+ },
+ "es5-shim": {
+ "version": "4.5.10",
+ "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.10.tgz",
+ "integrity": "sha512-vmryBdqKRO8Ei9LJ4yyEk/EOmAOGIagcHDYPpTAi6pot4IMHS1AC2q5cTKPmydpijg2iX8DVmCuqgrNxIWj8Yg=="
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.41",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.41",
+ "es6-iterator": "2.0.3",
+ "es6-set": "0.1.5",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
+ "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
+ "dev": true
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.41",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-shim": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.3.tgz",
+ "integrity": "sha1-m/tzY/7//4emzbbNk+QF7DxLbyY="
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.41"
+ }
+ },
+ "es6-templates": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz",
+ "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=",
+ "requires": {
+ "recast": "0.11.23",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk="
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
+ },
+ "recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
+ "requires": {
+ "ast-types": "0.9.6",
+ "esprima": "3.1.3",
+ "private": "0.1.8",
+ "source-map": "0.5.7"
+ }
+ }
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.41",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "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="
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true,
+ "optional": 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
+ }
+ }
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "requires": {
+ "es6-map": "0.1.5",
+ "es6-weak-map": "2.0.2",
+ "esrecurse": "4.2.1",
+ "estraverse": "4.2.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.41"
+ }
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+ },
+ "eventsource": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
+ "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
+ "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==",
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "requires": {
+ "lru-cache": "4.1.2",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ }
+ }
+ },
+ "exenv": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
+ "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50="
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "exit-hook": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
+ "dev": true
+ },
+ "expand-braces": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
+ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
+ "dev": true,
+ "requires": {
+ "array-slice": "0.2.3",
+ "array-unique": "0.2.1",
+ "braces": "0.1.5"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
+ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
+ "dev": true,
+ "requires": {
+ "expand-range": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
+ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
+ "dev": true,
+ "requires": {
+ "is-number": "0.1.1",
+ "repeat-string": "0.2.2"
+ }
+ },
+ "is-number": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
+ "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
+ "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
+ "dev": true
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "requires": {
+ "homedir-polyfill": "1.0.1"
+ }
+ },
+ "express": {
+ "version": "4.16.3",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
+ "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
+ "requires": {
+ "accepts": "1.3.5",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.2",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "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.1",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "2.0.3",
+ "qs": "6.5.1",
+ "range-parser": "1.2.0",
+ "safe-buffer": "5.1.1",
+ "send": "0.16.2",
+ "serve-static": "1.13.2",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.4.0",
+ "type-is": "1.6.16",
+ "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="
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "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==",
+ "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": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "requires": {
+ "chardet": "0.4.2",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "extract-text-webpack-plugin": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz",
+ "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==",
+ "dev": true,
+ "requires": {
+ "async": "2.6.0",
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0",
+ "webpack-sources": "1.1.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2"
+ }
+ }
+ }
+ },
+ "extract-zip": {
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz",
+ "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.0",
+ "debug": "2.6.9",
+ "mkdirp": "0.5.0",
+ "yauzl": "2.4.1"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5",
+ "typedarray": "0.0.6"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+ "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fancy-log": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "0.1.1",
+ "color-support": "1.1.3",
+ "time-stamp": "1.1.0"
+ },
+ "dependencies": {
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "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
+ },
+ "fast-memoize": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.3.2.tgz",
+ "integrity": "sha512-h2avnhux4p3tXTA9xR7ntnQSFQdY4hAkyNj8wDXlVT2Die38JxVCInnrieuktdxzRevRWa3dBjN+SbQe1os0GQ=="
+ },
+ "fastparse": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz",
+ "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg="
+ },
+ "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.7.0"
+ }
+ },
+ "fbjs": {
+ "version": "0.8.16",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
+ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
+ "requires": {
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.17"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+ }
+ }
+ },
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "dev": true,
+ "requires": {
+ "pend": "1.2.0"
+ }
+ },
+ "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-loader": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
+ "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
+ "requires": {
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.4.5"
+ }
+ },
+ "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
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fileset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
+ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "minimatch": "3.0.4"
+ }
+ },
+ "filesize": {
+ "version": "3.5.11",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz",
+ "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g=="
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.4.0",
+ "unpipe": "1.0.0"
+ }
+ },
+ "find-cache-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "requires": {
+ "commondir": "1.0.1",
+ "make-dir": "1.2.0",
+ "pkg-dir": "2.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ },
+ "flatten": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
+ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I="
+ },
+ "flush-write-stream": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz",
+ "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz",
+ "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "2.6.9"
+ }
+ },
+ "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="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
+ },
+ "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.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "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="
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "fs": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz",
+ "integrity": "sha1-4fJE7zkzwbKmS9R5kTYGDQ9ZFPg=",
+ "dev": true
+ },
+ "fs-access": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
+ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
+ "dev": true,
+ "requires": {
+ "null-check": "1.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "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=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "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.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
+ "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
+ "optional": true,
+ "requires": {
+ "nan": "2.10.0",
+ "node-pre-gyp": "0.6.39"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.2.9"
+ }
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "bundled": true,
+ "optional": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true,
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "bundled": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "bundled": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.7",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true,
+ "optional": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "bundled": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true,
+ "optional": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true,
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.15"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1"
+ }
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aproba": "1.1.1",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "bundled": true
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "bundled": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "bundled": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "bundled": true
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.0",
+ "sshpk": "1.13.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true,
+ "optional": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.3",
+ "verror": "1.3.6"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.27.0",
+ "bundled": true
+ },
+ "mime-types": {
+ "version": "2.1.15",
+ "bundled": true,
+ "requires": {
+ "mime-db": "1.27.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "node-pre-gyp": {
+ "version": "0.6.39",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "1.0.2",
+ "hawk": "3.1.3",
+ "mkdirp": "0.5.1",
+ "nopt": "4.0.1",
+ "npmlog": "4.1.0",
+ "rc": "1.2.1",
+ "request": "2.81.0",
+ "rimraf": "2.6.1",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "tar-pack": "3.4.0"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.0",
+ "osenv": "0.1.4"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "bundled": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.9",
+ "bundled": true,
+ "requires": {
+ "buffer-shims": "1.0.0",
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "1.0.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "request": {
+ "version": "2.81.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "4.2.1",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.15",
+ "oauth-sign": "0.8.2",
+ "performance-now": "0.2.0",
+ "qs": "6.4.0",
+ "safe-buffer": "5.0.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.2",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "bundled": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "bundled": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "sshpk": {
+ "version": "1.13.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jodid25519": "1.0.2",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "bundled": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "tar-pack": {
+ "version": "3.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "2.6.8",
+ "fstream": "1.0.11",
+ "fstream-ignore": "1.0.5",
+ "once": "1.4.0",
+ "readable-stream": "2.2.9",
+ "rimraf": "2.6.1",
+ "tar": "2.2.1",
+ "uid-number": "0.0.6"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "optional": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "ftp": {
+ "version": "0.3.10",
+ "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz",
+ "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "readable-stream": "1.1.14",
+ "xregexp": "2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true,
+ "optional": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "function.prototype.name": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz",
+ "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==",
+ "requires": {
+ "define-properties": "1.1.2",
+ "function-bind": "1.1.1",
+ "is-callable": "1.1.3"
+ }
+ },
+ "fuse.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.2.0.tgz",
+ "integrity": "sha1-8ESOgGmFW/Kj5oPNwdMg5+KgfvQ="
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "requires": {
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ }
+ },
+ "gaze": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
+ "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "globule": "1.2.0"
+ }
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true,
+ "optional": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-property": "1.0.2"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U="
+ },
+ "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": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+ },
+ "get-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.1.tgz",
+ "integrity": "sha512-7aelVrYqCLuVjq2kEKRTH8fXPTC0xKTkM+G7UlFkEwCXY3sFbSxvY375JoFowOAYbkaU47SrBvOefUlLZZ+6QA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "data-uri-to-buffer": "1.2.0",
+ "debug": "2.6.9",
+ "extend": "3.0.1",
+ "file-uri-to-path": "1.0.0",
+ "ftp": "0.3.10",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "getos": {
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-2.8.4.tgz",
+ "integrity": "sha1-e4YD02GcKOOMsP56T2PDrLgNUWM=",
+ "dev": true,
+ "requires": {
+ "async": "2.1.4"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz",
+ "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ }
+ }
+ },
+ "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"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "gitbook-plugin-github": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-github/-/gitbook-plugin-github-2.0.0.tgz",
+ "integrity": "sha1-UWbnY8/MQC1DKIC3pshcHFS1ao0="
+ },
+ "glamor": {
+ "version": "2.20.40",
+ "resolved": "https://registry.npmjs.org/glamor/-/glamor-2.20.40.tgz",
+ "integrity": "sha512-DNXCd+c14N9QF8aAKrfl4xakPk5FdcFwmH7sD0qnC0Pr7xoZ5W9yovhUrY/dJc3psfGGXC58vqQyRtuskyUJxA==",
+ "requires": {
+ "fbjs": "0.8.16",
+ "inline-style-prefixer": "3.0.8",
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.1",
+ "through": "2.3.8"
+ }
+ },
+ "glamorous": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/glamorous/-/glamorous-4.12.2.tgz",
+ "integrity": "sha512-+jGoFgY+Czd/WFXDE4HszXJlYUks2xawlzNx+5rtkwjpc9M36QtgI7YXIq+X7rg1t8sc+0o/PJsO1A9T9atcVA==",
+ "requires": {
+ "brcast": "3.0.1",
+ "fast-memoize": "2.3.2",
+ "html-tag-names": "1.1.2",
+ "is-function": "1.0.1",
+ "is-plain-object": "2.0.4",
+ "react-html-attributes": "1.4.1",
+ "svg-tag-names": "1.1.1"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "global": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
+ "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
+ "requires": {
+ "min-document": "2.19.0",
+ "process": "0.5.2"
+ },
+ "dependencies": {
+ "process": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
+ "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8="
+ }
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "dev": true,
+ "requires": {
+ "ini": "1.3.5"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "requires": {
+ "global-prefix": "1.0.2",
+ "is-windows": "1.0.2",
+ "resolve-dir": "1.0.1"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "homedir-polyfill": "1.0.1",
+ "ini": "1.3.5",
+ "is-windows": "1.0.2",
+ "which": "1.3.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "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.2",
+ "dir-glob": "2.0.0",
+ "glob": "7.1.2",
+ "ignore": "3.3.7",
+ "pify": "3.0.0",
+ "slash": "1.0.0"
+ }
+ },
+ "globule": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
+ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.17.5",
+ "minimatch": "3.0.4"
+ }
+ },
+ "glogg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "gulp-util": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz",
+ "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=",
+ "dev": true,
+ "requires": {
+ "array-differ": "1.0.0",
+ "array-uniq": "1.0.3",
+ "beeper": "1.1.1",
+ "chalk": "1.1.3",
+ "dateformat": "1.0.12",
+ "fancy-log": "1.3.2",
+ "gulplog": "1.0.0",
+ "has-gulplog": "0.1.0",
+ "lodash._reescape": "3.0.0",
+ "lodash._reevaluate": "3.0.0",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.template": "3.6.2",
+ "minimist": "1.2.0",
+ "multipipe": "0.1.2",
+ "object-assign": "3.0.0",
+ "replace-ext": "0.0.1",
+ "through2": "2.0.3",
+ "vinyl": "0.5.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "1.0.1"
+ }
+ },
+ "gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "requires": {
+ "duplexer": "0.1.1"
+ }
+ },
+ "handle-thing": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
+ "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "optimist": "0.6.1",
+ "source-map": "0.4.4",
+ "uglify-js": "2.8.29"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true,
+ "optional": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "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": "1.0.1"
+ }
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "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.1.1"
+ }
+ },
+ "has-binary2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz",
+ "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=",
+ "dev": true,
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "has-gulplog": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "hasha": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
+ "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
+ "dev": true,
+ "requires": {
+ "is-stream": "1.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0="
+ },
+ "hipchat-notifier": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz",
+ "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lodash": "4.17.5",
+ "request": "2.81.0"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "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="
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+ "requires": {
+ "parse-passwd": "1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
+ "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw=="
+ },
+ "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.3",
+ "obuf": "1.1.2",
+ "readable-stream": "2.3.5",
+ "wbuf": "1.7.3"
+ }
+ },
+ "html-comment-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
+ "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4="
+ },
+ "html-element-attributes": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/html-element-attributes/-/html-element-attributes-1.3.0.tgz",
+ "integrity": "sha1-8G69/OIt6XnbggICZcrFQfsX1Pw="
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
+ },
+ "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==",
+ "requires": {
+ "es6-templates": "0.2.3",
+ "fastparse": "1.1.1",
+ "html-minifier": "3.5.12",
+ "loader-utils": "1.1.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "html-minifier": {
+ "version": "3.5.12",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.12.tgz",
+ "integrity": "sha512-+N778qLf0RWBscD0TPGoYdeGNDZ0s76/0pQhY1/409EOudcENkm9IbSkk37RDyPdg/09GVHTKotU4ya93RF1Gg==",
+ "requires": {
+ "camel-case": "3.0.0",
+ "clean-css": "4.1.11",
+ "commander": "2.15.0",
+ "he": "1.1.1",
+ "ncname": "1.0.0",
+ "param-case": "2.1.1",
+ "relateurl": "0.2.7",
+ "uglify-js": "3.3.16"
+ }
+ },
+ "html-tag-names": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-tag-names/-/html-tag-names-1.1.2.tgz",
+ "integrity": "sha1-9lFolkxanIJnXv2ogoddyyqHXCI="
+ },
+ "html-webpack-plugin": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz",
+ "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
+ "requires": {
+ "bluebird": "3.5.1",
+ "html-minifier": "3.5.12",
+ "loader-utils": "0.2.17",
+ "lodash": "4.17.5",
+ "pretty-error": "2.1.1",
+ "toposort": "1.0.6"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
+ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.1.0",
+ "domutils": "1.1.6",
+ "readable-stream": "1.0.34"
+ },
+ "dependencies": {
+ "domutils": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz",
+ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
+ }
+ },
+ "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.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.4.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
+ }
+ }
+ },
+ "http-loader": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/http-loader/-/http-loader-0.0.1.tgz",
+ "integrity": "sha1-sE+MLY6HKuB5VyYG7/D0uO9V0Hw="
+ },
+ "http-parser-js": {
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.11.tgz",
+ "integrity": "sha512-QCR5O2AjjMW8Mo4HyI1ctFcv+O99j/0g367V3YoVnrNw5hkDvAWZD0lWGcc+F4yN3V55USPCVix4efb75HxFfA=="
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-proxy-agent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz",
+ "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=",
+ "dev": true,
+ "requires": {
+ "agent-base": "2.1.1",
+ "debug": "2.6.9",
+ "extend": "3.0.1"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
+ "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
+ "dev": true,
+ "requires": {
+ "http-proxy": "1.16.2",
+ "is-glob": "3.1.0",
+ "lodash": "4.17.5",
+ "micromatch": "2.3.11"
+ },
+ "dependencies": {
+ "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-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.1"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.14.1"
+ }
+ },
+ "httpntlm": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz",
+ "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=",
+ "dev": true,
+ "requires": {
+ "httpreq": "0.4.24",
+ "underscore": "1.7.0"
+ }
+ },
+ "httpreq": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz",
+ "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=",
+ "dev": true
+ },
+ "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="
+ },
+ "https-proxy-agent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
+ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
+ "dev": true,
+ "requires": {
+ "agent-base": "2.1.1",
+ "debug": "2.6.9",
+ "extend": "3.0.1"
+ }
+ },
+ "hyphenate-style-name": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz",
+ "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es="
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
+ },
+ "icss-replace-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0="
+ },
+ "icss-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
+ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
+ "requires": {
+ "postcss": "6.0.20"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.10.tgz",
+ "integrity": "sha512-byWFX8OyW/qeVxcY21r6Ncxl0ZYHgnf0cPup2h34eHXrCJbOp7IuqnJ4Q0omfyWl6Z++BTI6bByf31pZt7iRLg=="
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "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
+ },
+ "immutable": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
+ "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM="
+ },
+ "import-local": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
+ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "2.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="
+ },
+ "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,
+ "optional": true
+ },
+ "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.1"
+ }
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflection": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz",
+ "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=",
+ "dev": true,
+ "optional": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "inline-style-prefixer": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz",
+ "integrity": "sha1-hVG45bTVcyROZqNLBPfTIHaitTQ=",
+ "requires": {
+ "bowser": "1.9.3",
+ "css-in-js-utils": "2.0.1"
+ }
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "requires": {
+ "ansi-escapes": "3.1.0",
+ "chalk": "2.2.2",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.2.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.5",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "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="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "internal-ip": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz",
+ "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=",
+ "dev": true,
+ "requires": {
+ "meow": "3.7.0"
+ }
+ },
+ "interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ="
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "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="
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
+ "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs="
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY="
+ },
+ "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==",
+ "requires": {
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "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=",
+ "requires": {
+ "binary-extensions": "1.11.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
+ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI="
+ },
+ "is-ci": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz",
+ "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=",
+ "dev": true,
+ "requires": {
+ "ci-info": "1.1.3"
+ }
+ },
+ "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==",
+ "requires": {
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+ },
+ "is-dom": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.0.9.tgz",
+ "integrity": "sha1-SDgy1SlyBz3hK5/j9gMghw2oNw0="
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "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=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-function": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz",
+ "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU="
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "dev": true,
+ "requires": {
+ "global-dirs": "0.1.1",
+ "is-path-inside": "1.0.1"
+ }
+ },
+ "is-my-ip-valid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
+ "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
+ "dev": true,
+ "optional": true
+ },
+ "is-my-json-valid": {
+ "version": "2.17.2",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz",
+ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "is-my-ip-valid": "1.0.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+ }
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.1"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "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="
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true,
+ "optional": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "requires": {
+ "has": "1.0.1"
+ }
+ },
+ "is-root": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz",
+ "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU="
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "requires": {
+ "html-comment-regex": "1.1.1"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
+ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI="
+ },
+ "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-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isbinaryfile": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz",
+ "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "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"
+ }
+ },
+ "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.7.3",
+ "whatwg-fetch": "2.0.4"
+ }
+ },
+ "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
+ },
+ "istanbul": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
+ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.0.9",
+ "async": "1.5.2",
+ "escodegen": "1.8.1",
+ "esprima": "2.7.3",
+ "glob": "5.0.15",
+ "handlebars": "4.0.11",
+ "js-yaml": "3.11.0",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "once": "1.4.0",
+ "resolve": "1.1.7",
+ "supports-color": "3.2.3",
+ "which": "1.3.0",
+ "wordwrap": "1.0.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+ "dev": true,
+ "requires": {
+ "esprima": "2.7.3",
+ "estraverse": "1.9.3",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.2.0"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+ "dev": true
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.0.9"
+ }
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-api": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz",
+ "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==",
+ "dev": true,
+ "requires": {
+ "async": "2.6.0",
+ "compare-versions": "3.1.0",
+ "fileset": "2.0.3",
+ "istanbul-lib-coverage": "1.2.0",
+ "istanbul-lib-hook": "1.2.0",
+ "istanbul-lib-instrument": "1.10.1",
+ "istanbul-lib-report": "1.1.4",
+ "istanbul-lib-source-maps": "1.2.4",
+ "istanbul-reports": "1.3.0",
+ "js-yaml": "3.11.0",
+ "mkdirp": "0.5.1",
+ "once": "1.4.0"
+ }
+ },
+ "istanbul-instrumenter-loader": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.0.tgz",
+ "integrity": "sha512-alLSEFX06ApU75sm5oWcaVNaiss/bgMRiWTct3g0P0ZZTKjR+6QiCcuVOKDI1kWJgwHEnIXsv/dWm783kPpmtw==",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.5.1",
+ "istanbul-lib-instrument": "1.10.1",
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2"
+ }
+ }
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz",
+ "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==",
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz",
+ "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==",
+ "dev": true,
+ "requires": {
+ "append-transform": "0.4.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz",
+ "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==",
+ "dev": true,
+ "requires": {
+ "babel-generator": "6.26.1",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "istanbul-lib-coverage": "1.2.0",
+ "semver": "5.5.0"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz",
+ "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "1.2.0",
+ "mkdirp": "0.5.1",
+ "path-parse": "1.0.5",
+ "supports-color": "3.2.3"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz",
+ "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==",
+ "dev": true,
+ "requires": {
+ "debug": "3.1.0",
+ "istanbul-lib-coverage": "1.2.0",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz",
+ "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==",
+ "dev": true,
+ "requires": {
+ "handlebars": "4.0.11"
+ }
+ },
+ "jasmine": {
+ "version": "2.99.0",
+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.99.0.tgz",
+ "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=",
+ "dev": true,
+ "requires": {
+ "exit": "0.1.2",
+ "glob": "7.1.2",
+ "jasmine-core": "2.99.1"
+ },
+ "dependencies": {
+ "jasmine-core": {
+ "version": "2.99.1",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz",
+ "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=",
+ "dev": true
+ }
+ }
+ },
+ "jasmine-core": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.5.2.tgz",
+ "integrity": "sha1-b2G9eQYeJ/Q+b5NV5Es8bKtv8pc=",
+ "dev": true
+ },
+ "jasmine-spec-reporter": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz",
+ "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==",
+ "dev": true,
+ "requires": {
+ "colors": "1.1.2"
+ }
+ },
+ "jasminewd2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz",
+ "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz",
+ "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw=="
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-yaml": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
+ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
+ "requires": {
+ "argparse": "1.0.10",
+ "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,
+ "optional": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-loader": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
+ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w=="
+ },
+ "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": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+ },
+ "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-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "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="
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE="
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true,
+ "optional": 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"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "karma": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.2.tgz",
+ "integrity": "sha1-TS25QChQpmVR+nhLAWT7CCTtjEs=",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "body-parser": "1.18.2",
+ "chokidar": "1.7.0",
+ "colors": "1.1.2",
+ "combine-lists": "1.0.1",
+ "connect": "3.6.6",
+ "core-js": "2.4.1",
+ "di": "0.0.1",
+ "dom-serialize": "2.2.1",
+ "expand-braces": "0.1.2",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "http-proxy": "1.16.2",
+ "isbinaryfile": "3.0.2",
+ "lodash": "4.17.5",
+ "log4js": "2.5.3",
+ "mime": "1.6.0",
+ "minimatch": "3.0.4",
+ "optimist": "0.6.1",
+ "qjobs": "1.2.0",
+ "range-parser": "1.2.0",
+ "rimraf": "2.6.2",
+ "safe-buffer": "5.1.1",
+ "socket.io": "2.0.4",
+ "source-map": "0.6.1",
+ "tmp": "0.0.33",
+ "useragent": "2.2.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
+ "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=",
+ "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
+ },
+ "useragent": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz",
+ "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.2.4",
+ "tmp": "0.0.33"
+ }
+ }
+ }
+ },
+ "karma-chrome-launcher": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz",
+ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==",
+ "dev": true,
+ "requires": {
+ "fs-access": "1.0.1",
+ "which": "1.3.0"
+ }
+ },
+ "karma-coverage-istanbul-reporter": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.1.tgz",
+ "integrity": "sha512-UcgrHkFehI5+ivMouD8NH/UOHiX4oCAtwaANylzPFdcAuD52fnCUuelacq2gh8tZ4ydhU3+xiXofSq7j5Ehygw==",
+ "dev": true,
+ "requires": {
+ "istanbul-api": "1.3.1",
+ "minimatch": "3.0.4"
+ }
+ },
+ "karma-istanbul-threshold": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/karma-istanbul-threshold/-/karma-istanbul-threshold-1.2.2.tgz",
+ "integrity": "sha1-cWReASb9t5DeKGXJWFp5KV7LF/s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "chokidar": "1.7.0",
+ "fs": "0.0.2",
+ "istanbul": "0.4.5",
+ "lodash": "4.17.5",
+ "minimatch": "3.0.4"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "karma-jasmine": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz",
+ "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=",
+ "dev": true
+ },
+ "karma-jasmine-html-reporter": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.1.0.tgz",
+ "integrity": "sha512-uhNED+4B1axgptXkM8cCa3kztpQqsPrOxhfbjr4FdunNexnU6+cF2bfiIeGfsFMhphVyOMKy/S9LFaOFj8VXRA==",
+ "dev": true
+ },
+ "karma-junit-reporter": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-1.2.0.tgz",
+ "integrity": "sha1-T5xAzt+xo5X4rvh2q/lhiZF8Y5Y=",
+ "dev": true,
+ "requires": {
+ "path-is-absolute": "1.0.1",
+ "xmlbuilder": "8.2.2"
+ },
+ "dependencies": {
+ "xmlbuilder": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
+ "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=",
+ "dev": true
+ }
+ }
+ },
+ "karma-phantomjs-launcher": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz",
+ "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.5",
+ "phantomjs-prebuilt": "2.1.16"
+ }
+ },
+ "karma-remap-istanbul": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/karma-remap-istanbul/-/karma-remap-istanbul-0.6.0.tgz",
+ "integrity": "sha1-l/O3cAZSVPm0ck8tm+SjouG69vw=",
+ "dev": true,
+ "requires": {
+ "istanbul": "0.4.5",
+ "remap-istanbul": "0.9.6"
+ }
+ },
+ "karma-source-map-support": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz",
+ "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=",
+ "dev": true,
+ "requires": {
+ "source-map-support": "0.4.18"
+ }
+ },
+ "karma-spec-reporter": {
+ "version": "0.0.32",
+ "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.32.tgz",
+ "integrity": "sha1-LpxyB+pyZ3EmAln4K+y1QyCeRAo=",
+ "dev": true,
+ "requires": {
+ "colors": "1.1.2"
+ }
+ },
+ "kew": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
+ "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
+ "dev": true
+ },
+ "keycode": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz",
+ "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ="
+ },
+ "killable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz",
+ "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
+ "dev": true
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "less": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz",
+ "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==",
+ "dev": true,
+ "requires": {
+ "errno": "0.1.7",
+ "graceful-fs": "4.1.11",
+ "image-size": "0.5.5",
+ "mime": "1.6.0",
+ "mkdirp": "0.5.1",
+ "promise": "7.3.1",
+ "request": "2.81.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "less-loader": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz",
+ "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "loader-utils": "1.1.0",
+ "pify": "3.0.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"
+ }
+ },
+ "libbase64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz",
+ "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=",
+ "dev": true
+ },
+ "libmime": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz",
+ "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.4.15",
+ "libbase64": "0.1.0",
+ "libqp": "1.1.0"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.15",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
+ "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=",
+ "dev": true
+ }
+ }
+ },
+ "libqp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz",
+ "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=",
+ "dev": true
+ },
+ "license-webpack-plugin": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.3.0.tgz",
+ "integrity": "sha512-12Spl8M5Ty7aRszGQUEfNK1W0gwcWNfAj0sMyJv7E7BglAb4YaZ6FciGncmwzxEcuzJ45RjA/Fql3Gw13la6aA==",
+ "dev": true,
+ "requires": {
+ "ejs": "2.5.7"
+ }
+ },
+ "listr": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz",
+ "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-truncate": "0.2.1",
+ "figures": "1.7.0",
+ "indent-string": "2.1.0",
+ "is-promise": "2.1.0",
+ "is-stream": "1.1.0",
+ "listr-silent-renderer": "1.1.1",
+ "listr-update-renderer": "0.2.0",
+ "listr-verbose-renderer": "0.4.1",
+ "log-symbols": "1.0.2",
+ "log-update": "1.0.2",
+ "ora": "0.2.3",
+ "p-map": "1.2.0",
+ "rxjs": "5.5.6",
+ "stream-to-observable": "0.1.0",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5",
+ "object-assign": "4.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "listr-silent-renderer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
+ "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
+ "dev": true
+ },
+ "listr-update-renderer": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz",
+ "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-truncate": "0.2.1",
+ "elegant-spinner": "1.0.1",
+ "figures": "1.7.0",
+ "indent-string": "3.2.0",
+ "log-symbols": "1.0.2",
+ "log-update": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5",
+ "object-assign": "4.1.1"
+ }
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "listr-verbose-renderer": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz",
+ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-cursor": "1.0.2",
+ "date-fns": "1.29.0",
+ "figures": "1.7.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "1.0.1"
+ }
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5",
+ "object-assign": "4.1.1"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "1.1.1",
+ "onetime": "1.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "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.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "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
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz",
+ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI="
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw=="
+ },
+ "lodash-es": {
+ "version": "4.17.8",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.8.tgz",
+ "integrity": "sha512-I9mjAxengFAleSThFhhAhvba6fsO0hunb9/0sQ6qQihSZsJRBofv2rYH58WXaOb/O++eUmYpCLywSQ22GfU+sA=="
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U="
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "dev": true,
+ "optional": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+ },
+ "lodash.escape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "3.0.1"
+ }
+ },
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI="
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.mergewith": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
+ "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==",
+ "dev": true,
+ "optional": true
+ },
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=",
+ "dev": true
+ },
+ "lodash.pick": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM="
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0="
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
+ },
+ "lodash.tail": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
+ "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash._basetostring": "3.0.1",
+ "lodash._basevalues": "3.0.0",
+ "lodash._isiterateecall": "3.0.9",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0",
+ "lodash.keys": "3.1.2",
+ "lodash.restparam": "3.6.1",
+ "lodash.templatesettings": "3.1.1"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0"
+ }
+ },
+ "lodash.throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+ },
+ "log-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "log-update": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz",
+ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "1.4.0",
+ "cli-cursor": "1.0.2"
+ },
+ "dependencies": {
+ "ansi-escapes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "1.0.1"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "1.1.1",
+ "onetime": "1.1.0"
+ }
+ }
+ }
+ },
+ "log4js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.5.3.tgz",
+ "integrity": "sha512-YL/qpTxYtK0iWWbuKCrevDZz5lh+OjyHHD+mICqpjnYGKdNRBvPeh/1uYjkKUemT1CSO4wwLOwphWMpKAnD9kw==",
+ "dev": true,
+ "requires": {
+ "amqplib": "0.5.2",
+ "axios": "0.15.3",
+ "circular-json": "0.5.1",
+ "date-format": "1.2.0",
+ "debug": "3.1.0",
+ "hipchat-notifier": "1.1.0",
+ "loggly": "1.1.1",
+ "mailgun-js": "0.7.15",
+ "nodemailer": "2.7.2",
+ "redis": "2.8.0",
+ "semver": "5.5.0",
+ "slack-node": "0.2.0",
+ "streamroller": "0.7.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "loggly": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz",
+ "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "json-stringify-safe": "5.0.1",
+ "request": "2.75.0",
+ "timespan": "2.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "optional": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true,
+ "optional": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "form-data": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz",
+ "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
+ }
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.15.0",
+ "is-my-json-valid": "2.17.2",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "node-uuid": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
+ "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=",
+ "dev": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz",
+ "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=",
+ "dev": true,
+ "optional": true
+ },
+ "request": {
+ "version": "2.75.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz",
+ "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "bl": "1.1.2",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.0.0",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.18",
+ "node-uuid": "1.4.8",
+ "oauth-sign": "0.8.2",
+ "qs": "6.2.3",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.4",
+ "tunnel-agent": "0.4.3"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "optional": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "loglevel": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz",
+ "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "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.2"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
+ },
+ "lru-cache": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz",
+ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==",
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "macaddress": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz",
+ "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI="
+ },
+ "magic-string": {
+ "version": "0.22.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "dev": true,
+ "requires": {
+ "vlq": "0.2.3"
+ }
+ },
+ "mailcomposer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz",
+ "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "buildmail": "4.0.1",
+ "libmime": "3.0.0"
+ }
+ },
+ "mailgun-js": {
+ "version": "0.7.15",
+ "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.7.15.tgz",
+ "integrity": "sha1-7jZqINrGTDwVwD1sGz4O15UlKrs=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "async": "2.1.5",
+ "debug": "2.2.0",
+ "form-data": "2.1.4",
+ "inflection": "1.10.0",
+ "is-stream": "1.1.0",
+ "path-proxy": "1.0.0",
+ "proxy-agent": "2.0.0",
+ "q": "1.4.1",
+ "tsscmp": "1.0.5"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.1.5.tgz",
+ "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ },
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "make-dir": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz",
+ "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==",
+ "requires": {
+ "pify": "3.0.0"
+ }
+ },
+ "make-error": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz",
+ "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g=="
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "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=",
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "markdown-loader": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/markdown-loader/-/markdown-loader-2.0.2.tgz",
+ "integrity": "sha512-v/ej7DflZbb6t//3Yu9vg0T+sun+Q9EoqggifeyABKfvFROqPwwwpv+hd1NKT2QxTRg6VCFk10IIJcMI13yCoQ==",
+ "requires": {
+ "loader-utils": "1.1.0",
+ "marked": "0.3.19"
+ }
+ },
+ "marked": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
+ "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg=="
+ },
+ "math-expression-evaluator": {
+ "version": "1.2.17",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
+ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw="
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "requires": {
+ "mimic-fn": "1.2.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "errno": "0.1.7",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "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.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.4.0",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "requires": {
+ "mime-db": "1.33.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
+ },
+ "min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "requires": {
+ "dom-walk": "0.1.1"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M="
+ },
+ "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="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mississippi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+ "requires": {
+ "concat-stream": "1.6.1",
+ "duplexify": "3.5.4",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.0.2",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "2.0.1",
+ "pumpify": "1.4.0",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "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": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "mixin-object": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
+ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
+ "dev": true,
+ "requires": {
+ "for-in": "0.1.8",
+ "is-extendable": "0.1.1"
+ },
+ "dependencies": {
+ "for-in": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
+ "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
+ "dev": true
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "mobx": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mobx/-/mobx-4.1.0.tgz",
+ "integrity": "sha1-5KlnnNr74hWyDjLvk6cDGEWz8a8="
+ },
+ "mobx-angular": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mobx-angular/-/mobx-angular-3.0.1.tgz",
+ "integrity": "sha512-PoEUEw74LoR7Ib6iGGCqvw8xMlmA/Zr5/0TVyhshq4kuzA8pHdvtCiE5AeyRK0w4LhyS7J0Qt0GboTgdhuys+A=="
+ },
+ "moment": {
+ "version": "2.22.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz",
+ "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ=="
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "requires": {
+ "aproba": "1.2.0",
+ "copy-concurrently": "1.0.5",
+ "fs-write-stream-atomic": "1.0.10",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2",
+ "run-queue": "1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "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
+ },
+ "multipipe": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ },
+ "dependencies": {
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "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.10.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "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-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "ncname": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
+ "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+ "requires": {
+ "xml-char-classes": "1.0.0"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ },
+ "neo-async": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz",
+ "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g=="
+ },
+ "netmask": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
+ "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=",
+ "dev": true,
+ "optional": true
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
+ },
+ "ng-multiselect-dropdown": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ng-multiselect-dropdown/-/ng-multiselect-dropdown-0.1.3.tgz",
+ "integrity": "sha512-N4MTqtcEwIQYOPB8LDer6eylo9uGmpNUrAS99HPYz9LTbupEiPkh/V87nsQmaenkiPndHXDbQhpa3/DSLcj+ew=="
+ },
+ "ng2-bootstrap-modal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ng2-bootstrap-modal/-/ng2-bootstrap-modal-1.0.1.tgz",
+ "integrity": "sha1-8xZvymP9Ozrqyym41eO4cqtqseQ="
+ },
+ "ngx-bootstrap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-2.0.3.tgz",
+ "integrity": "sha512-SdtOQeQrT2BW5mUbzotZF8S55QaAYOBT7orrl2Pi/U5mCVH4U7YJIaN7yNzMfjGsYINmBOSY8Zi1MBUC1UzbWg=="
+ },
+ "ngx-contextmenu": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/ngx-contextmenu/-/ngx-contextmenu-4.1.2.tgz",
+ "integrity": "sha512-y8Q4txpzEIAgd6BqZCZQmEM0zlubfWZh/AU3Y5O2Xx+qF1hA2cYWNJZo/msqiK8ACpJ5xkAmBAs2O7nqqP0wiQ=="
+ },
+ "ngx-datatable": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ngx-datatable/-/ngx-datatable-1.0.3.tgz",
+ "integrity": "sha1-nvmRWqAZ6Zg6qOOJe2H0APL9adU="
+ },
+ "ngx-moment": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ngx-moment/-/ngx-moment-2.0.0.tgz",
+ "integrity": "sha512-KVTiKeSbrnTTVVtEGvC/7cqN+SCTWtbFYcRP+o0gudOPOYPS35rjIRHygADSFWoq5XqctUr5tC4/ZsWv3vJDRw==",
+ "requires": {
+ "moment": "2.22.1",
+ "tslib": "1.9.0"
+ }
+ },
+ "ngx-tooltip": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/ngx-tooltip/-/ngx-tooltip-0.0.9.tgz",
+ "integrity": "sha1-mCFpPn2RxX2ugYnF1qgQUmiQtvY="
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "requires": {
+ "lower-case": "1.1.4"
+ }
+ },
+ "node-dir": {
+ "version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
+ "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=",
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+ "requires": {
+ "encoding": "0.1.12",
+ "is-stream": "1.1.0"
+ }
+ },
+ "node-forge": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz",
+ "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=",
+ "dev": true
+ },
+ "node-gyp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
+ "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.2",
+ "osenv": "0.1.5",
+ "request": "2.81.0",
+ "rimraf": "2.6.2",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
+ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+ "requires": {
+ "assert": "1.4.1",
+ "browserify-zlib": "0.2.0",
+ "buffer": "4.9.1",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.12.0",
+ "domain-browser": "1.2.0",
+ "events": "1.1.1",
+ "https-browserify": "1.0.0",
+ "os-browserify": "0.3.0",
+ "path-browserify": "0.0.0",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "readable-stream": "2.3.5",
+ "stream-browserify": "2.0.1",
+ "stream-http": "2.8.1",
+ "string_decoder": "1.0.3",
+ "timers-browserify": "2.0.6",
+ "tty-browserify": "0.0.0",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4"
+ }
+ },
+ "node-modules-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.1.tgz",
+ "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=",
+ "dev": true
+ },
+ "node-sass": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz",
+ "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "async-foreach": "0.1.3",
+ "chalk": "1.1.3",
+ "cross-spawn": "3.0.1",
+ "gaze": "1.1.2",
+ "get-stdin": "4.0.1",
+ "glob": "7.1.2",
+ "in-publish": "2.0.0",
+ "lodash.assign": "4.2.0",
+ "lodash.clonedeep": "4.5.0",
+ "lodash.mergewith": "4.6.1",
+ "meow": "3.7.0",
+ "mkdirp": "0.5.1",
+ "nan": "2.10.0",
+ "node-gyp": "3.6.2",
+ "npmlog": "4.1.2",
+ "request": "2.79.0",
+ "sass-graph": "2.2.4",
+ "stdout-stream": "1.4.0",
+ "true-case-path": "1.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true,
+ "optional": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.15.0",
+ "is-my-json-valid": "2.17.2",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "qs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
+ "dev": true,
+ "optional": true
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.18",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.2",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.4",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.2.1"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "nodemailer": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz",
+ "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "libmime": "3.0.0",
+ "mailcomposer": "4.0.1",
+ "nodemailer-direct-transport": "3.3.2",
+ "nodemailer-shared": "1.1.0",
+ "nodemailer-smtp-pool": "2.8.2",
+ "nodemailer-smtp-transport": "2.7.2",
+ "socks": "1.1.9"
+ },
+ "dependencies": {
+ "socks": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz",
+ "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "1.1.15"
+ }
+ }
+ }
+ },
+ "nodemailer-direct-transport": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz",
+ "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nodemailer-shared": "1.1.0",
+ "smtp-connection": "2.12.0"
+ }
+ },
+ "nodemailer-fetch": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz",
+ "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=",
+ "dev": true
+ },
+ "nodemailer-shared": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz",
+ "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=",
+ "dev": true,
+ "requires": {
+ "nodemailer-fetch": "1.6.0"
+ }
+ },
+ "nodemailer-smtp-pool": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz",
+ "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nodemailer-shared": "1.1.0",
+ "nodemailer-wellknown": "0.1.10",
+ "smtp-connection": "2.12.0"
+ }
+ },
+ "nodemailer-smtp-transport": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz",
+ "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nodemailer-shared": "1.1.0",
+ "nodemailer-wellknown": "0.1.10",
+ "smtp-connection": "2.12.0"
+ }
+ },
+ "nodemailer-wellknown": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz",
+ "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=",
+ "dev": true
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.1",
+ "osenv": "0.1.5"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "requires": {
+ "hosted-git-info": "2.6.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.5.0",
+ "validate-npm-package-license": "3.0.3"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "prepend-http": "1.0.4",
+ "query-string": "4.3.4",
+ "sort-keys": "1.1.2"
+ }
+ },
+ "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=",
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "requires": {
+ "boolbase": "1.0.0"
+ }
+ },
+ "null-check": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
+ "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
+ "dev": true
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
+ "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="
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "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-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "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=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "object.entries": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz",
+ "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=",
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.1"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "object.values": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
+ "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "1.2.0"
+ }
+ },
+ "opn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz",
+ "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "1.1.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.8",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "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",
+ "wordwrap": "1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "options": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
+ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
+ "dev": true
+ },
+ "ora": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
+ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-cursor": "1.0.2",
+ "cli-spinners": "0.1.2",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "1.0.1"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "1.1.1",
+ "onetime": "1.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "original": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz",
+ "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=",
+ "requires": {
+ "url-parse": "1.0.5"
+ },
+ "dependencies": {
+ "url-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz",
+ "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=",
+ "requires": {
+ "querystringify": "0.0.4",
+ "requires-port": "1.0.0"
+ }
+ }
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "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": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-limit": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
+ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
+ "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=",
+ "requires": {
+ "p-limit": "1.2.0"
+ }
+ },
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
+ },
+ "pac-proxy-agent": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz",
+ "integrity": "sha512-QBELCWyLYPgE2Gj+4wUEiMscHrQ8nRPBzYItQNOHWavwBt25ohZHQC4qnd5IszdVVrFbLsQ+dPkm6eqdjJAmwQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "agent-base": "2.1.1",
+ "debug": "2.6.9",
+ "extend": "3.0.1",
+ "get-uri": "2.0.1",
+ "http-proxy-agent": "1.0.0",
+ "https-proxy-agent": "1.0.0",
+ "pac-resolver": "2.0.0",
+ "raw-body": "2.3.2",
+ "socks-proxy-agent": "2.1.1"
+ }
+ },
+ "pac-resolver": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-2.0.0.tgz",
+ "integrity": "sha1-mbiNLxk/ve78HJpSnB8yYKtSd80=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "co": "3.0.6",
+ "degenerator": "1.0.4",
+ "ip": "1.0.1",
+ "netmask": "1.0.6",
+ "thunkify": "2.1.2"
+ },
+ "dependencies": {
+ "co": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/co/-/co-3.0.6.tgz",
+ "integrity": "sha1-FEXyJsXrlWE45oyawwFn6n0ua9o=",
+ "dev": true,
+ "optional": true
+ },
+ "ip": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.0.1.tgz",
+ "integrity": "sha1-x+NWzeoiWucbNtcPLnGpK6TkJZA=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "pako": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "requires": {
+ "no-case": "2.3.2"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "requires": {
+ "asn1.js": "4.10.1",
+ "browserify-aes": "1.1.1",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.14"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "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="
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
+ },
+ "path-proxy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz",
+ "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "inflection": "1.3.8"
+ },
+ "dependencies": {
+ "inflection": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz",
+ "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=",
+ "dev": true,
+ "optional": 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="
+ },
+ "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"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
+ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "requires": {
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.10"
+ }
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "dev": true
+ },
+ "phantomjs-prebuilt": {
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
+ "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "4.2.4",
+ "extract-zip": "1.6.6",
+ "fs-extra": "1.0.0",
+ "hasha": "2.2.0",
+ "kew": "0.7.0",
+ "progress": "1.1.8",
+ "request": "2.81.0",
+ "request-progress": "2.0.1",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
+ "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "2.4.0",
+ "klaw": "1.3.1"
+ }
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ }
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "requires": {
+ "find-up": "2.1.0"
+ }
+ },
+ "portfinder": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
+ "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "debug": "2.6.9",
+ "mkdirp": "0.5.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "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="
+ },
+ "postcss": {
+ "version": "6.0.20",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz",
+ "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==",
+ "requires": {
+ "chalk": "2.3.2",
+ "source-map": "0.6.1",
+ "supports-color": "5.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-message-helpers": "2.0.0",
+ "reduce-css-calc": "1.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "requires": {
+ "colormin": "1.1.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-filter-plugins": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz",
+ "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=",
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqid": "4.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-flexbugs-fixes": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.3.0.tgz",
+ "integrity": "sha512-15JauG6a2hu2XZHdB9BaOwCLrI9oyK2UB8kt1ToTGdP1Pd3BQ/TJI9tNiTALntll25/66xMLUIyUPA9w/3BLtg==",
+ "requires": {
+ "postcss": "6.0.20"
+ }
+ },
+ "postcss-import": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.1.0.tgz",
+ "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==",
+ "dev": true,
+ "requires": {
+ "postcss": "6.0.20",
+ "postcss-value-parser": "3.3.0",
+ "read-cache": "1.0.0",
+ "resolve": "1.5.0"
+ }
+ },
+ "postcss-load-config": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz",
+ "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1",
+ "postcss-load-options": "1.2.0",
+ "postcss-load-plugins": "2.3.0"
+ }
+ },
+ "postcss-load-options": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz",
+ "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1"
+ }
+ },
+ "postcss-load-plugins": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz",
+ "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1"
+ }
+ },
+ "postcss-loader": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.2.tgz",
+ "integrity": "sha512-Hf7gcgJKlJivXZAMprvVq6m6t7lZSkiih4Sa7cOoCd8sEHGMnH/Yc0CbWT2cL1ag+XEKh6nsdpgF6yNHplpa9Q==",
+ "requires": {
+ "loader-utils": "1.1.0",
+ "postcss": "6.0.20",
+ "postcss-load-config": "1.2.0",
+ "schema-utils": "0.4.5"
+ }
+ },
+ "postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-api": "1.6.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3",
+ "vendors": "1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "1.0.30000827",
+ "electron-to-chromium": "1.3.39"
+ }
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4="
+ },
+ "postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "uniqs": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz",
+ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=",
+ "requires": {
+ "postcss": "6.0.20"
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
+ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.20"
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
+ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.20"
+ }
+ },
+ "postcss-modules-values": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
+ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+ "requires": {
+ "icss-replace-symbols": "1.1.0",
+ "postcss": "6.0.20"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "requires": {
+ "is-absolute-url": "2.1.0",
+ "normalize-url": "1.9.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "requires": {
+ "flatten": "1.0.2",
+ "indexes-of": "1.0.1",
+ "uniq": "1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "requires": {
+ "is-svg": "2.1.0",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "svgo": "0.7.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-url": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.1.tgz",
+ "integrity": "sha512-Ya5KIjGptgz0OtrVYfi2UbLxVAZ6Emc4Of+Grx4Sf1deWlRpFwLr8FrtkUxfqh+XiZIVkXbjQrddE10ESpNmdA==",
+ "dev": true,
+ "requires": {
+ "mime": "1.6.0",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "postcss": "6.0.20",
+ "xxhashjs": "0.2.2"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
+ "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU="
+ },
+ "postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.3",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "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="
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "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=",
+ "requires": {
+ "renderkid": "2.0.1",
+ "utila": "0.4.0"
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "progress": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+ "dev": true
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "requires": {
+ "asap": "2.0.6"
+ }
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+ },
+ "promise.prototype.finally": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz",
+ "integrity": "sha512-7p/K2f6dI+dM8yjRQEGrTQs5hTQixUAdOGpMEA3+pVxpX5oHKRSKAXyLw9Q9HUWDTdwtoo39dSHGQtN90HcEwQ==",
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0",
+ "function-bind": "1.1.1"
+ }
+ },
+ "prop-types": {
+ "version": "15.6.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz",
+ "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==",
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "protractor": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.1.2.tgz",
+ "integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.60",
+ "@types/q": "0.0.32",
+ "@types/selenium-webdriver": "2.53.43",
+ "blocking-proxy": "0.0.5",
+ "chalk": "1.1.3",
+ "glob": "7.1.2",
+ "jasmine": "2.99.0",
+ "jasminewd2": "2.2.0",
+ "optimist": "0.6.1",
+ "q": "1.4.1",
+ "saucelabs": "1.3.0",
+ "selenium-webdriver": "3.0.1",
+ "source-map-support": "0.4.18",
+ "webdriver-js-extender": "1.0.0",
+ "webdriver-manager": "12.0.6"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "webdriver-manager": {
+ "version": "12.0.6",
+ "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz",
+ "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=",
+ "dev": true,
+ "requires": {
+ "adm-zip": "0.4.7",
+ "chalk": "1.1.3",
+ "del": "2.2.2",
+ "glob": "7.1.2",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "q": "1.4.1",
+ "request": "2.81.0",
+ "rimraf": "2.6.2",
+ "semver": "5.5.0",
+ "xml2js": "0.4.19"
+ }
+ }
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
+ "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
+ "requires": {
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.6.0"
+ }
+ },
+ "proxy-agent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-2.0.0.tgz",
+ "integrity": "sha1-V+tTR6qAXXTsaByyVknbo5yTNJk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "agent-base": "2.1.1",
+ "debug": "2.6.9",
+ "extend": "3.0.1",
+ "http-proxy-agent": "1.0.0",
+ "https-proxy-agent": "1.0.0",
+ "lru-cache": "2.6.5",
+ "pac-proxy-agent": "1.1.0",
+ "socks-proxy-agent": "2.1.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz",
+ "integrity": "sha1-5W1jVBSO3o13B7WNFDIg/QjfD9U=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "public-encrypt": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
+ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "parse-asn1": "5.1.0",
+ "randombytes": "2.0.6"
+ }
+ },
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz",
+ "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==",
+ "requires": {
+ "duplexify": "3.5.4",
+ "inherits": "2.0.3",
+ "pump": "2.0.1"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4="
+ },
+ "qjobs": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
+ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "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=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "strict-uri-encode": "1.1.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "querystringify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz",
+ "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw="
+ },
+ "radium": {
+ "version": "0.19.6",
+ "resolved": "https://registry.npmjs.org/radium/-/radium-0.19.6.tgz",
+ "integrity": "sha512-IABYntqCwYelUUIwA52maSCgJbqtJjHKIoD21wgpw3dGhIUbJ5chDShDGdaFiEzdF03hN9jfQqlmn0bF4YhfrQ==",
+ "requires": {
+ "array-find": "1.0.0",
+ "exenv": "1.2.2",
+ "inline-style-prefixer": "2.0.5",
+ "prop-types": "15.6.1"
+ },
+ "dependencies": {
+ "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.9.3",
+ "hyphenate-style-name": "1.0.2"
+ }
+ }
+ }
+ },
+ "ramda": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz",
+ "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU="
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "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.2.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.6"
+ }
+ }
+ }
+ },
+ "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.6"
+ }
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "requires": {
+ "randombytes": "2.0.6",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "raw-loader": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
+ "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=",
+ "dev": true
+ },
+ "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.3",
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.1"
+ }
+ },
+ "react-dev-utils": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-5.0.1.tgz",
+ "integrity": "sha512-+y92rG6pmXt3cpcg/NGmG4w/W309tWNSmyyPL8hCMxuCSg2UP/hUg3npACj2UZc8UKVSXexyLrCnxowizGoAsw==",
+ "requires": {
+ "address": "1.0.3",
+ "babel-code-frame": "6.26.0",
+ "chalk": "1.1.3",
+ "cross-spawn": "5.1.0",
+ "detect-port-alt": "1.1.6",
+ "escape-string-regexp": "1.0.5",
+ "filesize": "3.5.11",
+ "global-modules": "1.0.0",
+ "gzip-size": "3.0.0",
+ "inquirer": "3.3.0",
+ "is-root": "1.0.0",
+ "opn": "5.2.0",
+ "react-error-overlay": "4.0.0",
+ "recursive-readdir": "2.2.1",
+ "shell-quote": "1.6.1",
+ "sockjs-client": "1.1.4",
+ "strip-ansi": "3.0.1",
+ "text-table": "0.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "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.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "requires": {
+ "lru-cache": "4.1.2",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "opn": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz",
+ "integrity": "sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==",
+ "requires": {
+ "is-wsl": "1.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "react-docgen": {
+ "version": "3.0.0-beta9",
+ "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-3.0.0-beta9.tgz",
+ "integrity": "sha512-3UqwxygAP/eZdDtOKum6vClKWUlceZ7RBVQ3Fe122l1WBYOqHcBzoUZIwN8feaLVo+s2eB/q+NkBfanLgvmt+w==",
+ "requires": {
+ "async": "2.6.0",
+ "babel-runtime": "6.26.0",
+ "babylon": "7.0.0-beta.31",
+ "commander": "2.15.0",
+ "doctrine": "2.1.0",
+ "node-dir": "0.1.17",
+ "recast": "0.12.9"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.31.tgz",
+ "integrity": "sha512-6lm2mV3S51yEnKmQQNnswoABL1U1H1KHoCCVwdwI3hvIv+W7ya4ki7Aw4o4KxtUHjNKkK5WpZb22rrMMOcJXJQ=="
+ }
+ }
+ },
+ "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.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.1"
+ }
+ },
+ "react-error-overlay": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-4.0.0.tgz",
+ "integrity": "sha512-FlsPxavEyMuR6TjVbSSywovXSEyOg6ZDj5+Z8nbsRl9EkOzAhEIcS+GLoQDC5fz/t9suhUXWmUrOBrgeUvrMxw=="
+ },
+ "react-fuzzy": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/react-fuzzy/-/react-fuzzy-0.5.2.tgz",
+ "integrity": "sha512-qIZZxaCheb/HhcBi5fABbiCFg85+K5r1TCps1D4uaL0LAMMD/1zm/x1/kNR130Tx7nnY9V7mbFyY0DquPYeLAw==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "classnames": "2.2.5",
+ "fuse.js": "3.2.0",
+ "prop-types": "15.6.1"
+ }
+ },
+ "react-html-attributes": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/react-html-attributes/-/react-html-attributes-1.4.1.tgz",
+ "integrity": "sha1-l7XscQ2miDNZjIvm+JrENiFoQKU=",
+ "requires": {
+ "html-element-attributes": "1.3.0"
+ }
+ },
+ "react-icon-base": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/react-icon-base/-/react-icon-base-2.1.0.tgz",
+ "integrity": "sha1-oZbjP98eeqof2jrvu2i9rZ6Cp50="
+ },
+ "react-icons": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-2.2.7.tgz",
+ "integrity": "sha512-0n4lcGqzJFcIQLoQytLdJCE0DKSA9dkwEZRYoGrIDJZFvIT6Hbajx5mv9geqhqFiNjUgtxg8kPyDfjlhymbGFg==",
+ "requires": {
+ "react-icon-base": "2.1.0"
+ }
+ },
+ "react-inspector": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-2.3.0.tgz",
+ "integrity": "sha512-aIcbWb0fKFhEMB+RadoOYawlr1JoMMfrQ1oRgPUG/f/e4zERVJ6nYcIaQmrQmdHCZ63BOqe2cEkoeY0kyLBzNg==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "is-dom": "1.0.9"
+ }
+ },
+ "react-modal": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.3.2.tgz",
+ "integrity": "sha512-DLrmPG9PyXWSNA2ve1LttnNRE9Umy3u3awFeK+72dLOksLM+EoTg8Z2h/i/DV3O8ZGvnEhacjAVXdZuRDGvaag==",
+ "requires": {
+ "exenv": "1.2.2",
+ "prop-types": "15.6.1",
+ "warning": "3.0.0"
+ }
+ },
+ "react-split-pane": {
+ "version": "0.1.77",
+ "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.77.tgz",
+ "integrity": "sha512-xq0PPsbkNI9xEd6yTrGPr7hzf6XfIgnsxuUEdRJELq+kLPHMsO3ymFCjhiYP35wlDPn9W46+rHDsJd7LFYteMw==",
+ "requires": {
+ "inline-style-prefixer": "3.0.8",
+ "prop-types": "15.6.1",
+ "react-style-proptype": "3.2.1"
+ }
+ },
+ "react-style-proptype": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.2.1.tgz",
+ "integrity": "sha512-Z02QsgmdZ4wYNxJsHhNGGZsIF8+MO93fYmdPaC+ljdqX3rq8tl/fSMXOGBbofGJNzq5W/2LFcONllmV6vzyYHA==",
+ "requires": {
+ "prop-types": "15.6.1"
+ }
+ },
+ "react-transition-group": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.1.tgz",
+ "integrity": "sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q==",
+ "requires": {
+ "chain-function": "1.0.0",
+ "dom-helpers": "3.3.1",
+ "loose-envify": "1.3.1",
+ "prop-types": "15.6.1",
+ "warning": "3.0.0"
+ }
+ },
+ "react-treebeard": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/react-treebeard/-/react-treebeard-2.1.0.tgz",
+ "integrity": "sha512-unoy8IJL1NR5jgTtK+CqOCZKZylh/Tlid0oYajW9bLZCbFelxzmCsF8Y2hyS6pvHqM4W501oOm5O/jvg3VZCrg==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "deep-equal": "1.0.1",
+ "prop-types": "15.6.1",
+ "radium": "0.19.6",
+ "shallowequal": "0.2.2",
+ "velocity-react": "1.3.3"
+ }
+ },
+ "read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ },
+ "dependencies": {
+ "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.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ },
+ "dependencies": {
+ "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.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "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": "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.1.2",
+ "read-pkg": "1.1.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.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "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.1"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
+ "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.5",
+ "set-immediate-shim": "1.0.1"
+ }
+ },
+ "recast": {
+ "version": "0.12.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz",
+ "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==",
+ "requires": {
+ "ast-types": "0.10.1",
+ "core-js": "2.4.1",
+ "esprima": "4.0.0",
+ "private": "0.1.8",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "ast-types": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz",
+ "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ=="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "requires": {
+ "resolve": "1.5.0"
+ }
+ },
+ "recursive-readdir": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.1.tgz",
+ "integrity": "sha1-kO8jHQd4xc4JPJpI105cVCLROpk=",
+ "requires": {
+ "minimatch": "3.0.3"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "redis": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz",
+ "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "double-ended-queue": "2.1.0-0",
+ "redis-commands": "1.3.5",
+ "redis-parser": "2.6.0"
+ }
+ },
+ "redis-commands": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz",
+ "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==",
+ "dev": true,
+ "optional": true
+ },
+ "redis-parser": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz",
+ "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=",
+ "dev": true,
+ "optional": true
+ },
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "requires": {
+ "balanced-match": "0.4.2",
+ "math-expression-evaluator": "1.2.17",
+ "reduce-function-call": "1.0.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
+ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "requires": {
+ "balanced-match": "0.4.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "redux": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
+ "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
+ "requires": {
+ "lodash": "4.17.5",
+ "lodash-es": "4.17.8",
+ "loose-envify": "1.3.1",
+ "symbol-observable": "1.2.0"
+ }
+ },
+ "redux-observable": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/redux-observable/-/redux-observable-0.18.0.tgz",
+ "integrity": "sha512-tu02n6jr6/bq/vyI9E/AHxIyIl0YsWloqvWqSBG0KqN6aQBujMBP6hlDAlQLj8hP+XQpqL293MLX6V612c0jSg==",
+ "requires": {
+ "gitbook-plugin-github": "2.0.0"
+ }
+ },
+ "reflect-metadata": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz",
+ "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A=="
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg=="
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "regexpu-core": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
+ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "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="
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
+ },
+ "remap-istanbul": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.9.6.tgz",
+ "integrity": "sha512-l0WDBsVjaTzP8m3glERJO6bjlAFUahcgfcgvcX+owZw7dKeDLT3CVRpS7UO4L9LfGcMiNsqk223HopwVxlh8Hg==",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1",
+ "gulp-util": "3.0.7",
+ "istanbul": "0.4.5",
+ "minimatch": "3.0.4",
+ "source-map": "0.6.1",
+ "through2": "2.0.1"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "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
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz",
+ "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.0.6",
+ "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="
+ },
+ "renderkid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz",
+ "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=",
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-converter": "0.1.4",
+ "htmlparser2": "3.3.0",
+ "strip-ansi": "3.0.1",
+ "utila": "0.3.3"
+ },
+ "dependencies": {
+ "utila": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
+ "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY="
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "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.2"
+ }
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.81.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "4.2.1",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.18",
+ "oauth-sign": "0.8.2",
+ "performance-now": "0.2.0",
+ "qs": "6.4.0",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.4",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.2.1"
+ }
+ },
+ "request-progress": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
+ "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
+ "dev": true,
+ "requires": {
+ "throttleit": "1.0.0"
+ }
+ },
+ "requestretry": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz",
+ "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "extend": "3.0.1",
+ "lodash": "4.17.5",
+ "request": "2.81.0",
+ "when": "3.7.8"
+ },
+ "dependencies": {
+ "when": {
+ "version": "3.7.8",
+ "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz",
+ "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-from-string": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
+ "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg="
+ },
+ "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="
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "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"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "global-modules": "1.0.0"
+ }
+ },
+ "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-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "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.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ }
+ },
+ "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-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "requires": {
+ "aproba": "1.2.0"
+ }
+ },
+ "rx": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ="
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "rxjs": {
+ "version": "5.5.6",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz",
+ "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==",
+ "requires": {
+ "symbol-observable": "1.0.1"
+ },
+ "dependencies": {
+ "symbol-observable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
+ "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ="
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.17.5",
+ "scss-tokenizer": "0.2.3",
+ "yargs": "7.1.0"
+ }
+ },
+ "sass-loader": {
+ "version": "6.0.7",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz",
+ "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==",
+ "dev": true,
+ "requires": {
+ "clone-deep": "2.0.2",
+ "loader-utils": "1.1.0",
+ "lodash.tail": "4.1.1",
+ "neo-async": "2.5.0",
+ "pify": "3.0.0"
+ }
+ },
+ "saucelabs": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz",
+ "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=",
+ "dev": true,
+ "requires": {
+ "https-proxy-agent": "1.0.0"
+ }
+ },
+ "sax": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+ "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz",
+ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==",
+ "requires": {
+ "ajv": "6.3.0",
+ "ajv-keywords": "3.1.0"
+ }
+ },
+ "scss-tokenizer": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "js-base64": "2.4.3",
+ "source-map": "0.4.4"
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "sdc-ui": {
+ "version": "1.6.29-angular5",
+ "resolved": "https://registry.npmjs.org/sdc-ui/-/sdc-ui-1.6.29-angular5.tgz",
+ "integrity": "sha1-lZEY6CCYeamY1bqZaX4bImoK/m8=",
+ "requires": {
+ "@angular/animations": "5.2.9",
+ "@angular/common": "5.2.0",
+ "@angular/core": "5.2.0",
+ "@angular/forms": "5.2.0",
+ "@angular/http": "5.2.0",
+ "@angular/platform-browser": "5.2.0",
+ "@angular/platform-browser-dynamic": "5.2.0",
+ "@angular/upgrade": "5.2.9",
+ "@storybook/react": "3.4.1",
+ "http-loader": "0.0.1",
+ "prop-types": "15.6.1",
+ "react": "15.6.2",
+ "react-dom": "15.6.2",
+ "reflect-metadata": "0.1.12",
+ "rxjs": "5.4.2",
+ "svg-react-loader": "0.4.5",
+ "zone.js": "0.8.19"
+ },
+ "dependencies": {
+ "@angular/animations": {
+ "version": "5.2.9",
+ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.9.tgz",
+ "integrity": "sha512-H/3fMs4PhYjKoA81II6D0PHifDrqlKet2u/EXzUBq3ehXby+N/0GBzqsBYwPeU5pTye7WPFfW+5sgoJpN8Ye6Q==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "@angular/upgrade": {
+ "version": "5.2.9",
+ "resolved": "https://registry.npmjs.org/@angular/upgrade/-/upgrade-5.2.9.tgz",
+ "integrity": "sha512-R3LwId5J8ynlzDaeD+SFe1HWuxM0Xqg6Ugl3vzxDWDKuzbFCdEsc2ZvhMpASrfs+JPdazANHoFPLrRaeXulWeQ==",
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "rxjs": {
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.2.tgz",
+ "integrity": "sha1-KjI2/L8D31e64G/Wly/ZnlwI/Pc=",
+ "requires": {
+ "symbol-observable": "1.2.0"
+ }
+ }
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selenium-webdriver": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz",
+ "integrity": "sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=",
+ "dev": true,
+ "requires": {
+ "adm-zip": "0.4.7",
+ "rimraf": "2.6.2",
+ "tmp": "0.0.30",
+ "xml2js": "0.4.19"
+ },
+ "dependencies": {
+ "tmp": {
+ "version": "0.0.30",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
+ "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ }
+ }
+ },
+ "selfsigned": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.2.tgz",
+ "integrity": "sha1-tESVgNmZKbZbEKSDiTAaZZIIh1g=",
+ "dev": true,
+ "requires": {
+ "node-forge": "0.7.1"
+ }
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
+ },
+ "semver-dsl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz",
+ "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=",
+ "dev": true,
+ "requires": {
+ "semver": "5.5.0"
+ }
+ },
+ "semver-intersect": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.3.1.tgz",
+ "integrity": "sha1-j6hKnhAovSOeRTDRo+GB5pjYhLo=",
+ "dev": true,
+ "requires": {
+ "semver": "5.5.0"
+ }
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "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.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.4.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz",
+ "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU="
+ },
+ "serve-favicon": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
+ "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=",
+ "requires": {
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "ms": "2.1.1",
+ "parseurl": "1.3.2",
+ "safe-buffer": "5.1.1"
+ },
+ "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=="
+ }
+ }
+ },
+ "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.5",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "1.0.3",
+ "http-errors": "1.6.2",
+ "mime-types": "2.1.18",
+ "parseurl": "1.3.2"
+ }
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "requires": {
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "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.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.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=",
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+ },
+ "sha.js": {
+ "version": "2.4.10",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz",
+ "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "shallow-clone": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
+ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1",
+ "kind-of": "5.1.0",
+ "mixin-object": "2.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "shallowequal": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz",
+ "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=",
+ "requires": {
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "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="
+ },
+ "shell-quote": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "requires": {
+ "array-filter": "0.0.1",
+ "array-map": "0.0.0",
+ "array-reduce": "0.0.0",
+ "jsonify": "0.0.0"
+ }
+ },
+ "shelljs": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz",
+ "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==",
+ "requires": {
+ "glob": "7.1.2",
+ "interpret": "1.1.0",
+ "rechoir": "0.6.2"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "silent-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz",
+ "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9"
+ }
+ },
+ "slack-node": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz",
+ "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "requestretry": "1.13.0"
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+ "dev": true
+ },
+ "smart-buffer": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz",
+ "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=",
+ "dev": true
+ },
+ "smtp-connection": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz",
+ "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=",
+ "dev": true,
+ "requires": {
+ "httpntlm": "1.6.1",
+ "nodemailer-shared": "1.1.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "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=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "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=",
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "socket.io": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz",
+ "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "engine.io": "3.1.5",
+ "socket.io-adapter": "1.1.1",
+ "socket.io-client": "2.0.4",
+ "socket.io-parser": "3.1.3"
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
+ "dev": true
+ },
+ "socket.io-client": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz",
+ "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.6.9",
+ "engine.io-client": "3.1.6",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "3.1.3",
+ "to-array": "0.1.4"
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz",
+ "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "3.1.0",
+ "has-binary2": "1.0.2",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "sockjs": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
+ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "0.10.0",
+ "uuid": "3.2.1"
+ }
+ },
+ "sockjs-client": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz",
+ "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=",
+ "requires": {
+ "debug": "2.6.9",
+ "eventsource": "0.1.6",
+ "faye-websocket": "0.11.1",
+ "inherits": "2.0.3",
+ "json3": "3.3.2",
+ "url-parse": "1.2.0"
+ },
+ "dependencies": {
+ "faye-websocket": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
+ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+ "requires": {
+ "websocket-driver": "0.7.0"
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz",
+ "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=",
+ "dev": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "1.1.15"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz",
+ "integrity": "sha512-sFtmYqdUK5dAMh85H0LEVFUCO7OhJJe1/z2x/Z6mxp3s7/QPf1RkZmpZy+BpuU0bEjcV9npqKjq9Y3kwFUjnxw==",
+ "dev": true,
+ "requires": {
+ "agent-base": "2.1.1",
+ "extend": "3.0.1",
+ "socks": "1.1.10"
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "requires": {
+ "is-plain-obj": "1.1.0"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
+ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "requires": {
+ "atob": "2.0.3",
+ "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.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "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="
+ },
+ "sparkles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
+ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "requires": {
+ "spdx-expression-parse": "3.0.0",
+ "spdx-license-ids": "3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg=="
+ },
+ "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==",
+ "requires": {
+ "spdx-exceptions": "2.1.0",
+ "spdx-license-ids": "3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA=="
+ },
+ "spdy": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
+ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "handle-thing": "1.2.5",
+ "http-deceiver": "1.2.7",
+ "safe-buffer": "5.1.1",
+ "select-hose": "2.0.0",
+ "spdy-transport": "2.0.20"
+ }
+ },
+ "spdy-transport": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz",
+ "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "detect-node": "2.0.3",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.2",
+ "readable-stream": "2.3.5",
+ "safe-buffer": "5.1.1",
+ "wbuf": "1.7.3"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
+ "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "ssri": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
+ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "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=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ },
+ "stdout-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
+ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "readable-stream": "2.3.5"
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz",
+ "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==",
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz",
+ "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==",
+ "requires": {
+ "builtin-status-codes": "3.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5",
+ "to-arraybuffer": "1.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
+ },
+ "stream-to-observable": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz",
+ "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=",
+ "dev": true
+ },
+ "streamroller": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
+ "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
+ "dev": true,
+ "requires": {
+ "date-format": "1.2.0",
+ "debug": "3.1.0",
+ "mkdirp": "0.5.1",
+ "readable-stream": "2.3.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "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="
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string.prototype.padend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
+ "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0",
+ "function-bind": "1.1.1"
+ }
+ },
+ "string.prototype.padstart": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz",
+ "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=",
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0",
+ "function-bind": "1.1.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "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.1.1"
+ }
+ },
+ "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.1"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "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": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "style-loader": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.1.tgz",
+ "integrity": "sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2"
+ }
+ }
+ }
+ },
+ "stylus": {
+ "version": "0.54.5",
+ "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
+ "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
+ "dev": true,
+ "requires": {
+ "css-parse": "1.7.0",
+ "debug": "2.6.9",
+ "glob": "7.0.6",
+ "mkdirp": "0.5.1",
+ "sax": "0.5.8",
+ "source-map": "0.1.43"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "stylus-loader": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz",
+ "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "lodash.clonedeep": "4.5.0",
+ "when": "3.6.4"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "svg-react-loader": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/svg-react-loader/-/svg-react-loader-0.4.5.tgz",
+ "integrity": "sha1-HzJMnHuFj1yJ+sdSu+nKP2IU+FA=",
+ "requires": {
+ "css": "2.2.1",
+ "loader-utils": "1.1.0",
+ "ramda": "0.21.0",
+ "rx": "4.1.0",
+ "traverse": "0.6.6",
+ "xml2js": "0.4.17"
+ },
+ "dependencies": {
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "xml2js": {
+ "version": "0.4.17",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz",
+ "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=",
+ "requires": {
+ "sax": "1.2.4",
+ "xmlbuilder": "4.2.1"
+ }
+ },
+ "xmlbuilder": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz",
+ "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=",
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ }
+ }
+ },
+ "svg-tag-names": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/svg-tag-names/-/svg-tag-names-1.1.1.tgz",
+ "integrity": "sha1-lkGynvcQJe4JTHBD983efZn71Qo="
+ },
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "requires": {
+ "coa": "1.0.4",
+ "colors": "1.1.2",
+ "csso": "2.3.2",
+ "js-yaml": "3.7.0",
+ "mkdirp": "0.5.1",
+ "sax": "1.2.4",
+ "whet.extend": "0.9.9"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
+ },
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "requires": {
+ "argparse": "1.0.10",
+ "esprima": "2.7.3"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ }
+ }
+ },
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
+ },
+ "tapable": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
+ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI="
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "terminal-banner": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/terminal-banner/-/terminal-banner-1.1.0.tgz",
+ "integrity": "sha512-A70B8Io5gGOTKQuoqU6LUPLouNd9DvFLgw3cPh6bfrQjdy7HWW1t04VJfQwjTnygTVDX0xremaj1cg3SQaCGyg==",
+ "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="
+ },
+ "throttleit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
+ "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
+ "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.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "requires": {
+ "readable-stream": "2.3.5",
+ "xtend": "4.0.1"
+ }
+ },
+ "thunkify": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz",
+ "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=",
+ "dev": true,
+ "optional": true
+ },
+ "thunky": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz",
+ "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=",
+ "dev": true
+ },
+ "time-stamp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz",
+ "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c="
+ },
+ "timers-browserify": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz",
+ "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==",
+ "requires": {
+ "setimmediate": "1.0.5"
+ }
+ },
+ "timespan": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz",
+ "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=",
+ "dev": true,
+ "optional": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "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=",
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ }
+ }
+ },
+ "toposort": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz",
+ "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw="
+ },
+ "tough-cookie": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
+ },
+ "tree-kill": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz",
+ "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==",
+ "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-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "true-case-path": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz",
+ "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "6.0.4"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ }
+ }
+ },
+ "ts-loader": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-3.2.0.tgz",
+ "integrity": "sha512-4g8BF3gKWBHeM1jAFmMPHofuJlwTUU4iHJ0i3mwXRHwy74RU6VBOgl9kDVMGpapvGcMlVqV5G6v9XmV66Qqd7w==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.1",
+ "enhanced-resolve": "3.4.1",
+ "loader-utils": "1.1.0",
+ "semver": "5.5.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.4.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
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
+ }
+ },
+ "ts-node": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-4.1.0.tgz",
+ "integrity": "sha512-xcZH12oVg9PShKhy3UHyDmuDLV3y7iKwX25aMVPt1SIXSuAfWkFiGPEkg+th8R4YKW/QCxDoW7lJdb15lx6QWg==",
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "chalk": "2.3.2",
+ "diff": "3.5.0",
+ "make-error": "1.3.4",
+ "minimist": "1.2.0",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.5.4",
+ "tsconfig": "7.0.0",
+ "v8flags": "3.0.2",
+ "yn": "2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.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
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "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
+ },
+ "source-map-support": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz",
+ "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.6.1"
+ }
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
+ }
+ },
+ "tsconfig": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz",
+ "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==",
+ "dev": true,
+ "requires": {
+ "@types/strip-bom": "3.0.0",
+ "@types/strip-json-comments": "0.0.30",
+ "strip-bom": "3.0.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "tsickle": {
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.26.0.tgz",
+ "integrity": "sha512-eWJ2CUfttGK0LqF9iJ/Avnxbj4M+fCyJ50Zag3wm73Fut1hsasPRHKxKdrMWVj4BMHnQNx7TO+DdNmLmJTSuNw==",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0",
+ "mkdirp": "0.5.1",
+ "source-map": "0.5.7",
+ "source-map-support": "0.4.18"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "tslib": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+ },
+ "tslint": {
+ "version": "5.9.1",
+ "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz",
+ "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "builtin-modules": "1.1.1",
+ "chalk": "2.3.2",
+ "commander": "2.15.0",
+ "diff": "3.5.0",
+ "glob": "7.1.2",
+ "js-yaml": "3.11.0",
+ "minimatch": "3.0.4",
+ "resolve": "1.5.0",
+ "semver": "5.5.0",
+ "tslib": "1.9.0",
+ "tsutils": "2.22.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.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
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
+ }
+ },
+ "tsscmp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz",
+ "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=",
+ "dev": true,
+ "optional": true
+ },
+ "tsutils": {
+ "version": "2.22.2",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.22.2.tgz",
+ "integrity": "sha512-u06FUSulCJ+Y8a2ftuqZN6kIGqdP2yJjUPEngXqmdPND4UQfb04igcotH+dw+IFr417yP6muCLE8/5/Qlfnx0w==",
+ "dev": true,
+ "requires": {
+ "tslib": "1.9.0"
+ }
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "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.1.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": 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-is": {
+ "version": "1.6.16",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.18"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "typescript": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.3.tgz",
+ "integrity": "sha512-ptLSQs2S4QuS6/OD1eAKG+S5G8QQtrU5RT32JULdZQtM1L3WTi34Wsu48Yndzi8xsObRAB9RPt/KhA9wlpEF6w==",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.17",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g=="
+ },
+ "uglify-js": {
+ "version": "3.3.16",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.16.tgz",
+ "integrity": "sha512-FMh5SRqJRGhv9BbaTffENIpDDQIoPDR8DBraunGORGhySArsXlw9++CN+BWzPBLpoI4RcSnpfGPnilTxWL3Vvg==",
+ "requires": {
+ "commander": "2.15.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=="
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "optional": true
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz",
+ "integrity": "sha512-z0IbjpW8b3O/OVn+TTZN4pI29RN1zktFBXLIzzfZ+++cUtZ1ERSlLWgpE/5OERuEUs1ijVQnpYAkSlpoVmQmSQ==",
+ "requires": {
+ "cacache": "10.0.4",
+ "find-cache-dir": "1.0.0",
+ "schema-utils": "0.4.5",
+ "serialize-javascript": "1.4.0",
+ "source-map": "0.6.1",
+ "uglify-es": "3.3.9",
+ "webpack-sources": "1.1.0",
+ "worker-farm": "1.6.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+ "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA=="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "uglify-es": {
+ "version": "3.3.9",
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
+ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
+ "requires": {
+ "commander": "2.13.0",
+ "source-map": "0.6.1"
+ }
+ }
+ }
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
+ "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ },
+ "uniqid": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz",
+ "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=",
+ "requires": {
+ "macaddress": "0.2.8"
+ }
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI="
+ },
+ "unique-filename": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
+ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=",
+ "requires": {
+ "unique-slug": "2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
+ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
+ "requires": {
+ "imurmurhash": "0.1.4"
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "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="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "upath": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz",
+ "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw=="
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "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="
+ }
+ }
+ },
+ "url-loader": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz",
+ "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==",
+ "requires": {
+ "loader-utils": "1.1.0",
+ "mime": "1.6.0",
+ "schema-utils": "0.3.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "requires": {
+ "ajv": "5.5.2"
+ }
+ }
+ }
+ },
+ "url-parse": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
+ "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==",
+ "requires": {
+ "querystringify": "1.0.0",
+ "requires-port": "1.0.0"
+ },
+ "dependencies": {
+ "querystringify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz",
+ "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs="
+ }
+ }
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "requires": {
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
+ },
+ "uws": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz",
+ "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==",
+ "dev": true,
+ "optional": true
+ },
+ "v8flags": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.2.tgz",
+ "integrity": "sha512-6sgSKoFw1UpUPd3cFdF7QGnrH6tDeBgW1F3v9gy8gLY0mlbiBXq8soy8aQpY6xeeCjH5K+JvC62Acp7gtl7wWA==",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+ "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="
+ },
+ "velocity-animate": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/velocity-animate/-/velocity-animate-1.5.1.tgz",
+ "integrity": "sha512-VJ3csMz5zP1ifkbBlsNYpxnoWkPHfVRQ8tUongS78W5DxSGHB68pjYHDTgUYBkVM7P/HpYdVukgVUFcxjr1gGg=="
+ },
+ "velocity-react": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/velocity-react/-/velocity-react-1.3.3.tgz",
+ "integrity": "sha1-1tRyds/Ivip1Yjh5sgFArFjBuCs=",
+ "requires": {
+ "lodash": "3.10.1",
+ "prop-types": "15.6.1",
+ "react-transition-group": "1.2.1",
+ "velocity-animate": "1.5.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+ }
+ }
+ },
+ "vendors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz",
+ "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI="
+ },
+ "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.3.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "vinyl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ }
+ }
+ },
+ "vlq": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+ "dev": true
+ },
+ "warning": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+ "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "watchpack": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz",
+ "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==",
+ "requires": {
+ "chokidar": "2.0.2",
+ "graceful-fs": "4.1.11",
+ "neo-async": "2.5.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "requires": {
+ "micromatch": "3.1.9",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "braces": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
+ "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==",
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "kind-of": "6.0.2",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz",
+ "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==",
+ "requires": {
+ "anymatch": "2.0.0",
+ "async-each": "1.0.1",
+ "braces": "2.3.1",
+ "fsevents": "1.1.3",
+ "glob-parent": "3.1.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "4.0.0",
+ "normalize-path": "2.1.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0",
+ "upath": "1.0.4"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "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=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "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.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ },
+ "micromatch": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz",
+ "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==",
+ "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.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "webdriver-js-extender": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz",
+ "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=",
+ "dev": true,
+ "requires": {
+ "@types/selenium-webdriver": "2.53.43",
+ "selenium-webdriver": "2.53.3"
+ },
+ "dependencies": {
+ "adm-zip": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz",
+ "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=",
+ "dev": true
+ },
+ "sax": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz",
+ "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=",
+ "dev": true
+ },
+ "selenium-webdriver": {
+ "version": "2.53.3",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz",
+ "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=",
+ "dev": true,
+ "requires": {
+ "adm-zip": "0.4.4",
+ "rimraf": "2.6.2",
+ "tmp": "0.0.24",
+ "ws": "1.1.5",
+ "xml2js": "0.4.4"
+ }
+ },
+ "tmp": {
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz",
+ "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=",
+ "dev": true
+ },
+ "ultron": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
+ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=",
+ "dev": true
+ },
+ "ws": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
+ "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
+ "dev": true,
+ "requires": {
+ "options": "0.0.6",
+ "ultron": "1.0.2"
+ }
+ },
+ "xml2js": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz",
+ "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=",
+ "dev": true,
+ "requires": {
+ "sax": "0.6.1",
+ "xmlbuilder": "9.0.7"
+ }
+ }
+ }
+ },
+ "webpack": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz",
+ "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==",
+ "requires": {
+ "acorn": "5.5.3",
+ "acorn-dynamic-import": "2.0.2",
+ "ajv": "6.3.0",
+ "ajv-keywords": "3.1.0",
+ "async": "2.6.0",
+ "enhanced-resolve": "3.4.1",
+ "escope": "3.6.0",
+ "interpret": "1.1.0",
+ "json-loader": "0.5.7",
+ "json5": "0.5.1",
+ "loader-runner": "2.3.0",
+ "loader-utils": "1.1.0",
+ "memory-fs": "0.4.1",
+ "mkdirp": "0.5.1",
+ "node-libs-browser": "2.1.0",
+ "source-map": "0.5.7",
+ "supports-color": "4.5.0",
+ "tapable": "0.2.8",
+ "uglifyjs-webpack-plugin": "0.4.6",
+ "watchpack": "1.5.0",
+ "webpack-sources": "1.1.0",
+ "yargs": "8.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "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=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "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="
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
+ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-js": "2.8.29",
+ "webpack-sources": "1.1.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "requires": {
+ "camelcase": "4.1.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "read-pkg-up": "2.0.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "7.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "requires": {
+ "camelcase": "4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ }
+ }
+ }
+ }
+ },
+ "webpack-core": {
+ "version": "0.6.9",
+ "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz",
+ "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=",
+ "dev": true,
+ "requires": {
+ "source-list-map": "0.1.8",
+ "source-map": "0.4.4"
+ },
+ "dependencies": {
+ "source-list-map": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
+ "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=",
+ "dev": true
+ },
+ "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": "1.0.1"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz",
+ "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==",
+ "requires": {
+ "memory-fs": "0.4.1",
+ "mime": "1.6.0",
+ "path-is-absolute": "1.0.1",
+ "range-parser": "1.2.0",
+ "time-stamp": "2.0.0"
+ }
+ },
+ "webpack-dev-server": {
+ "version": "2.11.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz",
+ "integrity": "sha512-zrPoX97bx47vZiAXfDrkw8pe9QjJ+lunQl3dypojyWwWr1M5I2h0VSrMPfTjopHQPRNn+NqfjcMmhoLcUJe2gA==",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "array-includes": "3.0.3",
+ "bonjour": "3.5.0",
+ "chokidar": "2.0.2",
+ "compression": "1.7.2",
+ "connect-history-api-fallback": "1.5.0",
+ "debug": "3.1.0",
+ "del": "3.0.0",
+ "express": "4.16.3",
+ "html-entities": "1.2.1",
+ "http-proxy-middleware": "0.17.4",
+ "import-local": "1.0.0",
+ "internal-ip": "1.2.0",
+ "ip": "1.1.5",
+ "killable": "1.0.0",
+ "loglevel": "1.6.1",
+ "opn": "5.1.0",
+ "portfinder": "1.0.13",
+ "selfsigned": "1.10.2",
+ "serve-index": "1.9.1",
+ "sockjs": "0.3.19",
+ "sockjs-client": "1.1.4",
+ "spdy": "3.4.7",
+ "strip-ansi": "3.0.1",
+ "supports-color": "5.3.0",
+ "webpack-dev-middleware": "1.12.2",
+ "yargs": "6.6.0"
+ },
+ "dependencies": {
+ "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.9",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "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
+ },
+ "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
+ },
+ "braces": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
+ "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "kind-of": "6.0.2",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "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.2"
+ }
+ },
+ "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.1"
+ }
+ }
+ }
+ },
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz",
+ "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "2.0.0",
+ "async-each": "1.0.1",
+ "braces": "2.3.1",
+ "fsevents": "1.1.3",
+ "glob-parent": "3.1.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "4.0.0",
+ "normalize-path": "2.1.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0",
+ "upath": "1.0.4"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.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.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "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.6"
+ }
+ },
+ "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.1"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "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.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "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.2"
+ }
+ },
+ "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.1"
+ }
+ }
+ }
+ },
+ "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.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.1"
+ }
+ }
+ }
+ },
+ "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.2"
+ },
+ "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.1"
+ }
+ }
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "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.2.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.6"
+ }
+ }
+ }
+ },
+ "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.2.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.6"
+ }
+ }
+ }
+ },
+ "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-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "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.2.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.6"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz",
+ "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==",
+ "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.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
+ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "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": "4.2.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ }
+ }
+ }
+ },
+ "webpack-hot-middleware": {
+ "version": "2.22.0",
+ "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.22.0.tgz",
+ "integrity": "sha512-kmjTZ6WXZowuBfTk1/H/scmyp09eHwPpqF2mHRZ9WMCBlQ61NSkqZ25azPlPOeCIhva57PGrUyeTIW5X8Q7HEw==",
+ "requires": {
+ "ansi-html": "0.0.7",
+ "html-entities": "1.2.1",
+ "querystring": "0.2.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "webpack-merge": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.2.tgz",
+ "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
+ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
+ "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=="
+ }
+ }
+ },
+ "webpack-subresource-integrity": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.0.4.tgz",
+ "integrity": "sha1-j6yKfo61n8ahZ2ioXJ2U7n+dDts=",
+ "dev": true,
+ "requires": {
+ "webpack-core": "0.6.9"
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
+ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+ "requires": {
+ "http-parser-js": "0.4.11",
+ "websocket-extensions": "0.1.3"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
+ },
+ "whatwg-fetch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
+ "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
+ },
+ "when": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz",
+ "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=",
+ "dev": true
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE="
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "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.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ },
+ "worker-farm": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
+ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
+ "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=",
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
+ }
+ },
+ "xml-char-classes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
+ "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0="
+ },
+ "xml2js": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "dev": true,
+ "requires": {
+ "sax": "1.2.4",
+ "xmlbuilder": "9.0.7"
+ },
+ "dependencies": {
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ }
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+ "dev": true
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+ "dev": true
+ },
+ "xregexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
+ "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=",
+ "dev": true,
+ "optional": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "xxhashjs": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
+ "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==",
+ "dev": true,
+ "requires": {
+ "cuint": "0.2.2"
+ }
+ },
+ "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=="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "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,
+ "optional": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true,
+ "optional": 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,
+ "optional": 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,
+ "optional": true
+ }
+ }
+ },
+ "yauzl": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
+ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
+ "dev": true,
+ "requires": {
+ "fd-slicer": "1.0.1"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ },
+ "yn": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
+ "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
+ "dev": true
+ },
+ "zone.js": {
+ "version": "0.8.19",
+ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.19.tgz",
+ "integrity": "sha512-l9rofaOs6a4y1W8zt4pDmnCUCnYG377dG+5SZlXNWrTWYUuXFqcJZiOarhYiRVR0NI9sH/8ooPJiz4uprB/Mkg=="
+ }
+ }
+}
diff --git a/vid-webpack-master/package.json b/vid-webpack-master/package.json
new file mode 100644
index 000000000..8cb4b927d
--- /dev/null
+++ b/vid-webpack-master/package.json
@@ -0,0 +1,89 @@
+{
+ "name": "vid-cli",
+ "version": "0.0.0",
+ "license": "MIT",
+ "scripts": {
+ "ng": "ng",
+ "start": "ng serve --port 4201",
+ "build": "ng build --no-progress --no-aot",
+ "build.prod": "ng build",
+ "test": "ng test --c --single-run",
+ "lint": "ng lint --type-check --fix",
+ "coverage": "ng test --code-coverage",
+ "coverage-console": "ng test --c --single-run",
+ "e2e": "ng e2e",
+ "build-watch": "ng build --watch",
+ "cypress:open": "cypress open",
+ "cypress:open:dev": "cypress open --config baseUrl=http://localhost:8080/vid ",
+ "cypress:run": "cypress run"
+ },
+ "private": true,
+ "dependencies": {
+ "@angular-redux/store": "^7.1.1",
+ "@angular/animations": "5.2.0",
+ "@angular/cdk": "2.0.0-beta.12",
+ "@angular/common": "5.2.0",
+ "@angular/compiler": "5.2.0",
+ "@angular/core": "5.2.0",
+ "@angular/forms": "5.2.0",
+ "@angular/http": "5.2.0",
+ "@angular/platform-browser": "5.2.0",
+ "@angular/platform-browser-dynamic": "5.2.0",
+ "@angular/router": "5.2.0",
+ "@angularclass/hmr": "2.1.3",
+ "@angularclass/hmr-loader": "3.0.4",
+ "@harmowatch/ngx-redux-core": "0.2.2",
+ "@nicky-lenaers/ngx-scroll-to": "^0.6.1",
+ "@types/lodash": "4.14.91",
+ "angular-svg-icon": "^5.0.0",
+ "angular-tree-component": "7.0.1",
+ "angular2-datatable": "0.6.0",
+ "angular2-multiselect-dropdown": "2.5.0",
+ "bootstrap": "^3.3.7",
+ "core-js": "2.4.1",
+ "font-awesome": "^4.7.0",
+ "ng-multiselect-dropdown": "0.1.3",
+ "ng2-bootstrap-modal": "1.0.1",
+ "ngx-bootstrap": "^2.0.2",
+ "ngx-contextmenu": "4.1.2",
+ "ngx-datatable": "1.0.3",
+ "ngx-moment": "^2.0.0-rc.0",
+ "ngx-tooltip": "0.0.9",
+ "redux": "^3.7.2",
+ "redux-observable": "^0.18.0",
+ "rxjs": "5.5.6",
+ "sdc-ui": "^1.6.29-angular5",
+ "tslib": "1.9.x",
+ "zone.js": "0.8.19"
+ },
+ "devDependencies": {
+ "@angular/cli": "1.7.2",
+ "@angular/compiler-cli": "5.2.0",
+ "@angular/language-service": "5.2.0",
+ "@bahmutov/add-typescript-to-cypress": "^2.0.0",
+ "@types/chai": "^4.1.3",
+ "@types/cypress": "^1.1.3",
+ "@types/jasmine": "2.8.3",
+ "@types/jasminewd2": "2.0.2",
+ "@types/mocha": "^5.2.0",
+ "@types/node": "6.0.60",
+ "codelyzer": "4.0.1",
+ "cypress": "^2.1.0",
+ "jasmine-core": "2.5.2",
+ "jasmine-spec-reporter": "4.2.1",
+ "karma": "2.0.2",
+ "karma-chrome-launcher": "2.2.0",
+ "karma-coverage-istanbul-reporter": "2.0.1",
+ "karma-istanbul-threshold": "1.2.2",
+ "karma-jasmine": "1.1.2",
+ "karma-jasmine-html-reporter": "1.1.0",
+ "karma-junit-reporter": "^1.2.0",
+ "karma-phantomjs-launcher": "1.0.4",
+ "karma-remap-istanbul": "0.6.0",
+ "karma-spec-reporter": "0.0.32",
+ "protractor": "5.1.2",
+ "ts-node": "4.1.0",
+ "tslint": "5.9.1",
+ "typescript": "2.5.3"
+ }
+}
diff --git a/vid-webpack-master/polyfills.ts b/vid-webpack-master/polyfills.ts
new file mode 100644
index 000000000..6fb2c4008
--- /dev/null
+++ b/vid-webpack-master/polyfills.ts
@@ -0,0 +1,66 @@
+/**
+ * This file includes polyfills needed by Angular and is loaded before the app.
+ * You can add your own extra polyfills to this file.
+ *
+ * This file is divided into 2 sections:
+ * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
+ * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
+ * file.
+ *
+ * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
+ * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
+ * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
+ *
+ * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
+ */
+
+/***************************************************************************************************
+ * BROWSER POLYFILLS
+ */
+
+/** IE9, IE10 and IE11 requires all of the following polyfills. **/
+import 'core-js/es6/symbol';
+import 'core-js/es6/object';
+import 'core-js/es6/function';
+import 'core-js/es6/parse-int';
+import 'core-js/es6/parse-float';
+import 'core-js/es6/number';
+import 'core-js/es6/math';
+import 'core-js/es6/string';
+import 'core-js/es6/date';
+import 'core-js/es6/array';
+import 'core-js/es6/regexp';
+import 'core-js/es6/map';
+import 'core-js/es6/set';
+
+/** IE10 and IE11 requires the following for NgClass support on SVG elements */
+// import 'classlist.js';
+
+/** IE10 and IE11 requires the following to support `@angular/animation`. */
+//import 'web-animations-js'; // Run `npm install --save web-animations-js`.
+
+
+/** Evergreen browsers require these. **/
+import 'core-js/es6/reflect';
+import 'core-js/es7/reflect';
+
+
+/** ALL Firefox browsers require the following to support `@angular/animation`. **/
+//import 'web-animations-js'; // Run `npm install --save web-animations-js`.
+
+
+
+/***************************************************************************************************
+ * Zone JS is required by Angular itself.
+ */
+import 'zone.js/dist/zone'; // Included with Angular CLI.
+
+/***************************************************************************************************
+ * APPLICATION IMPORTS
+ */
+
+/**
+ * Date, currency, decimal and percent pipes.
+ * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
+ */
+//import 'intl'; // Run `npm install --save intl`.
diff --git a/vid-webpack-master/pom.xml b/vid-webpack-master/pom.xml
new file mode 100644
index 000000000..fd069d741
--- /dev/null
+++ b/vid-webpack-master/pom.xml
@@ -0,0 +1,305 @@
+<?xml version="1.0"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- This is the Maven project object model (POM) file for VID web application
+ based on the ECOMP SDK distribution. This file stands alone; it does not
+ inherit from a parent maven module. -->
+ <groupId>org.onap.vid</groupId>
+ <artifactId>vid-webpack-master</artifactId>
+ <version>1.3.0</version>
+ <packaging>war</packaging>
+ <name>VID UI</name>
+ <description>VID UI</description>
+
+ <properties>
+ <encoding>UTF-8</encoding>
+ <!--<epsdk.version>1.3.0</epsdk.version>-->
+ <!--<springframework.version>4.2.0.RELEASE</springframework.version>-->
+ <!--<hibernate.version>4.3.11.Final</hibernate.version>-->
+ <!--<jackson.version>2.6.3</jackson.version>-->
+ <!-- Skip assembling the zip by default -->
+ <skipassembly>true</skipassembly>
+ <!-- Tests usually require some setup that maven cannot do, so skip. -->
+ <skiptests>false</skiptests>
+ <!-- this should be commented for local debugging -->
+ <!-- <deployenv>local</deployenv> -->
+ <nexusproxy>https://nexus.onap.org</nexusproxy>
+ <stagingNexusPath>content/repositories/staging/</stagingNexusPath>
+ <snapshotNexusPath>content/repositories/snapshots/</snapshotNexusPath>
+ <releaseNexusPath>content/repositories/releases/</releaseNexusPath>
+ </properties>
+
+
+ <repositories>
+ <repository>
+ <!-- Snapshots repository has ECOMP snapshot artifacts -->
+ <id>att-mavencentral-ecomp-snapshots-repo</id>
+ <name>ATT Maven Central - Snapshots</name>
+ <url>http://mavencentral.it.att.com:8084/nexus/content/repositories/att-repository-snapshots/</url>
+ </repository>
+ <repository>
+ <id>onap-staging</id>
+ <name>ONAP - Staging Repository</name>
+ <url>${nexusproxy}/${stagingNexusPath}</url>
+ </repository>
+ <repository>
+ <!-- Releases repository has ECOMP release artifacts -->
+ <id>att-mavencentral-ecomp-releases-repo</id>
+ <name>ATT Maven Central - Releases</name>
+ <url>http://mavencentral.it.att.com:8084/nexus/content/repositories/att-repository-releases/</url>
+ </repository>
+ <repository>
+ <!-- Third party repository has Oracle and other jars -->
+ <id>att-mavencentral-3rd-repo</id>
+ <name>ATT Maven Central - Third Party</name>
+ <url>http://mavencentral.it.att.com:8084/nexus/content/repositories/att-repository-3rd-party/</url>
+ </repository>
+ <repository>
+ <!-- Service Assurance group has UEB/Cambria jars -->
+ <id>att-mavencentral-sa-group</id>
+ <name>ATT Maven Central - Service Assurance Group</name>
+ <url>http://mavencentral.it.att.com:8084/nexus/content/groups/2020SAPC/</url>
+ </repository>
+ <repository>
+ <!-- SWM repository has EELF jars -->
+ <id>att-swm-repo</id>
+ <name>ATT SWM Repository</name>
+ <url>http://mavencentral.it.att.com:8084/nexus/content/repositories/swm-releases</url>
+ </repository>
+
+ <repository>
+ <!-- Public repository has ECOMP jars -->
+ <id>att-mavencentral-public</id>
+ <name>ATT Maven Central - Public Group</name>
+ <url>http://mavencentral.it.att.com:8084/nexus/content/groups/att-public-group</url>
+ </repository>
+ <repository>
+ <id>ecomp-releases</id>
+ <name>OpenECOMP - Release Repository</name>
+ <url>${nexusproxy}/${releaseNexusPath}</url>
+ </repository>
+ <repository>
+ <id>ecomp-snapshots</id>
+ <name>OpenECOMP - Snapshot Repository</name>
+ <url>${nexusproxy}/${snapshotNexusPath}</url>
+ </repository>
+ <repository>
+ <id>ecomp-public</id>
+ <name>ecomp onap public Repository</name>
+ <url>https://nexus.onap.org/content/groups/public</url>
+ </repository>
+ </repositories>
+
+ <distributionManagement>
+ <repository>
+ <id>vid-releases</id>
+ <name>VID Release Repository</name>
+ <url>https://162.242.254.138:8443/repository/maven-releases</url>
+ </repository>
+
+ <snapshotRepository>
+ <id>vid-snapshots</id>
+ <name>VID Snapshot Repository</name>
+ <url>https://162.242.254.138:8443/repository/maven-snapshots</url>
+ </snapshotRepository>
+ </distributionManagement>
+
+ <profiles>
+ <profile>
+ <id>if-not-webpack</id>
+ <activation><activeByDefault>true</activeByDefault></activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.8</version>
+ <executions>
+ <execution>
+ <id>make-empty-dist</id>
+ <phase>validate</phase>
+ <configuration>
+ <target>
+ <mkdir dir="${project.basedir}/dist/" />
+ <echo file="${project.basedir}/dist/NO-WEBPACK.txt" append="false">
+ Note: 'webpack' profile was not selected while mvn build. This 'dist' folder was created to make the war creation through.
+ </echo>
+ </target>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>webpack</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.github.eirslett</groupId>
+ <artifactId>frontend-maven-plugin</artifactId>
+ <!-- NB! Set <version> to the latest released version of frontend-maven-plugin, like in README.md -->
+ <version>1.6</version>
+
+ <executions>
+
+ <execution>
+ <id>install node and npm</id>
+ <goals>
+ <goal>install-node-and-npm</goal>
+ </goals>
+ <configuration>
+ <!-- See https://nodejs.org/en/download/ for latest node and npm (lts) versions -->
+ <nodeVersion>v8.9.4</nodeVersion>
+ <npmVersion>5.6.0</npmVersion>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>npm set no-progress</id>
+ <goals>
+ <goal>npm</goal>
+ </goals>
+ <configuration>
+ <arguments>set progress=false</arguments>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>npm install</id>
+ <goals>
+ <goal>npm</goal>
+ </goals>
+ <!-- Optional configuration which provides for running any npm command -->
+ <configuration>
+ <arguments>install</arguments>
+ <environmentVariables>
+ <CYPRESS_INSTALL_BINARY>0</CYPRESS_INSTALL_BINARY>
+ <NO_PROXY>.att.com</NO_PROXY>
+ <http_proxy>http://one.proxy.att.com:8080</http_proxy>
+ <https_proxy>http://one.proxy.att.com:8080</https_proxy> <!-- for cypress install -->
+ </environmentVariables>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>npm run test</id>
+ <goals>
+ <goal>npm</goal>
+ </goals>
+ <configuration>
+ <arguments>run test</arguments>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>npm run build</id>
+ <goals>
+ <goal>npm</goal>
+ </goals>
+ <configuration>
+ <arguments>run build</arguments>
+ </configuration>
+ </execution>
+
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>cypress</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.github.eirslett</groupId>
+ <artifactId>frontend-maven-plugin</artifactId>
+ <!-- NB! Set <version> to the latest released version of frontend-maven-plugin, like in README.md -->
+ <version>1.6</version>
+
+ <executions>
+
+ <execution>
+ <id>install node and npm</id>
+ <goals>
+ <goal>install-node-and-npm</goal>
+ </goals>
+ <configuration>
+ <!-- See https://nodejs.org/en/download/ for latest node and npm (lts) versions -->
+ <nodeVersion>v8.9.4</nodeVersion>
+ <npmVersion>5.6.0</npmVersion>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>npm install cypress</id>
+ <goals>
+ <goal>npm</goal>
+ </goals>
+ <!-- Optional configuration which provides for running any npm command -->
+ <configuration>
+ <arguments>install --verbose cypress @bahmutov/add-typescript-to-cypress</arguments>
+ <environmentVariables>
+ <NO_PROXY>.att.com</NO_PROXY>
+ <http_proxy>http://one.proxy.att.com:8080</http_proxy>
+ <https_proxy>http://one.proxy.att.com:8080</https_proxy>
+ </environmentVariables>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>npm run cypress</id>
+ <goals>
+ <goal>npm</goal>
+ </goals>
+ <configuration>
+ <npmInheritsProxyConfigFromMaven>false</npmInheritsProxyConfigFromMaven>
+ <arguments>run cypress:run -- --config baseUrl=http://${VID_HOST}:8080/vid</arguments>
+ </configuration>
+ </execution>
+
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+ <build>
+ <finalName>vid-webpack-master</finalName>
+ <plugins>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>3.2.0</version>
+ <configuration>
+ <webResources>
+ <resource>
+ <!-- this is relative to the pom.xml directory -->
+ <directory>dist</directory>
+ <targetPath>app/ui</targetPath>
+ </resource>
+ </webResources>
+ <webXml>src/WEB-INF/web.xml</webXml>
+ </configuration>
+ </plugin>
+
+ </plugins>
+
+
+ </build>
+
+ <dependencies>
+ </dependencies>
+
+</project>
diff --git a/vid-webpack-master/postcss.config.js b/vid-webpack-master/postcss.config.js
new file mode 100644
index 000000000..2499ae909
--- /dev/null
+++ b/vid-webpack-master/postcss.config.js
@@ -0,0 +1,8 @@
+module.exports = {
+ syntax: 'postcss-scss',
+ plugins: {
+ 'postcss-import': {},
+ 'postcss-cssnext': {},
+ 'cssnano': {}
+ }
+};
diff --git a/vid-webpack-master/protractor.conf.js b/vid-webpack-master/protractor.conf.js
new file mode 100644
index 000000000..ed99e23b9
--- /dev/null
+++ b/vid-webpack-master/protractor.conf.js
@@ -0,0 +1,43 @@
+exports.config = {
+ baseUrl: 'http://localhost:8181/',
+
+ specs: [
+ 'src/**/*.e2e-spec.js'
+ ],
+ exclude: [],
+
+ framework: 'jasmine2',
+
+ allScriptsTimeout: 110000,
+
+ jasmineNodeOpts: {
+ showTiming: true,
+ showColors: true,
+ isVerbose: false,
+ includeStackTrace: false,
+ defaultTimeoutInterval: 400000
+ },
+ directConnect: true,
+
+ capabilities: {
+ 'browserName': 'chrome'
+ },
+
+ onPrepare: function () {
+ var SpecReporter = require('jasmine-spec-reporter').SpecReporter;
+ // add jasmine spec reporter
+ jasmine.getEnv().addReporter(new SpecReporter({displayStacktrace: true}));
+
+ browser.ignoreSynchronization = true;
+ },
+
+
+ /**
+ * Angular 2 configuration
+ *
+ * useAllAngular2AppRoots: tells Protractor to wait for any angular2 apps on the page instead of just the one matching
+ * `rootEl`
+ *
+ */
+ useAllAngular2AppRoots: true
+};
diff --git a/vid-webpack-master/src/WEB-INF/web.xml b/vid-webpack-master/src/WEB-INF/web.xml
new file mode 100644
index 000000000..a4152daaa
--- /dev/null
+++ b/vid-webpack-master/src/WEB-INF/web.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
+
+ <!-- This is a stub web.xml in the common area -->
+ <display-name>vid-ebpack-master</display-name>
+
+ <!--
+ `vid-webpack-master` servlet and it's servlet mapping below, serves
+ Angular's index.html for any requests like the following, letting
+ the JavaScript router do its magic:
+ * /vid/app/ui/
+ * /vid/app/ui/servicePlanning
+ * /vid/app/ui/browseSdc
+ -->
+ <servlet>
+ <servlet-name>vid-webpack-master</servlet-name>
+ <jsp-file>/app/ui/index.html</jsp-file>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>vid-webpack-master</servlet-name>
+ <url-pattern>/app/ui/*</url-pattern>
+ </servlet-mapping>
+
+
+ <!--
+ All the files under the paths below are served as static files, using
+ tomcat's `default` servlet. This overrides the `vid-webpack-master`
+ url-pattern.
+ The filter `charset-to-utf8-filter` adds "charset=UTF-8" to these files
+ content type, as the default content-type is platform-dependant (which
+ is not ok for Windows stations).
+ -->
+ <servlet-mapping>
+ <servlet-name>default</servlet-name>
+ <url-pattern>/app/ui/css/*</url-pattern>
+ <url-pattern>/app/ui/fonts/*</url-pattern>
+ <url-pattern>/app/ui/img/*</url-pattern>
+ <url-pattern>/app/ui/js/*</url-pattern>
+ </servlet-mapping>
+
+ <filter>
+ <filter-name>charset-to-utf8-filter</filter-name>
+ <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
+ <init-param>
+ <param-name>encoding</param-name>
+ <param-value>UTF-8</param-value>
+ </init-param>
+ <init-param>
+ <param-name>forceEncoding</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>charset-to-utf8-filter</filter-name>
+ <url-pattern>/app/ui/*</url-pattern>
+ </filter-mapping>
+
+</web-app>
diff --git a/vid-webpack-master/src/app/app.component.e2e-spec.js b/vid-webpack-master/src/app/app.component.e2e-spec.js
new file mode 100644
index 000000000..9ec9d23db
--- /dev/null
+++ b/vid-webpack-master/src/app/app.component.e2e-spec.js
@@ -0,0 +1,27 @@
+describe('App', function () {
+
+ beforeEach(function () {
+ browser.get('/');
+ });
+
+ it('should have a title', function () {
+ expect(browser.getTitle()).toEqual("Angular 2 App | ng2-webpack");
+ });
+
+ it('should have <header>', function () {
+ expect(element(by.css('my-app header')).isPresent()).toEqual(true);
+ });
+
+ it('should have <main>', function () {
+ expect(element(by.css('my-app main')).isPresent()).toEqual(true);
+ });
+
+ it('should have a main title', function () {
+ expect(element(by.css('main h1')).getText()).toEqual('Hello from Angular 2!');
+ });
+
+ it('should have <footer>', function () {
+ expect(element(by.css('my-app footer')).getText()).toEqual("Webpack Angular 2 Starter");
+ });
+
+});
diff --git a/vid-webpack-master/src/app/app.component.html b/vid-webpack-master/src/app/app.component.html
new file mode 100644
index 000000000..3768d0c53
--- /dev/null
+++ b/vid-webpack-master/src/app/app.component.html
@@ -0,0 +1,6 @@
+<main>
+ <router-outlet>
+ <message-box></message-box>
+ <spinner-component></spinner-component>
+ </router-outlet>
+</main>
diff --git a/vid-webpack-master/src/app/app.component.scss b/vid-webpack-master/src/app/app.component.scss
new file mode 100644
index 000000000..9149aefc0
--- /dev/null
+++ b/vid-webpack-master/src/app/app.component.scss
@@ -0,0 +1,24 @@
+// styles applied on :host are applied on the current component, "app" in this case
+:host {
+ display: block;
+}
+
+header {
+ background-color: #fff;
+ padding: 16px;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5);
+}
+
+main {
+ font-family: Arial, Helvetica, sans-serif;
+ display: block;
+}
+
+footer {
+ text-align: center;
+ font-size: 0.8em;
+}
diff --git a/vid-webpack-master/src/app/app.component.ts b/vid-webpack-master/src/app/app.component.ts
new file mode 100644
index 000000000..528c7d7a4
--- /dev/null
+++ b/vid-webpack-master/src/app/app.component.ts
@@ -0,0 +1,28 @@
+import {Component, Inject} from '@angular/core';
+
+import { ApiService } from './shared';
+
+import '../style/app.scss';
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "./store/reducers";
+import { LogService } from './shared/utils/log/log.service';
+
+@Component({
+ selector: 'vid-app', // <vid-app></vid-app>
+ templateUrl: './app.component.html',
+ styleUrls: ['./app.component.scss'],
+})
+export class AppComponent {
+ url = 'https://github.com/preboot/angular2-webpack';
+ title: string;
+
+
+ constructor(private api: ApiService, private store: NgRedux<AppState>, private _logService : LogService) {
+ this.title = this.api.title;
+ store.subscribe(()=>{
+ sessionStorage.setItem('reduxState', JSON.stringify(store.getState()));
+ });
+
+ this._logService.info("testing new log service");
+ }
+}
diff --git a/vid-webpack-master/src/app/app.module.ts b/vid-webpack-master/src/app/app.module.ts
new file mode 100644
index 000000000..a87ffb5b7
--- /dev/null
+++ b/vid-webpack-master/src/app/app.module.ts
@@ -0,0 +1,79 @@
+import { ApplicationRef, NgModule } from '@angular/core';
+import { BrowserModule } from '@angular/platform-browser';
+import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { AppComponent } from './app.component';
+import { HomeComponent } from './home/home.component';
+import { ApiService } from './shared';
+import { routing } from './app.routing';
+import { createNewHosts, removeNgStyles } from '@angularclass/hmr';
+import { BrowseSdcModule } from './browseSdc/browseSdc.module';
+import { VlanTaggingModule } from './vlanTagging/vlan-tagging.module'
+import { BootstrapModalModule } from 'ng2-bootstrap-modal';
+import { HashLocationStrategy, LocationStrategy } from "@angular/common";
+import { InstantiationStatusModule } from './instantiationStatus/InstantiationStatus.module';
+import { SharedModule } from './shared/shared.module';
+import { AngularSvgIconModule } from 'angular-svg-icon';
+import { NgReduxModule } from '@angular-redux/store';
+import { StoreModule } from "./store/module";
+import { HttpInterceptorService } from './shared/utils/httpInterceptor/httpInterceptor.service';
+import { DrawingBoardModule } from './drawingBoard/drawingBoard.module';
+import { HealthStatusComponent } from './healthStatus/health-status.component';
+import { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to';
+import { LogService } from './shared/utils/log/log.service';
+
+@NgModule({
+ imports: [
+ BrowserModule,
+ HttpClientModule,
+ FormsModule,
+ routing,
+ SharedModule.forRoot(),
+ ScrollToModule.forRoot(),
+ DrawingBoardModule,
+ VlanTaggingModule,
+ InstantiationStatusModule,
+ BrowseSdcModule,
+ BootstrapModalModule,
+ BrowseSdcModule,
+ AngularSvgIconModule,
+ ReactiveFormsModule,
+ NgReduxModule,
+ StoreModule,
+ ],
+ declarations: [
+ AppComponent,
+ HomeComponent,
+ HealthStatusComponent
+ ],
+ providers: [
+ ApiService,
+ LogService,
+ { provide: LocationStrategy, useClass: HashLocationStrategy },
+ { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, multi: true }
+ ],
+ bootstrap: [AppComponent]
+})
+export class AppModule {
+ private static CustomLoader: any;
+
+ constructor(public appRef: ApplicationRef) {
+ //for ng2-bootstrap-modal in angualar 5
+ Object.defineProperty(appRef, '_rootComponents', { get: () => appRef['components'] });
+ }
+ hmrOnInit(store) {
+ console.log('HMR store', store);
+ }
+ hmrOnDestroy(store) {
+ let cmpLocation = this.appRef.components.map(cmp => cmp.location.nativeElement);
+ // recreate elements
+ store.disposeOldHosts = createNewHosts(cmpLocation);
+ // remove styles
+ removeNgStyles();
+ }
+ hmrAfterDestroy(store) {
+ // display new elements
+ store.disposeOldHosts();
+ delete store.disposeOldHosts;
+ }
+}
diff --git a/vid-webpack-master/src/app/app.routing.ts b/vid-webpack-master/src/app/app.routing.ts
new file mode 100644
index 000000000..e6f42f9ed
--- /dev/null
+++ b/vid-webpack-master/src/app/app.routing.ts
@@ -0,0 +1,40 @@
+import {RouterModule, Routes} from '@angular/router';
+
+import {HomeComponent} from './home/home.component';
+import {BrowseSdcComponent} from './browseSdc/browseSdc.component';
+import {ServicePlanningComponent, ServicePlanningEmptyComponent} from './drawingBoard/service-planning/service-planning.component';
+import {VlanTaggingComponent} from './vlanTagging/vlan-tagging.component';
+import {ServicePopupComponent} from './components/service-popup/service-popup.component';
+import { InstantiationStatusComponent } from './instantiationStatus/instantiationStatus.component';
+import {HealthStatusComponent} from "./healthStatus/health-status.component";
+import {FlagsResolve} from "./services/flags.resolve";
+
+const routes: Routes = [
+ { path: '', component: HomeComponent, pathMatch: 'full' ,resolve : {
+ flags : FlagsResolve,
+ }},
+ { path: 'browseSdc', component: BrowseSdcComponent, resolve : {
+ flags : FlagsResolve,
+ }},
+ { path: 'servicePlanning', component: ServicePlanningComponent, resolve : {
+ flags : FlagsResolve,
+ }},
+ { path: 'servicePlanningEmpty', component: ServicePlanningEmptyComponent, resolve : {
+ flags : FlagsResolve,
+ }},
+ { path: 'servicePopup', component: ServicePopupComponent, resolve : {
+ flags : FlagsResolve,
+ }},
+ { path :'vlan', component : VlanTaggingComponent, resolve : {
+ flags : FlagsResolve,
+ }},
+ { path: 'instantiationStatus', component: InstantiationStatusComponent, resolve : {
+ flags : FlagsResolve,
+ }},
+ { path: 'healthStatus', component: HealthStatusComponent, resolve : {
+ flags : FlagsResolve,
+ }}
+
+];
+
+export const routing = RouterModule.forRoot(routes);
diff --git a/vid-webpack-master/src/app/browseSdc/browseSdc.component.html b/vid-webpack-master/src/app/browseSdc/browseSdc.component.html
new file mode 100644
index 000000000..7ffd7931c
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/browseSdc.component.html
@@ -0,0 +1,26 @@
+<div>
+
+ <span class="statusLine" [hidden]="!isSpinnerVisible">
+ <img src="./img/spinner.gif"/>
+ </span>
+ <span class="statusLine" [hidden]="!isProgressVisible">
+ <label>Status:</label><span class="status"><span [hidden]="!error"><font color='red'><b>Error: </b></font></span>{{status}}</span>
+ </span>
+ <br><br>
+ <div>
+ <input class="form-control search-query" placeholder="Filter..." data-tests-id="browseFilter" type="text" [(ngModel)]="filterQuery" size="20" style="width: 250px;">
+ </div>
+
+ <h1 class="heading1" style="margin-top:20px;">Browse SDC Service Models</h1>
+ <div style="margin-top:30px">
+ <button (click)="deploy()">deploy</button>
+ <vid-table
+ [options]="tableOptions"
+ [filterQuery]="filterQuery"
+ (clickEvent)="clickAction($event)">
+ Loading table...
+ </vid-table>
+ </div>
+</div>
+
+
diff --git a/vid-webpack-master/src/app/browseSdc/browseSdc.component.scss b/vid-webpack-master/src/app/browseSdc/browseSdc.component.scss
new file mode 100644
index 000000000..0d1678a94
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/browseSdc.component.scss
@@ -0,0 +1,59 @@
+div[ng-controller=ServiceModelController] .popupContents {
+ text-align: left;
+}
+
+div[ng-controller=ServiceModelController] .statusLine {
+ vertical-align: center;
+}
+
+div[ng-controller=ServiceModelController] .statusLine img {
+ width: 20px;
+ margin: 10px;
+}
+
+div[ng-controller=ServiceModelController] .status {
+ margin-left: 5px;
+}
+
+div[ng-controller=ServiceModelController] .feedback {
+ height: 35px;
+ vertical-align: center;
+}
+
+div[ng-controller=ServiceModelController] .progress {
+ margin: 0px 10px;
+ font-weight: bold;
+}
+
+div[ng-controller=ServiceModelController] .error {
+ width: 630px;
+ font-weight: bold;
+ font-size: 16px;
+ color: red;
+ margin: 0px 10px 0px 45px;
+}
+
+div[ng-controller=ServiceModelController] .error img {
+ width: 25px;
+ margin: 0px 10px;
+}
+
+div[ng-controller=ServiceModelController] .buttonRow {
+ text-align: center;
+ margin-bottom: 10px;
+}
+
+div[ng-controller=ServiceModelController] .log {
+ width: 700px;
+ height: 500px;
+ border: solid black 1px;
+ text-align: left !important;
+ margin: 10px;
+ padding: 10px;
+ overflow: auto;
+}
+
+
+.previous-versions-button {
+ width: 113px;
+}
diff --git a/vid-webpack-master/src/app/browseSdc/browseSdc.component.ts b/vid-webpack-master/src/app/browseSdc/browseSdc.component.ts
new file mode 100644
index 000000000..46f37dc2e
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/browseSdc.component.ts
@@ -0,0 +1,176 @@
+import {Component, Input, OnInit} from '@angular/core';
+import * as _ from 'lodash';
+import {SdcService} from '../services/sdc.service';
+import {DialogService} from 'ng2-bootstrap-modal';
+import {Constants} from '../shared/utils/constants';
+import {CustomTableColumnDefinition, CustomTableOptions} from './vid-table/vid-table.component';
+import {ServicePopupComponent} from "../components/service-popup/service-popup.component";
+import { PreviousVersionsComponent } from './previous-versions/previous-versions.component';
+
+@Component({
+ selector: 'browse-sdc',
+ templateUrl: './browseSdc.component.html',
+ styleUrls: ['./browseSdc.component.scss']
+})
+
+
+export class BrowseSdcComponent implements OnInit {
+
+ isSpinnerVisible = false;
+ isProgressVisible = false;
+ error: boolean;
+ status: string;
+ // table
+
+ private basicColumns: CustomTableColumnDefinition[];
+ @Input () filterQuery = '';
+ tableOptions: CustomTableOptions;
+ private wholeData: any[];
+
+ constructor(private _sdcService: SdcService, private dialogService: DialogService) {}
+
+ initTableOptions() {
+ this.basicColumns = [
+ { displayName: 'Action', key: 'action', type: 'button' , text: 'deploy', action: 'deploy' },
+ { displayName: 'UUID', key: 'uuid', filter: 'text'},
+ { displayName: 'invariantUUID', key: 'invariantUUID', filter: 'text'},
+ { displayName: 'Name', key: 'name', filter: 'text'},
+ { displayName: 'Version', key: 'version', filter: 'text'},
+ { displayName: 'Category', key: 'category', filter: 'text'},
+ { displayName: 'Distribution Status', key: 'distributionStatus', filter: 'text'},
+ { displayName: 'Last Updated By', key: 'lastUpdaterUserId', filter: 'text'},
+ { displayName: 'Tosca Model', key: 'toscaModelUrl', filter: 'text'}
+ ];
+
+ let columns: CustomTableColumnDefinition[] = this.basicColumns.concat(
+ {displayName: 'Action', key: 'actions', type: 'button', text: 'Previous Versions',
+ showCondition: 'hasPreviousVersion', action: 'loadPreviousData' }
+ );
+
+ this.tableOptions = {
+ data: [],
+ columns: columns,
+ config: {
+ sortBy: 'name',
+ sortOrder: 'asc',
+ pageSize: 10,
+ pageNumber: 1,
+ totalCount: 0,
+ totalPages: 0,
+ maxSize: 10,
+ showSelectCheckbox: true,
+ showSelectAll: true,
+ showSort: true,
+ clientSort: true,
+ clientPaging: true,
+ // displayPager: true,
+ // displayPageSize: true,
+ stickyHeader: true,
+ stickyHeaderOffset: 0,
+ stickyContainer: '.table1-container'
+ },
+ };
+ }
+ private deploy(service: any): void {
+ if (service) {
+ console.log('this row uuid:' + service.uuid);
+ }
+
+ this.dialogService.addDialog(ServicePopupComponent, {
+ })
+ }
+
+ private filterDataWithHigherVersion(serviceData) {
+ let delimiter = '$$';
+ let filterDataServices = {};
+ for (let i = 0; i < serviceData.length; i++) {
+ let index = serviceData[i].invariantUUID.trim() + delimiter + serviceData[i].name.trim();
+ if (!filterDataServices[index]) {
+ filterDataServices[index] = {
+ service: serviceData[i],
+ hasPreviousVersion: false
+ };
+ } else {
+ filterDataServices[index].hasPreviousVersion = true;
+ if (parseFloat(serviceData[i].version.trim()) > parseFloat(filterDataServices[index].service.version.trim())) {
+ filterDataServices[index].service = serviceData[i];
+ }
+ }
+ }
+ return Object.keys(filterDataServices).map(function (key) {
+ let service = filterDataServices[key].service;
+ service.hasPreviousVersion = filterDataServices[key].hasPreviousVersion;
+ return service;
+ });
+ }
+
+ private initData() {
+ this.isProgressVisible = true;
+ this.isSpinnerVisible = true;
+ console.log('getServicesModels: ');
+ this._sdcService.getServicesModels().subscribe(
+ // onNext() function
+ value => this.getServiceCallback(value),
+ // onError() function
+ error => this.getServiceOnError(error),
+ // onComplete() function
+ () => console.log('completed')
+ );
+ }
+
+ private getServiceCallback(responseBody: any): void {
+ console.log('response is ' , responseBody);
+ this.wholeData = responseBody.services;
+ this.tableOptions.data = this.filterDataWithHigherVersion(responseBody.services);
+ this.isSpinnerVisible = false;
+ this.isProgressVisible = false;
+ }
+ private getServiceOnError(error: any): void {
+ console.log('error is ' , error);
+ this.status = Constants.Status.FAILED_SERVICE_MODELS_ASDC;
+ this.error = true;
+ this.isSpinnerVisible = false;
+ }
+
+ private loadPreviousVersionData(service): void {
+ let previousVersionData: any[] = _.filter(this.wholeData, function(item) {
+ return item.invariantUUID === service.invariantUUID && item.name === service.name && service.version !== item.version;
+ });
+
+ let modalTableOptions: CustomTableOptions = {
+ data: previousVersionData,
+ columns: this.basicColumns,
+ config: {
+ sortBy: 'version',
+ sortOrder: 'desc'}
+ };
+ // open modal
+ this.dialogService.addDialog(PreviousVersionsComponent, {
+ title: service.name + ' - Previous Version',
+ tableOptions: modalTableOptions
+ })
+ .subscribe( service => {
+ if (service) {
+ this.deploy(service);
+ }
+ });
+ }
+
+
+ public clickAction(row) {
+ switch (row.actionName) {
+ case 'loadPreviousData':
+ this.loadPreviousVersionData(row);
+ break;
+ case 'deploy':
+ this.deploy(row);
+ break;
+ }
+ }
+
+ ngOnInit() {
+ console.log('Browse SDC Service Models');
+ this.initTableOptions();
+ this.initData();
+ }
+}
diff --git a/vid-webpack-master/src/app/browseSdc/browseSdc.module.ts b/vid-webpack-master/src/app/browseSdc/browseSdc.module.ts
new file mode 100644
index 000000000..b7dd78e54
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/browseSdc.module.ts
@@ -0,0 +1,35 @@
+
+import { NgModule } from '@angular/core';
+import {BrowseSdcComponent} from './browseSdc.component';
+import {VidTableComponent} from './vid-table/vid-table.component';
+import {SdcService} from '../services/sdc.service';
+import {CommonModule} from '@angular/common';
+import {FormsModule, ReactiveFormsModule} from '@angular/forms';
+import {DataTableModule} from 'angular2-datatable';
+import {BootstrapModalModule} from 'ng2-bootstrap-modal';
+import {PreviousVersionsComponent} from './previous-versions/previous-versions.component';
+import {ServicePopupComponent} from '../components/service-popup/service-popup.component';
+import {ServiceInstanceDetailsComponent} from "../components/service-popup/service-instance-details/service-instance-details.component";
+import {TooltipModule} from 'ngx-tooltip';
+import {InputsModule} from "../modules/inputs.module";
+import {VnfPopupComponent} from "../components/vnf-popup/vnf-popup.components";
+import {VnfInstanceDetailsComponent} from "../components/vnf-popup/vnf-instance-details/vnf-instance-details.component";
+import { VnfInstanceDetailsService } from '../components/vnf-popup/vnf-instance-details/vnf-instance-details.service';
+import { SharedModule } from '../shared/shared.module';
+import { ServiceInstanceDetailsService } from '../components/service-popup/service-instance-details/service-instance-details.service';
+import { ServicePopupService } from '../components/service-popup/service-popup.service';
+import { DataFilterPipe } from '../shared/pipes/data-filter.pipe';
+
+
+@NgModule({
+ imports: [CommonModule, FormsModule, ReactiveFormsModule, BootstrapModalModule, DataTableModule, TooltipModule, InputsModule, SharedModule.forRoot()],
+ providers: [SdcService, VnfInstanceDetailsService, ServiceInstanceDetailsService, ServicePopupService],
+ declarations: [BrowseSdcComponent, VidTableComponent, DataFilterPipe, PreviousVersionsComponent,
+ ServicePopupComponent, ServiceInstanceDetailsComponent, VnfPopupComponent, VnfInstanceDetailsComponent
+ ],
+ entryComponents: [BrowseSdcComponent, PreviousVersionsComponent, ServicePopupComponent, VnfPopupComponent],
+ exports: [ ]
+
+})
+
+export class BrowseSdcModule { }
diff --git a/vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.component.ts b/vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.component.ts
new file mode 100644
index 000000000..8faf04d6c
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.component.ts
@@ -0,0 +1,29 @@
+import { Component } from '@angular/core';
+import { DialogComponent, DialogService } from 'ng2-bootstrap-modal';
+import { CustomTableOptions } from '../vid-table/vid-table.component';
+
+export interface PreviousVersionsModel {
+
+ title: string;
+ tableOptions: CustomTableOptions;
+}
+
+@Component({
+ selector: 'previous-versions',
+ templateUrl: 'previous-versions.html',
+ styleUrls: ['previous-versions.css']
+})
+export class PreviousVersionsComponent extends DialogComponent<PreviousVersionsModel, boolean> implements PreviousVersionsModel {
+
+ title: string;
+ tableOptions: CustomTableOptions;
+
+ constructor(dialogService: DialogService) {
+ super(dialogService);
+ }
+
+ public deploy(row) {
+ this.result = row;
+ this.close();
+ }
+}
diff --git a/vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.css b/vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.css
new file mode 100644
index 000000000..92bcbd100
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.css
@@ -0,0 +1,4 @@
+.modal-dialog {
+ width: 1145px;
+ font-size: 11px;
+}
diff --git a/vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.html b/vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.html
new file mode 100644
index 000000000..68209b8e8
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/previous-versions/previous-versions.html
@@ -0,0 +1,18 @@
+<div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" (click)="close()" >&times;</button>
+ <h4 class="modal-title">{{title}}</h4>
+ </div>
+ <div class="modal-body">
+ <vid-table
+ [options]="tableOptions"
+ (clickEvent)="deploy($event)">
+ Loading table...
+ </vid-table>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" (click)="close()" >Cancel</button>
+ </div>
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.html b/vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.html
new file mode 100644
index 000000000..5650e5d35
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.html
@@ -0,0 +1,26 @@
+<table class="table table-hover table-striped table-sortable" [mfData]="options.data | dataFilter : filterQuery" #mf="mfDataTable" [(mfSortBy)]="options.config.sortBy" [(mfSortOrder)]="options.config.sortOrder" [mfRowsOnPage]="10">
+ <thead>
+ <tr>
+ <th *ngFor="let column of options.columns">
+ <mfDefaultSorter by="{{column.key}}"> {{column.displayName}}</mfDefaultSorter>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr *ngFor="let row of mf.data">
+ <td *ngFor="let column of options.columns" >
+ <button class="btn btn-primary" *ngIf="column.type==='button' && (!column.showCondition || row[column.showCondition])" title="{{column.text}}" (click)="clickBtn(row, column.action)">
+ {{column.text}}
+ </button>
+ {{row[column.key]}}
+ </td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td colspan="5">
+ <mfBootstrapPaginator [rowsOnPageSet]="[10,15,20]"></mfBootstrapPaginator>
+ </td>
+ </tr>
+ </tfoot>
+</table>
diff --git a/vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.scss b/vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.scss
new file mode 100644
index 000000000..f34887987
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.scss
@@ -0,0 +1,40 @@
+table > thead > tr > th {
+ cursor: pointer;
+ position: relative;
+ background-image: none;
+ color: #fff;
+ background-color: #666;
+ a{
+ color: #fff;
+ }
+}
+
+.table-sortable > thead > tr > th:after,
+.table-sortable > thead > tr > th.sort-false:after,
+.table-sortable > thead > tr > th.sort-true:after {
+ font-family: FontAwesome;
+ padding-left: 5px;
+}
+
+.table-sortable > thead > tr > th:after {
+ content: "\f0dc";
+ color: #ddd;
+}
+.table-sortable > thead > tr > th.sort-false:after {
+ content: "\f0de";
+ color: #767676;
+}
+.table-sortable > thead > tr > th.sort-true:after {
+ content: "\f0dd";
+ color: #767676;
+}
+//.table-sortable > tbody > td >
+.table-sortable {
+ tbody{
+ td{
+ .btn-primary{
+ min-width: 100px;
+ }
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.ts b/vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.ts
new file mode 100644
index 000000000..aa2030908
--- /dev/null
+++ b/vid-webpack-master/src/app/browseSdc/vid-table/vid-table.component.ts
@@ -0,0 +1,59 @@
+/**
+ * Created by cp2122 on 1/2/2018.
+ */
+import { Component, Input, EventEmitter, Output } from '@angular/core';
+export class CustomTableColumnDefinition {
+ public displayName = '';
+ public key = '';
+ public type? = 'text';
+ public text? = ''; // for button
+ public action? = ''; // for button - callback
+ public showCondition? = ''; // for button
+ // public binding = '';
+ public filter? = '';
+ // public computedClass: any;
+ // public isComputed = false;
+ // public isAnchor = false;
+ // public srefBinding = '';
+}
+
+export class CustomTableConfig {
+ public sortBy = '';
+ public sortOrder = 'desc';
+ public pageSize? = 10;
+ public pageNumber? = 1;
+ public totalCount? = 0;
+ public totalPages? = 0;
+ public maxSize? = 10;
+ public showSelectCheckbox? = false;
+ public showSelectAll? = true;
+ public showSort? = true;
+ public clientSort? = true;
+ public clientPaging? = true;
+ public stickyHeader? = true;
+ public stickyHeaderOffset? = 0;
+ public stickyContainer? = '';
+}
+
+export class CustomTableOptions {
+ public data: any[];
+ public columns: Array<CustomTableColumnDefinition>;
+ public config: CustomTableConfig;
+ // public callbacks: any;
+}
+@Component({
+ selector: 'vid-table',
+ styleUrls: ['./vid-table.component.scss'],
+ templateUrl: './vid-table.component.html'
+})
+
+export class VidTableComponent {
+ @Input() options: CustomTableOptions;
+ @Input() filterQuery = '';
+
+ @Output() clickEvent = new EventEmitter<any>();
+ clickBtn(row, actionName) {
+ row.actionName = actionName;
+ this.clickEvent.emit(row);
+ }
+}
diff --git a/vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.component.ts b/vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.component.ts
new file mode 100644
index 000000000..921c923df
--- /dev/null
+++ b/vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.component.ts
@@ -0,0 +1,80 @@
+import {Component, Input, OnInit} from '@angular/core';
+import {FormControl, FormGroup, Validators} from "@angular/forms";
+import {DynamicInput, DynamicMultiSelect, DynamicNumber, DynamicSelect} from "../../shared/models/dynamicInput";
+
+@Component({
+ selector: 'dynamic-inputs',
+ templateUrl: './dynamic-inputs.html',
+ styleUrls: ['./dynamic-inputs.scss']
+})
+
+export class DynamicInputsComponent implements OnInit{
+ @Input() public list:any[] = [];
+ @Input() public group: FormGroup;
+
+ private dynamicList:DynamicInput<any>[] = [];
+
+ isDynamicNumber(item: any): item is DynamicNumber {
+ return item;
+ }
+
+ buildValidators(item: DynamicInput<any>) {
+ let validatorArr = [];
+ item.maxLength && validatorArr.push(Validators.maxLength(item.maxLength));
+ item.minLength && validatorArr.push(Validators.minLength(item.minLength));
+ if(this.isDynamicNumber(item)) {
+ item.max && validatorArr.push(Validators.max(item.max));
+ item.min && validatorArr.push(Validators.min(item.min));
+ }
+ return Validators.compose(validatorArr);
+ }
+
+ ngOnInit(): void {
+ this.list.forEach((item)=> {
+ let dynamicItem: DynamicInput<any>;
+ switch (item.type) {
+ case 'multi_select':
+ item.optionList.forEach(function(option) { option.id = option.id||option.name;
+ option.itemName = option.name;});
+ item.settings = {
+ disabled: !item.isEnabled,
+ text: item.prompt,
+ };
+ dynamicItem = new DynamicMultiSelect(item);
+ break;
+ case 'select':
+ let defaultValue:any = item.optionList.find((option) => option.isDataLoading && option.name);
+ item.value = defaultValue && defaultValue.id;
+ dynamicItem = new DynamicSelect(item);
+ break;
+ case 'boolean':
+ item.value = item.value || false;
+ item.optionList = [{name: true, isPermitted: true, isDataLoading: item.value}, {name: false, isPermitted: true, isDataLoading: !item.value}];
+
+ dynamicItem = new DynamicSelect(item);
+ break;
+ case 'number':
+ dynamicItem = new DynamicNumber(item);
+ break;
+ case 'file':
+ dynamicItem = new DynamicInput<any>(item);
+ break;
+ case 'checkbox':
+ dynamicItem = new DynamicInput<boolean>(item);
+ break;
+ case 'map':
+ item.prompt = "{<key1>: <value1>,\.\.\.,<keyN>: <valueN>}";
+ dynamicItem = new DynamicInput<string>(item);
+ break;
+ case 'list':
+ item.prompt = "[<value1>,...,<valueN>]";
+ dynamicItem = new DynamicInput<string>(item);
+ break;
+ default: dynamicItem = new DynamicInput<string>(item);
+ }
+ this.dynamicList.push(dynamicItem);
+ this.group.addControl(dynamicItem.name, new FormControl({value: dynamicItem.value, disabled: !dynamicItem.isEnabled}, this.buildValidators(dynamicItem)));
+ })
+ }
+
+}
diff --git a/vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.html b/vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.html
new file mode 100644
index 000000000..a933364e2
--- /dev/null
+++ b/vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.html
@@ -0,0 +1,22 @@
+<div *ngFor="let item of dynamicList">
+ <div id="{{item.id}}" class="details-item" [ngSwitch]="item.type" [formGroup]="group" [hidden]="!item.isVisible">
+ <label>{{item.name | dynamicInputLabel }}</label>
+ <select *ngSwitchCase="item.type === 'select'|| item.type === 'boolean'? item.type: ''" name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" title="{{item.description}}" [required]="item.isRequired && item.isVisible" maxlength="{{item.maxLength}}" minlength="{{item.minLength}}">
+ <option value="null" [selected]="item.value == null || item.value == undefined" hidden disabled>{{item.prompt}}</option>
+ <option *ngFor="let option of item.optionList" [ngValue]="option.id || option.name" [disabled]="!option.isPermitted" [selected]="option.isDataLoading">{{option.name}}</option>
+ </select>
+ <angular2-multiselect *ngSwitchCase="'multi_select'" [formControlName]="item.name" [(ngModel)]="item.selectedItems" [data]="item.optionList" [settings]="item.settings" title="{{item.description}}" [required]="item.isRequired && item.isVisible"></angular2-multiselect>
+ <input *ngSwitchCase="'number'" name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" type="number" placeholder="{{item.prompt}}" title="{{item.description}}" min="{{item.min}}" max="{{item.max}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible">
+ <div *ngSwitchCase="'file'">
+
+ <label class="dynamicFileName" for="dynamicFileInput-{{item.name}}">
+ <input id="dynamicFileInput-{{item.name}}" name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" type="file" placeholder="{{item.prompt}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible">
+ <label for="dynamicFileInput-{{item.name}}" class="labelForImage">
+ <span class="icon-browse"></span>
+ </label>
+ </label>
+ </div>
+ <input *ngSwitchCase="'checkbox'" name="{{item.name}}" [formControlName]="item.name" type="checkbox" data-toggle="toggle" title="{{item.description}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible">
+ <input *ngSwitchDefault name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" placeholder="{{item.prompt}}" title="{{item.description}}" maxlength="{{item.maxLength}}" minlength="{{item.minLength}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible"/>
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.scss b/vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.scss
new file mode 100644
index 000000000..11a141420
--- /dev/null
+++ b/vid-webpack-master/src/app/components/dynamic-inputs/dynamic-inputs.scss
@@ -0,0 +1,58 @@
+input[type=file] {
+ opacity: 0;
+ position: relative;
+ z-index: 1;
+ width: 0.5px;
+ height: 0.5px;
+ display: inline-block;
+ input {
+ display: none;
+ }
+}
+
+.dynamicFileName {
+ width: 100%;
+ height: 34px;
+ background: #FFFFFF;
+ border: 1px solid #D2D2D2;
+ border-radius: 2px;
+ display: inline-block;
+ line-height: 34px;
+ font-weight: normal !important;
+ padding-left: 3px;
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.labelForImage {
+ background: #F2F2F2;
+ border-left: 1px solid #D2D2D2;
+ float: right;
+ height: 32px;
+}
+
+.icon-browse:before {
+ content: "\e90d";
+ color: #5A5A5A;
+ font-size: 15px;
+ cursor: pointer;
+ width: 34px;
+ height: 100%;
+ line-height: 34px;
+ text-align: center;
+ display: inline-block;
+ vertical-align: super;
+ border-radius: 2px;
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.icon-browse:hover::before {
+ background-color: #E6F6FB;
+ color: #009FDB;
+}
+
+.icon-browse:active::before {
+ background-color: #E6F6FB;
+ color: #009FDB;
+}
diff --git a/vid-webpack-master/src/app/components/form-async/form-async.component.ts b/vid-webpack-master/src/app/components/form-async/form-async.component.ts
new file mode 100644
index 000000000..e71c4446b
--- /dev/null
+++ b/vid-webpack-master/src/app/components/form-async/form-async.component.ts
@@ -0,0 +1,80 @@
+import {Component, Input, OnInit, ViewChild} from '@angular/core';
+import { NgRedux, select } from '@angular-redux/store';
+import { Observable } from "rxjs/Observable";
+import { updateProductFamilies } from "../../service.actions";
+import { AppState } from "../../store/reducers";
+import {
+ loadProductFamiliesAction, loadLcpTenant, loadAicZones,
+ loadCategoryParameters
+} from '../../services/aaiService/aai.actions';
+import { LcpRegionsAndTenants } from "../../shared/models/lcpRegionsAndTenants";
+import {NgForm} from "@angular/forms";
+import {SelectOption} from "../../shared/models/selectOption";
+import {VNFModel} from "../../shared/models/vnfModel";
+
+@Component({
+ selector: "formasync",
+ templateUrl: "form-async.template.html",
+ styleUrls: ["form-async.style.scss"],
+
+})
+
+export class formasync implements OnInit {
+
+ constructor(private store: NgRedux<AppState>) { }
+
+ @ViewChild('form') form: NgForm;
+
+ @Input()
+ set model(model: VNFModel) {
+ if (model) {
+ this.isUserProvidedNaming = model.isUserProvidedNaming;
+ }
+ };
+
+ @select(['service', 'productFamilies'])
+ readonly productFamilies: Observable<any>;
+
+ @select(['service', 'lcpRegionsAndTenants'])
+ readonly lcpRegionsAndTenants: Observable<any>;
+
+ @select(['service', 'lcpRegionsAndTenants', 'lcpRegionList'])
+ readonly lcpRegions: Observable<any>;
+
+ @select(['service', 'aicZones'])
+ readonly aicZones: Observable<any>;
+
+ @select(['service', 'categoryParameters', 'platformList'])
+ readonly platformList: Observable<any>;
+
+ @select(['service', 'categoryParameters', 'lineOfBusinessList'])
+ readonly lineOfBusinessList: Observable<any>;
+
+ rollbackOnFailure = [
+ new SelectOption({id: 'true', name: 'Rollback'}),
+ new SelectOption({id: 'false', name: 'Don\'t Rollback'})
+ ];
+ tenants = [];
+
+ serviceInstance: any = {
+ rollback:'true'
+ };
+
+ isUserProvidedNaming: boolean = false;
+
+ onLcpSelect(newValue: string) {
+ let value: LcpRegionsAndTenants = undefined;
+ this.lcpRegionsAndTenants.subscribe(data => value = data);
+ this.tenants = value.lcpRegionsTenantsMap[newValue];
+ }
+
+ ngOnInit() {
+ this.store.dispatch(loadProductFamiliesAction());
+ this.store.dispatch(loadLcpTenant());
+ this.store.dispatch(loadAicZones());
+ this.store.dispatch(loadCategoryParameters());
+ }
+}
+
+
+
diff --git a/vid-webpack-master/src/app/components/form-async/form-async.style.scss b/vid-webpack-master/src/app/components/form-async/form-async.style.scss
new file mode 100644
index 000000000..e6c89bcae
--- /dev/null
+++ b/vid-webpack-master/src/app/components/form-async/form-async.style.scss
@@ -0,0 +1,15 @@
+.form-wrapper{
+ width:640px;
+ padding-left: 50px;
+ padding-top: 50px;
+ .details-item{
+ padding-bottom: 30px;
+ }
+ .details-item {
+ select {
+ font-family: OpenSans-Italic;
+ font-size: 14px;
+ color: #959595 !important;
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/components/form-async/form-async.template.html b/vid-webpack-master/src/app/components/form-async/form-async.template.html
new file mode 100644
index 000000000..c63a7bee6
--- /dev/null
+++ b/vid-webpack-master/src/app/components/form-async/form-async.template.html
@@ -0,0 +1,67 @@
+<div class="content">
+ <form #form="ngForm" name="networkNodeForm" class="form-wrapper">
+ <div *ngIf="isUserProvidedNaming" class="details-item">
+ <label class="placeholder">Instance name*</label>
+ <input [attr.data-tests-id]="'instanceName'" id="instance-name" [(ngModel)]="serviceInstance.instanceName" name="instance-name"
+ class="form-control input-text" placeholder="Type Instance Name" type="text" required>
+ </div>
+
+ <div class="details-item">
+ <label>Product family</label>
+ <select class="form-control input-text" [(ngModel)]="serviceInstance.productFamily" data-tests-id="productFamily" id="product-family-select"
+ name="product-family-select">
+ <option class="placeholder" [value]="undefined" disabled>Select Product Family</option>
+ <option *ngFor="let productFamily of productFamilies | async" [value]="productFamily.id" [disabled]="!productFamily.isPermitted">{{productFamily.name}}</option>
+ </select>
+ </div>
+
+ <div class="details-item">
+ <label>LCP region:*</label>
+ <select (change)="onLcpSelect($event.target.value)" class="form-control input-text" [(ngModel)]="serviceInstance.lcpRegion"
+ name="lcpRegion" id="lcpRegion-select" data-tests-id="lcpRegion" required>
+ <option class="placeholder1" [value]="undefined" disabled>Select LCP Region</option>
+ <option *ngFor="let lcpRegion of lcpRegions | async" [value]="lcpRegion.id" [disabled]="!lcpRegion.isPermitted" class="lcpRegionOption">{{lcpRegion.id}}</option>
+ </select>
+ </div>
+ <div class="details-item">
+ <label>Tenant:*</label>
+ <select class="form-control input-text" [(ngModel)]="serviceInstance.tenantId" name="tenant" id="tenant-select" data-tests-id="tenant"
+ required>
+ <option class="placeholder1" [value]="undefined" disabled>Select Tenant</option>
+ <option *ngFor="let tenant of tenants" [value]="tenant.id" [disabled]="!tenant.isPermitted">{{tenant.name}}</option>
+ </select>
+ </div>
+
+ <div class="details-item">
+ <label>AIC Zone:</label>
+ <select class="form-control input-text" name="aicZone" id="aicZone-select" data-tests-id="aic_zone" [(ngModel)]="serviceInstance.aicZone">
+ <option class="placeholder1" [value]="undefined" disabled>Select AIC Zone</option>
+ <option class="aicZoneOption" *ngFor="let aicZone of aicZones | async" [value]="aicZone.id">{{aicZone.name}}</option>
+ </select>
+ </div>
+ <div class="details-item">
+ <label>Platform:</label>
+ <select data-tests-id="platform" class="form-control input-text" name="platform" id="platform" [(ngModel)]="serviceInstance.platformName">
+ <option class="placeholder1" [value]="undefined" disabled>Select Platform</option>
+ <option *ngFor="let platform of platformList | async" [value]="platform.id">{{platform.name}}</option>
+ </select>
+ </div>
+
+ <div class="details-item">
+ <label>Line Of Business:*</label>
+ <select data-tests-id="lineOfBusiness" class="form-control input-text" [(ngModel)]="serviceInstance.lineOfBusiness"
+ name="owningEntity" id="owningEntity" required>
+ <option class="placeholder1" [value]="undefined" disabled>Select Line Of Business</option>
+ <option *ngFor="let lineOfBusiness of lineOfBusinessList | async" [value]="lineOfBusiness.id">{{lineOfBusiness.name}}</option>
+ </select>
+ </div>
+ <div class="details-item">
+ <label>Rollback On Failure:</label>
+ <select data-tests-id="suppressRollback" class="form-control input-text" name="rollbackOnFailure" id="rollbackOnFailure" [(ngModel)]="serviceInstance.rollback">
+ <option *ngFor="let option of rollbackOnFailure" [value]="option.id">{{option.name}}</option>
+ </select>
+ </div>
+ </form>
+
+</div>
+
diff --git a/vid-webpack-master/src/app/components/instance-popup/instance-popup.components.ts b/vid-webpack-master/src/app/components/instance-popup/instance-popup.components.ts
new file mode 100644
index 000000000..b8ce613d4
--- /dev/null
+++ b/vid-webpack-master/src/app/components/instance-popup/instance-popup.components.ts
@@ -0,0 +1,9 @@
+import {ModelInformationItem} from "../../shared/components/model-information/model-information.component";
+
+
+export interface InstancePopup {
+ onCancelClick():void;
+ createModelInformationItems(): Array<ModelInformationItem>;
+ getModelName():string;
+}
+
diff --git a/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.component.ts b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.component.ts
new file mode 100644
index 000000000..b6a2e3967
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.component.ts
@@ -0,0 +1,238 @@
+import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild} from '@angular/core';
+import {FormControl, FormGroup, Validators} from "@angular/forms";
+import {ServicePopupDataModel} from './servicePopupDataModel';
+import {AaiService} from '../../../services/aaiService/aai.service';
+import {updateServiceInstance} from "../../../service.actions";
+import * as _ from 'lodash';
+import {ServiceModel} from "../../../shared/models/serviceModel";
+import {ModelInfo} from "../../../shared/models/modelInfo";
+import {loadProductFamiliesAction} from "../../../services/aaiService/aai.actions";
+import {Observable} from "rxjs/Observable";
+import {SelectOptionInterface} from "../../../shared/models/selectOption";
+import {NgRedux, select} from "@angular-redux/store";
+import {AppState} from "../../../store/reducers";
+import {isNullOrUndefined} from 'util';
+import {ServiceInstanceDetailsService} from './service-instance-details.service';
+import {NumbersLettersUnderscoreValidator} from '../../../shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
+import {DefaultDataGeneratorService} from '../../../shared/services/defaultDataServiceGenerator/default.data.generator.service';
+
+
+@Component({
+ selector: 'service-instance-details',
+ templateUrl: 'service-instance-details.html',
+ styleUrls: ['service-instance-details.scss'],
+ providers: [AaiService]
+})
+
+export class ServiceInstanceDetailsComponent implements OnInit, OnChanges {
+ ngOnChanges(changes: SimpleChanges): void {
+ if (changes["serviceInstance"] !== undefined && changes["serviceInstance"].currentValue !== changes["serviceInstance"].previousValue && changes["serviceInstance"].currentValue !== null) {
+ this.oldServiceInstance = Object.assign({}, this.serviceInstance);
+ }
+ }
+ _serviceModel: ServiceModel;
+ @Input () serviceInstance: any;
+ @Input () dynamicInputs;
+ @Input () servicesQty: number;
+ @Input ()
+ set serviceModel(serviceModel: ServiceModel) {
+ this._serviceModel = serviceModel;
+ this.updateFormGroupControlsWithServiceModel(serviceModel);
+ }
+ @ViewChild('serviceForm') serviceForm: 'ServiceForm';
+ @Output() closePopup : EventEmitter<any> = new EventEmitter<any>();
+ @Output() onDataChanged: EventEmitter<any> = new EventEmitter<any>();
+ oldServiceInstance = {};
+
+ //todo: implement Epics and use @select to fetch the rest of the form's data as done with productFamilies.
+ //that way we can loose the updateFormData function and the subscription to store in the constructor.
+ @select(['service','productFamilies'])
+ readonly productFamilies : Observable<SelectOptionInterface[]>;
+ serviceDetails:any = {
+
+ };
+ servicePopupDataModel: ServicePopupDataModel = new ServicePopupDataModel();
+ serviceInstanceDetailsFormGroup: FormGroup;
+ serviceInstanceDetailsService : ServiceInstanceDetailsService;
+
+ constructor(private _aaiService: AaiService, private store: NgRedux<AppState>, private _serviceInstanceDetailsService : ServiceInstanceDetailsService, private _defaultDataGeneratorService : DefaultDataGeneratorService) {
+ this.store.subscribe(() => {this.updateFormData()});
+ this.serviceInstanceDetailsService = this._serviceInstanceDetailsService;
+ this.serviceInstanceDetailsFormGroup = this.createFormGroup();
+
+ this.serviceInstanceDetailsFormGroup.valueChanges.subscribe(()=> {
+ this.onDataChanged.next();
+ })
+ }
+
+ ngOnInit() {
+ this.subscribeToFormChanges();
+ this._aaiService.getSubscribers().subscribe();
+ this._aaiService.getCategoryParameters(null).subscribe();
+ this._aaiService.getAicZones().subscribe();
+ this.store.dispatch(loadProductFamiliesAction());
+ }
+
+
+ createFormGroup(): FormGroup {
+ const formGroup = new FormGroup({
+ globalSubscriberId: new FormControl(
+ Validators.compose([Validators.required])
+ ),
+ productFamilyId: new FormControl(),
+ subscriptionServiceType: new FormControl({value: null, disabled: true}, Validators.compose([Validators.required])),
+ lcpCloudRegionId: new FormControl({value: null, disabled: true}, Validators.compose([Validators.required])),
+ tenantId: new FormControl({value: null, disabled: true}, Validators.compose([Validators.required])),
+ aicZoneId: new FormControl(),
+ projectName: new FormControl(),
+ owningEntityId: new FormControl(Validators.compose([Validators.required])),
+ rollbackOnFailure: new FormControl(null, Validators.required),
+ });
+
+ return formGroup;
+ }
+
+ updateFormGroupControlsWithServiceModel(serviceModel: ServiceModel) {
+ this.serviceInstanceDetailsFormGroup.markAsUntouched();
+
+ if (serviceModel) {
+ this.serviceDetails.isUserProvidedNaming = serviceModel.isUserProvidedNaming;
+ if (serviceModel.isUserProvidedNaming) {
+ this.serviceInstanceDetailsFormGroup.addControl('instanceName', new FormControl('', Validators.compose([Validators.required, NumbersLettersUnderscoreValidator.valid])))
+ }else{
+ this.serviceInstanceDetailsFormGroup.removeControl('instanceName');
+ }
+
+ if (serviceModel.isMultiStepDesign) {
+ this.serviceInstanceDetailsFormGroup.addControl('pause', new FormControl(true));
+ }else{
+ this.serviceInstanceDetailsFormGroup.removeControl('pause');
+ }
+ }
+ }
+
+ updateFormData() {
+ let service = this.store.getState().service;
+ this.servicePopupDataModel.subscribers = service.subscribers;
+ this.servicePopupDataModel.serviceTypes = service.serviceTypes[this.servicePopupDataModel.globalCustomerId];
+ this.servicePopupDataModel.lcpRegions = service.lcpRegionsAndTenants.lcpRegionList;
+ if (this.serviceInstance) {
+ this.servicePopupDataModel.tenants = service.lcpRegionsAndTenants.lcpRegionsTenantsMap[this.serviceInstance.lcpCloudRegionId];
+ }
+ this.servicePopupDataModel.aicZones = service.aicZones;
+ this.servicePopupDataModel.owningEntities = _.get(service.categoryParameters, 'owningEntityList');
+ this.servicePopupDataModel.projects = _.get(service.categoryParameters, 'projectList');
+ this.onDataChanged.next();
+ }
+
+ subscribeToFormChanges(): void {
+ this.serviceInstanceDetailsFormGroup.get('globalSubscriberId').valueChanges.subscribe(val => {
+ this.updateServiceTypes(val);
+ this.setDisabledState(val, 'subscriptionServiceType');
+
+ });
+ this.serviceInstanceDetailsFormGroup.get('subscriptionServiceType').valueChanges.subscribe(val => {
+ this.getTenants(val);
+ this.setDisabledState(val, 'lcpCloudRegionId');
+
+ });
+ this.serviceInstanceDetailsFormGroup.get('lcpCloudRegionId').valueChanges.subscribe(val => {
+ this.setDisabledState(val, 'tenantId');
+ this.updateTenantList(val);
+
+ });
+
+ this.serviceInstanceDetailsFormGroup.get('tenantId').valueChanges.subscribe(val => {
+ this.serviceDetails.tenantName = this.getNameFromListById(this.servicePopupDataModel.tenants, val);
+ this.onDataChanged.next();
+ });
+
+ this.serviceInstanceDetailsFormGroup.get('aicZoneId').valueChanges.subscribe(val => {
+ this.serviceDetails.aicZoneName = this.getNameFromListById(this.servicePopupDataModel.aicZones, val);
+ this.onDataChanged.next();
+ });
+ }
+
+ getNameFromListById(list, id:string ) {
+ if(list && id) {
+ let filterItem = list.filter(item => {
+ return item.id == id;
+ })
+ return filterItem && filterItem[0].name;
+ }
+ return null;
+ }
+
+ setDisabledState(val, field: string): void {
+ if(val) {
+ this.serviceInstanceDetailsFormGroup.controls[field].enable();
+ } else {
+ this.serviceInstanceDetailsFormGroup.controls[field].disable();
+ }
+ }
+
+ isShowingNotificationArea(): boolean {
+ return this.servicesQty > 1;
+ }
+
+ updateServiceTypes(subscriberId) {
+ if (subscriberId) {
+ this.servicePopupDataModel.globalCustomerId = subscriberId;
+ this._aaiService.getServiceTypes(subscriberId).subscribe(() => {
+ this.updateFormData();
+ this.onDataChanged.next();
+ }, (error) => {
+
+ });
+ }
+ }
+
+ updateTenantList(cloudRegionId) {
+ this.servicePopupDataModel.tenants = this.store.getState().service.lcpRegionsAndTenants.lcpRegionsTenantsMap[cloudRegionId];
+ this.onDataChanged.next();
+ }
+
+ getTenants(serviceType) {
+ if (serviceType) {
+ this._aaiService.getLcpRegionsAndTenants(this.servicePopupDataModel.globalCustomerId, serviceType).subscribe(()=>{
+ this.onDataChanged.next();
+ });
+ }
+ }
+
+ onSubmit(formValues): void {
+ formValues.bulkSize = this.servicesQty;
+ let dynamicFields: { [dynamicField: string] : string; };
+ dynamicFields = {};
+ this.dynamicInputs.map(function (x) {
+ let dynamicField: string = x.id;
+ dynamicFields[dynamicField] = formValues[dynamicField];
+ delete formValues[dynamicField];
+ });
+ formValues.instanceParams = [];
+ formValues.instanceParams.push(dynamicFields);
+ formValues.modelInfo = new ModelInfo(this._serviceModel);
+ Object.assign(formValues, this.serviceDetails);
+ this.store.dispatch(updateServiceInstance(formValues, this._serviceModel.uuid));
+ if (this.store.getState().global.flags['FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD']){
+ this._defaultDataGeneratorService.updateReduxOnFirstSet(this._serviceModel.uuid,formValues);
+ }
+ window.parent.postMessage( {
+ eventId: 'submitIframe',
+ data: {
+ serviceModelId: this._serviceModel.uuid
+ }
+ }, "*");
+ this.closePopup.emit(this._serviceModel.uuid);
+ }
+
+ hasApiError(controlName : string, data : Array<any>){
+ if(!isNullOrUndefined(this.servicePopupDataModel) && !isNullOrUndefined(data)){
+ if(!this.serviceInstanceDetailsFormGroup.controls[controlName].disabled && data.length === 0){
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.html b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.html
new file mode 100644
index 000000000..3d632bd89
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.html
@@ -0,0 +1,168 @@
+
+<div id="service-instance-details">
+ <form id="serviceForm" #serviceForm="ngForm" (ngSubmit)="onSubmit(serviceForm.value)" [formGroup]="serviceInstanceDetailsFormGroup">
+ <!--We can't use [hidden] since bootstrap.css label has display: inline-block. -->
+ <!--see https://stackoverflow.com/questions/34650410/angular-2-hidden-does-not-seem-to-be-working-->
+ <label id="notification-area" *ngIf="isShowingNotificationArea()">Data entered will apply to all service instances</label>
+
+ <div class="details-item" *ngIf="serviceInstanceDetailsFormGroup.get('instanceName')">
+ <label class="required">Instance name:</label>
+ <input patternInput
+ pattern="^[a-zA-Z0-9_]*$"
+ [attr.data-tests-id]="'instanceName'"
+ id="instance-name"
+ name="instance-name"
+ [ngClass]="{'error-style' :(serviceInstance?.instanceName != '' && serviceInstanceDetailsFormGroup.controls['instanceName']?.touched && serviceInstanceDetailsFormGroup.controls['instanceName']?.errors?.pattern !== null)}"
+ [formControlName]="'instanceName'"
+ class="form-control input-text"
+ placeholder="Type Instance Name"
+ type="text"
+ [(ngModel)]="serviceInstance.instanceName" required>
+ <form-control-error
+ *ngIf="serviceInstance?.instanceName != '' && serviceInstanceDetailsFormGroup.controls['instanceName']?.touched && serviceInstanceDetailsFormGroup.controls['instanceName']?.errors?.pattern !== null"
+ [message]="'Instance name may include only alphanumeric characters and underscore.'"></form-control-error>
+
+ </div>
+
+ <div class="details-item">
+ <label class="required">Subscriber name:</label>
+ <select class="subscriber form-control input-text" id="subscriber-name-select" data-tests-id="subscriberName"
+ name="subscriber-name-select" [formControlName]="'globalSubscriberId'"
+ [ngClass]="{'error-style' :serviceInstanceDetailsService.hasApiError('globalSubscriberId',servicePopupDataModel?.subscribers, serviceInstanceDetailsFormGroup)}"
+ [(ngModel)]="serviceInstance.globalSubscriberId"
+ required>
+ <option [value]="undefined" disabled>Select Subscriber Name</option>
+ <option class="subscriberNameOption" *ngFor="let subscriber of servicePopupDataModel.subscribers"
+ [value]="subscriber.id" [disabled]="!subscriber.isPermitted">{{subscriber.name}}</option>
+ </select>
+ <form-control-error *ngIf="serviceInstanceDetailsService.hasApiError('globalSubscriberId',servicePopupDataModel?.subscribers, serviceInstanceDetailsFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+
+ </div>
+
+ <div class="details-item">
+ <label class="required">Service type:</label>
+ <select class="form-control input-text"
+ [(ngModel)]="serviceInstance.subscriptionServiceType"
+ [formControlName]="'subscriptionServiceType'"
+ [ngClass]="{'error-style' :serviceInstanceDetailsService.hasApiError('subscriptionServiceType',servicePopupDataModel?.serviceTypes, serviceInstanceDetailsFormGroup)}"
+ data-tests-id="serviceType" id="service-type-select"
+ name="service-type" required>
+ <option [value]="undefined" disabled>Select Service Type</option>
+ <option *ngFor="let serviceType of servicePopupDataModel.serviceTypes" class="serviceTypeOption" [value]="serviceType.name" [disabled]="!serviceType.isPermitted">{{serviceType.name}}</option>
+ </select>
+ <form-control-error *ngIf="serviceInstanceDetailsService.hasApiError('subscriptionServiceType',servicePopupDataModel?.serviceTypes, serviceInstanceDetailsFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+
+ <div class="details-item">
+ <label class="required">Product family:</label>
+ <select class="form-control input-text"
+ data-tests-id="productFamily"
+ id="product-family-select"
+ [ngClass]="{'error-style' :serviceInstanceDetailsService.hasApiError('productFamilyId',productFamilies, serviceInstanceDetailsFormGroup)}"
+ [formControlName]="'productFamilyId'"
+ [(ngModel)]="serviceInstance.productFamilyId"
+ name="product-family-select" required>
+ <option [value]="undefined" disabled>Select Product Family</option>
+ <option *ngFor="let productFamily of productFamilies | async" [value]="productFamily.id"
+ [disabled]="!productFamily.isPermitted">{{productFamily.name}}</option>
+ </select>
+ <form-control-error *ngIf="serviceInstanceDetailsService.hasApiError('productFamilyId',productFamilies, serviceInstanceDetailsFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+
+ <div class="details-item">
+ <label class="required">LCP region:</label>
+ <select
+ class="form-control input-text"
+ [formControlName]="'lcpCloudRegionId'"
+ [(ngModel)]="serviceInstance.lcpCloudRegionId"
+ [ngClass]="{'error-style ' : serviceInstanceDetailsService.hasApiError('lcpCloudRegionId', servicePopupDataModel?.lcpRegions, serviceInstanceDetailsFormGroup)}"
+ name="lcpRegion"
+ id="lcpRegion-select"
+ data-tests-id="lcpRegion"
+ required>
+ <option [value]="undefined" disabled>Select LCP Region</option>
+ <option *ngFor="let lcpRegion of servicePopupDataModel.lcpRegions" [value]="lcpRegion.id" [disabled]="!lcpRegion.isPermitted" class="lcpRegionOption">{{lcpRegion.id}}</option>
+ </select>
+ <form-control-error *ngIf="serviceInstanceDetailsService.hasApiError('lcpCloudRegionId', servicePopupDataModel?.lcpRegions, serviceInstanceDetailsFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+
+ <div class="details-item">
+ <label class="required">Tenant:</label>
+ <select class="form-control input-text"
+ [formControlName]="'tenantId'"
+ [(ngModel)]="serviceInstance.tenantId"
+ name="tenant" id="tenant-select"
+ [ngClass]="{'error-style ' : serviceInstanceDetailsService.hasApiError('tenantId',servicePopupDataModel?.tenants ,serviceInstanceDetailsFormGroup)}"
+ data-tests-id="tenant" required>
+ <option [value]="undefined" disabled>Select Tenant</option>
+ <option *ngFor="let tenant of servicePopupDataModel.tenants" [value]="tenant.id" [disabled]="!tenant.isPermitted">{{tenant.name}}</option>
+ </select>
+ <form-control-error *ngIf="serviceInstanceDetailsService.hasApiError('tenantId',servicePopupDataModel?.tenants ,serviceInstanceDetailsFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+
+ <div class="details-item">
+ <label>AIC Zone:</label>
+ <select
+ class="form-control input-text"
+ name="aicZone" id="aicZone-select"
+ data-tests-id="aic_zone"
+ [formControlName]="'aicZoneId'"
+ [ngClass]="{'error-style ' : servicePopupDataModel?.aicZones?.length == 0 && serviceInstanceDetailsFormGroup.controls['aicZoneId'].disabled == false}"
+ [(ngModel)]="serviceInstance.aicZoneId" >
+ <option [value]="undefined" disabled>Select AIC Zone</option>
+ <option class="aicZoneOption" *ngFor="let aicZone of servicePopupDataModel.aicZones" [value]="aicZone.id">{{aicZone.name}}</option>
+ </select>
+ <form-control-error *ngIf="serviceInstanceDetailsService.hasApiError('aicZoneId',servicePopupDataModel?.aicZones ,serviceInstanceDetailsFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+
+ </div>
+
+ <div class="details-item">
+ <label>Project:</label>
+ <select
+ [attr.data-tests-id]="'project'"
+ class="form-control input-text"
+ [ngClass]="{'error-style ' : servicePopupDataModel?.projects?.length == 0 && serviceInstanceDetailsFormGroup.controls['projectName'].disabled == false}"
+ name="project" id="project"
+ [formControlName]="'projectName'"
+ [(ngModel)]="serviceInstance.projectName" >
+ <option [value]="undefined" disabled>Select Project</option>
+ <option *ngFor="let project of servicePopupDataModel.projects" [value]="project.id">{{project.name}}</option>
+ </select>
+ <form-control-error *ngIf="serviceInstanceDetailsService.hasApiError('projectName',servicePopupDataModel?.projects ,serviceInstanceDetailsFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+
+ </div>
+
+ <div class="details-item">
+ <label class="required">Owning entity:</label>
+ <select [attr.data-tests-id]="'owningEntity'"
+ class="form-control input-text"
+ [formControlName]="'owningEntityId'"
+ [(ngModel)]="serviceInstance.owningEntityId"
+ name="owningEntity" id="owningEntity"
+ [ngClass]="{'error-style ' : servicePopupDataModel?.owningEntities?.length == 0 && serviceInstanceDetailsFormGroup.controls['owningEntityId'].disabled == false}"
+ required>
+ <option [value]="undefined" disabled>Select Owning Entity</option>
+ <option *ngFor="let owningEntity of servicePopupDataModel.owningEntities" [value]="owningEntity.id">{{owningEntity.name}}</option>
+ </select>
+ <form-control-error *ngIf="serviceInstanceDetailsService.hasApiError('owningEntityId',servicePopupDataModel?.owningEntities ,serviceInstanceDetailsFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+ <div class="details-item">
+ <label class="required">Rollback On Failure:</label>
+ <select [attr.data-tests-id]="'rollback'"
+ [ngClass]="{'error-style' :serviceInstanceDetailsService.hasApiError('rollbackOnFailure',servicePopupDataModel?.rollbackOnFailure, serviceInstanceDetailsFormGroup)}"
+ class="form-control input-text"
+ [(ngModel)]="serviceInstance.rollbackOnFailure"
+ [formControlName]="'rollbackOnFailure'" name="rollbackOnFailure" id="rollbackOnFailure">
+ <option *ngFor="let option of servicePopupDataModel.rollbackOnFailure" [value]="option.id">{{option.name}}</option>
+ </select>
+ <form-control-error *ngIf="serviceInstanceDetailsService.hasApiError('rollbackOnFailure',servicePopupDataModel?.rollbackOnFailure, serviceInstanceDetailsFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+ <div class="details-item" *ngIf="serviceInstanceDetailsFormGroup.get('pause')">
+ <input #pause id="pause" [formControlName]="'pause'" [(ngModel)]="serviceInstance.pause" type="checkbox" name="pause" data-toggle="toggle">
+ <label class="checkbox-label" for="pause">Pause on pause points:</label>
+ </div>
+
+
+ <dynamic-inputs *ngIf="dynamicInputs != undefined && dynamicInputs.length>0" [group]="serviceInstanceDetailsFormGroup" [list]="dynamicInputs"></dynamic-inputs>
+ </form>
+</div>
diff --git a/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.scss b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.scss
new file mode 100644
index 000000000..928343d43
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.scss
@@ -0,0 +1,64 @@
+#service-instance-details {
+ position: relative;
+
+ #notification-area {
+ color: #959595;
+ font-size: 12px;
+ position: absolute;
+ top: 3px;
+ left: 30px;
+ }
+
+ height: 100%;
+ overflow: auto;
+ padding: 30px;
+
+ /deep/ {
+ .form-control {
+ border-radius: 2px;
+ box-shadow: none;
+ border-color: #D2D2D2;
+ }
+
+ label {
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ }
+
+ select {
+ @extend .form-control;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: url('../../../../assets/img/chevron.svg') 0 0 no-repeat;
+ background-size: 24px;
+ background-position-x: right;
+ background-position-y: center;
+ font-family: OpenSans-Italic;
+ font-size: 14px;
+ color: #959595;
+ height: 38px;
+ }
+
+ input:not([type='checkbox']) {
+ @extend .form-control;
+ height: 38px;
+ }
+
+ .form-control[disabled], fieldset[disabled] .form-control {
+ opacity: 0.5;
+ }
+ .input-text {
+ border: 1px solid #D2D2D2;
+ border-radius: 2px;
+ }
+
+ .details-item {
+ margin-bottom: 20px;
+ }
+ }
+
+ .checkbox-label {
+ font-family: OpenSans-Regular;
+ }
+}
diff --git a/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.service.spec.ts b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.service.spec.ts
new file mode 100644
index 000000000..605653bd0
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.service.spec.ts
@@ -0,0 +1,26 @@
+import { getTestBed, TestBed } from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+import { ServiceInstanceDetailsService } from './service-instance-details.service';
+import { NgRedux } from '@angular-redux/store';
+
+export class MockAppStore<T> {}
+
+describe('Service instance details service', () => {
+ let injector;
+ let service: ServiceInstanceDetailsService;
+ let httpMock: HttpTestingController;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
+ providers: [ServiceInstanceDetailsService,
+ {provide: NgRedux, useClass: MockAppStore}]
+ });
+
+ injector = getTestBed();
+ service = injector.get(ServiceInstanceDetailsService);
+ httpMock = injector.get(HttpTestingController);
+ });
+});
+
+
diff --git a/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.service.ts b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.service.ts
new file mode 100644
index 000000000..99b390d2f
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-instance-details/service-instance-details.service.ts
@@ -0,0 +1,22 @@
+import { Injectable } from '@angular/core';
+import { isNullOrUndefined } from 'util';
+import { FormGroup } from '@angular/forms';
+import * as _ from 'lodash';
+import { createVFModuleInstance, updateVFModuleInstance, updateVNFInstance } from '../../../service.actions';
+import { NgRedux } from '@angular-redux/store';
+import { AppState } from '../../../store/reducers';
+
+@Injectable()
+export class ServiceInstanceDetailsService {
+ static controlsFieldsStatus = {};
+
+ constructor(private store: NgRedux<AppState>) { }
+ hasApiError(controlName: string, data: Array<any>, serviceInstanceDetailsFormGroup: FormGroup) {
+ if (!isNullOrUndefined(data)) {
+ if (!serviceInstanceDetailsFormGroup.controls[controlName].disabled && data.length === 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/vid-webpack-master/src/app/components/service-popup/service-instance-details/servicePopupDataModel.ts b/vid-webpack-master/src/app/components/service-popup/service-instance-details/servicePopupDataModel.ts
new file mode 100644
index 000000000..c7894e2cd
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-instance-details/servicePopupDataModel.ts
@@ -0,0 +1,32 @@
+import {SelectOption, SelectOptionInterface} from "../../../shared/models/selectOption";
+
+export class ServicePopupDataModel {
+ subscribers: SelectOptionInterface[];
+ serviceTypes: SelectOptionInterface[];
+ aicZones: SelectOptionInterface[];
+ lcpRegions: SelectOptionInterface[];
+ productFamilies: SelectOptionInterface[];
+ lcpRegionsTenantsMap: object;
+ tenants: SelectOptionInterface[];
+ projects: SelectOptionInterface[];
+ owningEntities: SelectOptionInterface[];
+ globalCustomerId: string;
+ rollbackOnFailure: SelectOptionInterface[];
+
+
+ constructor(){
+ this.subscribers = null;
+ this.serviceTypes = null;
+ this.aicZones = null;
+ this.lcpRegions = null;
+ this.lcpRegionsTenantsMap = {};
+ this.tenants = null;
+ this.productFamilies = null;
+ this.projects = null;
+ this.owningEntities = null;
+ this.rollbackOnFailure = [
+ new SelectOption({id: 'true', name: 'Rollback'}),
+ new SelectOption({id: 'false', name: 'Don\'t Rollback'})
+ ];
+ }
+}
diff --git a/vid-webpack-master/src/app/components/service-popup/service-popup.component.ts b/vid-webpack-master/src/app/components/service-popup/service-popup.component.ts
new file mode 100644
index 000000000..908ae4adf
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-popup.component.ts
@@ -0,0 +1,144 @@
+import {Component, ViewChild} from '@angular/core';
+import {DialogComponent, DialogService} from 'ng2-bootstrap-modal';
+import {ServiceModel} from '../../shared/models/serviceModel';
+import {Constants} from '../../shared/utils/constants';
+import {ServiceInstanceDetailsComponent} from './service-instance-details/service-instance-details.component';
+import {ActivatedRoute} from "@angular/router";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {Utils} from "../../utils/utils";
+import {ServicePlanningService} from "../../services/service-planning.service";
+import * as _ from 'lodash';
+import {ModelInformationItem} from '../../shared/components/model-information/model-information.component';
+import {deleteServiceInstance} from '../../service.actions';
+
+import {InstancePopup} from "../instance-popup/instance-popup.components";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {ServicePopupService} from './service-popup.service';
+import {IframeService} from "../../shared/utils/iframe.service";
+
+export interface ServicePopupModel {
+ serviceModel: ServiceModel
+}
+
+@Component({
+ selector: 'service-popup',
+ templateUrl: 'service-popup.html',
+ styleUrls: ['service-popup.scss'],
+ providers: [AaiService, ServicePopupService]
+})
+
+export class ServicePopupComponent extends DialogComponent<ServicePopupModel, boolean>
+ implements ServicePopupModel, InstancePopup{
+ @ViewChild(ServiceInstanceDetailsComponent) serviceInstanceDetails: ServiceInstanceDetailsComponent;
+
+ serviceModel: ServiceModel;
+ serviceModelId: string;
+ serviceInstance: any = {
+ 'rollbackOnFailure' : 'false'
+ };
+ title: string = Constants.ServicePopup.TITLE;
+ dynamicInputs: any[] = null;
+
+ maxServiceQty:number = 50;
+ minServiceQty:number = 1;
+ servicesQty = 1; //default
+ quantityOptions = this.getQuantityOptions();
+
+ modelInformationItems: Array<ModelInformationItem> = [];
+ hasGeneralApiError : boolean = false;
+ parentElementClassName = 'content';
+
+ constructor(dialogService: DialogService, private route: ActivatedRoute, private _aaiService: AaiService,
+ private _iframeService : IframeService,
+ private _servicePlanningService: ServicePlanningService, private store: NgRedux<AppState>, private _servicePopupService : ServicePopupService) {
+ super(dialogService);
+ this.title = Constants.ServicePopup.TITLE;
+ }
+
+ updateGeneralErrorSection() : void {
+ this.hasGeneralApiError = this._servicePopupService.onControlError(this.serviceInstanceDetails, this.serviceInstanceDetails.serviceInstanceDetailsFormGroup);
+ }
+
+
+ ngOnInit() {
+ this.route
+ .queryParams
+ .subscribe(params => {
+ this.serviceModelId = params['serviceModelId'];
+ if(params['isCreate']=="true") {
+ this.store.dispatch(deleteServiceInstance(this.serviceModelId));
+ }
+ this.updateServiceModelById(this.serviceModelId);
+ this.updateInstanceFromStore();
+ });
+ }
+
+ updateInstanceFromStore() {
+ let serviceInstance;
+ if (_.has(this.store.getState().service.serviceInstance, this.serviceModelId)) {
+ serviceInstance = Object.assign({}, this.store.getState().service.serviceInstance[this.serviceModelId]);
+ }
+
+ this.serviceInstance = serviceInstance ? serviceInstance : this.serviceInstance;
+ this.servicesQty = serviceInstance ? serviceInstance.bulkSize : 1;
+ if (serviceInstance && serviceInstance.instanceParams && serviceInstance.instanceParams[0]) {
+ this.dynamicInputs = this.dynamicInputs.map(function (x) {
+ x.value = (serviceInstance.instanceParams[0][x.id]) ? serviceInstance.instanceParams[0][x.id] : x.value;
+ return x;
+ });
+ }
+ }
+
+ updateServiceModelById(serviceModelId) {
+ this._aaiService.getServiceModelById(serviceModelId).subscribe(
+ value => {
+ const convertedModel = Utils.convertModel(value);
+ this.serviceModel = new ServiceModel(convertedModel);
+ let displayInputs = Object.assign({},convertedModel.service.inputs);
+ this.dynamicInputs = _.isEmpty(displayInputs)? [] : this._servicePlanningService.getArbitraryInputs(displayInputs);
+ this.modelInformationItems = this.createModelInformationItems();
+ },
+ error => {console.log('error is ', error)},
+ () => {console.log('completed')}
+ );
+ }
+
+ createModelInformationItems() : Array<ModelInformationItem> {
+ return [
+ new ModelInformationItem("Model version", "modelVersion", [this.serviceModel.version], "", true),
+ new ModelInformationItem("Description", "description", [this.serviceModel.description]),
+ new ModelInformationItem("Category", "category", [this.serviceModel.category]),
+ new ModelInformationItem("UUID", "uuid", [this.serviceModel.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
+ new ModelInformationItem("Invariant UUID", "invariantUuid", [this.serviceModel.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
+ new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
+ new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole])
+ ];
+ }
+
+ onCancelClick() {
+ this._iframeService.removeClassCloseModal(this.parentElementClassName);
+ this.dialogService.removeDialog(this);
+ this.serviceInstance = this.serviceInstanceDetails.oldServiceInstance;
+
+ this._servicePopupService.resetDynamicInputs(this.serviceInstanceDetails, this.dynamicInputs);
+ // Delaying the iframe close in few milliseconds.
+ // This should workaround a problem in Selenium tests' that
+ // blocks after click because the iframe goes out before
+ // the driver understands it was clicked. Similar bug is
+ // described here:
+ // - https://github.com/mozilla/geckodriver/issues/611
+ // - https://bugzilla.mozilla.org/show_bug.cgi?id=1223277
+ setTimeout(() => {
+ window.parent.postMessage("closeIframe", "*");
+ }, 15);
+ }
+
+ getModelName(): string {
+ return (this.serviceModel && this.serviceModel.name) || "";
+ }
+
+ getQuantityOptions(){
+ return _.range(this.minServiceQty, this.maxServiceQty + 1);
+ }
+}
diff --git a/vid-webpack-master/src/app/components/service-popup/service-popup.html b/vid-webpack-master/src/app/components/service-popup/service-popup.html
new file mode 100644
index 000000000..e967daa3b
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-popup.html
@@ -0,0 +1,52 @@
+<div id="service-popup" class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" (click)="onCancelClick()" >&times;</button>
+ <span [attr.data-tests-id]="'create-modal-title'" class="modal-title">{{title}}</span>
+ </div>
+ <div class="modal-body popup-content">
+
+ <div class="header-left">
+ <div>SERVICE MODEL: <span>"{{getModelName()}}"</span></div>
+ </div>
+
+ <div class="header-right">
+ Service Instance Details
+ </div>
+
+ <label class="quantity-label">Qty:</label>
+ <div class="quantity">
+ <select class="quantity-select" [(ngModel)]="servicesQty" name="quantity" id="quantity-select" required>
+ <option *ngFor="let qty of quantityOptions" [value]="qty">{{qty}}</option>
+ </select>
+ </div>
+
+ <div class="service-model">
+
+ <model-information [modelInformationItems]="modelInformationItems"></model-information>
+ </div>
+
+ <div class="service-instance">
+ <service-instance-details [dynamicInputs]="dynamicInputs"
+ [serviceInstance]="serviceInstance"
+ [serviceModel]="serviceModel"
+ [servicesQty]="servicesQty"
+ (onDataChanged)="updateGeneralErrorSection()"
+ (closePopup)="onCancelClick($event)"></service-instance-details>
+ </div>
+
+ </div>
+ <div class="modal-footer row" style="padding: 0">
+ <div class="col-md-6">
+ <div *ngIf="hasGeneralApiError == true">
+ <form-general-error [message]="'Page contains errors. Please see details next to the relevant fields.'"></form-general-error>
+ </div>
+ </div>
+ <div class="col-md-6" style="padding: 15px;padding-right: 35px;">
+ <button [attr.data-tests-id]="'cancelButton'" type="button" class="btn btn-default cancel" (click)="onCancelClick()"><span>Cancel</span></button>
+ <input type="submit" value="Set" form="serviceForm" data-tests-id="service-form-set"
+ class="btn btn-success submit" [disabled]="!serviceInstanceDetails?.serviceForm?.valid">
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/components/service-popup/service-popup.scss b/vid-webpack-master/src/app/components/service-popup/service-popup.scss
new file mode 100644
index 000000000..aa4552d2f
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-popup.scss
@@ -0,0 +1,185 @@
+$grid-border: 1px #d2d2d2 solid;
+
+#service-popup {
+ color: #191919;
+
+ .left-panel {
+ background: #f2f2f2;
+ border-right: $grid-border;
+ }
+
+ .header-common {
+ height: 100%;
+ align-items: center;
+ display: flex;
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ }
+
+ .header-text {
+ padding-left: 30px;
+ @extend .header-common;
+ }
+
+ .header-left {
+ grid-area: header-left;
+ @extend .header-text;
+ @extend .left-panel;
+ border-bottom: $grid-border;
+
+ span {
+ font-family: OpenSans-Regular;
+ font-size: 14px;
+ };
+ }
+
+ .header-right {
+ grid-area: header-right;
+
+ @extend .header-text;
+ border-bottom: $grid-border;
+ }
+
+ .quantity-label {
+ grid-area: quantity-label;
+ @extend .header-common;
+ border-bottom: $grid-border;
+ height: 100%;
+ font-family: OpenSans-Regular;
+ }
+
+ .quantity {
+ grid-area: quantity;
+ border-left: $grid-border;
+ border-bottom: $grid-border;
+ border-top-style: none;
+ font-family: OpenSans-Semibold;
+ text-align: start;
+ text-indent: 10px;
+ }
+
+ .quantity-select {
+ width: 78px;
+ height: 100%;
+ border: 0;
+ background: white;
+ outline: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: url('../../../assets/img/chevron.svg') 0 0 no-repeat;
+ background-size: 24px;
+ background-position-x: right;
+ background-position-y: center;
+ }
+ input[type="number"]:hover::-webkit-inner-spin-button {
+ height: 20px;
+ }
+
+ .service-model {
+ grid-area: service-model;
+
+ padding: 30px;
+ overflow: auto;
+ @extend .left-panel;
+ }
+
+ .service-instance {
+ grid-area: service-instance;
+ }
+
+ .popup-content {
+ display: grid;
+ grid-template-columns: 400px auto 30px 93px;
+ grid-template-rows: 50px calc(100vh - 180px);
+ grid-template-areas:
+ "header-left header-right quantity-label quantity"
+ "service-model service-instance service-instance service-instance";
+ padding: 0;
+ }
+}
+
+.modal {
+ background-color: #191919;
+ opacity: 0.8;
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 0;
+}
+@media (min-width: 1150px) {
+ .popup-content {
+ grid-template-rows: 30px 680px;
+ }
+}
+
+.modal-content {
+ border-radius: 0;
+ box-shadow: none;
+ border: none;
+}
+
+.modal-footer {
+ .cancel {
+ width: 120px;
+ height: 36px;
+ background: #ffffff;
+ border: 1px solid #009fdb;
+ border-radius: 2px;
+ span {
+ font-family: OpenSans-Regular;
+ font-size: 14px;
+ color: #009fdb;
+ line-height: 16px;
+ }
+ }
+
+ .submit {
+ width: 120px;
+ height: 36px;
+ background: #009fdb;
+ border-radius: 2px;
+ border-color: #009fdb;
+ span {
+ font-family: OpenSans-Regular;
+ font-size: 14px;
+ color: #FFFFFF;
+ line-height: 16px;
+ }
+ }
+}
+
+.modal-header {
+ background-color: #009fdb;
+
+ padding-bottom: 13px;
+ padding-top: 13px;
+ padding-left: 29px;
+ padding-right: 21px;
+
+ .close {
+ font-size: 32px;
+ font-weight: 200;
+ color: #d8d8d8;
+ text-shadow: none;
+ filter: none;
+ opacity: 1;
+ }
+
+ .modal-title {
+ font-family: OpenSans-Regular;
+ font-size: 24px;
+ color: #fff;
+ line-height: 34px;
+ }
+}
+//
+//@media (min-width: 1200px) {
+// .service-model,
+// .service-instance {
+// width: 1050px;
+// margin: 30px auto;
+// }
+//}
diff --git a/vid-webpack-master/src/app/components/service-popup/service-popup.service.spec.ts b/vid-webpack-master/src/app/components/service-popup/service-popup.service.spec.ts
new file mode 100644
index 000000000..cddc6400a
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-popup.service.spec.ts
@@ -0,0 +1,138 @@
+
+import { TestBed, getTestBed} from '@angular/core/testing';
+import {
+ HttpClientTestingModule,
+ HttpTestingController
+} from '@angular/common/http/testing';
+import { ServicePopupService } from './service-popup.service';
+import { FormControl, FormGroup, Validators } from '@angular/forms';
+import { NumbersLettersUnderscoreValidator } from '../../shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
+
+describe('Service Popup Service', () => {
+ let injector;
+ let service: ServicePopupService;
+ let httpMock: HttpTestingController;
+ let form : FormGroup;
+ let servicePopupDataModel;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
+ providers: [ServicePopupService]
+ });
+
+ injector = getTestBed();
+ service = injector.get(ServicePopupService);
+ httpMock = injector.get(HttpTestingController);
+
+ form = generateFormGroup();
+ servicePopupDataModel = generateServicePopupDataModel();
+ });
+
+ describe('#resetDynamicInputs', () => {
+ it('resetDynamicInputs should reset dymanic fields',(done: DoneFn) => {
+ const dynamicInputs = generateDynamicInputs();
+ let serviceForm = generateFormGroup();
+ serviceForm.addControl(dynamicInputs[0].name, new FormControl({value: dynamicInputs[0].value, disabled: false}));
+
+ serviceForm.controls[dynamicInputs[0].name].setValue("diffValue");
+ service.resetDynamicInputs({
+ serviceInstanceDetailsFormGroup : serviceForm,
+ dynamicInputs : dynamicInputs
+ }, dynamicInputs);
+
+ expect(serviceForm.controls[dynamicInputs[0].name].value).toEqual(dynamicInputs[0].value);
+ done();
+ })
+ });
+
+ describe('#onControlError', () => {
+
+ it('should return true if instanceName is illegal', (done: DoneFn) => {
+ form.controls['instanceName'].setValue("illegal - illegal");
+
+ let result : boolean = service.onControlError(<any>servicePopupDataModel, form);
+ expect(result).toBeTruthy();
+ done();
+ });
+
+ it('should return false if instanceName is legal', (done: DoneFn) => {
+
+ form.controls['instanceName'].setValue("legal");
+ let result = service.onControlError(<any>servicePopupDataModel, form);
+ expect(result).toBeFalsy();
+ done();
+ });
+
+ it('should return false if lcpRegions is empty and is disabled', (done: DoneFn) => {
+ servicePopupDataModel.servicePopupDataModel['lcpRegions'] = [];
+ let result = service.onControlError(<any>servicePopupDataModel, form);
+ expect(result).toBeFalsy();
+ done();
+ });
+
+ it('should return true if lcpRegions is empty', (done: DoneFn) => {
+ servicePopupDataModel.servicePopupDataModel['lcpRegions'] = [];
+ form.controls['lcpCloudRegionId'].enable();
+ let result = service.onControlError(<any>servicePopupDataModel, form);
+ expect(result).toBeTruthy();
+ done()
+ });
+ });
+
+
+ function generateDynamicInputs(){
+ return JSON.parse('[{"id":"2017488_adiodvpe0_ASN","type":"string","name":"2017488_adiodvpe0_ASN","value":"AV_vPE","isRequired":true,"description":"AV/PE"}]');
+ }
+
+
+ function generateServicePopupDataModel() {
+ return {
+ "servicePopupDataModel" : JSON.parse('{"subscribers":[{"id":"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb","name":"Mobility","isPermitted":false},{"id":"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fc","name":"PACKET CORE","isPermitted":false},{"id":"e433710f-9217-458d-a79d-1c7aff376d89","name":"USP VOICE","isPermitted":true}],"serviceTypes":[{"id":"0","name":"vFlowLogic","isPermitted":false},{"id":"1","name":"VIRTUAL USP","isPermitted":true},{"id":"2","name":"Mobility","isPermitted":false},{"id":"3","name":"vBNG","isPermitted":false},{"id":"4","name":"vVoiceMail","isPermitted":false},{"id":"5","name":"Nimbus","isPermitted":false},{"id":"6","name":"vSEGW","isPermitted":false},{"id":"7","name":"vVM","isPermitted":false},{"id":"8","name":"vOTA","isPermitted":false},{"id":"9","name":"vMME","isPermitted":false},{"id":"10","name":"vMNS","isPermitted":false},{"id":"11","name":"vSCP","isPermitted":false},{"id":"12","name":"VPMS","isPermitted":false},{"id":"13","name":"vMMSC","isPermitted":false},{"id":"14","name":"SSD","isPermitted":false},{"id":"15","name":"vMOG","isPermitted":false},{"id":"16","name":"FIRSTNET","isPermitted":false},{"id":"17","name":"ACTIVE_CHARGE","isPermitted":false},{"id":"18","name":"vHSS","isPermitted":false}],"aicZones":[{"id":"NFT1","name":"NFTJSSSS-NFT1"},{"id":"JAG1","name":"YUDFJULP-JAG1"},{"id":"YYY1","name":"UUUAIAAI-YYY1"},{"id":"BAN1","name":"VSDKYUTP-BAN1"},{"id":"DKJ1","name":"DKJSJDKA-DKJ1"},{"id":"MCS1","name":"ASACMAMS-MCS1"},{"id":"UIO1","name":"uioclli1-UIO1"},{"id":"RAJ1","name":"YGBIJNLQ-RAJ1"},{"id":"OPA1","name":"opaclli1-OPA1"},{"id":"SDE1","name":"ZXCVBNMA-SDE1"},{"id":"VEN2","name":"FGHJUHIL-VEN2"},{"id":"ORL1","name":"ORLDFLMA-ORL1"},{"id":"JAD1","name":"JADECLLI-JAD1"},{"id":"ZXL1","name":"LWLWCANN-ZXL1"},{"id":"CKL1","name":"CLKSKCKK-CKL1"},{"id":"SDF1","name":"sdfclli1-SDF1"},{"id":"RAD1","name":"RADICAL1-RAD1"},{"id":"KIT1","name":"BHYJFGLN-KIT1"},{"id":"REL1","name":"INGERFGT-REL1"},{"id":"JNL1","name":"CJALSDAC-JNL1"},{"id":"OLK1","name":"OLKOLKLS-OLK1"},{"id":"CHI1","name":"CHILLIWE-CHI1"},{"id":"UUU4","name":"UUUAAAUU-UUU4"},{"id":"TUF1","name":"TUFCLLI1-TUF1"},{"id":"KJN1","name":"CKALDKSA-KJN1"},{"id":"SAM1","name":"SNDGCA64-SAN1"},{"id":"SCK1","name":"SCKSCKSK-SCK1"},{"id":"HJH1","name":"AOEEQQQD-HJH1"},{"id":"HGD1","name":"SDFQWHGD-HGD1"},{"id":"KOR1","name":"HYFLNBVT-KOR1"},{"id":"ATL43","name":"AICLOCID-ATL43"},{"id":"ATL54","name":"AICFTAAI-ATL54"},{"id":"ATL66","name":"CLLIAAII-ATL66"},{"id":"VEL1","name":"BNMLKUIK-VEL1"},{"id":"ICC1","name":"SANJITAT-ICC1"},{"id":"MNT11","name":"WSXEFBTH-MNT11"},{"id":"DEF2","name":"WSBHGTYL-DEF2"},{"id":"MAD11","name":"SDFQWGKL-MAD11"},{"id":"OLG1","name":"OLHOLHOL-OLG1"},{"id":"GAR1","name":"NGFVSJKO-GAR1"},{"id":"SAN22","name":"GNVLSCTL-SAN22"},{"id":"HRG1","name":"HRGHRGGS-HRG1"},{"id":"JCS1","name":"JCSJSCJS-JCS1"},{"id":"DHA12","name":"WSXEDECF-DHA12"},{"id":"HJE1","name":"AOEEWWWD-HJE1"},{"id":"NCA1","name":"NCANCANN-NCA1"},{"id":"IOP1","name":"iopclli1-IOP1"},{"id":"RTY1","name":"rtyclli1-RTY1"},{"id":"KAP1","name":"HIOUYTRQ-KAP1"},{"id":"ZEN1","name":"ZENCLLI1-ZEN1"},{"id":"HKA1","name":"JAKHLASS-HKA1"},{"id":"CQK1","name":"CQKSCAKK-CQK1"},{"id":"SAI1","name":"UBEKQLPD-SAI1"},{"id":"ERT1","name":"ertclli1-ERT1"},{"id":"IBB1","name":"PLMKOIJU-IBB1"},{"id":"TIR2","name":"PLKINHYI-TIR2"},{"id":"HSD1","name":"CHASKCDS-HSD1"},{"id":"SLF78","name":"SDCTLFN1-SLF78"},{"id":"SEE78","name":"SDCTEEE4-SEE78"},{"id":"SAN13","name":"TOKYJPFA-SAN13"},{"id":"SAA78","name":"SDCTAAA1-SAA78"},{"id":"LUC1","name":"ATLDFGYC-LUC1"},{"id":"AMD13","name":"MEMATLAN-AMD13"},{"id":"TOR1","name":"TOROONXN-TOR1"},{"id":"QWE1","name":"QWECLLI1-QWE1"},{"id":"ZOG1","name":"ZOGASTRO-ZOG1"},{"id":"CAL33","name":"CALIFORN-CAL33"},{"id":"SHH78","name":"SDIT1HHH-SHH78"},{"id":"DSA1","name":"LKJHGFDS-DSA1"},{"id":"CLG1","name":"CLGRABAD-CLG1"},{"id":"BNA1","name":"BNARAGBK-BNA1"},{"id":"ATL84","name":"CANTTCOC-ATL84"},{"id":"APP1","name":"WBHGTYUI-APP1"},{"id":"RJN1","name":"RJNRBZAW-RJN1"},{"id":"EHH78","name":"SDCSHHH5-EHH78"},{"id":"mac10","name":"PKGTESTF-mac10"},{"id":"SXB78","name":"SDCTGXB1-SXB78"},{"id":"SAX78","name":"SDCTAXG1-SAX78"},{"id":"SYD1","name":"SYDNAUBV-SYD1"},{"id":"TOK1","name":"TOKYJPFA-TOK1"},{"id":"KGM2","name":"KGMTNC20-KGM2"},{"id":"DCC1b","name":"POIUYTGH-DCC1b"},{"id":"SKK78","name":"SDCTKKK1-SKK78"},{"id":"SGG78","name":"SDCTGGG1-SGG78"},{"id":"SJJ78","name":"SDCTJJJ1-SJJ78"},{"id":"SBX78","name":"SDCTBXG1-SBX78"},{"id":"LAG1","name":"LARGIZON-LAG1"},{"id":"IAA1","name":"QAZXSWED-IAA1"},{"id":"POI1","name":"PLMNJKIU-POI1"},{"id":"LAG1a","name":"LARGIZON-LAG1a"},{"id":"PBL1","name":"PBLAPBAI-PBL1"},{"id":"LAG45","name":"LARGIZON-LAG1a"},{"id":"MAR1","name":"MNBVCXZM-MAR1"},{"id":"HST70","name":"HSTNTX70-HST70"},{"id":"DCC1a","name":"POIUYTGH-DCC1a"},{"id":"TOL1","name":"TOLDOH21-TOL1"},{"id":"LON1","name":"LONEENCO-LON1"},{"id":"SJU78","name":"SDIT1JUB-SJU78"},{"id":"STN27","name":"HSTNTX01-STN27"},{"id":"SSW56","name":"ss8126GT-SSW56"},{"id":"SBB78","name":"SDIT1BBB-SBB78"},{"id":"DCC3","name":"POIUYTGH-DCC3"},{"id":"GNV1","name":"GNVLSCTL-GNV1"},{"id":"WAS1","name":"WASHDCSW-WAS1"},{"id":"TOY1","name":"TORYONNZ-TOY1"},{"id":"STT1","name":"STTLWA02-STT1"},{"id":"STG1","name":"STTGGE62-STG1"},{"id":"SLL78","name":"SDCTLLL1-SLL78"},{"id":"SBU78","name":"SDIT1BUB-SBU78"},{"id":"ATL2","name":"ATLNGANW-ATL2"},{"id":"BOT1","name":"BOTHWAKY-BOT1"},{"id":"SNG1","name":"SNGPSIAU-SNG1"},{"id":"NYC1","name":"NYCMNY54-NYC1"},{"id":"LAG1b","name":"LARGIZON-LAG1b"},{"id":"AMD15","name":"AMDFAA01-AMD15"},{"id":"SNA1","name":"SNANTXCA-SNA1"},{"id":"PLT1","name":"PLTNCA60-PLT1"},{"id":"TLP1","name":"TLPNXM18-TLP1"},{"id":"SDD81","name":"SAIT1DD6-SDD81"},{"id":"DCC1","name":"POIUYTGH-DCC1"},{"id":"DCC2","name":"POIUYTGH-DCC2"},{"id":"OKC1","name":"OKCBOK55-OKC1"},{"id":"PAR1","name":"PARSFRCG-PAR1"},{"id":"TES36","name":"ABCEETES-TES36"},{"id":"COM1","name":"PLMKOPIU-COM1"},{"id":"ANI1","name":"ATLNGTRE-ANI1"},{"id":"SDG78","name":"SDIT1BDG-SDG78"},{"id":"mac20","name":"PKGTESTF-mac20"},{"id":"DSF45","name":"DSFBG123-DSF45"},{"id":"HST25","name":"HSTNTX01-HST25"},{"id":"AMD18","name":"AUDIMA01-AMD18"},{"id":"SAA80","name":"SAIT9AA3-SAA80"},{"id":"SSA56","name":"SSIT2AA7-SSA56"},{"id":"SDD82","name":"SAIT1DD9-SDD82"},{"id":"JCV1","name":"JCVLFLBW-JCV1"},{"id":"SUL2","name":"WERTYUJK-SUL2"},{"id":"PUR1","name":"purelyde-PUR1"},{"id":"FDE55","name":"FDERT555-FDE55"},{"id":"SITE","name":"LONEENCO-SITE"},{"id":"ATL1","name":"ATLNGAMA-ATL1"},{"id":"JUL1","name":"ZXCVBNMM-JUL1"},{"id":"TAT34","name":"TESAAISB-TAT34"},{"id":"XCP12","name":"CHKGH123-XCP12"},{"id":"RAI1","name":"poiuytre-RAI1"},{"id":"HPO1","name":"ATLNGAUP-HPO1"},{"id":"KJF12","name":"KJFDH123-KJF12"},{"id":"SCC80","name":"SAIT9CC3-SCC80"},{"id":"SAA12","name":"SAIT9AF8-SAA12"},{"id":"SAA14","name":"SAIT1AA9-SAA14"},{"id":"ATL35","name":"TTESSAAI-ATL35"},{"id":"CWY1","name":"CWYMOWBS-CWY1"},{"id":"ATL76","name":"TELEPAAI-ATL76"},{"id":"DSL12","name":"DSLFK242-DSL12"},{"id":"ATL53","name":"AAIATLTE-ATL53"},{"id":"SAA11","name":"SAIT9AA2-SAA11"},{"id":"ATL62","name":"TESSASCH-ATL62"},{"id":"AUG1","name":"ASDFGHJK-AUG1"},{"id":"POI22","name":"POIUY123-POI22"},{"id":"SAA13","name":"SAIT1AA9-SAA13"},{"id":"BHY17","name":"BHYTFRF3-BHY17"},{"id":"LIS1","name":"HOSTPROF-LIS1"},{"id":"SIP1","name":"ZXCVBNMK-SIP1"},{"id":"ATL99","name":"TEESTAAI-ATL43"},{"id":"ATL64","name":"FORLOAAJ-ATL64"},{"id":"TAT33","name":"TESAAISA-TAT33"},{"id":"RAD10","name":"INDIPUNE-RAD10"},{"id":"RTW5","name":"BHYTFRY4-RTW5"},{"id":"JGS1","name":"KSJKKKKK-JGS1"},{"id":"ATL98","name":"TEESTAAI-ATL43"},{"id":"WAN1","name":"LEIWANGW-WAN1"},{"id":"ATL44","name":"ATLSANAB-ATL44"},{"id":"RTD2","name":"BHYTFRk4-RTD2"},{"id":"NIR1","name":"ORFLMANA-NIR1"},{"id":"ATL75","name":"SANAAIRE-ATL75"},{"id":"NUM1","name":"QWERTYUI-NUM1"},{"id":"MTN32","name":"MDTWNJ21-MTN32"},{"id":"RTZ4","name":"BHYTFRZ6-RTZ4"},{"id":"ATL56","name":"ATLSANAC-ATL56"},{"id":"AMS1","name":"AMSTNLBW-AMS1"},{"id":"RCT1","name":"AMSTERNL-RCT1"},{"id":"JAN1","name":"ORFLMATT-JAN1"},{"id":"ABC14","name":"TESAAISA-ABC14"},{"id":"TAT37","name":"TESAAISD-TAT37"},{"id":"MIC54","name":"MICHIGAN-MIC54"},{"id":"ABC11","name":"ATLSANAI-ABC11"},{"id":"AMF11","name":"AMDOCS01-AMF11"},{"id":"ATL63","name":"ATLSANEW-ATL63"},{"id":"ABC12","name":"ATLSECIA-ABC12"},{"id":"MTN20","name":"MDTWNJ21-MTN20"},{"id":"ABC15","name":"AAITESAN-ABC15"},{"id":"AVT1","name":"AVTRFLHD-AVT1"},{"id":"ATL34","name":"ATLSANAI-ATL34"}],"lcpRegions":[{"id":"AAIAIC25","name":"AAIAIC25","isPermitted":true},{"id":"mtn6","name":"mtn6","isPermitted":true}],"lcpRegionsTenantsMap":{},"tenants":[{"id":"bae71557c5bb4d5aac6743a4e5f1d054","name":"AIN Web Tool-15-D-testgamma","isPermitted":true},{"id":"229bcdc6eaeb4ca59d55221141d01f8e","name":"AIN Web Tool-15-D-STTest2","isPermitted":true},{"id":"1178612d2b394be4834ad77f567c0af2","name":"AIN Web Tool-15-D-SSPtestcustome","isPermitted":true},{"id":"19c5ade915eb461e8af52fb2fd8cd1f2","name":"AIN Web Tool-15-D-UncheckedEcopm","isPermitted":true},{"id":"de007636e25249238447264a988a927b","name":"AIN Web Tool-15-D-dfsdf","isPermitted":true},{"id":"62f29b3613634ca6a3065cbe0e020c44","name":"AIN/SMS-16-D-Multiservices1","isPermitted":true},{"id":"649289e30d3244e0b48098114d63c2aa","name":"AIN Web Tool-15-D-SSPST66","isPermitted":true},{"id":"3f21eeea6c2c486bba31dab816c05a32","name":"AIN Web Tool-15-D-ASSPST47","isPermitted":true},{"id":"f60ce21d3ee6427586cff0d22b03b773","name":"CESAR-100-D-sspjg67246","isPermitted":true},{"id":"8774659e425f479895ae091bb5d46560","name":"CESAR-100-D-sspjg68359","isPermitted":true},{"id":"624eb554b0d147c19ff8885341760481","name":"AINWebTool-15-D-iftach","isPermitted":true},{"id":"214f55f5fc414c678059c383b03e4962","name":"CESAR-100-D-sspjg612401","isPermitted":true},{"id":"c90666c291664841bb98e4d981ff1db5","name":"CESAR-100-D-sspjg621340","isPermitted":true},{"id":"ce5b6bc5c7b348e1bf4b91ac9a174278","name":"sspjg621351cloned","isPermitted":true},{"id":"b386b768a3f24c8e953abbe0b3488c02","name":"AINWebTool-15-D-eteancomp","isPermitted":true},{"id":"dc6c4dbfd225474e9deaadd34968646c","name":"AINWebTool-15-T-SPFET","isPermitted":true},{"id":"02cb5030e9914aa4be120bd9ed1e19eb","name":"AINWebTool-15-X-eeweww","isPermitted":true},{"id":"f2f3830e4c984d45bcd00e1a04158a79","name":"CESAR-100-D-spjg61909","isPermitted":true},{"id":"05b91bd5137f4929878edd965755c06d","name":"CESAR-100-D-sspjg621512cloned","isPermitted":true},{"id":"7002fbe8482d4a989ddf445b1ce336e0","name":"AINWebTool-15-X-vdr","isPermitted":true},{"id":"4008522be43741dcb1f5422022a2aa0b","name":"AINWebTool-15-D-ssasa","isPermitted":true},{"id":"f44e2e96a1b6476abfda2fa407b00169","name":"AINWebTool-15-D-PFNPT","isPermitted":true},{"id":"b69a52bec8a84669a37a1e8b72708be7","name":"AINWebTool-15-X-vdre","isPermitted":true},{"id":"fac7d9fd56154caeb9332202dcf2969f","name":"AINWebTool-15-X-NONPODECOMP","isPermitted":true},{"id":"2d34d8396e194eb49969fd61ffbff961","name":"DN5242-Nov16-T5","isPermitted":true},{"id":"cb42a77ff45b48a8b8deb83bb64acc74","name":"ro-T11","isPermitted":true},{"id":"fa45ca53c80b492fa8be5477cd84fc2b","name":"ro-T112","isPermitted":true},{"id":"4914ab0ab3a743e58f0eefdacc1dde77","name":"DN5242-Nov21-T1","isPermitted":true},{"id":"d0a3e3f2964542259d155a81c41aadc3","name":"test-mtn6-09","isPermitted":true},{"id":"cbb99fe4ada84631b7baf046b6fd2044","name":"DN5242-Nov16-T3","isPermitted":true}],"productFamilies":null,"projects":[{"id":"DFW","name":"DFW"},{"id":"x1","name":"x1"},{"id":"yyy1","name":"yyy1"}],"owningEntities":[{"id":"aaa1","name":"aaa1"},{"id":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","name":"MetroPacketCore"},{"id":"Wireline","name":"Wireline"}],"globalCustomerId":"e433710f-9217-458d-a79d-1c7aff376d89"}')}
+ }
+
+ function generateFormGroup(){
+ return new FormGroup({
+ globalSubscriberId: new FormControl(
+ Validators.compose([Validators.required])
+ ),
+ productFamilyId: new FormControl(),
+ subscriptionServiceType: new FormControl({value: null, disabled: true}, Validators.compose([Validators.required])),
+ lcpCloudRegionId: new FormControl({value: null, disabled: true}, Validators.compose([Validators.required])),
+ tenantId: new FormControl({value: null, disabled: true}, Validators.compose([Validators.required])),
+ aicZoneId: new FormControl(),
+ projectName: new FormControl(),
+ owningEntityId: new FormControl(Validators.compose([Validators.required])),
+ instanceName : new FormControl({value: null}, Validators.compose([Validators.required, NumbersLettersUnderscoreValidator.valid]))
+ });
+ }
+
+
+ function generateServiceInstanceDetails(){
+ return {
+ servicePopupDataModel : {
+ "productFamilies" : []
+ },
+ serviceInstanceDetailsFormGroup : {
+ controls : {
+ productFamilyId : {
+ disabled : false
+ }
+ }
+ }
+ }
+ }
+
+ function generateLegalServiceInstance(){
+ return {
+ instanceName : "legalInstanceName"
+ }
+ }
+
+ function generateIllegalServiceInstance(){
+ return {
+ instanceName : "illegalInstanceName"
+ }
+ }
+
+});
diff --git a/vid-webpack-master/src/app/components/service-popup/service-popup.service.ts b/vid-webpack-master/src/app/components/service-popup/service-popup.service.ts
new file mode 100644
index 000000000..f6efd353b
--- /dev/null
+++ b/vid-webpack-master/src/app/components/service-popup/service-popup.service.ts
@@ -0,0 +1,33 @@
+import {Injectable} from '@angular/core';
+import {isNullOrUndefined} from "util";
+import {NumbersLettersUnderscoreValidator} from '../../shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
+import {ServiceInstanceDetailsComponent} from './service-instance-details/service-instance-details.component';
+import {FormGroup} from '@angular/forms';
+import * as _ from "lodash";
+
+@Injectable()
+export class ServicePopupService {
+ onControlError(serviceInstanceDetails : ServiceInstanceDetailsComponent, serviceInstanceDetailsFormGroup : FormGroup) : boolean{
+ if(!isNullOrUndefined(serviceInstanceDetailsFormGroup) && !isNullOrUndefined(serviceInstanceDetailsFormGroup.controls['instanceName']) && NumbersLettersUnderscoreValidator.valid(serviceInstanceDetailsFormGroup.controls['instanceName'].value) && serviceInstanceDetailsFormGroup.controls['instanceName'].value != null && serviceInstanceDetailsFormGroup.controls['instanceName'].value.length > 0){
+ return true;
+ }
+
+ const controlName : Array<string> = ['productFamilyId', 'lcpCloudRegionId', 'tenantId', 'owningEntityId', 'projectName', 'aicZoneId', 'subscriptionServiceType', 'globalSubscriberId', 'rollbackOnFailure'];
+ const selectDataName : Array<string> = ['productFamilies', 'lcpRegions', 'tenants', 'owningEntities', 'projects', 'aicZones', 'serviceTypes', 'subscribers', 'rollbackOnFailure'];
+ for(let i = 0 ; i < controlName.length ; i++){
+ if (!isNullOrUndefined(serviceInstanceDetails.servicePopupDataModel) && !isNullOrUndefined(serviceInstanceDetails.servicePopupDataModel[selectDataName[i]])) {
+ if (!serviceInstanceDetailsFormGroup.controls[controlName[i]].disabled && serviceInstanceDetails.servicePopupDataModel[selectDataName[i]].length === 0) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ resetDynamicInputs(serviceInstance : any, defaultDynamicInputs : any) : void {
+ for(let dynamicInput of serviceInstance.dynamicInputs){
+ const defaultDymanicInput = _.find(defaultDynamicInputs, {name:dynamicInput.name});
+ serviceInstance.serviceInstanceDetailsFormGroup.controls[dynamicInput.name].setValue(defaultDymanicInput.value);
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.component.ts b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.component.ts
new file mode 100644
index 000000000..725e44293
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.component.ts
@@ -0,0 +1,275 @@
+import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';
+import {FormControl, FormGroup, Validators} from "@angular/forms";
+import {VNFPopupDataModel} from './vnfPopupDataModel';
+import {AaiService} from '../../../services/aaiService/aai.service';
+import { createVFModuleInstance, updateVFModuleInstance, updateVNFInstance } from '../../../service.actions';
+import {VnfInstance} from "../../../shared/models/vnfInstance";
+import {ServiceInstance} from "../../../shared/models/serviceInstance";
+import {VNFModel} from "../../../shared/models/vnfModel";
+import {InputType} from "../../../shared/models/inputTypes";
+import {ModelInfo} from "../../../shared/models/modelInfo";
+import {VfModuleInstance} from "../../../shared/models/vfModuleInstance";
+import {NgRedux, select} from "@angular-redux/store";
+import {AppState} from "../../../store/reducers";
+import {SelectOptionInterface} from "../../../shared/models/selectOption";
+import {Observable} from "rxjs/Observable";
+import {loadProductFamiliesAction} from "../../../services/aaiService/aai.actions";
+import {VnfInstanceDetailsService} from "./vnf-instance-details.service";
+import {isNullOrUndefined} from 'util';
+import {NumbersLettersUnderscoreValidator} from '../../../shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
+import * as _ from "lodash";
+import {ServiceNodeTypes} from "../../../shared/models/ServiceNodeTypes";
+
+@Component({
+ selector: 'vnf-instance-details',
+ templateUrl: 'vnf-instance-details.html',
+ styleUrls: ['vnf-instance-details.scss'],
+ providers: [AaiService]
+})
+
+export class VnfInstanceDetailsComponent implements OnInit {
+ @ViewChild('vnfForm') vnfForm: 'VnfForm';
+ _vnfModel: VNFModel;
+ @Input ()
+ set vnfModel(vnfModel: VNFModel) {
+ this._vnfModel = vnfModel;
+ this.updateFormGroupControlsFromVNFModel();
+ }
+ @Input() vnfInstance: any;
+ @Input() serviceInstance: ServiceInstance;
+ @Input() dynamicInputs;
+ @Input() modelName: string;
+ @Input() serviceUuid: string;
+ @Input() userProvidedNaming: boolean;
+ _modelType: string;
+ @Input()
+ set modelType(modelType: string) {
+ this._modelType = modelType;
+ this.updateFormGroupControlsFromVNFModel();
+ }
+
+ @Input() parentModelName: string;
+ @Input() isNewVfModule : boolean;
+
+
+ @Output() onSubmitClick: EventEmitter<any> = new EventEmitter<any>();
+ @Output() onServiceInstanceNameChanged : EventEmitter<boolean> = new EventEmitter<boolean>();
+ @Output() onVolumeGroupNameChanged : EventEmitter<boolean> = new EventEmitter<boolean>();
+
+@Output() onDataChanged: EventEmitter<any> = new EventEmitter<any>();
+ @select(['service','productFamilies'])
+ readonly productFamilies : Observable<SelectOptionInterface[]>;
+
+ vnfPopupDataModel: VNFPopupDataModel = new VNFPopupDataModel();
+ lcpRegionsThatEnableLegacyRegionField = ['AAIAIC25', 'rdm3', 'rdm5a'];
+ shouldShowLegacyRegion: boolean;
+ instanceFormGroup: FormGroup = null;
+ inputType = InputType;
+ isNotUniqueInstanceName : boolean = false;
+ isNotUniqueVolumeGroupName : boolean = false;
+
+ constructor(private _aaiService: AaiService, private store: NgRedux<AppState>,
+ private _vnfInstanceDetailsService : VnfInstanceDetailsService) {
+ this.store.subscribe(() => {
+ this.updateFormData()
+ });
+ }
+
+ ngOnInit() {
+ this.updateFormGroup();
+ this.subscribeToFormChanges();
+ this._aaiService.getCategoryParameters(null).subscribe();
+ this._aaiService.getLcpRegionsAndTenants(this.serviceInstance.globalSubscriberId, this.serviceInstance.subscriptionServiceType).subscribe();
+ this.updateLegacyRegionVisibility();
+ this.store.dispatch(loadProductFamiliesAction());
+ }
+
+ isInputShouldBeShown(inputType: any) {
+ let vnfInputs = [InputType.LCP_REGION, InputType.LOB, InputType.TENANT, InputType.PRODUCT_FAMILY, InputType.PLATFORM, InputType.ROLLBACK];
+ let vfInputs = [InputType.VG];
+ let exist = false;
+ if (this._modelType === 'VF') {
+ exist = vnfInputs.indexOf(inputType) > -1;
+ }
+ else {
+ exist = vfInputs.indexOf(inputType) > -1;
+ }
+ return exist;
+ }
+
+ updateFormGroupControlsFromVNFModel() {
+ if (this._vnfModel && this._modelType) {
+ if (this._modelType === ServiceNodeTypes.VF) {
+ const vnfInstance = <VnfInstance>this.vnfInstance;
+ if (this.instanceFormGroup && this.userProvidedNaming
+ && !this.instanceFormGroup.get('instanceName')) {
+ const initialInstanceName = vnfInstance.instanceName || (!isNullOrUndefined(this._vnfModel.name) ? this._vnfModel.name.replace(/[-]/g, "") : this._vnfModel.name);
+ this.instanceFormGroup.addControl('instanceName', new FormControl(initialInstanceName, Validators.compose([Validators.required, NumbersLettersUnderscoreValidator.valid])))
+ }
+ }
+ else if (this._modelType === ServiceNodeTypes.VFmodule) {
+ const vfInstance = <VfModuleInstance>this.vnfInstance;
+ if (this.instanceFormGroup && this.userProvidedNaming && !this.instanceFormGroup.get('instanceName')) {
+ this.instanceFormGroup.addControl('instanceName', new FormControl(vfInstance.instanceName, Validators.required));
+
+ let vfModule = this.extractVfAccordingToVfModuleUuid(this.store.getState(), this._vnfModel.uuid);
+ if (vfModule.volumeGroupAllowed && !this.instanceFormGroup.get('volumeGroupName')) {
+ this.instanceFormGroup.addControl('volumeGroupName', new FormControl(vfInstance.volumeGroupName));
+ }
+ }
+ }
+ }
+ }
+
+ updateFormGroup() {
+ const tenantDisabled = !this.vnfInstance.lcpCloudRegionId;
+
+ if (this._modelType === ServiceNodeTypes.VF) {
+ const vnfInstance = <VnfInstance>this.vnfInstance;
+ this.instanceFormGroup = new FormGroup({
+ productFamilyId: new FormControl(vnfInstance.productFamilyId),
+ lcpCloudRegionId: new FormControl(vnfInstance.lcpCloudRegionId, Validators.required),
+ tenantId: new FormControl({value: vnfInstance.tenantId, disabled: tenantDisabled}, Validators.required),
+ legacyRegion: new FormControl(vnfInstance.legacyRegion),
+ lineOfBusiness: new FormControl(vnfInstance.lineOfBusiness),
+ platformName: new FormControl(vnfInstance.platformName, Validators.required),
+ });
+ }
+ else if (this._modelType === ServiceNodeTypes.VFmodule) {
+ const vfInstance = <VfModuleInstance>this.vnfInstance;
+ this.instanceFormGroup = new FormGroup({
+ });
+ }
+
+ this.instanceFormGroup.valueChanges.subscribe(()=> {
+ this.checkForUniqueInstanceName();
+ this.onDataChanged.next();
+ });
+
+ this.updateFormGroupControlsFromVNFModel();
+ }
+
+ private getParentVnfModel(): VNFModel {
+ const rawModel = _.get(this.store.getState().service.serviceHierarchy[this.serviceUuid], ['vnfs', this.parentModelName]);
+ return new VNFModel(rawModel);
+ }
+
+ extractVfAccordingToVfModuleUuid(state : any,vfModuleUuid : string) {
+ const vnfs = this.store.getState().service.serviceHierarchy[this.serviceUuid].vnfs;
+ const vnfsArray = Object.values(vnfs);
+ for (let i = 0; i<vnfsArray.length;i++){
+ let vfModules = Object.values(vnfsArray[i].vfModules);
+ for (let j = 0; j<vfModules.length;j++){
+ if (vfModules[j].uuid === vfModuleUuid){
+ return vfModules[j];
+ }
+ }
+ }
+ }
+
+ updateFormData() {
+ let service = this.store.getState().service;
+ this.vnfPopupDataModel.lcpRegions = service.lcpRegionsAndTenants.lcpRegionList;
+ if (this.vnfInstance && this.vnfInstance.lcpCloudRegionId) {
+ this.vnfPopupDataModel.tenants = service.lcpRegionsAndTenants.lcpRegionsTenantsMap[this.vnfInstance.lcpCloudRegionId];
+ console.log('setting vnf instances tenant: ' + JSON.stringify(this.vnfPopupDataModel.tenants));
+ }
+ this.vnfPopupDataModel.platforms = service.categoryParameters.platformList;
+ this.vnfPopupDataModel.lineOfBusinesses = service.categoryParameters.lineOfBusinessList;
+ this.onDataChanged.next();
+ }
+
+ subscribeToFormChanges(): void {
+ if (this.instanceFormGroup.get('lcpCloudRegionId') !== null) {
+ this.instanceFormGroup.get('lcpCloudRegionId').valueChanges.subscribe(val => {
+ this.setDisabledState(val, 'tenantId');
+ this.updateTenantList(val);
+ this.updateLegacyRegionVisibility();
+ this.onDataChanged.next();
+ });
+ }
+ }
+
+ setDisabledState(val, field: string): void {
+ if (val) {
+ this.instanceFormGroup.controls[field].enable();
+ }
+ }
+
+ updateLegacyRegionVisibility() {
+ if (this.instanceFormGroup.get('lcpCloudRegionId') !== null) {
+ this.shouldShowLegacyRegion = this.lcpRegionsThatEnableLegacyRegionField.indexOf(this.instanceFormGroup.get('lcpCloudRegionId').value) > -1;
+ if (!this.shouldShowLegacyRegion) {
+ this.instanceFormGroup.controls.legacyRegion.setValue(undefined);
+ }
+ }
+ }
+
+ updateTenantList(cloudRegionId) {
+ this.resetTenantSelection();
+ const tenantsForCloudRegionId = this.store.getState().service.lcpRegionsAndTenants.lcpRegionsTenantsMap[cloudRegionId];
+ console.log('tenants for selected cloud region id: ' + JSON.stringify(tenantsForCloudRegionId));
+ this.vnfPopupDataModel.tenants = tenantsForCloudRegionId;
+ }
+
+ resetTenantSelection() {
+ this.instanceFormGroup.controls.tenantId.setValue(undefined);
+ }
+
+ checkForUniqueInstanceName() {
+ let currentName = !isNullOrUndefined(this.instanceFormGroup.get('instanceName')) ? this.instanceFormGroup.get('instanceName').value : null;
+
+ if(currentName && !this._vnfInstanceDetailsService.isUnique(this.store.getState().service.serviceInstance, this.serviceUuid, currentName, currentName === this.serviceInstance.instanceName) && this.userProvidedNaming){
+ this.isNotUniqueInstanceName = true;
+ this.onServiceInstanceNameChanged.emit(true);
+ }else {
+ this.isNotUniqueInstanceName = false;
+ this.onServiceInstanceNameChanged.emit(false);
+ }
+ }
+
+ checkForUniqueGroupName(){
+ let currentName = this.instanceFormGroup.get('volumeGroupName').value;
+ if( !this._vnfInstanceDetailsService.isUnique(this.store.getState().service.serviceInstance, this.serviceUuid, currentName, currentName === this.serviceInstance['volumeGroupName'])){
+ this.isNotUniqueVolumeGroupName = true;
+ this.onVolumeGroupNameChanged.emit(true);
+ }else {
+ this.isNotUniqueVolumeGroupName = false;
+ this.onVolumeGroupNameChanged.emit(false);
+ }
+ }
+
+ onSubmit(formValues): void {
+ formValues.modelInfo = new ModelInfo(this._vnfModel);
+ if (this._modelType === 'VFmodule') {
+ let dynamicFields: { [dynamicField: string]: string; };
+ dynamicFields = {};
+ if(!_.isEmpty(this.dynamicInputs)) {
+ this.dynamicInputs.map(function (x) {
+ let dynamicField: string = x.id;
+ dynamicFields[dynamicField] = formValues[dynamicField];
+ delete formValues[dynamicField];
+ });
+ }
+ formValues.instanceParams = [];
+ formValues.instanceParams.push(dynamicFields);
+ if(this.isNewVfModule){
+ this.store.dispatch(createVFModuleInstance(formValues, this.modelName, this.serviceUuid));
+ }else {
+ this.store.dispatch(updateVFModuleInstance(formValues, this.modelName, this.serviceUuid));
+ }
+
+ }
+ else {
+ formValues.isUserProvidedNaming = this.userProvidedNaming;
+ this.store.dispatch(updateVNFInstance(formValues, this.modelName, this.serviceUuid));
+ }
+ window.parent.postMessage({
+ eventId: 'submitIframe',
+ data: {
+ serviceModelId: this.serviceUuid
+ }
+ }, "*");
+ this.onSubmitClick.emit(this.serviceUuid);
+ }
+}
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.html b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.html
new file mode 100644
index 000000000..ccdaac53b
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.html
@@ -0,0 +1,114 @@
+
+<div id="vnf-instance-details">
+ <form id="vnfForm" #vnfForm="ngForm" (ngSubmit)="onSubmit(vnfForm.value)" [formGroup]="instanceFormGroup">
+
+ <div class="details-item" *ngIf="instanceFormGroup.get('instanceName')">
+ <label class="required">Instance name:</label>
+ <input patternInput
+ pattern="^[a-zA-Z0-9_]*$"
+ [attr.data-tests-id]="'instanceName'"
+ [ngClass]="{'error-style' : _vnfInstanceDetailsService.hasInstanceNameError(instanceFormGroup) || _vnfInstanceDetailsService.hasUniqueError(isNotUniqueInstanceName)}"
+ id="instance-name" name="instance-name"
+ [formControlName]="'instanceName'"
+ class="form-control input-text"
+ placeholder="Type Instance Name"
+ type="text"
+ (blur)="checkForUniqueInstanceName()">
+ <form-control-error *ngIf="_vnfInstanceDetailsService.hasUniqueError(isNotUniqueInstanceName)" [message]="'Instance name is already in use, please pick another name.'"></form-control-error>
+ <form-control-error *ngIf="_vnfInstanceDetailsService.hasInstanceNameError(instanceFormGroup)" [message]="'Instance name may include only alphanumeric characters and underscore.'"></form-control-error>
+ </div>
+
+ <div *ngIf="isInputShouldBeShown(inputType.PRODUCT_FAMILY)" class="details-item">
+ <label>Product family:</label>
+ <select class="form-control input-text"
+ [ngClass]="{'error-style' :_vnfInstanceDetailsService.hasApiError('productFamilyId',productFamilies, instanceFormGroup)}"
+ data-tests-id="productFamily"
+ id="product-family-select"
+ [formControlName]="'productFamilyId'"
+ name="product-family-select" >
+ <option [value]="null" disabled>Select Product Family</option>
+ <option *ngFor="let productFamily of productFamilies | async" [value]="productFamily.id"
+ [disabled]="!productFamily.isPermitted">{{productFamily.name}}</option>
+ </select>
+ <form-control-error *ngIf="_vnfInstanceDetailsService.hasApiError('productFamilyId',productFamilies, instanceFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+
+ <div *ngIf="isInputShouldBeShown(inputType.LCP_REGION)" class="details-item">
+ <label class="required">LCP region:</label>
+ <select
+ [ngClass]="{'error-style' :_vnfInstanceDetailsService.hasApiError('lcpCloudRegionId',vnfPopupDataModel?.lcpRegions, instanceFormGroup)}"
+ class="form-control input-text"
+ [formControlName]="'lcpCloudRegionId'"
+ name="lcpRegion" id="lcpRegion-select"
+ data-tests-id="lcpRegion">
+ <option [value]="null" disabled>Select LCP Region</option>
+ <option *ngFor="let lcpRegion of vnfPopupDataModel.lcpRegions" [value]="lcpRegion.id" [disabled]="!lcpRegion.isPermitted" class="lcpRegionOption">{{lcpRegion.id}}</option>
+ </select>
+ <form-control-error *ngIf="_vnfInstanceDetailsService.hasApiError('lcpCloudRegionId',vnfPopupDataModel?.lcpRegions, instanceFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+
+ <div class="details-item" *ngIf="shouldShowLegacyRegion">
+ <label>Legacy Region:</label>
+ <input
+ [attr.data-tests-id]="'lcpRegionText'"
+ id="legacy-region"
+ name="legacy-region"
+ [formControlName]="'legacyRegion'"
+ class="form-control input-text"
+ placeholder="Type Legacy Region" type="text">
+ </div>
+
+ <div *ngIf="isInputShouldBeShown(inputType.TENANT)" class="details-item">
+ <label class="required">Tenant:</label>
+ <select class="form-control input-text"
+ [ngClass]="{'error-style' :_vnfInstanceDetailsService.hasApiError('tenantId',vnfPopupDataModel?.tenants, instanceFormGroup)}"
+ [formControlName]="'tenantId'"
+ name="tenant" id="tenant-select" data-tests-id="tenant">
+ <option [value]="undefined" disabled>Select Tenant</option>
+ <option *ngFor="let tenant of vnfPopupDataModel.tenants" [value]="tenant.id" [disabled]="!tenant.isPermitted">{{tenant.name}}</option>
+ </select>
+ <form-control-error *ngIf="_vnfInstanceDetailsService.hasApiError('tenantId',vnfPopupDataModel?.tenants, instanceFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+
+ <div *ngIf="isInputShouldBeShown(inputType.LOB)" class="details-item">
+ <label>Line of business:</label>
+ <select [attr.data-tests-id]="'lineOfBusiness'"
+ class="form-control input-text"
+ [ngClass]="{'error-style' :_vnfInstanceDetailsService.hasApiError('lineOfBusiness',vnfPopupDataModel?.lineOfBusinesses, instanceFormGroup)}"
+ name="lineOfBusiness" id="lineOfBusiness"
+ [formControlName]="'lineOfBusiness'">
+ <option [value]="null" disabled>Select Line Of Business</option>
+ <option *ngFor="let project of vnfPopupDataModel.lineOfBusinesses" [value]="project.id">{{project.name}}</option>
+ </select>
+ <form-control-error *ngIf="_vnfInstanceDetailsService.hasApiError('lineOfBusiness',vnfPopupDataModel?.lineOfBusinesses, instanceFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+
+ <div *ngIf="isInputShouldBeShown(inputType.PLATFORM)" class="details-item">
+ <label class="required">Platform:</label>
+ <select
+ [attr.data-tests-id]="'platform'"
+ [ngClass]="{'error-style' :_vnfInstanceDetailsService.hasApiError('platformName',vnfPopupDataModel?.platforms, instanceFormGroup)}"
+ class="form-control input-text"
+ [formControlName]="'platformName'"
+ name="platform" id="platform">
+ <option [value]="null" disabled>Select Platform</option>
+ <option *ngFor="let platform of vnfPopupDataModel.platforms" [value]="platform.id">{{platform.name}}</option>
+ </select>
+ <form-control-error *ngIf="_vnfInstanceDetailsService.hasApiError('platformName',vnfPopupDataModel?.platforms, instanceFormGroup)" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+ </div>
+
+
+ <div *ngIf="isInputShouldBeShown(inputType.VG) && instanceFormGroup.get('volumeGroupName')" class="details-item" >
+ <label class="required">Volume Group Name:</label>
+ <input [attr.data-tests-id]="'volumeGroupName'"
+ id="vgName" name="vgName"
+ [ngClass]="{'error-style' :isNotUniqueVolumeGroupName}"
+ [formControlName]="'volumeGroupName'"
+ class="form-control input-text"
+ placeholder="Type Instance Name" type="text" (blur)="checkForUniqueGroupName()">
+ <form-control-error *ngIf="isNotUniqueVolumeGroupName" [message]="'Volume Group instance name is already in use, please pick another name.'"></form-control-error>
+ </div>
+
+ <dynamic-inputs *ngIf="dynamicInputs != undefined && dynamicInputs.length>0" [group]="instanceFormGroup" [list]="dynamicInputs"></dynamic-inputs>
+ </form>
+</div>
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.scss b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.scss
new file mode 100644
index 000000000..080540a57
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.scss
@@ -0,0 +1,64 @@
+#vnf-instance-details {
+ position: relative;
+
+ #notification-area {
+ color: #959595;
+ font-size: 12px;
+ position: absolute;
+ top: 3px;
+ left: 30px;
+ }
+
+ height: 100%;
+ overflow: auto;
+ padding: 30px;
+
+ /deep/ {
+ .form-control {
+ border-radius: 2px;
+ box-shadow: none;
+ border-color: #D2D2D2;
+ }
+
+ label {
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ }
+
+ select {
+ @extend .form-control;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: url('../../../../assets/img/chevron.svg') 0 0 no-repeat;
+ background-size: 24px;
+ background-position-x: right;
+ background-position-y: center;
+ font-family: OpenSans-Italic;
+ font-size: 14px;
+ color: #959595;
+ height: 38px;
+ }
+
+ input:not([type='checkbox']) {
+ @extend .form-control;
+ height: 38px;
+ }
+
+ .form-control[disabled], fieldset[disabled] .form-control {
+ opacity: 0.5;
+ }
+ .input-text {
+ border: 1px solid #D2D2D2;
+ border-radius: 2px;
+ }
+
+ .details-item {
+ margin-bottom: 20px;
+ }
+ }
+
+ .checkbox-label {
+ font-family: OpenSans-Regular;
+ }
+}
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.service.spec.ts b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.service.spec.ts
new file mode 100644
index 000000000..41ddb4372
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.service.spec.ts
@@ -0,0 +1,241 @@
+import { TestBed, getTestBed } from '@angular/core/testing';
+import {
+ HttpClientTestingModule,
+ HttpTestingController
+} from '@angular/common/http/testing';
+import { VnfInstanceDetailsService } from './vnf-instance-details.service';
+import { FormControl, FormGroup, Validators } from '@angular/forms';
+import { NumbersLettersUnderscoreValidator } from '../../../shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
+
+describe('Vnf Instance Details Service', () => {
+ let injector;
+ let service: VnfInstanceDetailsService;
+ let httpMock: HttpTestingController;
+
+ let SERVICE_ID: string = '1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd';
+ let serviceHierarchy;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
+ providers: [VnfInstanceDetailsService]
+ });
+
+ injector = getTestBed();
+ service = injector.get(VnfInstanceDetailsService);
+ httpMock = injector.get(HttpTestingController);
+ serviceHierarchy = getServiceServiceHierarchy();
+ });
+
+
+ describe('#hasInstanceNameError', ()=> {
+ it('hasInstanceNameError should return true if instanceName is illegal and enabled', (done: DoneFn) => {
+ let form = generateFormGroup();
+ form.controls['instanceName'].setValue('----');
+ form.controls['instanceName'].setErrors({
+ pattern : true
+ });
+ form.controls['instanceName'].markAsTouched();
+ let result = service.hasInstanceNameError(form);
+ expect(result).toBeTruthy();
+ done();
+ });
+
+ it('hasInstanceNameError should return false if instanceName is illegal and enabled and pattern is ok', (done: DoneFn) => {
+ let form = generateFormGroup();
+ form.controls['instanceName'].setValue('----');
+ form.controls['instanceName'].setErrors({
+ otherError : true
+ });
+ form.controls['instanceName'].markAsTouched();
+ let result = service.hasInstanceNameError(form);
+ expect(result).toBeFalsy();
+ done();
+ });
+ });
+
+ describe('#isUnique', () => {
+ it('Create Mode: should return false if instanceName exist', (done: DoneFn) => {
+ serviceHierarchy = getServiceServiceHierarchy();
+ let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceName', false);
+ expect(result).toBeFalsy();
+ done();
+ });
+
+ it('Update Mode: should return true if instanceName exist once', (done: DoneFn) => {
+ let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceName', true);
+ expect(result).toBeTruthy()
+ done();
+ });
+
+ it('Create Mode: should return true if instanceName not exist', (done: DoneFn) => {
+ let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceNameNotExist', false);
+ expect(result).toBeTruthy();
+ done();
+ });
+
+ it('Create Mode: should return false if instanceName exist inside vf modules', (done: DoneFn) => {
+ let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceNameVfModule', false);
+ expect(result).toBeFalsy();
+ done();
+ });
+
+ it('Update Mode: should return true if instanceName exist once inside vf modules', (done: DoneFn) => {
+ let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceNameVfModule', true);
+ expect(result).toBeTruthy();
+ done();
+ });
+
+ it('Create Mode: should return true if instanceName is not exist at vf modules and vnfs', (done: DoneFn) => {
+ let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceNameVfModuleNotExist', false);
+ expect(result).toBeTruthy();
+ done();
+ });
+
+ it('Create Mode: should return false if instanceName exist service name', (done: DoneFn) => {
+ let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'Instance-Name', false);
+ expect(result).toBeFalsy();
+ done();
+ });
+
+ it('Create Mode: should return false if volumeGroupName exist service name', (done: DoneFn) => {
+ let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'volumeGroupNameExist', false);
+ expect(result).toBeFalsy();
+ done();
+ });
+
+ it('Create Mode: should return true if volumeGroupName not exist service name', (done: DoneFn) => {
+ let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'volumeGroupNameNotExist', false);
+ expect(result).toBeTruthy();
+ done();
+ });
+ });
+
+ function getServiceServiceHierarchy() {
+ return JSON.parse(JSON.stringify(
+ {
+ "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd": {
+ "vnfs": {
+ "2017-388_ADIOD-vPE 1": {
+ "rollbackOnFailure": "true",
+ "vfModules": {},
+ "instanceParams": [
+ {}
+ ],
+ "productFamilyId": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+ "lcpCloudRegionId": "AAIAIC25",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "lineOfBusiness": "zzz1",
+ "platformName": "platform",
+ "instanceName": "uniqueInstanceName",
+ "modelInfo": {
+ "modelInvariantId": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+ "modelVersionId": "0903e1c0-8e03-4936-b5c2-260653b96413",
+ "modelName": "2017-388_ADIOD-vPE",
+ "modelVersion": "1.0",
+ "modelCustomizationId": "280dec31-f16d-488b-9668-4aae55d6648a",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 1"
+ },
+ "isUserProvidedNaming": true
+ },
+ "2017-388_ADIOD-vPE 0": {
+ "rollbackOnFailure": "true",
+ "vfModules": {},
+ "instanceParams": [
+ {}
+ ],
+ "productFamilyId": null,
+ "lcpCloudRegionId": "mtn6",
+ "tenantId": "1178612d2b394be4834ad77f567c0af2",
+ "lineOfBusiness": "ECOMP",
+ "platformName": "xxx1",
+ "instanceName": "blaaa",
+ "modelInfo": {
+ "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "modelVersionId": "afacccf6-397d-45d6-b5ae-94c39734b168",
+ "modelName": "2017-388_ADIOD-vPE",
+ "modelVersion": "4.0",
+ "modelCustomizationId": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+ "modelCustomizationName": "2017-388_ADIOD-vPE 0"
+ },
+ "isUserProvidedNaming": true
+ },
+ "2017488_ADIODvPE 0": {
+ "rollbackOnFailure": "true",
+ "vfModules": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+ "rollbackOnFailure": "true",
+ "instanceName": "uniqueInstanceNameVfModule",
+ "volumeGroupName": "volumeGroupNameExist",
+ "modelInfo": {
+ "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+ "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+ "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+ "modelVersion": "6"
+ }
+ }
+ }
+ },
+ "instanceParams": [
+ {}
+ ],
+ "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+ "lcpCloudRegionId": "mtn6",
+ "tenantId": "19c5ade915eb461e8af52fb2fd8cd1f2",
+ "lineOfBusiness": "zzz1",
+ "platformName": "platform",
+ "instanceName": "2017488_ADIODvPE",
+ "modelInfo": {
+ "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+ "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+ "modelName": "2017488_ADIODvPE",
+ "modelVersion": "5.0",
+ "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+ "modelCustomizationName": "2017488_ADIODvPE 0"
+ },
+ "isUserProvidedNaming": true
+ }
+ },
+ "instanceParams": [
+ {}
+ ],
+ "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+ "subscriptionServiceType": "VIRTUAL USP",
+ "lcpCloudRegionId": "AAIAIC25",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "aicZoneId": "DKJ1",
+ "projectName": "DFW",
+ "owningEntityId": "aaa1",
+ "instanceName": "Instance-Name",
+ "bulkSize": 1,
+ "modelInfo": {
+ "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "modelVersionId": "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
+ "modelName": "action-data",
+ "modelVersion": "1.0"
+ },
+ "tenantName": "USP-SIP-IC-24335-T-01",
+ "aicZoneName": "DKJSJDKA-DKJ1",
+ "isUserProvidedNaming": true
+ }
+ }
+ ));
+ }
+
+ function generateFormGroup() {
+ return new FormGroup({
+ productFamilyId: new FormControl(),
+ lcpCloudRegionId: new FormControl(Validators.required),
+ tenantId: new FormControl({value: null, disabled: false}, Validators.required),
+ legacyRegion: new FormControl(),
+ lineOfBusiness: new FormControl(),
+ platformName: new FormControl(Validators.required),
+ rollbackOnFailure: new FormControl(Validators.required),
+ instanceName: new FormControl({value: null}, Validators.compose([Validators.required, NumbersLettersUnderscoreValidator.valid]))
+
+ });
+ }
+
+});
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.service.ts b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.service.ts
new file mode 100644
index 000000000..677895e72
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnf-instance-details.service.ts
@@ -0,0 +1,64 @@
+import { Injectable } from '@angular/core';
+import { isNullOrUndefined } from "util";
+import { FormGroup } from '@angular/forms';
+@Injectable()
+export class VnfInstanceDetailsService {
+ isUnique(serviceInstance : any, serviceId : string, name: string, isEqualToOriginalInstanceName : boolean) : boolean {
+ const service = serviceInstance[serviceId];
+ let countInstanceName = 0;
+ let countVolumeGroupName = 0;
+ if(service){
+ if(service.instanceName === name) return false;
+ if(service.vnfs){
+ for(let key in service.vnfs){
+ if(service.vnfs[key].instanceName === name) {
+ countInstanceName++;
+ if((isEqualToOriginalInstanceName && countInstanceName > 1) || (!isEqualToOriginalInstanceName)) return false;
+ }
+ if(service.vnfs[key].vfModules){
+ for(let vfModule in service.vnfs[key].vfModules){
+ if(service.vnfs[key].vfModules[vfModule]) {
+ for(let module in service.vnfs[key].vfModules[vfModule]){
+ if(service.vnfs[key].vfModules[vfModule][module].instanceName === name ) {
+ countInstanceName++;
+ if((isEqualToOriginalInstanceName && countInstanceName > 1) || (!isEqualToOriginalInstanceName)) return false;
+ }
+
+ if(service.vnfs[key].vfModules[vfModule][module].volumeGroupName === name ) {
+ countVolumeGroupName++;
+ if((isEqualToOriginalInstanceName && countVolumeGroupName > 1) || (!isEqualToOriginalInstanceName)) return false;
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+ }
+ return true;
+ }
+
+ hasApiError(controlName: string, data: Array<any>, form: FormGroup) {
+ if (!isNullOrUndefined(data)) {
+ if (!form.controls[controlName].disabled && data.length === 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ hasInstanceNameError(form : FormGroup) : boolean {
+ if(!isNullOrUndefined(form) && !isNullOrUndefined(form.controls['instanceName'])){
+ if (form.controls['instanceName'].touched && form.controls['instanceName'].errors && form.controls['instanceName'].errors.pattern) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ hasUniqueError(isNotUniqueInstanceName) : boolean {
+ return isNotUniqueInstanceName;
+ }
+
+}
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnfPopupDataModel.ts b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnfPopupDataModel.ts
new file mode 100644
index 000000000..9a2694c70
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-instance-details/vnfPopupDataModel.ts
@@ -0,0 +1,26 @@
+import {Project} from "../../../shared/models/project";
+import {LcpRegion} from "../../../shared/models/lcpRegion";
+import {Tenant} from "../../../shared/models/tenant";
+import {ProductFamily} from "../../../shared/models/productFamily";
+import {SelectOption, SelectOptionInterface} from "../../../shared/models/selectOption";
+
+export class VNFPopupDataModel {
+ productFamilies: ProductFamily[];
+ lcpRegions: LcpRegion[];
+ lcpRegionsTenantsMap: any;
+ tenants: Tenant[];
+ projects: Project[];
+ lineOfBusinesses: SelectOption[];
+ platforms: SelectOptionInterface[];
+ globalCustomerId: string;
+
+
+ constructor(){
+ this.lcpRegions = [];
+ this.lcpRegionsTenantsMap = {};
+ this.tenants = [];
+ this.productFamilies = [];
+ this.lineOfBusinesses = [];
+ this.platforms = [];
+ }
+}
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-popup-service.ts b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup-service.ts
new file mode 100644
index 000000000..7dbe9b11b
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup-service.ts
@@ -0,0 +1,55 @@
+import {Injectable} from "@angular/core";
+import {ServiceNodeTypeToModelKeyMapper} from "../../shared/models/serviceNodeTypeToModelKeyMapper";
+import {ServiceNodeTypes} from "../../shared/models/ServiceNodeTypes";
+import {VfModule} from "../../shared/models/vfModule";
+import {ServicePlanningService} from "../../services/service-planning.service";
+import {VNFModel} from "../../shared/models/vnfModel";
+import * as _ from 'lodash';
+import {isNullOrUndefined} from "util";
+import {NumbersLettersUnderscoreValidator} from '../../shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
+import {FormGroup} from '@angular/forms';
+import {VnfInstanceDetailsComponent} from './vnf-instance-details/vnf-instance-details.component';
+import {VnfInstanceDetailsService} from './vnf-instance-details/vnf-instance-details.service';
+
+@Injectable()
+export class VnfPopupService {
+
+ constructor(private _servicePlanningService : ServicePlanningService, private _vnfInstanceDetailsService : VnfInstanceDetailsService) {
+ }
+
+ public getModelFromResponse(result : any, modelType : string, modelName:string) {
+ let model = null;
+ let rawModel = _.get(result, [ServiceNodeTypeToModelKeyMapper[modelType], modelName]);
+ if (!rawModel) return;
+
+ if (modelType === ServiceNodeTypes.VFmodule) {
+ model = new VfModule(rawModel);
+ }
+ else {
+ model = new VNFModel(rawModel);
+ }
+ return model;
+ }
+
+ onControlError(servicePopupDataModel : VnfInstanceDetailsComponent, serviceInstanceDetailsFormGroup : FormGroup, isNotUniqueInstanceName : boolean, isNotUniqueVolumeGroupName : boolean) : boolean{
+ if(this._vnfInstanceDetailsService.hasUniqueError(isNotUniqueInstanceName) || isNotUniqueVolumeGroupName){
+ return true;
+ }
+ if(!isNullOrUndefined(serviceInstanceDetailsFormGroup.controls['instanceName']) && NumbersLettersUnderscoreValidator.valid(serviceInstanceDetailsFormGroup.controls['instanceName'].value) && serviceInstanceDetailsFormGroup.controls['instanceName'].value != null && serviceInstanceDetailsFormGroup.controls['instanceName'].value.length > 0){
+ return true;
+ }
+
+ const controlName : Array<string> = ['lcpCloudRegionId', 'tenantId', 'lineOfBusiness', 'platformName'];
+ const selectDataName : Array<string> = ['lcpRegions', 'tenants', 'lineOfBusinesses', 'platforms', 'projects'];
+
+ for(let i = 0 ; i < controlName.length ; i++){
+ if (!isNullOrUndefined(servicePopupDataModel.vnfPopupDataModel) && !isNullOrUndefined(servicePopupDataModel.vnfPopupDataModel[selectDataName[i]])) {
+ if (!isNullOrUndefined(serviceInstanceDetailsFormGroup.controls[controlName[i]]) && !serviceInstanceDetailsFormGroup.controls[controlName[i]].disabled && servicePopupDataModel.vnfPopupDataModel[selectDataName[i]].length === 0) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.components.ts b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.components.ts
new file mode 100644
index 000000000..26e667d4c
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.components.ts
@@ -0,0 +1,190 @@
+import {Component, OnInit, ViewChild} from "@angular/core";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {ModelInformationItem} from "../../shared/components/model-information/model-information.component";
+import {ActivatedRoute} from "@angular/router";
+import {DialogComponent, DialogService} from "ng2-bootstrap-modal";
+import {InstancePopup} from "../instance-popup/instance-popup.components";
+import {ServiceModel} from "../../shared/models/serviceModel";
+import {Constants} from "../../shared/utils/constants";
+import * as _ from "lodash";
+import {VnfInstance} from "../../shared/models/vnfInstance";
+import {ServiceInstance} from "../../shared/models/serviceInstance";
+import {VnfInstanceDetailsComponent} from "./vnf-instance-details/vnf-instance-details.component";
+import {Subscriber} from "../../shared/models/subscriber";
+import {ServiceNodeTypes} from "../../shared/models/ServiceNodeTypes";
+import {AppState} from "../../store/reducers";
+import {NgRedux} from "@angular-redux/store";
+import {VfModuleInstance} from "../../shared/models/vfModuleInstance";
+import {VnfPopupService} from './vnf-popup-service';
+import {IframeService} from "../../shared/utils/iframe.service";
+
+export interface VnfPopupModel {
+ serviceModelId: string;
+ modelName: string;
+ parentModelName: string;
+ modelType: string;
+ dynamicInputs: any;
+ userProvidedNaming: boolean;
+ isNewVfModule : boolean;
+}
+
+@Component({
+ selector: 'vnf-popup',
+ templateUrl: 'vnf-popup.html',
+ styleUrls: ['vnf-popup.scss'],
+ providers: [AaiService, VnfPopupService]
+})
+
+export class VnfPopupComponent extends DialogComponent<VnfPopupModel, boolean> implements VnfPopupModel, InstancePopup, OnInit {
+
+ @ViewChild(VnfInstanceDetailsComponent) vnfInstanceDetails: VnfInstanceDetailsComponent;
+
+ serviceModelId: string;
+ modelName: string;
+ parentModelName: string;
+ modelType: string;
+ isNewVfModule : boolean;
+ model: any;
+ serviceModel: ServiceModel;
+ popupTypeName: string;
+ serviceInstance: ServiceInstance;
+ vnfInstance: VnfInstance;
+ dynamicInputs;
+ userProvidedNaming: boolean;
+ typeMapperForTitle = {
+ VF: "VNF",
+ VFmodule: "Module (Heat stack)"
+ };
+
+ modelInformationItems: Array<ModelInformationItem> = [];
+ isNotUniqueInstanceName : boolean = false;
+ isNotUniqueVolumeGroupName : boolean = false;
+ hasGeneralApiError : boolean = false;
+
+ parentElementClassName = 'content';
+
+ constructor(dialogService: DialogService, protected route: ActivatedRoute, protected _aaiService: AaiService,
+ private store: NgRedux<AppState>,
+ private _iframeService : IframeService,
+ private _vnfPopupService: VnfPopupService) {
+ super(dialogService);
+ this.vnfInstance = new VnfInstance();
+ }
+
+ updateGeneralErrorSection() : void {
+ this.hasGeneralApiError = this._vnfPopupService.onControlError(
+ this.vnfInstanceDetails,
+ this.vnfInstanceDetails.instanceFormGroup,
+ this.vnfInstanceDetails.isNotUniqueInstanceName,
+ this.vnfInstanceDetails.isNotUniqueVolumeGroupName);
+ }
+
+ ngOnInit(): void {
+ this.updateServiceModelById();
+ this.popupTypeName = this.getModelTypeForPopupTitle();
+ this.updateServiceModelById();
+ this.updateInstanceFromStore();
+ }
+
+ onCancelClick() {
+ this._iframeService.removeClassCloseModal(this.parentElementClassName);
+ super.close();
+ }
+
+ onServiceInstanceNameChanged(isNotUniqueInstanceName: boolean) : void {
+ this.isNotUniqueInstanceName = isNotUniqueInstanceName;
+ }
+
+ onVolumeGroupNameChanged(isNotUniqueVolumeGroupName: boolean) : void {
+ this.isNotUniqueVolumeGroupName = isNotUniqueVolumeGroupName;
+ }
+
+ onSetClick() {
+ this._iframeService.removeClassCloseModal(this.parentElementClassName);
+ this.result = true;
+ super.close();
+ }
+
+ updateServiceModelById() {
+ this._aaiService.getServiceModelById(this.serviceModelId).subscribe(
+ result => {
+ this.serviceModel = new ServiceModel(result);
+ this.model = this._vnfPopupService.getModelFromResponse(result, this.modelType, this.modelName);
+ this.modelInformationItems = this.createModelInformationItems();
+ },
+ error => {
+ console.log('error is ', error)
+ }
+ );
+ }
+
+ updateInstanceFromStore() {
+ let instance;
+ const serviceInstance = this.store.getState().service.serviceInstance[this.serviceModelId];
+ if (this.modelType === ServiceNodeTypes.VF) {
+ instance = serviceInstance.vnfs[this.modelName] || new VnfInstance();
+ } else {
+ instance = new VfModuleInstance();
+ }
+
+ if (instance.instanceParams && instance.instanceParams[0]) {
+ this.dynamicInputs = this.dynamicInputs.map(x => {
+ x.value = (instance.instanceParams[0][x.id]) ? instance.instanceParams[0][x.id] : x.value;
+ return x;
+ });
+ }
+ this.vnfInstance = instance;
+ }
+
+ getModelName(): string {
+ return this.modelName;
+ }
+
+ getModelTypeForPopupTitle(): string {
+ if (_.has(this.typeMapperForTitle, this.modelType)) {
+ return this.typeMapperForTitle[this.modelType];
+ }
+ return this.modelType;
+ }
+
+ extractSubscriberNameBySubscriberId(subsriberId: string) {
+ var result: string = null;
+ var filteredArray: any = _.filter(this.store.getState().service.subscribers, function (o: Subscriber) {
+ return o.id === subsriberId
+ })
+ if (filteredArray.length > 0) {
+ result = filteredArray[0].name;
+ }
+ return result;
+ }
+
+ createModelInformationItems(): Array<ModelInformationItem> {
+ var serviceInstance = this.store.getState().service.serviceInstance[this.serviceModelId];
+
+ let items = [
+ new ModelInformationItem("Subscriber Name", "subscriberName", [this.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId)], "", true),
+ new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true),
+
+ new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false),
+ new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true),
+ new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
+ new ModelInformationItem("Description", "description", [this.model.description]),
+ new ModelInformationItem("Category", "category", [this.model.category]),
+ new ModelInformationItem("Sub Category", "subCategory",[this.model.subCategory]),
+ new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
+ new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
+ new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
+ new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]),
+
+
+ ];
+ if (this.modelType === 'VFmodule') {
+ items.push(new ModelInformationItem("Minimum to instantiate", "min", [this.model.min], "", true),
+ new ModelInformationItem("Maximum to instantiate", "max", this.model.max == undefined ? [1] : [this.model.max], "", true),
+ new ModelInformationItem("Recommended to instantiate", "initial", [this.model.initial]));
+
+ }
+
+ return items;
+ }
+}
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.html b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.html
new file mode 100644
index 000000000..d2e043b18
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.html
@@ -0,0 +1,54 @@
+<div id="instance-popup" class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" (click)="onCancelClick()" >&times;</button>
+ <span [attr.data-tests-id]="'create-modal-title'" class="modal-title">Set a new {{popupTypeName}}</span>
+ </div>
+ <div class="modal-body popup-content">
+
+ <div class="header-left">
+ <div>MODEL: <span>"{{popupTypeName}}"</span></div>
+ </div>
+
+ <div class="header-right">
+ {{getModelTypeForPopupTitle()}} Instance Details
+ </div>
+
+ <div class="model-information">
+ <model-information [modelInformationItems]="modelInformationItems"></model-information>
+ </div>
+
+ <div class="instance-form">
+ <vnf-instance-details [dynamicInputs]="dynamicInputs"
+ [vnfModel]="model"
+ [modelType]="modelType"
+ [modelName]="modelName"
+ [parentModelName]="parentModelName"
+ [isNewVfModule]="isNewVfModule"
+ [serviceInstance]="vnfInstance"
+ [vnfInstance]="vnfInstance"
+ [serviceUuid]="serviceModelId"
+ [userProvidedNaming]="userProvidedNaming"
+ (onSubmitClick)="onSetClick($event)"
+ (onDataChanged)="updateGeneralErrorSection()"
+ (onServiceInstanceNameChanged)="onServiceInstanceNameChanged($event)"
+ (onVolumeGroupNameChanged)="onVolumeGroupNameChanged($event)"
+
+ ></vnf-instance-details>
+ </div>
+
+ </div>
+ <div class="modal-footer row" style="padding: 0">
+ <div class="col-md-6">
+ <div *ngIf="hasGeneralApiError == true">
+ <form-general-error [message]="'Page contains errors. Please see details next to the relevant fields.'"></form-general-error>
+ </div>
+ </div>
+ <div class="col-md-6" style="padding: 15px;padding-right: 35px;">
+ <button [attr.data-tests-id]="'cancelButton'" type="button" class="btn btn-default cancel" (click)="onCancelClick()"><span>Cancel</span></button>
+ <input type="submit" value="Set" form="vnfForm" data-tests-id="vnf-form-set"
+ class="btn btn-success submit" [disabled]="!vnfInstanceDetails?.vnfForm?.valid || isNotUniqueInstanceName || isNotUniqueVolumeGroupName">
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.scss b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.scss
new file mode 100644
index 000000000..6e606dbb9
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.scss
@@ -0,0 +1,185 @@
+$grid-border: 1px #d2d2d2 solid;
+
+#instance-popup {
+ color: #191919;
+
+ .left-panel {
+ background: #f2f2f2;
+ border-right: $grid-border;
+ }
+
+ .header-common {
+ height: 100%;
+ align-items: center;
+ display: flex;
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ }
+
+ .header-text {
+ padding-left: 30px;
+ @extend .header-common;
+ }
+
+ .header-left {
+ grid-area: header-left;
+ @extend .header-text;
+ @extend .left-panel;
+ border-bottom: $grid-border;
+
+ span {
+ font-family: OpenSans-Regular;
+ font-size: 14px;
+ };
+ }
+
+ .header-right {
+ grid-area: header-right;
+
+ @extend .header-text;
+ border-bottom: $grid-border;
+ }
+
+ .quantity-label {
+ grid-area: quantity-label;
+ @extend .header-common;
+ border-bottom: $grid-border;
+ height: 100%;
+ font-family: OpenSans-Regular;
+ }
+
+ .quantity {
+ grid-area: quantity;
+ border-left: $grid-border;
+ border-bottom: $grid-border;
+ border-top-style: none;
+ font-family: OpenSans-Semibold;
+ text-align: start;
+ text-indent: 10px;
+ }
+
+ .quantity-select {
+ width: 78px;
+ height: 100%;
+ border: 0;
+ background: white;
+ outline: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: url('../../../assets/img/chevron.svg') 0 0 no-repeat;
+ background-size: 24px;
+ background-position-x: right;
+ background-position-y: center;
+ }
+ input[type="number"]:hover::-webkit-inner-spin-button {
+ height: 20px;
+ }
+
+ .model-information {
+ grid-area: model-information;
+
+ padding: 30px;
+ overflow: auto;
+ @extend .left-panel;
+ }
+
+ .instance-form {
+ grid-area: instance-form;
+ }
+
+ .popup-content {
+ display: grid;
+ grid-template-columns: 400px auto 30px 93px;
+ grid-template-rows: 50px calc(100vh - 180px);
+ grid-template-areas:
+ "header-left header-right header-right header-right"
+ "model-information instance-form instance-form instance-form";
+ padding: 0;
+ }
+}
+
+.modal {
+ background-color: #191919;
+ opacity: 0.8;
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 0;
+}
+@media (min-width: 1150px) {
+ .popup-content {
+ grid-template-rows: 30px 680px;
+ }
+}
+
+.modal-content {
+ border-radius: 0;
+ box-shadow: none;
+ border: none;
+}
+
+.modal-footer {
+ .cancel {
+ width: 120px;
+ height: 36px;
+ background: #ffffff;
+ border: 1px solid #009fdb;
+ border-radius: 2px;
+ span {
+ font-family: OpenSans-Regular;
+ font-size: 14px;
+ color: #009fdb;
+ line-height: 16px;
+ }
+ }
+
+ .submit {
+ width: 120px;
+ height: 36px;
+ background: #009fdb;
+ border-radius: 2px;
+ border-color: #009fdb;
+ span {
+ font-family: OpenSans-Regular;
+ font-size: 14px;
+ color: #FFFFFF;
+ line-height: 16px;
+ }
+ }
+}
+
+.modal-header {
+ background-color: #009fdb;
+
+ padding-bottom: 13px;
+ padding-top: 13px;
+ padding-left: 29px;
+ padding-right: 21px;
+
+ .close {
+ font-size: 32px;
+ font-weight: 200;
+ color: #d8d8d8;
+ text-shadow: none;
+ filter: none;
+ opacity: 1;
+ }
+
+ .modal-title {
+ font-family: OpenSans-Regular;
+ font-size: 24px;
+ color: #fff;
+ line-height: 34px;
+ }
+}
+//
+//@media (min-width: 1200px) {
+// .service-model,
+// .service-instance {
+// width: 1050px;
+// margin: 30px auto;
+// }
+//}
diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.service.spec.ts b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.service.spec.ts
new file mode 100644
index 000000000..02296f728
--- /dev/null
+++ b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.service.spec.ts
@@ -0,0 +1,827 @@
+import {VnfPopupService} from './vnf-popup-service';
+import {ServicePlanningService} from '../../services/service-planning.service';
+import {ServiceNodeTypes} from '../../shared/models/ServiceNodeTypes';
+import {NgRedux} from '@angular-redux/store';
+import {VNFModel} from '../../shared/models/vnfModel';
+import {VfModule} from '../../shared/models/vfModule';
+import {FormControl, FormGroup, Validators} from '@angular/forms';
+import {NumbersLettersUnderscoreValidator} from '../../shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
+import {VnfInstanceDetailsService} from './vnf-instance-details/vnf-instance-details.service';
+import {ReflectiveInjector} from '@angular/core';
+
+export class MockAppStore<T> {
+}
+
+describe('Vnf popup service', () => {
+ let injector;
+ let service: VnfPopupService;
+ let fg: FormGroup;
+ let data = generateModelData();
+ let servicePopupDataModel = generateServicePopupDataModel();
+ let form: FormGroup = generateFormGroup();
+ beforeEach(() => {
+
+ let injector = ReflectiveInjector.resolveAndCreate([
+ VnfPopupService,
+ ServicePlanningService,
+ VnfInstanceDetailsService,
+ {provide: FormGroup, useClass: MockAppStore},
+ {provide: NgRedux, useClass: MockAppStore}
+ ]);
+
+ service = injector.get(VnfPopupService);
+ fg = injector.get(FormGroup);
+ });
+
+ describe('#updateVnfDataFromModel', () => {
+ it('update vnf data from model should return new vnf', (done: DoneFn) => {
+ let vnf: VNFModel = service.getModelFromResponse(data, ServiceNodeTypes.VF, '2017-388_ADIOD-vPE 1');
+
+ expect(vnf).toEqual(jasmine.any(VNFModel));
+ done();
+ });
+
+ it('update wrong vnf data from model should be undefined', (done: DoneFn) => {
+ let vnf: VNFModel = service.getModelFromResponse(data, ServiceNodeTypes.VF, '2017-388_ADIOD-vPE 3');
+
+ expect(vnf).toBeUndefined();
+ done();
+ });
+
+ it('update vfModule data from model should return new vfModule', (done: DoneFn) => {
+ let vfModule: VfModule = service.getModelFromResponse(data, ServiceNodeTypes.VFmodule, '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1');
+
+ expect(vfModule).toEqual(jasmine.any(VfModule));
+ done();
+ });
+
+ });
+
+
+ describe('#onControlError', () => {
+ it('onControlError should return true if instanceName is not legal', (done: DoneFn) => {
+ form.controls['instanceName'].setValue('aaaa - aaa');
+
+ let result: boolean = service.onControlError(<any>servicePopupDataModel, form, false, false);
+ expect(result).toBeTruthy();
+ done();
+ });
+
+ it('onControlError should return false if instanceName is legal', (done: DoneFn) => {
+
+ form.controls['instanceName'].setValue('aaaa');
+ let result = service.onControlError(<any>servicePopupDataModel, form, false, false);
+ expect(result).toBeFalsy();
+ done();
+ });
+
+ it('onControlError should return true if instanceName is not unique', (done: DoneFn) => {
+
+ form.controls['instanceName'].setValue('aaaa');
+ let result = service.onControlError(<any>servicePopupDataModel, form, true, false);
+ expect(result).toBeTruthy();
+ done();
+ });
+
+ it('onControlError should return true if lcpRegions is empty', (done: DoneFn) => {
+ servicePopupDataModel.vnfPopupDataModel['lcpRegions'] = [];
+ let result = service.onControlError(<any>servicePopupDataModel, form, true, false);
+ expect(result).toBeTruthy();
+ done();
+ });
+
+ it('onControlError should return true if isNotUniqueVolumeGroupName is true', (done: DoneFn) => {
+ let result = service.onControlError(<any>servicePopupDataModel, form, true, true);
+ expect(result).toBeTruthy();
+ done();
+ })
+ });
+
+
+ function generateServicePopupDataModel() {
+ return {
+ 'vnfPopupDataModel': JSON.parse('{"tenants" : [1,2,3],"lcpRegions":[1,2,3],"lcpRegionsTenantsMap":{},"productFamilies":[1,2,3],"lineOfBusinesses":[{"id":"ECOMP","name":"ECOMP"},{"id":"zzz1","name":"zzz1"}],"platforms":[{"id":"platform","name":"platform"},{"id":"xxx1","name":"xxx1"}],"rollbackOnFailure":[{"id":"true","name":"Rollback"}]}')
+ }
+ }
+
+ function generateFormGroup() {
+ return new FormGroup({
+ productFamilyId: new FormControl(),
+ lcpCloudRegionId: new FormControl(Validators.required),
+ tenantId: new FormControl({value: null, disabled: false}, Validators.required),
+ legacyRegion: new FormControl(),
+ lineOfBusiness: new FormControl(),
+ platformName: new FormControl(Validators.required),
+ instanceName: new FormControl({value: null}, Validators.compose([Validators.required, NumbersLettersUnderscoreValidator.valid]))
+ });
+ }
+
+ function generateModelData() {
+ return JSON.parse(JSON.stringify(
+ {
+ 'service': {
+ 'uuid': '2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd',
+ 'invariantUuid': 'e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0',
+ 'name': 'action-data',
+ 'version': '1.0',
+ 'toscaModelURL': null,
+ 'category': '',
+ 'serviceType': '',
+ 'serviceRole': '',
+ 'description': '',
+ 'serviceEcompNaming': 'true',
+ 'instantiationType': 'ClientConfig',
+ 'inputs': {
+ '2017488_adiodvpe0_ASN': {
+ 'type': 'string',
+ 'description': 'AV/PE',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'AV_vPE'
+ },
+ 'adiodvpe0_bandwidth': {
+ 'type': 'string',
+ 'description': 'Requested VPE bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '10'
+ },
+ '2017488_adiodvpe0_vnf_instance_name': {
+ 'type': 'string',
+ 'description': 'The hostname assigned to the vpe.',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'mtnj309me6'
+ },
+ '2017488_adiodvpe0_vnf_config_template_version': {
+ 'type': 'string',
+ 'description': 'VPE Software Version',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '17.2'
+ },
+ '2017488_adiodvpe0_AIC_CLLI': {
+ 'type': 'string',
+ 'description': 'AIC Site CLLI',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'ATLMY8GA'
+ },
+ 'adiodvpe0_bandwidth_units': {
+ 'type': 'string',
+ 'description': 'Units of bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'Gbps'
+ }
+ }
+ },
+ 'vnfs': {
+ '2017-388_ADIOD-vPE 1': {
+ 'uuid': '0903e1c0-8e03-4936-b5c2-260653b96413',
+ 'invariantUuid': '00beb8f9-6d39-452f-816d-c709b9cbb87d',
+ 'description': 'Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM',
+ 'name': '2017-388_ADIOD-vPE',
+ 'version': '1.0',
+ 'customizationUuid': '280dec31-f16d-488b-9668-4aae55d6648a',
+ 'inputs': {
+ 'vnf_config_template_version': {
+ 'type': 'string',
+ 'description': 'VPE Software Version',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '17.2'
+ },
+ 'bandwidth_units': {
+ 'type': 'string',
+ 'description': 'Units of bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'Gbps'
+ },
+ 'bandwidth': {
+ 'type': 'string',
+ 'description': 'Requested VPE bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '10'
+ },
+ 'AIC_CLLI': {
+ 'type': 'string',
+ 'description': 'AIC Site CLLI',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'ATLMY8GA'
+ },
+ 'ASN': {
+ 'type': 'string',
+ 'description': 'AV/PE',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'AV_vPE'
+ },
+ 'vnf_instance_name': {
+ 'type': 'string',
+ 'description': 'The hostname assigned to the vpe.',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'mtnj309me6'
+ }
+ },
+ 'commands': {
+ 'vnf_config_template_version': {
+ 'displayName': 'vnf_config_template_version',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_config_template_version'
+ },
+ 'bandwidth_units': {
+ 'displayName': 'bandwidth_units',
+ 'command': 'get_input',
+ 'inputName': 'adiodvpe0_bandwidth_units'
+ },
+ 'bandwidth': {'displayName': 'bandwidth', 'command': 'get_input', 'inputName': 'adiodvpe0_bandwidth'},
+ 'AIC_CLLI': {'displayName': 'AIC_CLLI', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_AIC_CLLI'},
+ 'ASN': {'displayName': 'ASN', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_ASN'},
+ 'vnf_instance_name': {
+ 'displayName': 'vnf_instance_name',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_instance_name'
+ }
+ },
+ 'properties': {
+ 'vmxvre_retype': 'RE-VMX',
+ 'vnf_config_template_version': 'get_input:2017488_adiodvpe0_vnf_config_template_version',
+ 'sriov44_net_id': '48d399b3-11ee-48a8-94d2-f0ea94d6be8d',
+ 'int_ctl_net_id': '2f323477-6936-4d01-ac53-d849430281d9',
+ 'vmxvpfe_sriov41_0_port_mac': '00:11:22:EF:AC:DF',
+ 'int_ctl_net_name': 'VMX-INTXI',
+ 'vmx_int_ctl_prefix': '128.0.0.0',
+ 'sriov43_net_id': 'da349ca1-6de9-4548-be88-2d88e99bfef5',
+ 'sriov42_net_id': '760669ba-013d-4d9b-b0e7-4151fe2e6279',
+ 'sriov41_net_id': '25ad52d5-c165-40f8-b3b0-ddfc2373280a',
+ 'nf_type': 'vPE',
+ 'vmxvpfe_int_ctl_ip_1': '128.0.0.16',
+ 'is_AVPN_service': 'false',
+ 'vmx_RSG_name': 'vREXI-affinity',
+ 'vmx_int_ctl_forwarding': 'l2',
+ 'vmxvre_oam_ip_0': '10.40.123.5',
+ 'vmxvpfe_sriov44_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_sriov41_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov42_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov44_0_port_unknownunicastallow': 'true',
+ 'vmxvre_image_name_0': 'VRE-ENGINE_17.2-S2.1.qcow2',
+ 'vmxvre_instance': '0',
+ 'vmxvpfe_sriov43_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvre_flavor_name': 'ns.c1r16d32.v5',
+ 'vmxvpfe_volume_size_0': '40.0',
+ 'vmxvpfe_sriov43_0_port_vlanfilter': '4001',
+ 'nf_naming': '{ecomp_generated_naming=true}',
+ 'nf_naming_code': 'Navneet',
+ 'vmxvre_name_0': 'vREXI',
+ 'vmxvpfe_sriov42_0_port_vlanstrip': 'false',
+ 'vmxvpfe_volume_name_0': 'vPFEXI_FBVolume',
+ 'vmx_RSG_id': 'bd89a33c-13c3-4a04-8fde-1a57eb123141',
+ 'vmxvpfe_image_name_0': 'VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2',
+ 'vmxvpfe_sriov43_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_console': 'vidconsole',
+ 'vmxvpfe_sriov44_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov42_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_volume_id_0': '47cede15-da2f-4397-a101-aa683220aff3',
+ 'vmxvpfe_sriov42_0_port_unknownmulticastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_vlanstrip': 'false',
+ 'vf_module_id': '123',
+ 'nf_function': 'JAI',
+ 'vmxvpfe_sriov43_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_int_ctl_ip_0': '128.0.0.1',
+ 'AIC_CLLI': 'get_input:2017488_adiodvpe0_AIC_CLLI',
+ 'vnf_name': 'mtnj309me6vre',
+ 'vmxvpfe_sriov41_0_port_unknownunicastallow': 'true',
+ 'vmxvre_volume_type_1': 'HITACHI',
+ 'vmxvpfe_sriov44_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_type_0': 'HITACHI',
+ 'vmxvpfe_volume_type_0': 'HITACHI',
+ 'vmxvpfe_sriov43_0_port_broadcastallow': 'true',
+ 'bandwidth_units': 'get_input:adiodvpe0_bandwidth_units',
+ 'vnf_id': '123',
+ 'vmxvre_oam_prefix': '24',
+ 'availability_zone_0': 'mtpocfo-kvm-az01',
+ 'ASN': 'get_input:2017488_adiodvpe0_ASN',
+ 'vmxvre_chassis_i2cid': '161',
+ 'vmxvpfe_name_0': 'vPFEXI',
+ 'bandwidth': 'get_input:adiodvpe0_bandwidth',
+ 'availability_zone_max_count': '1',
+ 'vmxvre_volume_size_0': '45.0',
+ 'vmxvre_volume_size_1': '50.0',
+ 'vmxvpfe_sriov42_0_port_broadcastallow': 'true',
+ 'vmxvre_oam_gateway': '10.40.123.1',
+ 'vmxvre_volume_name_1': 'vREXI_FAVolume',
+ 'vmxvre_ore_present': '0',
+ 'vmxvre_volume_name_0': 'vREXI_FBVolume',
+ 'vmxvre_type': '0',
+ 'vnf_instance_name': 'get_input:2017488_adiodvpe0_vnf_instance_name',
+ 'vmxvpfe_sriov41_0_port_unknownmulticastallow': 'true',
+ 'oam_net_id': 'b95eeb1d-d55d-4827-abb4-8ebb94941429',
+ 'vmx_int_ctl_len': '24',
+ 'vmxvpfe_sriov43_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov41_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_id_1': '6e86797e-03cd-4fdc-ba72-2957119c746d',
+ 'vmxvpfe_sriov41_0_port_vlanfilter': '4001',
+ 'nf_role': 'Testing',
+ 'vmxvre_volume_id_0': 'f4eacb79-f687-4e9d-b760-21847c8bb15a',
+ 'vmxvpfe_sriov42_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_flavor_name': 'ns.c20r16d25.v5'
+ },
+ 'type': 'VF',
+ 'modelCustomizationName': '2017-388_ADIOD-vPE 1',
+ 'vfModules': {},
+ 'volumeGroups': {}
+ },
+ '2017-388_ADIOD-vPE 0': {
+ 'uuid': 'afacccf6-397d-45d6-b5ae-94c39734b168',
+ 'invariantUuid': '72e465fe-71b1-4e7b-b5ed-9496118ff7a8',
+ 'description': 'Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM',
+ 'name': '2017-388_ADIOD-vPE',
+ 'version': '4.0',
+ 'customizationUuid': 'b3c76f73-eeb5-4fb6-9d31-72a889f1811c',
+ 'inputs': {
+ 'vnf_config_template_version': {
+ 'type': 'string',
+ 'description': 'VPE Software Version',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '17.2'
+ },
+ 'bandwidth_units': {
+ 'type': 'string',
+ 'description': 'Units of bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'Gbps'
+ },
+ 'bandwidth': {
+ 'type': 'string',
+ 'description': 'Requested VPE bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '10'
+ },
+ 'AIC_CLLI': {
+ 'type': 'string',
+ 'description': 'AIC Site CLLI',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'ATLMY8GA'
+ },
+ 'ASN': {
+ 'type': 'string',
+ 'description': 'AV/PE',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'AV_vPE'
+ },
+ 'vnf_instance_name': {
+ 'type': 'string',
+ 'description': 'The hostname assigned to the vpe.',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'mtnj309me6'
+ }
+ },
+ 'commands': {
+ 'vnf_config_template_version': {
+ 'displayName': 'vnf_config_template_version',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_config_template_version'
+ },
+ 'bandwidth_units': {
+ 'displayName': 'bandwidth_units',
+ 'command': 'get_input',
+ 'inputName': 'adiodvpe0_bandwidth_units'
+ },
+ 'bandwidth': {'displayName': 'bandwidth', 'command': 'get_input', 'inputName': 'adiodvpe0_bandwidth'},
+ 'AIC_CLLI': {'displayName': 'AIC_CLLI', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_AIC_CLLI'},
+ 'ASN': {'displayName': 'ASN', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_ASN'},
+ 'vnf_instance_name': {
+ 'displayName': 'vnf_instance_name',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_instance_name'
+ }
+ },
+ 'properties': {
+ 'vmxvre_retype': 'RE-VMX',
+ 'vnf_config_template_version': 'get_input:2017488_adiodvpe0_vnf_config_template_version',
+ 'sriov44_net_id': '48d399b3-11ee-48a8-94d2-f0ea94d6be8d',
+ 'int_ctl_net_id': '2f323477-6936-4d01-ac53-d849430281d9',
+ 'vmxvpfe_sriov41_0_port_mac': '00:11:22:EF:AC:DF',
+ 'int_ctl_net_name': 'VMX-INTXI',
+ 'vmx_int_ctl_prefix': '128.0.0.0',
+ 'sriov43_net_id': 'da349ca1-6de9-4548-be88-2d88e99bfef5',
+ 'sriov42_net_id': '760669ba-013d-4d9b-b0e7-4151fe2e6279',
+ 'sriov41_net_id': '25ad52d5-c165-40f8-b3b0-ddfc2373280a',
+ 'nf_type': 'vPE',
+ 'vmxvpfe_int_ctl_ip_1': '128.0.0.16',
+ 'is_AVPN_service': 'false',
+ 'vmx_RSG_name': 'vREXI-affinity',
+ 'vmx_int_ctl_forwarding': 'l2',
+ 'vmxvre_oam_ip_0': '10.40.123.5',
+ 'vmxvpfe_sriov44_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_sriov41_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov42_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov44_0_port_unknownunicastallow': 'true',
+ 'vmxvre_image_name_0': 'VRE-ENGINE_17.2-S2.1.qcow2',
+ 'vmxvre_instance': '0',
+ 'vmxvpfe_sriov43_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvre_flavor_name': 'ns.c1r16d32.v5',
+ 'vmxvpfe_volume_size_0': '40.0',
+ 'vmxvpfe_sriov43_0_port_vlanfilter': '4001',
+ 'nf_naming': '{ecomp_generated_naming=true}',
+ 'nf_naming_code': 'Navneet',
+ 'vmxvre_name_0': 'vREXI',
+ 'vmxvpfe_sriov42_0_port_vlanstrip': 'false',
+ 'vmxvpfe_volume_name_0': 'vPFEXI_FBVolume',
+ 'vmx_RSG_id': 'bd89a33c-13c3-4a04-8fde-1a57eb123141',
+ 'vmxvpfe_image_name_0': 'VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2',
+ 'vmxvpfe_sriov43_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_console': 'vidconsole',
+ 'vmxvpfe_sriov44_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov42_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_volume_id_0': '47cede15-da2f-4397-a101-aa683220aff3',
+ 'vmxvpfe_sriov42_0_port_unknownmulticastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_vlanstrip': 'false',
+ 'vf_module_id': '123',
+ 'nf_function': 'JAI',
+ 'vmxvpfe_sriov43_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_int_ctl_ip_0': '128.0.0.1',
+ 'AIC_CLLI': 'get_input:2017488_adiodvpe0_AIC_CLLI',
+ 'vnf_name': 'mtnj309me6vre',
+ 'vmxvpfe_sriov41_0_port_unknownunicastallow': 'true',
+ 'vmxvre_volume_type_1': 'HITACHI',
+ 'vmxvpfe_sriov44_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_type_0': 'HITACHI',
+ 'vmxvpfe_volume_type_0': 'HITACHI',
+ 'vmxvpfe_sriov43_0_port_broadcastallow': 'true',
+ 'bandwidth_units': 'get_input:adiodvpe0_bandwidth_units',
+ 'vnf_id': '123',
+ 'vmxvre_oam_prefix': '24',
+ 'availability_zone_0': 'mtpocfo-kvm-az01',
+ 'ASN': 'get_input:2017488_adiodvpe0_ASN',
+ 'vmxvre_chassis_i2cid': '161',
+ 'vmxvpfe_name_0': 'vPFEXI',
+ 'bandwidth': 'get_input:adiodvpe0_bandwidth',
+ 'availability_zone_max_count': '1',
+ 'vmxvre_volume_size_0': '45.0',
+ 'vmxvre_volume_size_1': '50.0',
+ 'vmxvpfe_sriov42_0_port_broadcastallow': 'true',
+ 'vmxvre_oam_gateway': '10.40.123.1',
+ 'vmxvre_volume_name_1': 'vREXI_FAVolume',
+ 'vmxvre_ore_present': '0',
+ 'vmxvre_volume_name_0': 'vREXI_FBVolume',
+ 'vmxvre_type': '0',
+ 'vnf_instance_name': 'get_input:2017488_adiodvpe0_vnf_instance_name',
+ 'vmxvpfe_sriov41_0_port_unknownmulticastallow': 'true',
+ 'oam_net_id': 'b95eeb1d-d55d-4827-abb4-8ebb94941429',
+ 'vmx_int_ctl_len': '24',
+ 'vmxvpfe_sriov43_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov41_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_id_1': '6e86797e-03cd-4fdc-ba72-2957119c746d',
+ 'vmxvpfe_sriov41_0_port_vlanfilter': '4001',
+ 'nf_role': 'Testing',
+ 'vmxvre_volume_id_0': 'f4eacb79-f687-4e9d-b760-21847c8bb15a',
+ 'vmxvpfe_sriov42_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_flavor_name': 'ns.c20r16d25.v5'
+ },
+ 'type': 'VF',
+ 'modelCustomizationName': '2017-388_ADIOD-vPE 0',
+ 'vfModules': {},
+ 'volumeGroups': {}
+ },
+ '2017488_ADIODvPE 0': {
+ 'uuid': '69e09f68-8b63-4cc9-b9ff-860960b5db09',
+ 'invariantUuid': '72e465fe-71b1-4e7b-b5ed-9496118ff7a8',
+ 'description': 'Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM',
+ 'name': '2017488_ADIODvPE',
+ 'version': '5.0',
+ 'customizationUuid': '1da7b585-5e61-4993-b95e-8e6606c81e45',
+ 'inputs': {
+ 'vnf_config_template_version': {
+ 'type': 'string',
+ 'description': 'VPE Software Version',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '17.2'
+ },
+ 'bandwidth_units': {
+ 'type': 'string',
+ 'description': 'Units of bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'Gbps'
+ },
+ 'bandwidth': {
+ 'type': 'string',
+ 'description': 'Requested VPE bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '10'
+ },
+ 'AIC_CLLI': {
+ 'type': 'string',
+ 'description': 'AIC Site CLLI',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'ATLMY8GA'
+ },
+ 'ASN': {
+ 'type': 'string',
+ 'description': 'AV/PE',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'AV_vPE'
+ },
+ 'vnf_instance_name': {
+ 'type': 'string',
+ 'description': 'The hostname assigned to the vpe.',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'mtnj309me6'
+ }
+ },
+ 'commands': {
+ 'vnf_config_template_version': {
+ 'displayName': 'vnf_config_template_version',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_config_template_version'
+ },
+ 'bandwidth_units': {
+ 'displayName': 'bandwidth_units',
+ 'command': 'get_input',
+ 'inputName': 'adiodvpe0_bandwidth_units'
+ },
+ 'bandwidth': {'displayName': 'bandwidth', 'command': 'get_input', 'inputName': 'adiodvpe0_bandwidth'},
+ 'AIC_CLLI': {'displayName': 'AIC_CLLI', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_AIC_CLLI'},
+ 'ASN': {'displayName': 'ASN', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_ASN'},
+ 'vnf_instance_name': {
+ 'displayName': 'vnf_instance_name',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_instance_name'
+ }
+ },
+ 'properties': {
+ 'vmxvre_retype': 'RE-VMX',
+ 'vnf_config_template_version': 'get_input:2017488_adiodvpe0_vnf_config_template_version',
+ 'sriov44_net_id': '48d399b3-11ee-48a8-94d2-f0ea94d6be8d',
+ 'int_ctl_net_id': '2f323477-6936-4d01-ac53-d849430281d9',
+ 'vmxvpfe_sriov41_0_port_mac': '00:11:22:EF:AC:DF',
+ 'int_ctl_net_name': 'VMX-INTXI',
+ 'vmx_int_ctl_prefix': '128.0.0.0',
+ 'sriov43_net_id': 'da349ca1-6de9-4548-be88-2d88e99bfef5',
+ 'sriov42_net_id': '760669ba-013d-4d9b-b0e7-4151fe2e6279',
+ 'sriov41_net_id': '25ad52d5-c165-40f8-b3b0-ddfc2373280a',
+ 'nf_type': 'vPE',
+ 'vmxvpfe_int_ctl_ip_1': '128.0.0.16',
+ 'is_AVPN_service': 'false',
+ 'vmx_RSG_name': 'vREXI-affinity',
+ 'vmx_int_ctl_forwarding': 'l2',
+ 'vmxvre_oam_ip_0': '10.40.123.5',
+ 'vmxvpfe_sriov44_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_sriov41_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov42_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov44_0_port_unknownunicastallow': 'true',
+ 'vmxvre_image_name_0': 'VRE-ENGINE_17.2-S2.1.qcow2',
+ 'vmxvre_instance': '0',
+ 'vmxvpfe_sriov43_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvre_flavor_name': 'ns.c1r16d32.v5',
+ 'vmxvpfe_volume_size_0': '40.0',
+ 'vmxvpfe_sriov43_0_port_vlanfilter': '4001',
+ 'nf_naming': '{ecomp_generated_naming=true}',
+ 'nf_naming_code': 'Navneet',
+ 'vmxvre_name_0': 'vREXI',
+ 'vmxvpfe_sriov42_0_port_vlanstrip': 'false',
+ 'vmxvpfe_volume_name_0': 'vPFEXI_FBVolume',
+ 'vmx_RSG_id': 'bd89a33c-13c3-4a04-8fde-1a57eb123141',
+ 'vmxvpfe_image_name_0': 'VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2',
+ 'vmxvpfe_sriov43_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_console': 'vidconsole',
+ 'vmxvpfe_sriov44_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov42_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_volume_id_0': '47cede15-da2f-4397-a101-aa683220aff3',
+ 'vmxvpfe_sriov42_0_port_unknownmulticastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_vlanstrip': 'false',
+ 'vf_module_id': '123',
+ 'nf_function': 'JAI',
+ 'vmxvpfe_sriov43_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_int_ctl_ip_0': '128.0.0.1',
+ 'AIC_CLLI': 'get_input:2017488_adiodvpe0_AIC_CLLI',
+ 'vnf_name': 'mtnj309me6vre',
+ 'vmxvpfe_sriov41_0_port_unknownunicastallow': 'true',
+ 'vmxvre_volume_type_1': 'HITACHI',
+ 'vmxvpfe_sriov44_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_type_0': 'HITACHI',
+ 'vmxvpfe_volume_type_0': 'HITACHI',
+ 'vmxvpfe_sriov43_0_port_broadcastallow': 'true',
+ 'bandwidth_units': 'get_input:adiodvpe0_bandwidth_units',
+ 'vnf_id': '123',
+ 'vmxvre_oam_prefix': '24',
+ 'availability_zone_0': 'mtpocfo-kvm-az01',
+ 'ASN': 'get_input:2017488_adiodvpe0_ASN',
+ 'vmxvre_chassis_i2cid': '161',
+ 'vmxvpfe_name_0': 'vPFEXI',
+ 'bandwidth': 'get_input:adiodvpe0_bandwidth',
+ 'availability_zone_max_count': '1',
+ 'vmxvre_volume_size_0': '45.0',
+ 'vmxvre_volume_size_1': '50.0',
+ 'vmxvpfe_sriov42_0_port_broadcastallow': 'true',
+ 'vmxvre_oam_gateway': '10.40.123.1',
+ 'vmxvre_volume_name_1': 'vREXI_FAVolume',
+ 'vmxvre_ore_present': '0',
+ 'vmxvre_volume_name_0': 'vREXI_FBVolume',
+ 'vmxvre_type': '0',
+ 'vnf_instance_name': 'get_input:2017488_adiodvpe0_vnf_instance_name',
+ 'vmxvpfe_sriov41_0_port_unknownmulticastallow': 'true',
+ 'oam_net_id': 'b95eeb1d-d55d-4827-abb4-8ebb94941429',
+ 'vmx_int_ctl_len': '24',
+ 'vmxvpfe_sriov43_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov41_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_id_1': '6e86797e-03cd-4fdc-ba72-2957119c746d',
+ 'vmxvpfe_sriov41_0_port_vlanfilter': '4001',
+ 'nf_role': 'Testing',
+ 'vmxvre_volume_id_0': 'f4eacb79-f687-4e9d-b760-21847c8bb15a',
+ 'vmxvpfe_sriov42_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_flavor_name': 'ns.c20r16d25.v5'
+ },
+ 'type': 'VF',
+ 'modelCustomizationName': '2017488_ADIODvPE 0',
+ 'vfModules': {
+ '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1': {
+ 'uuid': '25284168-24bb-4698-8cb4-3f509146eca5',
+ 'invariantUuid': '7253ff5c-97f0-4b8b-937c-77aeb4d79aa1',
+ 'customizationUuid': 'f7e7c365-60cf-49a9-9ebf-a1aa11b9d401',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+ 'version': '6',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': true,
+ 'inputs': {
+ '2017488_adiodvpe0_vnf_config_template_version': {
+ 'type': 'string',
+ 'description': 'VPE Software Version',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '17.2'
+ },
+ '2017488_adiodvpe0_AIC_CLLI': {
+ 'type': 'string',
+ 'description': 'AIC Site CLLI',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'ATLMY8GA'
+ }
+ }
+ },
+ '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0': {
+ 'uuid': 'f8360508-3f17-4414-a2ed-6bc71161e8db',
+ 'invariantUuid': 'b34833bb-6aa9-4ad6-a831-70b06367a091',
+ 'customizationUuid': 'a55961b2-2065-4ab0-a5b7-2fcee1c227e3',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_base_vPE_BV..module-0',
+ 'version': '5',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_base_vPE_BV..module-0',
+ 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
+ 'commands': {},
+ 'volumeGroupAllowed': false,
+ 'inputs': {
+ '2017488_adiodvpe0_ASN': {
+ 'type': 'string',
+ 'description': 'AV/PE',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'AV_vPE'
+ },
+ 'adiodvpe0_bandwidth': {
+ 'type': 'string',
+ 'description': 'Requested VPE bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '10'
+ }
+ }
+ },
+ '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2': {
+ 'uuid': '0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a',
+ 'invariantUuid': 'eff8cc59-53a1-4101-aed7-8cf24ecf8339',
+ 'customizationUuid': '3cd946bb-50e0-40d8-96d3-c9023520b557',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+ 'version': '6',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': true,
+ 'inputs': {}
+ }
+ },
+ 'volumeGroups': {
+ '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1': {
+ 'uuid': '25284168-24bb-4698-8cb4-3f509146eca5',
+ 'invariantUuid': '7253ff5c-97f0-4b8b-937c-77aeb4d79aa1',
+ 'customizationUuid': 'f7e7c365-60cf-49a9-9ebf-a1aa11b9d401',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+ 'version': '6',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0}
+ },
+ '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2': {
+ 'uuid': '0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a',
+ 'invariantUuid': 'eff8cc59-53a1-4101-aed7-8cf24ecf8339',
+ 'customizationUuid': '3cd946bb-50e0-40d8-96d3-c9023520b557',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+ 'version': '6',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0}
+ }
+ }
+ }
+ },
+ 'vfModules': {
+ '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1': {
+ 'uuid': '25284168-24bb-4698-8cb4-3f509146eca5',
+ 'invariantUuid': '7253ff5c-97f0-4b8b-937c-77aeb4d79aa1',
+ 'customizationUuid': 'f7e7c365-60cf-49a9-9ebf-a1aa11b9d401',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+ 'version': '6',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': true
+ },
+ '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0': {
+ 'uuid': 'f8360508-3f17-4414-a2ed-6bc71161e8db',
+ 'invariantUuid': 'b34833bb-6aa9-4ad6-a831-70b06367a091',
+ 'customizationUuid': 'a55961b2-2065-4ab0-a5b7-2fcee1c227e3',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_base_vPE_BV..module-0',
+ 'version': '5',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_base_vPE_BV..module-0',
+ 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
+ 'commands': {},
+ 'volumeGroupAllowed': false
+ },
+ '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2': {
+ 'uuid': '0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a',
+ 'invariantUuid': 'eff8cc59-53a1-4101-aed7-8cf24ecf8339',
+ 'customizationUuid': '3cd946bb-50e0-40d8-96d3-c9023520b557',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+ 'version': '6',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': true
+ }
+ },
+ 'networks': {},
+ 'collectionResource': {},
+ 'configurations': {},
+ 'serviceProxies': {},
+ 'pnfs': {}
+ }
+ ))
+ }
+
+});
diff --git a/vid-webpack-master/src/app/configuration/vid.configuration.ts b/vid-webpack-master/src/app/configuration/vid.configuration.ts
new file mode 100644
index 000000000..2430d3ba5
--- /dev/null
+++ b/vid-webpack-master/src/app/configuration/vid.configuration.ts
@@ -0,0 +1,98 @@
+export class VidConfiguration {
+
+ public static VNF_STATUS_CHECK_ENABLED = false;
+
+ /*
+ * UPLOAD_SUPPLEMENTARY_STATUS_CHECK_ENABLED: Determines the Property to Govern Presence of
+ * Upload Supplementary File on Volume Group Screen.
+ * Set to false, to disable the check.
+ */
+ public static UPLOAD_SUPPLEMENTARY_STATUS_CHECK_ENABLED = false;
+
+ /*
+ * List of valid VNF status combinations
+ */
+ public static VNF_VALID_STATUS_LIST = [
+ {
+ 'provStatus': 'preprov',
+ 'orchestrationStatus': 'pending-create',
+ 'inMaint': false,
+ 'operationalStatus': null
+ },
+ {
+ 'provStatus': 'preprov',
+ 'orchestrationStatus': 'created',
+ 'inMaint': false,
+ 'operationalStatus': null
+ },
+ {
+ 'provStatus': 'preprov',
+ 'orchestrationStatus': 'active',
+ 'inMaint': false,
+ 'operationalStatus': null
+ },
+ {
+ 'provStatus': 'nvtprov',
+ 'orchestrationStatus': 'active',
+ 'inMaint': false,
+ 'operationalStatus': null
+ },
+ {
+ 'provStatus': 'prov',
+ 'orchestrationStatus': 'active',
+ 'inMaint': false,
+ 'operationalStatus': 'out-of-service-path'
+ },
+ {
+ 'provStatus': 'prov',
+ 'orchestrationStatus': 'activated',
+ 'inMaint': false,
+ 'operationalStatus': 'out-of-service-path'
+ }
+ ];
+
+ /*
+ * The model status VID uses to query SDC for a list of models. The possible values are:
+ * DISTRIBUTION_NOT_APPROVED,
+ * DISTRIBUTION_APPROVED,
+ * DISTRIBUTED,
+ * DISTRIBUTION_REJECTED,
+ * ALL,
+ * In the production env, this should always be set to DISTRIBUTED
+ */
+ public static ASDC_MODEL_STATUS = 'DISTRIBUTED';
+
+ /*
+ * Max number of times that VID will poll MSO for a given request status
+ */
+ public static MSO_MAX_POLLS = 10;
+
+ /*
+ * Number of msecs that VID will wait between MSO polls.
+ */
+ public static MSO_POLLING_INTERVAL_MSECS = 10000;
+
+ public static SCHEDULER_POLLING_INTERVAL_MSECS = 10000;
+
+ public static SCHEDULER_MAX_POLLS = 10;
+
+ public static COMPONENT_LIST_NAMED_QUERY_ID = '0367193e-c785-4d5f-9cb8-7bc89dc9ddb7';
+
+ /*
+ * List of all service model invariant UUIDs that need macro instantiation.
+ * Example:
+ * MACRO_SERVICES : ['3cf30cbb-5fe7-4fb3-b049-559a4997b221', 'b135a703-bab5-4295-a37f-580a4f2d0961']
+ *
+ */
+ public static MACRO_SERVICES = ['c9514b73-3dfe-4d7e-9146-b318d48655d9', '93150ffa-00c6-4ea0-85f2-3536ca46ebd2',
+ '2b54297f-72e7-4a94-b451-72df88d0be0b',
+ 'd27e42cf-087e-4d31-88ac-6c4b7585f800',
+ 'ec0c4bab-c272-4dab-b087-875031bb0c9f', '0311f998-9268-4fd6-bbba-afff15087b72',
+ '43596836-ae36-4608-a987-6608ede10dac', '306caa85-74c7-48a9-aa22-7e3a564b957a',
+ 'e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0'];
+
+ public static SCHEDULER_CALLBACK_URL = 'https://vid-web-ete.ecomp.cci.att.com:8000/vid/change-management/workflow/';
+
+ public static SCHEDULER_PORTAL_URL = 'http://www.ecomp.att.com';
+
+}
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.html b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.html
new file mode 100644
index 000000000..5eb977325
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.html
@@ -0,0 +1,35 @@
+<div class="available-models-tree">
+ <h5>
+ <span>SERVICE MODEL:</span>
+ <span id="service-model-name">{{service | serviceInfo: _store: serviceModelId : 'name'}}</span>
+ </h5>
+ <div class="available-models-content-wrapper">
+ <div class="search-container">
+ <input [attr.data-tests-id]="'search-left-tree'" #filter (keyup)="searchTree(filter.value, $event)" placeholder="Filter..."/>
+ <span class="icon-search"></span>
+ </div>
+
+ <tree-root #tree [attr.data-tests-id]="'available-models-tree'" [nodes]="nodes" [options]="options">
+ <ng-template #treeNodeTemplate let-node let-index="index">
+ <div [attr.data-tests-id]="'node-'+node.data.name" (click)="selectNode(node)" [ngClass]="{'selected': index , 'isParent': node.data.type !== 'VFmodule' , 'isChild': node.data.type === 'VFmodule' }">
+ <span class="vf-type">{{node.data.type.substring(0,1)}}</span>
+ <span class="span-name" [innerHTML]=" isFilterEnabled ? (node.data.name | highlight : filter.value) : (node.data.name)"></span>
+ <span class="actions">
+ <span class="number-button" *ngIf="isShowNodeCount(node)">
+ <span>{{getNodeCount(node)}}</span>
+ </span>
+ <span class="icon-v" *ngIf="isShowIconV(node)">
+ <span ></span>
+ </span>
+ <span class="icon-plus" *ngIf="isShowIconAdd(node)">
+ <span tooltip="Add" [attr.data-tests-id]="'node-'+node.data.name+'-add-btn'" (click)="onClickAdd($event,node)">
+ <i class="fa fa-plus-circle" aria-hidden="true"></i>
+ </span>
+ </span>
+ </span>
+ </div>
+ </ng-template>
+ </tree-root>
+
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.scss b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.scss
new file mode 100644
index 000000000..44f94109a
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.scss
@@ -0,0 +1,398 @@
+available-models-tree {
+ .available-models-tree {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ line-height: 14px;
+ border-right: #D2D2D2 1.5px solid;
+ min-width: 340px;
+ h5 {
+ font-family: OpenSans-Semibold;
+ color: #5A5A5A;
+ background-color: #F2F2F2;
+ margin: 0;
+ padding: 15px;
+ padding-left: 20px;
+ span {
+ vertical-align: middle;
+ &:first-child {
+ font-size: 12px;
+ color: #191919;
+ }
+ }
+ }
+ .available-models-content-wrapper {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ padding: 20px;
+ background-color: #F2F2F2;
+ .search-container {
+ margin-bottom: 30px;
+ width: 100%;
+ display: flex;
+ background: #FFFFFF;
+ border: 1px solid #D2D2D2;
+ border-radius: 2px;
+ height: 40px;
+ min-width: 40px;
+ font-family: OpenSans-Italic;
+ color: #959595;
+ input {
+ flex: 1;
+ border: 0;
+ padding-left: 10px;
+ outline: 0;
+ }
+ .icon-search {
+ display: flex;
+ width: 40px;
+ &:after {
+ content: "\e92e";
+ cursor: pointer;
+ font-size: 20px;
+ font-weight: 600;
+ text-align: center;
+ display: inline-block;
+ flex: auto;
+ align-self: center;
+ }
+ }
+ }
+ tree-root {
+ flex: 1;
+ display: flex;
+ }
+ tree-viewport {
+ flex: 1;
+ height: auto;
+ overflow: auto;
+ padding-top: 5px;
+ .tree-node {
+ color: #5A5A5A;
+ font-size: 13px;
+ white-space: normal;
+ word-break: break-all;
+ tree-node-drop-slot {
+ .node-drop-slot {
+ display: none;
+ }
+ }
+ &.tree-node-disabled {
+ color: #D2D2D2;
+ cursor: default;
+ pointer-events: none;
+ }
+ &:not(.tree-node-disabled) {
+ >tree-node-wrapper {
+ .node-wrapper:hover {
+ color: #009FDB;
+ .node-content-wrapper {
+ tree-node-content {
+ > div {
+ span.actions {
+ .number-button {
+ span {
+ //background-color: #009FDB;
+ }
+ }
+ .icon-plus span:before {
+ display: inline-block;
+ color: #5A5A5A;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ &.tree-node-focused:not(.tree-node-disabled) {
+ & > tree-node-wrapper {
+ .node-wrapper {
+ color: #009FDB;
+ .node-content-wrapper-focused,
+ .node-content-wrapper:hover {
+ background: none;
+ box-shadow: none;
+ tree-node-content {
+ > div {
+ span.actions {
+ .number-button {
+ span {
+ //background-color: #009FDB;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ tree-node-wrapper {
+ .node-wrapper {
+ height: 36px;
+ tree-node-expander {
+ font-family: 'icomoon' !important;
+ height: 100%;
+ .toggle-children-wrapper {
+ padding: 0;
+ display: block;
+ height: 100%;
+ span.toggle-children {
+ display: flex;
+ width: 20px;
+ top: 0;
+ height: inherit;
+ background-image: none;
+ &:before {
+ content: "\e900";
+ font-weight: 600;
+ text-align: center;
+ display: inline-block;
+ flex: auto;
+ align-self: center;
+ font-size: 20px;
+ }
+ }
+ }
+ .toggle-children-wrapper-expanded {
+ span.toggle-children {
+ transform: none;
+ &:before {
+ content: "\e930";
+ }
+ }
+ }
+ .toggle-children-placeholder {
+ width: 20px;
+ }
+ }
+ .node-content-wrapper {
+ padding: 0;
+ background: none;
+ box-shadow: none;
+ height: 100%;
+ flex: 1;
+ min-width: 0;
+ border-left: 1px solid #D2D2D2;
+ tree-node-content {
+ > div {
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding-left: 10px;
+ span {
+ &.actions {
+ height: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ >span {
+ width: 45px;
+ max-width: 45px;
+ text-align: center;
+ }
+ .number-button {
+ width: 30px;
+ padding-left: 0;
+ text-align: center;
+ span {
+ display: block;
+ font-size: 11px;
+ }
+ }
+ .icon-v {
+ width: 45px;
+ span:before {
+ content: "\e932";
+ color: #5A5A5A;
+ font-size: 16px;
+ text-align: center;
+ display: inline-block;
+ vertical-align: baseline;
+ }
+ }
+ .icon-plus {
+ width: 45px;
+ span {
+ &:before {
+ //content: "\e901";
+ //fill:#009FDB;
+ //color: #009FDB;
+ //font-size: 16px;
+ //text-align: center;
+ //display: none;
+ //vertical-align: baseline;
+ }
+ &:hover:before {
+ //color: #009FDB !important;
+
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+ tree-node-children {
+ .tree-children {
+ padding-left: 20px;
+ }
+ }
+ }
+ }
+
+ }
+ }
+}
+.highlight {
+ background-color: #9DD9EF;
+}
+
+#drawing-board-tree{
+ .tree-node.tree-node-expanded.tree-node-focused {
+ border: 1px solid #009FDB;
+ }
+
+}
+
+available-models-tree {
+
+ .tree-root {
+ margin-top: 35px;
+ }
+
+ tree-node-expander {
+ background: #FFFFFF;
+ border: 1px solid #D2D2D2;
+ border-right: none;
+ width: 45px;
+ padding-left: 12px;
+ }
+
+ .node-content-wrapper {
+ border: none;
+ }
+
+ tree-node-wrapper tree-node-expander{
+ background: none !important;
+ border: none !important;
+ }
+
+ tree-node-content div {
+ background: white;
+ }
+
+ .node-wrapper {
+ height: 45px !important;
+ background: #FFFFFF;
+ border: 1px solid #D2D2D2;
+ }
+
+ tree-node-collection div {
+ margin-top: 0px;
+ }
+
+ .tree-node-leaf .node-wrapper tree-node-expander {
+ display: none;
+ }
+
+ .tree-children {
+ padding: 20px;
+ }
+
+ .tree-node.tree-node-expanded.tree-node-focused {
+ border: 1px solid #009FDB;
+ }
+
+ .tree-node.tree-node-expanded {
+ border: 1px solid rgba(128, 128, 128, 0.72);
+ margin-bottom: 10px;
+ }
+
+ .tree-children {
+ padding-left: 0;
+ }
+
+ tree-node-content .actions .number-button {
+ height: 45px;
+ padding-top: 14px;
+ border: 1px solid #D2D2D2;
+ padding-left: 0;
+ span {
+ background: none;
+ font-size: 11px;
+ color: #5A5A5A;
+ }
+ }
+
+
+
+ .node-content-wrapper.node-content-wrapper-focused tree-node-content div{
+ background: #009FDB !important;
+ color: white;
+
+ .isParent {
+ border-left: 1px solid #009FDB;
+ }
+
+ .number-button span{
+ color: white !important;
+ }
+
+ .icon-v span:before{
+ color: white !important;
+ }
+ }
+
+ .vf-type {
+ width: 20px;
+ height: 45px;
+ padding-top: 16px;
+ border-right: 1px solid #D2D2D2;
+
+ }
+
+ .isParent {
+ width: 100%;
+ padding-left: 5px;
+ }
+
+ .tree-node-expanded .isChild .vf-type {
+ display: none;
+ }
+
+ .isParent .span-name {
+ width: 100%;
+ padding-left: 10px;
+ }
+
+ .toggle-children-wrapper.toggle-children-wrapper-expanded {
+ .toggle-children:before {
+ color: #009FDB;
+ }
+ }
+
+ .tree-node.tree-node-expanded .tree-children {
+ border: 1px solid rgba(128, 128, 128, 0.72);
+ }
+
+ .tree-node.tree-node-expanded.tree-node-focused .tree-children {
+ border: 1px solid #009fdb;
+ }
+
+ .tree-node-leaf .node-wrapper{
+ margin-left: 45px;
+ border-left: none;
+ }
+}
+
+
+
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.ts b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.ts
new file mode 100644
index 000000000..4e5819e4c
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.ts
@@ -0,0 +1,166 @@
+import {Component, EventEmitter, Output, ViewChild} from '@angular/core';
+import {ITreeOptions, TreeComponent} from 'angular-tree-component';
+import '../../../../node_modules/angular-tree-component/dist/angular-tree-component.css';
+import {IDType, ITreeNode} from 'angular-tree-component/dist/defs/api';
+import {DialogService} from 'ng2-bootstrap-modal';
+import {AvailableModelsTreeService} from './available-models-tree.service';
+import {NgRedux} from "@angular-redux/store";
+import {ActivatedRoute} from '@angular/router';
+import {AppState} from '../../store/reducers';
+import {AaiService} from '../../services/aaiService/aai.service';
+import {ServicePlanningService} from '../../services/service-planning.service';
+import {VnfPopupComponent} from '../../components/vnf-popup/vnf-popup.components';
+import {ServiceNodeTypes} from '../../shared/models/ServiceNodeTypes';
+import {VfModuleMap} from '../../shared/models/vfModulesMap';
+import {IframeService} from "../../shared/utils/iframe.service";
+import {createVFModuleInstance} from "../../service.actions";
+import {DefaultDataGeneratorService} from "../../shared/services/defaultDataServiceGenerator/default.data.generator.service";
+
+
+@Component({
+ selector: 'available-models-tree',
+ templateUrl: './available-models-tree.component.html',
+ styleUrls: ['./available-models-tree.component.scss']
+})
+
+
+export class AvailableModelsTreeComponent{
+
+ serviceModelId: string;
+ serviceHierarchy;
+ parentElementClassName = 'content';
+ _store : NgRedux<AppState>;
+ constructor(private _servicePlanningService: ServicePlanningService,
+ private _iframeService: IframeService,
+ private _aaiService: AaiService,
+ private route: ActivatedRoute,
+ private dialogService: DialogService,
+ private _availableModelsTreeService: AvailableModelsTreeService,
+ private _defaultDataGeneratorService: DefaultDataGeneratorService,
+ private store: NgRedux<AppState>) {
+ this._store = store;
+ this.route
+ .queryParams
+ .subscribe(params => {
+ this.serviceModelId = params['serviceModelId'];
+ this._aaiService.getServiceModelById(this.serviceModelId).subscribe(
+ value => {
+ this.serviceHierarchy = value;
+ this.nodes = this._servicePlanningService.convertServiceModelToTreeNodes(this.serviceHierarchy);
+ },
+ error => {
+ console.log('error is ', error)
+ }
+ );
+ });
+
+ }
+
+ @Output()
+ highlightInstances: EventEmitter<number> = new EventEmitter<number>();
+ @ViewChild('tree') tree: TreeComponent;
+
+ nodes = [];
+ service = {name: ''};
+ isFilterEnabled: boolean = false;
+
+ options: ITreeOptions = {
+ nodeHeight: 36,
+ dropSlotHeight: 0,
+ nodeClass: (node: ITreeNode) => {
+ if(node.data.type === ServiceNodeTypes.VFmodule && !this.getNodeCount(node.parent))
+ {
+ node.data.disabled = true;
+ return 'tree-node tree-node-disabled';
+ }
+ node.data.disabled = false;
+ return 'tree-node';
+ }
+ };
+
+ expandParentByNodeId(id: IDType): void {
+ this.tree.treeModel.getNodeById(id).parent.expand();
+ }
+
+ searchTree(searchText: string, event: KeyboardEvent): void {
+ if (searchText === '') {
+ return;
+ }
+ this.isFilterEnabled = event.key === 'Delete' || event.key === 'Backspace' || searchText.length > 1;
+ if (this.isFilterEnabled) {
+ let __this = this;
+ let results: ITreeNode[] = [];
+ this.nodes.forEach(function (node) {
+ __this.searchTreeNode(node, searchText, results);
+ });
+ results.forEach(function (result) {
+ __this.expandParentByNodeId(result.id)
+ });
+ }
+ }
+
+ searchTreeNode(node, searchText: string, results): void {
+ if (node.name.toLowerCase().indexOf(searchText.toLowerCase()) != -1) {
+ results.push(node);
+ }
+ if (node.children != null) {
+ for (let i = 0; i < node.children.length; i++) {
+ this.searchTreeNode(node.children[i], searchText, results);
+ }
+ }
+ }
+
+ selectNode(node: ITreeNode): void {
+ node.expand();
+ this.highlightInstances.emit(node.data.id);
+ }
+
+ onClickAdd(e: MouseEvent, node: ITreeNode): void {
+ let data = node.data;
+ let dynamicInputs = data.dynamicInputs;
+ let userProvidedNaming:boolean = data.userProvidedNaming;
+ let type:string = data.type;
+ if(!this.store.getState().global.flags['FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD']|| node.data.type === ServiceNodeTypes.VF || this._availableModelsTreeService.shouldOpenDialog(type, dynamicInputs, userProvidedNaming)) {
+ this._iframeService.addClassOpenModal(this.parentElementClassName);
+ this.dialogService.addDialog(VnfPopupComponent, {
+ serviceModelId: this.serviceModelId,
+ parentModelName: node.parent && node.parent.data.name,
+ modelName: data.name,
+ modelType: type,
+ dynamicInputs: dynamicInputs,
+ userProvidedNaming: userProvidedNaming,
+ isNewVfModule : true
+ });
+ }
+ else {
+ let vfModule = this._defaultDataGeneratorService.generateVFModule(this.serviceHierarchy, node.parent.data.name, node.data.name);
+ this.store.dispatch(createVFModuleInstance(vfModule, node.data.name, this.serviceModelId));
+ }
+ e.preventDefault();
+ e.stopPropagation();
+ }
+
+ getNodeCount(node: ITreeNode): number {
+ let modelName: string = node.data.name;
+ if (ServicePlanningService.isVfModule(node)) {
+ let parentVnfModelName = node.parent.data.name;
+ let vfModuleMap: VfModuleMap = this._servicePlanningService.getVfModuleMap(this.serviceModelId, parentVnfModelName, modelName);
+ return vfModuleMap ? Object.keys(vfModuleMap).length : 0;
+ } else if (ServicePlanningService.isVnf(node)) {
+ let vnfInstance = this._servicePlanningService.getVnfInstance(this.serviceModelId, modelName);
+ return vnfInstance ? 1 : 0;
+ }
+ }
+
+ isShowIconV(node: ITreeNode): boolean {
+ return this.getNodeCount(node) > 0;
+ }
+
+ isShowNodeCount(node: ITreeNode): boolean {
+ return this.getNodeCount(node) > 0;
+ }
+
+ isShowIconAdd(node: ITreeNode): boolean {
+ return this._availableModelsTreeService.shouldShowAddIcon(node, this.store.getState().service.serviceHierarchy, this.serviceModelId, this.getNodeCount(node));
+ }
+}
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.spec.ts
new file mode 100644
index 000000000..10cbb0d8f
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.spec.ts
@@ -0,0 +1,450 @@
+import {TestBed, getTestBed} from '@angular/core/testing';
+import {
+ HttpClientTestingModule,
+ HttpTestingController
+} from '@angular/common/http/testing';
+import {AvailableModelsTreeService} from './available-models-tree.service';
+import {ServicePlanningService} from "../../services/service-planning.service";
+import {ServiceNodeTypes} from "../../shared/models/ServiceNodeTypes";
+import {NgRedux} from "@angular-redux/store";
+import {MockAppStore} from "../../services/service-planning.service.spec";
+
+describe('Available Models Tree Service', () => {
+ let injector;
+ let service: AvailableModelsTreeService;
+ let httpMock: HttpTestingController;
+
+ beforeEach(() => {
+
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
+ providers: [AvailableModelsTreeService,
+ ServicePlanningService,
+ {provide: NgRedux, useClass: MockAppStore}]
+ });
+
+ injector = getTestBed();
+ service = injector.get(AvailableModelsTreeService);
+ httpMock = injector.get(HttpTestingController);
+ });
+
+ describe('#shouldShowAddIcon', () => {
+ it('should return true if number of current vnf modules is under the max', (done: DoneFn) => {
+ let treeNode = {
+ data: {
+ children: [],
+ name: 'vf_vmee0..VfVmee..base_vmme..module-0'
+ }
+ };
+
+ let serviceHierarchy = getSericeServiceHierarchy();
+ let result = service.shouldShowAddIcon(treeNode, serviceHierarchy, '6e59c5de-f052-46fa-aa7e-2fca9d674c44', 0);
+ expect(result).toBeTruthy();
+ done();
+ });
+
+ it('should return false if number of current vnf modules are more than max', (done: DoneFn) => {
+ let treeNode = {
+ data: {
+ children: [],
+ name: 'vf_vmee0..VfVmee..base_vmme..module-0'
+ }
+ };
+
+ let serviceHierarchy = getSericeServiceHierarchy();
+ let result = service.shouldShowAddIcon(treeNode, serviceHierarchy, '6e59c5de-f052-46fa-aa7e-2fca9d674c44', 2);
+ expect(result).toBeFalsy();
+ done();
+ });
+
+ it('should return true if number of current vnf modules are more than max and max is null', (done: DoneFn) => {
+ let treeNode = {
+ data: {
+ children: [],
+ name: 'vf_vmee0..VfVmee..base_vmme..module-0'
+ }
+ };
+
+ let serviceHierarchy = getSericeServiceHierarchy();
+ let result = service.shouldShowAddIcon(treeNode, serviceHierarchy, '6e59c5de-f052-46fa-aa7e-2fca9d674c44', 0);
+ expect(result).toBeTruthy();
+ done();
+ });
+ });
+
+ describe('#shouldOpenModalDialogOnAddInstance', () => {
+ let serviceHierarchy = getSericeServiceHierarchy();
+
+ it('should open popup on add instance', (done: DoneFn) => {
+ // add vnf should return true
+ let result = service.shouldOpenDialog(ServiceNodeTypes.VF, [], false);
+ expect(result).toBeTruthy();
+
+ // add vfModule with user provided naming should return true
+ result = service.shouldOpenDialog(ServiceNodeTypes.VFmodule, [], true);
+ expect(result).toBeTruthy();
+
+ // add vfModule with dynamicInputs without defaultValues should return true
+ result = service.shouldOpenDialog(ServiceNodeTypes.VFmodule, [{
+ id: '2017488_adiodvpe0_vnf_config_template_version',
+ type: 'string',
+ name: '2017488_adiodvpe0_vnf_config_template_version',
+ isRequired: true,
+ description: 'VPE Software Version'
+ }], false);
+ expect(result).toBeTruthy();
+
+ // add vfModule with dynamicInputs with defaultValues should return false
+ result = service.shouldOpenDialog(ServiceNodeTypes.VFmodule, [{
+ id: '2017488_adiodvpe0_vnf_config_template_version',
+ type: 'string',
+ name: '2017488_adiodvpe0_vnf_config_template_version',
+ value: '17.2',
+ isRequired: true,
+ description: 'VPE Software Version'
+ }], false);
+ expect(result).toBeFalsy();
+ done();
+ });
+ });
+
+ function getSericeServiceHierarchy() {
+ return JSON.parse(JSON.stringify(
+ {
+ '6e59c5de-f052-46fa-aa7e-2fca9d674c44': {
+ 'service': {
+ 'uuid': '6e59c5de-f052-46fa-aa7e-2fca9d674c44',
+ 'invariantUuid': 'e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0',
+ 'name': 'ComplexService',
+ 'version': '1.0',
+ 'toscaModelURL': null,
+ 'category': 'Mobility',
+ 'serviceType': '',
+ 'serviceRole': '',
+ 'description': 'ComplexService',
+ 'serviceEcompNaming': 'true',
+ 'instantiationType': 'Macro',
+ 'inputs': {}
+ },
+ 'vnfs': {
+ 'VF_vMee 0': {
+ 'uuid': 'd6557200-ecf2-4641-8094-5393ae3aae60',
+ 'invariantUuid': '4160458e-f648-4b30-a176-43881ffffe9e',
+ 'description': 'VSP_vMee',
+ 'name': 'VF_vMee',
+ 'version': '2.0',
+ 'customizationUuid': '91415b44-753d-494c-926a-456a9172bbb9',
+ 'inputs': {},
+ 'commands': {},
+ 'properties': {
+ 'gpb2_Internal2_mac': '00:80:37:0E:02:22',
+ 'sctp-b-ipv6-egress_src_start_port': '0',
+ 'sctp-a-ipv6-egress_rule_application': 'any',
+ 'Internal2_allow_transit': 'true',
+ 'sctp-b-IPv6_ethertype': 'IPv6',
+ 'sctp-a-egress_rule_application': 'any',
+ 'sctp-b-ingress_action': 'pass',
+ 'sctp-b-ingress_rule_protocol': 'icmp',
+ 'ncb2_Internal1_mac': '00:80:37:0E:0F:12',
+ 'sctp-b-ipv6-ingress-src_start_port': '0.0',
+ 'ncb1_Internal2_mac': '00:80:37:0E:09:12',
+ 'fsb_volume_size_0': '320.0',
+ 'sctp-b-egress_src_addresses': 'local',
+ 'sctp-a-ipv6-ingress_ethertype': 'IPv4',
+ 'sctp-a-ipv6-ingress-dst_start_port': '0',
+ 'sctp-b-ipv6-ingress_rule_application': 'any',
+ 'domain_name': 'default-domain',
+ 'sctp-a-ingress_rule_protocol': 'icmp',
+ 'sctp-b-egress-src_start_port': '0.0',
+ 'sctp-a-egress_src_addresses': 'local',
+ 'sctp-b-display_name': 'epc-sctp-b-ipv4v6-sec-group',
+ 'sctp-a-egress-src_start_port': '0.0',
+ 'sctp-a-ingress_ethertype': 'IPv4',
+ 'sctp-b-ipv6-ingress-dst_end_port': '65535',
+ 'sctp-b-dst_subnet_prefix_v6': '::',
+ 'nf_naming': '{ecomp_generated_naming=true}',
+ 'sctp-a-ipv6-ingress_src_subnet_prefix': '0.0.0.0',
+ 'sctp-b-egress-dst_start_port': '0.0',
+ 'ncb_flavor_name': 'nv.c20r64d1',
+ 'gpb1_Internal1_mac': '00:80:37:0E:01:22',
+ 'sctp-b-egress_dst_subnet_prefix_len': '0.0',
+ 'Internal2_net_cidr': '169.255.0.0',
+ 'sctp-a-ingress-dst_start_port': '0.0',
+ 'sctp-a-egress-dst_start_port': '0.0',
+ 'fsb1_Internal2_mac': '00:80:37:0E:0B:12',
+ 'sctp-a-egress_ethertype': 'IPv4',
+ 'vlc_st_service_mode': 'in-network-nat',
+ 'sctp-a-ipv6-egress_ethertype': 'IPv4',
+ 'sctp-a-egress-src_end_port': '65535.0',
+ 'sctp-b-ipv6-egress_rule_application': 'any',
+ 'sctp-b-egress_action': 'pass',
+ 'sctp-a-ingress-src_subnet_prefix_len': '0.0',
+ 'sctp-b-ipv6-ingress-src_end_port': '65535.0',
+ 'sctp-b-name': 'epc-sctp-b-ipv4v6-sec-group',
+ 'fsb2_Internal1_mac': '00:80:37:0E:0D:12',
+ 'sctp-a-ipv6-ingress-src_start_port': '0.0',
+ 'sctp-b-ipv6-egress_ethertype': 'IPv4',
+ 'Internal1_net_cidr': '169.253.0.0',
+ 'sctp-a-egress_dst_subnet_prefix': '0.0.0.0',
+ 'fsb_flavor_name': 'nv.c20r64d1',
+ 'sctp_rule_protocol': '132',
+ 'sctp-b-ipv6-ingress_src_subnet_prefix_len': '0',
+ 'sctp-a-ipv6-ingress_rule_application': 'any',
+ 'sctp-a-IPv6_ethertype': 'IPv6',
+ 'vlc2_Internal1_mac': '00:80:37:0E:02:12',
+ 'vlc_st_virtualization_type': 'virtual-machine',
+ 'sctp-b-ingress-dst_start_port': '0.0',
+ 'sctp-b-ingress-dst_end_port': '65535.0',
+ 'sctp-a-ipv6-ingress-src_end_port': '65535.0',
+ 'sctp-a-display_name': 'epc-sctp-a-ipv4v6-sec-group',
+ 'sctp-b-ingress_rule_application': 'any',
+ 'int2_sec_group_name': 'int2-sec-group',
+ 'vlc_flavor_name': 'nd.c16r64d1',
+ 'sctp-b-ipv6-egress_src_addresses': 'local',
+ 'vlc_st_interface_type_int1': 'other1',
+ 'sctp-b-egress-src_end_port': '65535.0',
+ 'sctp-a-ipv6-egress-dst_start_port': '0',
+ 'vlc_st_interface_type_int2': 'other2',
+ 'sctp-a-ipv6-egress_rule_protocol': 'any',
+ 'Internal2_shared': 'false',
+ 'sctp-a-ipv6-egress_dst_subnet_prefix_len': '0',
+ 'Internal2_rpf': 'disable',
+ 'vlc1_Internal1_mac': '00:80:37:0E:01:12',
+ 'sctp-b-ipv6-egress_src_end_port': '65535',
+ 'sctp-a-ipv6-egress_src_addresses': 'local',
+ 'sctp-a-ingress-dst_end_port': '65535.0',
+ 'sctp-a-ipv6-egress_src_end_port': '65535',
+ 'Internal1_forwarding_mode': 'l2',
+ 'Internal2_dhcp': 'false',
+ 'sctp-a-dst_subnet_prefix_v6': '::',
+ 'pxe_image_name': 'MME_PXE-Boot_16ACP04_GA.qcow2',
+ 'vlc_st_interface_type_gtp': 'other0',
+ 'ncb1_Internal1_mac': '00:80:37:0E:09:12',
+ 'sctp-b-src_subnet_prefix_v6': '::',
+ 'sctp-a-egress_dst_subnet_prefix_len': '0.0',
+ 'int1_sec_group_name': 'int1-sec-group',
+ 'Internal1_dhcp': 'false',
+ 'sctp-a-ipv6-egress_dst_end_port': '65535',
+ 'Internal2_forwarding_mode': 'l2',
+ 'fsb2_Internal2_mac': '00:80:37:0E:0D:12',
+ 'sctp-b-egress_dst_subnet_prefix': '0.0.0.0',
+ 'Internal1_net_cidr_len': '17',
+ 'gpb2_Internal1_mac': '00:80:37:0E:02:22',
+ 'sctp-b-ingress-src_subnet_prefix_len': '0.0',
+ 'sctp-a-ingress_dst_addresses': 'local',
+ 'sctp-a-egress_action': 'pass',
+ 'fsb_volume_type_0': 'SF-Default-SSD',
+ 'ncb2_Internal2_mac': '00:80:37:0E:0F:12',
+ 'vlc_st_interface_type_sctp_a': 'left',
+ 'vlc_st_interface_type_sctp_b': 'right',
+ 'sctp-a-src_subnet_prefix_v6': '::',
+ 'vlc_st_version': '2',
+ 'sctp-b-egress_ethertype': 'IPv4',
+ 'sctp-a-ingress_rule_application': 'any',
+ 'gpb1_Internal2_mac': '00:80:37:0E:01:22',
+ 'instance_ip_family_v6': 'v6',
+ 'sctp-a-ipv6-egress_src_start_port': '0',
+ 'sctp-b-ingress-src_start_port': '0.0',
+ 'sctp-b-ingress_dst_addresses': 'local',
+ 'fsb1_Internal1_mac': '00:80:37:0E:0B:12',
+ 'vlc_st_interface_type_oam': 'management',
+ 'multi_stage_design': 'false',
+ 'oam_sec_group_name': 'oam-sec-group',
+ 'Internal2_net_gateway': '169.255.0.3',
+ 'sctp-a-ipv6-ingress-dst_end_port': '65535',
+ 'sctp-b-ipv6-egress-dst_start_port': '0',
+ 'Internal1_net_gateway': '169.253.0.3',
+ 'sctp-b-ipv6-egress_rule_protocol': 'any',
+ 'gtp_sec_group_name': 'gtp-sec-group',
+ 'sctp-a-ipv6-egress_dst_subnet_prefix': '0.0.0.0',
+ 'sctp-b-ipv6-egress_dst_subnet_prefix_len': '0',
+ 'sctp-a-ipv6-ingress_dst_addresses': 'local',
+ 'sctp-a-egress_rule_protocol': 'icmp',
+ 'sctp-b-ipv6-egress_action': 'pass',
+ 'sctp-a-ipv6-egress_action': 'pass',
+ 'Internal1_shared': 'false',
+ 'sctp-b-ipv6-ingress_rule_protocol': 'any',
+ 'Internal2_net_cidr_len': '17',
+ 'sctp-a-name': 'epc-sctp-a-ipv4v6-sec-group',
+ 'sctp-a-ingress-src_end_port': '65535.0',
+ 'sctp-b-ipv6-ingress_src_subnet_prefix': '0.0.0.0',
+ 'sctp-a-egress-dst_end_port': '65535.0',
+ 'sctp-a-ingress_action': 'pass',
+ 'sctp-b-egress_rule_protocol': 'icmp',
+ 'sctp-b-ipv6-ingress_action': 'pass',
+ 'vlc_st_service_type': 'firewall',
+ 'sctp-b-ipv6-egress_dst_end_port': '65535',
+ 'sctp-b-ipv6-ingress-dst_start_port': '0',
+ 'vlc2_Internal2_mac': '00:80:37:0E:02:12',
+ 'vlc_st_availability_zone': 'true',
+ 'fsb_volume_image_name_1': 'MME_FSB2_16ACP04_GA.qcow2',
+ 'sctp-b-ingress-src_subnet_prefix': '0.0.0.0',
+ 'sctp-a-ipv6-ingress_src_subnet_prefix_len': '0',
+ 'Internal1_allow_transit': 'true',
+ 'gpb_flavor_name': 'nv.c20r64d1',
+ 'availability_zone_max_count': '1',
+ 'fsb_volume_image_name_0': 'MME_FSB1_16ACP04_GA.qcow2',
+ 'sctp-b-ipv6-ingress_dst_addresses': 'local',
+ 'sctp-b-ipv6-egress_dst_subnet_prefix': '0.0.0.0',
+ 'sctp-b-ipv6-ingress_ethertype': 'IPv4',
+ 'vlc1_Internal2_mac': '00:80:37:0E:01:12',
+ 'sctp-a-ingress-src_subnet_prefix': '0.0.0.0',
+ 'sctp-a-ipv6-ingress_action': 'pass',
+ 'Internal1_rpf': 'disable',
+ 'sctp-b-ingress_ethertype': 'IPv4',
+ 'sctp-b-egress_rule_application': 'any',
+ 'sctp-b-ingress-src_end_port': '65535.0',
+ 'sctp-a-ipv6-ingress_rule_protocol': 'any',
+ 'sctp-a-ingress-src_start_port': '0.0',
+ 'sctp-b-egress-dst_end_port': '65535.0'
+ },
+ 'type': 'VF',
+ 'modelCustomizationName': 'VF_vMee 0',
+ 'vfModules': {
+ 'vf_vmee0..VfVmee..vmme_vlc..module-1': {
+ 'uuid': '522159d5-d6e0-4c2a-aa44-5a542a12a830',
+ 'invariantUuid': '98a7c88b-b577-476a-90e4-e25a5871e02b',
+ 'customizationUuid': '55b1be94-671a-403e-a26c-667e9c47d091',
+ 'description': null,
+ 'name': 'VfVmee..vmme_vlc..module-1',
+ 'version': '2',
+ 'modelCustomizationName': 'VfVmee..vmme_vlc..module-1',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': false
+ },
+ 'vf_vmee0..VfVmee..vmme_gpb..module-2': {
+ 'uuid': '41708296-e443-4c71-953f-d9a010f059e1',
+ 'invariantUuid': '1cca90b8-3490-495e-87da-3f3e4c57d5b9',
+ 'customizationUuid': '6add59e0-7fe1-4bc4-af48-f8812422ae7c',
+ 'description': null,
+ 'name': 'VfVmee..vmme_gpb..module-2',
+ 'version': '2',
+ 'modelCustomizationName': 'VfVmee..vmme_gpb..module-2',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': false
+ },
+ 'vf_vmee0..VfVmee..base_vmme..module-0': {
+ 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
+ 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
+ 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
+ 'description': null,
+ 'name': 'VfVmee..base_vmme..module-0',
+ 'version': '2',
+ 'modelCustomizationName': 'VfVmee..base_vmme..module-0',
+ 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
+ 'commands': {},
+ 'volumeGroupAllowed': true
+ }
+ },
+ 'volumeGroups': {
+ 'vf_vmee0..VfVmee..base_vmme..module-0': {
+ 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
+ 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
+ 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
+ 'description': null,
+ 'name': 'VfVmee..base_vmme..module-0',
+ 'version': '2',
+ 'modelCustomizationName': 'VfVmee..base_vmme..module-0',
+ 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}
+ }
+ }
+ }
+ },
+ 'networks': {
+ 'ExtVL 0': {
+ 'uuid': 'ddc3f20c-08b5-40fd-af72-c6d14636b986',
+ 'invariantUuid': '379f816b-a7aa-422f-be30-17114ff50b7c',
+ 'description': 'ECOMP generic virtual link (network) base type for all other service-level and global networks',
+ 'name': 'ExtVL',
+ 'version': '37.0',
+ 'customizationUuid': '94fdd893-4a36-4d70-b16a-ec29c54c184f',
+ 'inputs': {},
+ 'commands': {},
+ 'properties': {
+ 'network_assignments': '{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}',
+ 'exVL_naming': '{ecomp_generated_naming=true}',
+ 'network_flows': '{is_network_policy=false, is_bound_to_vpn=false}',
+ 'network_homing': '{ecomp_selected_instance_node_target=false}'
+ },
+ 'type': 'VL',
+ 'modelCustomizationName': 'ExtVL 0'
+ }
+ },
+ 'configurations': {
+ 'Port Mirroring Configuration By Policy 0': {
+ 'uuid': 'b4398538-e89d-4f13-b33d-ca323434ba50',
+ 'invariantUuid': '6ef0ca40-f366-4897-951f-abd65d25f6f7',
+ 'description': 'A port mirroring configuration by policy object',
+ 'name': 'Port Mirroring Configuration By Policy',
+ 'version': '27.0',
+ 'customizationUuid': '3c3b7b8d-8669-4b3b-8664-61970041fad2',
+ 'inputs': {},
+ 'commands': {},
+ 'properties': {},
+ 'type': 'Configuration',
+ 'modelCustomizationName': 'Port Mirroring Configuration By Policy 0',
+ 'sourceNodes': [],
+ 'collectorNodes': null,
+ 'configurationByPolicy': false
+ }
+ },
+ 'serviceProxies': {},
+ 'vfModules': {
+ 'vf_vmee0..VfVmee..vmme_vlc..module-1': {
+ 'uuid': '522159d5-d6e0-4c2a-aa44-5a542a12a830',
+ 'invariantUuid': '98a7c88b-b577-476a-90e4-e25a5871e02b',
+ 'customizationUuid': '55b1be94-671a-403e-a26c-667e9c47d091',
+ 'description': null,
+ 'name': 'VfVmee..vmme_vlc..module-1',
+ 'version': '2',
+ 'modelCustomizationName': 'VfVmee..vmme_vlc..module-1',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': false
+ },
+ 'vf_vmee0..VfVmee..vmme_gpb..module-2': {
+ 'uuid': '41708296-e443-4c71-953f-d9a010f059e1',
+ 'invariantUuid': '1cca90b8-3490-495e-87da-3f3e4c57d5b9',
+ 'customizationUuid': '6add59e0-7fe1-4bc4-af48-f8812422ae7c',
+ 'description': null,
+ 'name': 'VfVmee..vmme_gpb..module-2',
+ 'version': '2',
+ 'modelCustomizationName': 'VfVmee..vmme_gpb..module-2',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': false
+ },
+ 'vf_vmee0..VfVmee..base_vmme..module-0': {
+ 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
+ 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
+ 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
+ 'description': null,
+ 'name': 'VfVmee..base_vmme..module-0',
+ 'version': '2',
+ 'modelCustomizationName': 'VfVmee..base_vmme..module-0',
+ 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
+ 'commands': {},
+ 'volumeGroupAllowed': true
+ }
+ },
+ 'volumeGroups': {
+ 'vf_vmee0..VfVmee..base_vmme..module-0': {
+ 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
+ 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
+ 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
+ 'description': null,
+ 'name': 'VfVmee..base_vmme..module-0',
+ 'version': '2',
+ 'modelCustomizationName': 'VfVmee..base_vmme..module-0',
+ 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}
+ }
+ },
+ 'pnfs': {}
+ }
+ }
+ ));
+ }
+
+});
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts
new file mode 100644
index 000000000..57dc4b409
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts
@@ -0,0 +1,36 @@
+import {Injectable} from '@angular/core';
+import * as _ from "lodash";
+import {ServicePlanningService} from "../../services/service-planning.service";
+
+@Injectable()
+export class AvailableModelsTreeService {
+ constructor(private _servicePlanningService: ServicePlanningService) {
+ }
+
+ shouldShowAddIcon(node: any, serviceHierarchy: any, serviceModelId: string, currentNodeCount: number): boolean {
+ let maxNodes: number = 1;
+ if (node.data.children !== null && node.data.children.length == 0) {
+ let vnfModules = serviceHierarchy[serviceModelId].vfModules;
+ if (vnfModules[node.data.name]) {
+ maxNodes = vnfModules[node.data.name].properties.maxCountInstances || 1;
+ }
+ }
+ return !node.data.disabled && currentNodeCount < maxNodes
+ }
+
+ shouldOpenDialog(type: string, dynamicInputs: any, userProvidedNaming: boolean): boolean {
+ if (userProvidedNaming || this._servicePlanningService.requiredFields[type].length > 0) {
+ return true;
+ }
+
+ if (dynamicInputs) {
+ for(let input of dynamicInputs) {
+ if (input.isRequired && _.isEmpty(input.value)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.html b/vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.html
new file mode 100644
index 000000000..7d0f7f456
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.html
@@ -0,0 +1,33 @@
+<div class="drawing-board-header">
+ <div class="left-header">
+ <span [attr.data-tests-id]="'backBtn'" class="icon-back" (click)="closePage()"></span>
+ <span [attr.data-tests-id]="'serviceInstance'" class="service-instance-label">Service instance:</span>
+ <span [attr.data-tests-id]="'serviceName'" class="service-instance-name">{{serviceName}}</span>
+ <span class="quantity-container" style=" padding: 10px;font-size: 13px;" tooltip="Number of services to instantiate including all their objects as defined below">
+ <span [attr.data-tests-id]="'quantityLabel'" class="quantity-label" >Scale Times:</span>
+ <span [attr.data-tests-id]="'servicesQuantity'" class="quantity" style="font-family: OpenSans-Semibold;font-size: 14px;"> {{numServicesToDeploy}} </span>
+ </span>
+ <span class="service-instance-label">status:</span>
+ <span [attr.data-tests-id]="'serviceStatus'" class="status">{{status}}</span>
+ </div>
+ <div class="right-header">
+ <span class="menu-container">
+ <span [attr.data-tests-id]="'openMenuBtn'" class="icon-browse" (click)="onContextMenu($event)"></span>
+ <context-menu>
+ <ng-template contextMenuItem (execute)="editService()">
+ <div [attr.data-tests-id]="'context-menu-header-edit-item'">
+ <span class="icon-edit"></span>
+ Edit
+ </div>
+ </ng-template>
+ <ng-template contextMenuItem (execute)="closePage()">
+ <div [attr.data-tests-id]="'context-menu-header-delete-item'">
+ <span class="icon-trash"></span>
+ Delete
+ </div>
+ </ng-template>
+ </context-menu>
+ </span>
+ <button [disabled]="false" [attr.data-tests-id]="'deployBtn'" (click)="deployMacroservice()" class="deploy-btn">DEPLOY</button>
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.scss b/vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.scss
new file mode 100644
index 000000000..29b7711bc
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.scss
@@ -0,0 +1,95 @@
+.drawing-board-header {
+ height: 56px;
+ margin-bottom: 4px;
+ position: relative;
+ font-family: OpenSans-Regular;
+ display: flex;
+ justify-content: space-between;
+ font-size: 14px;
+ box-shadow: 2px 2px 6px #D2D2D2;
+ color: #191919;
+ [class^="icon-"] {
+ height: 56px;
+ width: 56px;
+ display: flex;
+ align-items: center;
+ text-align: center;
+ color: #5A5A5A;
+ cursor: pointer;
+ &:before {
+ font-size: 18px;
+ width: 100%;
+ }
+ &:hover:before {
+ color: #009FDB;
+ }
+ }
+ .left-header {
+ display: flex;
+ align-items: center;
+ .icon-back {
+ border-right: 1px solid #EAEAEA;
+ &:before {
+ content: "\e906";
+ font-size: 24px;
+ }
+ }
+ .service-instance-label {
+ padding: 0 5px;
+ font-family: OpenSans-Regular;
+ font-size: 13px;
+ color: #191919;
+ }
+ .service-instance-name {
+ padding-right: 20px;
+ color: #191919;
+ font-family: OpenSans-Semibold;
+ background-color: white;
+ font-size: 16px
+ }
+ .status {
+ font-family: OpenSans-Semibold;
+ line-height: 14px;
+ font-size: 14px;
+ }
+ }
+ .right-header {
+ display: flex;
+ align-items: center;
+ .quantity-container {
+ .quantity-label {
+ padding-left: 10px;
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ }
+ .quantity {
+ padding: 5px 10px 5px 0;
+ font-family: OpenSans-Semibold;
+ font-size: 18px;
+ }
+ }
+ [class^="icon-"] {
+ border-left: 1px solid #EAEAEA;
+ }
+ .menu-container {
+ height: 100%;
+ display: flex;
+ background: none;
+ border: none;
+ padding: 0;
+ outline: none;
+ }
+ .icon-browse:before {
+ content: '\e924';
+ display: inline-block;
+ font-size: 24px;
+ }
+ .deploy-btn {
+ color: #FFFFFF ;
+ background: #009fdb;
+ width: 128px;
+ height: 100%;
+ border: none;
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.ts b/vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.ts
new file mode 100644
index 000000000..38284e214
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/drawing-board-header/drawing-board-header.component.ts
@@ -0,0 +1,119 @@
+import {Component, ViewChild} from '@angular/core';
+import {ContextMenuComponent, ContextMenuService} from 'ngx-contextmenu';
+import {DialogService} from 'ng2-bootstrap-modal';
+import {ServicePopupComponent} from '../../components/service-popup/service-popup.component';
+import {MsoService} from '../../services/msoService/mso.service'
+import * as _ from 'lodash';
+import {ActivatedRoute} from '@angular/router';
+import {ServiceInstance} from "../../shared/models/serviceInstance";
+import {OwningEntity} from "../../shared/models/owningEntity";
+import {MessageBoxData, ModalSize, ModalType} from "../../shared/components/messageBox/messageBox.data";
+import {MessageBoxService} from "../../shared/components/messageBox/messageBox.service";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {IframeService} from "../../shared/utils/iframe.service";
+
+@Component({
+ selector: 'drawing-board-header',
+ providers: [MsoService],
+ templateUrl: './drawing-board-header.component.html',
+ styleUrls: ['./drawing-board-header.component.scss']
+})
+
+export class DrawingBoardHeader {
+ serviceName: string;
+ numServicesToDeploy: number;
+ status: string = 'Designing a new service';
+ serviceModelId: string;
+ parentElementClassName = 'content';
+
+ constructor(private _contextMenuService: ContextMenuService, private dialogService: DialogService,
+ private _iframeService : IframeService,
+ private route: ActivatedRoute, private msoService: MsoService,
+ private store: NgRedux<AppState>) {
+ this.route
+ .queryParams
+ .subscribe(params => {
+ this.serviceModelId = params['serviceModelId'];
+ if (_.has(this.store.getState().service.serviceHierarchy, this.serviceModelId)) {
+ this.setValuesFromStore();
+ this.store.subscribe(() => {
+ this.setValuesFromStore();
+ });
+ }
+ });
+ }
+
+
+ @ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
+
+ public onContextMenu($event: MouseEvent, item: any): void {
+ this._contextMenuService.show.next({
+ contextMenu: this.contextMenu,
+ event: $event,
+ item: item,
+ });
+ $event.preventDefault();
+ $event.stopPropagation();
+ }
+
+ private setValuesFromStore() {
+ const serviceInstance = this.store.getState().service.serviceInstance[this.serviceModelId];
+ this.numServicesToDeploy = serviceInstance.bulkSize;
+ this.serviceName = serviceInstance.instanceName || '<Automatically Assigned>';
+
+ }
+
+ public editService(): void {
+ this._iframeService.addClassOpenModal(this.parentElementClassName);
+ this.dialogService.addDialog(ServicePopupComponent, {})
+
+ }
+
+
+ extractOwningEntityNameAccordingtoId(id:String): string {
+ let owningEntityName;
+ _.forEach(this.store.getState().service.categoryParameters.owningEntityList,function(owningEntity: OwningEntity) {
+ if (owningEntity.id === id) {
+ owningEntityName = owningEntity.name;
+
+ }})
+
+ return owningEntityName;
+ }
+
+ extractServiceFields(): any {
+ let instanceFields : ServiceInstance;
+ instanceFields = this.store.getState().service.serviceInstance[Object.keys(this.store.getState().service.serviceInstance)[0]];
+ instanceFields.subscriberName = this.store.getState().service.subscribers.find(sub => sub.id === instanceFields.globalSubscriberId).name;
+ instanceFields.owningEntityName = this.extractOwningEntityNameAccordingtoId(instanceFields.owningEntityId);
+ return instanceFields;
+ }
+
+ public deployMacroservice(): void {
+ var instanceFields = this.extractServiceFields();
+ instanceFields.rollbackOnFailure = instanceFields.rollbackOnFailure === 'true';
+ this.msoService.submitMsoTask(instanceFields).subscribe((result) => {
+ window.parent.postMessage("navigateToInstantiationStatus", '*');
+ })
+ }
+
+ closePage() {
+ let messageBoxData : MessageBoxData = new MessageBoxData(
+ "Delete Instantiation", // modal title
+ "You are about to stop the instantiation process of this service. \nAll data will be lost. Are you sure you want to stop?",
+
+ ModalType.alert,
+ ModalSize.medium,
+ [
+ {text:"Stop Instantiation", size:"large", callback: this.navigate.bind(this), closeModal:true},
+ {text:"Cancel", size:"medium", closeModal:true}
+ ]);
+
+ MessageBoxService.openModal.next(messageBoxData);
+ }
+
+ navigate(){
+ window.parent.postMessage("navigateTo", "*");
+ }
+}
diff --git a/vid-webpack-master/src/app/drawingBoard/drawing-board-header/tmp_instansiate_request.ts b/vid-webpack-master/src/app/drawingBoard/drawing-board-header/tmp_instansiate_request.ts
new file mode 100644
index 000000000..7accc3a9c
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/drawing-board-header/tmp_instansiate_request.ts
@@ -0,0 +1,52 @@
+export default
+ {
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "5d48acb5-097d-4982-aeb2-f4a3bd87d31b",
+ "modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a",
+ "modelName": "MOW AVPN vMX BV vPE 1 Service",
+ "modelVersion": "10.0"
+ },
+ "owningEntityId": "038d99af-0427-42c2-9d15-971b99b9b489",
+ "owningEntityName": "PACKET CORE",
+ "projectName": "{some project name}",
+ "globalSubscriberId": "{some subscriber id}",
+ "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "instanceName": "vPE_Service",
+ "subscriptionServiceType": "VMX",
+ "lcpCloudRegionId": "mdt1",
+ "tenantId": "88a6ca3ee0394ade9403f075db23167e",
+ "vnfs": [
+ {
+ "modelInfo": {
+ "modelName": "2016-73_MOW-AVPN-vPE-BV-L",
+ "modelVersionId": "7f40c192-f63c-463e-ba94-286933b895f8",
+ "modelCustomizationName": "2016-73_MOW-AVPN-vPE-BV-L 0",
+ "modelCustomizationId": "ab153b6e-c364-44c0-bef6-1f2982117f04"
+ },
+ "lcpCloudRegionId": "mdt1",
+ "tenantId": "88a6ca3ee0394ade9403f075db23167e",
+ "platformName": "test",
+ "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "instanceName": "vmxnjr001",
+ "instanceParams": [],
+ "vfModules": [
+ {
+ "modelInfo": {
+ "modelType": "vfModule",
+ "modelName": "201673MowAvpnVpeBvL..AVPN_base_vPE_BV..module-0",
+ "modelVersionId": "4c75f813-fa91-45a4-89d0-790ff5f1ae79",
+ "modelCustomizationId": "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"
+ },
+ "instanceName": "vmxnjr001_AVPN_base_vPE_BV_base_001",
+ "instanceParams": [
+ {
+ "vmx_int_net_len": "24"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+
diff --git a/vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.component.ts b/vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.component.ts
new file mode 100644
index 000000000..6b717a930
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.component.ts
@@ -0,0 +1,133 @@
+import {AfterViewInit, Component, EventEmitter, OnInit, Output, ViewChild} from '@angular/core';
+import { ContextMenuService } from 'ngx-contextmenu';
+import { Constants } from '../../shared/utils/constants';
+import {ServicePlanningService} from "../../services/service-planning.service";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {ITreeOptions, TreeComponent} from "angular-tree-component";
+import {VnfPopupComponent} from "../../components/vnf-popup/vnf-popup.components";
+import {DialogService} from "ng2-bootstrap-modal";
+import {ActivatedRoute} from "@angular/router";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import { MessageBoxData, ModalSize, ModalType } from '../../shared/components/messageBox/messageBox.data';
+import { MessageBoxService } from '../../shared/components/messageBox/messageBox.service';
+import { deleteVnfInstance, deleteVfModuleInstance } from '../../service.actions';
+import { isNullOrUndefined } from 'util';
+import {IframeService} from "../../shared/utils/iframe.service";
+
+
+@Component({
+ selector: 'drawing-board-tree',
+ templateUrl: './drawing-board-tree.html',
+ styleUrls : ['./drawing-board-tree.scss']
+})
+
+
+export class DrawingBoardTreeComponent implements OnInit, AfterViewInit {
+ constructor(private _contextMenuService: ContextMenuService,
+ private _servicePlanningService: ServicePlanningService,
+ private _iframeService : IframeService,
+ private dialogService: DialogService,
+ private store: NgRedux<AppState>,
+ private route: ActivatedRoute) {
+ this.route
+ .queryParams
+ .subscribe(params => {
+ this.serviceModelId = params['serviceModelId'];
+ });
+ }
+
+ @Output()
+ highlightNode : EventEmitter<number> = new EventEmitter<number>();
+
+ @ViewChild('tree') tree: TreeComponent;
+ missingDataTooltip: string = Constants.Error.MISSING_VNF_DETAILS;
+ currentNode: ITreeNode = null; //
+ nodes = [];
+ serviceModelId: string;
+ options: ITreeOptions = {
+ nodeHeight: 45,
+ dropSlotHeight: 1
+ };
+ parentElementClassName = 'content';
+
+ ngOnInit(): void {
+ this.store.subscribe(() => {this.updateTree()});
+ this.updateTree()
+ }
+
+ updateTree() {
+ const serviceInstance = this.store.getState().service.serviceInstance[this.serviceModelId];
+ this.nodes = this._servicePlanningService.convertServiceInstanceToTreeData(serviceInstance, this.serviceModelId);
+ }
+
+ ngAfterViewInit():void {
+ // Expand drawing tree on init.
+ this.tree.treeModel.expandAll();
+ }
+
+ public onContextMenu($event: MouseEvent, node: ITreeNode): void {
+ this.currentNode = node;
+ node.focus();
+ node.setActiveAndVisible(false);
+ this.selectNode(node);
+ this._contextMenuService.show.next({
+ event: <any>$event,
+ item: node,
+ });
+ $event.preventDefault();
+ $event.stopPropagation();
+ }
+
+ public editItem(node: ITreeNode): void {
+ node = this.currentNode;
+ this._iframeService.addClassOpenModal(this.parentElementClassName);
+ this.dialogService.addDialog(VnfPopupComponent, {
+ serviceModelId: this.serviceModelId,
+ modelName: node.data.modelName,
+ modelType: node.data.type,
+ parentModelName: node.parent.data.modelName,
+ isNewVfModule : false
+ })
+ }
+
+ public deleteItem(node: ITreeNode): void {
+ if(this.currentNode.data.type === 'VF'){
+ if(!isNullOrUndefined(this.currentNode.data.children) && this.currentNode.data.children.length === 0){
+ this.store.dispatch(deleteVnfInstance(this.currentNode.data.modelName, this.serviceModelId));
+ }else {
+ let messageBoxData : MessageBoxData = new MessageBoxData(
+ "Remove VNF", // modal title
+ "You are about to remove this VNF and all its children from this service. Are you sure you want to remove it?",
+
+ ModalType.alert,
+ ModalSize.medium,
+ [
+ {text:"Remove VNF", size:"large", callback: this.removeVnf.bind(this), closeModal:true},
+ {text:"Don’t Remove", size:"medium", closeModal:true}
+ ]);
+
+ MessageBoxService.openModal.next(messageBoxData);
+ }
+ }else {
+ this.store.dispatch(deleteVfModuleInstance(this.currentNode.data.modelName, this.serviceModelId, node.parent.data.modelName));
+ }
+ }
+
+ removeVnf() {
+ this.store.dispatch(deleteVnfInstance(this.currentNode.data.modelName, this.serviceModelId));
+ }
+
+ public selectNode(node: ITreeNode): void {
+ node.expand();
+ this.highlightNode.emit(node.data.modelId);
+ }
+
+ isDataMissing(node: ITreeNode) {
+ //todo: currently not showing the alert icon. will be implemented in upcoming story.
+ return false;
+ }
+
+}
+
+
diff --git a/vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.html b/vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.html
new file mode 100644
index 000000000..c4061db9e
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.html
@@ -0,0 +1,42 @@
+<div class="drawing-board-tree">
+ <div *ngIf="nodes?.length == 0" style="text-align: center; margin-top: 50px;">
+ <no-content-message-and-icon class="span-over"
+ data-title="Please add objects (VNFs, network, modules etc.) from the left tree to design the service instance"
+ subtitle="Once done, click Deploy to start instantiation"
+ iconPath="./assets/img/UPLOAD.svg"
+ iconClass="upload-icon-service-planing"></no-content-message-and-icon>
+ </div>
+ <tree-root [attr.data-tests-id]="'drawing-board-tree'" #tree [nodes]="nodes" [options]="options" id="drawing-board-tree">
+ <ng-template #treeNodeTemplate let-node let-index="index">
+ <div [attr.data-tests-id]="'node-'+node.data.modelId +'-' +node.data.modelName" (click)="selectNode(node)">
+ <div class="model-info">
+ <span>
+ <span class="property-name">{{node.data.type}}{{node.data.name ? ': ': ''}}<span class="auto-name">{{node.data.name? node.data.name: ''}}</span></span>
+ </span>
+ </div>
+ <div class="model-actions">
+ <span class="icon-browse" [attr.data-tests-id]="'node-'+node.data.modelId +'-' +node.data.modelName+'-menu-btn'" (click)="onContextMenu($event, node)" >
+ <context-menu>
+ <ng-template contextMenuItem (execute)="editItem(node)">
+ <div [attr.data-tests-id]="'context-menu-item'">
+ <span class="icon-edit"></span>
+ Edit
+ </div>
+ </ng-template>
+ <ng-template contextMenuItem (execute)="deleteItem(node)">
+ <div>
+ <span class="icon-trash"></span>
+ Remove
+ </div>
+ </ng-template>
+ </context-menu>
+ </span>
+ <span *ngIf="isDataMissing(node)" class="icon-alert" tooltip="{{ missingDataTooltip }}" tooltipPlacement="left" [attr.data-tests-id]="'node-'+node.data.modelId +'-' +node.data.modelName+'-alert-icon'"></span>
+ </div>
+ </div>
+
+ </ng-template>
+ </tree-root>
+</div>
+
+
diff --git a/vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.scss b/vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.scss
new file mode 100644
index 000000000..fed9ead10
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/drawing-board-tree/drawing-board-tree.scss
@@ -0,0 +1,274 @@
+@mixin highlight($background-color, $color) {
+ background: none;
+ padding: 0;
+ background-color: $background-color;
+ border: $color 1px solid;
+ color: $color;
+}
+@mixin highlight-toggle-children {
+ tree-node-expander {
+ .toggle-children-wrapper {
+ span.toggle-children {
+ @include highlight(white, #009FDB);
+ border-right: none;
+ }
+ }
+ }
+}
+
+@mixin highlight-tree-node-content {
+ tree-node-content {
+ > div {
+ .model-actions {
+ .icon-browse:before {
+ display: inline-block;
+ }
+ }
+ }
+ }
+}
+
+drawing-board-tree {
+
+ .toggle-children-wrapper.toggle-children-wrapper-expanded {
+ .toggle-children:before {
+ color: #009FDB;
+ }
+ }
+
+ overflow: auto;
+ flex: 1;
+ color: #5A5A5A;
+ line-height: 14px;
+ .drawing-board-tree {
+ width: 100%;
+ }
+ tree-viewport {
+ padding: 50px 3.5% 1% 6%;
+ tree-node {
+ tree-node-drop-slot {
+ .node-drop-slot {
+ display: none;
+ }
+ }
+ & .tree-node-focused,
+ & .tree-node-active {
+ & > tree-node-wrapper {
+ .node-wrapper {
+ @include highlight-toggle-children;
+ .node-content-wrapper-focused,
+ .node-content-wrapper-active
+ {
+ @include highlight(#E6F6FB, #009FDB);
+ .property-name {
+ color: #009FDB;
+ }
+ .auto-name {
+ font-family: OpenSans-Regular !important;
+ }
+ .icon-browse:before {
+ color: #5A5A5A;
+ }
+ @include highlight-tree-node-content;
+ }
+ }
+ }
+ }
+ & .tree-node-expanded {
+ > tree-node-wrapper .node-wrapper {
+ box-shadow: 0 0px 2px rgba(90,90,90,0.24);
+ }
+ }
+
+ .tree-node-active .tree-children {
+ border: 1px solid #009FDB;
+ padding: 20px;
+ }
+
+
+
+ .tree-node.tree-node-active.tree-node-expanded {
+ border: 1px solid #009FDB;
+ }
+
+ .tree-node-leaf .node-wrapper{
+ margin-left: -45px;
+ }
+
+ tree-node-wrapper {
+ .node-wrapper {
+ height: 45px;
+ &:hover {
+ @include highlight-toggle-children;
+ .node-content-wrapper {
+ @include highlight(#E6F6FB, #009FDB);
+ .property-name {
+ color: #009FDB;
+ }
+ .icon-browse:before {
+ color: #5A5A5A;
+ }
+ @include highlight-tree-node-content;
+ }
+ }
+ tree-node-expander {
+ font-family: 'icomoon' !important;
+ height: 100%;
+ .toggle-children-wrapper {
+ padding: 0;
+ display: block;
+ height: 100%;
+ span.toggle-children {
+ display: flex;
+ width: 45px;
+ padding: 0;
+ top: 0;
+ height: inherit;
+ background-image: none;
+ background-color: white;
+ border: 1px solid #D2D2D2;
+ border-right: none;
+ &:before {
+ content: "\e900";
+ font-size: 20px;
+ font-weight: 600;
+ text-align: center;
+ display: inline-block;
+ flex: auto;
+ align-self: center;
+ }
+ }
+ }
+ .toggle-children-wrapper-expanded {
+ span.toggle-children {
+ transform: none;
+ &:before {
+ content: "\e930";
+ }
+ }
+ }
+ .toggle-children-placeholder {
+ width:45px;
+ }
+ }
+ .node-content-wrapper {
+ padding: 0;
+ background: none;
+ box-shadow: none;
+ border-radius: 0;
+ border: 1px solid #D2D2D2;
+ height: 100%;
+ flex: 1;
+ tree-node-content {
+ > div {
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ .model-info {
+ flex: 1;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding-left: 8px;
+ > span {
+ flex: 1;
+ padding: 0 8px;
+ span:nth-child(2) {
+ display: block;
+ }
+ }
+ }
+ .model-actions {
+ display: flex;
+ align-items: center;
+ padding-right: 12px;
+ .icon-browse {
+ padding: 0;
+ width: 30px;
+ &:before {
+ content: "\e924";
+ font-size: 24px;
+ display: none;
+ }
+ &:hover:before {
+ color: #009FDB;
+ }
+ &:focus:before,
+ &:active:before {
+ color: #009FDB;
+ }
+ }
+
+ .icon-alert {
+ padding-left: 10px;
+ &:before {
+ content: "\e904";
+ font-size: 16px;
+ color: #ffb81c;
+ }
+ }
+ }
+ }
+ }
+ .property-name {
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ line-height: 12px;
+ color: #191919;
+ text-transform: capitalize;
+ }
+ }
+
+
+ }
+ }
+ tree-node-children {
+ .tree-children {
+ padding: 20px;
+ .model-info span:first-child {
+ flex: 1.1 !important;
+ }
+ }
+ }
+ }
+ }
+}
+.cdk-overlay-pane.ngx-contextmenu {
+ ul.dropdown-menu {
+ width: 200px;
+ box-shadow: none;
+ padding: 0;
+ padding-top: 10px;
+ margin: 0;
+ border: 1px solid #D2D2D2;
+ border-top: 3px solid #009FDB;
+ box-shadow: 0 0px 2px rgba(90,90,90,0.24);
+ border-radius: 2px;
+ li {
+ height: 40px;
+ a {
+ font-family: OpenSans-Regular;
+ display: flex;
+ align-items: center;
+ height: 100%;
+ padding: 12px;
+ color: #5A5A5A;
+ &:hover {
+ background: #E6F6FB;
+ color: #009FDB;
+ }
+ span {
+ padding-right: 12px;
+ &.icon-edit:before {
+ content: '\e917';
+ }
+ &.icon-trash:before {
+ content: '\e937';
+ }
+ }
+ }
+ }
+ }
+}
+
diff --git a/vid-webpack-master/src/app/drawingBoard/drawingBoard.module.ts b/vid-webpack-master/src/app/drawingBoard/drawingBoard.module.ts
new file mode 100644
index 000000000..41efbe0e8
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/drawingBoard.module.ts
@@ -0,0 +1,41 @@
+import { AvailableModelsTreeService } from './available-models-tree/available-models-tree.service';
+import { NgModule } from '@angular/core';
+import { HighlightPipe } from '../shared/pipes/highlight-filter.pipe';
+import { TreeModule } from 'angular-tree-component';
+import { BrowserModule } from '@angular/platform-browser';
+import { TooltipModule } from 'ngx-tooltip';
+import { AvailableModelsTreeComponent } from './available-models-tree/available-models-tree.component';
+import { ServicePlanningService } from '../services/service-planning.service';
+import { AaiService } from '../services/aaiService/aai.service';
+import { DrawingBoardTreeComponent } from './drawing-board-tree/drawing-board-tree.component';
+import { SharedModule } from '../shared/shared.module';
+import { ContextMenuModule, ContextMenuService } from 'ngx-contextmenu';
+import { CommonModule } from '@angular/common';
+import { DrawingBoardHeader } from './drawing-board-header/drawing-board-header.component';
+import { ServicePlanningComponent, ServicePlanningEmptyComponent } from './service-planning/service-planning.component';
+
+@NgModule({
+ imports: [
+ TreeModule,
+ BrowserModule,
+ ContextMenuModule,
+ TooltipModule,
+ CommonModule,
+ SharedModule.forRoot()],
+ providers: [
+ ServicePlanningService,
+ AaiService,
+ AvailableModelsTreeService ,
+ ContextMenuService,
+ ServicePlanningService],
+ declarations: [
+ AvailableModelsTreeComponent,
+ HighlightPipe,
+ DrawingBoardTreeComponent,
+ DrawingBoardHeader,
+ ServicePlanningComponent,
+ ServicePlanningEmptyComponent],
+ exports: [ AvailableModelsTreeComponent, DrawingBoardTreeComponent, DrawingBoardHeader]
+})
+
+export class DrawingBoardModule { }
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.html b/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.html
new file mode 100644
index 000000000..5b2f22d5f
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.html
@@ -0,0 +1,13 @@
+<div class="service-planning-header">
+ <drawing-board-header></drawing-board-header>
+</div>
+<div class="service-planning-content row">
+ <available-models-tree class="left-side col-md-6" (highlightInstances)="highlightInstancesBySelectingNode($event)"></available-models-tree>
+ <!--<no-content-message-and-icon *ngIf="!isShowTree()" class="span-over"-->
+ <!--data-title="Please add objects (VNFs, network, modules etc.) from the left tree to design the service instance"-->
+ <!--subtitle="Once done, click Deploy to start instantiation"-->
+ <!--iconPath="./img/UPLOAD.svg"-->
+ <!--iconClass="upload-icon-service-planing"></no-content-message-and-icon>-->
+ <drawing-board-tree *ngIf="isShowTree()" class="span-over col-md-6" (highlightNode)="highlightNodeBySelectingInstance($event)"></drawing-board-tree>
+</div>
+
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.scss b/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.scss
new file mode 100644
index 000000000..69546a6c0
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.scss
@@ -0,0 +1,16 @@
+
+.service-planning-content {
+ display: flex;
+ flex: 1;
+}
+
+.span-over {
+ display: flex;
+ flex: 1;
+}
+
+//css for the icon. :host ::ng-deep are needed for applying css to child component
+:host ::ng-deep .upload-icon-service-planing {
+ height: 117px;
+ margin-top: 32px;
+}
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.ts
new file mode 100644
index 000000000..1ce0e8100
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/service-planning.component.ts
@@ -0,0 +1,77 @@
+import {Component, ViewChild} from '@angular/core';
+import {DrawingBoardTreeComponent} from "../drawing-board-tree/drawing-board-tree.component";
+import {AvailableModelsTreeComponent} from "../available-models-tree/available-models-tree.component";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {TreeComponent} from 'angular-tree-component';
+
+@Component({
+ selector: 'service-planning',
+ templateUrl: './service-planning.component.html',
+ styleUrls: ['./service-planning.component.scss']
+})
+
+export class ServicePlanningComponent {
+
+ @ViewChild(DrawingBoardTreeComponent) drawingModelTree;
+ @ViewChild(AvailableModelsTreeComponent) availableModelTree;
+
+ isShowTree(): boolean {
+ return true;
+ }
+
+ public highlightNodeBySelectingInstance(modelId: number): void {
+ this.availableModelTree.tree.treeModel.getNodeBy((node: ITreeNode) => node.data.id === modelId)
+ .setActiveAndVisible().expand();
+ }
+
+ public highlightInstancesBySelectingNode(id: number): void {
+ if(this.isShowTree()) {
+ let _this = this;
+ let matchInstances = _this.searchTree(id);
+ if (!matchInstances.length)
+ _this.clearSelectionInTree(_this.drawingModelTree.tree);
+ matchInstances.forEach(function (instance, index) {
+ let multi : boolean = !!index;
+ _this.drawingModelTree.tree.treeModel.getNodeById(instance.id)
+ .setActiveAndVisible(multi).expand();
+ });
+
+ }
+ }
+
+ clearSelectionInTree(tree: TreeComponent): void {
+ let activateNode = tree.treeModel.getActiveNode();
+ activateNode ? activateNode.toggleActivated().blur() : null;
+ }
+
+ searchTree(modelId: number) {
+ let _this = this;
+ let results = [];
+ let nodes = _this.drawingModelTree.nodes;
+ nodes.forEach(function (node) {
+ _this.searchTreeNode(node, modelId, results);
+ });
+ return results;
+ }
+
+ searchTreeNode(node, modelId: number, results): void {
+ if(node.modelId === modelId){
+ results.push(node);
+ }
+ if (node.children != null){
+ for(let i = 0; i < node.children.length; i++){
+ this.searchTreeNode(node.children[i], modelId, results);
+ }
+ }
+ }
+
+
+}
+
+export class ServicePlanningEmptyComponent extends ServicePlanningComponent {
+ isShowTree() : boolean {
+ return false;
+ }
+}
+
+
diff --git a/vid-webpack-master/src/app/factories/models/requestDetails.model.ts b/vid-webpack-master/src/app/factories/models/requestDetails.model.ts
new file mode 100644
index 000000000..4ccc4781b
--- /dev/null
+++ b/vid-webpack-master/src/app/factories/models/requestDetails.model.ts
@@ -0,0 +1,126 @@
+export class RequestInfo {
+ instanceName: string;
+ source: string;
+ suppressRollback: boolean;
+ requestorId: string;
+ productFamilyId: string;
+}
+
+export class ModelInfo {
+ modelType: string;
+ modelInvariantId: string;
+ modelVersionId: string;
+ modelName: string;
+ modelVersion: string;
+ modelCustomizationId: string;
+ modelCustomizationName: string;
+}
+
+export class RequestParameters {
+ userParams: any[];
+ testApi: string;
+}
+
+export class CloudConfiguration {
+ lcpCloudRegionId: string;
+ tenantId: string;
+}
+
+export class LineOfBusiness {
+ lineOfBusinessName: string;
+}
+
+export class Platform {
+ platformName: string;
+}
+
+export class VfcModel {
+ uuid: string;
+ invariantUuid: string;
+ name: string;
+ version: string;
+ vfcInstanceGroupProperties : any;
+}
+
+export class RelatedInstance {
+ instanceId: string;
+ modelInfo: ModelInfo;
+}
+
+export class RelatedInstanceList {
+ relatedInstance: RelatedInstance;
+}
+
+export class RequestDetails {
+ requestInfo: RequestInfo;
+ modelInfo: ModelInfo;
+ requestParameters: RequestParameters;
+ cloudConfiguration: CloudConfiguration;
+ lineOfBusiness: LineOfBusiness;
+ platform: Platform;
+ relatedInstanceList: RelatedInstanceList[];
+}
+
+export class RootObject {
+ requestDetails: RequestDetails;
+}
+// {
+// "requestDetails": {
+// "modelInfo": {
+// “modelType”: “vnf”,
+// “modelInvariantId”: “ff5256d1-5a33-55df-13ab-12abad84e7ff”,
+// “modelVersionId”: “fe042c22-ba82-43c6-b2f6-8f1fc4164091”,
+// “modelName”: “vSAMP12”,
+// "modelVersion": "1.0",
+// “modelCustomizationName”: “vSAMP12 1”,
+// “modelCustomizationId”: “a7f1d08e-b02d-11e6-80f5-76304dec7eb7”
+// },
+// “cloudConfiguration”: {
+// “lcpCloudRegionId”: “mdt1”,
+// “tenantId”: “88a6ca3ee0394ade9403f075db23167e”
+// },
+// "requestInfo": {
+// “instanceName”: “MSOTEST103a”,
+// “productFamilyId”: “a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb”,
+// “source”: “VID”,
+// “suppressRollback”: false,
+// “requestorId”: “az2016”
+// },
+// "platform": {
+// "platformName": "{some platformName}"
+// },
+// "lineOfBusiness": {
+// "lineOfBusinessName": "{some string}"
+// },
+// "relatedInstanceList": [
+// {
+// “relatedInstance”: {
+// “instanceId”: “{serviceInstanceId}”,
+// “modelInfo”: {
+// “modelType”: “service”,
+// “modelInvariantId”: “ff3514e3-5a33-55df-13ab-12abad84e7ff”,
+// “modelVersionId”: “fe6985cd-ea33-3346-ac12-ab121484a3fe”,
+// “modelName”: “{parent service model name}”,
+// "modelVersion": "1.0"
+// }
+// }
+// },
+// {
+// “relatedInstance”: {
+// “instanceId”: “{instanceGroupId}”,
+// “modelInfo”: {
+// “modelType”: “networkCollection”,
+// “modelInvariantId”: “9ea660dc-155f-44d3-b45c-cc7648b4f31c”,
+// “modelVersionId”: “bb07aad1-ce2d-40c1-85cb-5392f76bb1ef”,
+// “modelName”: “{network collection model name}”,
+// "modelVersion": "1.0"
+// }
+// }
+// }
+
+// ],
+// “requestParameters”: {
+// “userParams”: []
+// }
+// }
+// }
diff --git a/vid-webpack-master/src/app/factories/mso.factory.spec.ts b/vid-webpack-master/src/app/factories/mso.factory.spec.ts
new file mode 100644
index 000000000..16efd2970
--- /dev/null
+++ b/vid-webpack-master/src/app/factories/mso.factory.spec.ts
@@ -0,0 +1,319 @@
+import {createRequest} from './mso.factory';
+
+sessionStorage.setItem("msoRequestParametersTestApiValue","GR_API");
+describe('Vlantagging', () => {
+ it('should create a correct request', (done: DoneFn) => {
+ let userInputs_withEcompGeneratedNaming = {
+ "productFamily": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "lcpRegion": "AAIAIC25",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "aicZone": "YYY1",
+ "platformName": "plat1",
+ "lineOfBusiness": "ecomp"
+ };
+ let userInputs_withoutEcompGeneratedNaming = {
+ "instanceName": "New Name",
+ "productFamily": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "lcpRegion": "AAIAIC25",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "aicZone": "YYY1",
+ "platformName": "plat1",
+ "lineOfBusiness": "ecomp"
+ };
+ let service = {
+ "service": {
+ "uuid": "6bce7302-70bd-4057-b48e-8d5b99e686ca",
+ "invariantUuid": "9aa04749-c02c-432d-a90c-18caa361c833",
+ "name": "vDBE_srv",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "Network L4+",
+ "serviceType": "",
+ "serviceRole": "",
+ "description": "vDBE_srv",
+ "serviceEcompNaming": "true",
+ "instantiationType": "A-La-Carte",
+ "inputs": {}
+ },
+ "vnfs": {
+ "vDBE 0": {
+ "uuid": "61535073-2e50-4141-9000-f66fea69b433",
+ "invariantUuid": "fcdf49ce-6f0b-4ca2-b676-a484e650e734",
+ "description": "vDBE",
+ "name": "vDBE",
+ "version": "0.2",
+ "customizationUuid": "1",
+ "inputs": {},
+ "commands": {},
+ "properties": {
+ "nf_naming": "{ecomp_generated_naming=true}",
+ "multi_stage_design": "false",
+ "oam_vfc_instance_group_function": "oambbb",
+ "availability_zone_max_count": "1",
+ "oam_network_collection_function": "oamaaa",
+ "ecomp_generated_naming": "true",
+ "untr_vfc_instance_group_function": "untrbbb",
+ "untr_network_collection_function": "untraaa"
+ },
+ "type": "VF",
+ "modelCustomizationName": "vDBE 0",
+ "vfModules": {
+ "vdbe0..Vdbe..main..module-0": {
+ "uuid": "25a4d009-2f5a-44b4-b02a-62c584c15912",
+ "invariantUuid": "614afb1a-3e7e-44e9-90ab-424d0070c781",
+ "customizationUuid": "3443b341-7b0b-498c-a84a-a7ee736cba7e",
+ "description": null,
+ "name": "Vdbe..main..module-0",
+ "version": "1",
+ "modelCustomizationName": "Vdbe..main..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "main"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ }
+ },
+ "volumeGroups": {},
+ "vfcInstanceGroups": {
+ "untr_group": {
+ "uuid": "5fca04e2-a889-4579-8338-f60f1bf285fa",
+ "invariantUuid": "fb1e384b-117a-46ae-9ad1-bf2f1ee1e49f",
+ "name": "untr_group",
+ "version": "1",
+ "vfcInstanceGroupProperties": {
+ "vfcParentPortRole": "untr",
+ "networkCollectionFunction": "untraaa",
+ "vfcInstanceGroupFunction": null,
+ "subinterfaceRole": "untr"
+ }
+ },
+ "oam_group": {
+ "uuid": "a0efd5fc-f7be-4502-936a-a6c6392b958f",
+ "invariantUuid": "9384abf9-1231-4da4-bd8d-89e4d2f8a749",
+ "name": "oam_group",
+ "version": "1",
+ "vfcInstanceGroupProperties": {
+ "vfcParentPortRole": "untr",
+ "networkCollectionFunction": "untraaa",
+ "vfcInstanceGroupFunction": null,
+ "subinterfaceRole": "untr"
+ }
+ }
+ }
+ }
+ },
+ "networks": {},
+ "collectionResource": {},
+ "configurations": {},
+ "serviceProxies": {},
+ "vfModules": {
+ "vdbe0..Vdbe..main..module-0": {
+ "uuid": "25a4d009-2f5a-44b4-b02a-62c584c15912",
+ "invariantUuid": "614afb1a-3e7e-44e9-90ab-424d0070c781",
+ "customizationUuid": "3443b341-7b0b-498c-a84a-a7ee736cba7e",
+ "description": null,
+ "name": "Vdbe..main..module-0",
+ "version": "1",
+ "modelCustomizationName": "Vdbe..main..module-0",
+ "properties": {
+ "minCountInstances": 1,
+ "maxCountInstances": 1,
+ "initialCount": 1,
+ "vfModuleLabel": "main"
+ },
+ "inputs": {},
+ "volumeGroupAllowed": false
+ }
+ },
+ "volumeGroups": {},
+ "pnfs": {}
+ };
+ let serviceInstanceId: string = "6bce7302-70bd-4057-b48e-8d5b99e686ca";
+ let networkInstanceGroups = {
+ "untr_group": {
+ "instance-group": {
+ "instance-group-role": "JZmha7QSS4tJ",
+ "model-invariant-id": "model-id3",
+ "model-version-id": "a0efd5fc-f7be-4502-936a-a6c6392b958f",
+ "id": "AAI-12002-test3-vm230w",
+ "description": "a9DEa0kpY",
+ "instance-group-type": "type",
+ "resource-version": "1520888659539",
+ "instance-group-name": "wKmBXiO1xm8bK",
+ "instance-group-function": "testfunction2",
+ "relationship-list": {
+ "relationship": [
+ {
+ "relationDataList": [
+ {
+ "relationship-key": "cloud-region.cloud-owner",
+ "relationship-value": "AAI-12002-vm230w"
+ },
+ {
+ "relationship-key": "cloud-region.cloud-region-id",
+ "relationship-value": "AAI-region-vm230w"
+ }
+ ],
+ "relatedToPropertyList": [
+ {
+ "property-key": "cloud-region.owner-defined-type",
+ "property-value": null
+ }
+ ],
+ "related-to": "cloud-region",
+ "related-link": "/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w",
+ "relationship-label": "org.onap.relationships.inventory.Uses",
+ "relationship-data": [
+ {
+ "relationship-key": "cloud-region.cloud-owner",
+ "relationship-value": "AAI-12002-vm230w"
+ },
+ {
+ "relationship-key": "cloud-region.cloud-region-id",
+ "relationship-value": "AAI-region-vm230w"
+ }
+ ],
+ "related-to-property": [
+ {
+ "property-key": "cloud-region.owner-defined-type",
+ "property-value": null
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "oam_group": {
+ "instance-group": {
+ "instance-group-role": "JZmha7QSS4tJ",
+ "model-invariant-id": "model-id3",
+ "model-version-id": "a0efd5fc-f7be-4502-936a-a6c6392b958f",
+ "id": "AAI-12002-test3-vm230w",
+ "description": "a9DEa0kpY",
+ "instance-group-type": "type",
+ "resource-version": "1520888659539",
+ "instance-group-name": "wKmBXiO1xm8bK",
+ "instance-group-function": "testfunction2",
+ "relationship-list": {
+ "relationship": [
+ {
+ "relationDataList": [
+ {
+ "relationship-key": "cloud-region.cloud-owner",
+ "relationship-value": "AAI-12002-vm230w"
+ },
+ {
+ "relationship-key": "cloud-region.cloud-region-id",
+ "relationship-value": "AAI-region-vm230w"
+ }
+ ],
+ "relatedToPropertyList": [
+ {
+ "property-key": "cloud-region.owner-defined-type",
+ "property-value": null
+ }
+ ],
+ "related-to": "cloud-region",
+ "related-link": "/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w",
+ "relationship-label": "org.onap.relationships.inventory.Uses",
+ "relationship-data": [
+ {
+ "relationship-key": "cloud-region.cloud-owner",
+ "relationship-value": "AAI-12002-vm230w"
+ },
+ {
+ "relationship-key": "cloud-region.cloud-region-id",
+ "relationship-value": "AAI-region-vm230w"
+ }
+ ],
+ "related-to-property": [
+ {
+ "property-key": "cloud-region.owner-defined-type",
+ "property-value": null
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ };
+ let expectedResult = {
+ "requestInfo": {
+ "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+ "source": "VID",
+ "requestorId": "az2016",
+ "suppressRollback": false
+ },
+ "lineOfBusiness": Object({ lineOfBusinessName: "ecomp" }),
+ "cloudConfiguration": {
+ "lcpCloudRegionId": "AAIAIC25",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86"
+ },
+ "platform": Object({ platformName: "plat1" }),
+ "modelInfo": {
+ modelCustomizationId :'1',
+ "modelVersionId": "61535073-2e50-4141-9000-f66fea69b433",
+ "modelCustomizationName": "vDBE 0",
+ "modelName": "vDBE",
+ "modelInvariantId": "fcdf49ce-6f0b-4ca2-b676-a484e650e734",
+ "modelType": "vnf",
+ "modelVersion": "0.2"
+ },
+ "requestParameters": {
+ "userParams": [],
+ "testApi": "GR_API"
+ },
+ "relatedInstanceList": [
+ {
+ "relatedInstance": {
+ "instanceId": "6bce7302-70bd-4057-b48e-8d5b99e686ca",
+ "modelInfo": {
+ "modelVersionId": "6bce7302-70bd-4057-b48e-8d5b99e686ca",
+ "modelName": "vDBE_srv",
+ "modelInvariantId": "9aa04749-c02c-432d-a90c-18caa361c833",
+ "modelType": "service",
+ "modelVersion": "1.0"
+ }
+ }
+ },
+ {
+ "relatedInstance": {
+ "instanceId": "AAI-12002-test3-vm230w",
+ "modelInfo": {
+ "modelName": "oam_group",
+ "modelType": "networkCollection",
+ "modelVersion": "1",
+ "modelVersionId": "a0efd5fc-f7be-4502-936a-a6c6392b958f",
+ "modelInvariantId": "9384abf9-1231-4da4-bd8d-89e4d2f8a749"
+ }
+ }
+ },
+ {
+ "relatedInstance": {
+ "instanceId": "AAI-12002-test3-vm230w",
+ "modelInfo": {
+ "modelName": "oam_group",
+ "modelType": "networkCollection",
+ "modelVersion": "1",
+ "modelVersionId": "a0efd5fc-f7be-4502-936a-a6c6392b958f",
+ "modelInvariantId": "9384abf9-1231-4da4-bd8d-89e4d2f8a749"
+ }
+ }
+ }
+ ]
+ };
+
+
+ let actualResult_withEcompGeneratedNaming = <any>createRequest("az2016",userInputs_withEcompGeneratedNaming, service, serviceInstanceId, networkInstanceGroups,'vDBE 0','1');
+ expect(actualResult_withEcompGeneratedNaming).toEqual(expectedResult);
+ expectedResult["requestInfo"]["instanceName"] = "New Name";
+ let actualResult_withoutEcompGeneratedNaming = <any>createRequest("az2016",userInputs_withoutEcompGeneratedNaming, service, serviceInstanceId, networkInstanceGroups,'vDBE 0','1');
+ expect(actualResult_withoutEcompGeneratedNaming).toEqual(expectedResult);
+ done();
+ });
+});
diff --git a/vid-webpack-master/src/app/factories/mso.factory.ts b/vid-webpack-master/src/app/factories/mso.factory.ts
new file mode 100644
index 000000000..c26296edf
--- /dev/null
+++ b/vid-webpack-master/src/app/factories/mso.factory.ts
@@ -0,0 +1,92 @@
+import { RequestInfo, RequestDetails, ModelInfo, CloudConfiguration, LineOfBusiness, Platform, RelatedInstanceList, VfcModel } from "./models/requestDetails.model";
+import * as _ from "lodash";
+
+function extractModelInfoFromNodeTemplate(node: any, type: string) {
+ let modelInfo: ModelInfo = <ModelInfo>{};
+ if (node["customizationUuid"] !== undefined) {
+ modelInfo.modelCustomizationId = node["customizationUuid"];
+ }
+ if (node["modelCustomizationName"] !== undefined) {
+ modelInfo.modelCustomizationName = node["modelCustomizationName"];
+ }
+ modelInfo.modelVersionId = node["uuid"];
+ modelInfo.modelName = node["name"];
+ modelInfo.modelInvariantId = node["invariantUuid"];
+ modelInfo.modelType = type;
+ modelInfo.modelVersion = node["version"];
+ return modelInfo;
+}
+
+function extractRequestInfo(userInputs: any, userId: string): RequestInfo {
+ let requestInfo: RequestInfo = <RequestInfo>{};
+ if (userInputs["instanceName"] !== undefined) requestInfo.instanceName = userInputs["instanceName"];
+ requestInfo.productFamilyId = userInputs["productFamily"];
+ requestInfo.source = "VID";
+ requestInfo.suppressRollback = userInputs["rollback"] === "false";
+ requestInfo.requestorId = userId;
+ return requestInfo;
+}
+
+function extractPlatform(userInputs: any): Platform {
+ let platform: Platform = <Platform>{};
+ platform.platformName = userInputs["platformName"];
+ return platform;
+}
+
+function extractVfcGroupModelAccordingToUuid(vnfModel: any, vfcUuid: string) {
+ return _.find(vnfModel.vfcInstanceGroups, { uuid: vfcUuid });
+}
+
+function extractLineOfBusiness(userInputs: any) {
+ let lob: LineOfBusiness = <LineOfBusiness>{};
+ lob.lineOfBusinessName = userInputs["lineOfBusiness"];
+ return lob;
+}
+
+function extractCloudConfiguration(userInputs: any) {
+ let cloudConfig: CloudConfiguration = <CloudConfiguration>{};
+ cloudConfig.lcpCloudRegionId = userInputs["lcpRegion"];
+ cloudConfig.tenantId = userInputs["tenantId"];
+ return cloudConfig;
+}
+
+function extractModelInfoFromVfcNode(vfcModel: VfcModel): ModelInfo {
+ let modelinfo: ModelInfo = <ModelInfo>{};
+ modelinfo.modelName = vfcModel.name;
+ modelinfo.modelType = "networkCollection";
+ modelinfo.modelVersion = vfcModel.version;
+ modelinfo.modelVersionId = vfcModel.uuid;
+ modelinfo.modelInvariantId = vfcModel.invariantUuid;
+ return modelinfo;
+}
+
+export function createRequest(userId: string, userInputs: any, service: any, serviceInstanceId: string, networkInstanceGroups: any, vnfCustomizationName: string, vnfCustomizationId: string) {
+ let request: RequestDetails = <RequestDetails>{};
+ request.requestInfo = extractRequestInfo(userInputs, userId);
+ request.lineOfBusiness = extractLineOfBusiness(userInputs);
+ request.cloudConfiguration = extractCloudConfiguration(userInputs);
+ request.platform = extractPlatform(userInputs);
+ request.modelInfo = extractModelInfoFromNodeTemplate(service.vnfs[vnfCustomizationName], "vnf");
+ request.requestParameters = { userParams: [], testApi: sessionStorage.getItem("msoRequestParametersTestApiValue")};
+ request.relatedInstanceList = [];
+ let serviceRelatedInstance: RelatedInstanceList = {
+ relatedInstance: {
+ instanceId: serviceInstanceId,
+ modelInfo: extractModelInfoFromNodeTemplate(service.service, "service")
+ }
+ };
+ request.relatedInstanceList.push(serviceRelatedInstance);
+ _.forOwn(networkInstanceGroups, function(group) {
+ let modelUuid = group["instance-group"]["model-version-id"];
+ let vfcModel = extractVfcGroupModelAccordingToUuid(service.vnfs[vnfCustomizationName], modelUuid);
+ let networkInstanceGroup: RelatedInstanceList = {
+ relatedInstance: {
+ instanceId: group["instance-group"].id,
+ modelInfo: extractModelInfoFromVfcNode(vfcModel)
+ }
+ };
+ request.relatedInstanceList.push(networkInstanceGroup);
+ });
+
+ return request;
+}
diff --git a/vid-webpack-master/src/app/global.actions.ts b/vid-webpack-master/src/app/global.actions.ts
new file mode 100644
index 000000000..46575fb34
--- /dev/null
+++ b/vid-webpack-master/src/app/global.actions.ts
@@ -0,0 +1,23 @@
+import {Action, ActionCreator} from "redux";
+export const UPDATE_NAME= '[NAME] Update';
+export const UPDATE_FLAGS= '[FLAGS] Update';
+
+export interface UpdateGlobalAction extends Action {
+ name?: string;
+}
+
+export interface UpdateFlagsAction extends Action {
+ flags?: any;
+}
+
+export const updateName: ActionCreator<UpdateGlobalAction> =
+ (name) => ({
+ type: UPDATE_NAME,
+ name: name
+ });
+
+export const updateFlags: ActionCreator<UpdateFlagsAction> =
+ (flags) => ({
+ type: UPDATE_FLAGS,
+ flags: flags
+ });
diff --git a/vid-webpack-master/src/app/global.reducer.ts b/vid-webpack-master/src/app/global.reducer.ts
new file mode 100644
index 000000000..cffd34603
--- /dev/null
+++ b/vid-webpack-master/src/app/global.reducer.ts
@@ -0,0 +1,29 @@
+/* tslint:disable no-switch-case-fall-through */
+import {Action} from 'redux';
+import {UPDATE_FLAGS, UPDATE_NAME, UpdateFlagsAction, UpdateGlobalAction} from "./global.actions";
+
+
+
+export interface GlobalState {
+ name : string;
+ flags : { [key: string]: boolean };
+}
+
+const initialState: GlobalState = {
+ name : null,
+ flags : null
+};
+
+
+export const GlobalReducer =
+ function (state: GlobalState = initialState, action: Action): GlobalState {
+ switch (action.type) {
+ case UPDATE_NAME:
+ return Object.assign(state, state, (<UpdateGlobalAction>action));
+ case UPDATE_FLAGS:
+ Object.assign(state, (<UpdateFlagsAction>action));
+ return Object.assign({}, state);
+ default:
+ return state;
+ }
+ };
diff --git a/vid-webpack-master/src/app/healthStatus/health-status.component.html b/vid-webpack-master/src/app/healthStatus/health-status.component.html
new file mode 100644
index 000000000..600c873be
--- /dev/null
+++ b/vid-webpack-master/src/app/healthStatus/health-status.component.html
@@ -0,0 +1,36 @@
+<div class="row">
+ <div class="health-status-header">
+ <div>
+ <div class="row" style="margin-left: 0;">
+ <div>
+ <span class="title">Health Status </span>
+ </div>
+ <div class="lastUpdate">
+ <div style="float: left;margin-top: 3px;"><span>Last update: {{lastUpdatedDate | date:'MMM. dd, yyyy | HH:mm'}}</span>
+ </div>
+ <div class="refresh-btn" [ngClass]="{'spin' : !dataIsReady}" (click)="refreshData()">
+ <span class="icon-refresh"></span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<div class="row">
+ <table id="health-status-table" class="table table-bordered">
+ <tbody>
+ <tr class="row spaceUnder" *ngFor="let componentStatus of componentStatuses" [attr.data-tests-id]="'component-'+componentStatus?.component">
+ <td class="col-md-1 col-xs-1 component-name"
+ [attr.data-tests-id]="'component-name-'+componentStatus?.component"
+ [ngClass]="isAvailable(componentStatus) ? 'border-is-ok': 'border-not-ok'">
+ {{componentStatus?.component}}
+ </td>
+ <td class="col-md-11 col-xs-3 component-metadata-cell"
+ [attr.data-tests-id]="'component-metadata-'+componentStatus?.component"
+ [ngClass]="isAvailable(componentStatus) ? 'border-is-ok': 'border-not-ok'">
+ <pre class="component-metadata">{{getMetadata(componentStatus) | json}}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/vid-webpack-master/src/app/healthStatus/health-status.component.scss b/vid-webpack-master/src/app/healthStatus/health-status.component.scss
new file mode 100644
index 000000000..0dda6b215
--- /dev/null
+++ b/vid-webpack-master/src/app/healthStatus/health-status.component.scss
@@ -0,0 +1,187 @@
+div.dataTables_wrapper {
+ width: 800px;
+ margin: 0 auto;
+}
+
+.row {
+ margin-left: 15px;
+ margin-right: 15px;
+}
+
+.health-status-header {
+ margin-top: 30px;
+ .title {
+ font-family: OpenSans-Semibold;
+ font-size: 24px;
+ color: #4A4A4A;
+ float: left;
+ }
+
+ .info {
+ width: 18px;
+ height: 18px;
+ border: 0;
+ background-size: auto 100%;
+ cursor: pointer;
+ float: left;
+ margin: 10px;
+ }
+
+ .refresh-btn {
+ float: left;
+ margin-top: 6px;
+ margin-left: 10px;
+ cursor: pointer;
+ }
+
+ .lastUpdate {
+ margin-top: 5px;
+ padding-top: 0px;
+ font-size: 15px;
+ border-left: 1px solid black;
+ float: left;
+ padding-left: 10px;
+ color: gray;
+ height: 26px;
+ margin-left: 10px;
+ }
+
+ .refreshBtn {
+ width: 18px;
+ height: 18px;
+ border: 0;
+ background-size: auto 100%;
+ outline: none;
+ margin-left: 10px;
+ background: transparent;
+ }
+
+ svg-icon use {
+ fill: #0000ff !important;
+ }
+
+ //.sub-title {
+ // font-family: OpenSans-Semibold;
+ // font-size: 14px;
+ // color: #4A4A4A;
+ // margin-left: 0;
+ //}
+}
+
+.loader {
+ border: 5px solid #f3f3f3;
+ border-radius: 50%;
+ border-top: 5px solid #3498db;
+ width: 170px;
+ height: 170px;
+ -webkit-animation: spin 2s linear infinite;
+ animation: spin 2s linear infinite;
+ position: absolute;
+ left: 50%;
+ right: 50%;
+ top: 50%;
+}
+
+/* Safari */
+@-webkit-keyframes spin {
+ 0% { -webkit-transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(360deg); }
+}
+
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+
+.spin {
+ -webkit-animation: spin .4s infinite linear;
+ -moz-animation: spin .4s infinite linear;
+ -o-animation: spin .4s infinite linear;
+ animation: spin .4s infinite linear;
+ -webkit-transform-origin: 50% 44%;
+ transform-origin:50% 44%;
+ -ms-transform-origin:50% 44% /* IE 9 */
+}
+
+@-moz-keyframes spin {
+ from {
+ -moz-transform: rotate(0deg);
+ }
+ to {
+ -moz-transform: rotate(360deg);
+ }
+}
+
+@-webkit-keyframes spin {
+ from {
+ -webkit-transform: rotate(0deg);
+ }
+ to {
+ -webkit-transform: rotate(360deg);
+ }
+}
+
+@keyframes spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.icon-refresh:before {
+ font-family: icomoon;
+ content: '\e936';
+}
+
+.row{
+ max-width: 1500px;
+}
+
+.red {
+ color: red;
+}
+
+.border-not-ok {
+ border : 2px solid red;
+}
+
+.border-is-ok {
+ border : 2px solid #2fcc66;
+}
+
+
+.component-name {
+ min-width: 100px;
+ vertical-align: middle;
+ text-align: center;
+ background: #f5f5f5;
+ border-right: unset;
+}
+
+.component-metadata-cell {
+ border-left: unset;
+}
+
+.component-metadata {
+ white-space: pre-wrap;
+ background-color: unset;
+ border: unset;
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+}
+
+
+.table-bordered {
+ margin-top: 10px;
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ overflow-x: auto;
+ display: block;
+ color: #5A5A5A;
+ border: none;
+ border-spacing: 0px 3px;
+ border-collapse: separate;
+}
diff --git a/vid-webpack-master/src/app/healthStatus/health-status.component.ts b/vid-webpack-master/src/app/healthStatus/health-status.component.ts
new file mode 100644
index 000000000..6a9ddfdd7
--- /dev/null
+++ b/vid-webpack-master/src/app/healthStatus/health-status.component.ts
@@ -0,0 +1,42 @@
+import { Component, OnInit } from '@angular/core';
+import {ExternalComponentStatus} from "../shared/models/externalComponentStatus";
+import {HealthStatusService} from "../shared/server/healthStatusService/health-status.service";
+
+@Component({
+ selector: 'app-health-status',
+ templateUrl: './health-status.component.html',
+ styleUrls: ['./health-status.component.scss']
+})
+export class HealthStatusComponent implements OnInit {
+ private componentStatuses: Array<ExternalComponentStatus> = [];
+ private dataIsReady: boolean;
+ private lastUpdatedDate: Date;
+
+ constructor(private _healthStatusService: HealthStatusService) {
+ }
+
+
+ ngOnInit() {
+ this.refreshData();
+ }
+
+ refreshData(): void {
+ this.dataIsReady = false;
+ this._healthStatusService.getProbe()
+ .subscribe((res: Array<ExternalComponentStatus>) => {
+ this.componentStatuses = res;
+ this.dataIsReady = true;
+ this.lastUpdatedDate = new Date();
+ })
+ }
+
+ getMetadata(status : ExternalComponentStatus):string {
+ let metadata = status.metadata;
+ delete metadata.rawData;
+ return metadata;
+ }
+
+ isAvailable(componentStatus: ExternalComponentStatus) {
+ return componentStatus.available;
+ }
+}
diff --git a/vid-webpack-master/src/app/home/home.component.e2e-spec.js b/vid-webpack-master/src/app/home/home.component.e2e-spec.js
new file mode 100644
index 000000000..41203f9d8
--- /dev/null
+++ b/vid-webpack-master/src/app/home/home.component.e2e-spec.js
@@ -0,0 +1,13 @@
+describe('Home', function () {
+
+ beforeEach(function () {
+ browser.get('/');
+ });
+
+ it('should have <my-home>', function () {
+ var home = element(by.css('vid-app my-home'));
+ expect(home.isPresent()).toEqual(true);
+ expect(home.getText()).toEqual("Home Works!");
+ });
+
+});
diff --git a/vid-webpack-master/src/app/home/home.component.html b/vid-webpack-master/src/app/home/home.component.html
new file mode 100644
index 000000000..604d9e1d0
--- /dev/null
+++ b/vid-webpack-master/src/app/home/home.component.html
@@ -0,0 +1,3 @@
+<p>
+ Home Works!
+</p>
diff --git a/vid-webpack-master/src/app/home/home.component.scss b/vid-webpack-master/src/app/home/home.component.scss
new file mode 100644
index 000000000..5db1e17a3
--- /dev/null
+++ b/vid-webpack-master/src/app/home/home.component.scss
@@ -0,0 +1,4 @@
+// component styles are encapsulated and only applied to their components
+* {
+ color: #FFEF00;
+}
diff --git a/vid-webpack-master/src/app/home/home.component.ts b/vid-webpack-master/src/app/home/home.component.ts
new file mode 100644
index 000000000..1adaf0ebf
--- /dev/null
+++ b/vid-webpack-master/src/app/home/home.component.ts
@@ -0,0 +1,30 @@
+import { Component, OnInit } from '@angular/core';
+import { SdcService } from '../services/sdc.service';
+import { DataService } from '../services/data.service';
+
+@Component({
+ selector: 'my-home',
+ templateUrl: './home.component.html',
+ styleUrls: ['./home.component.scss'],
+ providers: [SdcService, DataService]
+})
+export class HomeComponent implements OnInit {
+
+ constructor(private _sdcService: SdcService) {
+ // Do stuff
+ }
+
+ ngOnInit() {
+ console.log('Hello Home');
+ console.log('getServicesModels: ');
+ this._sdcService.getServicesModels().subscribe(
+ // onNext() function
+ value => console.log('value is ', value),
+ // onError() function
+ error => console.log('error is ', error),
+ // onComplete() function
+ () => console.log('completed')
+ );
+ }
+
+}
diff --git a/vid-webpack-master/src/app/instantiationStatus/InstantiationStatus.module.ts b/vid-webpack-master/src/app/instantiationStatus/InstantiationStatus.module.ts
new file mode 100644
index 000000000..01db0f187
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/InstantiationStatus.module.ts
@@ -0,0 +1,33 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { InputsModule } from '../modules/inputs.module';
+import { DataTableModule } from 'angular2-datatable';
+import { BootstrapModalModule } from 'ng2-bootstrap-modal';
+import { TooltipModule } from 'ngx-tooltip';
+import { InstantiationStatusComponent } from './instantiationStatus.component';
+import { InstantiationStatusComponentService } from './instantiationStatus.component.service';
+import { SharedModule } from '../shared/shared.module';
+import { AngularSvgIconModule } from 'angular-svg-icon';
+import { ContextMenuModule, ContextMenuService } from 'ngx-contextmenu';
+import {ModalModule, PopoverModule} from 'ngx-bootstrap';
+import {AuditInfoModalComponent} from "./auditInfoModal/auditInfoModal.component";
+
+@NgModule({
+ imports: [
+ CommonModule,
+ FormsModule,
+ ReactiveFormsModule,
+ BootstrapModalModule,
+ DataTableModule,
+ TooltipModule,
+ ModalModule,
+ InputsModule,
+ AngularSvgIconModule,
+ ContextMenuModule,
+ SharedModule.forRoot(),
+ PopoverModule.forRoot()],
+ declarations: [InstantiationStatusComponent, AuditInfoModalComponent],
+ providers: [InstantiationStatusComponentService, ContextMenuService]
+})
+export class InstantiationStatusModule { }
diff --git a/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.html b/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.html
new file mode 100644
index 000000000..9386af347
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.html
@@ -0,0 +1,84 @@
+<div class="modal fade" bsModal #auditInfoModal="bs-modal" [config]="{backdrop: 'static'}"
+ tabindex="-1" role="dialog" aria-labelledby="dialog-static-name">
+ <div id="audit-info-modal" class="">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" (click)="onCancelClick()">&times;</button>
+ <span [attr.data-tests-id]="'audit-info-title'" class="modal-title">{{title}}</span>
+ </div>
+ <div class="modal-body row">
+ <div class="col-md-4 left-panel">
+ <div id="service-model-name" class="row">SERVICE MODEL: {{serviceModelName}}</div>
+ <div class="row service-model">
+ <model-information [modelInformationItems]="modelInfoItems"></model-information>
+ </div>
+ </div>
+ <div class="col-md-8 right-panel">
+ <div class="row"><span class="table-title">VID status</span></div>
+ <div class="row">
+ <table id="service-instantiation-audit-info-vid" class="table table-bordered">
+ <thead class="thead-dark">
+ <tr class="row">
+ <th class="col-md-4" scope="col">Status</th>
+ <th class="col-md-4" scope="col">Status time</th>
+ <th class="col-md-4" scope="col">Final</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="row" *ngFor="let data of vidInfoData">
+ <td class="col-md-4" id="vidJobStatus" [attr.data-tests-id]="'vidJobStatus'">
+ <custom-ellipsis [id]="data?.jobStatus" [value]="data?.jobStatus | capitalizeAndFormat"></custom-ellipsis>
+ </td>
+ <td class="col-md-4" id="vidStatusTime">
+ <custom-ellipsis [id]="data?.vidCreated"
+ [value]="data?.createdDate | date:'MMM dd, yyyy HH:mm'"></custom-ellipsis>
+ </td>
+ <td class="col-md-4" id="vidFinalStatus">
+ <custom-ellipsis [id]="data?.final"
+ [value]="data?.final ? 'Yes' : 'No'"></custom-ellipsis>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="no-result" *ngIf="!isLoading && vidInfoData?.length == 0">There is no data.</div>
+ </div>
+
+ <div class="row"><span class="table-title">MSO status</span></div>
+ <table id="service-instantiation-audit-info-mso" class="table table-bordered">
+ <thead class="thead-dark row">
+ <tr class="row">
+ <th class="col-md-3" scope="col">Request ID</th>
+ <th class="col-md-3" scope="col">Status</th>
+ <th class="col-md-3" scope="col">Status time</th>
+ <th class="col-md-3" scope="col">Additional info</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="row" *ngFor="let data of msoInfoData">
+ <td class="col-md-3" id="msoRequestId">
+ <custom-ellipsis [id]="data?.requestId" [value]="data?.requestId"></custom-ellipsis>
+ </td>
+ <td class="col-md-3" id="msoJobStatus">
+ <custom-ellipsis [id]="data?.jobStatus" [value]="data?.jobStatus | capitalizeAndFormat"></custom-ellipsis>
+ </td>
+ <td class="col-md-3" id="msoStatusTime">
+ <custom-ellipsis [id]="data?.vidCreated"
+ [value]="data?.createdDate | date:'MMM dd, yyyy HH:mm'"></custom-ellipsis>
+ </td>
+ <td class="col-md-3" id="msoAdditionalInfo">
+ <custom-ellipsis [id]="data?.additionalInfo" [value]="data?.additionalInfo"></custom-ellipsis>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="no-result" *ngIf="!isLoading && msoInfoData?.length == 0">There is no data.</div>
+ </div>
+ </div>
+ <div class="modal-footer row">
+ <button id="cancelButton" type="button" class="btn btn-default cancel" (click)="onCancelClick()">
+ Close
+ </button>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.scss b/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.scss
new file mode 100644
index 000000000..27b271496
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.scss
@@ -0,0 +1,159 @@
+.templatebody.modal-open{
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000;
+ opacity: 0.5;
+}
+.modal{
+
+ #audit-info-modal {
+
+ .modal-content{
+ border-radius: 0px;
+ border: none;
+ .modal-header{
+ background: #009FDB;
+ font-size: 24px;
+ color: #ffffff;
+ .close{
+ font-size: 32px;
+ font-weight: 200;
+ color: #ffffff;
+ text-shadow: none;
+ filter: none;
+ opacity: 1;
+ &:hover{
+ color: #d2d2d2;
+ }
+ }
+ .modal-title{
+
+ }
+ }
+ .modal-body{
+ padding: 0px;
+ margin: 0px;
+ display: flex;
+ .left-panel{
+ background: #f2f2f2;
+ border-right: 1px solid #D2D2D2;
+ padding-right: 0px;
+ .row:first-child{
+ border-bottom: 1px solid #D2D2D2;
+ height: 50px;
+ font-size: 12px;
+ line-height: 50px;
+ padding-left: 30px;
+ font-weight: 700;
+ margin-right: 0px;
+ }
+ .service-model{
+ padding-left: 30px;
+ padding-top: 15px;
+ }
+ }
+ .right-panel{
+ padding: 30px 30px 15px 30px;
+ .row{
+ margin: 0px;
+ }
+ .table-title{
+ font-size: 12px;
+ text-transform: uppercase;
+ font-weight: bold;
+ }
+ .no-result{
+ margin-bottom: 20px;
+ text-align: center;
+ border: 1px solid #d2d2d2;
+ padding: 20px;
+ margin-top: -23px;
+ }
+
+ .table-bordered{
+ width: 100%;
+ margin-top: 10px;
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ overflow-x: auto;
+ display: block;
+ color: #5A5A5A;
+
+ thead {
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ display: block;
+ background: rgb(242, 242, 242);
+ border-bottom: 1px solid #d2d2d2;
+ tr {
+ display: flex;
+ th {
+ flex-grow: 1;
+ border-right: 1px solid #d2d2d2;
+ &:last-child{
+ border-right: none;
+ }
+ }
+ }
+ }
+
+ tbody {
+ border: none !important;
+ max-height: 152px;
+ display: block;
+
+ tr {
+ display: flex;
+ border-bottom: 1px solid #d2d2d2;
+ &:last-child{
+ border-bottom: none;
+ }
+ td {
+ border: none;
+ border-right: 1px solid #d2d2d2;
+ &:last-child{
+ border-right: none;
+ }
+ }
+ }
+ }
+
+ th {
+ background: #f2f2f2;
+ font-family: OpenSans-Semibold;
+ color: #000000;
+ font-weight: bold;
+ border: none;
+ }
+
+ tr.odd {
+ background-color: rgb(242, 242, 242);
+ }
+
+ tr:hover {
+ background: #e1e1e1;
+ }
+ }
+ }
+ }
+ .modal-footer{
+ margin: 0px;
+ .cancel{
+ width: 120px;
+ height: 36px;
+ background: #009fdb;
+ border-radius: 2px;
+ font-family: OpenSans-Regular;
+ font-size: 14px;
+ color: #ffffff;
+ line-height: 16px;
+ }
+ }
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.service.ts b/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.service.ts
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.service.ts
diff --git a/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.ts b/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.ts
new file mode 100644
index 000000000..1cff97f5b
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/auditInfoModal/auditInfoModal.component.ts
@@ -0,0 +1,83 @@
+import {Component, ViewChild} from '@angular/core';
+import {Subject} from 'rxjs/Subject';
+import {ModalDirective} from 'ngx-bootstrap'
+import {Constants} from '../../shared/utils/constants';
+import {ModelInformationItem} from '../../shared/components/model-information/model-information.component';
+import {ServiceModel} from '../../shared/models/serviceModel';
+import {ServiceInfoService} from '../../shared/server/serviceInfo/serviceInfo.service';
+import {ServiceInfoModel} from '../../shared/server/serviceInfo/serviceInfo.model';
+import {AuditStatus} from '../../shared/server/serviceInfo/AuditStatus.model';
+import {IframeService} from "../../shared/utils/iframe.service";
+
+@Component({
+ selector: 'audit-info-modal',
+ templateUrl: './auditInfoModal.component.html',
+ styleUrls: ['./auditInfoModal.component.scss']
+})
+export class AuditInfoModalComponent {
+ static openModal: Subject<ServiceInfoModel> = new Subject<ServiceInfoModel>();
+ @ViewChild('auditInfoModal') public auditInfoModal: ModalDirective;
+ title: string = Constants.AuditInfoModal.TITLE;
+ modelInfoItems: Array<ModelInformationItem> = [];
+ serviceModel: ServiceModel;
+ serviceModelName: string;
+ vidInfoData: Array<AuditStatus> = [];
+ msoInfoData: Array<AuditStatus> = [];
+ parentElementClassName = 'content';
+ isLoading = true;
+
+ constructor(private _serviceInfoService: ServiceInfoService, private _iframeService : IframeService) {
+ AuditInfoModalComponent.openModal.subscribe((jobData: ServiceInfoModel) => {
+ this.initializeProperties();
+ if (jobData) {
+ this.openAuditInfoModal(jobData);
+ _iframeService.addClassOpenModal(this.parentElementClassName);
+ this.serviceModelName = jobData.serviceModelName ? jobData.serviceModelName : '';
+ this.auditInfoModal.show();
+ } else {
+ _iframeService.removeClassCloseModal(this.parentElementClassName);
+ this.auditInfoModal.hide();
+ }
+ })
+ }
+
+ initializeProperties() : void {
+ this.modelInfoItems = null;
+ this.vidInfoData = [];
+ this.msoInfoData = [];
+ this.isLoading = true;
+ }
+
+ openAuditInfoModal(jobData: ServiceInfoModel): void {
+ this.modelInfoItems = this.createModelInformationItems(jobData);
+ this.initAuditInfoData(jobData['jobId']);
+ this.auditInfoModal.show();
+ }
+
+ initAuditInfoData(jobId: string) {
+ this._serviceInfoService.getJobAuditStatus(jobId)
+ .subscribe((res: Array<Array<AuditStatus>>) => {
+ this.vidInfoData = res[0];
+ this.msoInfoData = res[1];
+ this.isLoading = false;
+ });
+ }
+
+ createModelInformationItems(serviceModel: ServiceInfoModel): Array<ModelInformationItem> {
+ return [
+ new ModelInformationItem('Subscriber name', 'subscriberName', [serviceModel.subscriberName]),
+ new ModelInformationItem('Service type', 'serviceType', [serviceModel.serviceType]),
+ new ModelInformationItem('Service model version', 'serviceModelVersion', [serviceModel.serviceModelVersion]),
+ new ModelInformationItem('Service instance name', 'serviceInstanceName', [serviceModel.serviceInstanceName], '', true),
+ new ModelInformationItem('Service instance ID', 'serviceInstanceId', [serviceModel.serviceInstanceId]),
+ new ModelInformationItem('Requestor User ID', 'userId', [serviceModel.userId]),
+ ];
+ }
+
+ onCancelClick() {
+ this._iframeService.removeClassCloseModal(this.parentElementClassName);
+ this.initializeProperties();
+ this.auditInfoModal.hide();
+ }
+}
+
diff --git a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.html b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.html
new file mode 100644
index 000000000..e0641d03b
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.html
@@ -0,0 +1,100 @@
+<div class="row">
+ <div class="instantiation-status-header">
+ <div>
+ <div class="row" style="margin-left: 0;">
+ <div>
+ <span class="title">Instantiation Status</span>
+ <span class="icon-info"
+ triggers="mouseenter:mouseleave"
+ popover="This table presents all the instantiation requests you made that are waiting, during or finished instantiating. You may see others requests by removing the Show only my requests checkmark."
+ placement="bottom"></span>
+
+ </div>
+ <div class="lastUpdate">
+ <div style="float: left;margin-top: 3px;"><span>Last update: {{lastUpdatedDate | date:'MMM. dd, yyyy | HH:mm'}}</span></div>
+ <div id="refresh-btn" class="refresh-btn" [ngClass]="{'spin' : !dataIsReady}" (click)="deactivateInterval(); refreshData(); activateInterval();">
+ <span class="icon-refresh"></span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="instantiation-status-data table-responsive">
+ <table id="instantiation-status" class="table table-bordered">
+ <thead class="thead-dark">
+ <tr>
+ <th scope="col" class="smallTd">User ID</th>
+ <th scope="col" class="normal">Model Name</th>
+ <th scope="col" class="normal">Instance Name</th>
+ <th scope="col" class="smallTd">Model version</th>
+ <th scope="col" class="normal">Subscriber</th>
+ <th scope="col" class="mediumTd">Service Type</th>
+ <th scope="col" class="normal">Region</th>
+ <th scope="col" class="mediumTd">Tenant</th>
+ <th scope="col" class="mediumTd">AIC Zone</th>
+ <th scope="col" class="mediumTd">Project</th>
+ <th scope="col" class="mediumTd">Owning entity</th>
+ <th scope="col" class="smallTd">Pause</th>
+ <th scope="col" class="mediumTd">Date</th>
+ <th scope="col" class="last">Status</th>
+ </tr>
+ </thead>
+ <tbody >
+ <tr *ngFor="let data of serviceInfoData; let i = index" [ngClass]="{'odd' : data.serviceIndex%2 == 1}" [id]="data.jobId" (mouseenter)="currentJobId = data?.jobId">
+ <td class="smallTd" id="userId"><custom-ellipsis [id]="data.userId" [value]="data.userId"></custom-ellipsis></td>
+ <td class="normal" id="serviceModelName"><custom-ellipsis [id]="data.serviceModelName" [value]="data.serviceModelName"></custom-ellipsis></td>
+ <td class="normal" id="serviceInstanceName"><custom-ellipsis [id]="data.serviceInstanceName" [value]="data.serviceInstanceName"></custom-ellipsis></td>
+ <td class="smallTd" id="serviceModelVersion"><custom-ellipsis [id]="data.serviceModelVersion" [value]="data.serviceModelVersion"></custom-ellipsis></td>
+ <td class="normal" id="subscriberName"><custom-ellipsis [id]="data.subscriberName" [value]="data.subscriberName"></custom-ellipsis></td>
+ <td class="mediumTd" id="serviceType"><custom-ellipsis [id]="data.serviceType" [value]="data.serviceType"></custom-ellipsis></td>
+ <td class="normal" id="regionId"><custom-ellipsis [id]="data.regionId" [value]="data.regionId"></custom-ellipsis></td>
+ <td class="mediumTd" id="tenantName"><custom-ellipsis [id]="data.tenantName" [value]="data.tenantName"></custom-ellipsis></td>
+ <td class="mediumTd" id="aicZoneName"><custom-ellipsis [id]="data.aicZoneName" [value]="data.aicZoneName"></custom-ellipsis></td>
+ <td class="mediumTd" id="project"><custom-ellipsis [id]="data.project" [value]="data.project"></custom-ellipsis></td>
+ <td class="mediumTd" id="owningEntityName"><custom-ellipsis [id]="data.owningEntityName" [value]="data.owningEntityName"></custom-ellipsis></td>
+ <td class="smallTd" id="pause"><custom-ellipsis [id]="data.pause" [value]="data.pause"></custom-ellipsis></td>
+ <td class="mediumTd" id="created"><custom-ellipsis [id]="data.created" [value]="data.created | date:'MMM. dd, yyyy HH:mm'"></custom-ellipsis></td>
+ <td class="last" id="jobStatus" [ngClass]="data.jobStatus">
+ <custom-popover [value]="data.serviceStatus.tooltip" style="float: left;">
+ <svg-icon id="jobStatusIcon-{{i}}" (click)="auditInfo(data)" svg-directive [fill]="data.serviceStatus.color" [widthViewBox]="27" [heightViewBox]="27"
+ src="./assets/img/{{data.serviceStatus.iconClassName}}.svg"></svg-icon>
+ </custom-popover>
+ <div class="menu-div" (click)="onContextMenu($event, data); currentJobId = data.jobId">
+ <span class="icon-menu"></span>
+ <context-menu>
+ <ng-template contextMenuItem (execute)="open($event?.item)" [enabled]="isOpenVisible">
+ <div [attr.data-tests-id]="'context-menu-open'">
+ <span class="context-menu-icon"><i class="fa fa-external-link" aria-hidden="true"></i></span>
+ Open
+ </div>
+ </ng-template>
+ <ng-template contextMenuItem (execute)="auditInfo($event?.item)">
+ <div [attr.data-tests-id]="'context-menu-audit-info'">
+ <span class="context-menu-icon audit-icon"><i class="fa fa-info-circle" aria-hidden="true"></i></span>
+ Audit info
+ </div>
+ </ng-template>
+ <ng-template contextMenuItem let-item (execute)="deleteItem($event?.item)" [enabled]="isDeleteEnabled">
+ <div [attr.data-tests-id]="'context-menu-delete'">
+ <span class="context-menu-icon"><i class="fa fa-trash-o" aria-hidden="true"></i></span>
+ Delete
+ </div>
+ </ng-template>
+ <ng-template contextMenuItem let-item (execute)="hideItem($event?.item)" [enabled]="isHideEnabled">
+ <div [attr.data-tests-id]="'context-menu-hide'">
+ <span class="context-menu-icon"><i class="fa fa-eye-slash" aria-hidden="true"></i></span>
+ Hide request
+ </div>
+ </ng-template>
+ </context-menu>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <audit-info-modal></audit-info-modal>
+</div>
+
+
+
diff --git a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.scss b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.scss
new file mode 100644
index 000000000..65c2400a3
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.scss
@@ -0,0 +1,277 @@
+
+.last {
+ position: sticky;
+ background: #f8f8f8;
+ right: 0;
+ padding-left: 15px;
+ padding-right: 15px;
+ width: 100px !important;
+ max-width: 100px !important;
+ min-width: 85px;
+}
+
+div.dataTables_wrapper {
+ width: 800px;
+ margin: 0 auto;
+}
+
+.row {
+ margin-left: 15px;
+ margin-right: 15px;
+}
+
+.instantiation-status-header {
+ margin-top: 30px;
+ .title {
+ font-family: OpenSans-Semibold;
+ font-size: 24px;
+ color: #4A4A4A;
+ float: left;
+ }
+
+ .info {
+ width: 18px;
+ height: 18px;
+ border: 0;
+ background-size: auto 100%;
+ cursor: pointer;
+ float: left;
+ margin: 10px;
+ }
+
+ .refresh-btn {
+ float: left;
+ margin-top: 6px;
+ margin-left: 10px;
+ cursor: pointer;
+ }
+
+ .lastUpdate {
+ margin-top: 5px;
+ padding-top: 0px;
+ font-size: 15px;
+ border-left: 1px solid black;
+ float: left;
+ padding-left: 10px;
+ color: gray;
+ height: 26px;
+ }
+
+ .refreshBtn {
+ width: 18px;
+ height: 18px;
+ border: 0;
+ background-size: auto 100%;
+ outline: none;
+ margin-left: 10px;
+ background: transparent;
+ }
+
+ svg-icon use {
+ fill: #0000ff !important;
+ }
+
+ .sub-title {
+ font-family: OpenSans-Semibold;
+ font-size: 14px;
+ color: #4A4A4A;
+ margin-left: 0;
+ }
+}
+
+.instantiation-status-data {
+ table {
+ width: 100%;
+ margin-top: 30px;
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ overflow-x: auto;
+ display: block;
+ color: #5A5A5A;
+
+ }
+
+ thead {
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ display: block;
+ }
+
+ thead th.normal, tbody td.normal {
+ min-width: 200px !important;
+ max-width: 200px;
+ }
+
+ thead th.smallTd ,tbody td.smallTd {
+ max-width: 100px !important;
+ min-width: 100px !important;
+ }
+
+ thead th.mediumTd ,tbody td.mediumTd {
+ max-width: 150px !important;
+ min-width: 150px !important;
+ }
+
+ tbody {
+ border: none !important;
+ max-height: 500px;
+ display: block;
+ }
+
+ th {
+ background: #f2f2f2;
+ font-family: OpenSans-Semibold;
+ color: #5A5A5A;
+ font-weight: bold;
+ }
+ .menu-div {
+ float: right;
+ border-left: 1px solid gray;
+ height: 23px;
+ }
+
+ tr.odd {
+ background-color: rgb(242, 242, 242);
+ }
+
+ tr:hover {
+ background: #e1e1e1;
+ }
+
+ thead {
+ background: rgb(242, 242, 242);
+ }
+
+ td#jobStatus {
+ cursor: pointer;
+ box-shadow: -2px 1px 5px -2px #aaa;
+ }
+}
+
+
+.loader {
+ border: 5px solid #f3f3f3;
+ border-radius: 50%;
+ border-top: 5px solid #3498db;
+ width: 170px;
+ height: 170px;
+ -webkit-animation: spin 2s linear infinite;
+ animation: spin 2s linear infinite;
+ position: absolute;
+ left: 50%;
+ right: 50%;
+ top: 50%;
+}
+
+/* Safari */
+@-webkit-keyframes spin {
+ 0% { -webkit-transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(360deg); }
+}
+
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+
+.spin {
+ -webkit-animation: spin .4s infinite linear;
+ -moz-animation: spin .4s infinite linear;
+ -o-animation: spin .4s infinite linear;
+ animation: spin .4s infinite linear;
+ -webkit-transform-origin: 50% 44%;
+ transform-origin:50% 44%;
+ -ms-transform-origin:50% 44% /* IE 9 */
+}
+
+@-moz-keyframes spin {
+ from {
+ -moz-transform: rotate(0deg);
+ }
+ to {
+ -moz-transform: rotate(360deg);
+ }
+}
+
+@-webkit-keyframes spin {
+ from {
+ -webkit-transform: rotate(0deg);
+ }
+ to {
+ -webkit-transform: rotate(360deg);
+ }
+}
+
+@keyframes spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.icon-refresh:before {
+ font-family: icomoon;
+ content: '\e936';
+}
+
+.icon-info {
+ float: left;
+ margin-top: 10px;
+ margin-left: 10px;
+ font-size: 17px;
+ margin-right: 10px
+}
+
+.icon-info:before {
+ font-family: icomoon;
+ content: '\e91f';
+}
+
+.context-menu-icon{
+ width: 25px;
+ float: left;
+}
+
+.icon-x:before {
+ font-family: icomoon;
+ content: '\e93d';
+}
+
+.icon-inprogress:before {
+ font-family: icomoon;
+ content: '\e899';
+}
+
+.icon-success_o:before {
+ font-family: icomoon;
+ content: '\e934';
+}
+
+.icon-menu:before {
+ font-family: icomoon;
+ content: '\e924';
+ font-size: 22px;
+}
+
+.icon-X_o:before {
+ font-family: icomoon;
+ content: '\e93d';
+ color: #D02B2B;
+}
+
+
+.icon-inprogress:before {
+ font-family: icomoon;
+ content: '\e941';
+ color: #009FDB;
+}
+
+.status-icon {
+ font-size: 20px;
+ margin-top: 0px;
+ height: 0;
+}
diff --git a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.service.spec.ts b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.service.spec.ts
new file mode 100644
index 000000000..c9f434e99
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.service.spec.ts
@@ -0,0 +1,278 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {
+ INPROGRESS,
+ InstantiationStatusComponentService,
+ PAUSE,
+ PENDING,
+ ServiceStatus,
+ STOPED,
+ SUCCESS_CIRCLE,
+ X_O
+} from './instantiationStatus.component.service';
+import {ServiceInfoModel} from '../shared/server/serviceInfo/serviceInfo.model';
+import { Observable } from 'rxjs/Rx';
+
+describe('Instantiation Status Service', () => {
+ let injector;
+ let service: InstantiationStatusComponentService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [],
+ providers: [InstantiationStatusComponentService]
+ });
+
+ injector = getTestBed();
+ service = injector.get(InstantiationStatusComponentService);
+ });
+
+ it('generateServiceInfoDataMapping should return mapping of arrays', (done: DoneFn) => {
+ let data : Array<ServiceInfoModel> = generateServiceInfoData();
+ let result = service.generateServiceInfoDataMapping(data);
+
+ expect(result['1']).toBeDefined();
+ expect(result['2']).toBeDefined();
+ expect(result['3']).toBeDefined();
+
+ expect(result['1'].length).toEqual(2);
+ expect(result['2'].length).toEqual(2);
+ expect(result['3'].length).toEqual(1);
+ done();
+ });
+
+ it('generateServiceInfoDataMapping if array is empty should return empty object', (done: DoneFn) => {
+ let result = service.generateServiceInfoDataMapping([]);
+
+ expect(result['1']).not.toBeDefined();
+ expect(result['2']).not.toBeDefined();
+ expect(result['3']).not.toBeDefined();
+ done();
+ });
+
+ it('convertObjectToArray', (done: DoneFn) => {
+
+ spyOn(service, 'convertObjectToArray').and.returnValue(
+ Observable.of([])
+ );
+
+ let data : Array<ServiceInfoModel> = generateServiceInfoData();
+ service.convertObjectToArray(data).subscribe((result) => {
+ expect(result).toBeDefined();
+ done();
+ });
+ });
+
+ it('getStatusTooltip should return status popover', (done: DoneFn) => {
+ let result : ServiceStatus = service.getStatus('pending');
+ expect(result.tooltip).toEqual('Pending: The service will automatically be sent for instantiation as soon as possible.');
+
+ result = service.getStatus('IN_PROGRESS');
+ expect(result.tooltip).toEqual('In-progress: the service is in process of instantiation.');
+
+ result = service.getStatus('PAUSED');
+ expect(result.tooltip).toEqual('Paused: Service has paused and waiting for your action.\n Select actions from the menu to the right.');
+
+ result = service.getStatus('FAILED');
+ expect(result.tooltip).toEqual('Failed: Service instantiation has failed, load the service to see the error returned.');
+
+ result = service.getStatus('COMPLETED');
+ expect(result.tooltip).toEqual('Completed successfully: Service is successfully instantiated.');
+
+ result = service.getStatus('STOPPED');
+ expect(result.tooltip).toEqual('Stopped: Due to previous failure, will not be instantiated.');
+ done();
+ });
+
+ it('getStatusTooltip should return correct icon per job status', (done: DoneFn) => {
+ let result : ServiceStatus = service.getStatus('pending');
+ expect(result.iconClassName).toEqual(PENDING);
+
+ result = service.getStatus('IN_PROGRESS');
+ expect(result.iconClassName).toEqual(INPROGRESS);
+
+ result = service.getStatus('PAUSED');
+ expect(result.iconClassName).toEqual(PAUSE);
+
+ result = service.getStatus('FAILED');
+ expect(result.iconClassName).toEqual(X_O);
+
+ result = service.getStatus('COMPLETED');
+ expect(result.iconClassName).toEqual(SUCCESS_CIRCLE);
+
+ result = service.getStatus('STOPPED');
+ expect(result.iconClassName).toEqual(STOPED);
+ done();
+ });
+
+
+ function generateServiceInfoData(){
+ return JSON.parse(JSON.stringify([
+ {
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "1",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "templateId": "1",
+ "hidden": false
+ },
+ {
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "1",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "templateId": "1",
+ "hidden": false
+ },
+ {
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "2",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "templateId": "2",
+ "hidden": false
+ },
+ {
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "2",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "templateId": "2",
+ "hidden": false
+ },
+ {
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "3",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "templateId": "3",
+ "hidden": false
+ }
+ ]));
+ }
+
+});
diff --git a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.service.ts b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.service.ts
new file mode 100644
index 000000000..293397cc9
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.service.ts
@@ -0,0 +1,75 @@
+import {Injectable} from '@angular/core';
+import {ServiceInfoModel, ServiceInfoUiModel} from '../shared/server/serviceInfo/serviceInfo.model';
+import {isNullOrUndefined} from "util";
+import { Observable } from 'rxjs/Observable';
+import 'rxjs/observable/of';
+
+export let PENDING : string = "pending";
+export let INPROGRESS : string = "inprogress";
+export let PAUSE : string = "pause";
+export let X_O : string = "X_o";
+export let SUCCESS_CIRCLE : string = "success+Circle";
+export let STOPED : string = "stoped";
+
+
+@Injectable()
+export class InstantiationStatusComponentService {
+ generateServiceInfoDataMapping(arr: Array<ServiceInfoModel>) : { [serviceInstanceId: string]: Array<ServiceInfoModel>}{
+ let serviceInfoData: { [serviceInstanceId: string]: Array<ServiceInfoModel>; } = {};
+ for(let item of arr){
+ if(isNullOrUndefined(serviceInfoData[item.templateId])){
+ serviceInfoData[item.templateId] = [item];
+ }else {
+ serviceInfoData[item.templateId].push(item);
+ }
+ }
+ return serviceInfoData;
+ }
+
+ convertObjectToArray(arr: Array<ServiceInfoModel>) : Observable<Array<ServiceInfoUiModel>>{
+ const obj = this.generateServiceInfoDataMapping(arr);
+ let index:number = 0;
+ let result = [];
+ for(let item in obj) {
+ obj[item].map(item => {
+ item['serviceStatus'] = this.getStatus(item.jobStatus);
+ item['serviceIndex'] = index;
+ });
+ index++;
+ result = result.concat(obj[item]);
+ }
+
+ console.log(result);
+ return Observable.of(result);
+ }
+
+ getStatus(status : string) : ServiceStatus {
+ switch(status.toUpperCase()) {
+ case 'PENDING' :
+ return new ServiceStatus(PENDING, '#009FDB', 'Pending: The service will automatically be sent for instantiation as soon as possible.');
+ case 'IN_PROGRESS' :
+ return new ServiceStatus(INPROGRESS, '#009FDB', 'In-progress: the service is in process of instantiation.');
+ case 'PAUSED' :
+ return new ServiceStatus(PAUSE, '#009FDB', 'Paused: Service has paused and waiting for your action.\n Select actions from the menu to the right.');
+ case 'FAILED' :
+ return new ServiceStatus(X_O, '#D02B2B', 'Failed: Service instantiation has failed, load the service to see the error returned.');
+ case 'COMPLETED' :
+ return new ServiceStatus(SUCCESS_CIRCLE, '#53AD15', 'Completed successfully: Service is successfully instantiated.');
+ case 'STOPPED' :
+ return new ServiceStatus(STOPED, '#D02B2B', 'Stopped: Due to previous failure, will not be instantiated.');
+ }
+ }
+}
+
+
+export class ServiceStatus {
+ iconClassName : string;
+ color : string;
+ tooltip : string;
+
+ constructor(_iconClassName : string, _color : string, _tooltip : string){
+ this.iconClassName = _iconClassName;
+ this.color = _color;
+ this.tooltip = _tooltip;
+ }
+}
diff --git a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.spec.ts b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.spec.ts
new file mode 100644
index 000000000..00b6a9945
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.spec.ts
@@ -0,0 +1,88 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {InstantiationStatusComponent} from './instantiationStatus.component';
+import {ServiceInfoService} from '../shared/server/serviceInfo/serviceInfo.service';
+import {InstantiationStatusComponentService} from './instantiationStatus.component.service';
+import { ContextMenuModule, ContextMenuService } from 'ngx-contextmenu';
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to';
+import { ConfigurationService } from '../services/configuration.service';
+import { LogService } from '../shared/utils/log/log.service';
+
+describe('Instantiation Status Component', () => {
+ let component: InstantiationStatusComponent;
+ let fixture: ComponentFixture<InstantiationStatusComponent>;
+ let enableDeleteItems = [
+ { jobStatus:"PENDING" },
+ { jobStatus:"STOPPED" }];
+ let disableDeleteItems = [
+ { jobStatus:"COMPLETED" },
+ { jobStatus:"FAILED" },
+ {jobStatus:"IN_PROGRESS"},
+ {jobStatus:"UnknownOne"}];
+
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule, ContextMenuModule, ScrollToModule.forRoot()],
+ providers: [ServiceInfoService, InstantiationStatusComponentService, ContextMenuService, ConfigurationService, LogService],
+ declarations: [InstantiationStatusComponent],
+ schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
+ }).compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(InstantiationStatusComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('component should initialize basic parameters', (done: DoneFn) => {
+ component.TIMER_TIME_IN_SECONDS = 2;
+ expect(component.TIMER_TIME_IN_SECONDS).toEqual(2);
+ expect(component.dataIsReady).toBeFalsy();
+ expect(component.lastUpdatedDate).toBeNull();
+ done();
+ });
+
+ it('component constructor should call activateInterval and ngOnInit', (done: DoneFn) => {
+ component.refreshData();
+ expect(component.dataIsReady).toBeFalsy();
+ done();
+ });
+
+ it('stopped and pending status isDeleteEnabled button should be enabled, not allowed delete statuses isDeleteEnabled button should be disabled', (done: DoneFn) => {
+ enableDeleteItems.forEach((item) => {
+ let isDeleteEnabled: boolean = component.isDeleteEnabled(item);
+ expect(isDeleteEnabled).toBeTruthy();
+ });
+
+ disableDeleteItems.forEach((item) => {
+ let isDeleteEnabled: boolean = component.isDeleteEnabled(item);
+ expect(isDeleteEnabled).toBeFalsy();
+ });
+ done();
+ });
+
+ it('[COMPLETED, FAILED, STOPPED] status isHideEnable button should be enabled, [IN_PROGRESS, PAUSE, PENDING] status isHideEnable button should be disabled', (done: DoneFn) => {
+ const enableHideItems = [
+ { jobStatus:"COMPLETED" },
+ { jobStatus:"FAILED" },
+ { jobStatus:"STOPPED" }];
+ enableHideItems.forEach((item) => {
+ let isDeleteEnabled: boolean = component.isHideEnabled(item);
+ expect(isDeleteEnabled).toBeTruthy();
+ });
+
+ const disableHideItems = [
+ { jobStatus:"IN_PROGRESS" },
+ { jobStatus:"PAUSE" },
+ { jobStatus:"PENDING" },
+ { jobStatus:"NOT_MATTER"}];
+ disableHideItems.forEach((item) => {
+ let isDeleteEnabled: boolean = component.isHideEnabled(item);
+ expect(isDeleteEnabled).toBeFalsy();
+ });
+ done();
+ });
+});
diff --git a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.ts b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.ts
new file mode 100644
index 000000000..ed45ce43c
--- /dev/null
+++ b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.ts
@@ -0,0 +1,145 @@
+import {AfterViewChecked, Component, ViewChild} from '@angular/core';
+import {ServiceInfoService} from '../shared/server/serviceInfo/serviceInfo.service';
+import {ServiceInfoModel} from '../shared/server/serviceInfo/serviceInfo.model';
+import {InstantiationStatusComponentService} from './instantiationStatus.component.service';
+import {ContextMenuComponent, ContextMenuService} from 'ngx-contextmenu';
+import {AuditInfoModalComponent} from "./auditInfoModal/auditInfoModal.component";
+import * as _ from 'lodash';
+import {ScrollToConfigOptions, ScrollToService} from '@nicky-lenaers/ngx-scroll-to';
+import {ConfigurationService} from "../services/configuration.service";
+import {LogService} from '../shared/utils/log/log.service';
+
+
+@Component({
+ selector : 'instantiation-status',
+ templateUrl : './instantiationStatus.component.html',
+ styleUrls : ['./instantiationStatus.component.scss']
+})
+export class InstantiationStatusComponent implements AfterViewChecked{
+
+
+ TIMER_TIME_IN_SECONDS : number = 0;
+ timer = null;
+ dataIsReady : boolean = false;
+ scroll : boolean = false;
+ lastUpdatedDate: Date = null;
+ currentJobId: string = null;
+ instantiationStatusComponentService: InstantiationStatusComponentService;
+ configurationService : ConfigurationService;
+ serviceInfoData: Array<ServiceInfoModel> = null;
+ @ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
+
+ constructor(private _serviceInfoService: ServiceInfoService,
+ private _instantiationStatusComponentService : InstantiationStatusComponentService,
+ private _contextMenuService: ContextMenuService,
+ private _configurationService : ConfigurationService,
+ private _scrollToService: ScrollToService,
+ private _logService : LogService) {
+ this.instantiationStatusComponentService = _instantiationStatusComponentService;
+ this.configurationService = this._configurationService;
+ this.configurationService.getConfiguration("refreshTimeInstantiationDashboard").subscribe(response => {
+ this.TIMER_TIME_IN_SECONDS = _.isNumber(response) ? response : 0;
+ this.activateInterval();
+ this.refreshData();
+ });
+ }
+
+ activateInterval() {
+ if (this.TIMER_TIME_IN_SECONDS > 0) {
+ this.timer = setInterval(() => {
+ this.refreshData();
+ }, this.TIMER_TIME_IN_SECONDS * 1000);
+ }
+ }
+
+ deactivateInterval() {
+ clearInterval(this.timer);
+ }
+
+ refreshData(): void {
+ this.dataIsReady = false;
+ this._serviceInfoService.getServicesJobInfo(true)
+ .subscribe((res: Array<ServiceInfoModel>) => {
+ this._instantiationStatusComponentService.convertObjectToArray(res).subscribe((res) => {
+ this._logService.info('refresh instantiation status table', res);
+ this.dataIsReady = true;
+ this.lastUpdatedDate = new Date();
+ if (!_.isEqual(this.serviceInfoData, res)) {
+ this.serviceInfoData = res;
+ this.scroll = true;
+ }
+ });
+ })
+ }
+
+ ngAfterViewChecked(){
+ if (this.scroll) {
+ this.scrollToElement();
+ this.scroll = false;
+ }
+ }
+
+
+
+ isDeleteEnabled(item):boolean {
+ return _.includes(['PENDING', 'STOPPED'], item.jobStatus);
+ }
+
+ deleteItem(item): void {
+ this._serviceInfoService.deleteJob(item.jobId).subscribe(() => {
+ this.refreshData();
+ });
+ }
+
+ hideItem(item): void {
+ this._serviceInfoService.hideJob(item.jobId).subscribe(() => {
+ this.refreshData();
+ });
+ }
+
+ auditInfo(jobData : ServiceInfoModel): void {
+ AuditInfoModalComponent.openModal.next(jobData);
+
+ }
+
+ isOpenVisible(item):boolean {
+ return _.includes(['COMPLETED', 'PAUSE'], item.jobStatus);
+ }
+
+ open(item): void {
+ let query =
+ `subscriberId=${item['subscriberName']}&` +
+ `serviceType=${item['serviceType']}&` +
+ `serviceInstanceId=${item['serviceInstanceId']}`;
+
+ window.parent.location.assign('../../serviceModels.htm#/instantiate?' + query);
+ }
+
+ public onContextMenu($event: MouseEvent, item: any): void {
+ this._contextMenuService.show.next({
+ contextMenu: this.contextMenu,
+ event: $event,
+ item: item,
+ });
+ $event.preventDefault();
+ $event.stopPropagation();
+ }
+
+ getImagesSrc(imageName : string) : string {
+ return './' + imageName + '.svg';
+ }
+
+ isHideEnabled(item: any):boolean {
+ return _.includes(['COMPLETED', 'FAILED', 'STOPPED'], item.jobStatus);
+ }
+ scrollToElement() {
+ if(this.currentJobId){
+ const config: ScrollToConfigOptions = {
+ target: this.currentJobId,
+ duration: 50,
+ offset: -35 //header height
+ };
+ this._scrollToService.scrollTo(config);
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/modules/inputs.module.ts b/vid-webpack-master/src/app/modules/inputs.module.ts
new file mode 100644
index 000000000..cb5f914cd
--- /dev/null
+++ b/vid-webpack-master/src/app/modules/inputs.module.ts
@@ -0,0 +1,20 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { DynamicInputsComponent } from '../components/dynamic-inputs/dynamic-inputs.component';
+import { AngularMultiSelectModule } from "angular2-multiselect-dropdown";
+import { DynamicInputLabelPipe } from '../shared/pipes/dynamicInputLabel/dynamic-input-label.pipe';
+
+
+@NgModule({
+ imports: [
+ CommonModule, FormsModule, ReactiveFormsModule, AngularMultiSelectModule
+ ],
+ providers: [],
+ declarations: [ DynamicInputLabelPipe, DynamicInputsComponent ],
+ entryComponents: [],
+ exports: [ DynamicInputLabelPipe, DynamicInputsComponent ]
+
+})
+
+export class InputsModule { }
diff --git a/vid-webpack-master/src/app/service.actions.ts b/vid-webpack-master/src/app/service.actions.ts
new file mode 100644
index 000000000..a62fec673
--- /dev/null
+++ b/vid-webpack-master/src/app/service.actions.ts
@@ -0,0 +1,197 @@
+import { Action, ActionCreator } from "redux";
+import { LcpRegionsAndTenants } from "./shared/models/lcpRegionsAndTenants";
+import { ServiceInstance } from "./shared/models/serviceInstance";
+import { SelectOptionInterface } from "./shared/models/selectOption";
+import { ServiceType } from "./shared/models/serviceType";
+import { VnfInstance } from "./shared/models/vnfInstance";
+
+export const UPDATE_MODEL = "[MODEL] Update";
+export const UPDATE_SERVICE_INSTANCE = "[SERVICE INSTANCE] Update";
+export const UPDATE_VNF_INSTANCE = "[VNF INSTANCE] Update";
+export const UPDATE_VF_MODULE = "[VF MODULE] Update";
+export const CREATE_VF_MODULE = "[VF MODULE] Create";
+
+export const UPDATE_LCP_REGIONS_AND_TENANTS = "[LCP_REGIONS_AND_TENANTS] Update";
+export const UPDATE_SUBSCRIBERS = "[SUBSCRIBERS] Update";
+export const UPDATE_PRODUCT_FAMILIES = "[PRODUCT_FAMILIES] Update";
+export const UPDATE_SERVICE_TYPES = "[SERVICE_TYPE] Update";
+export const UPDATE_AIC_ZONES = "[AIC_ZONES] Update";
+export const DELETE_SERVICE_INSTANCE = "[SERVICE_INSTANCE] Delete";
+export const DELETE_VNF_INSTANCE = "[VNF_INSTANCE] Delete";
+export const DELETE_VNF_MODULE_INSTANCE = "[VNF_MODULE_INSTANCE] Delete";
+export const UPDATE_CATEGORY_PARAMETERS = "[CATEGORY_PARAMETERS] Update";
+export const UPDATE_NETWORK_FUNCTION = "[UPDATE_NETWORK_FUNCTION] Update";
+export const UPDATE_USER_ID = "[UPDATE_USER_ID] Update";
+
+
+export interface UpdateServiceModelAction extends Action {
+ serviceHierarchy?: any;
+}
+
+export interface UpdateNetworkCollectionFunction extends Action {
+ networksAccordingToNetworkCollection: any;
+ network_function: any;
+}
+
+export interface UpdateServiceInstanceAction extends Action {
+ serviceUuid?: string;
+ serviceInstance?: ServiceInstance;
+}
+
+export interface UpdateVFModuleInstanceAction extends Action {
+ vfInstance: any;
+ vfId: string;
+ serviceUuid: string;
+}
+
+export interface CreateVFModuleInstanceAction extends Action {
+ vfInstance: any;
+ vfId: string;
+ serviceUuid: string;
+ index : number
+}
+
+export interface UpdateUserIdAction extends Action {
+ userId: string;
+}
+
+export interface UpdateVnfInstanceAction extends Action {
+ vnfInstance?: VnfInstance;
+ vnfModelName?: string;
+ serviceUuid?: string;
+}
+
+export interface UpdateLcpRegionsAndTenantsAction extends Action {
+ lcpRegionsAndTenants?: LcpRegionsAndTenants;
+}
+
+export interface UpdateSubscribersAction extends Action {
+ subscribers?: SelectOptionInterface[];
+}
+
+export interface UpdateProductFamiliesAction extends Action {
+ productFamilies?: SelectOptionInterface[];
+}
+
+export interface UpdateAicZonesAction extends Action {
+ aicZones?: SelectOptionInterface[];
+}
+
+export interface UpdateServiceTypesAction extends Action {
+ serviceTypes?: ServiceType[];
+ subscriberId: string;
+}
+
+export interface DeleteServiceInstanceAction extends Action {
+ serviceUuid?: string;
+}
+
+export interface DeleteVnfInstanceAction extends Action {
+ modelName?: string;
+ serviceModelId: string;
+}
+
+export interface DeleteVfModuleInstanceAction extends Action {
+ modelName?: string;
+ serviceModelId?: string;
+ vfName?: string;
+}
+
+export interface UpdateCategoryParametersAction extends Action {
+ categoryParameters?: string;
+}
+
+export const updateModel: ActionCreator<UpdateServiceModelAction> = serviceHierarchy => ({
+ type: UPDATE_MODEL,
+ serviceHierarchy: serviceHierarchy
+});
+
+export const updateServiceInstance: ActionCreator<UpdateServiceInstanceAction> = (serviceInstance, serviceUuid) => ({
+ type: UPDATE_SERVICE_INSTANCE,
+ serviceInstance: serviceInstance,
+ serviceUuid: serviceUuid
+});
+
+export const updateVFModuleInstance: ActionCreator<UpdateVFModuleInstanceAction> = (vfInstance, vfId, serviceUuid) => ({
+ type: UPDATE_VF_MODULE,
+ vfInstance: vfInstance,
+ vfId: vfId,
+ serviceUuid: serviceUuid
+})
+
+export const createVFModuleInstance: ActionCreator<CreateVFModuleInstanceAction> = (vfInstance, vfId, serviceUuid, index) => ({
+ type: CREATE_VF_MODULE,
+ vfInstance: vfInstance,
+ vfId: vfId,
+ serviceUuid: serviceUuid,
+ index : index
+})
+
+
+
+export const updateVNFInstance: ActionCreator<UpdateVnfInstanceAction> = (vnfInstance, vnfModelName, serviceUuid) => ({
+ type: UPDATE_VNF_INSTANCE,
+ vnfInstance: vnfInstance,
+ vnfModelName: vnfModelName,
+ serviceUuid: serviceUuid
+});
+
+export const updateLcpRegionsAndTenants: ActionCreator<UpdateLcpRegionsAndTenantsAction> = lcpRegionsAndTenants => ({
+ type: UPDATE_LCP_REGIONS_AND_TENANTS,
+ lcpRegionsAndTenants: lcpRegionsAndTenants
+});
+
+export const updateSubscribers: ActionCreator<UpdateSubscribersAction> = subscribers => ({
+ type: UPDATE_SUBSCRIBERS,
+ subscribers: subscribers
+});
+
+export const updateProductFamilies: ActionCreator<UpdateProductFamiliesAction> = productFamilies => ({
+ type: UPDATE_PRODUCT_FAMILIES,
+ productFamilies: productFamilies
+});
+
+export const updateAicZones: ActionCreator<UpdateAicZonesAction> = aicZones => ({
+ type: UPDATE_AIC_ZONES,
+ aicZones: aicZones
+});
+
+export const updateUserId: ActionCreator<UpdateUserIdAction> = userId => ({
+ type: UPDATE_USER_ID,
+ userId: userId
+});
+
+export const updateCategoryParameters: ActionCreator<UpdateCategoryParametersAction> = categoryParameters => ({
+ type: UPDATE_CATEGORY_PARAMETERS,
+ categoryParameters: categoryParameters
+});
+
+export const updateServiceTypes: ActionCreator<UpdateServiceTypesAction> = (serviceTypes, subscriberId) => ({
+ type: UPDATE_SERVICE_TYPES,
+ serviceTypes: serviceTypes,
+ subscriberId: subscriberId
+});
+
+export const updateNetworkCollectionFunction: ActionCreator<UpdateNetworkCollectionFunction> = (ncf, networksAccordingToNetworkCollection) => ({
+ type: UPDATE_NETWORK_FUNCTION,
+ networksAccordingToNetworkCollection: networksAccordingToNetworkCollection["results"],
+ network_function: ncf
+});
+
+export const deleteServiceInstance: ActionCreator<DeleteServiceInstanceAction> = serviceUuid => ({
+ type: DELETE_SERVICE_INSTANCE,
+ serviceUuid: serviceUuid
+});
+
+export const deleteVnfInstance: ActionCreator<DeleteVnfInstanceAction> = (modelName, serviceModelId) => ({
+ type: DELETE_VNF_INSTANCE,
+ modelName: modelName,
+ serviceModelId: serviceModelId
+});
+
+export const deleteVfModuleInstance: ActionCreator<DeleteVfModuleInstanceAction> = (modelName, serviceModelId, vfName) => ({
+ type: DELETE_VNF_MODULE_INSTANCE,
+ modelName: modelName,
+ serviceModelId: serviceModelId,
+ vfName: vfName
+});
diff --git a/vid-webpack-master/src/app/service.reducer.spec.ts b/vid-webpack-master/src/app/service.reducer.spec.ts
new file mode 100644
index 000000000..f734979ac
--- /dev/null
+++ b/vid-webpack-master/src/app/service.reducer.spec.ts
@@ -0,0 +1,286 @@
+import { LcpRegionsAndTenants } from './shared/models/lcpRegionsAndTenants';
+import { ServiceReducer, ServiceState } from './service.reducer';
+import { CategoryParams } from './shared/models/categoryParams';
+import {
+ DELETE_VNF_INSTANCE, DELETE_VNF_MODULE_INSTANCE, DeleteVfModuleInstanceAction,
+ DeleteVnfInstanceAction,
+ UPDATE_AIC_ZONES,
+ UPDATE_LCP_REGIONS_AND_TENANTS,
+ UPDATE_PRODUCT_FAMILIES,
+ UPDATE_SERVICE_INSTANCE,
+ UPDATE_SUBSCRIBERS,
+ UPDATE_USER_ID,
+ UPDATE_VNF_INSTANCE,
+ UpdateAicZonesAction,
+ UpdateProductFamiliesAction, UpdateServiceInstanceAction,
+ UpdateSubscribersAction, UpdateUserIdAction,
+ UpdateVnfInstanceAction
+} from './service.actions';
+import { VnfInstance } from './shared/models/vnfInstance';
+import { ServiceInstance } from './shared/models/serviceInstance';
+import { LcpRegion } from './shared/models/lcpRegion';
+import { Tenant } from './shared/models/tenant';
+import { SelectOption } from './shared/models/selectOption';
+
+
+const initialState: ServiceState = {
+ serviceHierarchy: {},
+ serviceInstance: {},
+ lcpRegionsAndTenants: new LcpRegionsAndTenants(),
+ subscribers: null,
+ productFamilies: null,
+ serviceTypes: {},
+ aicZones: null,
+ categoryParameters: new CategoryParams()
+};
+
+
+describe('service reducer', () => {
+ const userId: string = 'userId';
+ it('should handle initial state', () => {
+ expect(ServiceReducer(undefined, <any>{})).toEqual(initialState);
+ });
+
+ it('#UPDATE_USER_ID : should update userId ', (done: DoneFn) => {
+ expect(ServiceReducer(<any>{},
+ <UpdateUserIdAction>{
+ type: UPDATE_USER_ID,
+ userId: userId
+ }
+ )['userId']).toEqual(userId);
+ done();
+ });
+
+ it('#UPDATE_SERVICE_INSTANCE : should update service instance with service id ', (done: DoneFn) => {
+ const serviceUuid:string = 'serviceUuid';
+
+ let serviceInstanceObject : ServiceInstance = {
+ instanceName: 'instanceName',
+ isUserProvidedNaming: false,
+ globalSubscriberId: 'globalSubscriberId',
+ productFamilyId: 'productFamilyId',
+ subscriptionServiceType: 'subscriptionServiceType',
+ lcpCloudRegionId: 'lcpCloudRegionId',
+ tenantId: 'tenantId',
+ tenantName: 'tenantName',
+ aicZoneId: 'aicZoneId',
+ aicZoneName: 'aicZoneName',
+ projectName: 'projectName',
+ owningEntityId: 'owningEntityId',
+ owningEntityName: 'owningEntityName',
+ pause: false,
+ bulkSize: 1,
+ vnfs: {},
+ instanceParams : {},
+ rollbackOnFailure: false,
+ subscriberName: 'subscriberName'
+ };
+
+ let serviceState = ServiceReducer(<any>{serviceInstance : {}},
+ <UpdateServiceInstanceAction>{
+ type: UPDATE_SERVICE_INSTANCE,
+ serviceUuid: serviceUuid,
+ serviceInstance : serviceInstanceObject
+ }).serviceInstance['serviceUuid'];
+
+ expect(serviceState.instanceName).toEqual(serviceInstanceObject.instanceName);
+ expect(serviceState.isUserProvidedNaming).toEqual(serviceInstanceObject.isUserProvidedNaming);
+ expect(serviceState.globalSubscriberId).toEqual(serviceInstanceObject.globalSubscriberId);
+ expect(serviceState.productFamilyId).toEqual(serviceInstanceObject.productFamilyId);
+ expect(serviceState.subscriptionServiceType).toEqual(serviceInstanceObject.subscriptionServiceType);
+ expect(serviceState.lcpCloudRegionId).toEqual(serviceInstanceObject.lcpCloudRegionId);
+ expect(serviceState.tenantId).toEqual(serviceInstanceObject.tenantId);
+ expect(serviceState.tenantName).toEqual(serviceInstanceObject.tenantName);
+ expect(serviceState.aicZoneId).toEqual(serviceInstanceObject.aicZoneId);
+ expect(serviceState.aicZoneName).toEqual(serviceInstanceObject.aicZoneName);
+ expect(serviceState.projectName).toEqual(serviceInstanceObject.projectName);
+ expect(serviceState.owningEntityId).toEqual(serviceInstanceObject.owningEntityId);
+ expect(serviceState.owningEntityName).toEqual(serviceInstanceObject.owningEntityName);
+ expect(serviceState.pause).toEqual(serviceInstanceObject.pause);
+ expect(serviceState.bulkSize).toEqual(serviceInstanceObject.bulkSize);
+ expect(serviceState.vnfs).toEqual(serviceInstanceObject.vnfs);
+ expect(serviceState.instanceParams).toEqual(serviceInstanceObject.instanceParams);
+ expect(serviceState.rollbackOnFailure).toEqual(serviceInstanceObject.rollbackOnFailure);
+ expect(serviceState.subscriberName).toEqual(serviceInstanceObject.subscriberName);
+
+ done();
+ });
+
+ it('#UPDATE_VNF_INSTANCE : should update vnf instance with service id and vnfModelName ', (done: DoneFn) => {
+ let vnfInstanceObj : VnfInstance = {
+ instanceName: 'instanceName',
+ isUserProvidedNaming: false,
+ productFamilyId: 'productFamilyId',
+ lcpCloudRegionId: 'lcpCloudRegionId',
+ legacyRegion: 'legacyRegion',
+ tenantId: 'tenantId',
+ platformName: 'platformName',
+ lineOfBusiness: 'lineOfBusiness',
+ rollbackOnFailure: 'false',
+ vfModules: {}
+ };
+
+ let vnfState = ServiceReducer(<any>{serviceInstance : {
+ 'serviceUuid' : {
+ vnfs : {}
+ }
+ }},
+ <UpdateVnfInstanceAction>{
+ type: UPDATE_VNF_INSTANCE,
+ serviceUuid : 'serviceUuid',
+ vnfInstance: vnfInstanceObj,
+ vnfModelName : 'vnfModelName'
+ }).serviceInstance['serviceUuid'].vnfs['vnfModelName'];
+
+ expect(vnfState.instanceName).toEqual(vnfInstanceObj.instanceName);
+ expect(vnfState.isUserProvidedNaming).toEqual(vnfInstanceObj.isUserProvidedNaming);
+ expect(vnfState.productFamilyId).toEqual(vnfInstanceObj.productFamilyId);
+ expect(vnfState.lcpCloudRegionId).toEqual(vnfInstanceObj.lcpCloudRegionId);
+ expect(vnfState.legacyRegion).toEqual(vnfInstanceObj.legacyRegion);
+ expect(vnfState.tenantId).toEqual(vnfInstanceObj.tenantId);
+ expect(vnfState.platformName).toEqual(vnfInstanceObj.platformName);
+ expect(vnfState.lineOfBusiness).toEqual(vnfInstanceObj.lineOfBusiness);
+ expect(vnfState.vfModules).toEqual(vnfInstanceObj.vfModules);
+ expect(vnfState.rollbackOnFailure).toEqual(vnfInstanceObj.rollbackOnFailure);
+
+ done();
+ });
+
+ it('#UPDATE_LCP_REGIONS_AND_TENANTS : should update lcp region and tenants', (done: DoneFn) => {
+ let lcpRegionsAndTenantsObj = [
+ {
+ lcpRegionList : [
+ new LcpRegion({
+ "cloudRegionID" : 'cloudRegionID',
+ "is-permitted" : "is-permitted"
+ })
+ ],
+ lcpRegionsTenantsMap : {
+ "lcpRegion" : [new Tenant({
+ "tenantID" : "tenantID",
+ "tenantName" : "tenantName",
+ "is-permitted" : true
+ })]
+ }
+ }
+ ];
+ let lcpRegionsAndTenantsState = ServiceReducer(<any>{serviceInstance : {}},
+ <any>{
+ type: UPDATE_LCP_REGIONS_AND_TENANTS,
+ lcpRegionsAndTenants : lcpRegionsAndTenantsObj
+ })['lcpRegionsAndTenants'];
+
+ expect(lcpRegionsAndTenantsState).toBeDefined();
+ done();
+ });
+
+ it('#UPDATE_SUBSCRIBERS : should update subscribers', (done: DoneFn) => {
+ let subscribersList = [
+ new SelectOption({
+ id : 'id',
+ name : 'name',
+ isPermitted : false
+ })
+ ];
+ let subscribersState = ServiceReducer(<any>{serviceInstance : {}},
+ <UpdateSubscribersAction>{
+ type: UPDATE_SUBSCRIBERS,
+ subscribers : subscribersList
+ })['subscribers'];
+
+ expect(subscribersState).toBeDefined();
+ expect(subscribersState[0].id).toEqual(subscribersList[0].id);
+ expect(subscribersState[0].isPermitted).toEqual(subscribersList[0].isPermitted);
+ expect(subscribersState[0].name).toEqual(subscribersList[0].name);
+
+ done();
+ });
+
+ it('#UpdateProductFamiliesAction : should update product families', (done: DoneFn) => {
+ let productFamiliesObj = [
+ new SelectOption({
+ id : 'id',
+ name : 'name',
+ isPermitted : false
+ })
+ ];
+ let productFamiliesState = ServiceReducer(<any>{serviceInstance : {}},
+ <UpdateProductFamiliesAction>{
+ type: UPDATE_PRODUCT_FAMILIES,
+ productFamilies : productFamiliesObj
+ })['productFamilies'];
+
+ expect(productFamiliesState).toBeDefined();
+ expect(productFamiliesState[0].id).toEqual(productFamiliesObj[0].id);
+ expect(productFamiliesState[0].isPermitted).toEqual(productFamiliesObj[0].isPermitted);
+ expect(productFamiliesState[0].name).toEqual(productFamiliesObj[0].name);
+
+ done();
+ });
+
+ it('#UPDATE_AIC_ZONES : should update aic zones', (done: DoneFn) => {
+ let aicZonesObj = [
+ new SelectOption({
+ id : 'id',
+ name : 'name',
+ isPermitted : false
+ })
+ ];
+ let aicZonesState = ServiceReducer(<any>{serviceInstance : {}},
+ <UpdateAicZonesAction>{
+ type: UPDATE_AIC_ZONES,
+ aicZones : aicZonesObj
+ })['aicZones'];
+
+ expect(aicZonesState).toBeDefined();
+ expect(aicZonesState[0].id).toEqual(aicZonesObj[0].id);
+ expect(aicZonesState[0].isPermitted).toEqual(aicZonesObj[0].isPermitted);
+ expect(aicZonesState[0].name).toEqual(aicZonesObj[0].name);
+
+ done();
+ });
+
+ it('#DELETE_VNF_INSTANCE : should delete existing vnf', (done: DoneFn) => {
+ let state = ServiceReducer(<any>{serviceInstance : {
+ 'serviceModelId' : {
+ vnfs : {
+ 'modelName' : {}
+ }
+ }
+ }},
+ <DeleteVnfInstanceAction>{
+ type: DELETE_VNF_INSTANCE,
+ modelName : 'modelName',
+ serviceModelId : 'serviceModelId'
+ });
+
+ expect(state).toBeDefined();
+ expect(state.serviceInstance[ 'serviceModelId'].vnfs['modelName']).not.toBeDefined();
+ done();
+ });
+
+ it('#DELETE_VNF_MODULE_INSTANCE : should delete existing vnf module', (done: DoneFn) => {
+ let state = ServiceReducer(<any>{serviceInstance : {
+ 'serviceModelId' : {
+ vnfs : {
+ 'vfName' : {
+ vfModules : {
+ 'modelName' : {}
+ }
+ }
+ }
+ }
+ }},
+ <DeleteVfModuleInstanceAction>{
+ type: DELETE_VNF_MODULE_INSTANCE,
+ modelName : 'modelName',
+ vfName : 'vfName',
+ serviceModelId : 'serviceModelId'
+ });
+
+ expect(state).toBeDefined();
+ expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']).not.toBeDefined();
+ done();
+ });
+
+});
diff --git a/vid-webpack-master/src/app/service.reducer.ts b/vid-webpack-master/src/app/service.reducer.ts
new file mode 100644
index 000000000..a11f31e80
--- /dev/null
+++ b/vid-webpack-master/src/app/service.reducer.ts
@@ -0,0 +1,214 @@
+import { Action } from 'redux';
+import {
+ CREATE_VF_MODULE,
+ CreateVFModuleInstanceAction,
+ DELETE_SERVICE_INSTANCE,
+ DELETE_VNF_INSTANCE,
+ DELETE_VNF_MODULE_INSTANCE,
+ DeleteServiceInstanceAction,
+ DeleteVfModuleInstanceAction,
+ DeleteVnfInstanceAction,
+ UPDATE_AIC_ZONES,
+ UPDATE_CATEGORY_PARAMETERS,
+ UPDATE_LCP_REGIONS_AND_TENANTS,
+ UPDATE_MODEL,
+ UPDATE_NETWORK_FUNCTION,
+ UPDATE_PRODUCT_FAMILIES,
+ UPDATE_SERVICE_INSTANCE,
+ UPDATE_SERVICE_TYPES,
+ UPDATE_SUBSCRIBERS,
+ UPDATE_USER_ID,
+ UPDATE_VF_MODULE,
+ UPDATE_VNF_INSTANCE,
+ UpdateAicZonesAction,
+ UpdateCategoryParametersAction,
+ UpdateLcpRegionsAndTenantsAction,
+ UpdateNetworkCollectionFunction,
+ UpdateProductFamiliesAction,
+ UpdateServiceInstanceAction,
+ UpdateServiceModelAction,
+ UpdateServiceTypesAction,
+ UpdateSubscribersAction,
+ UpdateUserIdAction,
+ UpdateVFModuleInstanceAction,
+ UpdateVnfInstanceAction,
+} from './service.actions';
+import { LcpRegionsAndTenants } from './shared/models/lcpRegionsAndTenants';
+import * as _ from 'lodash';
+import { ServiceInstance } from './shared/models/serviceInstance';
+import { CategoryParams } from './shared/models/categoryParams';
+import { SelectOptionInterface } from './shared/models/selectOption';
+import { ServiceType } from './shared/models/serviceType';
+import { VnfInstance } from './shared/models/vnfInstance';
+import { VfModuleMap } from './shared/models/vfModulesMap';
+
+export interface ServiceState {
+ serviceHierarchy: any;
+ serviceInstance: { [uuid: string]: ServiceInstance; };
+ lcpRegionsAndTenants: LcpRegionsAndTenants;
+ subscribers: SelectOptionInterface[];
+ productFamilies: any;
+ serviceTypes: { [subscriberId: string]: ServiceType[]; };
+ aicZones: SelectOptionInterface[];
+ categoryParameters: CategoryParams;
+}
+
+const initialState: ServiceState = {
+ serviceHierarchy: {},
+ serviceInstance: {},
+ lcpRegionsAndTenants: new LcpRegionsAndTenants(),
+ subscribers: null,
+ productFamilies: null,
+ serviceTypes: {},
+ aicZones: null,
+ categoryParameters: new CategoryParams()
+};
+
+export const ServiceReducer =
+ function (state: ServiceState = initialState, action: Action): ServiceState {
+ switch (action.type) {
+ case UPDATE_MODEL: {
+ let uuid = (<UpdateServiceModelAction>action).serviceHierarchy.service.uuid;
+ state.serviceHierarchy[uuid] = _.cloneDeep((<UpdateServiceModelAction>action).serviceHierarchy);
+ return Object.assign({}, state);
+ }
+ case UPDATE_SERVICE_INSTANCE: {
+ const updateServiceInstanceAction = <UpdateServiceInstanceAction>action;
+ const uuid = updateServiceInstanceAction.serviceUuid;
+ const newState = _.cloneDeep(state);
+
+ const serviceInstance: ServiceInstance = newState.serviceInstance[uuid] || new ServiceInstance();
+
+ newState.serviceInstance[uuid] = Object.assign(serviceInstance, updateServiceInstanceAction.serviceInstance);
+ return newState;
+ }
+ case UPDATE_VNF_INSTANCE: {
+ const updateVnfInstanceAction = <UpdateVnfInstanceAction>action;
+ const serviceUuid = updateVnfInstanceAction.serviceUuid;
+ const vnfModelName = updateVnfInstanceAction.vnfModelName;
+
+ const newState = _.cloneDeep(state);
+ const vnfInstance: VnfInstance = newState.serviceInstance[serviceUuid].vnfs[vnfModelName] || new VnfInstance();
+
+ newState.serviceInstance[serviceUuid].vnfs[vnfModelName] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
+ return newState;
+ }
+
+
+ case UPDATE_USER_ID: {
+ const updateUserId : UpdateUserIdAction = <UpdateUserIdAction>action;
+ // var newState2 = {...state,'userId':updateUserId.userId}
+ var newState = _.cloneDeep(state);
+ newState['userId'] = updateUserId.userId;
+ return newState;
+
+ // state = (... {userId:action["userId"]},state]}
+ }
+
+ case UPDATE_VF_MODULE: {
+ const updateVFModuleInstanceAction = <UpdateVFModuleInstanceAction>action;
+ const vfInstance = updateVFModuleInstanceAction.vfInstance;
+ const serviceUuid = updateVFModuleInstanceAction.serviceUuid;
+ const vfModuleId = updateVFModuleInstanceAction.vfId;
+ const newState = _.cloneDeep(state);
+ const vnfs = newState.serviceHierarchy[serviceUuid].vnfs;
+ const vnfId = getVfModuleParentVnfId(vnfs, vfModuleId);
+ let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] || new VfModuleMap();
+ vfModulesMap[vfModuleId] = vfInstance;
+ newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] = vfModulesMap;
+ return newState;
+ }
+
+ case CREATE_VF_MODULE: {
+ const updateVFModuleInstanceAction = <CreateVFModuleInstanceAction>action;
+ const vfInstance = updateVFModuleInstanceAction.vfInstance;
+ const serviceUuid = updateVFModuleInstanceAction.serviceUuid;
+ const vfModuleId = updateVFModuleInstanceAction.vfId;
+ const index = updateVFModuleInstanceAction.index;
+ let newState = Object.assign({}, state);
+ const vnfs = newState.serviceHierarchy[serviceUuid].vnfs;
+ const vnfId = getVfModuleParentVnfId(vnfs, vfModuleId);
+ let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] || new VfModuleMap();
+ let randomId = generateId();
+ vfModulesMap[vfModuleId + randomId] = vfInstance;
+
+ newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] = vfModulesMap;
+ return newState;
+ }
+
+
+ case UPDATE_LCP_REGIONS_AND_TENANTS: {
+ Object.assign(state, (<UpdateLcpRegionsAndTenantsAction>action));
+ return Object.assign({}, state);
+ }
+ case UPDATE_SUBSCRIBERS: {
+ Object.assign(state, (<UpdateSubscribersAction>action));
+ return Object.assign({}, state);
+ }
+ case UPDATE_AIC_ZONES: {
+ Object.assign(state, (<UpdateAicZonesAction>action));
+ return Object.assign({}, state);
+ }
+ case UPDATE_PRODUCT_FAMILIES: {
+ Object.assign(state, (<UpdateProductFamiliesAction>action));
+ return Object.assign({}, state);
+ }
+ case UPDATE_NETWORK_FUNCTION: {
+ let networkFunctionReduxObj = state["networkFunctions"] == undefined ? {} : state["networkFunctions"];
+ networkFunctionReduxObj[(<UpdateNetworkCollectionFunction>action).network_function] = (<UpdateNetworkCollectionFunction>action).networksAccordingToNetworkCollection;
+ Object.assign(state, {"networkFunctions":networkFunctionReduxObj});
+ return Object.assign({}, state);
+ }
+ case UPDATE_SERVICE_TYPES: {
+ let subscriberId = (<UpdateServiceTypesAction>action).subscriberId;
+ let serviceTypes = (<UpdateServiceTypesAction>action).serviceTypes;
+ state.serviceTypes[subscriberId] = serviceTypes;
+ return Object.assign({}, state);
+ }
+ case UPDATE_CATEGORY_PARAMETERS: {
+ Object.assign(state, (<UpdateCategoryParametersAction>action));
+ return Object.assign({}, state);
+ }
+ case DELETE_SERVICE_INSTANCE: {
+ const uuid = (<DeleteServiceInstanceAction>action).serviceUuid;
+ if (state.serviceHierarchy[uuid]) {
+ let newState = _.omit(state, ['serviceInstance[' + uuid + ']']);
+ return Object.assign({}, state, newState);
+ }
+ return Object.assign({}, state);
+ }
+ case DELETE_VNF_INSTANCE: {
+ const actionData =(<DeleteVnfInstanceAction>action);
+ if(state.serviceInstance[actionData.serviceModelId]){
+ delete state.serviceInstance[actionData.serviceModelId].vnfs[actionData.modelName];
+ }
+ return Object.assign({}, state);
+ }
+
+ case DELETE_VNF_MODULE_INSTANCE: {
+ const actionData =(<DeleteVfModuleInstanceAction>action);
+ if(state.serviceInstance[actionData.serviceModelId]){
+ delete state.serviceInstance[actionData.serviceModelId].vnfs[actionData.vfName].vfModules[actionData.modelName];
+ }
+ return Object.assign({}, state);
+ }
+ default:
+ return Object.assign({}, state);
+ }
+ };
+
+const generateId = () => {
+ return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
+};
+
+
+const getVfModuleParentVnfId = (vnfs: object, vfModuleId: string) => {
+ let vnfId = undefined;
+ _.forOwn(vnfs, (value, key) => {
+ if (vnfs[key].vfModules && vnfs[key].vfModules[vfModuleId]) {
+ vnfId = vnfs[key].modelCustomizationName;
+ return false;
+ }
+ });
+ return vnfId;
+};
diff --git a/vid-webpack-master/src/app/services/aaiService/aai.actions.ts b/vid-webpack-master/src/app/services/aaiService/aai.actions.ts
new file mode 100644
index 000000000..649fb1456
--- /dev/null
+++ b/vid-webpack-master/src/app/services/aaiService/aai.actions.ts
@@ -0,0 +1,75 @@
+import {Action, ActionCreator} from "redux";
+
+export const LOAD_PRODUCT_FAMILIES = '[PRODUCT_FAMILIES] Load';
+
+export const LOAD_LCP_TENANT = '[LCP_TENANT] Load';
+
+export const LOAD_AIC_ZONES = '[AIC_ZONES] Load';
+
+export const LOAD_CATEGORY_PARAMETERS = '[LOAD_CATEGORY_PARAMETERS] Load';
+
+export const LOAD_SERVICE_MDOEL_BY_UUID = '[LOAD_SERVICE_MDOEL_BY_UUID] Load';
+
+export const LOAD_NETWORK_ACCORDING_TO_NF = '[LOAD_NETWORK_ACCORDING_TO_NF] Load'
+
+export const LOAD_USER_ID = '[LOAD_USER_ID] Load'
+
+
+export interface LoadProductFamiliesAction extends Action {}
+
+interface LoadLcpTenant extends Action {}
+
+interface LoadAicZones extends Action {}
+
+interface LoadCategoryParameters extends Action {}
+
+interface LoadServiceModelByUuid extends Action {}
+
+interface LoadNetworkAccordingToNetworkCF extends Action{}
+
+interface LoadUserId extends Action{}
+
+
+export const loadServiceAccordingToUuid : ActionCreator<LoadServiceModelByUuid> =
+ (uuid : string) =>({
+ type : LOAD_SERVICE_MDOEL_BY_UUID,
+ modelId : uuid
+ })
+
+
+export const loadProductFamiliesAction: ActionCreator<LoadProductFamiliesAction> =
+ () => ({
+ type: LOAD_PRODUCT_FAMILIES,
+ });
+
+
+export const loadUserId: ActionCreator<LoadUserId> =
+() => ({
+ type: LOAD_USER_ID,
+});
+
+
+ export const loadLcpTenant: ActionCreator<LoadLcpTenant> =
+ () => ({
+ type: LOAD_LCP_TENANT,
+ });
+
+
+export const loadAicZones: ActionCreator<LoadAicZones> =
+ () => ({
+ type: LOAD_AIC_ZONES,
+ });
+
+export const loadCategoryParameters: ActionCreator<LoadCategoryParameters> =
+ () => ({
+ type: LOAD_CATEGORY_PARAMETERS,
+ });
+
+
+export const loadAaiNetworkAccordingToNetworkCF: ActionCreator<LoadNetworkAccordingToNetworkCF> =
+ (networkFunction,cloudOwner,cloudRegionId) => ({
+ type: LOAD_NETWORK_ACCORDING_TO_NF,
+ networkFunctions: networkFunction,
+ cloudOwner: cloudOwner,
+ cloudRegionId: cloudRegionId
+ });
diff --git a/vid-webpack-master/src/app/services/aaiService/aai.epics.ts b/vid-webpack-master/src/app/services/aaiService/aai.epics.ts
new file mode 100644
index 000000000..5249cea82
--- /dev/null
+++ b/vid-webpack-master/src/app/services/aaiService/aai.epics.ts
@@ -0,0 +1,81 @@
+import {updateServiceInstance} from './../../service.actions';
+import {Injectable} from '@angular/core';
+import {createEpicMiddleware} from 'redux-observable';
+import 'rxjs/add/operator/catch';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/do';
+import 'rxjs/add/operator/startWith';
+import {
+ LOAD_PRODUCT_FAMILIES,
+ LOAD_LCP_TENANT,
+ LOAD_AIC_ZONES,
+ LOAD_CATEGORY_PARAMETERS,
+ LOAD_SERVICE_MDOEL_BY_UUID,
+ LOAD_NETWORK_ACCORDING_TO_NF,
+ LOAD_USER_ID
+} from "./aai.actions";
+import {AaiService} from "./aai.service";
+import {
+ updateAicZones, updateCategoryParameters, updateLcpRegionsAndTenants, updateNetworkCollectionFunction,
+ updateProductFamilies, updateUserId
+} from "../../service.actions";
+import {AppState} from "../../store/reducers";
+
+const notFetchedAlready = (state: AppState): boolean => state.service.productFamilies !== null;
+
+@Injectable()
+export class AAIEpics {
+ constructor(private aaiService: AaiService) {
+ }
+
+ public createEpic() {
+ return [createEpicMiddleware(this.loadProductFamiliesEpic)
+ , createEpicMiddleware(this.loadLcpTenants)
+ , createEpicMiddleware(this.loadAicZones)
+ , createEpicMiddleware(this.loadCategoryParameters)
+ , createEpicMiddleware(this.loadServiceAccordingToUuid)
+ , createEpicMiddleware(this.loadNetworkAccordingToNetworkFunction)
+ , createEpicMiddleware(this.loadUserId)
+ ];
+ }
+
+ private loadLcpTenants = (action$, store) =>
+ action$
+ .ofType(LOAD_LCP_TENANT)
+ .switchMap(() => this
+ .aaiService
+ .getLcpRegionsAndTenants('e433710f-9217-458d-a79d-1c7aff376d89', 'VIRTUAL USP')
+ .map(data => updateLcpRegionsAndTenants(data)));
+
+ private loadProductFamiliesEpic = (action$, store) => action$
+ .ofType(LOAD_PRODUCT_FAMILIES)
+ .switchMap(() => this.aaiService.getProductFamilies().map(data => updateProductFamilies(data)));
+
+ private loadCategoryParameters = (action$, store) => action$
+ .ofType(LOAD_CATEGORY_PARAMETERS)
+ .switchMap(() => this.aaiService.getCategoryParameters(null).map(data => updateCategoryParameters(data)));
+
+
+ private loadNetworkAccordingToNetworkFunction = (action$, store) => action$
+ .ofType(LOAD_NETWORK_ACCORDING_TO_NF)
+ .flatMap((action) => this.aaiService.getCRAccordingToNetworkFunctionId(action.networkFunctions, action.cloudOwner, action.cloudRegionId).map((res) =>
+ updateNetworkCollectionFunction(action.networkFunctions, res)));
+
+ private loadServiceAccordingToUuid = (action$, store) => action$
+ .ofType(LOAD_SERVICE_MDOEL_BY_UUID)
+ .switchMap((action) => this.aaiService.getServiceModelById(action.modelId)
+ .map(data => updateServiceInstance(action.uuid, data)));
+
+ private loadUserId = (action$, store) => action$
+ .ofType(LOAD_USER_ID)
+ .switchMap(() => this.aaiService.getUserId()
+ .map(res => updateUserId(res)));
+
+
+ private loadAicZones = (action$, store) => action$
+ .ofType(LOAD_AIC_ZONES)
+ .switchMap(() => this.aaiService.getAicZones().map(data => updateAicZones(data)));
+ // .catch(response => of(this.actions.loadFailed(status)))
+ // .startWith(this.actions.loadStarted()));
+
+}
diff --git a/vid-webpack-master/src/app/services/aaiService/aai.service.ts b/vid-webpack-master/src/app/services/aaiService/aai.service.ts
new file mode 100644
index 000000000..dd9d9fb29
--- /dev/null
+++ b/vid-webpack-master/src/app/services/aaiService/aai.service.ts
@@ -0,0 +1,189 @@
+import {Injectable} from '@angular/core';
+import {HttpClient, HttpHeaders} from '@angular/common/http';
+import { Constants } from '../../shared/utils/constants';
+import { ServiceType } from "../../shared/models/serviceType";
+import {GetSubDetailsResponse} from "./responseInterfaces/getSubDetailsResponseInterface";
+import {Observable} from "rxjs/Observable";
+import * as _ from 'lodash';
+import {CategoryParams} from "../../shared/models/categoryParams";
+import {GetCategoryParamsResponseInterface} from "./responseInterfaces/getCategoryParamsResponseInterface";
+import {Project} from "../../shared/models/project";
+import {OwningEntity} from "../../shared/models/owningEntity";
+import {GetServicesResponseInterface} from "./responseInterfaces/getServicesResponseInterface";
+import {Subscriber} from "../../shared/models/subscriber";
+import {GetSubscribersResponse} from "./responseInterfaces/getSubscribersResponseInterface";
+import {AicZone} from "../../shared/models/aicZone";
+import {GetAicZonesResponse} from "./responseInterfaces/getAicZonesResponseInterface";
+import {LcpRegionsAndTenants} from "../../shared/models/lcpRegionsAndTenants";
+import {LcpRegion} from "../../shared/models/lcpRegion";
+import {Tenant} from "../../shared/models/tenant";
+import {ProductFamily} from "../../shared/models/productFamily"
+import {
+ updateAicZones, updateCategoryParameters, updateLcpRegionsAndTenants, updateModel, updateProductFamilies,
+ updateServiceTypes, updateSubscribers, updateUserId
+} from '../../service.actions';
+import {SelectOption} from '../../shared/models/selectOption';
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {ResponseContentType, ResponseType} from "@angular/http";
+import 'rxjs/add/operator/do';
+import 'rxjs/add/observable/of';
+import 'rxjs/add/operator/catch';
+
+@Injectable()
+export class AaiService {
+
+ constructor (private http: HttpClient, private store: NgRedux<AppState>) {}
+
+ public getServiceModelById(serviceModelId: string): Observable<any> {
+ if (_.has(this.store.getState().service.serviceHierarchy,serviceModelId)){
+ return Observable.of(<any> JSON.parse(JSON.stringify(this.store.getState().service.serviceHierarchy[serviceModelId])));
+ }
+ let pathQuery: string = Constants.Path.SERVICES_PATH + serviceModelId;
+ return this.http.get(pathQuery).map(res => res )
+ .do((res) => {
+ this.store.dispatch(updateModel(res));
+ });
+ }
+
+ public getUserId() : Observable<any>{
+ return this.http.get("../../getuserID",{responseType: 'text'}).do((res)=>this.store.dispatch(updateUserId(res)));
+ }
+
+
+ public getCRAccordingToNetworkFunctionId(networkCollectionFunction,cloudOwner,cloudRegionId){
+ return this.http.get('../../aai_get_instance_groups_by_cloudregion/'+cloudOwner+'/'+cloudRegionId+'/' + networkCollectionFunction)
+ .map(res=>res).do((res)=>console.log(res));
+ }
+
+ public getCategoryParameters(familyName): Observable<CategoryParams> {
+ familyName = familyName || Constants.Path.PARAMETER_STANDARDIZATION_FAMILY;
+ let pathQuery: string = Constants.Path.GET_CATEGORY_PARAMETERS +"?familyName=" + familyName+ "&r=" + Math.random();
+
+ return this.http.get<GetCategoryParamsResponseInterface>(pathQuery)
+ .map(this.categoryParametersResponseToProductAndOwningEntity)
+ .do(res => {
+ this.store.dispatch(updateCategoryParameters(res))
+ });
+ }
+
+
+
+ categoryParametersResponseToProductAndOwningEntity(res: GetCategoryParamsResponseInterface): CategoryParams {
+ if (res && res.categoryParameters) {
+ const owningEntityList = res.categoryParameters.owningEntity.map(owningEntity => new OwningEntity(owningEntity));
+ const projectList = res.categoryParameters.project.map(project => new Project(project));
+ const lineOfBusinessList = res.categoryParameters.lineOfBusiness.map(owningEntity => new SelectOption(owningEntity));
+ const platformList = res.categoryParameters.platform.map(platform => new SelectOption(platform));
+
+ return new CategoryParams(owningEntityList, projectList, lineOfBusinessList, platformList);
+ } else {
+ return new CategoryParams();
+ }
+ }
+
+ public getProductFamilies(): Observable<ProductFamily[]> {
+ return this.getServices().map(res => res.service.map(service => new ProductFamily(service)));
+ }
+
+ public getServices(): Observable<GetServicesResponseInterface> {
+ let pathQuery: string = Constants.Path.AAI_GET_SERVICES + Constants.Path.ASSIGN + Math.random();
+
+ return this.http.get<GetServicesResponseInterface>(pathQuery);
+ }
+
+ public getSubscribers(): Observable<Subscriber[]> {
+ if (this.store.getState().service.subscribers){
+ return Observable.of(<any> JSON.parse(JSON.stringify(this.store.getState().service.subscribers)));
+ }
+
+ let pathQuery: string = Constants.Path.AAI_GET_SUBSCRIBERS + Constants.Path.ASSIGN + Math.random();
+
+ return this.http.get<GetSubscribersResponse>(pathQuery).map(res =>
+ res.customer.map( subscriber => new Subscriber(subscriber))).do((res) => {
+ this.store.dispatch(updateSubscribers(res));
+ });
+ }
+
+ public getAicZones(): Observable<AicZone[]> {
+ if (this.store.getState().service.aicZones){
+ return Observable.of(<any> JSON.parse(JSON.stringify(this.store.getState().service.aicZones)));
+ }
+
+ let pathQuery: string = Constants.Path.AAI_GET_AIC_ZONES + Constants.Path.ASSIGN + Math.random();
+
+ return this.http.get<GetAicZonesResponse>(pathQuery).map(res =>
+ res.zone.map(aicZone => new AicZone(aicZone))).do((res) => {
+ this.store.dispatch(updateAicZones(res));
+ });
+ }
+
+ public getLcpRegionsAndTenants(globalCustomerId, serviceType): Observable<LcpRegionsAndTenants> {
+ if (this.store.getState().service.lcpRegionsAndTenants.lcpRegionList.length !== 0){
+ return Observable.of(<any> JSON.parse(JSON.stringify(this.store.getState().service.lcpRegionsAndTenants)));
+ }
+ let pathQuery: string = Constants.Path.AAI_GET_TENANTS
+ + globalCustomerId + Constants.Path.FORWARD_SLASH + serviceType + Constants.Path.ASSIGN + Math.random();
+
+ console.log("AaiService:getSubscriptionServiceTypeList: globalCustomerId: "
+ + globalCustomerId);
+ if (globalCustomerId != null) {
+ return this.http.get(pathQuery)
+ .map(this.tenantResponseToLcpRegionsAndTenants).do((res) => {
+ this.store.dispatch(updateLcpRegionsAndTenants(res));
+ });
+ }
+ }
+
+ tenantResponseToLcpRegionsAndTenants(cloudRegionTenantList): LcpRegionsAndTenants {
+
+ const lcpRegionsTenantsMap = {};
+
+ const lcpRegionList = _.uniqBy(cloudRegionTenantList, 'cloudRegionID').map((cloudRegionTenant) => {
+ return new LcpRegion(cloudRegionTenant)
+ });
+
+ lcpRegionList.forEach(region => {
+ lcpRegionsTenantsMap[region.id] = _.filter(cloudRegionTenantList, {'cloudRegionID' : region.id})
+ .map((cloudRegionTenant) => {
+ return new Tenant(cloudRegionTenant)
+ });
+ const reducer = (accumulator, currentValue) => {
+ accumulator.isPermitted = accumulator.isPermitted || currentValue.isPermitted;
+
+ return accumulator;
+ };
+ region.isPermitted = lcpRegionsTenantsMap[region.id].reduce(reducer).isPermitted;
+ });
+
+ return new LcpRegionsAndTenants(lcpRegionList, lcpRegionsTenantsMap);
+ }
+
+ public getServiceTypes(subscriberId): Observable<ServiceType[]> {
+ console.log("AaiService:getSubscriptionServiceTypeList: globalCustomerId: " + subscriberId);
+ if (_.has(this.store.getState().service.serviceTypes, subscriberId)){
+ return Observable.of(<any> JSON.parse(JSON.stringify(this.store.getState().service.serviceTypes[subscriberId])));
+ }
+
+ return this.getSubscriberDetails(subscriberId)
+ .map(this.subDetailsResponseToServiceTypes)
+ .do((res) => {this.store.dispatch(updateServiceTypes(res, subscriberId));});
+ }
+
+ public getSubscriberDetails(subscriberId): Observable<GetSubDetailsResponse> {
+ let pathQuery: string = Constants.Path.AAI_SUB_DETAILS_PATH + subscriberId + Constants.Path.ASSIGN + Math.random();
+
+ if (subscriberId != null) {
+ return this.http.get<GetSubDetailsResponse>(pathQuery);
+ }
+ }
+
+ subDetailsResponseToServiceTypes(res: GetSubDetailsResponse): ServiceType[] {
+ if (res && res['service-subscriptions']) {
+ const serviceSubscriptions = res['service-subscriptions']['service-subscription'];
+ return serviceSubscriptions.map((subscription, index) => new ServiceType(String(index), subscription))
+ } else {
+ return [];
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getAicZonesResponseInterface.ts b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getAicZonesResponseInterface.ts
new file mode 100644
index 000000000..62581c9e2
--- /dev/null
+++ b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getAicZonesResponseInterface.ts
@@ -0,0 +1,3 @@
+export interface GetAicZonesResponse {
+ zone: any[];
+}
diff --git a/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getCategoryParamsResponseInterface.ts b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getCategoryParamsResponseInterface.ts
new file mode 100644
index 000000000..06398904c
--- /dev/null
+++ b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getCategoryParamsResponseInterface.ts
@@ -0,0 +1,10 @@
+interface CategoryParametersResponse {
+ owningEntity: any[],
+ project: any[]
+ lineOfBusiness: any[]
+ platform: any[]
+}
+
+export interface GetCategoryParamsResponseInterface {
+ categoryParameters: CategoryParametersResponse;
+}
diff --git a/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getServiceModelResponseInterface.ts b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getServiceModelResponseInterface.ts
new file mode 100644
index 000000000..87671155d
--- /dev/null
+++ b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getServiceModelResponseInterface.ts
@@ -0,0 +1,5 @@
+import {ServiceModelResponseInterface} from "../../../shared/models/serviceModel";
+
+export interface GetServiceModelResponseInterface {
+ service: ServiceModelResponseInterface
+}
diff --git a/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getServicesResponseInterface.ts b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getServicesResponseInterface.ts
new file mode 100644
index 000000000..ae04055e4
--- /dev/null
+++ b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getServicesResponseInterface.ts
@@ -0,0 +1,9 @@
+export interface ServiceResponseInterface {
+ 'service-id': string,
+ 'service-description': string
+ 'is-permitted': boolean
+}
+
+export interface GetServicesResponseInterface {
+ service: ServiceResponseInterface[];
+}
diff --git a/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getSubDetailsResponseInterface.ts b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getSubDetailsResponseInterface.ts
new file mode 100644
index 000000000..dbfb695d0
--- /dev/null
+++ b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getSubDetailsResponseInterface.ts
@@ -0,0 +1,12 @@
+export interface Subscription {
+ 'service-type': string;
+ 'is-permitted': boolean;
+}
+
+interface ServiceSubscriptions {
+ 'service-subscription': Subscription[];
+}
+
+export interface GetSubDetailsResponse {
+ 'service-subscriptions': ServiceSubscriptions;
+}
diff --git a/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getSubscribersResponseInterface.ts b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getSubscribersResponseInterface.ts
new file mode 100644
index 000000000..065f66e21
--- /dev/null
+++ b/vid-webpack-master/src/app/services/aaiService/responseInterfaces/getSubscribersResponseInterface.ts
@@ -0,0 +1,5 @@
+import {Subscriber} from "../../../shared/models/subscriber";
+
+export interface GetSubscribersResponse {
+ customer: Subscriber[];
+}
diff --git a/vid-webpack-master/src/app/services/configuration.service.ts b/vid-webpack-master/src/app/services/configuration.service.ts
new file mode 100644
index 000000000..4edd8ffb5
--- /dev/null
+++ b/vid-webpack-master/src/app/services/configuration.service.ts
@@ -0,0 +1,34 @@
+import {Injectable} from '@angular/core';
+import {HttpClient} from "@angular/common/http";
+import {Constants} from "../shared/utils/constants";
+import {Observable} from 'rxjs/Observable';
+import {updateFlags} from "../global.actions";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../store/reducers";
+
+@Injectable()
+export class ConfigurationService {
+ store : NgRedux<AppState>;
+
+ constructor(private _http: HttpClient, _store : NgRedux<AppState>) {
+ this.store = _store;
+ }
+
+ getConfiguration(key : string): Observable<any> {
+ let pathQuery = Constants.Path.CONFIGURATION_PATH;
+ pathQuery = pathQuery.replace("{name}",key);
+ return this._http.get(pathQuery).map(response => response);
+ }
+
+ getFlags(): Observable<{[key: string] : boolean}> {
+ let flags = this.store.getState().global.flags;
+ if (flags) {
+ return Observable.of(flags);
+ }
+ let pathQuery = Constants.Path.FEATURES_FLAG_PATH;
+ return this._http.get<{[key: string] : boolean}>(pathQuery).map(response => {
+ this.store.dispatch(updateFlags(response));
+ return response;
+ });
+ }
+}
diff --git a/vid-webpack-master/src/app/services/data.service.ts b/vid-webpack-master/src/app/services/data.service.ts
new file mode 100644
index 000000000..4f8bf3623
--- /dev/null
+++ b/vid-webpack-master/src/app/services/data.service.ts
@@ -0,0 +1,528 @@
+import { Injectable } from '@angular/core';
+
+@Injectable()
+export class DataService {
+
+ private static _availableVolumeGroupList;
+ private static _cloudRegionTenantList;
+ private static _globalCustomerId;
+ private static _customizationUUID;
+ private static _rescustomizationUUID;
+ private static _inventoryItem;
+ private static _modelId;
+ private static _modelInstanceName;
+ private static _modelInfo;
+ private static _networkInstanceId;
+ private static _serviceIdList;
+ private static _aicZones;
+ private static _aicZone;
+ private static _serviceInstanceId;
+ private static _serviceInstanceName;
+ private static _serviceName;
+ private static _serviceType;
+ private static _serviceUuid;
+ private static _serviceTypeName;
+ private static _createSubscriberName;
+ private static _uploadSupplementoryDataFile;
+ private static _supplementoryDataFile;
+ private static _subscriberId;
+ private static _loggedInUserId;
+ private static _subscriberName;
+ private static _subscribers;
+ private static _subscriptionServiceTypeList;
+ private static _userParams;
+ private static _userServiceInstanceName;
+ private static _vfModuleInstanceId;
+ private static _vnfInstanceId;
+ private static _vfModuleInstanceName;
+ private static _volumeGroupInstanceId;
+ private static _lcpRegion;
+ private static _tenant;
+ private static _treeHandle;
+ private static _serviceInstanceToCustomer;
+ private static _aLaCarte: boolean;
+ private static _macro: boolean;
+ private static _resources;
+ private static _syspropProvStatusList;
+ private static _updatedvnfProvStatus;
+ private static _arbitraryParameters;
+ private static _hideServiceFields;
+ private static _serviceProxies;
+ private static _sourceServiceProxies;
+ private static _collectorServiceProxies;
+ private static _configurationByPolicy;
+ private static _suppressRollback;
+ private static _portMirroningConfigFields;
+ private static _configurationInstanceId: string;
+ private static _configurationStatus: string;
+ private static _portStatus: string;
+ private static _portId: string;
+ private static _pnf;
+ private static _owningEntityProperties;
+
+ static get availableVolumeGroupList() {
+ return this._availableVolumeGroupList;
+ }
+
+ static set availableVolumeGroupList(value) {
+ this._availableVolumeGroupList = value;
+ }
+
+ static get cloudRegionTenantList() {
+ return this._cloudRegionTenantList;
+ }
+
+ static set cloudRegionTenantList(value) {
+ this._cloudRegionTenantList = value;
+ }
+
+ static get globalCustomerId() {
+ return this._globalCustomerId;
+ }
+
+ static set globalCustomerId(value) {
+ this._globalCustomerId = value;
+ }
+
+ static get customizationUUID() {
+ return this._customizationUUID;
+ }
+
+ static set customizationUUID(value) {
+ this._customizationUUID = value;
+ }
+
+ static get rescustomizationUUID() {
+ return this._rescustomizationUUID;
+ }
+
+ static set rescustomizationUUID(value) {
+ this._rescustomizationUUID = value;
+ }
+
+ static get inventoryItem() {
+ return this._inventoryItem;
+ }
+
+ static set inventoryItem(value) {
+ this._inventoryItem = value;
+ }
+
+ static get modelId() {
+ return this._modelId;
+ }
+
+ static set modelId(value) {
+ this._modelId = value;
+ }
+
+ static get modelInstanceName() {
+ return this._modelInstanceName;
+ }
+
+ static set modelInstanceName(value) {
+ this._modelInstanceName = value;
+ }
+
+ static get modelInfo() {
+ return this._modelInfo;
+ }
+
+ static set modelInfo(value) {
+ this._modelInfo = value;
+ }
+
+ static getModelInfo(componentId) {
+ return this._modelInfo[componentId];
+ }
+
+ static setModelInfo(componentId, modelInfo) {
+ if (!this._modelInfo) {
+ this._modelInfo = {};
+ }
+ this._modelInfo[componentId] = modelInfo;
+ }
+
+ static get networkInstanceId() {
+ return this._networkInstanceId;
+ }
+
+ static set networkInstanceId(value) {
+ this._networkInstanceId = value;
+ }
+
+ static get serviceIdList() {
+ return this._serviceIdList;
+ }
+
+ static set serviceIdList(value) {
+ this._serviceIdList = value;
+ }
+
+ static get aicZones() {
+ return this._aicZones;
+ }
+
+ static set aicZones(value) {
+ this._aicZones = value;
+ }
+
+ static get aicZone() {
+ return this._aicZone;
+ }
+
+ static set aicZone(value) {
+ this._aicZone = value;
+ }
+
+ static get serviceInstanceId() {
+ return this._serviceInstanceId;
+ }
+
+ static set serviceInstanceId(value) {
+ this._serviceInstanceId = value;
+ }
+
+ static get serviceInstanceName() {
+ return this._serviceInstanceName;
+ }
+
+ static set serviceInstanceName(value) {
+ this._serviceInstanceName = value;
+ }
+
+ static get serviceName() {
+ return this._serviceName;
+ }
+
+ static set serviceName(value) {
+ this._serviceName = value;
+ }
+
+ static get serviceType() {
+ return this._serviceType;
+ }
+
+ static set serviceType(value) {
+ this._serviceType = value;
+ }
+
+ static get serviceUuid() {
+ return this._serviceUuid;
+ }
+
+ static set serviceUuid(value) {
+ this._serviceUuid = value;
+ }
+
+ static get serviceTypeName() {
+ return this._serviceTypeName;
+ }
+
+ static set serviceTypeName(value) {
+ this._serviceTypeName = value;
+ }
+
+ static get createSubscriberName() {
+ return this._createSubscriberName;
+ }
+
+ static set createSubscriberName(value) {
+ this._createSubscriberName = value;
+ }
+
+ static get uploadSupplementoryDataFile() {
+ return this._uploadSupplementoryDataFile;
+ }
+
+ static set uploadSupplementoryDataFile(value) {
+ this._uploadSupplementoryDataFile = value;
+ }
+
+ static get supplementoryDataFile() {
+ return this._supplementoryDataFile;
+ }
+
+ static set supplementoryDataFile(value) {
+ this._supplementoryDataFile = value;
+ }
+
+ static get subscriberId() {
+ return this._subscriberId;
+ }
+
+ static set subscriberId(value) {
+ this._subscriberId = value;
+ }
+
+ static get loggedInUserId() {
+ return this._loggedInUserId;
+ }
+
+ static set loggedInUserId(value) {
+ this._loggedInUserId = value;
+ }
+
+ static get subscriberName() {
+ return this._subscriberName;
+ }
+
+ static set subscriberName(value) {
+ this._subscriberName = value;
+ }
+
+ static get subscribers() {
+ return this._subscribers;
+ }
+
+ static set subscribers(value) {
+ this._subscribers = value;
+ }
+
+ static get subscriptionServiceTypeList() {
+ return this._subscriptionServiceTypeList;
+ }
+
+ static set subscriptionServiceTypeList(value) {
+ this._subscriptionServiceTypeList = value;
+ }
+
+ static get userParams() {
+ return this._userParams;
+ }
+
+ static set userParams(value) {
+ this._userParams = value;
+ }
+
+ static get userServiceInstanceName() {
+ return this._userServiceInstanceName;
+ }
+
+ static set userServiceInstanceName(value) {
+ this._userServiceInstanceName = value;
+ }
+
+ static get vfModuleInstanceId() {
+ return this._vfModuleInstanceId;
+ }
+
+ static set vfModuleInstanceId(value) {
+ this._vfModuleInstanceId = value;
+ }
+
+ static get vnfInstanceId() {
+ return this._vnfInstanceId;
+ }
+
+ static set vnfInstanceId(value) {
+ this._vnfInstanceId = value;
+ }
+
+ static get vfModuleInstanceName() {
+ return this._vfModuleInstanceName;
+ }
+
+ static set vfModuleInstanceName(value) {
+ this._vfModuleInstanceName = value;
+ }
+
+ static get volumeGroupInstanceId() {
+ return this._volumeGroupInstanceId;
+ }
+
+ static set volumeGroupInstanceId(value) {
+ this._volumeGroupInstanceId = value;
+ }
+
+ static get lcpRegion() {
+ return this._lcpRegion;
+ }
+
+ static set lcpRegion(value) {
+ this._lcpRegion = value;
+ }
+
+ static get tenant() {
+ return this._tenant;
+ }
+
+ static set tenant(value) {
+ this._tenant = value;
+ }
+
+ static get treeHandle() {
+ return this._treeHandle;
+ }
+
+ static set treeHandle(value) {
+ this._treeHandle = value;
+ }
+
+ static get serviceInstanceToCustomer() {
+ return this._serviceInstanceToCustomer;
+ }
+
+ static set serviceInstanceToCustomer(value) {
+ this._serviceInstanceToCustomer = value;
+ }
+
+ static get aLaCarte() {
+ if (!this._aLaCarte) {
+ return true;
+ }
+ return this._aLaCarte;
+ }
+
+ static set aLaCarte(value: boolean) {
+ this._aLaCarte = value;
+ }
+
+ static get macro() {
+ if (!this._macro) {
+ return false;
+ }
+ return this._macro;
+ }
+
+ static set macro(value: boolean) {
+ this._macro = value;
+ }
+
+ static get resources() {
+ return this._resources;
+ }
+
+ static set resources(value) {
+ this._resources = value;
+ }
+
+ static get syspropProvStatusList() {
+ return this._syspropProvStatusList;
+ }
+
+ static set syspropProvStatusList(value) {
+ this._syspropProvStatusList = value;
+ }
+
+ static get updatedvnfProvStatus() {
+ return this._updatedvnfProvStatus;
+ }
+
+ static set updatedvnfProvStatus(value) {
+ this._updatedvnfProvStatus = value;
+ }
+
+ static get arbitraryParameters() {
+ return this._arbitraryParameters;
+ }
+
+ static set arbitraryParameters(value) {
+ this._arbitraryParameters = value;
+ }
+
+ static get hideServiceFields() {
+ return this._hideServiceFields;
+ }
+
+ static set hideServiceFields(value) {
+ this._hideServiceFields = value;
+ }
+
+ static get serviceProxies() {
+ return this._serviceProxies;
+ }
+
+ static set serviceProxies(value) {
+ this._serviceProxies = value;
+ }
+
+ static get sourceServiceProxies() {
+ return this._sourceServiceProxies;
+ }
+
+ static set sourceServiceProxies(value) {
+ this._sourceServiceProxies = value;
+ }
+
+ static get collectorServiceProxies() {
+ return this._collectorServiceProxies;
+ }
+
+ static set collectorServiceProxies(value) {
+ this._collectorServiceProxies = value;
+ }
+
+ static get configurationByPolicy() {
+ return this._configurationByPolicy;
+ }
+
+ static set configurationByPolicy(value) {
+ this._configurationByPolicy = value;
+ }
+
+ static get suppressRollback() {
+ return this._suppressRollback;
+ }
+
+ static set suppressRollback(value) {
+ this._suppressRollback = value;
+ }
+
+ static get portMirroningConfigFields() {
+ return this._portMirroningConfigFields;
+ }
+
+ static set portMirroningConfigFields(value) {
+ this._portMirroningConfigFields = value;
+ }
+
+ static get configurationInstanceId(): string {
+ return this._configurationInstanceId;
+ }
+
+ static set configurationInstanceId(value: string) {
+ this._configurationInstanceId = value;
+ }
+
+ static get configurationStatus(): string {
+ return this._configurationStatus;
+ }
+
+ static set configurationStatus(value: string) {
+ this._configurationStatus = value;
+ }
+
+ static get portStatus(): string {
+ return this._portStatus;
+ }
+
+ static set portStatus(value: string) {
+ this._portStatus = value;
+ }
+
+ static get portId(): string {
+ return this._portId;
+ }
+
+ static set portId(value: string) {
+ this._portId = value;
+ }
+
+ static get pnf() {
+ return this._pnf;
+ }
+
+ static set pnf(value) {
+ this._pnf = value;
+ }
+
+ static get owningEntityProperties() {
+ return this._owningEntityProperties;
+ }
+
+ static set owningEntityProperties(value) {
+ this._owningEntityProperties = value;
+ }
+
+}
diff --git a/vid-webpack-master/src/app/services/flags.resolve.ts b/vid-webpack-master/src/app/services/flags.resolve.ts
new file mode 100644
index 000000000..70449379f
--- /dev/null
+++ b/vid-webpack-master/src/app/services/flags.resolve.ts
@@ -0,0 +1,14 @@
+import {ActivatedRouteSnapshot, Resolve} from "@angular/router";
+import {Injectable} from "@angular/core";
+import {ConfigurationService} from "./configuration.service";
+import {Observable} from "rxjs/Observable";
+
+@Injectable()
+export class FlagsResolve implements Resolve<Observable< { [key: string]: boolean }>> {
+
+ constructor(private _configurationService: ConfigurationService) {}
+
+ resolve(route: ActivatedRouteSnapshot) {
+ return this._configurationService.getFlags();
+ }
+}
diff --git a/vid-webpack-master/src/app/services/msoService/mso.service.ts b/vid-webpack-master/src/app/services/msoService/mso.service.ts
new file mode 100644
index 000000000..1402b50f7
--- /dev/null
+++ b/vid-webpack-master/src/app/services/msoService/mso.service.ts
@@ -0,0 +1,26 @@
+import {Injectable} from "@angular/core";
+import {HttpClient} from "@angular/common/http";
+import {Observable} from "rxjs/Observable";
+import {Constants} from "../../shared/utils/constants";
+
+@Injectable()
+export class MsoService {
+ httpClient: HttpClient;
+
+ constructor(http: HttpClient) {
+ this.httpClient = http;
+ }
+
+
+ public submitMsoTask(instanceFields): Observable<any> {
+ let path = '../../asyncInstantiation/bulk';
+ return this.httpClient.post(path, instanceFields);
+ }
+ public createVnf(requestDetails, serviceInstanceId): Observable<any> {
+ let pathQuery: string = Constants.Path.MSO_CREATE_VNF_INSTANCE + serviceInstanceId;
+
+ return this.httpClient.post( pathQuery, {
+ requestDetails : requestDetails
+ });
+ }
+}
diff --git a/vid-webpack-master/src/app/services/sdc.service.ts b/vid-webpack-master/src/app/services/sdc.service.ts
new file mode 100644
index 000000000..d4eba260a
--- /dev/null
+++ b/vid-webpack-master/src/app/services/sdc.service.ts
@@ -0,0 +1,28 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import 'rxjs/add/operator/map';
+import { Constants } from '../shared/utils/constants';
+import { VidConfiguration } from '../configuration/vid.configuration';
+
+@Injectable()
+export class SdcService {
+
+
+ constructor (private http: HttpClient) {
+ }
+
+ public getServicesModels(): any {
+ let pathQuery: string = Constants.Path.SERVICES_DIST_STATUS_PATH + VidConfiguration.ASDC_MODEL_STATUS;
+
+ if ( VidConfiguration.ASDC_MODEL_STATUS === Constants.Status.ALL) {
+ pathQuery = Constants.Path.SERVICES_PATH;
+ }
+
+ return this.http.get(pathQuery);
+ }
+
+ getService(uuid: string) {
+ return this.http.get(Constants.Path.SERVICES_PATH + uuid);
+ }
+
+}
diff --git a/vid-webpack-master/src/app/services/service-planning.service.spec.ts b/vid-webpack-master/src/app/services/service-planning.service.spec.ts
new file mode 100644
index 000000000..5d60e29f7
--- /dev/null
+++ b/vid-webpack-master/src/app/services/service-planning.service.spec.ts
@@ -0,0 +1,467 @@
+import {ServicePlanningService} from "./service-planning.service";
+import {ReflectiveInjector} from "@angular/core";
+import {NgRedux} from "@angular-redux/store";
+import {ServiceNodeTypes} from "../shared/models/ServiceNodeTypes";
+
+export class MockAppStore<T> {
+}
+
+describe('Service planning service', () => {
+ let injector;
+ let service: ServicePlanningService;
+
+ beforeEach(() => {
+
+ let injector = ReflectiveInjector.resolveAndCreate([
+ ServicePlanningService,
+ {provide: NgRedux, useClass: MockAppStore}
+ ]);
+
+ service = injector.get(ServicePlanningService);
+ });
+
+ describe('#updateDynamicInputsVnfDataFromModel', () => {
+ it('get vfModule instance params', (done: DoneFn) => {
+ //get vfModule instance params
+ let dynamicInputs = service.updateDynamicInputsVnfDataFromModel(ServiceNodeTypes.VFmodule, generateVFModule());
+ expect(dynamicInputs).toEqual([{
+ id: '2017488_adiodvpe0_vnf_config_template_version',
+ type: 'string',
+ name: '2017488_adiodvpe0_vnf_config_template_version',
+ value: '17.2',
+ isRequired: true,
+ description: 'VPE Software Version'
+ }, {
+ id: '2017488_adiodvpe0_AIC_CLLI',
+ type: 'string',
+ name: '2017488_adiodvpe0_AIC_CLLI',
+ value: 'ATLMY8GA',
+ isRequired: true,
+ description: 'AIC Site CLLI'
+ }]);
+
+ //get vfModule with no instance params should return empty array
+ dynamicInputs = service.updateDynamicInputsVnfDataFromModel(ServiceNodeTypes.VFmodule, generateVFModule2);
+ expect(dynamicInputs).toEqual([]);
+
+ //get vf instance params should be undefined
+ dynamicInputs = service.updateDynamicInputsVnfDataFromModel(ServiceNodeTypes.VF, generateVNF());
+ expect(dynamicInputs).toEqual([]);
+ done();
+ });
+ });
+
+ describe('#isUserProvidedNaming', () => {
+ it('get vfModule with generate ecompNaming should return userProvided false', (done: DoneFn) => {
+ //get vfModule with generate ecompNaming should return userProvided false
+ let isUserProvidedNaming = service.isUserProvidedNaming(ServiceNodeTypes.VFmodule, generateVFModule(), generateVNF());
+ expect(isUserProvidedNaming).toBeFalsy();
+
+ //get vfModule without generate ecompNaming should return userProvided true
+ isUserProvidedNaming = service.isUserProvidedNaming(ServiceNodeTypes.VFmodule, generateVFModule(), generateVNF_ecompNamingFalse());
+ expect(isUserProvidedNaming).toBeTruthy();
+
+ //get vnf with generate ecompNaming should return userProvided false
+ isUserProvidedNaming = service.isUserProvidedNaming(ServiceNodeTypes.VF, generateVNF(), null);
+ expect(isUserProvidedNaming).toBeFalsy();
+
+ //get vnf without generate ecompNaming should return userProvided true
+ isUserProvidedNaming = service.isUserProvidedNaming(ServiceNodeTypes.VF, generateVNF_ecompNamingFalse(), null);
+ expect(isUserProvidedNaming).toBeTruthy();
+ done();
+ });
+ });
+
+ function generateVFModule() {
+ return {
+ 'uuid': '25284168-24bb-4698-8cb4-3f509146eca5',
+ 'invariantUuid': '7253ff5c-97f0-4b8b-937c-77aeb4d79aa1',
+ 'customizationUuid': 'f7e7c365-60cf-49a9-9ebf-a1aa11b9d401',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+ 'version': '6',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': true,
+ 'inputs': {
+ '2017488_adiodvpe0_vnf_config_template_version': {
+ 'type': 'string',
+ 'description': 'VPE Software Version',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '17.2'
+ },
+ '2017488_adiodvpe0_AIC_CLLI': {
+ 'type': 'string',
+ 'description': 'AIC Site CLLI',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'ATLMY8GA'
+ }
+ }
+ };
+ }
+
+ function generateVFModule2() {
+ return {
+ 'uuid': '0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a',
+ 'invariantUuid': 'eff8cc59-53a1-4101-aed7-8cf24ecf8339',
+ 'customizationUuid': '3cd946bb-50e0-40d8-96d3-c9023520b557',
+ 'description': null,
+ 'name': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+ 'version': '6',
+ 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+ 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+ 'commands': {},
+ 'volumeGroupAllowed': true,
+ 'inputs': {}
+ };
+ }
+
+ function generateVNF() {
+ return {
+ 'uuid': '0903e1c0-8e03-4936-b5c2-260653b96413',
+ 'invariantUuid': '00beb8f9-6d39-452f-816d-c709b9cbb87d',
+ 'description': 'Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM',
+ 'name': '2017-388_ADIOD-vPE',
+ 'version': '1.0',
+ 'customizationUuid': '280dec31-f16d-488b-9668-4aae55d6648a',
+ 'inputs': {
+ 'vnf_config_template_version': {
+ 'type': 'string',
+ 'description': 'VPE Software Version',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '17.2'
+ },
+ 'bandwidth_units': {
+ 'type': 'string',
+ 'description': 'Units of bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'Gbps'
+ },
+ 'bandwidth': {
+ 'type': 'string',
+ 'description': 'Requested VPE bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '10'
+ },
+ 'AIC_CLLI': {
+ 'type': 'string',
+ 'description': 'AIC Site CLLI',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'ATLMY8GA'
+ },
+ 'ASN': {
+ 'type': 'string',
+ 'description': 'AV/PE',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'AV_vPE'
+ },
+ 'vnf_instance_name': {
+ 'type': 'string',
+ 'description': 'The hostname assigned to the vpe.',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'mtnj309me6'
+ }
+ },
+ 'commands': {
+ 'vnf_config_template_version': {
+ 'displayName': 'vnf_config_template_version',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_config_template_version'
+ },
+ 'bandwidth_units': {
+ 'displayName': 'bandwidth_units',
+ 'command': 'get_input',
+ 'inputName': 'adiodvpe0_bandwidth_units'
+ },
+ 'bandwidth': {'displayName': 'bandwidth', 'command': 'get_input', 'inputName': 'adiodvpe0_bandwidth'},
+ 'AIC_CLLI': {'displayName': 'AIC_CLLI', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_AIC_CLLI'},
+ 'ASN': {'displayName': 'ASN', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_ASN'},
+ 'vnf_instance_name': {
+ 'displayName': 'vnf_instance_name',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_instance_name'
+ }
+ },
+ 'properties': {
+ 'vmxvre_retype': 'RE-VMX',
+ 'vnf_config_template_version': 'get_input:2017488_adiodvpe0_vnf_config_template_version',
+ 'sriov44_net_id': '48d399b3-11ee-48a8-94d2-f0ea94d6be8d',
+ 'int_ctl_net_id': '2f323477-6936-4d01-ac53-d849430281d9',
+ 'vmxvpfe_sriov41_0_port_mac': '00:11:22:EF:AC:DF',
+ 'int_ctl_net_name': 'VMX-INTXI',
+ 'vmx_int_ctl_prefix': '128.0.0.0',
+ 'sriov43_net_id': 'da349ca1-6de9-4548-be88-2d88e99bfef5',
+ 'sriov42_net_id': '760669ba-013d-4d9b-b0e7-4151fe2e6279',
+ 'sriov41_net_id': '25ad52d5-c165-40f8-b3b0-ddfc2373280a',
+ 'nf_type': 'vPE',
+ 'vmxvpfe_int_ctl_ip_1': '128.0.0.16',
+ 'is_AVPN_service': 'false',
+ 'vmx_RSG_name': 'vREXI-affinity',
+ 'vmx_int_ctl_forwarding': 'l2',
+ 'vmxvre_oam_ip_0': '10.40.123.5',
+ 'vmxvpfe_sriov44_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_sriov41_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov42_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov44_0_port_unknownunicastallow': 'true',
+ 'vmxvre_image_name_0': 'VRE-ENGINE_17.2-S2.1.qcow2',
+ 'vmxvre_instance': '0',
+ 'vmxvpfe_sriov43_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvre_flavor_name': 'ns.c1r16d32.v5',
+ 'vmxvpfe_volume_size_0': '40.0',
+ 'vmxvpfe_sriov43_0_port_vlanfilter': '4001',
+ 'nf_naming': '{ecomp_generated_naming=true}',
+ 'nf_naming_code': 'Navneet',
+ 'vmxvre_name_0': 'vREXI',
+ 'vmxvpfe_sriov42_0_port_vlanstrip': 'false',
+ 'vmxvpfe_volume_name_0': 'vPFEXI_FBVolume',
+ 'vmx_RSG_id': 'bd89a33c-13c3-4a04-8fde-1a57eb123141',
+ 'vmxvpfe_image_name_0': 'VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2',
+ 'vmxvpfe_sriov43_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_console': 'vidconsole',
+ 'vmxvpfe_sriov44_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov42_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_volume_id_0': '47cede15-da2f-4397-a101-aa683220aff3',
+ 'vmxvpfe_sriov42_0_port_unknownmulticastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_vlanstrip': 'false',
+ 'vf_module_id': '123',
+ 'nf_function': 'JAI',
+ 'vmxvpfe_sriov43_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_int_ctl_ip_0': '128.0.0.1',
+ 'AIC_CLLI': 'get_input:2017488_adiodvpe0_AIC_CLLI',
+ 'vnf_name': 'mtnj309me6vre',
+ 'vmxvpfe_sriov41_0_port_unknownunicastallow': 'true',
+ 'vmxvre_volume_type_1': 'HITACHI',
+ 'vmxvpfe_sriov44_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_type_0': 'HITACHI',
+ 'vmxvpfe_volume_type_0': 'HITACHI',
+ 'vmxvpfe_sriov43_0_port_broadcastallow': 'true',
+ 'bandwidth_units': 'get_input:adiodvpe0_bandwidth_units',
+ 'vnf_id': '123',
+ 'vmxvre_oam_prefix': '24',
+ 'availability_zone_0': 'mtpocfo-kvm-az01',
+ 'ASN': 'get_input:2017488_adiodvpe0_ASN',
+ 'vmxvre_chassis_i2cid': '161',
+ 'vmxvpfe_name_0': 'vPFEXI',
+ 'bandwidth': 'get_input:adiodvpe0_bandwidth',
+ 'availability_zone_max_count': '1',
+ 'vmxvre_volume_size_0': '45.0',
+ 'vmxvre_volume_size_1': '50.0',
+ 'vmxvpfe_sriov42_0_port_broadcastallow': 'true',
+ 'vmxvre_oam_gateway': '10.40.123.1',
+ 'vmxvre_volume_name_1': 'vREXI_FAVolume',
+ 'vmxvre_ore_present': '0',
+ 'vmxvre_volume_name_0': 'vREXI_FBVolume',
+ 'vmxvre_type': '0',
+ 'vnf_instance_name': 'get_input:2017488_adiodvpe0_vnf_instance_name',
+ 'vmxvpfe_sriov41_0_port_unknownmulticastallow': 'true',
+ 'oam_net_id': 'b95eeb1d-d55d-4827-abb4-8ebb94941429',
+ 'vmx_int_ctl_len': '24',
+ 'vmxvpfe_sriov43_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov41_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_id_1': '6e86797e-03cd-4fdc-ba72-2957119c746d',
+ 'vmxvpfe_sriov41_0_port_vlanfilter': '4001',
+ 'nf_role': 'Testing',
+ 'vmxvre_volume_id_0': 'f4eacb79-f687-4e9d-b760-21847c8bb15a',
+ 'vmxvpfe_sriov42_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_flavor_name': 'ns.c20r16d25.v5'
+ },
+ 'type': 'VF',
+ 'modelCustomizationName': '2017-388_ADIOD-vPE 1',
+ 'vfModules': {},
+ 'volumeGroups': {}
+ };
+ }
+
+ function generateVNF_ecompNamingFalse() {
+ return {
+ 'uuid': '0903e1c0-8e03-4936-b5c2-260653b96413',
+ 'invariantUuid': '00beb8f9-6d39-452f-816d-c709b9cbb87d',
+ 'description': 'Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM',
+ 'name': '2017-388_ADIOD-vPE',
+ 'version': '1.0',
+ 'customizationUuid': '280dec31-f16d-488b-9668-4aae55d6648a',
+ 'inputs': {
+ 'vnf_config_template_version': {
+ 'type': 'string',
+ 'description': 'VPE Software Version',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '17.2'
+ },
+ 'bandwidth_units': {
+ 'type': 'string',
+ 'description': 'Units of bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'Gbps'
+ },
+ 'bandwidth': {
+ 'type': 'string',
+ 'description': 'Requested VPE bandwidth',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': '10'
+ },
+ 'AIC_CLLI': {
+ 'type': 'string',
+ 'description': 'AIC Site CLLI',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'ATLMY8GA'
+ },
+ 'ASN': {
+ 'type': 'string',
+ 'description': 'AV/PE',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'AV_vPE'
+ },
+ 'vnf_instance_name': {
+ 'type': 'string',
+ 'description': 'The hostname assigned to the vpe.',
+ 'entry_schema': null,
+ 'constraints': [],
+ 'required': true,
+ 'default': 'mtnj309me6'
+ }
+ },
+ 'commands': {
+ 'vnf_config_template_version': {
+ 'displayName': 'vnf_config_template_version',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_config_template_version'
+ },
+ 'bandwidth_units': {
+ 'displayName': 'bandwidth_units',
+ 'command': 'get_input',
+ 'inputName': 'adiodvpe0_bandwidth_units'
+ },
+ 'bandwidth': {'displayName': 'bandwidth', 'command': 'get_input', 'inputName': 'adiodvpe0_bandwidth'},
+ 'AIC_CLLI': {'displayName': 'AIC_CLLI', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_AIC_CLLI'},
+ 'ASN': {'displayName': 'ASN', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_ASN'},
+ 'vnf_instance_name': {
+ 'displayName': 'vnf_instance_name',
+ 'command': 'get_input',
+ 'inputName': '2017488_adiodvpe0_vnf_instance_name'
+ }
+ },
+ 'properties': {
+ 'ecomp_generated_naming': "false",
+ 'vmxvre_retype': 'RE-VMX',
+ 'vnf_config_template_version': 'get_input:2017488_adiodvpe0_vnf_config_template_version',
+ 'sriov44_net_id': '48d399b3-11ee-48a8-94d2-f0ea94d6be8d',
+ 'int_ctl_net_id': '2f323477-6936-4d01-ac53-d849430281d9',
+ 'vmxvpfe_sriov41_0_port_mac': '00:11:22:EF:AC:DF',
+ 'int_ctl_net_name': 'VMX-INTXI',
+ 'vmx_int_ctl_prefix': '128.0.0.0',
+ 'sriov43_net_id': 'da349ca1-6de9-4548-be88-2d88e99bfef5',
+ 'sriov42_net_id': '760669ba-013d-4d9b-b0e7-4151fe2e6279',
+ 'sriov41_net_id': '25ad52d5-c165-40f8-b3b0-ddfc2373280a',
+ 'nf_type': 'vPE',
+ 'vmxvpfe_int_ctl_ip_1': '128.0.0.16',
+ 'is_AVPN_service': 'false',
+ 'vmx_RSG_name': 'vREXI-affinity',
+ 'vmx_int_ctl_forwarding': 'l2',
+ 'vmxvre_oam_ip_0': '10.40.123.5',
+ 'vmxvpfe_sriov44_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_sriov41_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov42_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov44_0_port_unknownunicastallow': 'true',
+ 'vmxvre_image_name_0': 'VRE-ENGINE_17.2-S2.1.qcow2',
+ 'vmxvre_instance': '0',
+ 'vmxvpfe_sriov43_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvre_flavor_name': 'ns.c1r16d32.v5',
+ 'vmxvpfe_volume_size_0': '40.0',
+ 'vmxvpfe_sriov43_0_port_vlanfilter': '4001',
+ 'nf_naming': '{ecomp_generated_naming=false}',
+ 'nf_naming_code': 'Navneet',
+ 'vmxvre_name_0': 'vREXI',
+ 'vmxvpfe_sriov42_0_port_vlanstrip': 'false',
+ 'vmxvpfe_volume_name_0': 'vPFEXI_FBVolume',
+ 'vmx_RSG_id': 'bd89a33c-13c3-4a04-8fde-1a57eb123141',
+ 'vmxvpfe_image_name_0': 'VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2',
+ 'vmxvpfe_sriov43_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_console': 'vidconsole',
+ 'vmxvpfe_sriov44_0_port_vlanfilter': '4001',
+ 'vmxvpfe_sriov42_0_port_mac': '00:11:22:EF:AC:DF',
+ 'vmxvpfe_volume_id_0': '47cede15-da2f-4397-a101-aa683220aff3',
+ 'vmxvpfe_sriov42_0_port_unknownmulticastallow': 'true',
+ 'vmxvpfe_sriov44_0_port_vlanstrip': 'false',
+ 'vf_module_id': '123',
+ 'nf_function': 'JAI',
+ 'vmxvpfe_sriov43_0_port_unknownmulticastallow': 'true',
+ 'vmxvre_int_ctl_ip_0': '128.0.0.1',
+ 'AIC_CLLI': 'get_input:2017488_adiodvpe0_AIC_CLLI',
+ 'vnf_name': 'mtnj309me6vre',
+ 'vmxvpfe_sriov41_0_port_unknownunicastallow': 'true',
+ 'vmxvre_volume_type_1': 'HITACHI',
+ 'vmxvpfe_sriov44_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_type_0': 'HITACHI',
+ 'vmxvpfe_volume_type_0': 'HITACHI',
+ 'vmxvpfe_sriov43_0_port_broadcastallow': 'true',
+ 'bandwidth_units': 'get_input:adiodvpe0_bandwidth_units',
+ 'vnf_id': '123',
+ 'vmxvre_oam_prefix': '24',
+ 'availability_zone_0': 'mtpocfo-kvm-az01',
+ 'ASN': 'get_input:2017488_adiodvpe0_ASN',
+ 'vmxvre_chassis_i2cid': '161',
+ 'vmxvpfe_name_0': 'vPFEXI',
+ 'bandwidth': 'get_input:adiodvpe0_bandwidth',
+ 'availability_zone_max_count': '1',
+ 'vmxvre_volume_size_0': '45.0',
+ 'vmxvre_volume_size_1': '50.0',
+ 'vmxvpfe_sriov42_0_port_broadcastallow': 'true',
+ 'vmxvre_oam_gateway': '10.40.123.1',
+ 'vmxvre_volume_name_1': 'vREXI_FAVolume',
+ 'vmxvre_ore_present': '0',
+ 'vmxvre_volume_name_0': 'vREXI_FBVolume',
+ 'vmxvre_type': '0',
+ 'vnf_instance_name': 'get_input:2017488_adiodvpe0_vnf_instance_name',
+ 'vmxvpfe_sriov41_0_port_unknownmulticastallow': 'true',
+ 'oam_net_id': 'b95eeb1d-d55d-4827-abb4-8ebb94941429',
+ 'vmx_int_ctl_len': '24',
+ 'vmxvpfe_sriov43_0_port_vlanstrip': 'false',
+ 'vmxvpfe_sriov41_0_port_broadcastallow': 'true',
+ 'vmxvre_volume_id_1': '6e86797e-03cd-4fdc-ba72-2957119c746d',
+ 'vmxvpfe_sriov41_0_port_vlanfilter': '4001',
+ 'nf_role': 'Testing',
+ 'vmxvre_volume_id_0': 'f4eacb79-f687-4e9d-b760-21847c8bb15a',
+ 'vmxvpfe_sriov42_0_port_unknownunicastallow': 'true',
+ 'vmxvpfe_flavor_name': 'ns.c20r16d25.v5'
+ },
+ 'type': 'VF',
+ 'modelCustomizationName': '2017-388_ADIOD-vPE 1',
+ 'vfModules': {},
+ 'volumeGroups': {}
+ };
+ }
+
+});
+
+
+
+
diff --git a/vid-webpack-master/src/app/services/service-planning.service.ts b/vid-webpack-master/src/app/services/service-planning.service.ts
new file mode 100644
index 000000000..75720c8a1
--- /dev/null
+++ b/vid-webpack-master/src/app/services/service-planning.service.ts
@@ -0,0 +1,282 @@
+import {Injectable} from '@angular/core';
+import {Constants} from "../shared/utils/constants";
+import {Utils} from "../utils/utils";
+import * as _ from 'lodash';
+import Parameter = Constants.Parameter;
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {ServiceInstance} from "../shared/models/serviceInstance";
+import {VNFModel} from "../shared/models/vnfModel";
+import {ServiceNodeTypes} from "../shared/models/ServiceNodeTypes";
+import {VfModuleMap} from "../shared/models/vfModulesMap";
+import {VnfInstance} from "../shared/models/vnfInstance";
+import {VfModuleTreeNode} from "../shared/models/vfModuleTreeNode";
+import {VfModule} from "../shared/models/vfModule";
+import {VnfTreeNode} from "../shared/models/vnfTreeNode";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../store/reducers";
+import {InputType} from "../shared/models/inputTypes";
+
+
+@Injectable()
+export class ServicePlanningService {
+
+ modelDataTree: any[] = [];
+ drawingDataTree: any[] = [];
+ service: any = {name:'My Service'} ;
+ public requiredFields = {
+ VF: [InputType.LCP_REGION, InputType.TENANT, InputType.PLATFORM],
+ VFmodule: []
+ };
+
+ constructor(private store: NgRedux<AppState>) {}
+
+
+ public getServiceName() :string{
+ return this.service.name;
+ }
+
+ public getServiceInstance(serviceModelId): ServiceInstance {
+ return this.store.getState().service.serviceInstance[serviceModelId];
+ }
+
+ public getVnfInstance(serviceModelId, vnfModelName): VnfInstance {
+ return this.getServiceInstance(serviceModelId).vnfs[vnfModelName];
+ }
+
+ public getVfModuleMap(serviceModelId, vnfModelName, vfModuleModelName): VfModuleMap {
+ let vnfInstance = this.getVnfInstance(serviceModelId, vnfModelName);
+ return _.get(vnfInstance, ['vfModules', vfModuleModelName]);
+ }
+
+ public convertServiceModelToTreeNodes(serviceModel) {
+ let _this = this;
+
+ _.forOwn(serviceModel.vnfs, function(item, key) {
+ _this.addFirstLevelModel(key, item, item.type, serviceModel);
+ });
+
+ _.forOwn(serviceModel.configurations, function(item, key) {
+ _this.addFirstLevelModel(key, item, ServiceNodeTypes.Configuration, serviceModel);
+ });
+
+ _.forOwn(serviceModel.networks, function(network, key) {
+ _this.addFirstLevelModel(key, network, ServiceNodeTypes.Network, serviceModel);
+ });
+
+ return this.modelDataTree;
+ }
+
+ private addFirstLevelModel(key, value, valueType, serviceModel) {
+
+ let node = this.convertItemToTreeNode(key, value, valueType, null, false);
+ let vnfInstance = this.getVnfInstance(serviceModel.service.uuid, key);
+ if(value.vfModules) {
+ node.children = Object.keys(value.vfModules).map((vmKey) =>
+ this.convertItemToTreeNode(vmKey, value.vfModules[vmKey], ServiceNodeTypes.VFmodule, value, !vnfInstance));
+ }
+ this.modelDataTree.push(node);
+ }
+
+ private convertItemToTreeNode(key, value, valueType, parentModel , disabled) {
+
+ return {
+ id: value.uuid,
+ name: key,
+ tooltip: valueType,
+ type: valueType,
+ count: value.count || 0,
+ max: value.max || 1,
+ children: [],
+ disabled: disabled,
+ dynamicInputs: this.updateDynamicInputsVnfDataFromModel(valueType, value),
+ userProvidedNaming: this.isUserProvidedNaming(valueType, value, parentModel)
+ }
+ }
+
+ public convertServiceInstanceToTreeData(serviceInstance: ServiceInstance, modelId: string): any {
+ let drawingBoardData = [];
+ let _this = this;
+ _.forOwn(serviceInstance.vnfs, (vnfInstance, vnfModelName) => {
+ let vnfModel: VNFModel = _this.store.getState().service.serviceHierarchy[modelId].vnfs[vnfModelName];
+ let vnfNode = new VnfTreeNode(vnfInstance, vnfModel);
+
+ let vfModuleNodes = [];
+ _.forOwn(vnfInstance.vfModules, (vfModuleMap, vfModuleModelName) => {
+ _.forOwn(vfModuleMap, (vfModuleInstance, vfModuleInstsanceName) => {
+ let vfModule: VfModule = _this.store.getState().service.serviceHierarchy[modelId].vnfs[vnfModelName].vfModules[vfModuleModelName];
+ let vfModuleNode: VfModuleTreeNode = new VfModuleTreeNode(vfModuleInstance, vfModule, vfModuleModelName);
+ vfModuleNodes.push(vfModuleNode);
+ });
+ });
+ vnfNode.children = vfModuleNodes;
+ drawingBoardData.push(vnfNode);
+ });
+
+ return drawingBoardData;
+ }
+
+ public getArbitraryInputs(inputs) {
+ let parameter;
+ let parameterList = [];
+ for (let key in inputs) {
+ parameter = {
+ id : key,
+ type : Parameter.STRING,
+ name : key,
+ value : inputs[key][Parameter.DEFAULT],
+ isRequired : inputs[key][Parameter.REQUIRED],
+ description : inputs[key][Parameter.DESCRIPTION]
+ };
+ switch (inputs[key][Parameter.TYPE]) {
+ case Parameter.INTEGER:
+ parameter.type = Parameter.NUMBER;
+ break;
+ case Parameter.BOOLEAN:
+ parameter.type = Parameter.BOOLEAN;
+ break;
+ case Parameter.RANGE:
+ break;
+ case Parameter.LIST:
+ parameter.type = Parameter.LIST;
+ break;
+ case Parameter.MAP:
+ parameter.type = Parameter.MAP;
+ break;
+ }
+ if ( Utils.hasContents(inputs[key][Parameter.CONSTRAINTS])
+ && ( inputs[key][Parameter.CONSTRAINTS].length > 0 ) ) {
+ let constraintsArray = inputs[key][Parameter.CONSTRAINTS];
+ this.addConstraintParameters (parameterList, constraintsArray, key, inputs, parameter);
+ }
+ else {
+
+ parameterList.push(parameter);
+ }
+ }
+ return parameterList;
+ }
+
+ private addConstraintParameters(parameterList, constraintsArray, key, inputs, parameter) {
+ // If there are constraints and the operator is "valid_values",
+ // use a select parameter type.
+ let i:number = constraintsArray.length;
+ let parameterPushed: boolean = false;
+ if ( i > 0 ) {
+ while ( (i--) && (!parameterPushed) ) {
+ let keys = Object.keys(constraintsArray[i]);
+ for ( let operator in keys ) {
+ switch (keys[operator]) {
+ case Parameter.VALID_VALUES:
+ let j: number = constraintsArray[i][Parameter.VALID_VALUES].length;
+ if ( j > 0 ) {
+ let oList = [];
+ let option;
+ while (j--) {
+ option = {
+ name: constraintsArray[i][Parameter.VALID_VALUES][j],
+ isDefault: false
+ };
+ if ( (Utils.hasContents (inputs[key][Parameter.DEFAULT]) )
+ && (inputs[key][Parameter.DEFAULT] === constraintsArray[i][Parameter.VALID_VALUES][j] ) ) {
+ option = {
+ name: constraintsArray[i][Parameter.VALID_VALUES][j],
+ isDefault: true
+ }
+ }
+ oList.push(option);
+ }
+ parameter.type = Parameter.SELECT;
+ parameter.optionList = oList;
+ parameterList.push(parameter);
+ parameterPushed = true;
+ }
+ break;
+
+ case Parameter.EQUAL:
+ if ( constraintsArray[i][Parameter.EQUAL] != null ) {
+ //override parameter type
+ parameter.type = Parameter.STRING;
+ parameter.isReadOnly = true;
+ parameter.value = constraintsArray[i][Parameter.EQUAL];
+ parameterList.push(parameter);
+ parameterPushed = true;
+ }
+ break;
+
+ case Parameter.LENGTH:
+ if ( constraintsArray[i][Parameter.LENGTH] != null ) {
+ parameter.minLength = constraintsArray[i][Parameter.LENGTH];
+ parameter.maxLength = constraintsArray[i][Parameter.LENGTH];
+ parameterList.push(parameter);
+ parameterPushed = true;
+ }
+ break;
+ case Parameter.MAX_LENGTH:
+ if ( constraintsArray[i][Parameter.MAX_LENGTH] != null ) {
+ parameter.maxLength = constraintsArray[i][Parameter.MAX_LENGTH];
+ parameterList.push(parameter);
+ parameterPushed = true;
+ }
+ break;
+ case Parameter.MIN_LENGTH:
+ if ( constraintsArray[i][Parameter.MIN_LENGTH] != null ) {
+ parameter.minLength = constraintsArray[i][Parameter.MIN_LENGTH];
+ parameterList.push(parameter);
+ parameterPushed = true;
+ }
+ break;
+ case Parameter.IN_RANGE:
+ if ( constraintsArray[i][Parameter.IN_RANGE] != null ) {
+ if (constraintsArray[i][Parameter.IN_RANGE].length > 1 ) {
+ parameter.min = constraintsArray[i][Parameter.IN_RANGE][0];
+ parameter.max = constraintsArray[i][Parameter.IN_RANGE][1];
+ parameter.type = Parameter.NUMBER;
+ parameter.value = inputs[key][Parameter.DEFAULT];
+ parameterList.push(parameter);
+ parameterPushed = true;
+ }
+ }
+ break;
+ case Parameter.GREATER_THAN:
+ if ( constraintsArray[i][Parameter.GREATER_THAN] != null ) {
+ parameter.type = Parameter.NUMBER;
+ parameter.min = constraintsArray[i][Parameter.GREATER_THAN];
+ parameter.value = inputs[key][Parameter.DEFAULT];
+ parameterList.push(parameter);
+ parameterPushed = true;
+ }
+ break;
+ }//switch
+ }//for
+ }//while
+ }//if
+ };
+
+ public static isVfModule(node:ITreeNode): boolean {
+ return node.data.type=='VFmodule';
+ }
+
+ public static isVnf(node:ITreeNode): boolean {
+ return node.data.type == ServiceNodeTypes.VF;
+ }
+
+ updateDynamicInputsVnfDataFromModel(modelType: string, model: any): Array<any> {
+ let displayInputs;
+ if (modelType === ServiceNodeTypes.VFmodule) {
+ displayInputs = model.inputs;
+ }
+ return _.isEmpty(displayInputs) ? [] : this.getArbitraryInputs(displayInputs);
+ }
+
+ isUserProvidedNaming(type: string, nodeModel: any, parentModel: any) : boolean {
+ let model;
+ if (type === ServiceNodeTypes.VFmodule) {
+ model = parentModel;
+ }
+ else {
+ model = nodeModel;
+ }
+ const ecompGeneratedNaming = model.properties.ecomp_generated_naming;
+ return ecompGeneratedNaming !== undefined && ecompGeneratedNaming === "false";
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/api.service.ts b/vid-webpack-master/src/app/shared/api.service.ts
new file mode 100644
index 000000000..a69d91ea4
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/api.service.ts
@@ -0,0 +1,6 @@
+import { Injectable } from '@angular/core';
+
+@Injectable()
+export class ApiService {
+ title = 'Angular 2';
+}
diff --git a/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts b/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts
new file mode 100644
index 000000000..fd58b6507
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts
@@ -0,0 +1,27 @@
+import { Component, Input } from '@angular/core';
+
+@Component({
+ selector : 'custom-ellipsis',
+ template: `
+ <span
+ class="ellipsis"
+ id="{{id}}"
+ tooltip="{{value}}">{{value}}</span>`,
+ styles : [
+ `
+ .ellipsis {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: inline-block;
+ width: 99%;
+ text-align: left;
+ }
+ `
+ ]
+})
+export class EllipsisComponent {
+ @Input() value : string;
+ @Input() id : string;
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/error/error.component.service.ts b/vid-webpack-master/src/app/shared/components/error/error.component.service.ts
new file mode 100644
index 000000000..35b83f0b6
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/error/error.component.service.ts
@@ -0,0 +1,35 @@
+import {Injectable} from "@angular/core";
+import {Subject} from "rxjs/Subject";
+import { MessageBoxService } from '../messageBox/messageBox.service';
+import { MessageBoxData, ModalSize, ModalType } from '../messageBox/messageBox.data';
+
+@Injectable()
+export class ErrorService {
+ static showErrorWithMessage(error : ErrorMessage) : void {
+ setTimeout(()=>{
+ let messageBoxData : MessageBoxData = new MessageBoxData(
+ error.title, // modal title
+ error.text,
+
+ ModalType.error,
+ ModalSize.medium,
+ [
+ {text:"Close", size:"large", closeModal:true}
+ ]);
+ MessageBoxService.openModal.next(messageBoxData);
+ }
+ ,500);
+ }
+}
+
+export class ErrorMessage {
+ title : string;
+ text : string;
+ errorNumber : number;
+
+ constructor( title : string, text : string,errorNumber : number){
+ this.title = title;
+ this.text = text;
+ this.errorNumber = errorNumber;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.html b/vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.html
new file mode 100644
index 000000000..daa35e659
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.html
@@ -0,0 +1,4 @@
+<div *ngIf="message">
+ <span class="icon-alert"></span>
+ <span class="message">{{message}}</span>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.scss b/vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.scss
new file mode 100644
index 000000000..d174f511c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.scss
@@ -0,0 +1,14 @@
+.icon-alert {
+ margin-top: 10px;
+ &:before {
+ content: "\e904";
+ font-size: 16px;
+ color: #cf2a2a;
+ }
+}
+
+.message {
+ font-size: 12px;
+ line-height: 14px;
+ color: #cf2a2a;
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.ts b/vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.ts
new file mode 100644
index 000000000..a20b26030
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControlError/formControlError.component.ts
@@ -0,0 +1,10 @@
+import { Component, Input } from '@angular/core';
+
+@Component({
+ selector : 'form-control-error',
+ templateUrl : 'formControlError.component.html',
+ styleUrls : ['formControlError.component.scss']
+})
+export class FormControlErrorComponent {
+ @Input() message = null;
+}
diff --git a/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.html b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.html
new file mode 100644
index 000000000..4c794e686
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.html
@@ -0,0 +1,10 @@
+<div *ngIf="message" class="row row-padding">
+ <div class="col-md-2 icon-div"><span class="icon-alert"></span></div>
+ <div class="col-md-10 left-align parentbox">
+ <div class="childbox">
+ <span>{{message}}</span>
+ </div>
+ </div>
+</div>
+
+
diff --git a/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss
new file mode 100644
index 000000000..5271cad49
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss
@@ -0,0 +1,48 @@
+.icon-alert {
+ margin-top: 10px;
+ &:before {
+ content: "\e904";
+ font-size: 30px;
+ color: #ffffff;
+ }
+}
+
+.icon-div {
+ background: rgb(207,41,41);
+ text-align: center;
+ padding-top: 18px;
+ width: 77px;
+ height: 110px;
+ float: left;
+}
+
+
+.error-title {
+ color: #cf2a2a;
+}
+
+.row-padding {
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+}
+
+.left-align {
+ text-align: left;
+}
+
+.parentbox {
+ padding-right: 0;
+}
+
+.parentbox:before {
+ content: ' ';
+ display: inline-block;
+ vertical-align: middle;
+ height: 100%;
+}
+
+.childbox {
+ color: #cf2a2a;
+ display: inline-block;
+ vertical-align: middle;
+}
diff --git a/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.ts b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.ts
new file mode 100644
index 000000000..0c0516a4d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.ts
@@ -0,0 +1,11 @@
+import { Component, Input } from '@angular/core';
+
+@Component({
+ selector : 'form-general-error',
+ templateUrl : 'formGeneralErrors.component.html',
+ styleUrls : ['formGeneralErrors.component.scss']
+})
+
+export class FormGeneralErrorsComponent {
+ @Input() message : string = null;
+}
diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts
new file mode 100644
index 000000000..08e199cf5
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts
@@ -0,0 +1,50 @@
+/************************************************************************************************
+ * @Component: Message box component
+ * In order to use component you need to do a number of things:
+ * 1) Inside your component constructor you need to add listener to the button trigger.
+ * 2) Inside the listener you should write your callback logic.
+ *
+ * Example:
+ * @Component({
+ * selector : 'some-component'
+ * ...
+ * })
+ *
+ * export class SomeComponent {
+ * openModal() : void {
+ * let messageBoxData : MessageBoxData = new MessageBoxData(
+ * "title", // modal title
+ * "message", ModalType.alert, // modal type
+ * [
+ {text:"Save", size:"'x-small'", callback: this.someFunction.bind(this), closeModal:true},
+ {text:"Cancel", size:"'x-small'", closeModal:true}
+ ]);
+ *
+ * MessageBoxService.openModal.next(messageBoxData); // open modal
+ * }
+ * }
+
+ ************************************************************************************************/
+
+
+import { Component } from '@angular/core';
+import { MessageBoxData} from './messageBox.data';
+import { MessageBoxService } from './messageBox.service';
+import { SdcUiComponents } from 'sdc-ui/lib/angular';
+
+@Component({
+ selector: 'message-box',
+ template: '<div id="message-box"></div>'
+})
+
+export class MessageBoxComponent {
+ modalService: SdcUiComponents.ModalService;
+
+ constructor(modalService: SdcUiComponents.ModalService, private _messageBoxService : MessageBoxService) {
+ this.modalService = modalService;
+ MessageBoxService.openModal.subscribe((messageBoxData: MessageBoxData) => {
+ modalService.openModal(this._messageBoxService.setConfig(messageBoxData))
+ });
+ }
+}
+
diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts
new file mode 100644
index 000000000..165140ba7
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts
@@ -0,0 +1,51 @@
+import { Subject } from 'rxjs/Subject';
+
+export class MessageBoxData {
+ title?: string;
+ message?: string;
+ size : ModalSize;
+ type: ModalType;
+ buttons: Array<IModalButtonComponent>;
+
+ constructor(title: string, message: string, type: ModalType, size : ModalSize, buttons: Array<IModalButtonComponent>) {
+ this.title = title;
+ this.message = message;
+ this.size = size;
+ this.type = type;
+ this.buttons = buttons;
+ }
+}
+
+export interface IModalConfig {
+ size?: string;
+ title?: string;
+ message?: string;
+ buttons?: Array<IModalButtonComponent>;
+ type?: string;
+}
+export interface IButtonComponent {
+ text: string;
+ disabled?: boolean;
+ type?: string;
+ size?: string;
+}
+export interface IModalButtonComponent extends IButtonComponent {
+ callback?: Function;
+ closeModal?: boolean;
+}
+export enum ModalType {
+ alert = "alert",
+ error = "error",
+ standard = "info",
+ custom = "custom",
+}
+export enum ModalSize {
+ xlarge = "xl",
+ large = "l",
+ medium = "md",
+ small = "sm",
+ xsmall = "xsm",
+}
+
+
+
diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts
new file mode 100644
index 000000000..89562ac54
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts
@@ -0,0 +1,49 @@
+import { TestBed, getTestBed } from '@angular/core/testing';
+import {
+ HttpClientTestingModule,
+ HttpTestingController
+} from '@angular/common/http/testing';
+
+import { MessageBoxService } from './messageBox.service';
+import {MessageBoxData, ModalSize, ModalType } from './messageBox.data';
+
+describe('MessageBoxService', () => {
+ let injector;
+ let service: MessageBoxService;
+ let httpMock: HttpTestingController;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
+ providers: [MessageBoxService]
+ });
+
+ injector = getTestBed();
+ service = injector.get(MessageBoxService);
+ httpMock = injector.get(HttpTestingController);
+ });
+
+ describe('#setConfig', () => {
+ it('should return <IModalConfig>', (done: DoneFn) => {
+ let title = "Delete Instantiation";
+ let message = "You are about to stop the instantiation process of this service. \nAll data will be lost. Are you sure you want to stop?";
+ let messageBoxData : MessageBoxData = new MessageBoxData(
+ title,
+ message,
+ ModalType.alert,
+ ModalSize.medium,
+ [
+ {text:"Stop Instantiation", size:"large", closeModal:true},
+ {text:"Cancel", size:"medium", closeModal:true}
+ ]);
+
+ let result = service.setConfig(messageBoxData);
+ expect(result.title).toEqual(title);
+ expect(result.message).toEqual(message);
+ expect(result.buttons.length).toEqual(2);
+ expect(result.type).toEqual(ModalType.alert);
+ expect(result.size).toEqual(ModalSize.medium);
+ done();
+ });
+ });
+});
diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts
new file mode 100644
index 000000000..eaa012d3b
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts
@@ -0,0 +1,18 @@
+import { Injectable } from '@angular/core';
+import { Subject } from 'rxjs/Subject';
+import { IModalConfig, MessageBoxData, ModalSize, ModalType } from './messageBox.data';
+
+@Injectable()
+export class MessageBoxService {
+ static openModal: Subject<MessageBoxData> = new Subject<MessageBoxData>();
+ setConfig(messageBoxData: MessageBoxData) : IModalConfig{
+ return {
+ size : ModalSize.medium,
+ title : messageBoxData.title,
+ type : messageBoxData.type,
+ message : messageBoxData.message,
+ buttons: messageBoxData.buttons
+ };
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts
new file mode 100644
index 000000000..fea4c44c7
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts
@@ -0,0 +1,42 @@
+import {Component, Input} from '@angular/core';
+import * as _ from 'lodash';
+
+@Component({
+ selector: 'model-information',
+ templateUrl: 'model-information.html',
+ styleUrls: ['model-information.scss']
+})
+
+export class ModelInformationComponent {
+ private _modelInformationItems: Array<ModelInformationItem>;
+
+
+ get modelInformationItems(): Array<ModelInformationItem> {
+ return this._modelInformationItems;
+ }
+
+ @Input()
+ set modelInformationItems(_modelInformationItems: Array<ModelInformationItem>) {
+ if (_modelInformationItems) {
+ this._modelInformationItems = _modelInformationItems.filter(x => x.mandatory || (!_.isEmpty(x.values) && !_.isEmpty(x.values[0])));
+ }
+ }
+}
+
+
+export class ModelInformationItem {
+ label: string;
+ testsId: string;
+ values: Array<string>;
+ toolTipText: string;
+ mandatory: boolean;
+
+ constructor(label: string, testsId: string, values: Array<any>, toolTipText: string = "", mandatory: boolean = false,nested:boolean=false) {
+ this.label = label;
+ this.testsId = testsId;
+ this.values = values;
+ this.toolTipText = toolTipText;
+ this.mandatory = mandatory;
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.html b/vid-webpack-master/src/app/shared/components/model-information/model-information.html
new file mode 100644
index 000000000..456dfdee4
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.html
@@ -0,0 +1,12 @@
+<div id="model-information">
+ <div *ngFor="let item of modelInformationItems" class="item" attr.data-tests-id="model-item-{{item.label}}">
+ <tooltip-content #a>
+ <span> {{item.toolTipText}}</span>
+ </tooltip-content>
+
+ <div class="wrapper" [tooltip]="a" [tooltipDisabled]="!item.toolTipText" tooltipPlacement="top" [tooltipAnimation]="false">
+ <label attr.data-tests-id="model-item-label-{{item.testsId}}">{{item.label}}</label>
+ <div *ngFor="let value of item.values" attr.data-tests-id="model-item-value-{{item.testsId}}">{{value}}</div>
+ </div>
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.scss b/vid-webpack-master/src/app/shared/components/model-information/model-information.scss
new file mode 100644
index 000000000..cd42136ed
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.scss
@@ -0,0 +1,34 @@
+#model-information {
+ overflow: auto;
+
+}
+
+tooltip-content span {
+ font-family: OpenSans-Regular;
+ font-size: 12px;
+ color: #FFFFFF;
+ letter-spacing: 0;
+ line-height: 16px;
+}
+
+.item {
+ display: block;
+
+ .wrapper {
+
+ display: inline-block;
+ margin-bottom: 25px;
+
+ label {
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ }
+
+ div {
+ font-family: OpenSans-Regular;
+ font-size: 14px;
+ }
+ }
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html
new file mode 100644
index 000000000..bbe7bc78c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html
@@ -0,0 +1,5 @@
+<div class="width-100">
+ <div class="text-title" [ngClass]="titleClass">{{title}}</div>
+ <div class="text-subtitle" [ngClass]="subtitleClass">{{subtitle}}</div>
+ <img id="not-node-img-id" src="{{iconPath}}" alt="" class="no-content-icon" [ngClass]="iconClass" data-tests-id="no-content-icon">
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss
new file mode 100644
index 000000000..1320ef731
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss
@@ -0,0 +1,26 @@
+.width-100 {
+ width: 100%;
+ margin-top: 126px;
+
+}
+
+.text-title {
+ font-family: OpenSans-Semibold;
+ font-size: 16px;
+ color: #4A4A4A;
+ text-align: center;
+}
+
+.text-subtitle {
+ font-family: OpenSans-Regular;
+ font-size: 16px;
+ color: #959595;
+ text-align: center;
+ margin-top: 7px;
+}
+
+.no-content-icon {
+ display: block;
+ vertical-align: middle;
+ margin: 30px auto;
+}
diff --git a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts
new file mode 100644
index 000000000..7f4e98294
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts
@@ -0,0 +1,23 @@
+import {Component, Input} from '@angular/core';
+
+@Component({
+ selector: 'no-content-message-and-icon',
+ templateUrl: './no-content-message-and-icon.component.html',
+ styleUrls: ['./no-content-message-and-icon.component.scss']
+})
+
+
+export class NoContentMessageAndIconComponent {
+ constructor() {}
+
+ @Input() title: string;
+ @Input() subtitle: string;
+ @Input() iconPath: string;
+
+ @Input() titleClass: string="";
+ @Input() subtitleClass: string="";
+ @Input() iconClass: string="";
+
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/components/popover/popover.component.html b/vid-webpack-master/src/app/shared/components/popover/popover.component.html
new file mode 100644
index 000000000..c5515596c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/popover/popover.component.html
@@ -0,0 +1,8 @@
+<div
+ triggers="mouseenter:mouseleave"
+ popover="{{value}}"
+ [hidden]="value == null"
+ container="body">
+ <ng-content ></ng-content>
+</div>
+
diff --git a/vid-webpack-master/src/app/shared/components/popover/popover.component.scss b/vid-webpack-master/src/app/shared/components/popover/popover.component.scss
new file mode 100644
index 000000000..ca2800a27
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/popover/popover.component.scss
@@ -0,0 +1,4 @@
+.popover.popover-top.top {
+ color : green !important;
+ font-size: 10px;
+}
diff --git a/vid-webpack-master/src/app/shared/components/popover/popover.component.ts b/vid-webpack-master/src/app/shared/components/popover/popover.component.ts
new file mode 100644
index 000000000..d6a4c3ae1
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/popover/popover.component.ts
@@ -0,0 +1,17 @@
+import {Component, Input} from "@angular/core";
+
+@Component({
+ selector: 'custom-popover',
+ templateUrl: 'popover.component.html',
+ styles: [`
+ :host >>> .popover {
+ font-size: 13px;
+ text-align: left;
+ z-index: 10000;
+ }
+ `]
+})
+
+export class PopoverComponent {
+ @Input() value: String;
+}
diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html
new file mode 100644
index 000000000..cb11feea8
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html
@@ -0,0 +1,2 @@
+<div *ngIf="show"
+ class="spinner"></div>
diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.scss b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.scss
new file mode 100644
index 000000000..d31dfed80
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.scss
@@ -0,0 +1,87 @@
+.spinner {
+ height: 150px;
+ width: 150px;
+ margin: 0 auto;
+ -webkit-animation: rotation .6s infinite linear;
+ animation: rotation .6s infinite linear;
+ border: 6px solid rgba(0, 174, 239, 0.01);
+ border-radius: 100%;
+ position: absolute;
+ z-index: 1000;
+ left: 50%;
+ right: 50%;
+ top: 50%;
+ bottom: 50%;
+}
+
+
+
+.spinner:before {
+ content: "";
+ display: block;
+ position: absolute;
+ top: -6px;
+ height: 100%;
+ width: 100%;
+ border-top: 6px solid #009fdb;
+ border-left: 6px solid transparent;
+ border-bottom: 6px solid #c3161600;
+ border-right: 6px solid transparent;
+ border-radius: 100%;
+}
+
+@-webkit-keyframes rotation {
+ from {-webkit-transform: rotate(0deg);}
+ to {-webkit-transform: rotate(359deg);}
+}
+@-moz-keyframes rotation {
+ from {-moz-transform: rotate(0deg);}
+ to {-moz-transform: rotate(359deg);}
+}
+@-o-keyframes rotation {
+ from {-o-transform: rotate(0deg);}
+ to {-o-transform: rotate(359deg);}
+}
+@keyframes rotation {
+ from {transform: rotate(0deg);}
+ to {transform: rotate(359deg);}
+}
+
+.spinner-sm {
+ height:16px;
+ width:16px;
+}
+
+.spinner-md {
+ height:40px;
+ width:40px;
+}
+
+.spinner-lr {
+ height:150px;
+ width:150px;
+}
+
+.spinner-red {
+ border:6px solid rgba(216, 27, 34, .15);
+}
+
+.spinner-red:before {
+ border-top:6px solid rgba(216, 27, 34, 1);
+}
+
+.spinner-green {
+ border:6px solid rgba(40, 183, 121, .15);
+}
+
+.spinner-green:before {
+ border-top:6px solid rgba(40, 183, 121, 1);
+}
+
+.spinner-grey {
+ border:6px solid rgba(139, 146, 154, .15);
+}
+
+.spinner-grey:before {
+ border-top:6px solid rgba(139, 146, 154, 1);
+}
diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts
new file mode 100644
index 000000000..531ee8c62
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts
@@ -0,0 +1,42 @@
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule} from '@angular/common/http/testing';
+import { SpinnerComponent } from './spinner.component';
+
+describe('Spinner component', () => {
+ let component: SpinnerComponent;
+ let fixture: ComponentFixture<SpinnerComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
+ providers: [],
+ declarations: [SpinnerComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(SpinnerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('component should be defined', () => {
+ expect(component).toBeDefined();
+ });
+
+
+ it('component constructor should subscribe of showSpinner event with true', ()=> {
+ SpinnerComponent.showSpinner.next(true);
+ expect(component.show).toBeTruthy();
+ });
+
+ it('component constructor should subscribe of showSpinner event with false', ()=> {
+ SpinnerComponent.showSpinner.next(false);
+ expect(component.show).toBeFalsy();
+ });
+
+
+
+
+});
diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts
new file mode 100644
index 000000000..0ce5d2074
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts
@@ -0,0 +1,18 @@
+import { Component, Input } from '@angular/core';
+import { Subject } from 'rxjs/Subject';
+
+@Component({
+ selector : 'spinner-component',
+ templateUrl : './spinner.component.html',
+ styleUrls : ['./spinner.component.scss']
+})
+export class SpinnerComponent {
+ show : boolean = false;
+ static showSpinner: Subject<boolean> = new Subject<boolean>();
+
+ constructor(){
+ SpinnerComponent.showSpinner.subscribe((status) => {
+ this.show = status;
+ })
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts b/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts
new file mode 100644
index 000000000..ec9f3f73e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts
@@ -0,0 +1,39 @@
+import { ReflectiveInjector } from '@angular/core';
+import { NumbersLettersUnderscoreValidator } from './numbersLettersUnderscore.validator';
+
+describe('Numbers letters underscore validator', () => {
+ let injector;
+ let service: NumbersLettersUnderscoreValidator;
+
+ beforeEach(() => {
+
+ let injector = ReflectiveInjector.resolveAndCreate([
+ NumbersLettersUnderscoreValidator
+ ]);
+
+ service = injector.get(NumbersLettersUnderscoreValidator);
+ });
+
+
+ describe('#valid', () => {
+ it("'legal' should return null", ()=> {
+ let legalVal: string = "legal";
+ let result = NumbersLettersUnderscoreValidator.valid(legalVal);
+ expect(result).toBeNull();
+ });
+
+ it("'illegal' should return object with invalidNumberLettersUnderscore true", ()=> {
+ let illegalVal: string = "illegal-Val";
+ let result = NumbersLettersUnderscoreValidator.valid(illegalVal);
+ expect(result.invalidNumberLettersUnderscore).toBeTruthy();
+ });
+
+ it("'null' should return null", ()=> {
+ let nullVal: string = null
+ let result = NumbersLettersUnderscoreValidator.valid(nullVal);
+ expect(result).toBeNull();
+ });
+
+
+ });
+});
diff --git a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts b/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts
new file mode 100644
index 000000000..418bdfc4d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts
@@ -0,0 +1,20 @@
+import { Injectable } from '@angular/core';
+import { isNullOrUndefined, isString } from 'util';
+
+@Injectable()
+export class NumbersLettersUnderscoreValidator {
+ static valid(control: any) {
+ let reg = /^[a-zA-Z0-9_]*$/;
+
+ if(isNullOrUndefined(control)) return null;
+ let val = isString(control) ? control : control.value;
+ if (val === null) {
+ return {'invalidNumberLettersUnderscore': true};
+ }
+ if (reg.test(val)) {
+ return null;
+ } else {
+ return {'invalidNumberLettersUnderscore': true};
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.spec.ts b/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.spec.ts
new file mode 100644
index 000000000..846ff70f2
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.spec.ts
@@ -0,0 +1,66 @@
+import {TestBed, ComponentFixture} from '@angular/core/testing';
+import {Component, DebugElement} from "@angular/core";
+import {By} from "@angular/platform-browser";
+import { InputPreventionPatternDirective } from './inputPreventionPattern.directive';
+
+@Component({
+ template: `<input
+ patternInput
+ pattern="^[a-zA-Z0-9_]*$">`
+})
+class TestHoverFocusComponent {
+}
+
+
+describe('InputPrevention Pattern Directive', () => {
+
+ let component: TestHoverFocusComponent;
+ let fixture: ComponentFixture<TestHoverFocusComponent>;
+ let directiveInstance : InputPreventionPatternDirective;
+ let inputEl: DebugElement;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ declarations: [TestHoverFocusComponent, InputPreventionPatternDirective]
+ });
+ fixture = TestBed.createComponent(TestHoverFocusComponent);
+ component = fixture.componentInstance;
+ inputEl = fixture.debugElement.query(By.css('input'));
+ directiveInstance = inputEl.injector.get(InputPreventionPatternDirective);
+ });
+
+ it('directive should be defined', () => {
+ expect(directiveInstance).toBeDefined();
+ });
+
+ it('pattern exists', () => {
+ expect(inputEl.nativeElement.pattern).toEqual('^[a-zA-Z0-9_]*$');
+ });
+
+ it('kepress legal input', () => {
+ fixture.detectChanges();
+ inputEl.nativeElement.value = "legalInput";
+ expect(new RegExp(inputEl.nativeElement.pattern).test(inputEl.nativeElement.value)).toBeTruthy();
+ });
+
+ it('kepress illegal input', () => {
+ inputEl.triggerEventHandler('kepress', " ");
+ fixture.detectChanges();
+ expect(inputEl.nativeElement.value).toBe('');
+ });
+
+ it('kepress event legal input should return event', () => {
+ const event = <any>{ key: 'A' };
+ inputEl.nativeElement.value = "legalInput";
+ let result = directiveInstance.onKeypress(event);
+ expect(result).toBe(event);
+ });
+
+ it('kepress event illegal input should prevent default', () => {
+ const event = <any>{key: '-', preventDefault : function () {} };
+ spyOn(event, 'preventDefault');
+ inputEl.nativeElement.value = "-";
+ let result = directiveInstance.onKeypress(event);
+ expect(event.preventDefault).toHaveBeenCalled();
+ });
+});
diff --git a/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.ts b/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.ts
new file mode 100644
index 000000000..dada09bef
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.ts
@@ -0,0 +1,24 @@
+import {Directive, ElementRef} from '@angular/core';
+
+@Directive({
+ selector: '[patternInput]',
+ host: {
+ '(keypress)': 'onKeypress($event)'
+ }
+})
+export class InputPreventionPatternDirective{
+ inputElement : ElementRef;
+ constructor(el: ElementRef) {
+ this.inputElement = el;
+ }
+
+ onKeypress(event: KeyboardEvent) {
+ const pattern = new RegExp(this.inputElement.nativeElement.pattern);
+ if(pattern){
+ if(!pattern.test(event['key'])){
+ event.preventDefault();
+ }
+ }
+ return event;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/directives/svg/svg.directive.html b/vid-webpack-master/src/app/shared/directives/svg/svg.directive.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/directives/svg/svg.directive.html
diff --git a/vid-webpack-master/src/app/shared/directives/svg/svg.directive.ts b/vid-webpack-master/src/app/shared/directives/svg/svg.directive.ts
new file mode 100644
index 000000000..e4dc55a56
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/directives/svg/svg.directive.ts
@@ -0,0 +1,34 @@
+import { AfterContentChecked, AfterViewInit, Directive, ElementRef, Input } from '@angular/core';
+import { isNullOrUndefined } from 'util';
+
+
+/*
+ Temporary
+ Changing svg color and size.
+ color changing according to fill attribute
+ size according to viewBox
+*/
+@Directive({
+ selector: '[svg-directive]'
+})
+export class SvgDirective implements AfterContentChecked {
+ @Input('fill') fill: string = "black";
+ @Input('widthViewBox') widthViewBox: string = null;
+ @Input('heightViewBox') heightViewBox: string = null;
+
+ constructor(private elRef: ElementRef) {}
+ ngAfterContentChecked(): void {
+ if(this.elRef !== undefined && this.elRef.nativeElement.children !== undefined && this.elRef.nativeElement.children[0] !== undefined){
+ this.elRef.nativeElement.children[0].children[1].children[0].style.fill = this.fill;
+ if(this.elRef.nativeElement.children[0].children[1].children.length > 1){
+ this.elRef.nativeElement.children[0].children[1].children[1].style.fill = this.fill;
+ this.elRef.nativeElement.children[0].children[1].children[2].children[0].style.fill = this.fill;
+ }
+
+ if(this.widthViewBox && this.heightViewBox){
+ this.elRef.nativeElement.firstChild.setAttribute('viewBox', "1 1 " + this.widthViewBox + " " + this.heightViewBox)
+ }
+
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/index.ts b/vid-webpack-master/src/app/shared/index.ts
new file mode 100644
index 000000000..68fada65d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/index.ts
@@ -0,0 +1 @@
+export * from './api.service';
diff --git a/vid-webpack-master/src/app/shared/models/ServiceNodeTypes.ts b/vid-webpack-master/src/app/shared/models/ServiceNodeTypes.ts
new file mode 100644
index 000000000..f72b32d8b
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/ServiceNodeTypes.ts
@@ -0,0 +1,8 @@
+export enum ServiceNodeTypes {
+ VF = "VF",
+ VFmodule = "VFmodule",
+ Network = "Network",
+ Configuration = "Configuration"
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/models/aicZone.ts b/vid-webpack-master/src/app/shared/models/aicZone.ts
new file mode 100644
index 000000000..7b9e1ed4e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/aicZone.ts
@@ -0,0 +1,9 @@
+export class AicZone {
+ id: string;
+ name: string;
+
+ constructor(serviceJson){
+ this.id = serviceJson["zone-id"];
+ this.name = serviceJson["zone-name"];
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/categoryParams.ts b/vid-webpack-master/src/app/shared/models/categoryParams.ts
new file mode 100644
index 000000000..9e0052979
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/categoryParams.ts
@@ -0,0 +1,15 @@
+import {SelectOptionInterface} from "./selectOption";
+
+export class CategoryParams {
+ owningEntityList: SelectOptionInterface[];
+ projectList: SelectOptionInterface[];
+ lineOfBusinessList: SelectOptionInterface[];
+ platformList: SelectOptionInterface[];
+
+ constructor(owningEntityList=[], projectList=[], lob=[], platform=[]){
+ this.owningEntityList = owningEntityList;
+ this.projectList = projectList;
+ this.lineOfBusinessList = lob;
+ this.platformList = platform;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/dynamicInput.ts b/vid-webpack-master/src/app/shared/models/dynamicInput.ts
new file mode 100644
index 000000000..a08cdfc77
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/dynamicInput.ts
@@ -0,0 +1,123 @@
+export class DynamicInput<T>{
+
+ id: string;
+ name: string;
+ type: string;
+ description: string;
+ value: T;
+ prompt: any;
+ maxLength: number;
+ minLength: number;
+ isVisible: boolean;
+ isRequired: boolean;
+ isEnabled: boolean;
+ isReadOnly: boolean;
+
+
+ constructor(options: {
+ id?: string,
+ name?: string,
+ type: string,
+ description?: string,
+ value?: T,
+ prompt?: any,
+ maxLength?: number,
+ minLength?: number,
+ isVisible?: boolean,
+ isRequired?: boolean,
+ isEnabled?: boolean,
+ isReadOnly?: boolean,
+ }) {
+ this.id = options.id;
+ this.name = options.name || '';
+ this.type = options.type;
+ this.description = options.description || '';
+ this.value = options.value;
+ this.prompt = options.prompt;
+ this.maxLength = options.maxLength;
+ this.minLength = options.minLength;
+ this.isVisible = options.isVisible == false? options.isVisible: true;
+ this.isEnabled = options.isEnabled == false? options.isEnabled: true;
+ this.isRequired = options.isRequired == null? false: options.isRequired;
+ this.isReadOnly = options.isReadOnly == null? false: options.isReadOnly;
+ }
+}
+
+export class DynamicNumber extends DynamicInput<number> {
+
+ max: number;
+ min: number;
+
+ constructor(options: {
+ id?: string,
+ name?: string,
+ type: string,
+ description?: string,
+ value?: number,
+ prompt?: any,
+ maxLength?: number,
+ minLength?: number,
+ isVisible?: boolean,
+ isRequired?: boolean,
+ isEnabled?: boolean,
+ isReadOnly?: boolean,
+ max?: number,
+ min?: number
+ }){
+ super(options);
+ this.max = options.max;
+ this.min = options.min;
+ }
+
+}
+
+export class DynamicSelect extends DynamicInput<any> {
+ optionList: any[];
+
+ constructor(options: {
+ id?: string,
+ name?: string,
+ type: string,
+ description?: string,
+ value?: any,
+ prompt?: any,
+ maxLength?: number,
+ minLength?: number,
+ isVisible?: boolean,
+ isRequired?: boolean,
+ isEnabled?: boolean,
+ isReadOnly?: boolean,
+ optionList?: any[]
+ }) {
+ super(options);
+ this.optionList = options.optionList || [];
+ }
+}
+
+export class DynamicMultiSelect extends DynamicSelect {
+ selectedItems: any[];
+ settings: any;
+
+ constructor(options: {
+ id?: string,
+ name?: string,
+ type: string,
+ description?: string,
+ value?: any,
+ prompt?: any,
+ maxLength?: number,
+ minLength?: number,
+ isVisible?: boolean,
+ isRequired?: boolean,
+ isEnabled?: boolean,
+ isReadOnly?: boolean,
+ settings?: any,
+ optionList?: any[],
+ selectedItems?: any[]
+ }) {
+ super(options);
+ this.settings = options.settings || {};
+ this.selectedItems = options.selectedItems || [];
+ }
+}
+
diff --git a/vid-webpack-master/src/app/shared/models/externalComponentStatus.ts b/vid-webpack-master/src/app/shared/models/externalComponentStatus.ts
new file mode 100644
index 000000000..21ef61a8a
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/externalComponentStatus.ts
@@ -0,0 +1,11 @@
+export class ExternalComponentStatus {
+ component: string;
+ available: boolean;
+ metadata: any;
+
+ constructor(component: string, available: boolean, metadata: any) {
+ this.component = component;
+ this.available = available;
+ this.metadata = metadata;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/inputTypes.ts b/vid-webpack-master/src/app/shared/models/inputTypes.ts
new file mode 100644
index 000000000..1f7222f52
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/inputTypes.ts
@@ -0,0 +1,12 @@
+export enum InputType {
+ LCP_REGION = "LCP_REGION",
+ TENANT = "TENANT",
+ LOB = "LOB",
+ PLATFORM = "PLATFORM",
+ ROLLBACK = "ROLLBACK",
+ PRODUCT_FAMILY = "PRODUCT_FAMILY",
+ VG = "VG"
+
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/models/lcpRegion.ts b/vid-webpack-master/src/app/shared/models/lcpRegion.ts
new file mode 100644
index 000000000..e39321d58
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/lcpRegion.ts
@@ -0,0 +1,11 @@
+export class LcpRegion {
+ id: string;
+ name: string;
+ isPermitted: boolean;
+
+ constructor(serviceJson){
+ this.id = serviceJson["cloudRegionID"];
+ this.name = serviceJson["cloudRegionID"];
+ this.isPermitted = serviceJson["is-permitted"];
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/lcpRegionTenants.ts b/vid-webpack-master/src/app/shared/models/lcpRegionTenants.ts
new file mode 100644
index 000000000..d215546aa
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/lcpRegionTenants.ts
@@ -0,0 +1,13 @@
+export class LcpRegionTenants {
+ id: string;
+ tenantId: string;
+ tenantName: string;
+ isPermitted: boolean;
+
+ constructor(serviceJson){
+ this.id = serviceJson["cloudRegionID"];
+ this.tenantId = serviceJson["tenantID"];
+ this.tenantName = serviceJson["tenantName"];
+ this.isPermitted = serviceJson["is-permitted"];
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/lcpRegionsAndTenants.ts b/vid-webpack-master/src/app/shared/models/lcpRegionsAndTenants.ts
new file mode 100644
index 000000000..79f6e07d4
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/lcpRegionsAndTenants.ts
@@ -0,0 +1,12 @@
+import {LcpRegion} from "./lcpRegion";
+import {Tenant} from "./tenant";
+
+export class LcpRegionsAndTenants {
+ lcpRegionList: LcpRegion[];
+ lcpRegionsTenantsMap: { [lcpRegion: string] : Tenant[]; };
+
+ constructor(lcpRegionList: LcpRegion[] = [], lcpRegionsTenantsMap: any = {}) {
+ this.lcpRegionList = lcpRegionList;
+ this.lcpRegionsTenantsMap = lcpRegionsTenantsMap;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/modelInfo.ts b/vid-webpack-master/src/app/shared/models/modelInfo.ts
new file mode 100644
index 000000000..091c02ef1
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/modelInfo.ts
@@ -0,0 +1,21 @@
+
+export class ModelInfo {
+ modelInvariantId: string;
+ modelVersionId: string;
+ modelName: string;
+ modelVersion: string;
+ modelCustomizationId: string;
+ modelCustomizationName: string;
+
+
+
+ constructor(instanceModel) {
+ this.modelInvariantId = instanceModel.invariantUuid;
+ this.modelVersionId = instanceModel.uuid;
+ this.modelName = instanceModel.name;
+ this.modelVersion = instanceModel.version;
+ this.modelCustomizationId = instanceModel.customizationUuid;
+ this.modelCustomizationName = instanceModel.modelCustomizationName;
+ }
+}
+
diff --git a/vid-webpack-master/src/app/shared/models/nodeModel.ts b/vid-webpack-master/src/app/shared/models/nodeModel.ts
new file mode 100644
index 000000000..4b22b8d91
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/nodeModel.ts
@@ -0,0 +1,29 @@
+export interface NodeModelResponseInterface {
+ name: string;
+ version: string;
+ description: string;
+ category: string;
+ uuid: string;
+ invariantUuid: string;
+}
+
+export class NodeModel {
+ name: string;
+ version: string;
+ description: string;
+ category: string;
+ uuid: string;
+ invariantUuid: string;
+
+ constructor(serviceJson?: NodeModelResponseInterface) {
+ if (serviceJson) {
+ this.name = serviceJson.name;
+ this.version = serviceJson.version;
+ this.description = serviceJson.description;
+ this.category = serviceJson.category;
+ this.uuid = serviceJson.uuid;
+ this.invariantUuid = serviceJson.invariantUuid;
+ }
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/models/owningEntity.ts b/vid-webpack-master/src/app/shared/models/owningEntity.ts
new file mode 100644
index 000000000..f06b24ff0
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/owningEntity.ts
@@ -0,0 +1,14 @@
+interface OwningEntityResponse {
+ id: string,
+ name: string
+}
+
+export class OwningEntity {
+ id: string;
+ name: string;
+
+ constructor(serviceJson: OwningEntityResponse){
+ this.id = serviceJson.id;
+ this.name = serviceJson.name;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/productFamily.ts b/vid-webpack-master/src/app/shared/models/productFamily.ts
new file mode 100644
index 000000000..3c55ac004
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/productFamily.ts
@@ -0,0 +1,13 @@
+import {ServiceResponseInterface} from "../../services/aaiService/responseInterfaces/getServicesResponseInterface";
+
+export class ProductFamily {
+ id: string;
+ name: string;
+ isPermitted: boolean;
+
+ constructor(serviceResponse: ServiceResponseInterface){
+ this.id = serviceResponse['service-id'];
+ this.name = serviceResponse["service-description"];
+ this.isPermitted = serviceResponse["is-permitted"];
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/project.ts b/vid-webpack-master/src/app/shared/models/project.ts
new file mode 100644
index 000000000..db8929e38
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/project.ts
@@ -0,0 +1,14 @@
+interface ProjectResponseInterface {
+ id: string,
+ name: string
+}
+
+export class Project {
+ id: string;
+ name: string;
+
+ constructor(projectResponse: ProjectResponseInterface){
+ this.id = projectResponse.id;
+ this.name = projectResponse.name;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/selectOption.ts b/vid-webpack-master/src/app/shared/models/selectOption.ts
new file mode 100644
index 000000000..c12c1a823
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/selectOption.ts
@@ -0,0 +1,17 @@
+export interface SelectOptionInterface {
+ id: string,
+ name: string
+ isPermitted?: boolean
+}
+
+export class SelectOption {
+ id: string;
+ name: string;
+ isPermitted?: boolean;
+
+ constructor(option: SelectOptionInterface){
+ this.id = option.id;
+ this.name = option.name;
+ this.isPermitted = option.isPermitted;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/serviceInstance.ts b/vid-webpack-master/src/app/shared/models/serviceInstance.ts
new file mode 100644
index 000000000..a952430b0
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/serviceInstance.ts
@@ -0,0 +1,28 @@
+import {VnfInstance} from "./vnfInstance";
+
+export class ServiceInstance {
+ instanceName: string;
+ isUserProvidedNaming: boolean;
+ globalSubscriberId: string;
+ productFamilyId: string;
+ subscriptionServiceType: string;
+ lcpCloudRegionId: string;
+ tenantId: string;
+ tenantName: string;
+ aicZoneId: string;
+ aicZoneName: string;
+ projectName: string;
+ owningEntityId: string;
+ owningEntityName: string;
+ pause: boolean;
+ bulkSize: number;
+ vnfs: { [vnf_module_model_name: string] : VnfInstance; };
+ instanceParams: { [key: string] : string; };
+ rollbackOnFailure : boolean;
+ subscriberName : string;
+
+ constructor() {
+ this.vnfs = {};
+ this.instanceParams = {};
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/serviceModel.ts b/vid-webpack-master/src/app/shared/models/serviceModel.ts
new file mode 100644
index 000000000..18d8582e8
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/serviceModel.ts
@@ -0,0 +1,44 @@
+import {NodeModel, NodeModelResponseInterface} from "./nodeModel";
+import * as _ from "lodash";
+
+
+export interface ServiceModelResponseInterface extends NodeModelResponseInterface{
+
+ serviceType: string;
+ serviceRole: string;
+ serviceEcompNaming: boolean;
+}
+
+export class ServiceModel extends NodeModel{
+
+ serviceType: string;
+ serviceRole: string;
+ servicesQty: number;
+ isUserProvidedNaming: boolean;
+ isMultiStepDesign: boolean;
+
+ constructor(serviceModelJson?: any){
+ super(serviceModelJson.service);
+ if (serviceModelJson) {
+ const service: ServiceModelResponseInterface = serviceModelJson.service;
+ this.serviceType = service.serviceType;
+ this.serviceRole = service.serviceRole;
+ this.isUserProvidedNaming = this.getIsUserProvidedName(service);
+ this.isMultiStepDesign = this.getIsMultiStepDesign(serviceModelJson);
+ }
+ }
+
+ private getIsUserProvidedName(serviceJson): boolean {
+ return serviceJson.serviceEcompNaming !== undefined && serviceJson.serviceEcompNaming === "false";
+ };
+
+ private getIsMultiStepDesign(serviceModel): boolean {
+ for (let key in serviceModel.vnfs) {
+ const vnf = serviceModel.vnfs[key];
+ if (vnf.properties.multi_stage_design === "true") {
+ return true
+ }
+ }
+ return false;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/serviceNodeTypeToModelKeyMapper.ts b/vid-webpack-master/src/app/shared/models/serviceNodeTypeToModelKeyMapper.ts
new file mode 100644
index 000000000..1134bbb89
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/serviceNodeTypeToModelKeyMapper.ts
@@ -0,0 +1,8 @@
+export enum ServiceNodeTypeToModelKeyMapper {
+ VF = "vnfs",
+ VFmodule="vfModules",
+ Network = "networks",
+ Configuration = "configurations"
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/models/serviceType.ts b/vid-webpack-master/src/app/shared/models/serviceType.ts
new file mode 100644
index 000000000..67aacdc07
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/serviceType.ts
@@ -0,0 +1,17 @@
+export interface SubscriptionResponseInterface {
+ 'service-type': string
+ 'is-permitted': boolean
+}
+
+export class ServiceType {
+ id: string;
+ name: string;
+ isPermitted: boolean;
+
+
+ constructor(id: string, subscription: SubscriptionResponseInterface){
+ this.id = id;
+ this.name = subscription['service-type'];
+ this.isPermitted = subscription['is-permitted'];
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/subscriber.ts b/vid-webpack-master/src/app/shared/models/subscriber.ts
new file mode 100644
index 000000000..55fc83792
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/subscriber.ts
@@ -0,0 +1,11 @@
+export class Subscriber {
+ id: string;
+ name: string;
+ isPermitted: boolean;
+
+ constructor(subscriberResponse){
+ this.id = subscriberResponse['global-customer-id'];
+ this.name = subscriberResponse['subscriber-name'];
+ this.isPermitted = subscriberResponse['is-permitted'];
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/tenant.ts b/vid-webpack-master/src/app/shared/models/tenant.ts
new file mode 100644
index 000000000..234f1dbff
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/tenant.ts
@@ -0,0 +1,11 @@
+export class Tenant {
+ id: string;
+ name: string;
+ isPermitted: boolean;
+
+ constructor(serviceJson){
+ this.id = serviceJson["tenantID"];
+ this.name = serviceJson["tenantName"];
+ this.isPermitted = serviceJson["is-permitted"];
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/vfModule.ts b/vid-webpack-master/src/app/shared/models/vfModule.ts
new file mode 100644
index 000000000..21f43ed17
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vfModule.ts
@@ -0,0 +1,39 @@
+import {NodeModel, NodeModelResponseInterface} from "./nodeModel";
+
+
+export interface properties{
+ initialCount: number;
+ maxCountInstances: number;
+ minCountInstances: number;
+}
+
+export interface VFModuleResponseInterface extends NodeModelResponseInterface {
+ customizationUuid: string;
+ modelCustomizationName: string;
+ properties: properties
+}
+
+export class VfModule extends NodeModel {
+
+ min:number;
+ max:number;
+ vgName:string;
+ rollbackOnFailure:boolean;
+ initial:number;
+ customizationUuid: string;
+ modelCustomizationName: string;
+
+ constructor(vf?: VFModuleResponseInterface) {
+ super(vf);
+ if(vf){
+ this.customizationUuid = vf.customizationUuid;
+ this.modelCustomizationName = vf.modelCustomizationName;
+ }
+ if (vf && vf.properties) {
+ this.min = vf.properties.minCountInstances;
+ this.max = vf.properties.maxCountInstances;
+ this.initial = vf.properties.initialCount;
+ this.rollbackOnFailure = true
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/vfModuleInstance.ts b/vid-webpack-master/src/app/shared/models/vfModuleInstance.ts
new file mode 100644
index 000000000..c6db00025
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vfModuleInstance.ts
@@ -0,0 +1,5 @@
+export class VfModuleInstance {
+ instanceName: string;
+ volumeGroupName: string;
+ instanceParams: { [key: string] : string; };
+}
diff --git a/vid-webpack-master/src/app/shared/models/vfModuleTreeNode.ts b/vid-webpack-master/src/app/shared/models/vfModuleTreeNode.ts
new file mode 100644
index 000000000..d4cc7e9c7
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vfModuleTreeNode.ts
@@ -0,0 +1,17 @@
+import {VfModule} from "./vfModule";
+import {VfModuleInstance} from "./vfModuleInstance";
+import {ServiceNodeTypes} from "./ServiceNodeTypes";
+
+export class VfModuleTreeNode {
+ modelId: string;
+ name: string;
+ modelName: string;
+ type: string;
+
+ constructor(vfModuleInstance: VfModuleInstance, vfModuleModel: VfModule, vfModuleModelName: string){
+ this.name = vfModuleInstance.instanceName || vfModuleInstance.volumeGroupName || '<Automatically Assigned>';
+ this.modelId = vfModuleModel.uuid;
+ this.modelName = vfModuleModelName;
+ this.type = ServiceNodeTypes.VFmodule;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/vfModulesMap.ts b/vid-webpack-master/src/app/shared/models/vfModulesMap.ts
new file mode 100644
index 000000000..95396fd55
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vfModulesMap.ts
@@ -0,0 +1,5 @@
+import {VfModuleInstance} from "./vfModuleInstance";
+
+export class VfModuleMap {
+ [id: string] : VfModuleInstance;
+}
diff --git a/vid-webpack-master/src/app/shared/models/vfcInstanceGroup.ts b/vid-webpack-master/src/app/shared/models/vfcInstanceGroup.ts
new file mode 100644
index 000000000..64354b01e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vfcInstanceGroup.ts
@@ -0,0 +1,14 @@
+import {VfcInstanceGroupProperties} from "./vfcInstanceGroupProperties";
+
+export class VfcInstanceGroup {
+ name: string;
+ version: string;
+ uuid: string;
+ invariantUuid: string;
+ vfcInstanceGroupProperties: VfcInstanceGroupProperties;
+
+
+}
+
+
+
diff --git a/vid-webpack-master/src/app/shared/models/vfcInstanceGroupMap.ts b/vid-webpack-master/src/app/shared/models/vfcInstanceGroupMap.ts
new file mode 100644
index 000000000..7ee3888c1
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vfcInstanceGroupMap.ts
@@ -0,0 +1,5 @@
+import {VfcInstanceGroup} from "./vfcInstanceGroup";
+
+export class VfcInstanceGroupMap {
+ [id: string] : VfcInstanceGroup;
+}
diff --git a/vid-webpack-master/src/app/shared/models/vfcInstanceGroupProperties.ts b/vid-webpack-master/src/app/shared/models/vfcInstanceGroupProperties.ts
new file mode 100644
index 000000000..1a7bf718a
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vfcInstanceGroupProperties.ts
@@ -0,0 +1,7 @@
+export class VfcInstanceGroupProperties {
+ networkCollectionFunction: string;
+ subinterfaceRole: string;
+ vfcInstanceGroupFunction: string;
+ vfcParentPortRole: string;
+
+}
diff --git a/vid-webpack-master/src/app/shared/models/vnfInstance.ts b/vid-webpack-master/src/app/shared/models/vnfInstance.ts
new file mode 100644
index 000000000..7f41e483a
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vnfInstance.ts
@@ -0,0 +1,19 @@
+import {VfModuleMap} from "./vfModulesMap";
+
+export class VnfInstance {
+ instanceName: string;
+ isUserProvidedNaming: boolean;
+ productFamilyId: string;
+ lcpCloudRegionId: string;
+ legacyRegion: string;
+ tenantId: string;
+ platformName: string;
+ lineOfBusiness: string;
+ rollbackOnFailure: string;
+ vfModules: { [vf_module_model_name: string] : VfModuleMap; };
+
+ constructor() {
+ this.rollbackOnFailure = 'true';
+ this.vfModules = {};
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/models/vnfModel.ts b/vid-webpack-master/src/app/shared/models/vnfModel.ts
new file mode 100644
index 000000000..e1302f1d0
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vnfModel.ts
@@ -0,0 +1,52 @@
+import {NodeModel, NodeModelResponseInterface} from "./nodeModel";
+import {VfcInstanceGroupMap} from "./vfcInstanceGroupMap";
+
+
+export interface VnfProperties {
+ ecomp_generated_naming: string
+}
+
+export interface VNFModelResponseInterface extends NodeModelResponseInterface{
+
+ serviceType: string;
+ serviceRole: string;
+ subCategory: string;
+ customizationUuid: string;
+ serviceEcompNaming: boolean;
+ type: string;
+ modelCustomizationName: string;
+ properties: VnfProperties;
+ vfcInstanceGroups: VfcInstanceGroupMap;
+}
+
+export class VNFModel extends NodeModel{
+
+ serviceType: string;
+ serviceRole: string;
+ subCategory: string;
+ customizationUuid: string;
+ isUserProvidedNaming: boolean;
+ type: string;
+ modelCustomizationName: string;
+ vfcInstanceGroups: VfcInstanceGroupMap;
+
+ constructor(vnfJson?: VNFModelResponseInterface){
+ super(vnfJson);
+ if (vnfJson) {
+ this.serviceType = vnfJson.serviceType;
+ this.serviceRole = vnfJson.serviceRole;
+ this.subCategory = vnfJson.subCategory;
+ this.customizationUuid = vnfJson.customizationUuid;
+ this.isUserProvidedNaming = this.getIsUserProvidedName(vnfJson);
+ this.type = vnfJson.type;
+ this.modelCustomizationName = vnfJson.modelCustomizationName;
+ this.vfcInstanceGroups = vnfJson.vfcInstanceGroups;
+
+ }
+ }
+
+ private getIsUserProvidedName(vnfJson) {
+ const ecompGeneratedNaming = vnfJson.properties.ecomp_generated_naming;
+ return ecompGeneratedNaming !== undefined && ecompGeneratedNaming === "false";
+ };
+}
diff --git a/vid-webpack-master/src/app/shared/models/vnfTreeNode.ts b/vid-webpack-master/src/app/shared/models/vnfTreeNode.ts
new file mode 100644
index 000000000..316bf3e8b
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vnfTreeNode.ts
@@ -0,0 +1,18 @@
+import {VNFModel} from "./vnfModel";
+import {VnfInstance} from "./vnfInstance";
+import {VfModuleTreeNode} from "./vfModuleTreeNode";
+
+export class VnfTreeNode {
+ modelId: string;
+ name: string;
+ modelName: string;
+ type: string;
+ children: VfModuleTreeNode[];
+
+ constructor(instance: VnfInstance, vnfModel: VNFModel){
+ this.name = instance.instanceName || vnfModel['properties'].ecomp_generated_naming == 'false' ? vnfModel.modelCustomizationName : '<Automatically Assigned>';
+ this.modelId = vnfModel.uuid;
+ this.modelName = vnfModel.modelCustomizationName;
+ this.type = vnfModel.type;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.spec.ts
new file mode 100644
index 000000000..84d2ff4b6
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.spec.ts
@@ -0,0 +1,25 @@
+
+import {CapitalizeAndFormatPipe} from "./capitalize-and-format.pipe";
+
+describe('Capitalize And Format Pipe', () => {
+ let capitalizeAndFormatPipe: CapitalizeAndFormatPipe;
+
+ beforeEach(() => {
+ capitalizeAndFormatPipe = new CapitalizeAndFormatPipe();
+ });
+
+ it('Capitalize And Format Pipe should be defined', () => {
+ expect(capitalizeAndFormatPipe).toBeDefined();
+ });
+
+ it('Capitalize And Format Pipe : (UPPERCASE)', ()=> {
+ let result: string = capitalizeAndFormatPipe.transform('PENDING');
+ expect(result).toEqual('Pending');
+ });
+
+ it('Capitalize And Format Pipe (UPPERCASE) and Underscore should replace by -', ()=> {
+ let result: string = capitalizeAndFormatPipe.transform('IN_PROGRESS');
+ expect(result).toEqual('In-progress');
+ });
+
+});
diff --git a/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.ts b/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.ts
new file mode 100644
index 000000000..e3ec9ae9a
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.ts
@@ -0,0 +1,12 @@
+import {PipeTransform, Pipe} from '@angular/core';
+
+@Pipe({ name: 'capitalizeAndFormat' })
+export class CapitalizeAndFormatPipe implements PipeTransform {
+ transform(text: string): string {
+ if (text) {
+ text = text.toLowerCase().replace('_', '-');
+ return text.charAt(0).toUpperCase() + text.slice(1);
+ }
+ return text;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/pipes/data-filter.pipe.ts b/vid-webpack-master/src/app/shared/pipes/data-filter.pipe.ts
new file mode 100644
index 000000000..1ff836762
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/data-filter.pipe.ts
@@ -0,0 +1,29 @@
+/**
+ * Created by cp2122 on 1/4/2018.
+ */
+import { Pipe, PipeTransform } from '@angular/core';
+
+@Pipe({
+ name: 'dataFilter'
+})
+export class DataFilterPipe implements PipeTransform {
+ keys = [];
+ transform(items: any, args: string): any {
+ if (items != null && items.length > 0) {
+ let ans = [];
+
+ if (this.keys.length === 0) {
+ this.keys = Object.keys(items[0]);
+ }
+ for (let i of items) {
+ for (let k of this.keys) {
+ if (i[k] !== null && i[k].toString().match('^.*' + args + '.*$')) {
+ ans.push(i);
+ break;
+ }
+ }
+ }
+ return ans;
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.spec.ts
new file mode 100644
index 000000000..22b619290
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.spec.ts
@@ -0,0 +1,43 @@
+import { DynamicInputLabelPipe } from './dynamic-input-label.pipe';
+
+describe('Dynamic input label Pipe', () => {
+ let dynamicInputLabelPipe: DynamicInputLabelPipe;
+
+ beforeEach(() => {
+ dynamicInputLabelPipe = new DynamicInputLabelPipe();
+ });
+
+ it('Dynamic input label Pipe should be defined', () => {
+ expect(dynamicInputLabelPipe).toBeDefined();
+ });
+
+ it('Dynamic input label Pipe : Empty string should return empty string', ()=> {
+ let result: string = dynamicInputLabelPipe.transform('');
+ expect(result).toEqual(':*');
+ });
+
+ it('Dynamic input label Pipe: vnf should be VNF (UPPERCASE)', ()=> {
+ let result: string = dynamicInputLabelPipe.transform('vnf');
+ expect(result).toEqual('VNF:*');
+ });
+
+ it('Dynamic input label Pipe : nf should be NF (UPPERCASE)\'', ()=> {
+ let result: string = dynamicInputLabelPipe.transform('nf');
+ expect(result).toEqual('NF:*');
+ });
+
+ it('Dynamic input label Pipe : Underscore should replace by empty character', ()=> {
+ let result: string = dynamicInputLabelPipe.transform('nf_Test');
+ expect(result).toEqual('NF test:*');
+ });
+
+ it('Dynamic input label Pipe : Complex string', ()=> {
+ let result: string = dynamicInputLabelPipe.transform('nf_Test_vnf_nf');
+ expect(result).toEqual('NF test VNF NF:*');
+ });
+
+ it('Dynamic input label Pipe : First letter should be uppercase', ()=> {
+ let result: string = dynamicInputLabelPipe.transform('nfr');
+ expect(result).toEqual('Nfr:*');
+ });
+});
diff --git a/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.ts b/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.ts
new file mode 100644
index 000000000..bec87b46d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.ts
@@ -0,0 +1,12 @@
+import {PipeTransform, Pipe} from '@angular/core';
+
+@Pipe({ name: 'dynamicInputLabel' })
+export class DynamicInputLabelPipe implements PipeTransform {
+ transform(text: string): string {
+ let split_label = text.toLowerCase().replace(/_/g,' ');
+ let uppercase_vnf = split_label.replace(/\bvnf\b/ig, 'VNF');
+ let uppercase_nf = uppercase_vnf.replace(/\bnf\b/ig, 'NF');
+ let capitalize_sentence = uppercase_nf.charAt(0).toUpperCase() + uppercase_nf.slice(1);
+ return capitalize_sentence + ':*';
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/pipes/highlight-filter.pipe.ts b/vid-webpack-master/src/app/shared/pipes/highlight-filter.pipe.ts
new file mode 100644
index 000000000..93aecbf69
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/highlight-filter.pipe.ts
@@ -0,0 +1,10 @@
+import {PipeTransform, Pipe} from '@angular/core';
+
+@Pipe({ name: 'highlight' })
+export class HighlightPipe implements PipeTransform {
+ transform(text: string, search: string): string {
+ let pattern = search.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
+ let regex = new RegExp(pattern, 'gi');
+ return search ? text.replace(regex, (match) => `<span class="highlight">${match}</span>`) : text;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.spec.ts
new file mode 100644
index 000000000..984e3378c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.spec.ts
@@ -0,0 +1,58 @@
+import {ServiceInfoPipe} from "./serviceInfo.pipe";
+
+
+describe('Service info Pipe', () => {
+ let pipe: ServiceInfoPipe;
+
+ beforeEach(() => {
+ pipe = new ServiceInfoPipe();
+ });
+
+ it('Service info Pipe should return model name', () => {
+ let store = {
+ getState : function() {
+ return {
+ service: {
+ serviceHierarchy : generateserviceHierarchy()
+ }
+ }
+ }
+ };
+ let result : string = pipe.transform(null, store , '6e59c5de-f052-46fa-aa7e-2fca9d674c44', 'name');
+ expect(result).toEqual('ComplexService')
+ });
+
+
+
+ it('Service info Pipe should return null if field name not exist', () => {
+ let store = {
+ getState : function() {
+ return {
+ service: {
+ serviceHierarchy : generateserviceHierarchy()
+ }
+ }
+ }
+ };
+ let result : string = pipe.transform(null, store , '6e59c5de-f052-46fa-aa7e-2fca9d674c44', 'notExist');
+ expect(result).toBeNull();
+ });
+
+ it('Service info Pipe should return null if model not exist', () => {
+ let store = {
+ getState : function() {
+ return {
+ service: {
+ serviceHierarchy : generateserviceHierarchy()
+ }
+ }
+ }
+ };
+ let result : string = pipe.transform(null, store , 'modelNotExist', 'name');
+ expect(result).toBeNull();
+ });
+
+ function generateserviceHierarchy(){
+ return JSON.parse('{"6e59c5de-f052-46fa-aa7e-2fca9d674c44":{"service":{"uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"ComplexService","version":"1.0","toscaModelURL":null,"category":"Mobility","serviceType":"","serviceRole":"","description":"ComplexService","serviceEcompNaming":"true","instantiationType":"Macro","inputs":{}},"vnfs":{"VF_vMee 0":{"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","description":"VSP_vMee","name":"VF_vMee","version":"2.0","customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","inputs":{},"commands":{},"properties":{"gpb2_Internal2_mac":"00:80:37:0E:02:22","sctp-b-ipv6-egress_src_start_port":"0","sctp-a-ipv6-egress_rule_application":"any","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","sctp-a-egress_rule_application":"any","sctp-b-ingress_action":"pass","sctp-b-ingress_rule_protocol":"icmp","ncb2_Internal1_mac":"00:80:37:0E:0F:12","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:80:37:0E:09:12","fsb_volume_size_0":"320.0","sctp-b-egress_src_addresses":"local","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-ingress_rule_protocol":"icmp","sctp-b-egress-src_start_port":"0.0","sctp-a-egress_src_addresses":"local","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-a-egress-src_start_port":"0.0","sctp-a-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","gpb1_Internal1_mac":"00:80:37:0E:01:22","sctp-b-egress_dst_subnet_prefix_len":"0.0","Internal2_net_cidr":"169.255.0.0","sctp-a-ingress-dst_start_port":"0.0","sctp-a-egress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:80:37:0E:0B:12","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-ipv6-egress_rule_application":"any","sctp-b-egress_action":"pass","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","fsb2_Internal1_mac":"00:80:37:0E:0D:12","sctp-a-ipv6-ingress-src_start_port":"0.0","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"169.253.0.0","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","sctp-a-ipv6-ingress_rule_application":"any","ecomp_generated_naming":"true","sctp-a-IPv6_ethertype":"IPv6","vlc2_Internal1_mac":"00:80:37:0E:02:12","vlc_st_virtualization_type":"virtual-machine","sctp-b-ingress-dst_start_port":"0.0","sctp-b-ingress-dst_end_port":"65535.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","int2_sec_group_name":"int2-sec-group","vlc_flavor_name":"nd.c16r64d1","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress-dst_start_port":"0","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_shared":"false","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:80:37:0E:01:12","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:80:37:0E:09:12","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","sctp-a-ipv6-egress_dst_end_port":"65535","Internal2_forwarding_mode":"l2","fsb2_Internal2_mac":"00:80:37:0E:0D:12","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:80:37:0E:02:22","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-ingress_dst_addresses":"local","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:80:37:0E:0F:12","vlc_st_interface_type_sctp_a":"left","vlc_st_interface_type_sctp_b":"right","sctp-a-src_subnet_prefix_v6":"::","vlc_st_version":"2","sctp-b-egress_ethertype":"IPv4","sctp-a-ingress_rule_application":"any","gpb1_Internal2_mac":"00:80:37:0E:01:22","instance_ip_family_v6":"v6","sctp-a-ipv6-egress_src_start_port":"0","sctp-b-ingress-src_start_port":"0.0","sctp-b-ingress_dst_addresses":"local","fsb1_Internal1_mac":"00:80:37:0E:0B:12","vlc_st_interface_type_oam":"management","multi_stage_design":"false","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"169.255.0.3","sctp-a-ipv6-ingress-dst_end_port":"65535","sctp-b-ipv6-egress-dst_start_port":"0","Internal1_net_gateway":"169.253.0.3","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-a-egress_rule_protocol":"icmp","sctp-b-ipv6-egress_action":"pass","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-a-ingress_action":"pass","sctp-b-egress_rule_protocol":"icmp","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","sctp-b-ipv6-ingress-dst_start_port":"0","vlc2_Internal2_mac":"00:80:37:0E:02:12","vlc_st_availability_zone":"true","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","Internal1_allow_transit":"true","gpb_flavor_name":"nv.c20r64d1","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-ingress_ethertype":"IPv4","vlc1_Internal2_mac":"00:80:37:0E:01:12","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-egress_rule_application":"any","sctp-b-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"},"type":"VF","modelCustomizationName":"VF_vMee 0","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{},"commands":{},"properties":{"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{"Port Mirroring Configuration By Policy 0":{"uuid":"b4398538-e89d-4f13-b33d-ca323434ba50","invariantUuid":"6ef0ca40-f366-4897-951f-abd65d25f6f7","description":"A port mirroring configuration by policy object","name":"Port Mirroring Configuration By Policy","version":"27.0","customizationUuid":"3c3b7b8d-8669-4b3b-8664-61970041fad2","inputs":{},"commands":{},"properties":{},"type":"Configuration","modelCustomizationName":"Port Mirroring Configuration By Policy 0","sourceNodes":[],"collectorNodes":null,"configurationByPolicy":false}},"serviceProxies":{},"vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"pnfs":{}}}');
+ }
+});
diff --git a/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.ts b/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.ts
new file mode 100644
index 000000000..8cb2e1dcd
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.ts
@@ -0,0 +1,13 @@
+import {PipeTransform, Pipe} from '@angular/core';
+import {isNullOrUndefined} from "util";
+
+@Pipe({ name: 'serviceInfo'})
+export class ServiceInfoPipe implements PipeTransform {
+ transform(service: string, store : any , modelId : string, fieldName : string): string {
+ const serviceHierarchy = store.getState().service.serviceHierarchy;
+ if(!isNullOrUndefined(serviceHierarchy) && !isNullOrUndefined(serviceHierarchy[modelId])){
+ return serviceHierarchy[modelId].service[fieldName] || null;
+ }
+ return null;
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.spec.ts b/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.spec.ts
new file mode 100644
index 000000000..36f6349e2
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.spec.ts
@@ -0,0 +1,60 @@
+import {TestBed, inject, getTestBed} from '@angular/core/testing';
+
+import { HealthStatusService } from './health-status.service';
+import {Constants} from "../../utils/constants";
+import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing";
+import {ExternalComponentStatus} from "../../models/externalComponentStatus";
+
+describe('HealthStatusService', () => {
+
+ let injector;
+ let service: HealthStatusService;
+ let httpMock: HttpTestingController;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
+ providers: [HealthStatusService]
+ });
+
+ injector = getTestBed();
+ service = injector.get(HealthStatusService);
+ httpMock = injector.get(HttpTestingController);
+ });
+
+ describe('#getProbe', () =>{
+ it('when call probe, there is http GET with right url', () => {
+
+ service.getProbe().subscribe((result: Array<ExternalComponentStatus>)=>{
+ expect(result[0].component).toEqual("AAI");
+ expect(result[0].available).toBeTruthy();
+ expect(result[0].metadata).toEqual({ myKey: 'myValue' });
+
+ expect(result[1].component).toEqual("MSO");
+ expect(result[1].available).toBeFalsy();
+ expect(result[1].metadata).toEqual({otherKey: 123});
+ });
+
+ const req = httpMock.expectOne(Constants.Path.SERVICES_PROBE_PATH);
+ expect(req.request.method).toEqual('GET');
+ req.flush([
+ {
+ "component": "AAI",
+ "available": true,
+ "metadata": {
+ "myKey": "myValue"
+ }
+ },
+ {
+ "component": "MSO",
+ "available": false,
+ "metadata": {
+ "otherKey": 123
+ }
+ },
+ ]);
+ });
+
+ });
+
+});
diff --git a/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.ts b/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.ts
new file mode 100644
index 000000000..4305ab97e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.ts
@@ -0,0 +1,17 @@
+import { Injectable } from '@angular/core';
+import {HttpClient} from "@angular/common/http";
+import {Observable} from "rxjs/Observable";
+import {Constants} from "../../utils/constants";
+import {ExternalComponentStatus} from "../../models/externalComponentStatus";
+
+@Injectable()
+export class HealthStatusService {
+
+ constructor(private _http: HttpClient) {
+ }
+
+ getProbe(): Observable<Array<ExternalComponentStatus>> {
+ let pathQuery = Constants.Path.SERVICES_PROBE_PATH;
+ return this._http.get<Array<ExternalComponentStatus>>(pathQuery).map(res => res);
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts
new file mode 100644
index 000000000..0b4c70f9d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts
@@ -0,0 +1,10 @@
+export class AuditStatus{
+ id: number;
+ createdDate: number;
+ final: boolean;
+ jobId :string;
+ jobStatus :string;
+ source: string;
+ requestId: string;
+ additionalInfo :any
+}
diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts
new file mode 100644
index 000000000..0b4695930
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts
@@ -0,0 +1,38 @@
+import {ServiceStatus} from '../../../instantiationStatus/instantiationStatus.component.service';
+
+export class ServiceInfoModel {
+ id: number;
+ created: Date;
+ modified: Date;
+ createdId: number;
+ modifiedId: number;
+ numRow: number;
+ uuid: string;
+ userId: string;
+ jobStatus: string;
+ pause: boolean;
+ owningEntityId: string;
+ owningEntityName: string;
+ project: string;
+ aicZoneId: string;
+ aicZoneName: string;
+ tenantId: string;
+ tenantName: string;
+ regionId: string;
+ regionName: string;
+ serviceType: string;
+ subscriberName: string;
+ serviceInstanceId: string;
+ serviceInstanceName: string;
+ serviceModelId: string;
+ serviceModelName: string;
+ serviceModelVersion: string;
+ templateId: string;
+ auditUserId: string;
+ jobId: string;
+}
+
+export class ServiceInfoUiModel extends ServiceInfoModel{
+ serviceStatus : ServiceStatus;
+ serviceIndex : number;
+}
diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.spec.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.spec.ts
new file mode 100644
index 000000000..78c1b5ab9
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.spec.ts
@@ -0,0 +1,235 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {ServiceInfoService} from './serviceInfo.service';
+import {ServiceInfoModel} from './serviceInfo.model';
+import {Constants} from "../../utils/constants";
+
+describe('Service Info Service', () => {
+ let injector;
+ let service: ServiceInfoService;
+ let httpMock: HttpTestingController;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
+ providers: [ServiceInfoService]
+ });
+
+ injector = getTestBed();
+ service = injector.get(ServiceInfoService);
+ httpMock = injector.get(HttpTestingController);
+ });
+
+ describe('#getServicesJobInfo', () => {
+ it('should return an Observable<ServiceInfoModel[]>', () => {
+ const dummyServiceInfo: ServiceInfoModel[] = generateServiceInfoData();
+
+ service.getServicesJobInfo(true).subscribe((serviceInfo:Array<ServiceInfoModel>) => {
+ expect(serviceInfo).toEqual(dummyServiceInfo);
+ });
+ });
+
+
+ });
+
+ describe('#deleteJob', () =>{
+ it('delete job', () => {
+ const jobId : string = "1111";
+
+ service.deleteJob(jobId).subscribe();
+
+ const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + '/job/' + jobId);
+ expect(req.request.method).toEqual('DELETE');
+
+ });
+ });
+
+ describe('#hideJob', () =>{
+ it('when call hide job, there is http POST with right url', () => {
+ const jobId : string = "3";
+
+ service.hideJob(jobId).subscribe();
+
+ const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + '/hide/' + jobId);
+ expect(req.request.method).toEqual('POST');
+ });
+ });
+
+ describe('#getJobAuditStatus', ()=> {
+ it('should return Observable<Object[]>', ()=>{
+ const jobId : string = '111';
+
+ service.getJobAuditStatus(jobId).subscribe();
+ const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobId + '?source=VID');
+ const req2 = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobId + '?source=MSO');
+
+ expect(req.request.method).toEqual('GET');
+ expect(req2.request.method).toEqual('GET');
+ });
+ });
+
+ function generateServiceInfoData(){
+ return <ServiceInfoModel[]>JSON.parse(JSON.stringify(
+ [{
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "1",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "hidden": false
+ },
+ {
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "1",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "hidden": false
+ },
+ {
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "2",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "hidden": false
+ },
+ {
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "2",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "hidden": false
+ },
+ {
+ "created": 1519956533000,
+ "modified": 1521727738000,
+ "createdId": null,
+ "modifiedId": null,
+ "rowNum": null,
+ "auditUserId": null,
+ "auditTrail": null,
+ "jobId": "6748648484",
+ "userId": "2222",
+ "jobStatus": "FAILED",
+ "pause": false,
+ "owningEntityId": "1234",
+ "owningEntityName": null,
+ "project": null,
+ "aicZoneId": null,
+ "aicZoneName": null,
+ "tenantId": null,
+ "tenantName": null,
+ "regionId": null,
+ "regionName": null,
+ "serviceType": null,
+ "subscriberName": null,
+ "serviceInstanceId": "3",
+ "serviceInstanceName": null,
+ "serviceModelId": null,
+ "serviceModelName": null,
+ "serviceModelVersion": null,
+ "createdBulkDate": 1519956533000,
+ "statusModifiedDate": 1520042933000,
+ "hidden": false
+ }]
+ ));
+ }
+});
diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.ts
new file mode 100644
index 000000000..e0057bb4d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.ts
@@ -0,0 +1,38 @@
+import {Injectable} from '@angular/core';
+import {Observable} from 'rxjs/Observable';
+import {ServiceInfoModel} from './serviceInfo.model';
+import {HttpClient} from '@angular/common/http';
+import 'rxjs/add/operator/map'
+import {Constants} from '../../utils/constants';
+import {forkJoin} from "rxjs/observable/forkJoin";
+
+@Injectable()
+export class ServiceInfoService {
+ constructor(private _http: HttpClient) {
+ }
+
+ getServicesJobInfo(filterByUser : boolean): Observable<ServiceInfoModel[]> {
+ let pathQuery = Constants.Path.SERVICES_JOB_INFO_PATH;
+ return this._http.get<ServiceInfoModel[]>(pathQuery).map(res => res );
+ }
+
+ deleteJob(jobId: string): Observable<any> {
+ let pathQuery = Constants.Path.SERVICES_JOB_INFO_PATH + '/job/' + jobId;
+ return this._http.delete<any>(pathQuery).map(res => res);
+ }
+
+ hideJob(jobId: string): Observable<any> {
+ let pathQuery = Constants.Path.SERVICES_JOB_INFO_PATH + '/hide/' + jobId;
+ return this._http.post<any>(pathQuery, null).map(res => res);
+ }
+
+ getJobAuditStatus(jobId : string) : Observable<Object[]>{
+ let pathQueryVID = Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobId + '?source=VID';
+ let pathQueryMSO = Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobId + '?source=MSO';
+
+ let vidObs = this._http.get(pathQueryVID);
+ let msoObs = this._http.get(pathQueryMSO);
+ return forkJoin([vidObs, msoObs]);
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
new file mode 100644
index 000000000..617dbd3da
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
@@ -0,0 +1,73 @@
+import { getTestBed, TestBed } from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+import { NgRedux } from '@angular-redux/store';
+import { DefaultDataGeneratorService } from './default.data.generator.service';
+
+export class MockAppStore<T> {}
+
+describe('Default Data Generator Service', () => {
+ let injector;
+ let service: DefaultDataGeneratorService;
+ let httpMock: HttpTestingController;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
+ providers: [DefaultDataGeneratorService,
+ {provide: NgRedux, useClass: MockAppStore}]
+ });
+
+ injector = getTestBed();
+ service = injector.get(DefaultDataGeneratorService);
+ httpMock = injector.get(HttpTestingController);
+ });
+
+ it('generateVFModule should create vf module object', () => {
+ const serviceHierarchy = generateServiceHierarchy();
+ const vnfUUID: string = 'VF_vMee 0';
+ const vnfModuleUUID: string = 'vf_vmee0..VfVmee..base_vmme..module-0';
+
+ let result = service.generateVFModule(serviceHierarchy, vnfUUID, vnfModuleUUID);
+
+ expect(result.modelInfo.modelType).toEqual('VFmodule');
+ expect(result.modelInfo.modelInvariantId).toEqual(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].invariantUuid);
+ expect(result.modelInfo.modelVersionId).toEqual(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].uuid);
+ expect(result.modelInfo.modelName).toEqual(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].name);
+ expect(result.modelInfo.modelVersion).toEqual(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].version);
+ expect(result.modelInfo.modelCustomizationId).toEqual(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].customizationUuid);
+ expect(result.modelInfo.modelCustomizationName).toEqual(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].modelCustomizationName);
+ expect(result.sdncPreReload).toBeNull();
+ });
+
+ it('generateVNFData should create vnf object', () => {
+ const serviceHierarchy = generateServiceHierarchy();
+ const vnfName: string = 'VF_vMee 0';
+ const formValues = generateVNFFormValues();
+ const vfUUID: string = 'vf_vmee0..VfVmee..base_vmme..module-0';
+
+ let result = service.generateVNFData(serviceHierarchy, vnfName, vfUUID, formValues);
+
+ expect(result.productFamilyId).toEqual(formValues.productFamilyId);
+ expect(result.lcpCloudRegionId).toBeNull();
+ expect(result.tenantId).toBeNull();
+ expect(result.lineOfBusiness).toBeNull();
+ expect(result.platformName).toBeNull();
+ expect(result.modelInfo.modelType).toEqual('VF');
+ expect(result.modelInfo.modelInvariantId).toEqual(serviceHierarchy.vnfs[vnfName].invariantUuid);
+ expect(result.modelInfo.modelVersionId).toEqual(formValues.modelInfo.modelVersionId);
+ expect(result.modelInfo.modelName).toEqual(serviceHierarchy.vnfs[vnfName].name);
+ expect(result.modelInfo.modelVersion).toEqual(serviceHierarchy.vnfs[vnfName].version);
+ expect(result.modelInfo.modelCustomizationId).toEqual(serviceHierarchy.vnfs[vnfName].modelCustomizationId);
+ expect(result.modelInfo.modelCustomizationName).toEqual(serviceHierarchy.vnfs[vnfName].modelCustomizationName);
+ });
+});
+
+
+function generateServiceHierarchy() {
+ return JSON.parse('{"service":{"uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"ComplexService","version":"1.0","toscaModelURL":null,"category":"Mobility","serviceType":"","serviceRole":"","description":"ComplexService","serviceEcompNaming":"true","instantiationType":"Macro","inputs":{}},"vnfs":{"VF_vMee 0":{"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","description":"VSP_vMee","name":"VF_vMee","version":"2.0","customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","inputs":{},"commands":{},"properties":{"gpb2_Internal2_mac":"00:80:37:0E:02:22","sctp-b-ipv6-egress_src_start_port":"0","sctp-a-ipv6-egress_rule_application":"any","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","sctp-a-egress_rule_application":"any","sctp-b-ingress_action":"pass","sctp-b-ingress_rule_protocol":"icmp","ncb2_Internal1_mac":"00:80:37:0E:0F:12","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:80:37:0E:09:12","fsb_volume_size_0":"320.0","sctp-b-egress_src_addresses":"local","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-ingress_rule_protocol":"icmp","sctp-b-egress-src_start_port":"0.0","sctp-a-egress_src_addresses":"local","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-a-egress-src_start_port":"0.0","sctp-a-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","gpb1_Internal1_mac":"00:80:37:0E:01:22","sctp-b-egress_dst_subnet_prefix_len":"0.0","Internal2_net_cidr":"169.255.0.0","sctp-a-ingress-dst_start_port":"0.0","sctp-a-egress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:80:37:0E:0B:12","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-ipv6-egress_rule_application":"any","sctp-b-egress_action":"pass","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","fsb2_Internal1_mac":"00:80:37:0E:0D:12","sctp-a-ipv6-ingress-src_start_port":"0.0","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"169.253.0.0","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","sctp-a-ipv6-ingress_rule_application":"any","ecomp_generated_naming":"true","sctp-a-IPv6_ethertype":"IPv6","vlc2_Internal1_mac":"00:80:37:0E:02:12","vlc_st_virtualization_type":"virtual-machine","sctp-b-ingress-dst_start_port":"0.0","sctp-b-ingress-dst_end_port":"65535.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","int2_sec_group_name":"int2-sec-group","vlc_flavor_name":"nd.c16r64d1","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress-dst_start_port":"0","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_shared":"false","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:80:37:0E:01:12","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:80:37:0E:09:12","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","sctp-a-ipv6-egress_dst_end_port":"65535","Internal2_forwarding_mode":"l2","fsb2_Internal2_mac":"00:80:37:0E:0D:12","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:80:37:0E:02:22","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-ingress_dst_addresses":"local","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:80:37:0E:0F:12","vlc_st_interface_type_sctp_a":"left","vlc_st_interface_type_sctp_b":"right","sctp-a-src_subnet_prefix_v6":"::","vlc_st_version":"2","sctp-b-egress_ethertype":"IPv4","sctp-a-ingress_rule_application":"any","gpb1_Internal2_mac":"00:80:37:0E:01:22","instance_ip_family_v6":"v6","sctp-a-ipv6-egress_src_start_port":"0","sctp-b-ingress-src_start_port":"0.0","sctp-b-ingress_dst_addresses":"local","fsb1_Internal1_mac":"00:80:37:0E:0B:12","vlc_st_interface_type_oam":"management","multi_stage_design":"false","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"169.255.0.3","sctp-a-ipv6-ingress-dst_end_port":"65535","sctp-b-ipv6-egress-dst_start_port":"0","Internal1_net_gateway":"169.253.0.3","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-a-egress_rule_protocol":"icmp","sctp-b-ipv6-egress_action":"pass","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-a-ingress_action":"pass","sctp-b-egress_rule_protocol":"icmp","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","sctp-b-ipv6-ingress-dst_start_port":"0","vlc2_Internal2_mac":"00:80:37:0E:02:12","vlc_st_availability_zone":"true","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","Internal1_allow_transit":"true","gpb_flavor_name":"nv.c20r64d1","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-ingress_ethertype":"IPv4","vlc1_Internal2_mac":"00:80:37:0E:01:12","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-egress_rule_application":"any","sctp-b-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"},"type":"VF","modelCustomizationName":"VF_vMee 0","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{},"commands":{},"properties":{"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{"Port Mirroring Configuration By Policy 0":{"uuid":"b4398538-e89d-4f13-b33d-ca323434ba50","invariantUuid":"6ef0ca40-f366-4897-951f-abd65d25f6f7","description":"A port mirroring configuration by policy object","name":"Port Mirroring Configuration By Policy","version":"27.0","customizationUuid":"3c3b7b8d-8669-4b3b-8664-61970041fad2","inputs":{},"commands":{},"properties":{},"type":"Configuration","modelCustomizationName":"Port Mirroring Configuration By Policy 0","sourceNodes":[],"collectorNodes":null,"configurationByPolicy":false}},"serviceProxies":{},"vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"pnfs":{}}');
+}
+
+
+function generateVNFFormValues() {
+ return JSON.parse('{"globalSubscriberId":"e433710f-9217-458d-a79d-1c7aff376d89","productFamilyId":"vRRaaS","subscriptionServiceType":"VIRTUAL USP","lcpCloudRegionId":"mtn6","tenantId":"1178612d2b394be4834ad77f567c0af2","aicZoneId":"JAG1","projectName":"DFW","owningEntityId":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","rollbackOnFailure":"true","bulkSize":1,"instanceParams":[{}],"modelInfo":{"modelInvariantId":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","modelVersionId":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","modelName":"ComplexService","modelVersion":"1.0"},"isUserProvidedNaming":false,"tenantName":"AIN Web Tool-15-D-SSPtestcustome","aicZoneName":"YUDFJULP-JAG1"}');
+}
diff --git a/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.ts b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.ts
new file mode 100644
index 000000000..b1e676fc5
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.ts
@@ -0,0 +1,82 @@
+import { Injectable } from '@angular/core';
+import * as _ from 'lodash';
+import { createVFModuleInstance, updateVNFInstance } from '../../../service.actions';
+import { NgRedux } from '@angular-redux/store';
+import { AppState } from '../../../store/reducers';
+
+@Injectable()
+export class DefaultDataGeneratorService {
+ static controlsFieldsStatus = {};
+
+ constructor(private store: NgRedux<AppState>) { }
+
+ updateReduxOnFirstSet(serviceId: string, formServiceValues: any): void {
+ const serviceHierarchy = this.store.getState().service.serviceHierarchy[serviceId];
+ if (serviceHierarchy && !_.isEmpty(serviceHierarchy.vnfs)) {
+ for (let vnfUUID in serviceHierarchy.vnfs) {
+ for (let vnfModuleUUID in serviceHierarchy.vnfs[vnfUUID].vfModules) {
+ if (serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].properties.minCountInstances > 0) {
+
+ let vfModule = this.generateVFModule(serviceHierarchy, vnfUUID, vnfModuleUUID);
+ this.updateVNFInstanceRedux(
+ serviceHierarchy.vnfs[vnfUUID].modelName,
+ serviceId,
+ serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].properties.initialCount,
+ vfModule,
+ this.generateVNFData(serviceHierarchy, vnfUUID, vnfModuleUUID, formServiceValues),
+ vnfModuleUUID
+ );
+ }
+ }
+ }
+ }
+ }
+
+ updateVNFInstanceRedux(vnfModelName: string, serviceId: string, numberOfVfModules: number, vfModuleData: any, vnfData: any, vfModuleName : string): void {
+ if (numberOfVfModules > 0) {
+ this.store.dispatch(updateVNFInstance(vnfData, vnfData.modelInfo.modelCustomizationName, serviceId));
+ for (let i = 0; i < numberOfVfModules; i++) {
+ this.store.dispatch(createVFModuleInstance(vfModuleData, vfModuleName, serviceId));
+ }
+ }
+ }
+
+
+ generateVFModule(serviceHierarchy: any, vnfUUID: string, vnfModuleUUID: string) {
+ return {
+ 'sdncPreReload': null,
+ 'modelInfo': {
+ 'modelType': 'VFmodule',
+ 'modelInvariantId': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].invariantUuid,
+ 'modelVersionId': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].uuid,
+ 'modelName': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].name,
+ 'modelVersion': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].version,
+ 'modelCustomizationId': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].customizationUuid,
+ 'modelCustomizationName': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].modelCustomizationName
+ },
+ 'instanceParams': [
+ {}
+ ]
+ };
+ }
+
+ generateVNFData(serviceHierarchy: any, vnfName: string, vnfUUID: string, formValues: any) {
+ return {
+ 'productFamilyId': formValues.productFamilyId,
+ 'lcpCloudRegionId': null,
+ 'tenantId': null,
+ 'lineOfBusiness': null,
+ 'platformName': null,
+ 'modelInfo': {
+ 'modelType': 'VF',
+ 'modelInvariantId': serviceHierarchy.vnfs[vnfName].invariantUuid,
+ 'modelVersionId': formValues.modelInfo.modelVersionId,
+ 'modelName': serviceHierarchy.vnfs[vnfName].name,
+ 'modelVersion': serviceHierarchy.vnfs[vnfName].version,
+ 'modelCustomizationId': serviceHierarchy.vnfs[vnfName].modelCustomizationId,
+ 'modelCustomizationName': serviceHierarchy.vnfs[vnfName].modelCustomizationName
+ },
+ 'isUserProvidedNaming': null
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/shared.module.ts b/vid-webpack-master/src/app/shared/shared.module.ts
new file mode 100644
index 000000000..ab6ecaa08
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/shared.module.ts
@@ -0,0 +1,92 @@
+import {NgModule, ModuleWithProviders} from '@angular/core';
+import {CommonModule} from '@angular/common';
+import {RouterModule} from '@angular/router';
+import { BrowserModule } from '@angular/platform-browser';
+import { HttpClientModule } from '@angular/common/http';
+import { ServiceInfoService } from './server/serviceInfo/serviceInfo.service';
+import { PopoverModule } from 'ngx-bootstrap';
+import { AngularSvgIconModule } from 'angular-svg-icon';
+import { SvgDirective } from './directives/svg/svg.directive';
+import { PopoverComponent } from './components/popover/popover.component';
+import { EllipsisComponent } from './components/ellipsis/ellipsis.component';
+import { MessageBoxComponent } from './components/messageBox/messageBox.component';
+import { MessageBoxService } from './components/messageBox/messageBox.service';
+import { SdcUiComponentsModule , SdcUiComponents} from 'sdc-ui/lib/angular';
+import { HttpInterceptorService } from './utils/httpInterceptor/httpInterceptor.service';
+import { FormControlErrorComponent } from './components/formControlError/formControlError.component';
+import { InputPreventionPatternDirective } from './directives/inputPrevention/inputPreventionPattern.directive';
+import { FormGeneralErrorsComponent } from './components/formGeneralErrors/formGeneralErrors.component';
+import { NumbersLettersUnderscoreValidator } from './components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
+import { SpinnerComponent } from './components/spinner/spinner.component';
+import { NoContentMessageAndIconComponent } from './components/no-content-message-and-icon/no-content-message-and-icon.component';
+import { ModelInformationComponent } from './components/model-information/model-information.component';
+import { TooltipModule } from 'ngx-tooltip';
+import {IframeService} from "./utils/iframe.service";
+import {CapitalizeAndFormatPipe} from "./pipes/capitalize/capitalize-and-format.pipe";
+import { DefaultDataGeneratorService } from './services/defaultDataServiceGenerator/default.data.generator.service';
+import {ServiceInfoPipe} from "./pipes/serviceInfo/serviceInfo.pipe";
+import {HealthStatusService} from "./server/healthStatusService/health-status.service";
+import {ConfigurationService} from "../services/configuration.service";
+import {FlagsResolve} from "../services/flags.resolve";
+
+
+@NgModule({
+ imports: [
+ BrowserModule,
+ HttpClientModule,
+ CommonModule,
+ RouterModule,
+ PopoverModule.forRoot(),
+ AngularSvgIconModule,
+ TooltipModule,
+ SdcUiComponentsModule,
+ ],
+ declarations: [
+ PopoverComponent,
+ SvgDirective,
+ EllipsisComponent,
+ MessageBoxComponent,
+ FormControlErrorComponent,
+ InputPreventionPatternDirective,
+ FormGeneralErrorsComponent,
+ SpinnerComponent,
+ NoContentMessageAndIconComponent,
+ ModelInformationComponent,
+ CapitalizeAndFormatPipe,
+ ServiceInfoPipe,
+ ],
+ exports: [
+ PopoverComponent,
+ SvgDirective,
+ EllipsisComponent,
+ MessageBoxComponent,
+ FormControlErrorComponent,
+ InputPreventionPatternDirective,
+ FormGeneralErrorsComponent,
+ SpinnerComponent,
+ NoContentMessageAndIconComponent,
+ ModelInformationComponent,
+ CapitalizeAndFormatPipe,
+ ServiceInfoPipe,
+ ],
+ providers: [
+ ServiceInfoService,
+ MessageBoxService,
+ SdcUiComponents.ModalService,
+ HttpInterceptorService,
+ IframeService,
+ NumbersLettersUnderscoreValidator,
+ DefaultDataGeneratorService,
+ HealthStatusService,
+ ConfigurationService,
+ FlagsResolve
+ ]
+})
+export class SharedModule {
+ static forRoot(): ModuleWithProviders {
+ return {
+ ngModule: SharedModule,
+ providers: [MessageBoxService]
+ };
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/utils/constants.ts b/vid-webpack-master/src/app/shared/utils/constants.ts
new file mode 100644
index 000000000..c78e12e28
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/utils/constants.ts
@@ -0,0 +1,287 @@
+export module Constants {
+
+ export class Component {
+ public static NAME = 'name';
+ public static SERVICE = 'service';
+ public static A_LA_CARTE = 'a la carte';
+ public static MACRO = 'Macro';
+ public static SUBSCRIBER_NAME = 'subscriberName';
+ public static OLDVERSION = 'oldversion';
+ public static SERVICE_TYPE = 'serviceType';
+ }
+
+ export class Path {
+ public static FORWARD_SLASH = '/';
+
+ public static AAI_GET_FULL_SUBSCRIBERS = '../../aai_get_full_subscribers';
+ public static AAI_REFRESH_FULL_SUBSCRIBERS = 'aai_refresh_full_subscribers';
+ public static AAI_GET_SUBSCRIBERS = '../../aai_get_subscribers';
+
+ public static AAI_GET_TENTANTS = '../../aai_get_tenants';
+ public static AAI_REFRESH_SUBSCRIBERS = 'aai_refresh_subscribers';
+ public static AAI_SUB_DETAILS = 'aai_sub_details';
+ public static AAI_SUB_VIEWEDIT = '../../aai_sub_viewedit';
+
+ public static GET_WORKFLOW = 'change-management/get_vnf_workflow_relation';
+ public static GET_MSO_WORKFLOWS = 'change-management/mso';
+ public static GET_SCHEDULER_CHANGE_MANAGEMENTS = 'change-management/scheduler';
+ public static CANCEL_SCHEDULE_REQUEST = 'change-management/scheduler/schedules';
+ public static ASSIGN = '?r=';
+ public static AAI_GET_SERVICE_INSTANCE_PATH = 'aai_get_service_instance/';
+ public static AAI_GET_SERVICES = '../../aai_get_services';
+ public static AAI_GET_AIC_ZONES = '../../aai_get_aic_zones';
+ public static AAI_GET_AIC_ZONE_FOR_PNF = 'aai_get_aic_zone_for_pnf/@globalCustomerId/@serviceType/@serviceInstanceId';
+ public static AAI_GET_SERVICES_BY_TYPE = 'aai_get_models_by_service_type';
+ public static AAI_GET_TENANTS = '../../aai_get_tenants/';
+ public static AAI_SUB_DETAILS_PATH = '../../aai_sub_details/';
+ public static AAI_GET_VERSION_BY_INVARIANT_ID = 'aai_get_version_by_invariant_id/';
+ public static SEARCH_SERVICE_INSTANCES = 'search_service_instances';
+ public static AAI_GET_VNF_DATA_PATH = 'aai_get_vnf_data/';
+ public static AAI_GET_VNF_BY_CUSTOMERID_AND_SERVICETYPE = 'get_vnf_data_by_globalid_and_service_type/';
+ public static AAI_GET_SERVICES_BY_OWNING_ENTITY_ID = 'aai_get_services_by_owning_entity_id';
+ public static AAI_GET_VNF_INFO = 'aai_get_vnf_information';
+ public static AAI_GET_PNF_INSTANCE = 'aai_get_service_instance_pnfs';
+ public static AAI_GET_VNF_INSTANCES_LIST = 'aai_get_vnf_instances';
+ public static AAI_GET_PNF_INSTANCES_LIST = 'aai_get_pnf_instances';
+ public static AAI_GET_BY_URI = 'aai_get_by_uri/';
+ public static AAI_GET_CONFIGURATION = 'aai_get_configuration/';
+ public static AAI_GET_TEST_ENVIRONMENTS = 'get_operational_environments?operationalEnvironmentType=';
+ public static GET_CATEGORY_PARAMETERS = '../../category_parameter';
+ public static PARAMETER_STANDARDIZATION_FAMILY = 'PARAMETER_STANDARDIZATION';
+ public static TENANT_ISOLATION_FAMILY = 'TENANT_ISOLATION';
+ public static ASDC_GETMODEL_PATH = 'asdc/getModel/';
+ public static CREATE_INSTANCE_PATH = '/models/services/createInstance';
+ public static AAI_GET_PNF_BY_NAME = 'aai_get_pnfs/pnf/';
+
+ public static GET_SYSTEM_PROP_VNF_PROV_STATUS_PATH = 'get_system_prop_vnf_prov_status';
+ public static GET_USER_ID = 'getuserID';
+ public static INSTANTIATE_ROOT_PATH = '#/instantiate?subscriberId=';
+ public static INSTANTIATE_PATH = '/instantiate';
+ public static INVALID_STRING = '/INVALID_STRING/';
+ public static INVALID_STRING_MSO_CREATE_SVC_INSTANCE = 'INVALID_STRING_mso_create_svc_instance';
+ public static MSO = 'mso';
+ public static MSO_CREATE_NW_INSTANCE = 'mso_create_nw_instance';
+ public static MSO_CREATE_NW_INSTANCE_PATH = 'mso_create_nw_instance/';
+ public static MSO_CREATE_SVC_INSTANCE = 'mso_create_svc_instance';
+ public static MSO_CREATE_VNF_INSTANCE = '../../mso/mso_create_vnf_instance/';
+ public static MSO_DELETE_SVC_INSTANCE_PATH = 'mso_delete_svc_instance/';
+ public static MSO_ACTIVATE_INSTANCE = 'mso/mso_activate_service_instance/@serviceInstanceId';
+ public static MSO_DEACTIVATE_INSTANCE = 'mso/mso_deactivate_service_instance/@serviceInstanceId';
+ public static MSO_CREATE_REALATIONSHIP = 'mso_add_relationship';
+ public static MSO_REMOVE_RELATIONSHIP = 'mso_remove_relationship';
+ public static SELECTED_SERVICE_SUB_PATH = '#/instances/subdetails?';
+ public static SELECTED_SERVICE_INSTANCE_SUB_PATH = 'serviceInstanceIdentifier=';
+ public static SELECTED_SUBSCRIBER_SUB_PATH = 'subscriberId=';
+ public static OWNING_ENTITY_SUB_PATH = 'owningEntity=';
+ public static PROJECT_SUB_PATH = 'project=';
+ public static SERVICE_TYPE_LIST_PATH = '#/instances/serviceTypes?serviceTypeList=';
+ public static SERVICE_MODLES_INSTANCES_SUBSCRIBERS_PATH = 'serviceModels.htm#/instances/subscribers';
+ public static SERVICES_DIST_STATUS_PATH = '../../rest/models/services?distributionStatus=';
+ public static SERVICES_PATH = '../../rest/models/services/';
+ public static SERVICETYPE_SUB_PATH = '&serviceType=';
+ public static SERVICEINSTANCEID_SUB_PATH = '&serviceInstanceId=';
+ public static SERVICEMODELS_INSTANCES_SERVICES_PATH = 'serviceModels.htm#/instances/services';
+ public static SERVICEMODELS_MODELS_SERVICES_PATH = 'serviceModels.htm#/models/services';
+ public static SUBDETAILS_SELECTEDSUBSCRIBER = '#subdetails?selectedSubscriber=';
+ public static SUBSCRIBERNAME_SUB_PATH = '&subscriberName=';
+ public static WELCOME_PATH = 'welcome.htm';
+ public static IS_PERMITTED_SUB_PATH = '&isPermitted=';
+ public static SERVICES_JOB_INFO_PATH = '../../asyncInstantiation';
+ public static CONFIGURATION_PATH = '../../get_property/{name}/defaultvalue';
+ public static SERVICES_JOB_AUDIT_PATH = '/auditStatus';
+ public static SERVICES_PROBE_PATH = "../../probe";
+ public static FEATURES_FLAG_PATH ="../../flags";
+
+ // Test Environment Urls =
+ public static OPERATIONAL_ENVIRONMENT_CREATE = 'operationalEnvironment/create';
+ public static OPERATIONAL_ENVIRONMENT_DEACTIVATE = 'operationalEnvironment/deactivate?operationalEnvironment=';
+ public static OPERATIONAL_ENVIRONMENT_ACTIVATE = 'operationalEnvironment/activate?operationalEnvironment=';
+ public static OPERATIONAL_ENVIRONMENT_STATUS = 'operationalEnvironment/requestStatus?requestId=';
+
+ }
+
+ export class Key {
+
+ public static DESCRIPTION = 'description';
+ public static GENERIC_VNF = 'generic-vnf';
+ public static GLOBAL_CUSTOMER_ID = 'global-customer-id';
+ public static GLOBAL_CUST_ID = 'globalCustomerId';
+ public static IN_MAINT = 'in-maint';
+ public static INVENTORY_RESPONSE_ITEMS = 'inventory-response-items';
+ public static INVENTORY_RESPONSE_ITEM = 'inventory-response-item';
+ public static L3_NETWORK = 'l3-network';
+ public static SUB_NET = 'subnet';
+ public static SUBNET_NAME = 'subnet-name';
+ public static SUBNET_ID = 'subnet-id';
+ public static GATEWAY_ADDRESS = 'gateway-address';
+ public static NETWORK_START_ADDRESS = 'network-start-address';
+ public static CIDR_MASK = 'cidr-mask';
+ public static MODEL_CUSTOMIZATION_ID = 'model-customization-id';
+ public static MODEL_INVAR_ID = 'model-invariant-id';
+ public static MODEL_VERSION_ID = 'model-version-id';
+ public static NETWORK_NAME = 'network-name';
+ public static NETWORK_ID = 'network-id';
+ public static NETWORK_TYPE = 'network-type';
+ public static NETWORKS = 'networks';
+ public static OPERATIONAL_STATUS = 'operational-status';
+ public static ORCHESTRATION_STATUS = 'orchestration-status';
+ public static PERCENT_PROGRESS = 'percent-progress';
+ public static PERSONA_MODEL_ID = 'persona-model-id';
+ public static PERSONA_MODEL_VERSION = 'persona-model-version';
+ public static PERSONA_MODEL_CUSTOMIZATION_ID = 'persona-model-customization-id';
+ public static PROV_STATUS = 'prov-status';
+
+ public static RESOURCE_LINK = 'resource-link';
+ public static RESULT_DATA = 'result-data';
+ public static SERVICE_DESCRIPTION = 'service-description';
+ public static SERVICE_ID = 'service-id';
+ public static SERVICE_INSTANCE = 'service-instance';
+ public static SERVICE_INSTANCES = 'service-instances';
+ public static SERVICE_INSTANCE_ID = 'service-instance-id';
+ public static SERVICE_INSTANCE_NAME = 'service-instance-name';
+ public static SERVICE_SUBSCRIPTION = 'service-subscription';
+ public static SERVICE_SUBSCRIPTIONS = 'service-subscriptions';
+ public static SERVICETYPE = 'service-type';
+ public static STATUS_MESSAGE = 'statusMessage';
+ public static SUBNAME = 'subscriber-name';
+ public static IS_PERMITTED = 'is-permitted';
+ public static TIMESTAMP = 'timestamp';
+ public static VF_MODULE = 'vf-module';
+ public static VF_MODULES = 'vfModules';
+ public static VF_MODULE_ID = 'vf-module-id';
+ public static VF_MODULE_NAME = 'vf-module-name';
+ public static VID = 'VID';
+ public static VNF_ID = 'vnf-id';
+ public static VNF_NAME = 'vnf-name';
+ public static VNF_TYPE = 'vnf-type';
+ public static VNFS = 'vnfs';
+ public static AVAILABLEVOLUMEGROUPS = 'availableVolumeGroups';
+ public static VOLUMEGROUPS = 'volumeGroups';
+ public static VOLUME_GROUP = 'volume-group';
+ public static VOLUME_GROUP_ID = 'volume-group-id';
+ public static VOLUME_GROUP_NAME = 'volume-group-name';
+ public static UPLOAD_SUPPLEMENTORY_DATA_FILE = 'uploadSupplementoryDataFile';
+ public static SUPPLEMENTORY_DATA_FILE = 'supplementoryDataFile';
+ public static ZONE_ID = 'zone-id';
+ public static ZONE_NAME = 'zone-name';
+ public static GENERIC_CONFIGURATION = 'configuration';
+ public static CONFIGURATIONS = 'configurations';
+ public static CONFIGURATION = 'configuration';
+ public static CONFIGURATION_NAME = 'configuration-name';
+ public static CONFIGURATION_TYPE = 'configuration-type';
+ public static CONFIGURATION_ID = 'configuration-id';
+ public static PORT = 'l-interface';
+ public static PORT_ID = 'interface-id';
+ public static PORT_NAME = 'interface-name';
+ public static PORT_MIRRORED = 'is-port-mirrored';
+ }
+
+ export class Status {
+ public static ALL = 'ALL';
+ public static COMPLETE = 'Complete';
+ public static DONE = 'Done';
+ public static ERROR = 'Error';
+ public static FAILED = 'Failed';
+ public static FAILED_SERVICE_MODELS_ASDC = 'Failed to get service models from SDC.';
+ public static FETCHING_SERVICE_TYPES = 'Fetching service types list from A&AI';
+ public static FETCHING_SERVICE_CATALOG = 'Fetching service catalog from AAI. Please wait.';
+ public static FETCHING_SERVICE_CATALOG_ASDC = 'Fetching service catalog from SDC. Please wait.';
+ public static FETCHING_SUB_DETAILS = 'Fetching subscriber details from A&AI for ';
+ public static FETCHING_SERVICE_INST_DATA = 'Fetching service instance data from A&AI for service-instance-id=';
+ public static FETCHING_SUBSCRIBER_LIST_AAI = 'Fetching subscriber list from A&AI...';
+ public static IN_PROGRESS = 'In Progress';
+ public static IS_SUCCESSFUL = ' isSuccessful = ';
+ public static MSO_FAILURE = 'msoFailure';
+ public static NONE = 'None';
+ public static NOT_FOUND = 'Not Found';
+ public static NO_SERVICE_SUBSCRIPTION_FOUND = 'No Service Subscription Found';
+ public static SUBMITTING_REQUEST = 'Submitting Request';
+ public static SUCCESS_VNF_PROV_STATUS = 'Successfully set the VNF\'s Prov_Status to ';
+ public static UNLOCKED = 'Unlocked';
+ public static AAI_ACTIVE = 'Active';
+ public static AAI_INACTIVE = 'Inactive';
+ public static AAI_CREATED = 'Created';
+ public static AAI_ENABLED = 'Enabled';
+ public static AAI_DISABLED = 'Disabled';
+ }
+
+ export class Error {
+ public static AAI = 'A&AI failure - see log below for details';
+ public static AAI_ERROR = 'A&AI Error';
+ public static AAI_FETCHING_CUST_DATA = 'Failed to fetch customer data from A&AI= Response Code= ';
+ public static FETCHING_SERVICE_TYPES = 'Failed to fetch service types from A&AI= Response Code= ';
+ public static FETCHING_SERVICES = 'Failed to fetch services from A&AI= Response Code= ';
+ public static FETCHING_SERVICE_INSTANCE_DATA = 'Failed to fetch service instance data from A&AI= Response Code= ';
+ public static INVALID_INSTANCE_NAME = 'Invalid instance name= ';
+ // tslint:disable-next-line:max-line-length
+ public static INSTANCE_NAME_VALIDATE = 'The instance name must contain only alphanumeric or \'_-.\' characters; and must start with an alphabetic character';
+ public static INVALID_LIST = 'Invalid list parameter= ';
+ public static INVALID_MAP = 'Invalid map parameter= ';
+ public static LIST_VALIDATE = 'A list parameter value must have the following syntax= \'[<value1>;\.\.\.;<valueN>]\'';
+ // tslint:disable-next-line:max-line-length
+ public static MAP_VALIDATE = 'A map parameter value must have the following syntax= \'{ <entry_key_1>= <entry_value_1>; \.\.\.; <entry_key_n>= <entry_value_n> }\'';
+ public static MAX_POLLS_EXCEEDED = 'Maximum number of poll attempts exceeded';
+ public static MISSING_DATA = 'Missing data';
+ public static MODEL_VERSION_ID_MISSING = 'Error= model-version-id is not populated in A&AI';
+ public static MSO = 'MSO failure - see log below for details';
+ public static NO_MATCHING_MODEL = 'No matching model found matching the persona Model Id = ';
+ public static NO_MATCHING_MODEL_AAI = 'No matching model found matching the A&AI model version ID = ';
+ public static SELECT = 'Please select a subscriber or enter a service instance';
+ public static SERVICE_INST_DNE = 'That service instance does not exist. Please try again.';
+ public static SYSTEM_FAILURE = 'System failure';
+ public static INVALID_DATA_FORMAT = 'Invalid data format.Please check your file content whether it is not in json or not.';
+ public static MISSING_FILE = 'Please Select JSON File.';
+
+ public static MISSING_VNF_DETAILS = 'Missing required information.\n' +
+ 'Please open and fill in the details.\n';
+ }
+
+ export class EventType {
+ public static COMPONENT_STATUS = 'ComponentStatus';
+ public static CREATE_COMPONENT = 'createComponent';
+ public static DELETE_RESUME_COMPONENT = 'deleteResumeComponent';
+ }
+
+ export class ServicePopup {
+ public static TITLE = 'Create a new service instance';
+ public static TOOLTIP_UUID = 'Unique identifier for this service in this version.';
+ public static TOOLTIP_INVARIANT_UUID = 'Unique identifier for this service cross versions.';
+
+ }
+
+ export class Parameter {
+ public static BOOLEAN = "boolean";
+ public static SELECT = "select";
+ public static MULTI_SELECT = "multi_select";
+ public static STRING = "string";
+ public static NUMBER = "number";
+ public static VALID_VALUES = "valid_values";
+ public static EQUAL = "equal";
+ public static LENGTH = "length";
+ public static MAX_LENGTH = "max_length";
+ public static MIN_LENGTH = "min_length";
+ public static IN_RANGE = "in_range";
+ public static CONSTRAINTS = "constraints";
+ public static OPERATOR = "operator";
+ public static CONSTRAINT_VALUES = "constraintValues";
+ public static DEFAULT = "default";
+ public static DESCRIPTION = "description";
+ public static TYPE = "type";
+ public static INTEGER = "integer";
+ public static RANGE = "range";
+ public static LIST = "list";
+ public static MAP = "map";
+ public static REQUIRED = "required";
+ public static GREATER_THAN = "greater_than";
+ public static LESS_THAN = "less_than";
+ public static GREATER_OR_EQUAL = "greater_or_equal";
+ public static LESS_OR_EQUAL = "less_or_equal";
+ public static DISPLAY_NAME = "displayName";
+ public static CHECKBOX ='checkbox';
+ public static FILE ='file';
+ }
+
+ export class AuditInfoModal{
+ public static TITLE = 'Service Instantiation Information';
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/utils/httpInterceptor/httpInterceptor.service.ts b/vid-webpack-master/src/app/shared/utils/httpInterceptor/httpInterceptor.service.ts
new file mode 100644
index 000000000..be9ade080
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/utils/httpInterceptor/httpInterceptor.service.ts
@@ -0,0 +1,32 @@
+import { Injectable } from '@angular/core';
+import {
+ HttpInterceptor,
+ HttpRequest,
+ HttpHandler,
+ HttpEvent, HttpErrorResponse
+} from '@angular/common/http';
+
+import { Observable } from 'rxjs/Observable';
+import { ErrorMessage, ErrorService } from '../../components/error/error.component.service';
+import { SpinnerComponent } from '../../components/spinner/spinner.component';
+
+@Injectable()
+export class HttpInterceptorService implements HttpInterceptor {
+ intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
+ SpinnerComponent.showSpinner.next(true);
+ return next.handle(request)
+ .catch((err: HttpErrorResponse) => {
+ if (err.status === 500) {
+ const errorMessage: ErrorMessage = new ErrorMessage('Server not available',
+ 'It appears that one of the backend servers is not responding.\n Please try later.',
+ 500);
+ ErrorService.showErrorWithMessage(errorMessage);
+ return Observable.of(null);
+ }
+ return Observable.throw(err);
+ }).finally(() => {
+ SpinnerComponent.showSpinner.next(false);
+ });
+ }
+}
+
diff --git a/vid-webpack-master/src/app/shared/utils/iframe.service.ts b/vid-webpack-master/src/app/shared/utils/iframe.service.ts
new file mode 100644
index 000000000..9a6636f4e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/utils/iframe.service.ts
@@ -0,0 +1,19 @@
+import {Injectable} from "@angular/core";
+
+@Injectable()
+export class IframeService {
+
+ addClassOpenModal(elementClassName: string) {
+ var parentBodyElement = parent.document.getElementsByClassName(elementClassName)[0];
+ if (parentBodyElement) {
+ parentBodyElement.classList.add("modal-open");
+ }
+ }
+
+ removeClassCloseModal(elementClassName: string) {
+ var parentBodyElement = parent.document.getElementsByClassName(elementClassName)[0];
+ if (parentBodyElement) {
+ parentBodyElement.classList.remove("modal-open");
+ }
+ }
+}
diff --git a/vid-webpack-master/src/app/shared/utils/log/log.service.spec.ts b/vid-webpack-master/src/app/shared/utils/log/log.service.spec.ts
new file mode 100644
index 000000000..ea0eb0499
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/utils/log/log.service.spec.ts
@@ -0,0 +1,29 @@
+
+
+import {LogService} from "./log.service";
+
+describe('log service service', () => {
+ let logService : LogService;
+
+ beforeEach(() => {
+ logService = new LogService();
+ });
+
+
+ it('check all ILogger function are defined', ()=>{
+ expect(logService.log).toBeDefined();
+ expect(logService.assert).toBeDefined();
+ expect(logService.error).toBeDefined();
+ expect(logService.group).toBeDefined();
+ expect(logService.groupEnd).toBeDefined();
+ expect(logService.info).toBeDefined();
+ expect(logService.warn).toBeDefined();
+ });
+
+ it('test getPrefixLog function', ()=> {
+ let args = ['message', [1,2,3,4,5]];
+ let result = LogService.getPrefixLog(args);
+ expect(result).toBeDefined();
+ });
+
+});
diff --git a/vid-webpack-master/src/app/shared/utils/log/log.service.ts b/vid-webpack-master/src/app/shared/utils/log/log.service.ts
new file mode 100644
index 000000000..422fe0134
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/utils/log/log.service.ts
@@ -0,0 +1,58 @@
+import {isDevMode} from "@angular/core";
+declare var console: any;
+
+export interface ILogger {
+ assert(...args: any[]): void;
+ error(...args: any[]): void;
+ group(...args: any[]): void;
+ groupEnd(...args: any[]): void;
+ info(...args: any[]): void;
+ log(...args: any[]): void;
+ warn(...args: any[]): void;
+}
+
+export class LogService implements ILogger {
+
+ isProduction : boolean = !isDevMode();
+ public assert(...args: any[]): void {
+ console.assert(LogService.getPrefixLog(...args));
+ }
+
+ public error(...args: any[]): void {
+ console.error(LogService.getPrefixLog(...args));
+ }
+
+ public group(...args: any[]): void {
+ console.group(LogService.getPrefixLog(...args));
+ }
+
+ public groupEnd(...args: any[]): void {
+ console.groupEnd(LogService.getPrefixLog(...args));
+ }
+
+ public info(...args: any[]): void {
+ console.info(LogService.getPrefixLog(...args));
+ }
+
+ public log(...args: any[]): void {
+ if(!this.isProduction){
+ console.log(LogService.getPrefixLog(...args));
+ }
+ }
+
+ public warn(...args: any[]): void {
+ console.warn(LogService.getPrefixLog(...args));
+ }
+
+ static getPrefixLog(...args :any[]){
+ return {
+ time : new Date(),
+ message : args[0],
+ data : args.length > 0 ? args[1] : ''
+ };
+ }
+}
+
+
+
+
diff --git a/vid-webpack-master/src/app/store/epics.ts b/vid-webpack-master/src/app/store/epics.ts
new file mode 100644
index 000000000..f424e7355
--- /dev/null
+++ b/vid-webpack-master/src/app/store/epics.ts
@@ -0,0 +1,13 @@
+import { Injectable } from '@angular/core';
+
+import {AAIEpics} from "../services/aaiService/aai.epics";
+
+@Injectable()
+export class RootEpics {
+ constructor(private aaiEpics: AAIEpics) {}
+
+ public createEpics() {
+ return this.aaiEpics.createEpic();
+
+ }
+}
diff --git a/vid-webpack-master/src/app/store/module.ts b/vid-webpack-master/src/app/store/module.ts
new file mode 100644
index 000000000..c0909c124
--- /dev/null
+++ b/vid-webpack-master/src/app/store/module.ts
@@ -0,0 +1,29 @@
+import { NgModule } from '@angular/core';
+import { NgReduxModule, NgRedux, DevToolsExtension } from '@angular-redux/store';
+import { RootEpics } from './epics';
+
+import rootReducer, {AppState} from "./reducers";
+import {AAIEpics} from "../services/aaiService/aai.epics";
+
+@NgModule({
+ imports: [NgReduxModule],
+ providers: [RootEpics, AAIEpics],
+})
+
+export class StoreModule {
+ constructor(
+ public store: NgRedux<AppState>,
+ devTools: DevToolsExtension,
+ rootEpics: RootEpics,
+ ) {
+
+ const persistedState = sessionStorage.getItem('reduxState') ?
+ JSON.parse(sessionStorage.getItem('reduxState')) : {};
+
+ store.configureStore(
+ rootReducer,
+ persistedState,
+ rootEpics.createEpics(),
+ devTools.isEnabled() ? [ devTools.enhancer() ] : []);
+ }
+}
diff --git a/vid-webpack-master/src/app/store/reducers.ts b/vid-webpack-master/src/app/store/reducers.ts
new file mode 100644
index 000000000..b3e4f4712
--- /dev/null
+++ b/vid-webpack-master/src/app/store/reducers.ts
@@ -0,0 +1,17 @@
+import {Reducer, combineReducers} from 'redux';
+import {GlobalReducer, GlobalState} from "../global.reducer";
+import {ServiceReducer, ServiceState} from "../service.reducer";
+
+
+export interface AppState {
+ global: GlobalState;
+ service: ServiceState;
+
+}
+
+const rootReducer: Reducer<AppState> = combineReducers<AppState>({
+ global: GlobalReducer,
+ service: ServiceReducer
+});
+
+export default rootReducer;
diff --git a/vid-webpack-master/src/app/utils/utils.ts b/vid-webpack-master/src/app/utils/utils.ts
new file mode 100644
index 000000000..dc4db3e4f
--- /dev/null
+++ b/vid-webpack-master/src/app/utils/utils.ts
@@ -0,0 +1,271 @@
+import { Constants } from '../shared/utils/constants';
+import Parameter = Constants.Parameter;
+import * as _ from 'lodash'
+
+export class Utils {
+
+ public static clampNumber = (number, min, max) => {
+ return Math.max(min, Math.min(number, max));
+ };
+
+ public static hasContents(object: Object): boolean {
+ if (object === undefined || object === null || object === "") {
+ return false;
+ }
+ return true;
+ };
+
+ public static convertModel(serviceModel) {
+
+ let isNewFlow:boolean = false;
+
+ for (let networkCustomizationName in serviceModel.networks) {
+ let networkModel = serviceModel.networks[networkCustomizationName];
+ if ( networkModel.customizationUuid != null ) {
+ isNewFlow = true;
+ break;
+ }
+ }
+ if ( !isNewFlow ) {
+ for (let vnfCustomizationName in serviceModel.vnfs) {
+ let vnfModel = serviceModel.vnfs[vnfCustomizationName];
+ if ( vnfModel.customizationUuid != null ) {
+ isNewFlow = true;
+ break;
+ }
+ }
+ }
+ if ( isNewFlow ) {
+ return (Utils.convertNewModel (serviceModel) );
+ }
+ else {
+ return (Utils.convertOldModel (serviceModel) );
+ }
+ };
+
+ private static convertNewModel (serviceModel ) {
+ let completeResources = new Array();
+ let resource = {};
+ let convertedAsdcModel = {
+ "service": serviceModel.service,
+ "networks": {},
+ "vnfs": {},
+ "pnfs": serviceModel.pnfs,
+ "serviceProxies": serviceModel.serviceProxies,
+ "completeDisplayInputs": {},
+ "isNewFlow": true
+ };
+
+ for(let key in serviceModel.service.inputs) {
+ if(_.includes(["instance_node_target", "naming_policy", "vf_instance_name"], key)) {
+ delete convertedAsdcModel.service.inputs[key];
+ }
+ }
+
+ for (let networkCustomizationName in serviceModel.networks) {
+ let networkModel = serviceModel.networks[networkCustomizationName];
+
+ convertedAsdcModel.networks[networkModel.customizationUuid] = {
+ "uuid": networkModel.uuid,
+ "invariantUuid": networkModel.invariantUuid,
+ "version": networkModel.version,
+ "name": networkModel.name,
+ "modelCustomizationName": networkModel.modelCustomizationName,
+ "customizationUuid": networkModel.customizationUuid,
+ "inputs": "",
+ "description": networkModel.description,
+ "commands": {},
+ "displayInputs": {}
+ };
+
+ resource = {
+ "name": networkModel.modelCustomizationName,
+ "description": networkModel.description
+ };
+
+ completeResources.push (resource);
+
+ }
+
+ _.forEach(serviceModel.configurations, function(element) {
+ element.isConfig = true;
+ });
+ _.forEach(serviceModel.pnfs, function(element, key) {
+ element.isPnf= true;
+ element.modelCustomizationName= key;
+ });
+ let mergedVnfs = Object.assign(serviceModel.vnfs, serviceModel.configurations, serviceModel.pnfs);
+
+ for (let vnfCustomizationName in mergedVnfs) {
+ let vnfModel = mergedVnfs[vnfCustomizationName];
+ let vnfCustomizationUuid = vnfModel.customizationUuid;
+ convertedAsdcModel.vnfs[vnfModel.customizationUuid] = {
+ "uuid": vnfModel.uuid,
+ "invariantUuid": vnfModel.invariantUuid,
+ "version": vnfModel.version,
+ "name": vnfModel.name,
+ "modelCustomizationName": vnfModel.modelCustomizationName,
+ "customizationUuid": vnfModel.customizationUuid,
+ "inputs": "",
+ "description": vnfModel.description,
+ "vfModules": {},
+ "volumeGroups": {},
+ "commands": {},
+ "displayInputs": {},
+ "properties": {},
+ "nfRole": "",
+ "nfType": "",
+ "sourceNodes": vnfModel.sourceNodes,
+ "collectorNodes": vnfModel.collectorNodes,
+ "isConfigurationByPolicy": vnfModel.configurationByPolicy ? vnfModel.configurationByPolicy : false,
+ "isConfig": vnfModel.isConfig ? vnfModel.isConfig : false,
+ "isPnf": vnfModel.isPnf ? vnfModel.isPnf : false
+ };
+
+ resource = {
+ "name": vnfModel.modelCustomizationName,
+ "description": vnfModel.description
+ };
+ completeResources.push (resource);
+
+ if (vnfModel.commands != null) {
+ /*
+ * commands: {
+ * internal_net_param_ntu: {
+ * command: get_input,
+ * displaName: internal_net_param_ntu,
+ * inputName: vccfd1_internal_net_param_ntu // pointer to input key
+ * }
+ * If the input name (ptr) is one of instance_node_target, naming_policy or vf_instance_name
+ * then ignore it
+ *
+ */
+
+ convertedAsdcModel.vnfs[vnfCustomizationUuid].properties=vnfModel.properties;
+ //
+ let vnf_type = "";
+ let vnf_role = "";
+ let vnf_function = "";
+ let vnf_code = "";
+ if ( !( _.isEmpty(vnfModel.properties) ) ) {
+ if (this.hasContents (vnfModel.properties.nf_type) ) {
+ vnf_type = vnfModel.properties.nf_type;
+ }
+ if (this.hasContents (vnfModel.properties.nf_role) ) {
+ vnf_role = vnfModel.properties.nf_role;
+ }
+ if (this.hasContents (vnfModel.properties.nf_function) ) {
+ vnf_function = vnfModel.properties.nf_function;
+ }
+ if (this.hasContents (vnfModel.properties.nf_naming_code) ) {
+ vnf_code = vnfModel.properties.nf_naming_code;
+ }
+ }
+ convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfType"] = vnf_type;
+ convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfRole"] = vnf_role;
+ convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfFunction"] = vnf_function;
+ convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfCode"] = vnf_code;
+ //
+ for (let vfModuleCustomizationName in serviceModel.vnfs[vnfCustomizationName].vfModules) {
+ let vfModuleModel = serviceModel.vnfs[vnfCustomizationName].vfModules[vfModuleCustomizationName];
+ convertedAsdcModel.vnfs[vnfCustomizationUuid].vfModules[vfModuleModel.customizationUuid] = vfModuleModel;
+ }
+
+ for (let volumeGroupCustomizationName in serviceModel.vnfs[vnfCustomizationName].volumeGroups) {
+ let volumeGroupModel = serviceModel.vnfs[vnfCustomizationName].volumeGroups[volumeGroupCustomizationName];
+ convertedAsdcModel.vnfs[vnfCustomizationUuid].volumeGroups[volumeGroupModel.customizationUuid] = volumeGroupModel;
+ }
+ }
+ }
+
+ return (convertedAsdcModel);
+ };
+
+ private static convertOldModel(serviceModel ) {
+ let resource = {};
+ let convertedAsdcModel = {
+ "service": serviceModel.service,
+ "networks": {},
+ "vnfs": {},
+ "pnfs": serviceModel.pnfs,
+ "serviceProxies": serviceModel.serviceProxies,
+ "completeDisplayInputs": {},
+ "isNewFlow": false
+ };
+ let completeResources = new Array();
+ for (let networkCustomizationName in serviceModel.networks) {
+ let networkModel = serviceModel.networks[networkCustomizationName];
+ convertedAsdcModel.networks[networkModel.invariantUuid] = {};
+ //convertedAsdcModel.networks[networkModel.invariantUuid][networkModel.version] = networkModel;
+ // need a network model to test this
+ convertedAsdcModel.networks[networkModel.uuid] = {
+ "uuid": networkModel.uuid,
+ "invariantUuid": networkModel.invariantUuid,
+ "version": networkModel.version,
+ "name": networkModel.name,
+ "modelCustomizationName": networkModel.modelCustomizationName,
+ "customizationUuid": networkModel.customizationUuid,
+ "inputs": "",
+ "description": networkModel.description,
+ "commands": {},
+ "displayInputs": {}
+ };
+ resource = {
+ "name": networkModel.modelCustomizationName,
+ "description": networkModel.description
+ };
+ completeResources.push (resource);
+ }
+
+ _.forEach(serviceModel.configurations, function(element) {
+ element.isConfig = true;
+ });
+ _.forEach(serviceModel.pnfs, function(element, key) {
+ element.isPnf= true;
+ element.modelCustomizationName= key;
+ });
+ let mergedVnfs = Object.assign(serviceModel.vnfs, serviceModel.configurations, serviceModel.pnfs);
+
+ for (let vnfCustomizationName in mergedVnfs) {
+ let vnfModel = mergedVnfs[vnfCustomizationName];
+ convertedAsdcModel.vnfs[vnfModel.uuid] = {
+ "uuid": vnfModel.uuid,
+ "invariantUuid": vnfModel.invariantUuid,
+ "version": vnfModel.version,
+ "name": vnfModel.name,
+ "modelCustomizationName": vnfModel.modelCustomizationName,
+ "customizationUuid": vnfModel.customizationUuid,
+ "inputs": "",
+ "description": vnfModel.description,
+ "vfModules": {},
+ "volumeGroups": {},
+ "commands": {},
+ "displayInputs": {},
+ "sourceNodes": vnfModel.sourceNodes,
+ "collectorNodes": vnfModel.collectorNodes,
+ "isConfigurationByPolicy": vnfModel.configurationByPolicy ? vnfModel.configurationByPolicy : false,
+ "isConfig": vnfModel.isConfig ? vnfModel.isConfig : false,
+ "isPnf": vnfModel.isPnf ? vnfModel.isPnf : false
+ };
+ resource = {
+ "name": vnfModel.modelCustomizationName,
+ "description": vnfModel.description
+ };
+ completeResources.push (resource);
+
+ for (let vfModuleCustomizationName in serviceModel.vnfs[vnfCustomizationName].vfModules) {
+ let vfModuleModel = serviceModel.vnfs[vnfCustomizationName].vfModules[vfModuleCustomizationName];
+ convertedAsdcModel.vnfs[vnfModel.uuid].vfModules[vfModuleModel.uuid] = vfModuleModel;
+ }
+
+ for (let volumeGroupCustomizationName in serviceModel.vnfs[vnfCustomizationName].volumeGroups) {
+ let volumeGroupModel = serviceModel.vnfs[vnfCustomizationName].volumeGroups[volumeGroupCustomizationName];
+ convertedAsdcModel.vnfs[vnfModel.uuid].volumeGroups[volumeGroupModel.uuid] = volumeGroupModel;
+ }
+ }
+
+ let completeDisplayInputs = {};
+
+ return (convertedAsdcModel);
+ };
+}
diff --git a/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.html b/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.html
new file mode 100644
index 000000000..fbb16949a
--- /dev/null
+++ b/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.html
@@ -0,0 +1,14 @@
+<div class="form-wrapper">
+ <form #form="ngForm">
+ <div class="network" *ngFor="let group of groups">
+ <label class="placeholder" [attr.data-tests-id]="'groupLabel'">{{getValueOfLabelInGroup(group,'Group Name')}}</label>
+ <select [(ngModel)]="groupSelection[getValueOfLabelInGroup(group,'Group Name')]" class="form-control input-text"
+ [attr.data-tests-id]="'groupTestId'"
+ id="{{getGroupName(group)}}" name="{{getGroupName(group)}}" required>
+ <option class="placeholder" [value]="undefined" disabled>Select Network</option>
+ <option *ngFor="let singleGroup of getNetworksByNetworkFunctionRole(group) | async"
+ [ngValue]="singleGroup">{{singleGroup["instance-group"]["instance-group-name"]}}</option>
+ </select>
+ </div>
+ </form>
+</div>
diff --git a/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.scss b/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.scss
new file mode 100644
index 000000000..aa45b34f3
--- /dev/null
+++ b/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.scss
@@ -0,0 +1,17 @@
+.form-wrapper{
+ width:640px;
+ padding-left: 50px;
+ padding-top: 50px;
+ .network{
+ padding-bottom: 30px;
+ }
+ .network {
+ select {
+ font-family: OpenSans-Italic;
+ font-size: 14px;
+ color: #959595 !important;
+ }
+ }
+}
+
+
diff --git a/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.ts b/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.ts
new file mode 100644
index 000000000..46a176984
--- /dev/null
+++ b/vid-webpack-master/src/app/vlanTagging/network-selector/network-selector.component.ts
@@ -0,0 +1,66 @@
+import {Component, Input, OnInit, ViewChild} from "@angular/core";
+import {NgRedux, select} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {ModelInformationItem} from "../../shared/components/model-information/model-information.component";
+import {Observable} from "rxjs/Observable";
+import {NgForm} from "@angular/forms";
+import * as _ from 'lodash';
+
+@Component({
+ selector: "app-network-selector",
+ templateUrl: "./network-selector.component.html",
+ styleUrls: ["./network-selector.component.scss"]
+})
+export class NetworkSelectorComponent implements OnInit {
+ private localStore: NgRedux<AppState>;
+ networkSelection: any;
+ groupSelection :any;
+ @Input() groups: Array<string>;
+ @Input() cloudOwner : string;
+ @Input() cloudRegionId : string;
+ @select(['service', 'networkFunctions'])
+ readonly networkFunctions: Observable<any>;
+
+ @ViewChild('form') form: NgForm;
+
+ constructor(store: NgRedux<AppState>) {
+ this.localStore = store;
+ this.groupSelection = {};
+ console.log(store);
+ }
+
+ getValueOfLabelInGroup(group: any, label: string){
+ let item = _.find(group, {"label": label});
+ if (item) {
+ return item["values"][0];
+ }
+ }
+
+ getNetworksByNetworkFunctionRole(group: any): Observable<string[]> {
+ let filteredItem = this.getValueOfLabelInGroup(group,"Network Collection Function");
+ return this.networkFunctions.map(data => {
+ return (data && data[filteredItem]) || [];
+ });
+ }
+
+ getGroupName(group: ModelInformationItem[]) {
+ return this.getValueOfLabelInGroup(group,"Group Name");
+ }
+
+ /**
+ * [ncf=>aaiResonse]
+ * groups => groupsModel
+ */
+
+ ngOnInit() {
+ let store = this.localStore;
+ this.networkSelection = {};
+
+ }
+}
+
+
+//
+/*
+Info inside redux = {ncfNetworkMap }
+*/
diff --git a/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.html b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.html
new file mode 100644
index 000000000..f474f4bd1
--- /dev/null
+++ b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.html
@@ -0,0 +1,27 @@
+<div class="vlan-wrapper-config">
+ <div class="head">
+ <div class="title">Collection Resource Consumer VNF</div>
+ <div class="btn-wrapper">
+ <button class="cancel-btn grey" data-tests-id="cancelButton" (click)="cancel()">{{cancelButtonText}}</button>
+ <button class="next-btn blue" data-tests-id="nextButton" [disabled]="isNextButtonDisabled()" (click)="nextStep()">{{nextButtonText}}</button>
+ </div>
+ </div>
+ <span (serviceInstamce)="onServiceInstanceChange($event)"></span>
+ <div class="content-wrapper">
+ <div class="left-side">
+ <formasync [hidden]="currentStep === wizardSteps.two" [model]="model" class="form"></formasync>
+ <app-network-selector [hidden]="currentStep === wizardSteps.one" class="form-wrapper" [groups]="groups"></app-network-selector>
+ </div>
+
+ <div style="padding-left: 30px;padding-right: 30px" class="sidebar-right">
+ <div class="headline">META DATA</div>
+ <div class="seperator"></div>
+ <model-information [modelInformationItems]="modelInfoItems"></model-information>
+ <div class="headline">Collection Resource Consumer VNF</div>
+ <div *ngFor="let group of groups">
+ <div class="seperator"></div>
+ <model-information [modelInformationItems]="group"></model-information>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.scss b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.scss
new file mode 100644
index 000000000..af4a7e212
--- /dev/null
+++ b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.scss
@@ -0,0 +1,168 @@
+$popupHeaderHeight: 59px;
+
+.vlan-wrapper-config * {
+ font-family: OpenSans-Regular, sans-serif;
+}
+
+.body-content-jsp {
+ margin-top: 35px;
+ margin-left: 201px;
+ margin-right: 0px;
+ background-color: white;
+}
+
+:host {
+ height: 100%;
+}
+.form-wrapper{
+ min-width: 75%;
+ overflow: auto;
+}
+button {
+ border-radius: 2px;
+ font-size: 14px;
+ line-height: 28px;
+ height: 30px;
+ &.blue {
+ border: #0091c8 1px solid;
+ background-color: #009fdb;
+ color: white;
+ &:hover {
+ background-color: #1ec2ff;
+ border-color: #0091c8;
+ }
+ &:active {
+ background-color: #0091c7;
+ border-color: #006186;
+ }
+ &[disabled] {
+ background-color: rgba(5, 104, 174, 0.3);
+ border-color: rgba(4, 113, 168, 0.3);
+ }
+ }
+ &.grey {
+ color: #009FDB;
+ background-color: #ffffff;
+ border: 1px solid #009FDB;
+ &:hover {
+ background-color: #f8f8f8;
+ border-color: #009fdb;
+ }
+ &:active {
+ background-color: #d8d8d8;
+ border-color: #5a5a5a;
+ }
+ &[disabled] {
+ background-color: #f8f8f8;
+ border-color: #d8d8d8;
+ color: #cdcdcd;
+ }
+ }
+ &.white {
+ border: #009fdb 1px solid;
+ background-color: white;
+ color: #009fdb;
+ }
+}
+
+.vlan-wrapper-config {
+ /*todo: remove. this a temporary fix for the sub-interface popup not showing as a page beside the sidebar. currently showing it in full screen.*/
+ /*it is necessary inside the iframe (and not just in the angularjs - old app) angular app because in Firefox the iframe content isn't effected by the iframe size */
+ width: 100vw;
+ height: 100vh;
+ position: fixed;
+ /********************/
+ .head {
+ line-height: $popupHeaderHeight;
+ height: $popupHeaderHeight;
+ display: flex;
+ background-color: #F8F8F8;
+ border-bottom: 1px solid #D8D8D8;
+ .title {
+ font-size: 18px;
+ margin-left: 56px;
+ color: #5A5A5A;
+ }
+ .btn-wrapper {
+ flex: 1;
+ text-align: right;
+ margin-right: 15px;
+ button {
+ width: 120px;
+ &.delete-btn {
+ margin-left: 13px;
+ }
+ }
+ }
+ }
+ .content-wrapper {
+ display: flex;
+ .form {
+ overflow-y: auto;
+ }
+ height: calc(100% - #{$popupHeaderHeight});
+ .form {
+ margin-top: 48px;
+
+ }
+ .content {
+ .form-wrapper {
+
+ margin: 0 auto;
+ }
+ }
+
+ }
+
+ span.error {
+ color: #cf2a2a;
+ }
+ .content-wrapper .content .form-wrapper .instance-field {
+ .ng-invalid-pattern {
+ border-color: #cf2a2a;
+ color: #cf2a2a;
+ }
+ margin-bottom: 25px;
+ label {
+ color: #191919;
+ font-size: 13px;
+ }
+ input,
+ select {
+ border-color: #D2D2D2;
+ }
+ &.lcpRegionText,
+ &.productFamily {
+ display: none;
+ }
+ }
+
+}
+
+.sidebar-right {
+ min-width: 25%;
+ background-color: #F8F8F8;
+ overflow-y: auto;
+ .headline {
+ font-family: OpenSans-Semibold;
+ font-size: 12px;
+ color: #009FDB;
+ padding-bottom: 6px;
+ padding-top: 20px
+ }
+ .seperator{
+ background: #D2D2D2;
+ height: 1px;
+ margin-bottom: 10px;
+ }
+}
+
+.left-side{
+ min-width: 75%;
+ overflow:auto;
+
+}
+
+.sidebar-right service-metadata .metadata-content {
+ padding-bottom: 20px;
+}
diff --git a/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.ts b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.ts
new file mode 100644
index 000000000..f3f63e1e9
--- /dev/null
+++ b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.component.ts
@@ -0,0 +1,203 @@
+import {formasync} from './../components/form-async/form-async.component';
+import {Component, OnInit, ViewChild} from "@angular/core";
+import {NetworkSelectorComponent} from "./network-selector/network-selector.component";
+import {NgRedux, select} from "@angular-redux/store";
+import {AppState} from "../store/reducers";
+import {ActivatedRoute} from "@angular/router";
+import {
+ loadServiceAccordingToUuid, loadAaiNetworkAccordingToNetworkCF,
+ loadUserId
+} from "../services/aaiService/aai.actions";
+import {createRequest} from "../factories/mso.factory";
+import {Observable} from "rxjs/Observable";
+import {VNFModel} from "../shared/models/vnfModel";
+import {VfcInstanceGroupProperties} from "../shared/models/vfcInstanceGroupProperties";
+import * as _ from "lodash";
+import {ModelInformationItem} from "../shared/components/model-information/model-information.component";
+
+enum WizardSteps {
+ one,
+ two
+}
+
+const buttonTextNext = "Next";
+const buttonTextBack = "Back";
+const buttonTextConfirm = "Confirm";
+const buttonTextCancel = "Cancel";
+
+@Component({
+ selector: "vlan-tagging",
+ templateUrl: "./vlan-tagging.component.html",
+ styleUrls: ["./vlan-tagging.component.scss"]
+})
+
+export class VlanTaggingComponent implements OnInit {
+ constructor(private store: NgRedux<AppState>,
+ private route: ActivatedRoute) {
+ this.nextButtonText = buttonTextNext;
+ this.cancelButtonText = buttonTextCancel;
+ this.currentStep = WizardSteps.one;
+ }
+
+ subscriberName: string;
+ serviceKey: string;
+ serviceType: string;
+ vnfKey: string;
+ serviceInstanceName: string;
+ serviceModelId: string;
+ modelInfoItems: Array<ModelInformationItem>;
+ groups: Array<Array<ModelInformationItem>>;
+ currentStep: WizardSteps;
+ nextButtonText: string;
+ cancelButtonText: string;
+ wizardSteps = WizardSteps;
+ cloudOwner: string;
+ cloudRegionId: string;
+ serviceInstanceId : string;
+ model: VNFModel;
+ userId: string;
+ modelCustomizationId : string;
+ onServiceInstanceChange(event) {
+ console.log(event);
+ }
+
+ private serviceHirarchy: any;
+
+ @select(['service', 'serviceHierarchy'])
+ readonly serviceHierarchyObserable: Observable<any>;
+
+ @select(['service', 'userId'])
+ readonly userIdObs: Observable<any>;
+
+
+ @ViewChild(NetworkSelectorComponent)
+ public networkSelectorComponent: NetworkSelectorComponent;
+ @ViewChild(formasync)
+ public formAsync: formasync;
+
+
+ deploySubInterface() {
+
+ const requestDetails = createRequest(
+ this.userId,
+ this.formAsync.serviceInstance,
+ this.serviceHirarchy[this.serviceModelId],
+ this.serviceKey,
+ this.networkSelectorComponent.groupSelection,
+ this.vnfKey,
+ this.modelCustomizationId
+ );
+
+ // this.msoService.createVnf(requestDetails, this.serviceKey).subscribe();
+
+ window.parent.postMessage({
+ eventId: 'submitIframe',
+ data: requestDetails
+ }, "*");
+ }
+
+ ngOnInit() {
+ this.cloudRegionId = "";
+ this.store.dispatch(loadUserId());
+ this.userIdObs.subscribe(res => this.userId = res);
+ this.route.queryParams.subscribe(params => {
+ this.serviceModelId = params["serviceModelId"];
+ this.subscriberName = params["subscriberName"];
+ this.serviceType = params["serviceType"];
+ this.serviceKey = params["serviceInstanceID"];
+ this.vnfKey = params["modelCustomizationName"];
+ this.serviceInstanceId = params["serviceInstanceID"];
+ this.serviceInstanceName = params["serviceInstanceName"];
+ this.modelCustomizationId = params["modelCustomizationId"];
+ this.cloudOwner = params["globalCustomerId"];
+ this.store.dispatch(loadServiceAccordingToUuid(this.serviceModelId));
+ this.serviceHierarchyObserable.subscribe(data => {
+ this.serviceHirarchy = data;
+ if (data && data[this.serviceModelId]) {
+ this.model = new VNFModel(data[this.serviceModelId].vnfs[this.vnfKey]);
+ this.updateModelInfo(this.model);
+ }
+ });
+ });
+ }
+
+ private updateModelInfo(vnfModel: VNFModel) {
+ this.modelInfoItems = [
+ new ModelInformationItem("Service Instance Name", "serviceInstanceName", [this.serviceInstanceName], "", true),
+ new ModelInformationItem("Model Invariant UUID", "modelInvariantUUID", [vnfModel.invariantUuid], "", true),
+ new ModelInformationItem("Model Version", "modelVersion", [vnfModel.version], "", true),
+ new ModelInformationItem("Model UUID", "modelUuid", [vnfModel.uuid], "", true),
+ new ModelInformationItem("Model Customization UUID", "modelCustomizationUuid", [vnfModel.customizationUuid], "", true),
+ ];
+
+ this.groups = [];
+ _.forOwn(vnfModel.vfcInstanceGroups, (vfcInstanceGroup, key) => {
+ const properties: VfcInstanceGroupProperties = vfcInstanceGroup.vfcInstanceGroupProperties;
+ this.groups.push(this.createGroupsInformation(vfcInstanceGroup.name, properties));
+ });
+ }
+
+ nextStep() {
+ switch (this.currentStep) {
+ case WizardSteps.one:
+ this.groups.map(group => {
+ let networkName = _.find(group, (groupElements: ModelInformationItem) => groupElements.testsId === "networkCollectionFunction");
+ this.store.dispatch(
+ loadAaiNetworkAccordingToNetworkCF(networkName["values"][0], this.cloudOwner, this.formAsync.serviceInstance.lcpRegion)
+ );
+ });
+ this.currentStep = WizardSteps.two;
+ this.updateNavigationButtonText(this.currentStep);
+ break;
+ case WizardSteps.two:
+ this.deploySubInterface();
+ break;
+ }
+ }
+
+ cancel() {
+ switch (this.currentStep) {
+ case WizardSteps.one:
+ window.parent.postMessage({
+ eventId: 'closeIframe'
+ }, "*");
+ break;
+ case WizardSteps.two:
+ this.currentStep = WizardSteps.one;
+ this.updateNavigationButtonText(this.currentStep);
+ break;
+ }
+ }
+
+ updateNavigationButtonText(step: WizardSteps) {
+ switch (step) {
+ case WizardSteps.one:
+ this.nextButtonText = buttonTextNext;
+ this.cancelButtonText = buttonTextCancel;
+ break;
+ case WizardSteps.two:
+ this.nextButtonText = buttonTextConfirm;
+ this.cancelButtonText = buttonTextBack;
+ break;
+ }
+ }
+
+ isNextButtonDisabled() {
+ switch (this.currentStep) {
+ case WizardSteps.one:
+ return !this.formAsync.form.valid;
+ case WizardSteps.two:
+ return !this.networkSelectorComponent.form.valid;
+ }
+ }
+
+ createGroupsInformation(name: string, properties: VfcInstanceGroupProperties): Array<ModelInformationItem> {
+ let modelInfoItems = [];
+ modelInfoItems.push(new ModelInformationItem("Group Name", "groupName", [name], "", true));
+ modelInfoItems.push(new ModelInformationItem("Network Collection Function", "networkCollectionFunction", [properties.networkCollectionFunction], "", true));
+ modelInfoItems.push(new ModelInformationItem("VFC Instance Group Function", "instanceGroupFunction", [properties.vfcInstanceGroupFunction], "", true));
+ modelInfoItems.push(new ModelInformationItem("Parent Port Role", "parentPortRole", [properties.vfcParentPortRole], "", true));
+ modelInfoItems.push(new ModelInformationItem("Sub Interface Role", "subInterfaceRole", [properties.subinterfaceRole], "", true));
+ return modelInfoItems;
+ }
+}
diff --git a/vid-webpack-master/src/app/vlanTagging/vlan-tagging.module.ts b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.module.ts
new file mode 100644
index 000000000..3227542c6
--- /dev/null
+++ b/vid-webpack-master/src/app/vlanTagging/vlan-tagging.module.ts
@@ -0,0 +1,33 @@
+
+import { formasync } from './../components/form-async/form-async.component';
+import {NgModule,} from '@angular/core';
+import { FormsModule } from '@angular/forms';
+import { VlanTaggingComponent } from './vlan-tagging.component';
+import {CommonModule} from '@angular/common';
+import { BrowserModule } from '@angular/platform-browser';
+import { NgReduxModule } from '@angular-redux/store';
+import { SharedModule } from '../shared/shared.module';
+import { NetworkSelectorComponent } from './network-selector/network-selector.component';
+import { TooltipModule } from 'ngx-tooltip';
+
+
+
+@NgModule({
+
+imports: [
+ CommonModule,
+ NgReduxModule,
+ FormsModule,
+ BrowserModule,
+ TooltipModule,
+ SharedModule.forRoot()
+
+ ],
+ providers: [ ],
+ declarations: [VlanTaggingComponent,formasync,NetworkSelectorComponent],
+ entryComponents: [],
+ exports: [formasync]
+
+})
+
+export class VlanTaggingModule { }
diff --git a/vid-webpack-master/src/assets/.gitkeep b/vid-webpack-master/src/assets/.gitkeep
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vid-webpack-master/src/assets/.gitkeep
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/Apache License.txt b/vid-webpack-master/src/assets/fonts/OpenSans/Apache License.txt
new file mode 100644
index 000000000..989e2c59e
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/Apache License.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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. \ No newline at end of file
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Bold.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Bold.ttf
new file mode 100644
index 000000000..fd79d43be
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Bold.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-BoldItalic.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-BoldItalic.ttf
new file mode 100644
index 000000000..9bc800958
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-BoldItalic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-ExtraBold.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-ExtraBold.ttf
new file mode 100644
index 000000000..21f6f84a0
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-ExtraBold.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf
new file mode 100644
index 000000000..31cb68834
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Italic.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Italic.ttf
new file mode 100644
index 000000000..c90da48ff
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Italic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Light.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Light.ttf
new file mode 100644
index 000000000..0d381897d
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Light.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-LightItalic.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-LightItalic.ttf
new file mode 100644
index 000000000..68299c4bc
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-LightItalic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Regular.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Regular.ttf
new file mode 100644
index 000000000..db433349b
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Regular.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Semibold.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Semibold.ttf
new file mode 100644
index 000000000..1a7679e39
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-Semibold.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-SemiboldItalic.ttf b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-SemiboldItalic.ttf
new file mode 100644
index 000000000..59b6d16b0
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/OpenSans/OpenSans-SemiboldItalic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/icomoon.eot b/vid-webpack-master/src/assets/fonts/icomoon.eot
new file mode 100644
index 000000000..a568b91a5
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/icomoon.eot
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/icomoon.svg b/vid-webpack-master/src/assets/fonts/icomoon.svg
new file mode 100644
index 000000000..44c81d7dc
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/icomoon.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="icomoon" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe900;" glyph-name="add" d="M810.667 490.667h-256v256c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-256h-256c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h256v-256c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v256h256c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
+<glyph unicode="&#xe901;" glyph-name="add_f" d="M512 917.333c260.267 0 469.333-209.067 469.333-469.333s-209.067-469.333-469.333-469.333c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333zM682.667 490.667h-128v128c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-128h-128c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h128v-128c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v128h128c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
+<glyph unicode="&#xe902;" glyph-name="add_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333zM682.667 490.667h-128v128c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-128h-128c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h128v-128c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v128h128c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
+<glyph unicode="&#xe903;" glyph-name="alert_f" d="M997.611 209.079c12.843-17.067 17.067-42.667 21.333-64 0-34.176-12.8-64-38.4-89.6-21.333-25.6-55.424-38.4-89.6-38.4h-725.333c-21.333 0-42.667 4.267-59.733 17.067-59.733 34.091-81.067 115.2-46.933 174.933l358.4 610.133c8.533 17.024 25.6 34.133 42.667 42.667 29.867 17.024 64 21.333 98.133 12.8s64-29.867 81.067-59.776l358.4-605.824zM512 618.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.643 17.067-42.667 42.667-42.667s42.667 17.024 42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667zM482.133 264.533c-8.533-8.491-12.8-17.024-12.8-29.824 0-12.843 4.267-21.333 12.8-29.867 8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.533 8.533 12.8 21.333 12.8 29.867 0 8.491-4.267 21.333-12.8 29.824-17.067 17.067-42.667 17.067-59.733 0z" />
+<glyph unicode="&#xe904;" glyph-name="alert_o" d="M920.811 115.213c-8.533-8.533-21.333-12.8-29.867-12.8h-725.333c-8.533 0-12.8 0-21.333 4.267-21.333 12.8-25.6 38.4-17.067 59.733l362.667 601.6c4.267 4.224 8.533 12.8 12.8 12.8 21.333 12.757 46.933 4.267 59.733-12.8l362.709-601.6c4.224-4.267 4.224-12.843 4.224-21.333 4.267-12.843-4.224-21.333-8.533-29.867zM997.611 209.079l-358.4 605.824c-17.067 29.909-46.933 51.243-81.067 59.776s-68.267 4.224-98.133-12.8c-17.067-8.533-34.133-25.643-42.667-42.667l-358.4-610.133c-34.133-59.733-12.8-140.843 46.933-174.933 17.067-12.8 38.4-17.067 59.733-17.067h725.333c34.176 0 68.267 12.8 89.6 38.4 25.6 25.6 38.4 55.424 38.4 89.6-4.267 21.333-8.491 46.933-21.333 64zM512 618.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.643 17.067-42.667 42.667-42.667s42.667 17.024 42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667zM482.133 264.533c-8.533-8.491-12.8-17.024-12.8-29.824 0-12.843 4.267-21.333 12.8-29.867 8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.533 8.533 12.8 21.333 12.8 29.867 0 8.491-4.267 21.333-12.8 29.824-17.067 17.067-42.667 17.067-59.733 0z" />
+<glyph unicode="&#xe905;" glyph-name="API" d="M853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 874.667h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128zM798.165 478.165l-170.667 170.667c-16.683 16.683-43.648 16.683-60.331 0s-16.683-43.648 0-60.331l140.501-140.501-140.501-140.501c-16.683-16.683-16.683-43.648 0-60.331 8.32-8.32 19.243-12.501 30.165-12.501s21.845 4.181 30.165 12.501l170.667 170.667c16.683 16.683 16.683 43.648 0 60.331zM225.835 478.165l170.667 170.667c16.683 16.683 43.648 16.683 60.331 0s16.683-43.648 0-60.331l-140.501-140.501 140.501-140.501c16.683-16.683 16.683-43.648 0-60.331-8.32-8.32-19.243-12.501-30.165-12.501s-21.845 4.181-30.165 12.501l-170.667 170.667c-16.683 16.683-16.683 43.648 0 60.331z" />
+<glyph unicode="&#xe906;" glyph-name="arrow-left" d="M183.467 477.899c-4.267-4.309-8.533-8.533-8.533-12.8-4.267-4.267-4.267-12.843-4.267-17.067 0-4.267 0-12.8 4.267-17.109 4.267-4.224 4.267-8.491 8.533-12.757l170.667-170.667c17.067-17.067 42.667-17.067 59.733 0s17.067 42.667 0 59.733l-98.091 98.133h494.891c25.6 0 42.667 17.067 42.667 42.667 0 25.557-17.067 42.667-42.667 42.667h-494.891l98.091 98.133c17.067 17.067 17.067 42.667 0 59.733-17.067 17.024-42.667 17.024-59.733 0l-170.667-170.667z" />
+<glyph unicode="&#xe907;" glyph-name="arrow-right" d="M840.533 418.101c4.267 4.309 8.533 8.533 8.533 12.8 4.267 4.267 4.267 12.843 4.267 17.067 0 4.267 0 12.8-4.267 17.109-4.267 4.224-4.267 8.491-8.533 12.757l-170.667 170.667c-17.067 17.067-42.667 17.067-59.733 0s-17.067-42.667 0-59.733l98.091-98.133h-494.891c-25.6 0-42.667-17.067-42.667-42.667 0-25.557 17.067-42.667 42.667-42.667h494.891l-98.091-98.133c-17.067-17.067-17.067-42.667 0-59.733 17.067-17.024 42.667-17.024 59.733 0l170.667 170.667z" />
+<glyph unicode="&#xe908;" glyph-name="arrow_f" d="M938.667 448c0-235.641-191.025-426.667-426.667-426.667s-426.667 191.025-426.667 426.667c0 235.641 191.025 426.667 426.667 426.667s426.667-191.025 426.667-426.667zM458.762 311.637c-10.286-10.637-10.286-27.88 0-38.516s26.962-10.637 37.248 0l150.497 155.621c10.286 10.637 10.286 27.88 0 38.516l-150.497 155.621c-10.286 10.637-26.962 10.637-37.248 0s-10.286-27.88 0-38.516l131.948-136.441-131.948-136.285z" />
+<glyph unicode="&#xe909;" glyph-name="arrow_o" d="M458.762 311.637c-10.286-10.637-10.286-27.88 0-38.516s26.962-10.637 37.248 0l150.497 155.621c10.286 10.637 10.286 27.88 0 38.516l-150.497 155.621c-10.286 10.637-26.962 10.637-37.248 0s-10.286-27.88 0-38.516l131.948-136.441-131.948-136.285zM512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM42.667 448c0-260.267 209.067-469.333 469.333-469.333s469.333 209.067 469.333 469.333c0 260.267-209.067 469.333-469.333 469.333s-469.333-209.067-469.333-469.333z" />
+<glyph unicode="&#xe90a;" glyph-name="attach" d="M924.768 478.208c-16.768 15.872-41.941 15.872-58.709 0l-386.005-364.757c-83.925-79.275-213.973-79.275-297.856 0-83.925 79.317-83.925 202.197 0 281.515l386.005 364.757c46.123 43.563 130.005 43.563 176.171 0 50.347-47.616 50.347-122.923 0-166.571l-385.963-364.715c-16.811-15.872-41.984-15.872-58.752 0-4.181 3.968-8.405 11.904-8.405 23.765 0 11.904 4.224 19.84 12.587 27.776l356.651 336.981c16.768 15.872 16.768 39.68 0 55.509-16.811 15.872-41.984 15.872-58.752 0l-356.651-336.981c-25.173-19.84-37.717-51.541-37.717-83.285 0-31.701 12.544-63.403 37.717-83.243 50.389-47.573 130.091-47.573 176.213 0l386.005 364.757c83.925 79.275 83.925 202.197 0 281.472-37.76 35.669-92.288 59.477-146.816 59.477-54.571 0-109.099-19.84-146.859-59.477l-386.005-364.715c-113.28-107.051-113.28-285.483 0-392.533 58.752-55.467 134.272-79.275 209.792-79.275s150.997 27.733 209.749 79.275l386.005 364.757c8.405 11.904 8.405 39.637-8.405 55.509z" />
+<glyph unicode="&#xe90b;" glyph-name="beadcrumbs" d="M731.429 448l-365.714-365.714v731.429z" />
+<glyph unicode="&#xe90c;" glyph-name="bedge" d="M273.067 789.333h477.867c150.811 0 273.067-122.256 273.067-273.067v-136.533c0-150.811-122.256-273.067-273.067-273.067h-477.867c-150.811 0-273.067 122.256-273.067 273.067v136.533c0 150.811 122.256 273.067 273.067 273.067z" />
+<glyph unicode="&#xe90d;" glyph-name="browse" d="M279.704 400.593c-36.655 0-66.37 29.715-66.37 66.37s29.715 66.37 66.37 66.37c36.655 0 66.37-29.715 66.37-66.37s-29.715-66.37-66.37-66.37zM744.296 400.593c-36.655 0-66.37 29.715-66.37 66.37s29.715 66.37 66.37 66.37c36.655 0 66.37-29.715 66.37-66.37s-29.715-66.37-66.37-66.37zM512 400.593c-36.655 0-66.37 29.715-66.37 66.37s29.715 66.37 66.37 66.37c36.655 0 66.37-29.715 66.37-66.37s-29.715-66.37-66.37-66.37z" />
+<glyph unicode="&#xe90e;" glyph-name="calendar" d="M810.667 64h-597.333c-25.6 0-42.667 17.067-42.667 42.667v384h682.667v-384c0-25.6-17.067-42.667-42.667-42.667zM213.333 746.667h85.333v-42.667c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v42.667h256v-42.667c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v42.667h85.333c25.6 0 42.667-17.067 42.667-42.667v-128h-682.667v128c0 25.6 17.067 42.667 42.667 42.667zM810.667 832h-85.333v42.667c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-42.667h-256v42.667c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-42.667h-85.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe90f;" glyph-name="camera" d="M938.667 149.333c0-25.6-17.067-42.667-42.667-42.667h-768c-25.6 0-42.667 17.067-42.667 42.667v469.333c0 25.6 17.067 42.667 42.667 42.667h170.667c12.8 0 25.6 8.533 34.133 17.067l72.533 110.933h209.067l72.533-110.933c12.8-8.533 25.6-17.067 38.4-17.067h170.667c25.6 0 42.667-17.067 42.667-42.667v-469.333zM896 746.667h-149.333l-72.533 110.933c-8.533 8.533-21.333 17.067-34.133 17.067h-256c-12.8 0-25.6-8.533-34.133-17.067l-72.533-110.933h-149.333c-72.533 0-128-55.467-128-128v-469.333c0-72.533 55.467-128 128-128h768c72.533 0 128 55.467 128 128v469.333c0 72.533-55.467 128-128 128zM512 234.667c-72.533 0-128 55.467-128 128s55.467 128 128 128c72.533 0 128-55.467 128-128s-55.467-128-128-128zM512 576c-119.467 0-213.333-93.867-213.333-213.333s93.867-213.333 213.333-213.333c119.467 0 213.333 93.867 213.333 213.333s-93.867 213.333-213.333 213.333z" />
+<glyph unicode="&#xe910;" glyph-name="chevron" d="M482.125 290.125c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8l213.333 213.333c17.067 17.067 17.067 42.667 0 59.733s-42.667 17.067-59.733 0l-183.467-183.467-183.467 183.467c-17.067 17.067-42.667 17.067-59.733 0s-17.067-42.667 0-59.733l213.333-213.333z" />
+<glyph unicode="&#xe911;" glyph-name="close" d="M580.25 448l258.475 258.475c19.499 19.499 19.499 48.725 0 68.224s-48.768 19.499-68.267 0l-258.475-258.432-258.432 258.432c-19.499 19.499-48.768 19.499-68.267 0s-19.499-48.725 0-68.224l258.475-258.475-258.475-258.475c-19.499-19.499-19.499-48.725 0-68.224 9.771-9.771 19.499-14.635 34.133-14.635s24.363 4.864 34.133 14.635l258.432 258.432 258.475-258.432c9.771-9.771 24.363-14.635 34.133-14.635 9.728 0 24.363 4.864 34.133 14.635 19.499 19.499 19.499 48.725 0 68.224l-258.475 258.475z" />
+<glyph unicode="&#xe912;" glyph-name="commit" d="M896.086 106.965c-338.304 1.152-340.693 454.101-340.651 473.557v106.88l99.157-97.323c8.32-8.192 19.072-12.245 29.867-12.245 11.136 0 22.187 4.309 30.592 12.843 16.469 16.896 16.213 44.032-0.683 60.544l-171.819 168.576c-0.341 0.299-0.811 0.384-1.152 0.725-3.541 3.285-7.509 6.187-12.203 8.149-0.213 0.085-0.341 0.085-0.512 0.128-0.725 0.299-1.451 0.299-2.133 0.555-4.139 1.408-8.277 2.176-12.501 2.304-0.768 0-1.451 0.256-2.219 0.256-0.171 0-0.341 0.085-0.512 0.085-1.067 0-1.963-0.555-3.029-0.597-2.603-0.299-5.12-0.811-7.68-1.579-8.96-2.347-16.512-7.253-22.144-14.293l-165.803-163.456c-16.811-16.597-17.067-43.691-0.512-60.587 16.555-16.811 43.605-17.024 60.416-0.469l96 94.677v-105.387c0.043-19.243-2.347-472.192-340.651-473.344-23.595-0.085-42.667-19.328-42.581-42.965 0.085-23.595 19.2-42.667 42.752-42.667h0.171c107.051 0.384 196.949 36.608 267.307 107.648 56.832 57.429 93.056 130.347 116.437 200.789 23.424-70.443 59.648-143.36 116.48-200.789 70.315-71.040 160.213-107.264 267.264-107.648h0.171c23.552 0 42.667 19.072 42.752 42.667 0.085 23.637-18.987 42.88-42.581 42.965z" />
+<glyph unicode="&#xe913;" glyph-name="composition" d="M810.667 104.533c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667zM213.333 104.533c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667zM213.333 787.2c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667zM512 488.533c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667zM810.667 275.2c-55.68 0-102.528-35.755-120.149-85.333h-357.035c-12.843 36.224-41.259 64.64-77.483 77.483v135.851h135.851c17.621-49.579 64.469-85.333 120.149-85.333 70.699 0 128 57.301 128 128s-57.301 128-128 128c-55.68 0-102.528-35.755-120.149-85.333h-135.851v135.851c49.579 17.621 85.333 64.469 85.333 120.149 0 70.699-57.301 128-128 128s-128-57.301-128-128c0-55.68 35.755-102.528 85.333-120.149v-357.035c-49.579-17.621-85.333-64.469-85.333-120.149 0-70.699 57.301-128 128-128 55.68 0 102.528 35.755 120.149 85.333h357.035c17.621-49.579 64.469-85.333 120.149-85.333 70.699 0 128 57.301 128 128s-57.301 128-128 128z" />
+<glyph unicode="&#xe914;" glyph-name="deployment_Artifacts" d="M853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 874.667h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128zM298.667 277.333c0 23.552 19.115 42.667 42.667 42.667s42.667-19.115 42.667-42.667c0-23.552-19.115-42.667-42.667-42.667s-42.667 19.115-42.667 42.667zM512 661.333c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667zM725.333 277.333c0-23.552-19.115-42.667-42.667-42.667s-42.667 19.115-42.667 42.667c0 23.552 19.115 42.667 42.667 42.667s42.667-19.115 42.667-42.667zM405.888 387.285l66.176 110.379c12.629-4.224 25.899-6.997 39.936-6.997 6.784 0 13.312 0.981 19.84 2.005l81.152-108.16c-23.339-15.232-41.003-37.845-50.475-64.512h-101.035c-10.112 28.544-29.909 52.181-55.595 67.285zM461.483 234.667h101.035c17.621-49.579 64.469-85.333 120.149-85.333 70.699 0 128 57.301 128 128 0 62.805-45.312 114.773-104.96 125.653l-98.304 131.115c20.053 22.571 32.597 51.968 32.597 84.565 0 70.699-57.301 128-128 128s-128-57.301-128-128c0-25.216 7.552-48.597 20.139-68.395l-88.533-147.541c-58.368-11.904-102.272-63.531-102.272-125.397 0-70.699 57.301-128 128-128 55.68 0 102.528 35.755 120.149 85.333z" />
+<glyph unicode="&#xe915;" glyph-name="download" d="M896 277.333c25.6 0 42.667-17.067 42.667-42.667v-128c0-72.533-55.467-128-128-128h-597.333c-72.533 0-128 55.467-128 128v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v128c0 25.6 17.067 42.667 42.667 42.667zM482.101 247.467l-170.667 170.667c-17.024 17.067-17.024 42.667 0 59.733 17.067 17.067 42.667 17.067 59.733 0l98.133-98.091v494.891c0 25.6 17.109 42.667 42.667 42.667 25.6 0 42.667-17.067 42.667-42.667v-494.891l98.133 98.091c17.067 17.067 42.667 17.067 59.733 0s17.067-42.667 0-59.733l-170.667-170.667c-4.267-4.267-8.533-4.267-12.757-8.533-4.309-4.267-12.843-4.267-17.109-4.267-4.224 0-12.8 0-17.067 4.267-4.267 0-8.491 4.267-12.8 8.533z" />
+<glyph unicode="&#xe916;" glyph-name="duplicate" d="M128 106.667c0-25.6 17.067-42.667 42.667-42.667h384c25.6 0 42.667 17.067 42.667 42.667v384c0 25.6-17.067 42.667-42.667 42.667h-384c-25.6 0-42.667-17.067-42.667-42.667v-384zM170.667 618.667h384c72.533 0 128-55.467 128-128v-384c0-72.533-55.467-128-128-128h-384c-72.533 0-128 55.467-128 128v384c0 72.533 55.467 128 128 128zM810.667 362.667h42.667c25.6 0 42.667 17.067 42.667 42.667v384c0 25.6-17.067 42.667-42.667 42.667h-384c-25.6 0-42.667-17.067-42.667-42.667v-42.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v42.667c0 72.533 55.467 128 128 128h384c72.533 0 128-55.467 128-128v-384c0-72.533-55.467-128-128-128h-42.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z" />
+<glyph unicode="&#xe917;" glyph-name="edit" d="M170.667 388.271v-110.933h110.933l426.667 426.667-110.933 110.933-426.667-426.667zM128 192.004c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 12.8 4.267 21.333 12.8 29.867l469.333 469.333c17.067 17.067 42.667 17.067 59.733 0l170.667-170.667c17.067-17.067 17.067-42.667 0-59.733l-469.333-469.333c-8.533-8.533-17.067-12.8-29.867-12.8h-170.667zM896 64c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768z" />
+<glyph unicode="&#xe918;" glyph-name="expand" d="M934.426 849.067c4.267-4.309 4.267-12.843 4.267-17.067v-256c0-25.6-17.109-42.667-42.667-42.667-25.6 0-42.667 17.067-42.667 42.667v153.557l-226.133-226.133c-8.533-8.533-21.333-12.757-29.867-12.757-8.576 0-21.333 4.224-29.909 12.757-17.024 17.109-17.024 42.667 0 59.776l226.133 226.133h-153.557c-25.6 0-42.667 17.067-42.667 42.667 0 25.557 17.067 42.667 42.667 42.667h256c4.224 0 12.757 0 17.067-4.267 8.491-4.309 17.024-12.843 21.333-21.333zM396.8 392.525c17.067 17.024 42.667 17.024 59.733 0 17.067-17.067 17.067-42.667 0-59.733l-226.091-226.133h153.557c25.6 0 42.667-17.109 42.667-42.667 0-25.6-17.067-42.667-42.667-42.667h-256c-4.224 0-12.8 0-17.067 4.224-8.491 4.309-17.067 12.843-21.333 21.333-4.267 4.309-4.267 12.843-4.267 17.109v256c0 25.557 17.109 42.667 42.667 42.667 25.6 0 42.667-17.109 42.667-42.667v-153.6l226.133 226.133zM913.092 25.566c-4.309-4.267-12.843-4.267-17.067-4.267h-256c-25.6 0-42.667 17.109-42.667 42.667 0 25.6 17.067 42.667 42.667 42.667h153.557l-226.133 226.133c-8.533 8.533-12.757 21.333-12.757 29.867 0 8.576 4.224 21.333 12.757 29.909 17.109 17.024 42.667 17.024 59.776 0l226.133-226.133v153.557c0 25.6 17.067 42.667 42.667 42.667 25.557 0 42.667-17.067 42.667-42.667v-256c0-4.224 0-12.757-4.267-17.067-4.309-8.491-12.843-17.024-21.333-21.333zM456.55 563.191c17.024-17.067 17.024-42.667 0-59.733-17.067-17.067-42.667-17.067-59.733 0l-226.133 226.091v-153.557c0-25.6-17.109-42.667-42.667-42.667-25.6 0-42.667 17.067-42.667 42.667v256c0 4.224 0 12.8 4.224 17.067 4.309 8.491 12.843 17.067 21.333 21.333 4.309 4.267 12.843 4.267 17.109 4.267h256c25.557 0 42.667-17.109 42.667-42.667 0-25.6-17.109-42.667-42.667-42.667h-153.6l226.133-226.133z" />
+<glyph unicode="&#xe919;" glyph-name="fail" d="M580.25 448l258.475 258.475c19.499 19.499 19.499 48.725 0 68.224s-48.768 19.499-68.267 0l-258.475-258.432-258.432 258.432c-19.499 19.499-48.768 19.499-68.267 0s-19.499-48.725 0-68.224l258.475-258.475-258.475-258.475c-19.499-19.499-19.499-48.725 0-68.224 9.771-9.771 19.499-14.635 34.133-14.635s24.363 4.864 34.133 14.635l258.432 258.432 258.475-258.432c9.771-9.771 24.363-14.635 34.133-14.635 9.728 0 24.363 4.864 34.133 14.635 19.499 19.499 19.499 48.725 0 68.224l-258.475 258.475z" />
+<glyph unicode="&#xe91a;" glyph-name="file_managment" d="M853.333 375.462c25.6 0 42.667-17.024 42.667-42.667v-226.133c0-72.533-55.467-128-128-128h-597.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h226.133c25.6 0 42.667-17.067 42.667-42.667 0-25.557-17.067-42.667-42.667-42.667h-226.133c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.557 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.109 42.667 42.667v226.133c0 25.643 17.067 42.667 42.667 42.667zM494.916 320.004h-110.933v110.933l384 384 110.933-110.933-384-384zM968.559 733.871l-170.667 170.667c-17.109 17.067-42.667 17.067-59.776 0l-426.667-426.667c-8.533-8.533-12.8-17.067-12.8-29.867v-170.667c0-25.6 17.109-42.667 42.667-42.667h170.667c12.8 0 21.333 4.267 29.909 12.8l426.667 426.667c17.024 17.067 17.024 42.667 0 59.733z" />
+<glyph unicode="&#xe91b;" glyph-name="filter" d="M563.595 456.533c-4.309-8.533-8.533-17.067-8.533-29.867v-294.443l-85.333 42.667v251.776c0 8.533-4.267 21.333-8.533 25.557l-281.6 337.109h669.867l-285.867-332.8zM977.461 849.067c-8.533 17.067-21.333 25.6-38.4 25.6h-853.333c-17.109 0-29.867-8.533-38.443-25.6-8.491-12.843-4.224-29.867 4.309-42.667l332.8-392.533v-264.533c0-17.109 8.533-29.867 25.557-38.443l170.667-85.333c4.309-4.224 8.576-4.224 17.109-4.224s17.067 0 21.333 4.224c12.8 8.576 21.333 21.333 21.333 38.443v349.867l332.8 392.533c8.533 12.8 12.757 29.824 4.267 42.667z" />
+<glyph unicode="&#xe91c;" glyph-name="filterDown" d="M482.101 162.133c4.309-4.267 8.533-8.533 12.8-8.533 4.267-4.267 12.843-4.267 17.067-4.267 4.267 0 12.8 0 17.109 4.267 4.224 4.267 8.491 4.267 12.757 8.533l170.667 170.667c17.067 17.067 17.067 42.667 0 59.733s-42.667 17.067-59.733 0l-98.133-98.091v494.891c0 25.6-17.067 42.667-42.667 42.667-25.557 0-42.667-17.067-42.667-42.667v-494.891l-98.133 98.091c-17.067 17.067-42.667 17.067-59.733 0-17.024-17.067-17.024-42.667 0-59.733l170.667-170.667z" />
+<glyph unicode="&#xe91d;" glyph-name="filterUp" d="M482.101 819.2c4.309 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.843 4.267 17.067 4.267 4.267 0 12.8 0 17.109-4.267 4.224-4.267 8.491-4.267 12.757-8.533l170.667-170.667c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-98.133 98.091v-494.891c0-25.6-17.067-42.667-42.667-42.667-25.557 0-42.667 17.067-42.667 42.667v494.891l-98.133-98.091c-17.067-17.067-42.667-17.067-59.733 0-17.024 17.067-17.024 42.667 0 59.733l170.667 170.667z" />
+<glyph unicode="&#xe91e;" glyph-name="info_f" d="M512 917.333c260.267 0 469.333-209.067 469.333-469.333 0-260.309-209.067-469.333-469.333-469.333s-469.333 209.024-469.333 469.333c0 260.267 209.067 469.333 469.333 469.333zM512 490.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.643 17.067-42.667 42.667-42.667s42.667 17.024 42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667zM482.125 648.542c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333 12.8-29.867c8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.576 8.533 12.8 17.067 12.8 29.867s-4.224 21.333-12.8 29.867c-17.067 17.024-42.667 17.024-59.733 0z" />
+<glyph unicode="&#xe91f;" glyph-name="info_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333 0-260.309 209.067-469.333 469.333-469.333s469.333 209.024 469.333 469.333c0 260.267-209.067 469.333-469.333 469.333zM512 490.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.643 17.067-42.667 42.667-42.667s42.667 17.024 42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667zM482.125 648.542c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333 12.8-29.867c8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.576 8.533 12.8 17.067 12.8 29.867s-4.224 21.333-12.8 29.867c-17.067 17.024-42.667 17.024-59.733 0z" />
+<glyph unicode="&#xe920;" glyph-name="info_tabs" d="M512 490.667c25.6 0 42.667-17.067 42.667-42.667v-170.667c0-25.643-17.067-42.667-42.667-42.667s-42.667 17.024-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667zM482.133 648.565c17.067 17.024 42.667 17.024 59.733 0 8.576-8.533 12.8-17.067 12.8-29.867s-4.224-21.333-12.8-29.867c-8.533-8.576-17.067-12.8-29.867-12.8s-21.333 4.224-29.867 12.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867zM853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 874.667h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe921;" glyph-name="information_artifacts" d="M512 490.667c25.6 0 42.667-17.067 42.667-42.667v-170.667c0-25.643-17.067-42.667-42.667-42.667s-42.667 17.024-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667zM482.133 648.565c17.067 17.024 42.667 17.024 59.733 0 8.576-8.533 12.8-17.067 12.8-29.867s-4.224-21.333-12.8-29.867c-8.533-8.576-17.067-12.8-29.867-12.8s-21.333 4.224-29.867 12.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867zM853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 874.667h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe922;" glyph-name="inputs" d="M853.333 147.2c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 872.533h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128zM725.333 659.2h-426.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667h426.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667zM725.333 488.533h-426.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667h426.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667z" />
+<glyph unicode="&#xe923;" glyph-name="locked" d="M341.333 661.333c0 93.867 76.8 170.667 170.667 170.667s170.667-76.8 170.667-170.667v-128h-341.333v128zM810.667 533.333h-42.667v128c0 140.8-115.2 256-256 256s-256-115.2-256-256v-128h-42.667c-72.533 0-128-55.467-128-128v-298.667c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v298.667c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe924;" glyph-name="Menu" d="M445.649 699.24c0 36.655 29.715 66.37 66.37 66.37s66.37-29.715 66.37-66.37c0-36.655-29.715-66.37-66.37-66.37s-66.37 29.715-66.37 66.37zM445.649 234.648c0 36.655 29.715 66.37 66.37 66.37s66.37-29.715 66.37-66.37c0-36.655-29.715-66.37-66.37-66.37s-66.37 29.715-66.37 66.37zM445.649 466.944c0 36.655 29.715 66.37 66.37 66.37s66.37-29.715 66.37-66.37c0-36.655-29.715-66.37-66.37-66.37s-66.37 29.715-66.37 66.37z" />
+<glyph unicode="&#xe925;" glyph-name="notifications" d="M234.667 277.333h554.667c-12.8 25.6-21.333 55.467-21.333 85.333v213.333c0 140.8-115.2 256-256 256s-256-115.2-256-256v-213.333c0-29.867-8.533-59.733-21.333-85.333zM938.667 277.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-853.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667c46.933 0 85.333 38.4 85.333 85.333v213.333c0 187.733 153.6 341.333 341.333 341.333s341.333-153.6 341.333-341.333v-213.333c0-46.933 38.4-85.333 85.333-85.333zM644.131 100.648c21.333-12.8 29.867-38.4 8.533-59.733-25.6-42.667-68.267-64-110.933-64-21.333 0-42.667 4.267-64 17.067s-34.133 25.6-46.933 46.933c-8.533 21.333-4.309 46.933 17.024 59.733 21.333 8.533 46.976 4.267 59.776-17.067 4.224-8.533 8.533-12.8 17.067-17.067 21.333-8.533 46.933-4.267 59.733 17.067 12.757 21.333 38.4 29.867 59.733 17.067z" />
+<glyph unicode="&#xe926;" glyph-name="permissions" d="M554.667 362.667h-341.333c-119.467 0-213.333-93.867-213.333-213.333v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c0 72.533 55.467 128 128 128h341.333c72.533 0 128-55.467 128-128v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c0 119.467-93.867 213.333-213.333 213.333zM384 789.333c72.533 0 128-55.467 128-128s-55.467-128-128-128c-72.533 0-128 55.467-128 128s55.467 128 128 128zM384 448c119.467 0 213.333 93.867 213.333 213.333s-93.867 213.333-213.333 213.333c-119.467 0-213.333-93.867-213.333-213.333s93.867-213.333 213.333-213.333zM862.684 361.849c-21.333 4.267-46.976-8.533-51.2-29.867-4.267-21.333 8.533-46.933 29.867-51.2 55.467-12.8 93.867-64 93.867-123.733v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c4.267 98.133-59.733 183.467-157.867 204.8zM693.444 872.034c-21.333 8.533-42.667-4.267-51.2-29.867-4.267-21.333 8.533-46.933 29.867-51.2 68.267-17.067 110.933-85.333 93.867-157.867-12.843-46.933-46.933-81.067-93.867-93.867-21.333-4.267-38.4-29.867-29.867-51.2 4.224-21.333 21.333-34.133 42.667-34.133h8.533c76.8 21.333 136.533 76.8 153.6 153.6 29.867 119.467-38.4 238.933-153.6 264.533z" />
+<glyph unicode="&#xe927;" glyph-name="profile" d="M682.667 362.667h-341.333c-119.467 0-213.333-93.867-213.333-213.333v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c0 72.533 55.467 128 128 128h341.333c72.533 0 128-55.467 128-128v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c0 119.467-93.867 213.333-213.333 213.333zM512 789.333c72.533 0 128-55.467 128-128s-55.467-128-128-128c-72.533 0-128 55.467-128 128s55.467 128 128 128zM512 448c119.467 0 213.333 93.867 213.333 213.333s-93.867 213.333-213.333 213.333c-119.467 0-213.333-93.867-213.333-213.333s93.867-213.333 213.333-213.333z" />
+<glyph unicode="&#xe928;" glyph-name="properties" d="M512 362.658c-46.933 0-85.333 38.4-85.333 85.333 0 46.976 38.4 85.333 85.333 85.333s85.333-38.357 85.333-85.333c0-46.933-38.4-85.333-85.333-85.333zM512 618.658c-93.867 0-170.667-76.8-170.667-170.667s76.8-170.667 170.667-170.667c93.867 0 170.667 76.8 170.667 170.667s-76.8 170.667-170.667 170.667zM814.916 209.075c8.533-8.533 12.843-17.067 12.843-29.867s-4.309-21.333-12.843-29.867c-8.491-8.576-17.024-12.8-29.824-12.8-12.843 0-21.333 4.224-34.176 17.067-34.133 34.133-81.024 42.667-123.691 21.333-42.667-17.067-68.309-59.733-68.309-102.4v-8.533c0-25.6-17.024-42.667-42.667-42.667-25.6 0-42.667 17.067-42.667 42.667v4.267c0 46.933-29.824 85.333-72.491 102.4-12.843 8.533-29.867 8.533-46.976 8.533-29.867 0-59.691-12.8-81.024-34.133-17.109-17.067-38.443-17.067-55.509-4.309l-8.491 17.109h-4.309c-4.224 4.224-4.224 12.8-4.224 17.067 0 12.8 4.224 21.333 17.024 34.133 34.176 34.133 42.667 81.024 21.333 123.691-17.024 42.667-59.691 68.309-102.357 68.309h-8.576c-25.557 0-42.667 17.024-42.667 42.667 0 25.6 17.109 42.667 42.667 42.667h4.267c46.976 0 85.333 29.867 102.4 72.533 17.109 42.667 8.576 89.6-25.557 128-17.109 17.067-17.109 42.667 0 59.733 17.024 17.067 42.667 17.067 64-4.267 29.824-29.867 76.8-38.4 115.157-25.643l12.843 4.309c42.667 17.024 68.224 59.691 68.224 102.357v8.576c0 25.6 17.109 42.667 42.667 42.667 25.6 0 42.667-17.067 42.667-46.933 0-46.976 25.6-85.333 68.267-102.4s89.643-8.576 128 25.6c8.533 8.491 17.067 12.8 29.867 12.8s21.333-4.309 29.867-12.8c17.109-17.067 17.109-42.667-4.224-64-29.867-29.867-38.443-76.843-25.643-115.2l4.309-12.8c17.024-42.667 59.691-68.267 102.357-68.267h8.533c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-46.891-42.667c-46.976 0-85.333-25.6-102.443-68.267-21.333-42.667-8.533-89.643 25.6-128zM866.116 302.942c4.309 8.491 12.8 17.067 29.867 17.067 72.576 0 128 55.424 128 128 0 72.533-55.424 128-128 128h-8.533c-8.533 0-17.024 4.267-21.333 12.757l-4.224 8.576c-4.309 8.533-4.309 21.333 8.533 34.091 46.891 46.976 51.157 115.243 12.8 166.443v12.8l-17.109 8.533c-21.333 21.333-51.2 34.133-85.333 34.133s-68.224-12.8-93.867-38.4c-8.491-8.533-21.333-8.533-29.824-4.267-8.533-4.267-17.109 8.533-17.109 21.333 0 72.533-55.424 128-128 128-72.533 0-128-55.467-128-128v-8.576c0-8.491-4.224-17.024-12.757-21.333l-8.576-4.224c-8.533-4.267-21.333 0-34.091 8.533-51.243 51.2-132.309 51.2-179.243 0-51.2-51.2-51.2-132.309 4.267-183.467 8.533-8.533 8.533-21.333 4.309-34.176-4.309-8.491-17.109-17.024-29.909-17.024-72.533 0-128-55.467-128-128s55.467-128 128-128h8.576c12.757 0 21.333-8.533 25.557-17.067 4.309-8.576 4.309-21.333-8.533-34.133-25.6-25.6-38.357-55.467-38.357-89.6 0-29.867 12.757-59.733 34.091-85.333l4.267-4.267 12.843-12.8c51.157-38.443 119.467-34.133 170.667 12.8 8.491 8.533 21.333 8.533 34.133 4.267 12.757-4.267 17.024-12.843 17.024-29.867 0-72.533 55.509-128 128-128 72.533 0 128 55.467 128 128v8.533c0 12.8 8.533 21.333 17.067 25.6 8.576 4.224 21.333 4.224 34.133-8.533 51.2-51.243 132.309-51.243 179.2 0 51.243 51.2 51.243 132.267-4.224 183.424-4.309 12.843-8.533 25.643-4.309 34.176z" />
+<glyph unicode="&#xe929;" glyph-name="Q_f" d="M560.006 694.979c68.267-25.6 115.2-89.6 119.467-166.4 0-110.933-140.8-162.133-157.867-166.4-4.267-4.267-8.576-4.267-12.8-4.267-17.109 0-34.133 12.8-38.443 29.867-8.491 25.6 4.309 46.933 25.643 55.467 25.6 12.8 98.133 46.933 98.133 89.6 0 38.4-21.333 68.267-55.467 81.067-46.976 17.067-93.867-8.533-110.976-51.2-8.491-21.333-34.091-34.133-55.424-25.6-25.6 4.267-34.133 29.867-29.909 55.467 29.909 85.376 128 132.267 217.643 102.4zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333 0-260.309 209.067-469.333 469.333-469.333s469.333 209.024 469.333 469.333c0 260.267-209.067 469.333-469.333 469.333zM482.133 264.565c17.067 17.024 42.667 17.024 59.733 0 8.576-8.533 12.8-21.333 12.8-29.867s-4.224-21.333-12.8-29.867c-8.533-8.576-17.067-12.8-29.867-12.8s-21.333 4.224-29.867 12.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867z" />
+<glyph unicode="&#xe92a;" glyph-name="Q_o" d="M560.006 694.979c-89.643 29.867-187.733-17.024-217.643-102.4-4.224-25.6 4.309-51.2 29.909-55.467 21.333-8.533 46.933 4.267 55.424 25.6 17.109 42.667 64 68.267 110.976 51.2 34.133-12.8 55.467-42.667 55.467-81.067 0-42.667-72.533-76.8-98.133-89.6-21.333-8.533-34.133-29.867-25.643-55.467 4.309-17.067 21.333-29.867 38.443-29.867 4.224 0 8.533 0 12.8 4.267 17.067 4.267 157.867 55.467 157.867 166.4-4.267 76.8-51.2 140.8-119.467 166.4zM512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333 0-260.309 209.067-469.333 469.333-469.333s469.333 209.024 469.333 469.333c0 260.267-209.067 469.333-469.333 469.333zM482.133 264.565c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333 12.8-29.867c8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.576 8.533 12.8 21.333 12.8 29.867s-4.224 21.333-12.8 29.867c-17.067 17.024-42.667 17.024-59.733 0z" />
+<glyph unicode="&#xe92c;" glyph-name="revert" d="M597.333 422.4l115.2-115.2c17.067-17.067 17.067-42.667 0-59.733-8.533-8.533-21.333-12.8-29.867-12.8s-21.333 4.267-29.867 12.8l-128 128c-8.533 8.533-12.8 17.067-12.8 29.867v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-238.933zM955.895 588.856c81.024-221.867-38.4-465.067-260.309-541.867-46.891-17.067-93.867-25.6-140.757-25.6-174.933 0-341.333 110.933-405.333 285.867-8.576 21.333 4.224 46.933 25.557 55.467s46.976-4.267 55.509-25.6c64-179.2 256-273.067 435.157-209.067 89.643 29.867 157.867 93.867 196.309 174.933 38.357 81.067 42.667 174.933 12.8 260.267-29.909 89.6-93.909 157.867-174.933 196.267-81.067 38.4-174.976 42.667-260.309 12.8-46.891-17.067-93.867-46.933-128-81.067l-119.424-115.2h149.333c25.557 0 34.091-8.533 34.091-34.133s-17.024-42.667-42.667-42.667h-268.757l-4.267 4.267c-4.309 0-4.309 0-8.533 4.267-4.309 0-4.309 4.267-4.309 4.267 0 4.267-4.224 4.267-4.224 8.533v268.8c0 25.6 17.067 42.667 42.667 42.667 25.557 0 42.667-17.067 42.667-42.667v-157.867l128 119.467c42.667 42.667 98.091 76.8 157.867 98.133 106.667 38.4 221.867 34.133 324.224-17.067 102.443-51.2 179.243-136.533 217.643-243.2z" />
+<glyph unicode="&#xe92d;" glyph-name="save" d="M853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-42.667v298.667c0 25.6-17.067 42.667-42.667 42.667h-426.667c-25.6 0-42.667-17.067-42.667-42.667v-298.667h-42.667c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h42.667v-170.667c0-25.6 17.067-42.667 42.667-42.667h341.333c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667h-298.667v128h324.267l187.733-187.733v-452.267zM341.333 106.667v256h341.333v-256h-341.333zM925.867 648.533l-213.333 213.333c-8.533 8.533-17.067 12.8-29.867 12.8h-469.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v469.333c0 12.8-4.267 21.333-12.8 29.867z" />
+<glyph unicode="&#xe92e;" glyph-name="search" d="M170.667 512c0 153.6 123.733 277.333 277.333 277.333s277.333-123.733 277.333-277.333c0-76.8-29.867-145.067-81.067-196.267s-119.467-81.067-196.267-81.067c-153.6 0-277.333 123.733-277.333 277.333zM925.867 93.867l-192 192c46.933 59.733 76.8 140.8 76.8 226.133 0 200.533-162.133 362.667-362.667 362.667s-362.667-162.133-362.667-362.667c0-200.533 162.133-362.667 362.667-362.667 85.333 0 162.133 29.867 226.133 76.8l192-192c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8c17.067 17.067 17.067 42.667 0 59.733z" />
+<glyph unicode="&#xe92f;" glyph-name="setting" d="M512 362.658c-46.933 0-85.333 38.4-85.333 85.333 0 46.976 38.4 85.333 85.333 85.333s85.333-38.357 85.333-85.333c0-46.933-38.4-85.333-85.333-85.333zM512 618.658c-93.867 0-170.667-76.8-170.667-170.667s76.8-170.667 170.667-170.667c93.867 0 170.667 76.8 170.667 170.667s-76.8 170.667-170.667 170.667zM814.916 209.075c8.533-8.533 12.843-17.067 12.843-29.867s-4.309-21.333-12.843-29.867c-8.491-8.576-17.024-12.8-29.824-12.8-12.843 0-21.333 4.224-34.176 17.067-34.133 34.133-81.024 42.667-123.691 21.333-42.667-17.067-68.309-59.733-68.309-102.4v-8.533c0-25.6-17.024-42.667-42.667-42.667-25.6 0-42.667 17.067-42.667 42.667v4.267c0 46.933-29.824 85.333-72.491 102.4-12.843 8.533-29.867 8.533-46.976 8.533-29.867 0-59.691-12.8-81.024-34.133-17.109-17.067-38.443-17.067-55.509-4.309l-8.491 17.109h-4.309c-4.224 4.224-4.224 12.8-4.224 17.067 0 12.8 4.224 21.333 17.024 34.133 34.176 34.133 42.667 81.024 21.333 123.691-17.024 42.667-59.691 68.309-102.357 68.309h-8.576c-25.557 0-42.667 17.024-42.667 42.667 0 25.6 17.109 42.667 42.667 42.667h4.267c46.976 0 85.333 29.867 102.4 72.533 17.109 42.667 8.576 89.6-25.557 128-17.109 17.067-17.109 42.667 0 59.733 17.024 17.067 42.667 17.067 64-4.267 29.824-29.867 76.8-38.4 115.157-25.643l12.843 4.309c42.667 17.024 68.224 59.691 68.224 102.357v8.576c0 25.6 17.109 42.667 42.667 42.667 25.6 0 42.667-17.067 42.667-46.933 0-46.976 25.6-85.333 68.267-102.4s89.643-8.576 128 25.6c8.533 8.491 17.067 12.8 29.867 12.8s21.333-4.309 29.867-12.8c17.109-17.067 17.109-42.667-4.224-64-29.867-29.867-38.443-76.843-25.643-115.2l4.309-12.8c17.024-42.667 59.691-68.267 102.357-68.267h8.533c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-46.891-42.667c-46.976 0-85.333-25.6-102.443-68.267-21.333-42.667-8.533-89.643 25.6-128zM866.116 302.942c4.309 8.491 12.8 17.067 29.867 17.067 72.576 0 128 55.424 128 128 0 72.533-55.424 128-128 128h-8.533c-8.533 0-17.024 4.267-21.333 12.757l-4.224 8.576c-4.309 8.533-4.309 21.333 8.533 34.091 46.891 46.976 51.157 115.243 12.8 166.443v12.8l-17.109 8.533c-21.333 21.333-51.2 34.133-85.333 34.133s-68.224-12.8-93.867-38.4c-8.491-8.533-21.333-8.533-29.824-4.267-8.533-4.267-17.109 8.533-17.109 21.333 0 72.533-55.424 128-128 128-72.533 0-128-55.467-128-128v-8.576c0-8.491-4.224-17.024-12.757-21.333l-8.576-4.224c-8.533-4.267-21.333 0-34.091 8.533-51.243 51.2-132.309 51.2-179.243 0-51.2-51.2-51.2-132.309 4.267-183.467 8.533-8.533 8.533-21.333 4.309-34.176-4.309-8.491-17.109-17.024-29.909-17.024-72.533 0-128-55.467-128-128s55.467-128 128-128h8.576c12.757 0 21.333-8.533 25.557-17.067 4.309-8.576 4.309-21.333-8.533-34.133-25.6-25.6-38.357-55.467-38.357-89.6 0-29.867 12.757-59.733 34.091-85.333l4.267-4.267 12.843-12.8c51.157-38.443 119.467-34.133 170.667 12.8 8.491 8.533 21.333 8.533 34.133 4.267 12.757-4.267 17.024-12.843 17.024-29.867 0-72.533 55.509-128 128-128 72.533 0 128 55.467 128 128v8.533c0 12.8 8.533 21.333 17.067 25.6 8.576 4.224 21.333 4.224 34.133-8.533 51.2-51.243 132.309-51.243 179.2 0 51.243 51.2 51.243 132.267-4.224 183.424-4.309 12.843-8.533 25.643-4.309 34.176z" />
+<glyph unicode="&#xe930;" glyph-name="sub" d="M213.333 490.667h597.333c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667h-597.333c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667z" />
+<glyph unicode="&#xe931;" glyph-name="sub_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333zM682.667 490.667h-341.333c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h341.333c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
+<glyph unicode="&#xe932;" glyph-name="success" d="M815.403 732.877l-360.277-515.925-203.861 197.589c-18.987 18.347-47.445 18.347-66.389 0-18.944-18.389-18.944-45.952 0-64.341l237.056-229.76c9.472-9.173 18.944-13.781 33.195-13.781 14.208 0 23.723 4.608 33.152 13.781l393.515 548.139c18.944 18.347 18.944 45.909 0 64.299s-47.403 18.389-66.389 0z" />
+<glyph unicode="&#xe933;" glyph-name="success_f" d="M757.461 590.549l-298.667-341.333c-7.808-8.875-18.901-14.165-30.72-14.549-0.427 0-0.939 0-1.408 0-11.307 0-22.144 4.48-30.165 12.501l-170.667 170.667c-16.683 16.64-16.683 43.648 0 60.331 16.683 16.64 43.648 16.64 60.331 0l138.411-138.411 268.629 306.987c15.531 17.792 42.539 19.541 60.203 4.011 17.749-15.531 19.541-42.453 4.053-60.203zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333z" />
+<glyph unicode="&#xe934;" glyph-name="success_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333zM693.21 646.771l-268.629-307.029-138.411 138.411c-16.683 16.683-43.648 16.683-60.331 0-16.683-16.64-16.683-43.648 0-60.331l170.667-170.667c7.979-8.021 18.859-12.501 30.165-12.501 0.469 0 0.939 0 1.408 0.043 11.819 0.384 22.912 5.675 30.72 14.549l298.667 341.333c15.488 17.749 13.696 44.672-4.053 60.203-17.664 15.531-44.672 13.781-60.203-4.011z" />
+<glyph unicode="&#xe936;" glyph-name="sync" d="M878.933 358.4c21.333-4.267 34.176-29.867 29.867-55.467-21.333-59.733-59.691-115.2-102.357-157.867-81.109-81.067-187.776-123.733-302.976-123.733s-221.867 42.667-294.357 123.733l-123.776 119.467v-157.867c0-25.6-17.067-42.667-42.667-42.667-25.557 0-42.667 17.067-42.667 42.667v268.8c0 4.267 4.267 4.267 4.267 8.533 4.309 0 4.309 4.267 4.309 4.267 0 4.267 4.224 8.533 8.533 8.533 0 4.267 4.224 4.267 4.224 4.267h4.267c0 4.267 4.309 4.267 8.533 4.267h256c25.643 0 42.667-17.067 42.667-42.667s-17.024-42.667-42.667-42.667h-149.333l119.467-110.933c68.309-68.267 153.643-102.4 243.2-102.4 89.643 0 179.2 34.133 238.976 98.133 38.357 34.133 64 81.067 81.024 128 8.533 21.333 34.133 34.133 55.467 25.6zM958.406 831.276c25.6 0 42.667-17.067 42.667-42.667v-260.267c0-4.267 0-8.533-4.267-12.8 0-4.267-4.267-4.267-4.267-8.533-4.267 0-4.267-4.267-4.267-4.267-4.267-4.267-8.533-4.267-12.8-8.533s-12.8-4.267-17.067-4.267h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h149.333l-119.467 115.2c-34.133 38.4-81.067 64-128 81.067-85.333 29.867-179.2 25.6-260.267-12.8-81.067-42.667-145.067-110.933-174.933-196.267-8.533-21.333-34.133-34.133-55.467-25.6-21.333 4.267-34.133 29.867-25.6 51.2 38.4 110.933 115.2 196.267 217.6 243.2 102.4 51.2 217.6 55.467 328.533 21.333 59.733-21.333 115.2-59.733 157.867-102.4l123.733-119.467v157.867c0 25.6 17.067 42.667 42.667 42.667z" />
+<glyph unicode="&#xe937;" glyph-name="trash" d="M768 106.667c0-25.6-17.067-42.667-42.667-42.667h-426.667c-25.6 0-42.667 17.067-42.667 42.667v554.667h512v-554.667zM384 789.333c0 25.6 17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667v-42.667h-256v42.667zM896 746.667h-170.667v42.667c0 72.533-55.467 128-128 128h-170.667c-72.533 0-128-55.467-128-128v-42.667h-170.667c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h42.667v-554.667c0-72.533 55.467-128 128-128h426.667c72.533 0 128 55.467 128 128v554.667h42.667c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667zM426.667 191.996c25.6 0 42.667 17.067 42.667 42.667v256c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-256c0-25.6 17.067-42.667 42.667-42.667zM597.333 191.996c25.6 0 42.667 17.067 42.667 42.667v256c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-256c0-25.6 17.067-42.667 42.667-42.667z" />
+<glyph unicode="&#xe938;" glyph-name="undo" d="M955.733 588.856c-38.4 106.667-115.2 192-217.643 243.2-102.357 51.2-217.557 55.467-324.224 17.067-59.776-21.333-115.2-55.467-157.867-98.133l-128-119.467v157.867c0 25.6-17.109 42.667-42.667 42.667-25.6 0-42.667-17.067-42.667-42.667v-268.8c0-4.267 4.224-4.267 4.224-8.533 0 0 0-4.267 4.309-4.267 4.224-4.267 4.224-4.267 8.533-4.267l4.267-4.267h268.757c25.643 0 42.667 17.067 42.667 42.667s-8.533 34.133-34.091 34.133h-149.333l119.424 115.2c34.133 34.133 81.109 64 128 81.067 85.333 29.867 179.243 25.6 260.309-12.8 81.024-38.4 145.024-106.667 174.933-196.267 29.867-85.333 25.557-179.2-12.8-260.267-38.443-81.067-106.667-145.067-196.309-174.933-179.157-64-371.157 29.867-435.157 209.067-8.533 21.333-34.176 34.133-55.509 25.6s-34.133-34.133-25.557-55.467c64-174.933 230.4-285.867 405.333-285.867 46.891 0 93.867 8.533 140.757 25.6 221.909 76.8 341.333 320 260.309 541.867z" />
+<glyph unicode="&#xe939;" glyph-name="unlocked" d="M853.333 106.671c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v298.667c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-298.667zM810.667 533.338h-469.333v128c0 46.933 17.067 89.6 51.2 119.467 29.867 34.133 72.533 51.2 119.467 51.2 81.067 0 149.333-55.467 166.4-136.533 4.267-21.333 29.867-38.4 51.2-34.133s38.4 25.6 34.133 51.2c-25.6 119.467-132.267 204.8-251.733 204.8-68.267 0-132.267-25.6-179.2-76.8-51.2-46.933-76.8-110.933-76.8-179.2v-128h-42.667c-72.533 0-128-55.467-128-128v-298.667c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v298.667c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe93a;" glyph-name="upload" d="M896 277.333c25.6 0 42.667-17.067 42.667-42.667v-128c0-72.533-55.467-128-128-128h-597.333c-72.533 0-128 55.467-128 128v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v128c0 25.6 17.067 42.667 42.667 42.667zM371.2 675.189c-17.067-17.024-42.667-17.024-59.733 0-17.067 17.067-17.067 42.667 0 59.733l170.667 170.667c4.267 4.267 8.533 4.267 12.757 8.576 12.843 4.224 25.643 4.224 34.176 0 4.267 0 8.491-4.309 12.8-8.576l170.667-170.667c17.024-17.067 17.024-42.667 0-59.733-8.533-8.533-17.067-12.8-29.867-12.8s-21.333 4.267-29.867 12.8l-98.133 98.133v-494.933c0-25.557-17.109-42.667-42.667-42.667-25.6 0-42.667 17.109-42.667 42.667v494.933l-98.133-98.133z" />
+<glyph unicode="&#xe93b;" glyph-name="view" d="M510.933 149.333c-230.4 0-379.733 230.4-422.4 298.667 38.4 68.267 192 298.667 422.4 298.667s379.733-230.4 422.4-298.667c-42.667-68.267-192-298.667-422.4-298.667zM1018.667 465.067c-8.533 17.067-187.733 366.933-507.733 366.933s-499.2-349.867-507.733-366.933c-4.267-12.8-4.267-25.6 0-38.4 8.533-12.8 187.733-362.667 507.733-362.667s499.2 349.867 507.733 366.933c4.267 8.533 4.267 25.6 0 34.133zM512 362.667c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333zM512 618.667c-93.867 0-170.667-76.8-170.667-170.667s76.8-170.667 170.667-170.667c93.867 0 170.667 76.8 170.667 170.667s-76.8 170.667-170.667 170.667z" />
+<glyph unicode="&#xe93c;" glyph-name="X_f" d="M512 917.333c260.267 0 469.333-209.067 469.333-469.333s-209.067-469.333-469.333-469.333c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333zM651.055 605.894c-17.067 17.024-42.667 17.024-59.733 0l-98.133-98.133-98.133 98.133c-17.067 17.024-42.667 17.024-59.733 0-17.067-17.067-17.067-42.667 0-59.733l98.091-98.133-98.091-98.133c-17.067-17.067-17.067-42.667 0-59.733 8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8l98.133 98.091 98.133-98.091c8.533-8.576 21.333-12.8 29.867-12.8s21.333 4.224 29.867 12.8c17.024 17.067 17.024 42.667 0 59.733l-98.133 98.133 98.133 98.133c17.024 17.067 17.024 42.667 0 59.733z" />
+<glyph unicode="&#xe93d;" glyph-name="X_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333zM651.055 605.894c-17.067 17.024-42.667 17.024-59.733 0l-98.133-98.133-98.133 98.133c-17.067 17.024-42.667 17.024-59.733 0-17.067-17.067-17.067-42.667 0-59.733l98.091-98.133-98.091-98.133c-17.067-17.067-17.067-42.667 0-59.733 8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8l98.133 98.091 98.133-98.091c8.533-8.576 21.333-12.8 29.867-12.8s21.333 4.224 29.867 12.8c17.024 17.067 17.024 42.667 0 59.733l-98.133 98.133 98.133 98.133c17.024 17.067 17.024 42.667 0 59.733z" />
+</font></defs></svg> \ No newline at end of file
diff --git a/vid-webpack-master/src/assets/fonts/icomoon.ttf b/vid-webpack-master/src/assets/fonts/icomoon.ttf
new file mode 100644
index 000000000..4d82ec095
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/icomoon.ttf
Binary files differ
diff --git a/vid-webpack-master/src/assets/fonts/icomoon.woff b/vid-webpack-master/src/assets/fonts/icomoon.woff
new file mode 100644
index 000000000..451aaa8d0
--- /dev/null
+++ b/vid-webpack-master/src/assets/fonts/icomoon.woff
Binary files differ
diff --git a/vid-webpack-master/src/assets/img/Menu.svg b/vid-webpack-master/src/assets/img/Menu.svg
new file mode 100644
index 000000000..5b037bbea
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/Menu.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24">
+ <defs>
+ <path id="menu-a" d="M6.55555556,13.1111111 C5.69644594,13.1111111 5,12.4146652 5,11.5555556 C5,10.6964459 5.69644594,10 6.55555556,10 C7.41466517,10 8.11111111,10.6964459 8.11111111,11.5555556 C8.11111111,12.4146652 7.41466517,13.1111111 6.55555556,13.1111111 Z M17.4444444,13.1111111 C16.5853348,13.1111111 15.8888889,12.4146652 15.8888889,11.5555556 C15.8888889,10.6964459 16.5853348,10 17.4444444,10 C18.3035541,10 19,10.6964459 19,11.5555556 C19,12.4146652 18.3035541,13.1111111 17.4444444,13.1111111 Z M12,13.1111111 C11.1408904,13.1111111 10.4444444,12.4146652 10.4444444,11.5555556 C10.4444444,10.6964459 11.1408904,10 12,10 C12.8591096,10 13.5555556,10.6964459 13.5555556,11.5555556 C13.5555556,12.4146652 12.8591096,13.1111111 12,13.1111111 Z"/>
+ </defs>
+ <g fill="none" fill-rule="evenodd">
+ <use fill="#000" transform="rotate(90 12 11.556)" xlink:href="#menu-a"/>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/assets/img/UPLOAD.svg b/vid-webpack-master/src/assets/img/UPLOAD.svg
new file mode 100644
index 000000000..85ff7e308
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/UPLOAD.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="121px" height="121px" viewBox="0 0 121 121" version="1.1" xmlns="http://www.w3.org/2000/svg">
+ <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
+ <title>Combined Shape</title>
+ <desc>Created with Sketch.</desc>
+ <defs>
+ <linearGradient x1="78.7695312%" y1="73.9666898%" x2="20.3450521%" y2="7.42778616%" id="linearGradient-1">
+ <stop stop-color="#8C1DF3" offset="0%"></stop>
+ <stop stop-color="#E77DE8" offset="100%"></stop>
+ </linearGradient>
+ </defs>
+ <g id="VID_Deployment_5" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-1065.000000, -322.000000)">
+ <path d="M1125.5,443 C1092.08677,443 1065,415.913227 1065,382.5 C1065,349.086773 1092.08677,322 1125.5,322 C1158.91323,322 1186,349.086773 1186,382.5 C1186,415.913227 1158.91323,443 1125.5,443 Z M1125.5,439 C1156.70409,439 1182,413.704088 1182,382.5 C1182,351.295912 1156.70409,326 1125.5,326 C1094.29591,326 1069,351.295912 1069,382.5 C1069,413.704088 1094.29591,439 1125.5,439 Z M1131.83333,355 C1142.33333,355 1150.88889,363.576271 1150.88889,374.101695 C1156.72222,375.738983 1161,381.040678 1161,387.355932 C1161,394.918644 1154.93333,401 1147.38889,401 L1147,401 L1138.75556,401 L1131.75556,401 C1127.71111,401 1124.36667,397.647458 1124.36667,393.59322 L1124.36667,391.644068 L1124.36667,387.433898 L1124.36667,381.274576 L1119.62222,386.732203 C1118.92222,387.511864 1117.67778,387.589831 1116.9,386.888136 C1116.12222,386.186441 1116.04444,384.938983 1116.74444,384.159322 L1124.44444,375.271186 L1124.91111,374.725424 C1125.68889,373.867797 1127.08889,373.867797 1127.86667,374.725424 L1128.33333,375.349153 L1135.95556,384.081356 C1136.65556,384.861017 1136.57778,386.108475 1135.8,386.810169 C1135.02222,387.511864 1133.77778,387.433898 1133.07778,386.654237 L1128.33333,381.19661 L1128.33333,387.355932 L1128.33333,391.644068 L1128.33333,393.59322 C1128.33333,395.542373 1129.88889,397.101695 1131.83333,397.101695 L1133.77778,397.101695 L1147,397.101695 L1147.38889,397.101695 C1152.75556,397.101695 1157.11111,392.735593 1157.11111,387.355932 C1157.11111,382.911864 1154.15556,379.013559 1149.87778,377.844068 C1148.16667,377.376271 1147,375.816949 1147,374.101695 C1147,365.681356 1140.23333,358.898305 1131.83333,358.976271 C1126.93333,358.976271 1122.34444,361.315254 1119.54444,365.213559 C1118.45556,366.694915 1116.51111,367.240678 1114.8,366.461017 C1114.02222,366.071186 1113.24444,365.915254 1112.38889,365.915254 C1109.2,365.915254 1106.55556,368.566102 1106.55556,371.762712 C1106.55556,372.152542 1106.63333,372.620339 1106.71111,373.010169 C1107.17778,375.271186 1105.62222,377.376271 1103.36667,377.688136 C1098.54444,378.311864 1094.88889,382.444068 1094.88889,387.355932 C1094.88889,392.735593 1099.24444,397.101695 1104.61111,397.101695 L1105,397.101695 L1117.05556,397.101695 C1118.14444,397.101695 1119,397.959322 1119,399.050847 C1119,400.142373 1118.14444,401 1117.05556,401 L1104.61111,401 C1097.06667,401 1091,394.918644 1091,387.355932 C1091,381.19661 1095.04444,376.050847 1100.64444,374.257627 L1102.9,373.789831 L1102.66667,372.152542 L1102.66667,371.762712 C1102.66667,366.383051 1107.02222,362.016949 1112.38889,362.016949 C1113.86667,362.016949 1115.18889,362.328814 1116.43333,362.874576 C1119.85556,358.118644 1125.45556,355 1131.83333,355 Z" id="Combined-Shape" fill="url(#linearGradient-1)" fill-rule="nonzero"></path>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/assets/img/X_o.svg b/vid-webpack-master/src/assets/img/X_o.svg
new file mode 100644
index 000000000..a323c190e
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/X_o.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24">
+ <defs>
+ <path id="x_o-a" d="M12,21 C7,21 3,17 3,12 C3,7 7,3 12,3 C17,3 21,7 21,12 C21,17 17,21 12,21 M12,1 C5.9,1 1,5.9 1,12 C1,18.1 5.9,23 12,23 C18.1,23 23,18.1 23,12 C23,5.9 18.1,1 12,1 M15.2591,8.29935 C14.8591,7.90035 14.2591,7.90035 13.8591,8.29935 L11.5591,10.59935 L9.2591,8.29935 C8.8591,7.90035 8.2591,7.90035 7.8591,8.29935 C7.4591,8.69935 7.4591,9.29935 7.8591,9.69935 L10.1581,11.99935 L7.8591,14.29935 C7.4591,14.69935 7.4591,15.29935 7.8591,15.69935 C8.0591,15.90035 8.2591,15.99935 8.5591,15.99935 C8.8591,15.99935 9.0591,15.90035 9.2591,15.69935 L11.5591,13.40035 L13.8591,15.69935 C14.0591,15.90035 14.3591,15.99935 14.5591,15.99935 C14.7591,15.99935 15.0591,15.90035 15.2591,15.69935 C15.6581,15.29935 15.6581,14.69935 15.2591,14.29935 L12.9591,11.99935 L15.2591,9.69935 C15.6581,9.29935 15.6581,8.69935 15.2591,8.29935"/>
+ </defs>
+ <g fill="none" fill-rule="evenodd">
+ <use fill="#000" xlink:href="#x_o-a"/>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/assets/img/angular.png b/vid-webpack-master/src/assets/img/angular.png
new file mode 100644
index 000000000..a1d9790bc
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/angular.png
Binary files differ
diff --git a/vid-webpack-master/src/assets/img/chevron.svg b/vid-webpack-master/src/assets/img/chevron.svg
new file mode 100644
index 000000000..5718cb00e
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/chevron.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24">
+ <defs>
+ <path id="chevron-a" d="M11.2998,15.7002 C11.4998,15.9002 11.7998,16.0002 11.9998,16.0002 C12.1998,16.0002 12.4998,15.9002 12.6998,15.7002 L17.6998,10.7002 C18.0998,10.3002 18.0998,9.7002 17.6998,9.3002 C17.2998,8.9002 16.6998,8.9002 16.2998,9.3002 L11.9998,13.6002 L7.6998,9.3002 C7.2998,8.9002 6.6998,8.9002 6.2998,9.3002 C5.8998,9.7002 5.8998,10.3002 6.2998,10.7002 L11.2998,15.7002 Z"/>
+ </defs>
+ <g fill="none" fill-rule="evenodd">
+ <use fill="#000" xlink:href="#chevron-a"/>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/assets/img/fail.svg b/vid-webpack-master/src/assets/img/fail.svg
new file mode 100644
index 000000000..87c1baa74
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/fail.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24">
+ <defs>
+ <path id="fail-a" d="M13.5996,12 L19.6576,5.942 C20.1146,5.485 20.1146,4.8 19.6576,4.343 C19.2006,3.886 18.5146,3.886 18.0576,4.343 L11.9996,10.4 L5.9426,4.343 C5.4856,3.886 4.7996,3.886 4.3426,4.343 C3.8856,4.8 3.8856,5.485 4.3426,5.942 L10.4006,12 L4.3426,18.058 C3.8856,18.515 3.8856,19.2 4.3426,19.657 C4.5716,19.886 4.7996,20 5.1426,20 C5.4856,20 5.7136,19.886 5.9426,19.657 L11.9996,13.6 L18.0576,19.657 C18.2866,19.886 18.6286,20 18.8576,20 C19.0856,20 19.4286,19.886 19.6576,19.657 C20.1146,19.2 20.1146,18.515 19.6576,18.058 L13.5996,12 Z"/>
+ </defs>
+ <g fill="none" fill-rule="evenodd">
+ <use fill="#000" xlink:href="#fail-a"/>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/assets/img/favicon.ico b/vid-webpack-master/src/assets/img/favicon.ico
new file mode 100644
index 000000000..8081c7cea
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/favicon.ico
Binary files differ
diff --git a/vid-webpack-master/src/assets/img/inprogress.svg b/vid-webpack-master/src/assets/img/inprogress.svg
new file mode 100644
index 000000000..b893c621f
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/inprogress.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24">
+ <defs>
+ <path id="inprogress-a" d="M14.8892528,0.000671665369 C14.6521255,0.0231479869 14.4508328,0.188370906 14.3774086,0.420798226 L13.9586266,1.71936929 C13.8342077,1.78596816 13.7105976,1.8521637 13.5956824,1.92943257 L12.2834996,1.66207763 C12.0324878,1.61103505 11.7777494,1.73018631 11.6506739,1.95807534 L10.7572728,3.54309549 C10.6298181,3.76875487 10.6559818,4.05253533 10.8224168,4.24967115 L11.6785927,5.25224451 C11.6738947,5.33490337 11.6692867,5.41630641 11.6692867,5.50050222 C11.6692867,5.58469803 11.6738947,5.66610107 11.6785927,5.74875688 L10.8224168,6.75133024 C10.6559818,6.94846606 10.6298181,7.23224652 10.7572728,7.45790589 L11.6506739,9.04292605 C11.7777485,9.27081625 12.0324871,9.38996883 12.2834996,9.33892681 L13.5956824,9.07157188 C13.7105976,9.14883769 13.8342077,9.21503628 13.9586266,9.28163516 L14.3774086,10.5802001 C14.4580219,10.831579 14.687164,11.0011661 14.9450903,11.0003389 L16.7318925,11.0003389 C16.9898188,11.0011662 17.2189611,10.8315791 17.2995745,10.5802001 L17.7183562,9.28163516 C17.8427751,9.21503628 17.9663852,9.14883769 18.0813004,9.07157188 L19.3934831,9.33892681 C19.6444956,9.38996883 19.8992343,9.27081625 20.0263089,9.04292605 L20.91971,7.45790589 C21.0471647,7.23224659 21.0210012,6.94846612 20.8545662,6.75133024 L19.9983903,5.74875688 C20.0030883,5.66610107 20.0076963,5.58469803 20.0076963,5.50050222 C20.0076963,5.41630641 20.0030883,5.33490337 19.9983903,5.25224451 L20.8545662,4.24967115 C21.0210012,4.05253526 21.0471647,3.7687548 20.91971,3.54309549 L20.0263089,1.95807534 C19.8992334,1.73018631 19.644495,1.61103505 19.3934831,1.66207763 L18.0813004,1.92943257 C17.9663852,1.8521637 17.8427751,1.78596816 17.7183562,1.71936929 L17.2995745,0.420798226 C17.2189569,0.16942403 16.9898156,-0.000157392525 16.7318925,0.000671665369 L14.9450903,0.000671665369 C14.926488,-0.000223888456 14.9078551,-0.000223888456 14.8892528,0.000671665369 Z M15.3731785,1.22285691 L16.3038045,1.22285691 L16.6574424,2.31136469 C16.7113318,2.47938794 16.8335313,2.61521378 16.9924677,2.68374821 C17.2120208,2.77902652 17.42616,2.91137176 17.6252935,3.06568034 C17.7626503,3.1743391 17.939345,3.21617551 18.1092192,3.18026058 L19.2166641,2.95110009 L19.6819773,3.77225599 L18.9374763,4.64115188 C18.8235917,4.77112577 18.7693918,4.9449068 18.7885762,5.1185701 C18.8040892,5.24530229 18.8164942,5.36935475 18.8164942,5.50050222 C18.8164942,5.63164969 18.8040862,5.7556991 18.7885762,5.88243435 C18.7693927,6.05609662 18.8235925,6.22987636 18.9374763,6.3598495 L19.6819773,7.22874845 L19.2166641,8.0499013 L18.1092192,7.82074386 C17.939345,7.78482893 17.7626503,7.82666535 17.6252935,7.93532411 C17.42616,8.08963268 17.2120208,8.22197792 16.9924677,8.31725623 C16.8335313,8.38579066 16.7113318,8.52161651 16.6574424,8.68963975 L16.3038045,9.77814753 L15.3731785,9.77814753 L15.0195403,8.68963975 C14.965651,8.52161651 14.8434514,8.38579066 14.684515,8.31725623 C14.464962,8.22197792 14.2508231,8.08963268 14.0516892,7.93532411 C13.9143325,7.82666543 13.737638,7.78482902 13.5677638,7.82074386 L12.4603186,8.0499013 L11.9950055,7.22874845 L12.7395065,6.3598495 C12.8533903,6.22987636 12.9075901,6.05609662 12.8884066,5.88243435 C12.8728936,5.7556991 12.8604886,5.63164969 12.8604886,5.50050222 C12.8604886,5.36935475 12.8728936,5.24530229 12.8884066,5.1185701 C12.907591,4.9449068 12.8533911,4.77112577 12.7395065,4.64115188 L11.9950055,3.77225599 L12.4603186,2.95110009 L13.5677638,3.18026058 C13.737638,3.21617542 13.9143325,3.17433901 14.0516892,3.06568034 C14.2508231,2.91137176 14.464962,2.77902652 14.684515,2.68374821 C14.8434514,2.61521378 14.965651,2.47938794 15.0195403,2.31136469 L15.3731785,1.22285691 Z M15.8384914,3.66722435 C14.8516677,3.66722435 14.0516892,4.48801053 14.0516892,5.50050222 C14.0516892,6.51299391 14.8516677,7.33378009 15.8384914,7.33378009 C16.8253151,7.33378009 17.6252935,6.51299391 17.6252935,5.50050222 C17.6252935,4.48801053 16.8253151,3.66722435 15.8384914,3.66722435 Z M15.8384914,4.8894096 C16.167433,4.8894096 16.4340923,5.16300397 16.4340923,5.50050222 C16.4340923,5.83800047 16.167433,6.11159484 15.8384914,6.11159484 C15.5095497,6.11159484 15.2428908,5.83800047 15.2428908,5.50050222 C15.2428908,5.16300397 15.5095497,4.8894096 15.8384914,4.8894096 Z M5.35964143,7.94486966 C5.11761178,7.97028968 4.91497592,8.14417554 4.84779714,8.38409344 L4.39179031,10.007308 C4.08554756,10.1523124 3.79769239,10.3245113 3.52630811,10.5229085 L1.93493719,10.1123397 C1.67706155,10.0458059 1.40743723,10.1626959 1.27419282,10.3987918 L0.0829912853,12.5185218 C-0.0533731038,12.7550456 -0.0191039055,13.0558665 0.166747618,13.2537494 L1.29280541,14.4377158 C1.27376142,14.6131658 1.24627395,14.7832685 1.24627395,14.9724379 C1.24627395,15.1616073 1.27375992,15.3316489 1.29280541,15.5071294 L0.166747618,16.6911263 C-0.0191039055,16.8890093 -0.0533731038,17.1898302 0.0829912853,17.4263539 L1.27419282,19.546084 C1.40744436,19.7821705 1.67706707,19.8990499 1.93493719,19.8325117 L3.52630811,19.4219368 C3.79769239,19.6203339 4.08554756,19.792545 4.39179031,19.9375616 L4.84779714,21.560764 C4.92177045,21.8197002 5.15249473,21.99822 5.41547888,22 L7.79788196,22 C8.06086612,21.99822 8.2915904,21.8197002 8.3655637,21.560764 L8.82157054,19.9375616 C9.12781329,19.792545 9.41566816,19.6203339 9.68705274,19.4219368 L11.2784234,19.8325117 C11.5362936,19.8990501 11.8059165,19.7821706 11.939168,19.546084 L13.1303696,17.4263539 C13.2667339,17.1898302 13.2324648,16.8890093 13.0466132,16.6911263 L11.9205554,15.5071294 C11.9395994,15.3316489 11.9670869,15.1616073 11.9670869,14.9724379 C11.9670869,14.7832685 11.9396009,14.6131658 11.9205554,14.4377158 L13.0466132,13.2537494 C13.2324648,13.0558665 13.2667339,12.7550456 13.1303696,12.5185218 L11.939168,10.3987918 C11.8059236,10.1626958 11.5362991,10.0458057 11.2784234,10.1123397 L9.68705274,10.5229085 C9.41566816,10.3245113 9.12781329,10.1523124 8.82157054,10.007308 L8.3655637,8.38409344 C8.29158606,8.12516208 8.06086282,7.94664809 7.79788196,7.94486966 L5.41547888,7.94486966 C5.39687663,7.94397411 5.37824368,7.94397411 5.35964143,7.94486966 Z M5.86217942,9.16705491 L7.35118142,9.16705491 L7.7513505,10.5802001 C7.80203034,10.7630316 7.93273801,10.9112601 8.10498841,10.9812417 C8.51151269,11.1422694 8.89628488,11.3716194 9.23104591,11.6496137 C9.37749002,11.7698658 9.5705857,11.812321 9.75219678,11.764197 L11.1388296,11.4109138 L11.8740243,12.7190273 L10.8782543,13.7789076 C10.7474487,13.9183714 10.6887629,14.1131648 10.7200479,14.3040353 C10.7555607,14.5348213 10.7758854,14.7535074 10.7758854,14.9724379 C10.7758854,15.1913378 10.7555604,15.4100239 10.7200479,15.6408099 C10.688753,15.8316904 10.7474395,16.0264975 10.8782543,16.1659681 L11.8740243,17.2258484 L11.1388296,18.533962 L9.75219678,18.1806787 C9.5705857,18.1325548 9.37749002,18.17501 9.23104591,18.295262 C8.89628488,18.5732259 8.51151269,18.8026064 8.10498841,18.9636341 C7.93274488,19.0336094 7.80203841,19.1818252 7.7513505,19.3646451 L7.35118142,20.7778086 L5.86217942,20.7778086 L5.46201035,19.3646451 C5.41132243,19.1818252 5.28061596,19.0336094 5.10837243,18.9636341 C4.70184816,18.8026064 4.31707597,18.5732259 3.98231464,18.295262 C3.83587059,18.1750101 3.64277505,18.1325549 3.46116406,18.1806787 L2.07453128,18.533962 L1.33933657,17.2258484 L2.33510657,16.1659681 C2.46592132,16.0264975 2.52460786,15.8316904 2.49331294,15.6408099 C2.45779987,15.4100239 2.43747549,15.1913378 2.43747549,14.9724379 C2.43747549,14.7535074 2.45780047,14.5348213 2.49331294,14.3040353 C2.52459797,14.1131648 2.46591214,13.9183714 2.33510657,13.7789076 L1.33933657,12.7190273 L2.07453128,11.4109138 L3.46116406,11.764197 C3.64277505,11.8123209 3.83587059,11.7698657 3.98231464,11.6496137 C4.31707597,11.3716194 4.70184816,11.1422694 5.10837243,10.9812417 C5.28062283,10.9112601 5.4113305,10.7630316 5.46201035,10.5802001 L5.86217942,9.16705491 Z M6.60668042,12.2225302 C5.13349981,12.2225302 3.92647718,13.460916 3.92647718,14.9724379 C3.92647718,16.4839292 5.13349981,17.7223455 6.60668042,17.7223455 C8.07986133,17.7223455 9.28688366,16.4839292 9.28688366,14.9724379 C9.28688366,13.460916 8.07986133,12.2225302 6.60668042,12.2225302 Z M6.60668042,13.444691 C7.43608795,13.444691 8.09568212,14.1214659 8.09568212,14.9724379 C8.09568212,15.8234099 7.43608795,16.5001542 6.60668042,16.5001542 C5.77727289,16.5001542 5.11767872,15.8234099 5.11767872,14.9724379 C5.11767872,14.1214659 5.77727289,13.444691 6.60668042,13.444691 Z"/>
+ </defs>
+ <g fill="none" fill-rule="evenodd" transform="translate(1 1)">
+ <mask id="inprogress-b" fill="#fff">
+ <use xlink:href="#inprogress-a"/>
+ </mask>
+ <use fill="#959595" fill-rule="nonzero" xlink:href="#inprogress-a"/>
+ <g fill="#5A5A5A" mask="url(#inprogress-b)">
+ <rect width="35" height="35" transform="translate(-4 -2)"/>
+ </g>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/assets/img/pause.svg b/vid-webpack-master/src/assets/img/pause.svg
new file mode 100644
index 000000000..f1f9b7954
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/pause.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24">
+ <defs>
+ <path id="pause-a" d="M12,21 C7,21 3,17 3,12 C3,7 7,3 12,3 C17,3 21,7 21,12 C21,17 17,21 12,21 M12,1 C18.1,1 23,5.9 23,12 C23,18.101 18.1,23 12,23 C5.9,23 1,18.101 1,12 C1,5.9 5.9,1 12,1 Z M13.9580566,7.47058824 C13.4173947,7.47058824 12.9791016,7.90888135 12.9791016,8.44954331 L12.9791016,15.5504567 C12.9791016,16.0911186 13.4173947,16.5294118 13.9580566,16.5294118 C14.4987186,16.5294118 14.9370117,16.0911186 14.9370117,15.5504567 L14.9370117,8.44954331 C14.9370117,7.90888135 14.4987186,7.47058824 13.9580566,7.47058824 Z M10.0211914,7.47058824 C9.48052945,7.47058824 9.04223633,7.90888135 9.04223633,8.44954331 L9.04223633,15.5504567 C9.04223633,16.0911186 9.48052945,16.5294118 10.0211914,16.5294118 C10.5618534,16.5294118 11.0001465,16.0911186 11.0001465,15.5504567 L11.0001465,8.44954331 C11.0001465,7.90888135 10.5618534,7.47058824 10.0211914,7.47058824 Z"/>
+ </defs>
+ <g fill="none" fill-rule="evenodd">
+ <mask id="pause-b" fill="#fff">
+ <use xlink:href="#pause-a"/>
+ </mask>
+ <use fill="#191919" xlink:href="#pause-a"/>
+ <g mask="url(#pause-b)">
+ <rect width="35" height="35" fill="#5A5A5A" transform="translate(-5 -5)"/>
+ </g>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/assets/img/pending.svg b/vid-webpack-master/src/assets/img/pending.svg
new file mode 100644
index 000000000..78c99600e
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/pending.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24">
+ <defs>
+ <path id="pending-a" d="M11,20 C6,20 2,16 2,11 C2,6 6,2 11,2 C16,2 20,6 20,11 C20,16 16,20 11,20 M11,0 C17.1,0 22,4.9 22,11 C22,17.1 17.1,22 11,22 C4.9,22 0,17.1 0,11 C0,4.9 4.9,0 11,0 Z M11.0488812,10.5380604 L7.75288116,6.34206037 C7.38888116,5.92506037 6.75588116,5.88406037 6.34188116,6.24806037 C5.92588116,6.61206037 5.88388116,7.24306037 6.24688116,7.65906037 L10.2468812,12.6590604 C10.4298812,12.8670604 10.6898812,12.9910604 10.9668812,13.0000604 C10.9778812,13.0010604 10.9888812,13.0010604 10.9998812,13.0010604 C11.2648812,13.0010604 11.5198812,12.8960604 11.7068812,12.7080604 L14.7068812,10.7080604 C15.0978812,10.3170604 15.0978812,9.68406037 14.7068812,9.29406037 C14.3158812,8.90306037 13.6838812,8.90306037 13.2928812,9.29406037 L11.0488812,10.5380604 Z"/>
+ </defs>
+ <g fill="none" fill-rule="evenodd" transform="translate(1 1)">
+ <mask id="pending-b" fill="#fff">
+ <use xlink:href="#pending-a"/>
+ </mask>
+ <use fill="#000" xlink:href="#pending-a"/>
+ <g fill="#5A5A5A" mask="url(#pending-b)">
+ <rect width="30" height="30" transform="translate(-2 -1)"/>
+ </g>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/assets/img/stoped.svg b/vid-webpack-master/src/assets/img/stoped.svg
new file mode 100644
index 000000000..0198f1548
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/stoped.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24">
+ <defs>
+ <path id="stoped-a" d="M14,7 L8,7 C7.4,7 7,7.4 7,8 L7,14 C7,14.6 7.4,15 8,15 L14,15 C14.6,15 15,14.6 15,14 L15,8 C15,7.4 14.6,7 14,7 Z M11,0 C4.9,0 0,4.9 0,11 C0,17.1 4.9,22 11,22 C17.1,22 22,17.1 22,11 C22,4.9 17.1,0 11,0 Z M11,20 C6,20 2,16 2,11 C2,6 6,2 11,2 C16,2 20,6 20,11 C20,16 16,20 11,20 Z"/>
+ </defs>
+ <g fill="none" fill-rule="evenodd" transform="translate(1 1)">
+ <mask id="stoped-b" fill="#fff">
+ <use xlink:href="#stoped-a"/>
+ </mask>
+ <use fill="#191919" fill-rule="nonzero" xlink:href="#stoped-a"/>
+ <g fill="#5A5A5A" mask="url(#stoped-b)">
+ <rect width="30" height="30" transform="translate(-4 -4)"/>
+ </g>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/assets/img/success+Circle.svg b/vid-webpack-master/src/assets/img/success+Circle.svg
new file mode 100644
index 000000000..72d75aedb
--- /dev/null
+++ b/vid-webpack-master/src/assets/img/success+Circle.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24">
+ <defs>
+ <path id="success+circle-a" d="M20.0874369,8.68675849 C20.6613636,8.68675849 21.0439815,9.06859403 21.0439815,9.64134733 L21.0439815,10.5004773 C21.0439815,16.3234692 16.3569129,21 10.5219907,21 C4.6870686,21 0,16.3234692 0,10.5004773 C0,4.67748534 4.6870686,0 10.5219907,0 C12.0524621,0 13.487279,0.381835538 14.8264415,0.954588845 C15.3047138,1.14550661 15.4960227,1.71825992 15.3047138,2.19555434 C15.1134049,2.67284877 14.5394781,2.86376653 14.0612058,2.67284877 C12.9133523,2.19555434 11.7654987,1.90917769 10.5219907,1.90917769 C5.73926768,1.90917769 1.91308923,5.72753307 1.91308923,10.5004773 C1.91308923,15.2724669 5.73926768,19.0908223 10.5219907,19.0908223 C15.3047138,19.0908223 19.1308923,15.2724669 19.1308923,10.5004773 L19.1308923,9.64134733 C19.1308923,9.06859403 19.5135101,8.68675849 20.0874369,8.68675849 Z M21.713754,1.24067912 C22.0954153,1.62251466 22.0954153,2.19526797 21.713754,2.5771035 L11.1917633,13.0775808 C11.0004544,13.2684986 10.713491,13.3639575 10.5221821,13.3639575 C10.3308731,13.3639575 10.0439097,13.2684986 9.85260082,13.0775808 L6.98296698,10.2138143 C6.60034914,9.83197873 6.60034914,9.25922542 6.98296698,8.87738988 C7.36558483,8.49555434 7.9395116,8.49555434 8.32212944,8.87738988 L10.5221821,11.0729442 L20.3745916,1.24067912 C20.7572094,0.858843584 21.3311362,0.858843584 21.713754,1.24067912 Z"/>
+ </defs>
+ <g fill="none" fill-rule="evenodd" transform="translate(1 1)">
+ <mask id="success+circle-b" fill="#fff">
+ <use xlink:href="#success+circle-a"/>
+ </mask>
+ <use fill="#000" xlink:href="#success+circle-a"/>
+ <g fill="#5A5A5A" mask="url(#success+circle-b)">
+ <rect width="29" height="29"/>
+ </g>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/environments/environment.prod.ts b/vid-webpack-master/src/environments/environment.prod.ts
new file mode 100644
index 000000000..3612073bc
--- /dev/null
+++ b/vid-webpack-master/src/environments/environment.prod.ts
@@ -0,0 +1,3 @@
+export const environment = {
+ production: true
+};
diff --git a/vid-webpack-master/src/environments/environment.ts b/vid-webpack-master/src/environments/environment.ts
new file mode 100644
index 000000000..b7f639aec
--- /dev/null
+++ b/vid-webpack-master/src/environments/environment.ts
@@ -0,0 +1,8 @@
+// The file contents for the current environment will overwrite these during build.
+// The build system defaults to the dev environment which uses `environment.ts`, but if you do
+// `ng build --env=prod` then `environment.prod.ts` will be used instead.
+// The list of which env maps to which file can be found in `.angular-cli.json`.
+
+export const environment = {
+ production: false
+};
diff --git a/vid-webpack-master/src/index.html b/vid-webpack-master/src/index.html
new file mode 100644
index 000000000..f3c3a9170
--- /dev/null
+++ b/vid-webpack-master/src/index.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Angular 2 App | ng2-webpack</title>
+ <link rel="icon" type="image/x-icon" href="./assets/img/favicon.ico">
+ <base href="./">
+</head>
+<body>
+<vid-app>Loading..</vid-app>
+</body>
+</html>
diff --git a/vid-webpack-master/src/main.ts b/vid-webpack-master/src/main.ts
new file mode 100644
index 000000000..a9ca1caf8
--- /dev/null
+++ b/vid-webpack-master/src/main.ts
@@ -0,0 +1,11 @@
+import { enableProdMode } from '@angular/core';
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+
+import { AppModule } from './app/app.module';
+import { environment } from './environments/environment';
+
+if (environment.production) {
+ enableProdMode();
+}
+
+platformBrowserDynamic().bootstrapModule(AppModule);
diff --git a/vid-webpack-master/src/polyfills.ts b/vid-webpack-master/src/polyfills.ts
new file mode 100644
index 000000000..6fb2c4008
--- /dev/null
+++ b/vid-webpack-master/src/polyfills.ts
@@ -0,0 +1,66 @@
+/**
+ * This file includes polyfills needed by Angular and is loaded before the app.
+ * You can add your own extra polyfills to this file.
+ *
+ * This file is divided into 2 sections:
+ * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
+ * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
+ * file.
+ *
+ * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
+ * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
+ * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
+ *
+ * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
+ */
+
+/***************************************************************************************************
+ * BROWSER POLYFILLS
+ */
+
+/** IE9, IE10 and IE11 requires all of the following polyfills. **/
+import 'core-js/es6/symbol';
+import 'core-js/es6/object';
+import 'core-js/es6/function';
+import 'core-js/es6/parse-int';
+import 'core-js/es6/parse-float';
+import 'core-js/es6/number';
+import 'core-js/es6/math';
+import 'core-js/es6/string';
+import 'core-js/es6/date';
+import 'core-js/es6/array';
+import 'core-js/es6/regexp';
+import 'core-js/es6/map';
+import 'core-js/es6/set';
+
+/** IE10 and IE11 requires the following for NgClass support on SVG elements */
+// import 'classlist.js';
+
+/** IE10 and IE11 requires the following to support `@angular/animation`. */
+//import 'web-animations-js'; // Run `npm install --save web-animations-js`.
+
+
+/** Evergreen browsers require these. **/
+import 'core-js/es6/reflect';
+import 'core-js/es7/reflect';
+
+
+/** ALL Firefox browsers require the following to support `@angular/animation`. **/
+//import 'web-animations-js'; // Run `npm install --save web-animations-js`.
+
+
+
+/***************************************************************************************************
+ * Zone JS is required by Angular itself.
+ */
+import 'zone.js/dist/zone'; // Included with Angular CLI.
+
+/***************************************************************************************************
+ * APPLICATION IMPORTS
+ */
+
+/**
+ * Date, currency, decimal and percent pipes.
+ * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
+ */
+//import 'intl'; // Run `npm install --save intl`.
diff --git a/vid-webpack-master/src/public/img/UPLOAD.svg b/vid-webpack-master/src/public/img/UPLOAD.svg
new file mode 100644
index 000000000..85ff7e308
--- /dev/null
+++ b/vid-webpack-master/src/public/img/UPLOAD.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="121px" height="121px" viewBox="0 0 121 121" version="1.1" xmlns="http://www.w3.org/2000/svg">
+ <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
+ <title>Combined Shape</title>
+ <desc>Created with Sketch.</desc>
+ <defs>
+ <linearGradient x1="78.7695312%" y1="73.9666898%" x2="20.3450521%" y2="7.42778616%" id="linearGradient-1">
+ <stop stop-color="#8C1DF3" offset="0%"></stop>
+ <stop stop-color="#E77DE8" offset="100%"></stop>
+ </linearGradient>
+ </defs>
+ <g id="VID_Deployment_5" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-1065.000000, -322.000000)">
+ <path d="M1125.5,443 C1092.08677,443 1065,415.913227 1065,382.5 C1065,349.086773 1092.08677,322 1125.5,322 C1158.91323,322 1186,349.086773 1186,382.5 C1186,415.913227 1158.91323,443 1125.5,443 Z M1125.5,439 C1156.70409,439 1182,413.704088 1182,382.5 C1182,351.295912 1156.70409,326 1125.5,326 C1094.29591,326 1069,351.295912 1069,382.5 C1069,413.704088 1094.29591,439 1125.5,439 Z M1131.83333,355 C1142.33333,355 1150.88889,363.576271 1150.88889,374.101695 C1156.72222,375.738983 1161,381.040678 1161,387.355932 C1161,394.918644 1154.93333,401 1147.38889,401 L1147,401 L1138.75556,401 L1131.75556,401 C1127.71111,401 1124.36667,397.647458 1124.36667,393.59322 L1124.36667,391.644068 L1124.36667,387.433898 L1124.36667,381.274576 L1119.62222,386.732203 C1118.92222,387.511864 1117.67778,387.589831 1116.9,386.888136 C1116.12222,386.186441 1116.04444,384.938983 1116.74444,384.159322 L1124.44444,375.271186 L1124.91111,374.725424 C1125.68889,373.867797 1127.08889,373.867797 1127.86667,374.725424 L1128.33333,375.349153 L1135.95556,384.081356 C1136.65556,384.861017 1136.57778,386.108475 1135.8,386.810169 C1135.02222,387.511864 1133.77778,387.433898 1133.07778,386.654237 L1128.33333,381.19661 L1128.33333,387.355932 L1128.33333,391.644068 L1128.33333,393.59322 C1128.33333,395.542373 1129.88889,397.101695 1131.83333,397.101695 L1133.77778,397.101695 L1147,397.101695 L1147.38889,397.101695 C1152.75556,397.101695 1157.11111,392.735593 1157.11111,387.355932 C1157.11111,382.911864 1154.15556,379.013559 1149.87778,377.844068 C1148.16667,377.376271 1147,375.816949 1147,374.101695 C1147,365.681356 1140.23333,358.898305 1131.83333,358.976271 C1126.93333,358.976271 1122.34444,361.315254 1119.54444,365.213559 C1118.45556,366.694915 1116.51111,367.240678 1114.8,366.461017 C1114.02222,366.071186 1113.24444,365.915254 1112.38889,365.915254 C1109.2,365.915254 1106.55556,368.566102 1106.55556,371.762712 C1106.55556,372.152542 1106.63333,372.620339 1106.71111,373.010169 C1107.17778,375.271186 1105.62222,377.376271 1103.36667,377.688136 C1098.54444,378.311864 1094.88889,382.444068 1094.88889,387.355932 C1094.88889,392.735593 1099.24444,397.101695 1104.61111,397.101695 L1105,397.101695 L1117.05556,397.101695 C1118.14444,397.101695 1119,397.959322 1119,399.050847 C1119,400.142373 1118.14444,401 1117.05556,401 L1104.61111,401 C1097.06667,401 1091,394.918644 1091,387.355932 C1091,381.19661 1095.04444,376.050847 1100.64444,374.257627 L1102.9,373.789831 L1102.66667,372.152542 L1102.66667,371.762712 C1102.66667,366.383051 1107.02222,362.016949 1112.38889,362.016949 C1113.86667,362.016949 1115.18889,362.328814 1116.43333,362.874576 C1119.85556,358.118644 1125.45556,355 1131.83333,355 Z" id="Combined-Shape" fill="url(#linearGradient-1)" fill-rule="nonzero"></path>
+ </g>
+</svg>
diff --git a/vid-webpack-master/src/public/img/angular.png b/vid-webpack-master/src/public/img/angular.png
new file mode 100644
index 000000000..a1d9790bc
--- /dev/null
+++ b/vid-webpack-master/src/public/img/angular.png
Binary files differ
diff --git a/vid-webpack-master/src/public/img/favicon.ico b/vid-webpack-master/src/public/img/favicon.ico
new file mode 100644
index 000000000..8081c7cea
--- /dev/null
+++ b/vid-webpack-master/src/public/img/favicon.ico
Binary files differ
diff --git a/vid-webpack-master/src/public/img/spinner.gif b/vid-webpack-master/src/public/img/spinner.gif
new file mode 100644
index 000000000..8ed30cb63
--- /dev/null
+++ b/vid-webpack-master/src/public/img/spinner.gif
Binary files differ
diff --git a/vid-webpack-master/src/public/index.html b/vid-webpack-master/src/public/index.html
new file mode 100644
index 000000000..5a639cadf
--- /dev/null
+++ b/vid-webpack-master/src/public/index.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Angular 2 App | ng2-webpack</title>
+ <link rel="icon" type="image/x-icon" href="./img/favicon.ico">
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
+ <link data-require="font-awesome@4.6.1" data-semver="4.6.1" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" />
+ <base href="./">
+</head>
+<body>
+<vid-app>Loading..</vid-app>
+</body>
+</html>
diff --git a/vid-webpack-master/src/public/service-worker.js b/vid-webpack-master/src/public/service-worker.js
new file mode 100644
index 000000000..630bdbdf8
--- /dev/null
+++ b/vid-webpack-master/src/public/service-worker.js
@@ -0,0 +1 @@
+// This file is intentionally without code. \ No newline at end of file
diff --git a/vid-webpack-master/src/style/app.scss b/vid-webpack-master/src/style/app.scss
new file mode 100644
index 000000000..dbcf7b648
--- /dev/null
+++ b/vid-webpack-master/src/style/app.scss
@@ -0,0 +1,125 @@
+// styles in src/style directory are applied to the whole page
+@import "../app/drawingBoard/drawing-board-tree/drawing-board-tree";
+@import "../app/drawingBoard/available-models-tree/available-models-tree.component";
+
+@font-face {
+ font-family: OpenSans-Bold;
+ src: url("fonts/OpenSans/OpenSans-Bold.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-BoldItlaic;
+ src: url("fonts/OpenSans/OpenSans-BoldItalic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-ExtraBold;
+ src: url("fonts/OpenSans/OpenSans-ExtraBold.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-ExtraBoldItalic;
+ src: url("fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-Italic;
+ src: url("fonts/OpenSans/OpenSans-Italic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-Light;
+ src: url("fonts/OpenSans/OpenSans-Light.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-LightItalic;
+ src: url("fonts/OpenSans/OpenSans-LightItalic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-Regular;
+ src: url("fonts/OpenSans/OpenSans-Regular.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-Semibold;
+ src: url("fonts/OpenSans/OpenSans-Semibold.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-SemiboldItalic;
+ src: url("fonts/OpenSans/OpenSans-SemiboldItalic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: 'icomoon';
+ src: url('fonts/icomoon.eot?4cilop');
+ src: url('fonts/icomoon.eot?4cilop#iefix') format('embedded-opentype'),
+ url('fonts/icomoon.ttf?4cilop') format('truetype'),
+ url('fonts/icomoon.woff?4cilop') format('woff'),
+ url('fonts/icomoon.svg?4cilop#icomoon') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+
+[class^="icon-"], [class*=" icon-"] {
+ /* use !important to prevent issues with browser extensions that change fonts */
+ font-family: 'icomoon' !important;
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+html {
+ min-height: 100%;
+ height: 100%;
+ body {
+ height: 100%;
+ vid-app {
+ height: 100%;
+ display: flex !important;
+ flex-direction: column;
+ main {
+ &[_ngcontent-c0] {
+ font-family: OpenSans-Regular;
+ }
+
+ display: flex !important;
+ flex-direction: column;
+ flex: 1;
+
+ }
+ }
+ }
+}
+a {
+ color: #03A9F4;
+}
+
+tooltip-content {
+ .tooltip.left .tooltip-arrow {
+ border-left-color: #171f2a;
+ }
+ .tooltip.bottom .tooltip-arrow {
+ border-bottom-color: #171f2a;
+ }
+ .tooltip-inner {
+ background-color: #171f2a;
+ text-align: left;
+ }
+}
+
+service-planning {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ border: 1px solid #d2d2d2;
+}
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/Apache License.txt b/vid-webpack-master/src/style/fonts/OpenSans/Apache License.txt
new file mode 100644
index 000000000..989e2c59e
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/Apache License.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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. \ No newline at end of file
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Bold.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Bold.ttf
new file mode 100644
index 000000000..fd79d43be
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Bold.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-BoldItalic.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-BoldItalic.ttf
new file mode 100644
index 000000000..9bc800958
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-BoldItalic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-ExtraBold.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-ExtraBold.ttf
new file mode 100644
index 000000000..21f6f84a0
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-ExtraBold.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf
new file mode 100644
index 000000000..31cb68834
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Italic.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Italic.ttf
new file mode 100644
index 000000000..c90da48ff
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Italic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Light.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Light.ttf
new file mode 100644
index 000000000..0d381897d
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Light.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-LightItalic.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-LightItalic.ttf
new file mode 100644
index 000000000..68299c4bc
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-LightItalic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Regular.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Regular.ttf
new file mode 100644
index 000000000..db433349b
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Regular.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Semibold.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Semibold.ttf
new file mode 100644
index 000000000..1a7679e39
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-Semibold.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-SemiboldItalic.ttf b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-SemiboldItalic.ttf
new file mode 100644
index 000000000..59b6d16b0
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/OpenSans/OpenSans-SemiboldItalic.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/icomoon.eot b/vid-webpack-master/src/style/fonts/icomoon.eot
new file mode 100644
index 000000000..a568b91a5
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/icomoon.eot
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/icomoon.svg b/vid-webpack-master/src/style/fonts/icomoon.svg
new file mode 100644
index 000000000..44c81d7dc
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/icomoon.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="icomoon" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe900;" glyph-name="add" d="M810.667 490.667h-256v256c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-256h-256c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h256v-256c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v256h256c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
+<glyph unicode="&#xe901;" glyph-name="add_f" d="M512 917.333c260.267 0 469.333-209.067 469.333-469.333s-209.067-469.333-469.333-469.333c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333zM682.667 490.667h-128v128c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-128h-128c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h128v-128c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v128h128c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
+<glyph unicode="&#xe902;" glyph-name="add_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333zM682.667 490.667h-128v128c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-128h-128c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h128v-128c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v128h128c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
+<glyph unicode="&#xe903;" glyph-name="alert_f" d="M997.611 209.079c12.843-17.067 17.067-42.667 21.333-64 0-34.176-12.8-64-38.4-89.6-21.333-25.6-55.424-38.4-89.6-38.4h-725.333c-21.333 0-42.667 4.267-59.733 17.067-59.733 34.091-81.067 115.2-46.933 174.933l358.4 610.133c8.533 17.024 25.6 34.133 42.667 42.667 29.867 17.024 64 21.333 98.133 12.8s64-29.867 81.067-59.776l358.4-605.824zM512 618.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.643 17.067-42.667 42.667-42.667s42.667 17.024 42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667zM482.133 264.533c-8.533-8.491-12.8-17.024-12.8-29.824 0-12.843 4.267-21.333 12.8-29.867 8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.533 8.533 12.8 21.333 12.8 29.867 0 8.491-4.267 21.333-12.8 29.824-17.067 17.067-42.667 17.067-59.733 0z" />
+<glyph unicode="&#xe904;" glyph-name="alert_o" d="M920.811 115.213c-8.533-8.533-21.333-12.8-29.867-12.8h-725.333c-8.533 0-12.8 0-21.333 4.267-21.333 12.8-25.6 38.4-17.067 59.733l362.667 601.6c4.267 4.224 8.533 12.8 12.8 12.8 21.333 12.757 46.933 4.267 59.733-12.8l362.709-601.6c4.224-4.267 4.224-12.843 4.224-21.333 4.267-12.843-4.224-21.333-8.533-29.867zM997.611 209.079l-358.4 605.824c-17.067 29.909-46.933 51.243-81.067 59.776s-68.267 4.224-98.133-12.8c-17.067-8.533-34.133-25.643-42.667-42.667l-358.4-610.133c-34.133-59.733-12.8-140.843 46.933-174.933 17.067-12.8 38.4-17.067 59.733-17.067h725.333c34.176 0 68.267 12.8 89.6 38.4 25.6 25.6 38.4 55.424 38.4 89.6-4.267 21.333-8.491 46.933-21.333 64zM512 618.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.643 17.067-42.667 42.667-42.667s42.667 17.024 42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667zM482.133 264.533c-8.533-8.491-12.8-17.024-12.8-29.824 0-12.843 4.267-21.333 12.8-29.867 8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.533 8.533 12.8 21.333 12.8 29.867 0 8.491-4.267 21.333-12.8 29.824-17.067 17.067-42.667 17.067-59.733 0z" />
+<glyph unicode="&#xe905;" glyph-name="API" d="M853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 874.667h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128zM798.165 478.165l-170.667 170.667c-16.683 16.683-43.648 16.683-60.331 0s-16.683-43.648 0-60.331l140.501-140.501-140.501-140.501c-16.683-16.683-16.683-43.648 0-60.331 8.32-8.32 19.243-12.501 30.165-12.501s21.845 4.181 30.165 12.501l170.667 170.667c16.683 16.683 16.683 43.648 0 60.331zM225.835 478.165l170.667 170.667c16.683 16.683 43.648 16.683 60.331 0s16.683-43.648 0-60.331l-140.501-140.501 140.501-140.501c16.683-16.683 16.683-43.648 0-60.331-8.32-8.32-19.243-12.501-30.165-12.501s-21.845 4.181-30.165 12.501l-170.667 170.667c-16.683 16.683-16.683 43.648 0 60.331z" />
+<glyph unicode="&#xe906;" glyph-name="arrow-left" d="M183.467 477.899c-4.267-4.309-8.533-8.533-8.533-12.8-4.267-4.267-4.267-12.843-4.267-17.067 0-4.267 0-12.8 4.267-17.109 4.267-4.224 4.267-8.491 8.533-12.757l170.667-170.667c17.067-17.067 42.667-17.067 59.733 0s17.067 42.667 0 59.733l-98.091 98.133h494.891c25.6 0 42.667 17.067 42.667 42.667 0 25.557-17.067 42.667-42.667 42.667h-494.891l98.091 98.133c17.067 17.067 17.067 42.667 0 59.733-17.067 17.024-42.667 17.024-59.733 0l-170.667-170.667z" />
+<glyph unicode="&#xe907;" glyph-name="arrow-right" d="M840.533 418.101c4.267 4.309 8.533 8.533 8.533 12.8 4.267 4.267 4.267 12.843 4.267 17.067 0 4.267 0 12.8-4.267 17.109-4.267 4.224-4.267 8.491-8.533 12.757l-170.667 170.667c-17.067 17.067-42.667 17.067-59.733 0s-17.067-42.667 0-59.733l98.091-98.133h-494.891c-25.6 0-42.667-17.067-42.667-42.667 0-25.557 17.067-42.667 42.667-42.667h494.891l-98.091-98.133c-17.067-17.067-17.067-42.667 0-59.733 17.067-17.024 42.667-17.024 59.733 0l170.667 170.667z" />
+<glyph unicode="&#xe908;" glyph-name="arrow_f" d="M938.667 448c0-235.641-191.025-426.667-426.667-426.667s-426.667 191.025-426.667 426.667c0 235.641 191.025 426.667 426.667 426.667s426.667-191.025 426.667-426.667zM458.762 311.637c-10.286-10.637-10.286-27.88 0-38.516s26.962-10.637 37.248 0l150.497 155.621c10.286 10.637 10.286 27.88 0 38.516l-150.497 155.621c-10.286 10.637-26.962 10.637-37.248 0s-10.286-27.88 0-38.516l131.948-136.441-131.948-136.285z" />
+<glyph unicode="&#xe909;" glyph-name="arrow_o" d="M458.762 311.637c-10.286-10.637-10.286-27.88 0-38.516s26.962-10.637 37.248 0l150.497 155.621c10.286 10.637 10.286 27.88 0 38.516l-150.497 155.621c-10.286 10.637-26.962 10.637-37.248 0s-10.286-27.88 0-38.516l131.948-136.441-131.948-136.285zM512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM42.667 448c0-260.267 209.067-469.333 469.333-469.333s469.333 209.067 469.333 469.333c0 260.267-209.067 469.333-469.333 469.333s-469.333-209.067-469.333-469.333z" />
+<glyph unicode="&#xe90a;" glyph-name="attach" d="M924.768 478.208c-16.768 15.872-41.941 15.872-58.709 0l-386.005-364.757c-83.925-79.275-213.973-79.275-297.856 0-83.925 79.317-83.925 202.197 0 281.515l386.005 364.757c46.123 43.563 130.005 43.563 176.171 0 50.347-47.616 50.347-122.923 0-166.571l-385.963-364.715c-16.811-15.872-41.984-15.872-58.752 0-4.181 3.968-8.405 11.904-8.405 23.765 0 11.904 4.224 19.84 12.587 27.776l356.651 336.981c16.768 15.872 16.768 39.68 0 55.509-16.811 15.872-41.984 15.872-58.752 0l-356.651-336.981c-25.173-19.84-37.717-51.541-37.717-83.285 0-31.701 12.544-63.403 37.717-83.243 50.389-47.573 130.091-47.573 176.213 0l386.005 364.757c83.925 79.275 83.925 202.197 0 281.472-37.76 35.669-92.288 59.477-146.816 59.477-54.571 0-109.099-19.84-146.859-59.477l-386.005-364.715c-113.28-107.051-113.28-285.483 0-392.533 58.752-55.467 134.272-79.275 209.792-79.275s150.997 27.733 209.749 79.275l386.005 364.757c8.405 11.904 8.405 39.637-8.405 55.509z" />
+<glyph unicode="&#xe90b;" glyph-name="beadcrumbs" d="M731.429 448l-365.714-365.714v731.429z" />
+<glyph unicode="&#xe90c;" glyph-name="bedge" d="M273.067 789.333h477.867c150.811 0 273.067-122.256 273.067-273.067v-136.533c0-150.811-122.256-273.067-273.067-273.067h-477.867c-150.811 0-273.067 122.256-273.067 273.067v136.533c0 150.811 122.256 273.067 273.067 273.067z" />
+<glyph unicode="&#xe90d;" glyph-name="browse" d="M279.704 400.593c-36.655 0-66.37 29.715-66.37 66.37s29.715 66.37 66.37 66.37c36.655 0 66.37-29.715 66.37-66.37s-29.715-66.37-66.37-66.37zM744.296 400.593c-36.655 0-66.37 29.715-66.37 66.37s29.715 66.37 66.37 66.37c36.655 0 66.37-29.715 66.37-66.37s-29.715-66.37-66.37-66.37zM512 400.593c-36.655 0-66.37 29.715-66.37 66.37s29.715 66.37 66.37 66.37c36.655 0 66.37-29.715 66.37-66.37s-29.715-66.37-66.37-66.37z" />
+<glyph unicode="&#xe90e;" glyph-name="calendar" d="M810.667 64h-597.333c-25.6 0-42.667 17.067-42.667 42.667v384h682.667v-384c0-25.6-17.067-42.667-42.667-42.667zM213.333 746.667h85.333v-42.667c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v42.667h256v-42.667c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v42.667h85.333c25.6 0 42.667-17.067 42.667-42.667v-128h-682.667v128c0 25.6 17.067 42.667 42.667 42.667zM810.667 832h-85.333v42.667c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-42.667h-256v42.667c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-42.667h-85.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe90f;" glyph-name="camera" d="M938.667 149.333c0-25.6-17.067-42.667-42.667-42.667h-768c-25.6 0-42.667 17.067-42.667 42.667v469.333c0 25.6 17.067 42.667 42.667 42.667h170.667c12.8 0 25.6 8.533 34.133 17.067l72.533 110.933h209.067l72.533-110.933c12.8-8.533 25.6-17.067 38.4-17.067h170.667c25.6 0 42.667-17.067 42.667-42.667v-469.333zM896 746.667h-149.333l-72.533 110.933c-8.533 8.533-21.333 17.067-34.133 17.067h-256c-12.8 0-25.6-8.533-34.133-17.067l-72.533-110.933h-149.333c-72.533 0-128-55.467-128-128v-469.333c0-72.533 55.467-128 128-128h768c72.533 0 128 55.467 128 128v469.333c0 72.533-55.467 128-128 128zM512 234.667c-72.533 0-128 55.467-128 128s55.467 128 128 128c72.533 0 128-55.467 128-128s-55.467-128-128-128zM512 576c-119.467 0-213.333-93.867-213.333-213.333s93.867-213.333 213.333-213.333c119.467 0 213.333 93.867 213.333 213.333s-93.867 213.333-213.333 213.333z" />
+<glyph unicode="&#xe910;" glyph-name="chevron" d="M482.125 290.125c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8l213.333 213.333c17.067 17.067 17.067 42.667 0 59.733s-42.667 17.067-59.733 0l-183.467-183.467-183.467 183.467c-17.067 17.067-42.667 17.067-59.733 0s-17.067-42.667 0-59.733l213.333-213.333z" />
+<glyph unicode="&#xe911;" glyph-name="close" d="M580.25 448l258.475 258.475c19.499 19.499 19.499 48.725 0 68.224s-48.768 19.499-68.267 0l-258.475-258.432-258.432 258.432c-19.499 19.499-48.768 19.499-68.267 0s-19.499-48.725 0-68.224l258.475-258.475-258.475-258.475c-19.499-19.499-19.499-48.725 0-68.224 9.771-9.771 19.499-14.635 34.133-14.635s24.363 4.864 34.133 14.635l258.432 258.432 258.475-258.432c9.771-9.771 24.363-14.635 34.133-14.635 9.728 0 24.363 4.864 34.133 14.635 19.499 19.499 19.499 48.725 0 68.224l-258.475 258.475z" />
+<glyph unicode="&#xe912;" glyph-name="commit" d="M896.086 106.965c-338.304 1.152-340.693 454.101-340.651 473.557v106.88l99.157-97.323c8.32-8.192 19.072-12.245 29.867-12.245 11.136 0 22.187 4.309 30.592 12.843 16.469 16.896 16.213 44.032-0.683 60.544l-171.819 168.576c-0.341 0.299-0.811 0.384-1.152 0.725-3.541 3.285-7.509 6.187-12.203 8.149-0.213 0.085-0.341 0.085-0.512 0.128-0.725 0.299-1.451 0.299-2.133 0.555-4.139 1.408-8.277 2.176-12.501 2.304-0.768 0-1.451 0.256-2.219 0.256-0.171 0-0.341 0.085-0.512 0.085-1.067 0-1.963-0.555-3.029-0.597-2.603-0.299-5.12-0.811-7.68-1.579-8.96-2.347-16.512-7.253-22.144-14.293l-165.803-163.456c-16.811-16.597-17.067-43.691-0.512-60.587 16.555-16.811 43.605-17.024 60.416-0.469l96 94.677v-105.387c0.043-19.243-2.347-472.192-340.651-473.344-23.595-0.085-42.667-19.328-42.581-42.965 0.085-23.595 19.2-42.667 42.752-42.667h0.171c107.051 0.384 196.949 36.608 267.307 107.648 56.832 57.429 93.056 130.347 116.437 200.789 23.424-70.443 59.648-143.36 116.48-200.789 70.315-71.040 160.213-107.264 267.264-107.648h0.171c23.552 0 42.667 19.072 42.752 42.667 0.085 23.637-18.987 42.88-42.581 42.965z" />
+<glyph unicode="&#xe913;" glyph-name="composition" d="M810.667 104.533c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667zM213.333 104.533c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667zM213.333 787.2c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667zM512 488.533c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667zM810.667 275.2c-55.68 0-102.528-35.755-120.149-85.333h-357.035c-12.843 36.224-41.259 64.64-77.483 77.483v135.851h135.851c17.621-49.579 64.469-85.333 120.149-85.333 70.699 0 128 57.301 128 128s-57.301 128-128 128c-55.68 0-102.528-35.755-120.149-85.333h-135.851v135.851c49.579 17.621 85.333 64.469 85.333 120.149 0 70.699-57.301 128-128 128s-128-57.301-128-128c0-55.68 35.755-102.528 85.333-120.149v-357.035c-49.579-17.621-85.333-64.469-85.333-120.149 0-70.699 57.301-128 128-128 55.68 0 102.528 35.755 120.149 85.333h357.035c17.621-49.579 64.469-85.333 120.149-85.333 70.699 0 128 57.301 128 128s-57.301 128-128 128z" />
+<glyph unicode="&#xe914;" glyph-name="deployment_Artifacts" d="M853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 874.667h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128zM298.667 277.333c0 23.552 19.115 42.667 42.667 42.667s42.667-19.115 42.667-42.667c0-23.552-19.115-42.667-42.667-42.667s-42.667 19.115-42.667 42.667zM512 661.333c23.552 0 42.667-19.115 42.667-42.667s-19.115-42.667-42.667-42.667c-23.552 0-42.667 19.115-42.667 42.667s19.115 42.667 42.667 42.667zM725.333 277.333c0-23.552-19.115-42.667-42.667-42.667s-42.667 19.115-42.667 42.667c0 23.552 19.115 42.667 42.667 42.667s42.667-19.115 42.667-42.667zM405.888 387.285l66.176 110.379c12.629-4.224 25.899-6.997 39.936-6.997 6.784 0 13.312 0.981 19.84 2.005l81.152-108.16c-23.339-15.232-41.003-37.845-50.475-64.512h-101.035c-10.112 28.544-29.909 52.181-55.595 67.285zM461.483 234.667h101.035c17.621-49.579 64.469-85.333 120.149-85.333 70.699 0 128 57.301 128 128 0 62.805-45.312 114.773-104.96 125.653l-98.304 131.115c20.053 22.571 32.597 51.968 32.597 84.565 0 70.699-57.301 128-128 128s-128-57.301-128-128c0-25.216 7.552-48.597 20.139-68.395l-88.533-147.541c-58.368-11.904-102.272-63.531-102.272-125.397 0-70.699 57.301-128 128-128 55.68 0 102.528 35.755 120.149 85.333z" />
+<glyph unicode="&#xe915;" glyph-name="download" d="M896 277.333c25.6 0 42.667-17.067 42.667-42.667v-128c0-72.533-55.467-128-128-128h-597.333c-72.533 0-128 55.467-128 128v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v128c0 25.6 17.067 42.667 42.667 42.667zM482.101 247.467l-170.667 170.667c-17.024 17.067-17.024 42.667 0 59.733 17.067 17.067 42.667 17.067 59.733 0l98.133-98.091v494.891c0 25.6 17.109 42.667 42.667 42.667 25.6 0 42.667-17.067 42.667-42.667v-494.891l98.133 98.091c17.067 17.067 42.667 17.067 59.733 0s17.067-42.667 0-59.733l-170.667-170.667c-4.267-4.267-8.533-4.267-12.757-8.533-4.309-4.267-12.843-4.267-17.109-4.267-4.224 0-12.8 0-17.067 4.267-4.267 0-8.491 4.267-12.8 8.533z" />
+<glyph unicode="&#xe916;" glyph-name="duplicate" d="M128 106.667c0-25.6 17.067-42.667 42.667-42.667h384c25.6 0 42.667 17.067 42.667 42.667v384c0 25.6-17.067 42.667-42.667 42.667h-384c-25.6 0-42.667-17.067-42.667-42.667v-384zM170.667 618.667h384c72.533 0 128-55.467 128-128v-384c0-72.533-55.467-128-128-128h-384c-72.533 0-128 55.467-128 128v384c0 72.533 55.467 128 128 128zM810.667 362.667h42.667c25.6 0 42.667 17.067 42.667 42.667v384c0 25.6-17.067 42.667-42.667 42.667h-384c-25.6 0-42.667-17.067-42.667-42.667v-42.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v42.667c0 72.533 55.467 128 128 128h384c72.533 0 128-55.467 128-128v-384c0-72.533-55.467-128-128-128h-42.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z" />
+<glyph unicode="&#xe917;" glyph-name="edit" d="M170.667 388.271v-110.933h110.933l426.667 426.667-110.933 110.933-426.667-426.667zM128 192.004c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 12.8 4.267 21.333 12.8 29.867l469.333 469.333c17.067 17.067 42.667 17.067 59.733 0l170.667-170.667c17.067-17.067 17.067-42.667 0-59.733l-469.333-469.333c-8.533-8.533-17.067-12.8-29.867-12.8h-170.667zM896 64c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768z" />
+<glyph unicode="&#xe918;" glyph-name="expand" d="M934.426 849.067c4.267-4.309 4.267-12.843 4.267-17.067v-256c0-25.6-17.109-42.667-42.667-42.667-25.6 0-42.667 17.067-42.667 42.667v153.557l-226.133-226.133c-8.533-8.533-21.333-12.757-29.867-12.757-8.576 0-21.333 4.224-29.909 12.757-17.024 17.109-17.024 42.667 0 59.776l226.133 226.133h-153.557c-25.6 0-42.667 17.067-42.667 42.667 0 25.557 17.067 42.667 42.667 42.667h256c4.224 0 12.757 0 17.067-4.267 8.491-4.309 17.024-12.843 21.333-21.333zM396.8 392.525c17.067 17.024 42.667 17.024 59.733 0 17.067-17.067 17.067-42.667 0-59.733l-226.091-226.133h153.557c25.6 0 42.667-17.109 42.667-42.667 0-25.6-17.067-42.667-42.667-42.667h-256c-4.224 0-12.8 0-17.067 4.224-8.491 4.309-17.067 12.843-21.333 21.333-4.267 4.309-4.267 12.843-4.267 17.109v256c0 25.557 17.109 42.667 42.667 42.667 25.6 0 42.667-17.109 42.667-42.667v-153.6l226.133 226.133zM913.092 25.566c-4.309-4.267-12.843-4.267-17.067-4.267h-256c-25.6 0-42.667 17.109-42.667 42.667 0 25.6 17.067 42.667 42.667 42.667h153.557l-226.133 226.133c-8.533 8.533-12.757 21.333-12.757 29.867 0 8.576 4.224 21.333 12.757 29.909 17.109 17.024 42.667 17.024 59.776 0l226.133-226.133v153.557c0 25.6 17.067 42.667 42.667 42.667 25.557 0 42.667-17.067 42.667-42.667v-256c0-4.224 0-12.757-4.267-17.067-4.309-8.491-12.843-17.024-21.333-21.333zM456.55 563.191c17.024-17.067 17.024-42.667 0-59.733-17.067-17.067-42.667-17.067-59.733 0l-226.133 226.091v-153.557c0-25.6-17.109-42.667-42.667-42.667-25.6 0-42.667 17.067-42.667 42.667v256c0 4.224 0 12.8 4.224 17.067 4.309 8.491 12.843 17.067 21.333 21.333 4.309 4.267 12.843 4.267 17.109 4.267h256c25.557 0 42.667-17.109 42.667-42.667 0-25.6-17.109-42.667-42.667-42.667h-153.6l226.133-226.133z" />
+<glyph unicode="&#xe919;" glyph-name="fail" d="M580.25 448l258.475 258.475c19.499 19.499 19.499 48.725 0 68.224s-48.768 19.499-68.267 0l-258.475-258.432-258.432 258.432c-19.499 19.499-48.768 19.499-68.267 0s-19.499-48.725 0-68.224l258.475-258.475-258.475-258.475c-19.499-19.499-19.499-48.725 0-68.224 9.771-9.771 19.499-14.635 34.133-14.635s24.363 4.864 34.133 14.635l258.432 258.432 258.475-258.432c9.771-9.771 24.363-14.635 34.133-14.635 9.728 0 24.363 4.864 34.133 14.635 19.499 19.499 19.499 48.725 0 68.224l-258.475 258.475z" />
+<glyph unicode="&#xe91a;" glyph-name="file_managment" d="M853.333 375.462c25.6 0 42.667-17.024 42.667-42.667v-226.133c0-72.533-55.467-128-128-128h-597.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h226.133c25.6 0 42.667-17.067 42.667-42.667 0-25.557-17.067-42.667-42.667-42.667h-226.133c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.557 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.109 42.667 42.667v226.133c0 25.643 17.067 42.667 42.667 42.667zM494.916 320.004h-110.933v110.933l384 384 110.933-110.933-384-384zM968.559 733.871l-170.667 170.667c-17.109 17.067-42.667 17.067-59.776 0l-426.667-426.667c-8.533-8.533-12.8-17.067-12.8-29.867v-170.667c0-25.6 17.109-42.667 42.667-42.667h170.667c12.8 0 21.333 4.267 29.909 12.8l426.667 426.667c17.024 17.067 17.024 42.667 0 59.733z" />
+<glyph unicode="&#xe91b;" glyph-name="filter" d="M563.595 456.533c-4.309-8.533-8.533-17.067-8.533-29.867v-294.443l-85.333 42.667v251.776c0 8.533-4.267 21.333-8.533 25.557l-281.6 337.109h669.867l-285.867-332.8zM977.461 849.067c-8.533 17.067-21.333 25.6-38.4 25.6h-853.333c-17.109 0-29.867-8.533-38.443-25.6-8.491-12.843-4.224-29.867 4.309-42.667l332.8-392.533v-264.533c0-17.109 8.533-29.867 25.557-38.443l170.667-85.333c4.309-4.224 8.576-4.224 17.109-4.224s17.067 0 21.333 4.224c12.8 8.576 21.333 21.333 21.333 38.443v349.867l332.8 392.533c8.533 12.8 12.757 29.824 4.267 42.667z" />
+<glyph unicode="&#xe91c;" glyph-name="filterDown" d="M482.101 162.133c4.309-4.267 8.533-8.533 12.8-8.533 4.267-4.267 12.843-4.267 17.067-4.267 4.267 0 12.8 0 17.109 4.267 4.224 4.267 8.491 4.267 12.757 8.533l170.667 170.667c17.067 17.067 17.067 42.667 0 59.733s-42.667 17.067-59.733 0l-98.133-98.091v494.891c0 25.6-17.067 42.667-42.667 42.667-25.557 0-42.667-17.067-42.667-42.667v-494.891l-98.133 98.091c-17.067 17.067-42.667 17.067-59.733 0-17.024-17.067-17.024-42.667 0-59.733l170.667-170.667z" />
+<glyph unicode="&#xe91d;" glyph-name="filterUp" d="M482.101 819.2c4.309 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.843 4.267 17.067 4.267 4.267 0 12.8 0 17.109-4.267 4.224-4.267 8.491-4.267 12.757-8.533l170.667-170.667c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-98.133 98.091v-494.891c0-25.6-17.067-42.667-42.667-42.667-25.557 0-42.667 17.067-42.667 42.667v494.891l-98.133-98.091c-17.067-17.067-42.667-17.067-59.733 0-17.024 17.067-17.024 42.667 0 59.733l170.667 170.667z" />
+<glyph unicode="&#xe91e;" glyph-name="info_f" d="M512 917.333c260.267 0 469.333-209.067 469.333-469.333 0-260.309-209.067-469.333-469.333-469.333s-469.333 209.024-469.333 469.333c0 260.267 209.067 469.333 469.333 469.333zM512 490.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.643 17.067-42.667 42.667-42.667s42.667 17.024 42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667zM482.125 648.542c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333 12.8-29.867c8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.576 8.533 12.8 17.067 12.8 29.867s-4.224 21.333-12.8 29.867c-17.067 17.024-42.667 17.024-59.733 0z" />
+<glyph unicode="&#xe91f;" glyph-name="info_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333 0-260.309 209.067-469.333 469.333-469.333s469.333 209.024 469.333 469.333c0 260.267-209.067 469.333-469.333 469.333zM512 490.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.643 17.067-42.667 42.667-42.667s42.667 17.024 42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667zM482.125 648.542c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333 12.8-29.867c8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.576 8.533 12.8 17.067 12.8 29.867s-4.224 21.333-12.8 29.867c-17.067 17.024-42.667 17.024-59.733 0z" />
+<glyph unicode="&#xe920;" glyph-name="info_tabs" d="M512 490.667c25.6 0 42.667-17.067 42.667-42.667v-170.667c0-25.643-17.067-42.667-42.667-42.667s-42.667 17.024-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667zM482.133 648.565c17.067 17.024 42.667 17.024 59.733 0 8.576-8.533 12.8-17.067 12.8-29.867s-4.224-21.333-12.8-29.867c-8.533-8.576-17.067-12.8-29.867-12.8s-21.333 4.224-29.867 12.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867zM853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 874.667h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe921;" glyph-name="information_artifacts" d="M512 490.667c25.6 0 42.667-17.067 42.667-42.667v-170.667c0-25.643-17.067-42.667-42.667-42.667s-42.667 17.024-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667zM482.133 648.565c17.067 17.024 42.667 17.024 59.733 0 8.576-8.533 12.8-17.067 12.8-29.867s-4.224-21.333-12.8-29.867c-8.533-8.576-17.067-12.8-29.867-12.8s-21.333 4.224-29.867 12.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867zM853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 874.667h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe922;" glyph-name="inputs" d="M853.333 147.2c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM810.667 872.533h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128 128zM725.333 659.2h-426.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667h426.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667zM725.333 488.533h-426.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667h426.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667z" />
+<glyph unicode="&#xe923;" glyph-name="locked" d="M341.333 661.333c0 93.867 76.8 170.667 170.667 170.667s170.667-76.8 170.667-170.667v-128h-341.333v128zM810.667 533.333h-42.667v128c0 140.8-115.2 256-256 256s-256-115.2-256-256v-128h-42.667c-72.533 0-128-55.467-128-128v-298.667c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v298.667c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe924;" glyph-name="Menu" d="M445.649 699.24c0 36.655 29.715 66.37 66.37 66.37s66.37-29.715 66.37-66.37c0-36.655-29.715-66.37-66.37-66.37s-66.37 29.715-66.37 66.37zM445.649 234.648c0 36.655 29.715 66.37 66.37 66.37s66.37-29.715 66.37-66.37c0-36.655-29.715-66.37-66.37-66.37s-66.37 29.715-66.37 66.37zM445.649 466.944c0 36.655 29.715 66.37 66.37 66.37s66.37-29.715 66.37-66.37c0-36.655-29.715-66.37-66.37-66.37s-66.37 29.715-66.37 66.37z" />
+<glyph unicode="&#xe925;" glyph-name="notifications" d="M234.667 277.333h554.667c-12.8 25.6-21.333 55.467-21.333 85.333v213.333c0 140.8-115.2 256-256 256s-256-115.2-256-256v-213.333c0-29.867-8.533-59.733-21.333-85.333zM938.667 277.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-853.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667c46.933 0 85.333 38.4 85.333 85.333v213.333c0 187.733 153.6 341.333 341.333 341.333s341.333-153.6 341.333-341.333v-213.333c0-46.933 38.4-85.333 85.333-85.333zM644.131 100.648c21.333-12.8 29.867-38.4 8.533-59.733-25.6-42.667-68.267-64-110.933-64-21.333 0-42.667 4.267-64 17.067s-34.133 25.6-46.933 46.933c-8.533 21.333-4.309 46.933 17.024 59.733 21.333 8.533 46.976 4.267 59.776-17.067 4.224-8.533 8.533-12.8 17.067-17.067 21.333-8.533 46.933-4.267 59.733 17.067 12.757 21.333 38.4 29.867 59.733 17.067z" />
+<glyph unicode="&#xe926;" glyph-name="permissions" d="M554.667 362.667h-341.333c-119.467 0-213.333-93.867-213.333-213.333v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c0 72.533 55.467 128 128 128h341.333c72.533 0 128-55.467 128-128v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c0 119.467-93.867 213.333-213.333 213.333zM384 789.333c72.533 0 128-55.467 128-128s-55.467-128-128-128c-72.533 0-128 55.467-128 128s55.467 128 128 128zM384 448c119.467 0 213.333 93.867 213.333 213.333s-93.867 213.333-213.333 213.333c-119.467 0-213.333-93.867-213.333-213.333s93.867-213.333 213.333-213.333zM862.684 361.849c-21.333 4.267-46.976-8.533-51.2-29.867-4.267-21.333 8.533-46.933 29.867-51.2 55.467-12.8 93.867-64 93.867-123.733v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c4.267 98.133-59.733 183.467-157.867 204.8zM693.444 872.034c-21.333 8.533-42.667-4.267-51.2-29.867-4.267-21.333 8.533-46.933 29.867-51.2 68.267-17.067 110.933-85.333 93.867-157.867-12.843-46.933-46.933-81.067-93.867-93.867-21.333-4.267-38.4-29.867-29.867-51.2 4.224-21.333 21.333-34.133 42.667-34.133h8.533c76.8 21.333 136.533 76.8 153.6 153.6 29.867 119.467-38.4 238.933-153.6 264.533z" />
+<glyph unicode="&#xe927;" glyph-name="profile" d="M682.667 362.667h-341.333c-119.467 0-213.333-93.867-213.333-213.333v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c0 72.533 55.467 128 128 128h341.333c72.533 0 128-55.467 128-128v-85.333c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v85.333c0 119.467-93.867 213.333-213.333 213.333zM512 789.333c72.533 0 128-55.467 128-128s-55.467-128-128-128c-72.533 0-128 55.467-128 128s55.467 128 128 128zM512 448c119.467 0 213.333 93.867 213.333 213.333s-93.867 213.333-213.333 213.333c-119.467 0-213.333-93.867-213.333-213.333s93.867-213.333 213.333-213.333z" />
+<glyph unicode="&#xe928;" glyph-name="properties" d="M512 362.658c-46.933 0-85.333 38.4-85.333 85.333 0 46.976 38.4 85.333 85.333 85.333s85.333-38.357 85.333-85.333c0-46.933-38.4-85.333-85.333-85.333zM512 618.658c-93.867 0-170.667-76.8-170.667-170.667s76.8-170.667 170.667-170.667c93.867 0 170.667 76.8 170.667 170.667s-76.8 170.667-170.667 170.667zM814.916 209.075c8.533-8.533 12.843-17.067 12.843-29.867s-4.309-21.333-12.843-29.867c-8.491-8.576-17.024-12.8-29.824-12.8-12.843 0-21.333 4.224-34.176 17.067-34.133 34.133-81.024 42.667-123.691 21.333-42.667-17.067-68.309-59.733-68.309-102.4v-8.533c0-25.6-17.024-42.667-42.667-42.667-25.6 0-42.667 17.067-42.667 42.667v4.267c0 46.933-29.824 85.333-72.491 102.4-12.843 8.533-29.867 8.533-46.976 8.533-29.867 0-59.691-12.8-81.024-34.133-17.109-17.067-38.443-17.067-55.509-4.309l-8.491 17.109h-4.309c-4.224 4.224-4.224 12.8-4.224 17.067 0 12.8 4.224 21.333 17.024 34.133 34.176 34.133 42.667 81.024 21.333 123.691-17.024 42.667-59.691 68.309-102.357 68.309h-8.576c-25.557 0-42.667 17.024-42.667 42.667 0 25.6 17.109 42.667 42.667 42.667h4.267c46.976 0 85.333 29.867 102.4 72.533 17.109 42.667 8.576 89.6-25.557 128-17.109 17.067-17.109 42.667 0 59.733 17.024 17.067 42.667 17.067 64-4.267 29.824-29.867 76.8-38.4 115.157-25.643l12.843 4.309c42.667 17.024 68.224 59.691 68.224 102.357v8.576c0 25.6 17.109 42.667 42.667 42.667 25.6 0 42.667-17.067 42.667-46.933 0-46.976 25.6-85.333 68.267-102.4s89.643-8.576 128 25.6c8.533 8.491 17.067 12.8 29.867 12.8s21.333-4.309 29.867-12.8c17.109-17.067 17.109-42.667-4.224-64-29.867-29.867-38.443-76.843-25.643-115.2l4.309-12.8c17.024-42.667 59.691-68.267 102.357-68.267h8.533c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-46.891-42.667c-46.976 0-85.333-25.6-102.443-68.267-21.333-42.667-8.533-89.643 25.6-128zM866.116 302.942c4.309 8.491 12.8 17.067 29.867 17.067 72.576 0 128 55.424 128 128 0 72.533-55.424 128-128 128h-8.533c-8.533 0-17.024 4.267-21.333 12.757l-4.224 8.576c-4.309 8.533-4.309 21.333 8.533 34.091 46.891 46.976 51.157 115.243 12.8 166.443v12.8l-17.109 8.533c-21.333 21.333-51.2 34.133-85.333 34.133s-68.224-12.8-93.867-38.4c-8.491-8.533-21.333-8.533-29.824-4.267-8.533-4.267-17.109 8.533-17.109 21.333 0 72.533-55.424 128-128 128-72.533 0-128-55.467-128-128v-8.576c0-8.491-4.224-17.024-12.757-21.333l-8.576-4.224c-8.533-4.267-21.333 0-34.091 8.533-51.243 51.2-132.309 51.2-179.243 0-51.2-51.2-51.2-132.309 4.267-183.467 8.533-8.533 8.533-21.333 4.309-34.176-4.309-8.491-17.109-17.024-29.909-17.024-72.533 0-128-55.467-128-128s55.467-128 128-128h8.576c12.757 0 21.333-8.533 25.557-17.067 4.309-8.576 4.309-21.333-8.533-34.133-25.6-25.6-38.357-55.467-38.357-89.6 0-29.867 12.757-59.733 34.091-85.333l4.267-4.267 12.843-12.8c51.157-38.443 119.467-34.133 170.667 12.8 8.491 8.533 21.333 8.533 34.133 4.267 12.757-4.267 17.024-12.843 17.024-29.867 0-72.533 55.509-128 128-128 72.533 0 128 55.467 128 128v8.533c0 12.8 8.533 21.333 17.067 25.6 8.576 4.224 21.333 4.224 34.133-8.533 51.2-51.243 132.309-51.243 179.2 0 51.243 51.2 51.243 132.267-4.224 183.424-4.309 12.843-8.533 25.643-4.309 34.176z" />
+<glyph unicode="&#xe929;" glyph-name="Q_f" d="M560.006 694.979c68.267-25.6 115.2-89.6 119.467-166.4 0-110.933-140.8-162.133-157.867-166.4-4.267-4.267-8.576-4.267-12.8-4.267-17.109 0-34.133 12.8-38.443 29.867-8.491 25.6 4.309 46.933 25.643 55.467 25.6 12.8 98.133 46.933 98.133 89.6 0 38.4-21.333 68.267-55.467 81.067-46.976 17.067-93.867-8.533-110.976-51.2-8.491-21.333-34.091-34.133-55.424-25.6-25.6 4.267-34.133 29.867-29.909 55.467 29.909 85.376 128 132.267 217.643 102.4zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333 0-260.309 209.067-469.333 469.333-469.333s469.333 209.024 469.333 469.333c0 260.267-209.067 469.333-469.333 469.333zM482.133 264.565c17.067 17.024 42.667 17.024 59.733 0 8.576-8.533 12.8-21.333 12.8-29.867s-4.224-21.333-12.8-29.867c-8.533-8.576-17.067-12.8-29.867-12.8s-21.333 4.224-29.867 12.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867z" />
+<glyph unicode="&#xe92a;" glyph-name="Q_o" d="M560.006 694.979c-89.643 29.867-187.733-17.024-217.643-102.4-4.224-25.6 4.309-51.2 29.909-55.467 21.333-8.533 46.933 4.267 55.424 25.6 17.109 42.667 64 68.267 110.976 51.2 34.133-12.8 55.467-42.667 55.467-81.067 0-42.667-72.533-76.8-98.133-89.6-21.333-8.533-34.133-29.867-25.643-55.467 4.309-17.067 21.333-29.867 38.443-29.867 4.224 0 8.533 0 12.8 4.267 17.067 4.267 157.867 55.467 157.867 166.4-4.267 76.8-51.2 140.8-119.467 166.4zM512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333 0-260.309 209.067-469.333 469.333-469.333s469.333 209.024 469.333 469.333c0 260.267-209.067 469.333-469.333 469.333zM482.133 264.565c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333 12.8-29.867c8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8c8.576 8.533 12.8 21.333 12.8 29.867s-4.224 21.333-12.8 29.867c-17.067 17.024-42.667 17.024-59.733 0z" />
+<glyph unicode="&#xe92c;" glyph-name="revert" d="M597.333 422.4l115.2-115.2c17.067-17.067 17.067-42.667 0-59.733-8.533-8.533-21.333-12.8-29.867-12.8s-21.333 4.267-29.867 12.8l-128 128c-8.533 8.533-12.8 17.067-12.8 29.867v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-238.933zM955.895 588.856c81.024-221.867-38.4-465.067-260.309-541.867-46.891-17.067-93.867-25.6-140.757-25.6-174.933 0-341.333 110.933-405.333 285.867-8.576 21.333 4.224 46.933 25.557 55.467s46.976-4.267 55.509-25.6c64-179.2 256-273.067 435.157-209.067 89.643 29.867 157.867 93.867 196.309 174.933 38.357 81.067 42.667 174.933 12.8 260.267-29.909 89.6-93.909 157.867-174.933 196.267-81.067 38.4-174.976 42.667-260.309 12.8-46.891-17.067-93.867-46.933-128-81.067l-119.424-115.2h149.333c25.557 0 34.091-8.533 34.091-34.133s-17.024-42.667-42.667-42.667h-268.757l-4.267 4.267c-4.309 0-4.309 0-8.533 4.267-4.309 0-4.309 4.267-4.309 4.267 0 4.267-4.224 4.267-4.224 8.533v268.8c0 25.6 17.067 42.667 42.667 42.667 25.557 0 42.667-17.067 42.667-42.667v-157.867l128 119.467c42.667 42.667 98.091 76.8 157.867 98.133 106.667 38.4 221.867 34.133 324.224-17.067 102.443-51.2 179.243-136.533 217.643-243.2z" />
+<glyph unicode="&#xe92d;" glyph-name="save" d="M853.333 149.333c0-25.6-17.067-42.667-42.667-42.667h-42.667v298.667c0 25.6-17.067 42.667-42.667 42.667h-426.667c-25.6 0-42.667-17.067-42.667-42.667v-298.667h-42.667c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667h42.667v-170.667c0-25.6 17.067-42.667 42.667-42.667h341.333c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667h-298.667v128h324.267l187.733-187.733v-452.267zM341.333 106.667v256h341.333v-256h-341.333zM925.867 648.533l-213.333 213.333c-8.533 8.533-17.067 12.8-29.867 12.8h-469.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v469.333c0 12.8-4.267 21.333-12.8 29.867z" />
+<glyph unicode="&#xe92e;" glyph-name="search" d="M170.667 512c0 153.6 123.733 277.333 277.333 277.333s277.333-123.733 277.333-277.333c0-76.8-29.867-145.067-81.067-196.267s-119.467-81.067-196.267-81.067c-153.6 0-277.333 123.733-277.333 277.333zM925.867 93.867l-192 192c46.933 59.733 76.8 140.8 76.8 226.133 0 200.533-162.133 362.667-362.667 362.667s-362.667-162.133-362.667-362.667c0-200.533 162.133-362.667 362.667-362.667 85.333 0 162.133 29.867 226.133 76.8l192-192c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8c17.067 17.067 17.067 42.667 0 59.733z" />
+<glyph unicode="&#xe92f;" glyph-name="setting" d="M512 362.658c-46.933 0-85.333 38.4-85.333 85.333 0 46.976 38.4 85.333 85.333 85.333s85.333-38.357 85.333-85.333c0-46.933-38.4-85.333-85.333-85.333zM512 618.658c-93.867 0-170.667-76.8-170.667-170.667s76.8-170.667 170.667-170.667c93.867 0 170.667 76.8 170.667 170.667s-76.8 170.667-170.667 170.667zM814.916 209.075c8.533-8.533 12.843-17.067 12.843-29.867s-4.309-21.333-12.843-29.867c-8.491-8.576-17.024-12.8-29.824-12.8-12.843 0-21.333 4.224-34.176 17.067-34.133 34.133-81.024 42.667-123.691 21.333-42.667-17.067-68.309-59.733-68.309-102.4v-8.533c0-25.6-17.024-42.667-42.667-42.667-25.6 0-42.667 17.067-42.667 42.667v4.267c0 46.933-29.824 85.333-72.491 102.4-12.843 8.533-29.867 8.533-46.976 8.533-29.867 0-59.691-12.8-81.024-34.133-17.109-17.067-38.443-17.067-55.509-4.309l-8.491 17.109h-4.309c-4.224 4.224-4.224 12.8-4.224 17.067 0 12.8 4.224 21.333 17.024 34.133 34.176 34.133 42.667 81.024 21.333 123.691-17.024 42.667-59.691 68.309-102.357 68.309h-8.576c-25.557 0-42.667 17.024-42.667 42.667 0 25.6 17.109 42.667 42.667 42.667h4.267c46.976 0 85.333 29.867 102.4 72.533 17.109 42.667 8.576 89.6-25.557 128-17.109 17.067-17.109 42.667 0 59.733 17.024 17.067 42.667 17.067 64-4.267 29.824-29.867 76.8-38.4 115.157-25.643l12.843 4.309c42.667 17.024 68.224 59.691 68.224 102.357v8.576c0 25.6 17.109 42.667 42.667 42.667 25.6 0 42.667-17.067 42.667-46.933 0-46.976 25.6-85.333 68.267-102.4s89.643-8.576 128 25.6c8.533 8.491 17.067 12.8 29.867 12.8s21.333-4.309 29.867-12.8c17.109-17.067 17.109-42.667-4.224-64-29.867-29.867-38.443-76.843-25.643-115.2l4.309-12.8c17.024-42.667 59.691-68.267 102.357-68.267h8.533c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-46.891-42.667c-46.976 0-85.333-25.6-102.443-68.267-21.333-42.667-8.533-89.643 25.6-128zM866.116 302.942c4.309 8.491 12.8 17.067 29.867 17.067 72.576 0 128 55.424 128 128 0 72.533-55.424 128-128 128h-8.533c-8.533 0-17.024 4.267-21.333 12.757l-4.224 8.576c-4.309 8.533-4.309 21.333 8.533 34.091 46.891 46.976 51.157 115.243 12.8 166.443v12.8l-17.109 8.533c-21.333 21.333-51.2 34.133-85.333 34.133s-68.224-12.8-93.867-38.4c-8.491-8.533-21.333-8.533-29.824-4.267-8.533-4.267-17.109 8.533-17.109 21.333 0 72.533-55.424 128-128 128-72.533 0-128-55.467-128-128v-8.576c0-8.491-4.224-17.024-12.757-21.333l-8.576-4.224c-8.533-4.267-21.333 0-34.091 8.533-51.243 51.2-132.309 51.2-179.243 0-51.2-51.2-51.2-132.309 4.267-183.467 8.533-8.533 8.533-21.333 4.309-34.176-4.309-8.491-17.109-17.024-29.909-17.024-72.533 0-128-55.467-128-128s55.467-128 128-128h8.576c12.757 0 21.333-8.533 25.557-17.067 4.309-8.576 4.309-21.333-8.533-34.133-25.6-25.6-38.357-55.467-38.357-89.6 0-29.867 12.757-59.733 34.091-85.333l4.267-4.267 12.843-12.8c51.157-38.443 119.467-34.133 170.667 12.8 8.491 8.533 21.333 8.533 34.133 4.267 12.757-4.267 17.024-12.843 17.024-29.867 0-72.533 55.509-128 128-128 72.533 0 128 55.467 128 128v8.533c0 12.8 8.533 21.333 17.067 25.6 8.576 4.224 21.333 4.224 34.133-8.533 51.2-51.243 132.309-51.243 179.2 0 51.243 51.2 51.243 132.267-4.224 183.424-4.309 12.843-8.533 25.643-4.309 34.176z" />
+<glyph unicode="&#xe930;" glyph-name="sub" d="M213.333 490.667h597.333c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667h-597.333c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667z" />
+<glyph unicode="&#xe931;" glyph-name="sub_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333zM682.667 490.667h-341.333c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h341.333c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
+<glyph unicode="&#xe932;" glyph-name="success" d="M815.403 732.877l-360.277-515.925-203.861 197.589c-18.987 18.347-47.445 18.347-66.389 0-18.944-18.389-18.944-45.952 0-64.341l237.056-229.76c9.472-9.173 18.944-13.781 33.195-13.781 14.208 0 23.723 4.608 33.152 13.781l393.515 548.139c18.944 18.347 18.944 45.909 0 64.299s-47.403 18.389-66.389 0z" />
+<glyph unicode="&#xe933;" glyph-name="success_f" d="M757.461 590.549l-298.667-341.333c-7.808-8.875-18.901-14.165-30.72-14.549-0.427 0-0.939 0-1.408 0-11.307 0-22.144 4.48-30.165 12.501l-170.667 170.667c-16.683 16.64-16.683 43.648 0 60.331 16.683 16.64 43.648 16.64 60.331 0l138.411-138.411 268.629 306.987c15.531 17.792 42.539 19.541 60.203 4.011 17.749-15.531 19.541-42.453 4.053-60.203zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333z" />
+<glyph unicode="&#xe934;" glyph-name="success_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333zM693.21 646.771l-268.629-307.029-138.411 138.411c-16.683 16.683-43.648 16.683-60.331 0-16.683-16.64-16.683-43.648 0-60.331l170.667-170.667c7.979-8.021 18.859-12.501 30.165-12.501 0.469 0 0.939 0 1.408 0.043 11.819 0.384 22.912 5.675 30.72 14.549l298.667 341.333c15.488 17.749 13.696 44.672-4.053 60.203-17.664 15.531-44.672 13.781-60.203-4.011z" />
+<glyph unicode="&#xe936;" glyph-name="sync" d="M878.933 358.4c21.333-4.267 34.176-29.867 29.867-55.467-21.333-59.733-59.691-115.2-102.357-157.867-81.109-81.067-187.776-123.733-302.976-123.733s-221.867 42.667-294.357 123.733l-123.776 119.467v-157.867c0-25.6-17.067-42.667-42.667-42.667-25.557 0-42.667 17.067-42.667 42.667v268.8c0 4.267 4.267 4.267 4.267 8.533 4.309 0 4.309 4.267 4.309 4.267 0 4.267 4.224 8.533 8.533 8.533 0 4.267 4.224 4.267 4.224 4.267h4.267c0 4.267 4.309 4.267 8.533 4.267h256c25.643 0 42.667-17.067 42.667-42.667s-17.024-42.667-42.667-42.667h-149.333l119.467-110.933c68.309-68.267 153.643-102.4 243.2-102.4 89.643 0 179.2 34.133 238.976 98.133 38.357 34.133 64 81.067 81.024 128 8.533 21.333 34.133 34.133 55.467 25.6zM958.406 831.276c25.6 0 42.667-17.067 42.667-42.667v-260.267c0-4.267 0-8.533-4.267-12.8 0-4.267-4.267-4.267-4.267-8.533-4.267 0-4.267-4.267-4.267-4.267-4.267-4.267-8.533-4.267-12.8-8.533s-12.8-4.267-17.067-4.267h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h149.333l-119.467 115.2c-34.133 38.4-81.067 64-128 81.067-85.333 29.867-179.2 25.6-260.267-12.8-81.067-42.667-145.067-110.933-174.933-196.267-8.533-21.333-34.133-34.133-55.467-25.6-21.333 4.267-34.133 29.867-25.6 51.2 38.4 110.933 115.2 196.267 217.6 243.2 102.4 51.2 217.6 55.467 328.533 21.333 59.733-21.333 115.2-59.733 157.867-102.4l123.733-119.467v157.867c0 25.6 17.067 42.667 42.667 42.667z" />
+<glyph unicode="&#xe937;" glyph-name="trash" d="M768 106.667c0-25.6-17.067-42.667-42.667-42.667h-426.667c-25.6 0-42.667 17.067-42.667 42.667v554.667h512v-554.667zM384 789.333c0 25.6 17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667v-42.667h-256v42.667zM896 746.667h-170.667v42.667c0 72.533-55.467 128-128 128h-170.667c-72.533 0-128-55.467-128-128v-42.667h-170.667c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h42.667v-554.667c0-72.533 55.467-128 128-128h426.667c72.533 0 128 55.467 128 128v554.667h42.667c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667zM426.667 191.996c25.6 0 42.667 17.067 42.667 42.667v256c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-256c0-25.6 17.067-42.667 42.667-42.667zM597.333 191.996c25.6 0 42.667 17.067 42.667 42.667v256c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-256c0-25.6 17.067-42.667 42.667-42.667z" />
+<glyph unicode="&#xe938;" glyph-name="undo" d="M955.733 588.856c-38.4 106.667-115.2 192-217.643 243.2-102.357 51.2-217.557 55.467-324.224 17.067-59.776-21.333-115.2-55.467-157.867-98.133l-128-119.467v157.867c0 25.6-17.109 42.667-42.667 42.667-25.6 0-42.667-17.067-42.667-42.667v-268.8c0-4.267 4.224-4.267 4.224-8.533 0 0 0-4.267 4.309-4.267 4.224-4.267 4.224-4.267 8.533-4.267l4.267-4.267h268.757c25.643 0 42.667 17.067 42.667 42.667s-8.533 34.133-34.091 34.133h-149.333l119.424 115.2c34.133 34.133 81.109 64 128 81.067 85.333 29.867 179.243 25.6 260.309-12.8 81.024-38.4 145.024-106.667 174.933-196.267 29.867-85.333 25.557-179.2-12.8-260.267-38.443-81.067-106.667-145.067-196.309-174.933-179.157-64-371.157 29.867-435.157 209.067-8.533 21.333-34.176 34.133-55.509 25.6s-34.133-34.133-25.557-55.467c64-174.933 230.4-285.867 405.333-285.867 46.891 0 93.867 8.533 140.757 25.6 221.909 76.8 341.333 320 260.309 541.867z" />
+<glyph unicode="&#xe939;" glyph-name="unlocked" d="M853.333 106.671c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667v298.667c0 25.6 17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-298.667zM810.667 533.338h-469.333v128c0 46.933 17.067 89.6 51.2 119.467 29.867 34.133 72.533 51.2 119.467 51.2 81.067 0 149.333-55.467 166.4-136.533 4.267-21.333 29.867-38.4 51.2-34.133s38.4 25.6 34.133 51.2c-25.6 119.467-132.267 204.8-251.733 204.8-68.267 0-132.267-25.6-179.2-76.8-51.2-46.933-76.8-110.933-76.8-179.2v-128h-42.667c-72.533 0-128-55.467-128-128v-298.667c0-72.533 55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v298.667c0 72.533-55.467 128-128 128z" />
+<glyph unicode="&#xe93a;" glyph-name="upload" d="M896 277.333c25.6 0 42.667-17.067 42.667-42.667v-128c0-72.533-55.467-128-128-128h-597.333c-72.533 0-128 55.467-128 128v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v128c0 25.6 17.067 42.667 42.667 42.667zM371.2 675.189c-17.067-17.024-42.667-17.024-59.733 0-17.067 17.067-17.067 42.667 0 59.733l170.667 170.667c4.267 4.267 8.533 4.267 12.757 8.576 12.843 4.224 25.643 4.224 34.176 0 4.267 0 8.491-4.309 12.8-8.576l170.667-170.667c17.024-17.067 17.024-42.667 0-59.733-8.533-8.533-17.067-12.8-29.867-12.8s-21.333 4.267-29.867 12.8l-98.133 98.133v-494.933c0-25.557-17.109-42.667-42.667-42.667-25.6 0-42.667 17.109-42.667 42.667v494.933l-98.133-98.133z" />
+<glyph unicode="&#xe93b;" glyph-name="view" d="M510.933 149.333c-230.4 0-379.733 230.4-422.4 298.667 38.4 68.267 192 298.667 422.4 298.667s379.733-230.4 422.4-298.667c-42.667-68.267-192-298.667-422.4-298.667zM1018.667 465.067c-8.533 17.067-187.733 366.933-507.733 366.933s-499.2-349.867-507.733-366.933c-4.267-12.8-4.267-25.6 0-38.4 8.533-12.8 187.733-362.667 507.733-362.667s499.2 349.867 507.733 366.933c4.267 8.533 4.267 25.6 0 34.133zM512 362.667c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333zM512 618.667c-93.867 0-170.667-76.8-170.667-170.667s76.8-170.667 170.667-170.667c93.867 0 170.667 76.8 170.667 170.667s-76.8 170.667-170.667 170.667z" />
+<glyph unicode="&#xe93c;" glyph-name="X_f" d="M512 917.333c260.267 0 469.333-209.067 469.333-469.333s-209.067-469.333-469.333-469.333c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333zM651.055 605.894c-17.067 17.024-42.667 17.024-59.733 0l-98.133-98.133-98.133 98.133c-17.067 17.024-42.667 17.024-59.733 0-17.067-17.067-17.067-42.667 0-59.733l98.091-98.133-98.091-98.133c-17.067-17.067-17.067-42.667 0-59.733 8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8l98.133 98.091 98.133-98.091c8.533-8.576 21.333-12.8 29.867-12.8s21.333 4.224 29.867 12.8c17.024 17.067 17.024 42.667 0 59.733l-98.133 98.133 98.133 98.133c17.024 17.067 17.024 42.667 0 59.733z" />
+<glyph unicode="&#xe93d;" glyph-name="X_o" d="M512 64c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM512 917.333c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333c260.267 0 469.333 209.067 469.333 469.333s-209.067 469.333-469.333 469.333zM651.055 605.894c-17.067 17.024-42.667 17.024-59.733 0l-98.133-98.133-98.133 98.133c-17.067 17.024-42.667 17.024-59.733 0-17.067-17.067-17.067-42.667 0-59.733l98.091-98.133-98.091-98.133c-17.067-17.067-17.067-42.667 0-59.733 8.533-8.576 17.067-12.8 29.867-12.8s21.333 4.224 29.867 12.8l98.133 98.091 98.133-98.091c8.533-8.576 21.333-12.8 29.867-12.8s21.333 4.224 29.867 12.8c17.024 17.067 17.024 42.667 0 59.733l-98.133 98.133 98.133 98.133c17.024 17.067 17.024 42.667 0 59.733z" />
+</font></defs></svg> \ No newline at end of file
diff --git a/vid-webpack-master/src/style/fonts/icomoon.ttf b/vid-webpack-master/src/style/fonts/icomoon.ttf
new file mode 100644
index 000000000..4d82ec095
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/icomoon.ttf
Binary files differ
diff --git a/vid-webpack-master/src/style/fonts/icomoon.woff b/vid-webpack-master/src/style/fonts/icomoon.woff
new file mode 100644
index 000000000..451aaa8d0
--- /dev/null
+++ b/vid-webpack-master/src/style/fonts/icomoon.woff
Binary files differ
diff --git a/vid-webpack-master/src/styles.scss b/vid-webpack-master/src/styles.scss
new file mode 100644
index 000000000..905c79519
--- /dev/null
+++ b/vid-webpack-master/src/styles.scss
@@ -0,0 +1,171 @@
+/* You can add global styles to this file, and also import other style files */
+// styles in src/style directory are applied to the whole page
+
+@import "app/drawingBoard/drawing-board-tree/drawing-board-tree";
+@import "app/drawingBoard/available-models-tree/available-models-tree.component";
+@import "../node_modules/sdc-ui/css/style.css";
+//body {
+// [ui-view="content"] {
+// height: 100%;
+// }
+//}
+
+@font-face {
+ font-family: OpenSans-Bold;
+ src: url("../src/assets/fonts/OpenSans/OpenSans-Bold.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-BoldItlaic;
+ src: url("./assets/fonts/OpenSans/OpenSans-BoldItalic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-ExtraBold;
+ src: url("./assets/fonts/OpenSans/OpenSans-ExtraBold.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-ExtraBoldItalic;
+ src: url("./assets/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-Italic;
+ src: url("./assets/fonts/OpenSans/OpenSans-Italic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-Light;
+ src: url("./assets/fonts/OpenSans/OpenSans-Light.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-LightItalic;
+ src: url("./assets/fonts/OpenSans/OpenSans-LightItalic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-Regular;
+ src: url("./assets/fonts/OpenSans/OpenSans-Regular.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-Semibold;
+ src: url("./assets/fonts/OpenSans/OpenSans-Semibold.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: OpenSans-SemiboldItalic;
+ src: url("./assets/fonts/OpenSans/OpenSans-SemiboldItalic.ttf") format('truetype');
+}
+
+@font-face {
+ font-family: 'icomoon';
+ src: url('./assets/fonts/icomoon.eot?4cilop');
+ src: url('./assets/fonts/icomoon.eot?4cilop#iefix') format('embedded-opentype'),
+ url('./assets/fonts/icomoon.ttf?4cilop') format('truetype'),
+ url('./assets/fonts/icomoon.woff?4cilop') format('woff'),
+ url('./assets/fonts/icomoon.svg?4cilop#icomoon') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+
+[class^="icon-"], [class*=" icon-"] {
+ /* use !important to prevent issues with browser extensions that change fonts */
+ font-family: 'icomoon', serif !important;
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+html {
+ min-height: 100%;
+ height: 100%;
+ body {
+ height: 100%;
+ vid-app {
+ height: 100%;
+ display: flex !important;
+ flex-direction: column;
+ main {
+ &[_ngcontent-c0] {
+ font-family: OpenSans-Regular, serif;
+ }
+
+ display: flex !important;
+ flex-direction: column;
+ flex: 1;
+
+ }
+ }
+ }
+}
+a {
+ color: #03A9F4;
+}
+
+tooltip-content {
+ .tooltip.left .tooltip-arrow {
+ border-left-color: #171f2a;
+ }
+ .tooltip.bottom .tooltip-arrow {
+ border-bottom-color: #171f2a;
+ }
+ .tooltip-inner {
+ background-color: #171f2a;
+ text-align: left;
+ }
+}
+
+service-planning {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ border: 1px solid #d2d2d2;
+}
+
+.required:after {
+ content: " * ";
+ color: #cf2a2a;
+ margin-left: 3px;
+}
+
+
+.error-style {
+ border: solid 1px #cf2a2a !important;
+ color: #cf2a2a !important;
+ outline: none !important;
+}
+
+select option:disabled {
+ color: #959595;
+ cursor: default;
+}
+
+select option:disabled {
+ color: #959595 !important;
+ cursor: default;
+}
+
+select option {
+ color: black;
+}
+
+tooltip-content div {
+ word-wrap: break-word !important;
+}
+
+body {
+ -webkit-touch-callout: default !important;
+ -webkit-user-select: auto !important;
+ -moz-user-select: element !important;
+ -ms-user-select: element !important;
+ user-select: element !important;}
diff --git a/vid-webpack-master/src/test.ts b/vid-webpack-master/src/test.ts
new file mode 100644
index 000000000..16317897b
--- /dev/null
+++ b/vid-webpack-master/src/test.ts
@@ -0,0 +1,20 @@
+// This file is required by karma.conf.js and loads recursively all the .spec and framework files
+
+import 'zone.js/dist/zone-testing';
+import { getTestBed } from '@angular/core/testing';
+import {
+ BrowserDynamicTestingModule,
+ platformBrowserDynamicTesting
+} from '@angular/platform-browser-dynamic/testing';
+
+declare const require: any;
+
+// First, initialize the Angular testing environment.
+getTestBed().initTestEnvironment(
+ BrowserDynamicTestingModule,
+ platformBrowserDynamicTesting()
+);
+// Then we find all the tests.
+const context = require.context('./', true, /\.spec\.ts$/);
+// And load the modules.
+context.keys().map(context);
diff --git a/vid-webpack-master/src/tsconfig.app.json b/vid-webpack-master/src/tsconfig.app.json
new file mode 100644
index 000000000..5e2507db5
--- /dev/null
+++ b/vid-webpack-master/src/tsconfig.app.json
@@ -0,0 +1,13 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../out-tsc/app",
+ "module": "es2015",
+ "baseUrl": "",
+ "types": []
+ },
+ "exclude": [
+ "test.ts",
+ "**/*.spec.ts"
+ ]
+}
diff --git a/vid-webpack-master/src/tsconfig.spec.json b/vid-webpack-master/src/tsconfig.spec.json
new file mode 100644
index 000000000..ac22a298a
--- /dev/null
+++ b/vid-webpack-master/src/tsconfig.spec.json
@@ -0,0 +1,19 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../out-tsc/spec",
+ "baseUrl": "./",
+ "module": "commonjs",
+ "types": [
+ "jasmine",
+ "node"
+ ]
+ },
+ "files": [
+ "test.ts"
+ ],
+ "include": [
+ "**/*.spec.ts",
+ "**/*.d.ts"
+ ]
+}
diff --git a/vid-webpack-master/src/vendor.ts b/vid-webpack-master/src/vendor.ts
new file mode 100644
index 000000000..5abcda4bc
--- /dev/null
+++ b/vid-webpack-master/src/vendor.ts
@@ -0,0 +1,16 @@
+// Angular 2
+import '@angular/platform-browser';
+import '@angular/platform-browser-dynamic';
+import '@angular/core';
+import '@angular/common';
+import '@angular/http';
+import '@angular/router';
+import 'angular2-datatable';
+import 'rxjs';
+import '@angularclass/hmr';
+import 'ng2-bootstrap-modal';
+import 'redux';
+import 'ng2-redux';
+
+// Other vendors for example jQuery, Lodash or Bootstrap
+// You can import js, ts, css, sass, ...
diff --git a/vid-webpack-master/tsconfig.json b/vid-webpack-master/tsconfig.json
new file mode 100644
index 000000000..a6c016bf3
--- /dev/null
+++ b/vid-webpack-master/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "outDir": "./dist/out-tsc",
+ "sourceMap": true,
+ "declaration": false,
+ "moduleResolution": "node",
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true,
+ "target": "es5",
+ "typeRoots": [
+ "node_modules/@types"
+ ],
+ "lib": [
+ "es2017",
+ "dom"
+ ]
+ }
+}
diff --git a/vid-webpack-master/tslint.json b/vid-webpack-master/tslint.json
new file mode 100644
index 000000000..858759ad9
--- /dev/null
+++ b/vid-webpack-master/tslint.json
@@ -0,0 +1,117 @@
+{
+ "rulesDirectory": [
+ "node_modules/codelyzer"
+ ],
+ "rules": {
+// "class-name": true,
+// "comment-format": [
+// true,
+// "check-space"
+// ],
+// "curly": true,
+// "eofline": true,
+// "forin": true,
+// "indent": [
+// true,
+// "spaces"
+// ],
+// "label-position": true,
+// "max-line-length": [
+// true,
+// 140
+// ],
+// "member-access": false,
+// "member-ordering": [
+// true,
+// "static-before-instance",
+// "variables-before-functions"
+// ],
+// "no-arg": true,
+// "no-bitwise": true,
+// "no-console": [
+// true,
+// "debug",
+// "info",
+// "time",
+// "timeEnd",
+// "trace"
+// ],
+// "no-construct": true,
+// "no-debugger": true,
+// "no-duplicate-variable": true,
+// "no-empty": false,
+// "no-eval": true,
+// "no-inferrable-types": true,
+// "no-shadowed-variable": true,
+// "no-string-literal": false,
+// "no-switch-case-fall-through": true,
+// "no-trailing-whitespace": true,
+// "no-unused-expression": true,
+// "no-use-before-declare": true,
+// "no-var-keyword": true,
+// "object-literal-sort-keys": false,
+// "one-line": [
+// true,
+// "check-open-brace",
+// "check-catch",
+// "check-else",
+// "check-whitespace"
+// ],
+// "quotemark": [
+// true,
+// "single"
+// ],
+// "radix": true,
+// "semicolon": [
+// "always"
+// ],
+// "triple-equals": [
+// true,
+// "allow-null-check"
+// ],
+// "typedef-whitespace": [
+// true,
+// {
+// "call-signature": "nospace",
+// "index-signature": "nospace",
+// "parameter": "nospace",
+// "property-declaration": "nospace",
+// "variable-declaration": "nospace"
+// }
+// ],
+// "variable-name": false,
+//
+// "directive-selector": [
+// true,
+// "attribute",
+// "",
+// "camelCase"
+// ],
+// "component-selector": [
+// true,
+// "element",
+// "",
+// "kebab-case"
+// ],
+// "use-input-property-decorator": true,
+// "use-output-property-decorator": true,
+// "use-host-property-decorator": true,
+// "no-input-rename": true,
+// "no-output-rename": true,
+// "use-life-cycle-interface": true,
+// "use-pipe-transform-interface": true,
+// "component-class-suffix": true,
+// "directive-class-suffix": true,
+// "pipe-naming": [
+// true,
+// "camelCase",
+// ""
+// ],
+// "no-attribute-parameter-decorator": true,
+// "no-forward-ref": true,
+// "import-destructuring-spacing": true,
+// "no-access-missing-member": true,
+// "templates-use-public": true,
+// "invoke-injectable": true
+ }
+}
diff --git a/vid-webpack-master/typedoc.json b/vid-webpack-master/typedoc.json
new file mode 100644
index 000000000..1a9f28275
--- /dev/null
+++ b/vid-webpack-master/typedoc.json
@@ -0,0 +1,15 @@
+{
+ "mode": "modules",
+ "out": "doc",
+ "theme": "default",
+ "ignoreCompilerErrors": "true",
+ "experimentalDecorators": "true",
+ "emitDecoratorMetadata": "true",
+ "target": "ES5",
+ "moduleResolution": "node",
+ "preserveConstEnums": "true",
+ "stripInternal": "true",
+ "suppressExcessPropertyErrors": "true",
+ "suppressImplicitAnyIndexErrors": "true",
+ "module": "commonjs"
+} \ No newline at end of file