You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2018/11/18 15:40:44 UTC
[1/3] directory-fortress-enmasse git commit: first drop of new
Fortress UI
Repository: directory-fortress-enmasse
Updated Branches:
refs/heads/FC-247 [created] 5aae8a26f
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/package.json
----------------------------------------------------------------------
diff --git a/embrasure/package.json b/embrasure/package.json
new file mode 100644
index 0000000..540874e
--- /dev/null
+++ b/embrasure/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "embrasure",
+ "version": "0.1.0",
+ "description": "Fortress Dashboard",
+ "author": "Fortress Dev <de...@directory.apache.org>",
+ "private": true,
+ "scripts": {
+ "serve": "vue-cli-service serve",
+ "build": "vue-cli-service build",
+ "lint": "vue-cli-service lint"
+ },
+ "dependencies": {
+ "axios": "^0.18.0",
+ "element-ui": "^2.4.8",
+ "rfc6902": "^3.0.1",
+ "vue": "^2.5.17",
+ "vue-data-tables": "^3.4.4",
+ "vue-router": "^3.0.1",
+ "vue-split-pane": "0.0.8"
+ },
+ "devDependencies": {
+ "@vue/cli-plugin-babel": "^3.0.5",
+ "@vue/cli-plugin-eslint": "^3.0.5",
+ "@vue/cli-service": "^3.0.5",
+ "vue-template-compiler": "^2.5.17"
+ },
+ "eslintConfig": {
+ "root": true,
+ "env": {
+ "node": true
+ },
+ "extends": [
+ "plugin:vue/essential",
+ "eslint:recommended"
+ ],
+ "parserOptions": {
+ "parser": "babel-eslint"
+ }
+ },
+ "postcss": {
+ "plugins": {
+ "autoprefixer": {}
+ }
+ },
+ "browserslist": [
+ "> 1%",
+ "last 2 versions",
+ "not ie <= 8"
+ ]
+}
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/public/embrasure-favicon.png
----------------------------------------------------------------------
diff --git a/embrasure/public/embrasure-favicon.png b/embrasure/public/embrasure-favicon.png
new file mode 100644
index 0000000..3dcf65f
Binary files /dev/null and b/embrasure/public/embrasure-favicon.png differ
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/public/index.html
----------------------------------------------------------------------
diff --git a/embrasure/public/index.html b/embrasure/public/index.html
new file mode 100644
index 0000000..86f9174
--- /dev/null
+++ b/embrasure/public/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
+ <link rel="icon" href="<%= BASE_URL %>embrasure-favicon.png">
+ <title>Fortress Administrator</title>
+ </head>
+ <body>
+ <noscript>
+ <strong>Please enable Javascript to continue</strong>
+ </noscript>
+ <div id="app"></div>
+ <!-- built files will be auto injected -->
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/App.vue
----------------------------------------------------------------------
diff --git a/embrasure/src/App.vue b/embrasure/src/App.vue
new file mode 100644
index 0000000..e27ff98
--- /dev/null
+++ b/embrasure/src/App.vue
@@ -0,0 +1,92 @@
+<template>
+ <div id="app">
+ <div>
+ <el-container style="border: 1px solid #eee">
+ <el-header style="text-align: right; font-size: 12px; padding: 0px;">
+ <el-menu router :default-active="activeIndex" class="el-menu-demo" mode="horizontal" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b">
+ <el-menu-item index="/" >Users</el-menu-item>
+ <el-menu-item index="/groups">Groups</el-menu-item>
+ <el-submenu index="rbac">
+ <template slot="title">RBAC</template>
+ <el-menu-item index="/roles">Roles</el-menu-item>
+ <el-menu-item index="/perms">Perms</el-menu-item>
+ <el-menu-item index="/ssds">SSDs</el-menu-item>
+ <el-menu-item index="/dsds">DSDs</el-menu-item>
+ </el-submenu>
+ <el-submenu index="arbac">
+ <template slot="title">ARBAC</template>
+ <el-menu-item index="/policies">Policies</el-menu-item>
+ </el-submenu>
+ <el-menu-item index="/pobjs">PObjs</el-menu-item>
+ <el-menu-item index="/ousers">OUsers</el-menu-item>
+ <el-menu-item index="/ouprms">OUPrms</el-menu-item>
+ <el-menu-item index="/admrles">ADMRLEs</el-menu-item>
+ <el-menu-item index="/admobjs">ADMObjs</el-menu-item>
+ <el-menu-item index="/admperms">ADMPerms</el-menu-item>
+ <el-menu-item index="/logout">Logout</el-menu-item>
+ </el-menu>
+ </el-header>
+ </el-container>
+ </div>
+ <div>
+ <router-view/>
+ </div>
+ </div>
+</template>
+
+<script>
+import axios from "axios"
+
+export default {
+ name: 'app',
+ data() {
+ return {
+ activeIndex: '/'
+ }
+ }
+}
+</script>
+
+<style>
+#app {
+ font-family: 'Avenir', Helvetica, Arial, sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-align: center;
+ color: #2200cc;
+}
+.split-pane {
+ display: flex;
+ flex-direction: row;
+ height: 80%;
+}
+
+.split-pane-item,
+.split-pane-gutter {
+ height: 80%;
+}
+
+.split-pane-gutter {
+ background: #000;
+ opacity: 0.2;
+ z-index: 1;
+ box-sizing: border-box;
+ background-clip: padding-box;
+ width: 11px;
+ margin: 0 -5px;
+ border-left: 5px solid rgba(255, 255, 255, 0);
+ border-right: 5px solid rgba(255, 255, 255, 0);
+ cursor: col-resize;
+}
+
+.split-pane-gutter:hover,
+.split-pane-gutter:focus {
+ border-left: 5px solid rgba(0, 0, 0, 0.5);
+ border-right: 5px solid rgba(0, 0, 0, 0.5);
+ transition: all 2s ease;
+}
+
+.is-dragging {
+ cursor: col-resize;
+}
+</style>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/assets/nophoto.jpg
----------------------------------------------------------------------
diff --git a/embrasure/src/assets/nophoto.jpg b/embrasure/src/assets/nophoto.jpg
new file mode 100644
index 0000000..b4e10b0
Binary files /dev/null and b/embrasure/src/assets/nophoto.jpg differ
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/components/ContactInformation.vue
----------------------------------------------------------------------
diff --git a/embrasure/src/components/ContactInformation.vue b/embrasure/src/components/ContactInformation.vue
new file mode 100644
index 0000000..e7e9cd1
--- /dev/null
+++ b/embrasure/src/components/ContactInformation.vue
@@ -0,0 +1,94 @@
+<template :entity="entity">
+ <div>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Emails:">
+ <List :holder.sync="entity" fieldName="emails"/>
+ </el-form-item>
+ <el-form-item label="Phones:">
+ <List :holder.sync="entity" fieldName="phones"/>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Mobiles:">
+ <List :holder.sync="entity" fieldName="mobiles"/>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="City:">
+ <el-input label="City" placeholder="" v-model="entity.address.city" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="State:">
+ <el-input label="State" placeholder="" v-model="entity.address.state" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Country:">
+ <el-input label="Country" placeholder="" v-model="entity.address.country" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="Postal Code:">
+ <el-input label="Postal Code" placeholder="" v-model="entity.address.postalCode" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Post Office Box:">
+ <el-input label="Post Office Box" placeholder="" v-model="entity.address.postOfficeBox" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="Building:">
+ <el-input label="Building" placeholder="" v-model="entity.address.building" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Department Number:">
+ <el-input label="Department Number" placeholder="" v-model="entity.address.departmentNumber" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="Room Number:">
+ <el-input label="Room Number" placeholder="" v-model="entity.address.roomNumber" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Addresses:">
+ <List :holder.sync="entity.address" fieldName="addresses"/>
+ </el-form-item>
+ </el-row>
+ </div>
+</template>
+
+<script>
+/* eslint-disable */
+import List from './List.vue'
+
+export default {
+ name: 'ContactInformation',
+props: {
+ entity: Object,
+},
+data() {
+ return {
+ }
+},
+created() {
+let address = {
+ addresses: null,
+ city: null,
+ state: null,
+ country: null,
+ postalCode: null,
+ postOfficeBox: null,
+ building: null,
+ departmentNumber: null,
+ roomNumber: null
+ }
+ if(this.entity.address == undefined || this.entity.address == null) {
+ this.$set(this.entity, 'address', address)
+ }
+},
+computed: {
+
+},
+methods: {
+},
+components: {
+ List
+}
+};
+</script>
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/components/List.vue
----------------------------------------------------------------------
diff --git a/embrasure/src/components/List.vue b/embrasure/src/components/List.vue
new file mode 100644
index 0000000..27dd45d
--- /dev/null
+++ b/embrasure/src/components/List.vue
@@ -0,0 +1,77 @@
+<template :holder="holder" :fieldName="fieldName">
+ <div style="min-width: 10px; min-height: 10px;">
+ <table>
+ <tr style="line-height: 25px;"
+ v-for="(n, index) in items"
+ :key="index"
+ :label="n"
+ :value="index">
+ <td>
+ <span class="option_span_item">{{index+1}}.</span>
+ </td>
+ <td>
+ <input type="text" :value="n" :ref="fieldName+index" @input="updateItem(index)"/><i @click="deleteItem(index)" style="color: red; padding-left: 1px;" class="el-icon-remove"></i>
+ </td>
+ </tr>
+ </table>
+ <div style="padding: 1px;"/>
+ <el-button type="success" round size="mini" @click="addItem">+</el-button>
+ </div>
+</template>
+
+<script>
+/* eslint-disable */
+export default {
+ name: 'List',
+props: {
+ holder: Object,
+ fieldName: String
+},
+data() {
+ return {
+ }
+},
+created() {
+
+},
+computed: {
+ items: {
+ get() {
+ let arr = this.holder[this.fieldName]
+ if(arr == null) {
+ arr = []
+ }
+
+ return arr
+ },
+ set(newVal) {
+ // ignore
+ }
+ }
+},
+methods: {
+ addItem() {
+ let arr = this.holder[this.fieldName]
+ if(arr == null) {
+ this.$set(this.holder, this.fieldName, [])
+ arr = this.holder[this.fieldName]
+ }
+ arr.push('')
+ },
+ deleteItem(index) {
+ let arr = this.holder[this.fieldName]
+ if(arr != null) {
+ arr.splice(index, 1)
+ }
+ },
+ updateItem(index) {
+ let inputRef = this.fieldName + index
+ let newVal = this.$refs[inputRef][0].value
+ let arr = this.holder[this.fieldName]
+ if(arr != null) {
+ arr[index] = newVal
+ }
+ }
+}
+};
+</script>
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/components/RoleAssignment.vue
----------------------------------------------------------------------
diff --git a/embrasure/src/components/RoleAssignment.vue b/embrasure/src/components/RoleAssignment.vue
new file mode 100644
index 0000000..c728506
--- /dev/null
+++ b/embrasure/src/components/RoleAssignment.vue
@@ -0,0 +1,196 @@
+<template :holder="holder" :fieldName="fieldName" :isAdminRole="isAdminRole">
+<div>
+ <div style="float: left; display: inline-block; width:200px; padding-right: 20px;">
+ <select v-model="selectedResIndex" :size="5" style="width: 100%; min-height: 175px;" @change="selectCurRole">
+ <option class="el-select-dropdown__item"
+ v-for="(r, index) in roles"
+ :key="r.modId"
+ :label="r.name"
+ :value="index" :title="r.name">
+ <span class="option_span_item">{{r.name}}</span>
+ </option>
+ </select>
+ <div style="padding: 1px;"/>
+ <el-button type="success" round size="mini" @click="openRoleSearch">+</el-button>
+ <el-button type="warning" round size="mini" @click="deleteRole">-</el-button>
+ </div>
+ <TemporalConstraints v-if="curRole != null" :tcHolder="curRole"/>
+ <el-dialog title="Select Role" :visible.sync="roleDialogVisible" width="30%" center modal @open="setFocusRoleSelector">
+ <el-select ref="roleSelector" v-model="selectedRoles" multiple filterable remote reserve-keyword placeholder="Type first three letters of role" :remote-method="searchRoles" :loading="loading">
+ <el-option
+ v-for="(r, index) in foundRoles"
+ :key="r.modId"
+ :label="r.name"
+ :value="index" :title="r.name">
+ </el-option>
+ </el-select>
+ <el-button type="success" round size="mini" @click="addSelectedRoles">Ok</el-button>
+ </el-dialog>
+</div>
+</template>
+
+<script>
+/* eslint-disable */
+import TemporalConstraints from './TemporalConstraints.vue'
+import axios from "axios"
+import * as ft from "../lib/fortress"
+
+export default {
+ name: 'RoleAssignment',
+props: {
+ holder: Object,
+ fieldName: String,
+ isAdminRole: Boolean
+},
+data() {
+ return {
+ selectedResIndex: 0,
+ curRole: null,
+ selectedRoles: [],
+ roleDialogVisible: false,
+ foundRoles: [],
+ loading: false
+ }
+},
+beforeUpdate() {
+ this.selectCurRole()
+},
+beforeDestroy() {
+ console.log('beforeDestroy')
+},
+computed: {
+ roles: {
+ get() {
+ this.selectedResIndex = 0
+ console.log('computing roles get()')
+ let existing = this.holder[this.fieldName]
+ if(existing == null) {
+ existing = []
+ }
+
+ return existing
+ },
+ set(newVal) {
+ console.log('setting new values')
+ // ignore
+ }
+ }
+},
+methods: {
+ selectCurRole() {
+ let existing = this.holder[this.fieldName]
+ if(existing != null && existing.length > 0) {
+ console.log('updating cur role ' + this.selectedResIndex )
+ this.curRole = existing[this.selectedResIndex]
+ } else {
+ console.log('setting cur role to NULL')
+ this.curRole = null
+ }
+ },
+ openRoleSearch() {
+ this.selectedRoles = []
+ this.roleDialogVisible = true
+ },
+ deleteRole() {
+ let existing = this.holder[this.fieldName]
+ if(existing != null) {
+ existing.splice(this.selectedResIndex, 1)
+ }
+ },
+ updateItem(index) {
+ let inputRef = this.fieldName + index
+ let newVal = this.$refs[inputRef][0].value
+ let existing = this.holder[this.fieldName]
+ if(existing != null) {
+ existing[index] = newVal
+ }
+ },
+ roleDialogClose(dropdownOpened) {
+ if(!dropdownOpened) {
+ this.roleDialogVisible = false
+ }
+ },
+ setFocusRoleSelector() {
+ this.$nextTick(function(){
+ this.$refs.roleSelector.focus()
+ })
+ },
+ addSelectedRoles() {
+ this.roleDialogVisible = false
+ console.log(this.selectedRoles)
+ let selected = this.selectedRoles
+ let existing = this.holder[this.fieldName]
+ if(existing == null) {
+ this.$set(this.holder, this.fieldName, [])
+ existing = this.holder[this.fieldName]
+ }
+ for(let i=0; i < selected.length; i++) {
+ let sr = this.foundRoles[selected[i]]
+ let add = true
+ for(let j=0; j < existing.length; j++) {
+ let er = existing[j]
+ if(er.modId == sr.modId) {
+ add = false
+ break
+ }
+ }
+ if(add) {
+ let ur = this.convertRoleToUserRole(sr)
+ console.log('adding role')
+ existing.push(ur)
+ }
+ }
+ },
+ convertRoleToUserRole(role) {
+ let userRole = {
+ fqcn: 'org.apache.directory.fortress.core.model.UserRole'
+ }
+ if(this.isAdminRole) {
+ userRole.fqcn = 'org.apache.directory.fortress.core.model.UserAdminRole'
+ }
+
+ userRole.userId = this.holder.userId
+ userRole.name = role.name
+ userRole.isGroupRole = false
+ userRole.timeout = role.timeout
+ userRole.beginTime = role.beginTime
+ userRole.endTime = role.endTime
+ userRole.beginDate = role.beginDate
+ userRole.endDate = role.endDate
+ userRole.beginLockDate = role.beginLockDate
+ userRole.endLockDate = role.endLockDate
+ userRole.dayMask = role.dayMask
+ userRole.parents = role.parents
+ userRole.roleConstraints = null
+
+ return userRole
+ },
+ searchRoles(query) {
+ this.selectedRoles = []
+ if (query.length > 2) {
+ this.loading = true
+ let ftReq = {
+ "value": query,
+ contextId: ft.CONTEXT_ID
+ }
+ let url = ft.FT_BASE_URL + '/roleSearch'
+ if(this.isAdminRole) {
+ url = ft.FT_BASE_URL + '/arleSearch'
+ }
+ setTimeout(() => {
+ axios.post(url, ftReq, ft.AXIOS_FT_CONFIG).then(resp => {
+ this.foundRoles = resp.data.entities
+ this.loading = false
+ }).catch(e => {
+ this.foundRoles = []
+ ft.showErr(e, '')
+ })
+ }, 200);
+ }
+ }
+},
+components: {
+ TemporalConstraints
+}
+};
+</script>
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/components/TemporalConstraints.vue
----------------------------------------------------------------------
diff --git a/embrasure/src/components/TemporalConstraints.vue b/embrasure/src/components/TemporalConstraints.vue
new file mode 100644
index 0000000..0efd331
--- /dev/null
+++ b/embrasure/src/components/TemporalConstraints.vue
@@ -0,0 +1,115 @@
+<template :tcHolder="tcHolder">
+ <div>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Begin Time:">
+ <el-time-select :picker-options="timeSelectOps" v-model="beginTime" size="mini"></el-time-select>
+ </el-form-item>
+ <el-form-item label="End Time:">
+ <el-time-select :picker-options="timeSelectOps" v-model="endTime" size="mini"></el-time-select>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Begin Date:">
+ <el-date-picker v-model="beginDate" value-format="yyyyMMdd" format="MM/dd/yyyy" type="date"></el-date-picker>
+ </el-form-item>
+ <el-form-item label="End Date:">
+ <el-date-picker v-model="endDate" value-format="yyyyMMdd" format="MM/dd/yyyy" type="date"></el-date-picker>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Begin Lock Date:">
+ <el-date-picker v-model="beginLockDate" value-format="yyyyMMdd" format="MM/dd/yyyy" type="date"></el-date-picker>
+ </el-form-item>
+ <el-form-item label="End Lock Date:">
+ <el-date-picker v-model="endLockDate" value-format="yyyyMMdd" format="MM/dd/yyyy" type="date"></el-date-picker>
+ </el-form-item>
+ </el-row>
+ </div>
+</template>
+
+<script>
+/* eslint-disable */
+export default {
+ name: 'TemporalConstraints',
+props: {
+ tcHolder: Object,
+},
+data() {
+ return {
+ timeSelectOps: {
+ start: '00:00',
+ end: '23:30'
+ }
+ }
+},
+created() {
+
+},
+computed: {
+ // the below functions are used to convert date and time values in the format fortress stores
+ beginTime: {
+ get() {
+ return this.formatInput(this.tcHolder.beginTime)
+ },
+ set(newVal) {
+ this.tcHolder.beginTime = this.formatOutput(newVal)
+ }
+ },
+ endTime: {
+ get() {
+ return this.formatInput(this.tcHolder.endTime)
+ },
+ set(newVal) {
+ this.tcHolder.endTime = this.formatOutput(newVal)
+ }
+ },
+ beginDate: {
+ get() {
+ return this.tcHolder.beginDate
+ },
+ set(newVal) {
+ this.$set(this.tcHolder, 'beginDate', newVal)
+ }
+ },
+ endDate: {
+ get() {
+ return this.tcHolder.endDate
+ },
+ set(newVal) {
+ this.$set(this.tcHolder, 'endDate', newVal)
+ }
+ },
+ beginLockDate: {
+ get() {
+ return this.tcHolder.beginLockDate
+ },
+ set(newVal) {
+ this.$set(this.tcHolder, 'beginLockDate', newVal)
+ }
+ },
+ endLockDate: {
+ get() {
+ return this.tcHolder.endLockDate
+ },
+ set(newVal) {
+ this.$set(this.tcHolder, 'endLockDate', newVal)
+ }
+ }
+},
+methods: {
+ formatInput(t) {
+ if(t == null) {
+ return "00:00"
+ }
+ return t.substring(0,2) + ':' + t.substring(2)
+ },
+ formatOutput(t) {
+ if(t == null) {
+ return "0000"
+ }
+ return t.substring(0,2) + t.substring(3) // exclude : char
+ }
+
+}
+};
+</script>
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/components/UserList.vue
----------------------------------------------------------------------
diff --git a/embrasure/src/components/UserList.vue b/embrasure/src/components/UserList.vue
new file mode 100644
index 0000000..b660a78
--- /dev/null
+++ b/embrasure/src/components/UserList.vue
@@ -0,0 +1,67 @@
+<template>
+<el-container>
+ <el-aside width="200px" style="background-color: #808471">
+ <el-menu :default-active="activeIndex" class="el-menu-demo" mode="vertical" background-color="#808471" text-color="#fff" active-text-color="#ffd04b">
+ </el-menu>
+ </el-aside>
+ <el-main>
+ <div style="float: right; margin-bottom: 1px">
+ <el-row>
+ <el-col>
+ <el-input v-model="filters[0].value" placeholder="search"></el-input>
+ </el-col>
+ </el-row>
+ </div>
+ <data-tables :data="resources" :table-props="tableProps" :page-size="10" :pagination-props="{ background: true, pageSizes: [10, 20, 50, 100] }" :filters="filters" highlight-current-row @row-click="fetchEntity" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column v-for="col in columns" :prop="col.prop" :label="col.label" :key="col.label" sortable="custom" width="200" header-align="center">
+ </el-table-column>
+ </data-tables>
+ </el-main>
+ </el-container>
+</template>
+
+<script>
+/* eslint-disable */
+import axios from "axios"
+
+export default {
+ name: "UserList",
+ data() {
+ return {
+ resources: [],
+ activeIndex: "1",
+ multipleSelection: [],
+ columns: [{
+ prop: "username",
+ label: "Username"
+ }, {
+ prop: "displayname",
+ label: "Name"
+ }
+ ],
+ tableProps: {
+ border: false,
+ stripe: true,
+ defaultSort: {
+ prop: 'username',
+ order: 'ascending'
+ }
+ },
+ filters: [
+ {
+ prop: ['username', 'displayname'],
+ value: ''
+ }
+ ]
+ }
+ },
+ created() {
+ },
+ methods: {
+ fetchEntity(val) {
+ this.$router.push({name: "UserDetails", params: val});
+ }
+ }
+};
+</script>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/components/UserParent.vue
----------------------------------------------------------------------
diff --git a/embrasure/src/components/UserParent.vue b/embrasure/src/components/UserParent.vue
new file mode 100644
index 0000000..2270d19
--- /dev/null
+++ b/embrasure/src/components/UserParent.vue
@@ -0,0 +1,37 @@
+<template>
+<el-container>
+ <el-aside width="200px" style="background-color: #808471">
+ <el-menu class="el-menu-demo" mode="vertical" background-color="#808471" text-color="#fff" active-text-color="#ffd04b">
+ <el-menu-item index="1" @click="save" v-if="enableSave">Save</el-menu-item>
+ <el-menu-item index="2" @click="back"><- User List</el-menu-item>
+ <el-menu-item index="3" @click="addEntity">Add New</el-menu-item>
+ <!-- <el-menu-item index="4" @click="deleteEntity" v-if="multipleSelection.length > 0">Delete</el-menu-item> -->
+ </el-menu>
+ </el-aside>
+ <router-view class="child"></router-view>
+</el-container>
+</template>
+<script>
+/* eslint-disable */
+import axios from "axios"
+
+export default {
+ name: 'UserParent',
+ data() {
+ return {
+ enableSave: false
+ }
+ },
+ methods: {
+ addEntity() {
+
+ },
+ deleteEntity() {
+
+ },
+ back() {
+
+ }
+ }
+};
+</script>
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/components/Users.vue
----------------------------------------------------------------------
diff --git a/embrasure/src/components/Users.vue b/embrasure/src/components/Users.vue
new file mode 100644
index 0000000..f97757f
--- /dev/null
+++ b/embrasure/src/components/Users.vue
@@ -0,0 +1,488 @@
+<template>
+<el-container>
+ <el-main>
+ <el-row type="flex" justify="start" style="padding-bottom: 4px; text-align: left;">
+ <el-col :span="20">
+ <el-input style="width: 270px; padding-right: 20px;" v-model="filters[0].value" placeholder="search"></el-input>
+ <el-button type="primary" v-if="multipleSelection.length > 0" @click="deleteEntities">Delete</el-button>
+ <el-button type="primary" @click="newUser">New User</el-button>
+ <el-button type="primary" v-if="enableSave" @click="save">Save</el-button>
+ </el-col>
+ </el-row>
+ <el-row type="flex" justify="start">
+ <el-col :span="10" justify="center">
+ <data-tables ref="userTable" :data="entities" :table-props="tableProps" :page-size="10" :pagination-props="{ background: true, pageSizes: [10, 20, 50, 100] }" :filters="filters" :highlight-current-row="true" max-height="250" @row-click="showEntity" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column v-for="col in columns" :prop="col.prop" :label="col.label" :key="col.label" sortable="custom" width="200" header-align="center">
+ </el-table-column>
+ </data-tables>
+ </el-col>
+
+ <el-col :span="25">
+ <el-form v-if="entity != null" v-model.lazy="entity" :inline="true" label-width="120px">
+ <el-tabs v-model="curTab" type="border-card">
+ <el-tab-pane name="User Details" label="User Details">
+ <el-row justify="start" type="flex">
+ <el-col :span="19">
+ <el-row justify="start" type="flex">
+ <el-form-item label="User ID:">
+ <el-input label="User ID" placeholder="User ID" v-model="entity.userId" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="Password:">
+ <el-input type="password" label="Password" v-model="entity.password" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Title:">
+ <el-input label="Title" v-model="entity.title" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="Display Name:">
+ <el-input label="Display Name" v-model="entity.displayName" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Organization:">
+ <el-input label="Organization" placeholder="Organization" v-model="entity.ou" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="Employee Type:">
+ <el-input label="Employee Type" v-model="entity.employeeType" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Description:">
+ <el-input label="Description" v-model="entity.description" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="Password Policy:">
+ <el-input label="Password Policy" placeholder="" v-model="entity.pwPolicy" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex" v-if="entity.internalId != null">
+ <el-form-item v-if="!entity.reset" label="New Password:">
+ <el-input type="password" label="New Password:" v-model="entity.newPassword" size="mini"></el-input>
+ </el-form-item>
+ <el-form-item label="">
+ <el-button type="primary" size="mini" v-if="!entity.reset" @click="resetPassword">Reset Password</el-button>
+ <el-button type="primary" size="mini" @click="lockOrUnlockUser">{{entity.locked? 'Unlock' : 'Lock'}}</el-button>
+ </el-form-item>
+ </el-row>
+ </el-col>
+ <el-col :span="4">
+ <label class="el-form-item__label" style="width: 33px;">Photo</label>
+ <img v-if="entity.jpegPhoto == null" ref="userPhoto" height="125" width="125" src="../assets/nophoto.jpg" @click="selectJpegPhoto"/>
+ <img v-else ref="userPhoto" height="125" width="125" :src="jpegPhoto" @click="selectJpegPhoto"/>
+ <input type="file" ref="photoFile" @change="changeJpegPhoto" style="opacity: 0; width: 0px; height: 0px">
+ </el-col>
+ </el-row>
+ </el-tab-pane>
+ <el-tab-pane name="Role Assignments" label="Role Assignments">
+ <!-- <el-form-item label="Roles:" label-width="50px"> -->
+ <RoleAssignment :holder.sync="entity" fieldName="roles"/>
+ <!-- </el-form-item> -->
+ </el-tab-pane>
+ <el-tab-pane name="Admin Role Assignments" label="Admin Role Assignments">
+ <!-- <el-form-item label="Roles:" label-width="50px"> -->
+ <RoleAssignment :holder.sync="entity" fieldName="adminRoles" isAdminRole/>
+ <!-- </el-form-item> -->
+ </el-tab-pane>
+ <el-tab-pane name="Contact Information" label="Contact Information">
+ <el-row justify="start" type="flex">
+ <ContactInformation :entity="entity"/>
+ </el-row>
+ </el-tab-pane>
+ <el-tab-pane name="Temporal Constraints" label="Temporal Constraints">
+ <TemporalConstraints :tcHolder="entity"/>
+ </el-tab-pane>
+ <el-tab-pane name="System Information" label="System Information">
+ <el-row justify="start" type="flex">
+ <el-form-item label="System:">
+ <el-checkbox v-model="entity.system" size="small"></el-checkbox>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="Internal ID:">
+ <span style="color: black;">{{entity.internalId}}</span>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="CN:">
+ <el-input label="CN" v-model="entity.cn" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="DN:">
+ <span style="color: black;">{{entity.dn}}</span>
+ </el-form-item>
+ </el-row>
+ <el-row justify="start" type="flex">
+ <el-form-item label="SN:">
+ <el-input label="SN" v-model="entity.sn" size="small"></el-input>
+ </el-form-item>
+ </el-row>
+ </el-tab-pane>
+ </el-tabs>
+ </el-form>
+ </el-col>
+ </el-row>
+ </el-main>
+ </el-container>
+</template>
+
+<script>
+/* eslint-disable */
+import axios from "axios"
+import * as ft from "../lib/fortress"
+import * as jsondiff from "rfc6902"
+import SplitPane from 'vue-split-pane'
+import TemporalConstraints from './TemporalConstraints.vue'
+import List from './List.vue'
+import RoleAssignment from './RoleAssignment.vue'
+import ContactInformation from './ContactInformation.vue'
+import { Notification } from 'element-ui'
+
+export default {
+ name: "Users",
+ data() {
+ return {
+ entities: [],
+ entity: null,
+ rowIndex: -1,
+ curTab: 'User Details',
+ multipleSelection: [],
+ enableSave: false,
+ columns: [{
+ prop: "userId",
+ label: "User ID"
+ }, {
+ prop: "name",
+ label: "Name"
+ }
+ ],
+ tableProps: {
+ border: false,
+ stripe: true,
+ defaultSort: {
+ prop: 'userId',
+ order: 'ascending'
+ }
+ },
+ filters: [
+ {
+ prop: ['userId', 'name', 'displayName', 'roles', 'adminRoles'],
+ value: ''
+ }
+ ]
+ }
+ },
+ created() {
+ let ftReq = {
+ entity: {
+ fqcn: "org.apache.directory.fortress.core.model.User"
+ },
+ contextId: ft.CONTEXT_ID
+ }
+ ft.showWait()
+ axios.post(ft.FT_BASE_URL+ '/userSearch', ftReq, ft.AXIOS_FT_CONFIG).then(resp => {
+ this.entities = resp.data.entities
+ if(this.entities.length > 0) {
+ this.showEntity(this.entities[0])
+ }
+ ft.closeWait()
+ }).catch(e => {
+ ft.showErr(e, '')
+ })
+ },
+ computed: {
+ jpegPhoto: {
+ get() {
+ return 'data:image/jpeg;base64,' + this.entity.jpegPhoto
+ }
+ }
+ },
+ watch: {
+ entity: {
+ deep: true,
+ handler: function(newVal, oldVal) {
+ if(this.entity._justLoaded) {
+ delete this.entity._justLoaded
+ }
+ else {
+ this.enableSave = true
+ }
+ }
+ }
+ },
+ methods: {
+ newUser() {
+ this.entity = ft.newUser()
+ this.entity._justLoaded = true
+ },
+ showEntity(val) {
+ if(val !== undefined && val != null) {
+ this.enableSave = false
+ this.rowIndex = this.entities.indexOf(val)
+ // deep clone
+ this.entity = JSON.parse(JSON.stringify(val))
+ this.entity._justLoaded = true
+ //console.log(this.$refs.userTable)
+ }
+ },
+ handleSelectionChange(val) {
+ this.multipleSelection = val;
+ },
+ async save() {
+ ft.showWait()
+ let newUser = false
+ let url = ft.FT_BASE_URL+ '/userUpdate'
+ if(this.entity.internalId == null || this.entity.internalId == undefined) {
+ url = ft.FT_BASE_URL+ '/userAdd'
+ newUser = true
+ this.entity.fqcn = 'org.apache.directory.fortress.core.model.User'
+ }
+ let ftReq = {
+ entity: this.entity,
+ contextId: ft.CONTEXT_ID
+ }
+ axios.post(url, ftReq, ft.AXIOS_FT_CONFIG).then(resp => {
+ let rolesTobeAssigned = []
+ let rolesTobeDeAssigned = []
+ let admRolesTobeAssigned = []
+ let admRolesTobeDeAssigned = []
+ if(newUser) {
+ if(this.entity.roles != null) {
+ rolesTobeAssigned = this.entity.roles
+ }
+ if(this.entity.adminRoles != null) {
+ admRolesTobeAssigned = this.entity.adminRoles
+ }
+ }
+ else {
+ let origEntity = this.entities[this.rowIndex]
+ if(origEntity.roles == null) {
+ if(this.entity.roles != null) {
+ rolesTobeAssigned = this.entity.roles
+ }
+ }
+ else {
+ let origRoles = origEntity.roles
+ let roles = this.entity.roles.slice() // if we don't slice here later the UI is failing to refresh properly
+ for(let i=0; i< origRoles.length; i++) {
+ let or = origRoles[i]
+ let found = false
+ let j=0
+ for(; j< roles.length; j++) {
+ let r = roles[j]
+ if(or.modId == r.modId) {
+ found = true
+ let op = jsondiff.createPatch(or, r)
+ if(op.length > 0) {
+ rolesTobeAssigned.push(r)
+ }
+ break
+ }
+ }
+ if(found) {
+ roles.splice(j, 1)
+ }
+ else {
+ rolesTobeDeAssigned.push(or)
+ }
+ }
+ rolesTobeAssigned.push(...roles) // remaining are the new roles
+ }
+
+ if(origEntity.adminRoles == null) {
+ if(this.entity.adminRoles != null) {
+ admRolesTobeAssigned = this.entity.adminRoles
+ }
+ }
+ else {
+ let origAdmRoles = origEntity.adminRoles
+ let admRoles = this.entity.adminRoles.slice() // if we don't slice here later the UI is failing to refresh properly
+ for(let i=0; i< origAdmRoles.length; i++) {
+ let or = origAdmRoles[i]
+ let found = false
+ let j=0
+ for(; j< admRoles.length; j++) {
+ let r = admRoles[j]
+ if(or.modId == r.modId) {
+ found = true
+ let op = jsondiff.createPatch(or, r)
+ if(op.length > 0) {
+ admRolesTobeAssigned.push(r)
+ }
+ break
+ }
+ }
+ if(found) {
+ admRoles.splice(j, 1)
+ }
+ else {
+ admRolesTobeDeAssigned.push(or)
+ }
+ }
+ admRolesTobeAssigned.push(...admRoles) // remaining are the new roles
+ }
+ }
+ try {
+ this.updateRoleAssignments(rolesTobeDeAssigned, ft.FT_BASE_URL + '/roleDeasgn')
+ this.updateRoleAssignments(rolesTobeAssigned, ft.FT_BASE_URL + '/roleAsgn')
+ this.updateRoleAssignments(admRolesTobeDeAssigned, ft.FT_BASE_URL + '/arleDeasgn')
+ this.updateRoleAssignments(admRolesTobeAssigned, ft.FT_BASE_URL + '/arleAsgn')
+ let readPromise = this.fetchSingleUser(this.entity.userId)
+ readPromise.then( resp => {
+ console.log('fetching user')
+ if(newUser) {
+ this.entities.push(resp.data.entity)
+ this.showEntity(resp.data.entity)
+ }
+ else {
+ let origEntity = this.entities[this.rowIndex]
+ // Object.assign(origEntity, resp.data.entity)
+ origEntity = {...origEntity, ...resp.data.entity}
+ this.$set(this.entities, this.rowIndex, origEntity)
+ }
+ this.enableSave = false
+ ft.closeWait()
+ })
+ }
+ catch(e) {
+ ft.showErr(e, '')
+ }
+ }).catch(e => {
+ console.log(e)
+ ft.showErr(e, '')
+ })
+ },
+ changeJpegPhoto() {
+ let f = this.$refs.photoFile.files[0]
+ console.log(f.type)
+ if(!f.type.startsWith('image/jpeg')) {
+ ft.showErr('Invalid image')
+ return
+ }
+ if(f.size > 1048576) { // 1 MB
+ ft.showErr('Photo size cannot exceed 1MB, please select an image with smaller size')
+ return
+ }
+ let fileReader = new FileReader()
+ let imgRef = this.$refs.userPhoto
+ let self = this
+ fileReader.addEventListener('load', function(){
+ let img = fileReader.result
+ let commaPos = img.indexOf(',')
+ img = img.substring(commaPos+1)
+ console.log(img)
+ self.$set(self.entity, 'jpegPhoto', img)
+ }, false)
+ fileReader.readAsDataURL(f)
+ },
+ selectJpegPhoto() {
+ this.$refs.photoFile.click()
+ },
+ async updateRoleAssignments(roles, url) {
+ console.log('updating role assignment')
+ for(let i=0; i< roles.length; i++) {
+ let ftReq = {
+ entity: roles[i],
+ contextId: ft.CONTEXT_ID
+ }
+ let respPromise = await axios.post(url, ftReq, ft.AXIOS_FT_CONFIG)
+ }
+ },
+ async fetchSingleUser(userId) {
+ let ftReq = {
+ entity: {
+ fqcn: 'org.apache.directory.fortress.core.model.User',
+ userId: userId
+ },
+ contextId: ft.CONTEXT_ID
+ }
+ let respPromise = await axios.post(ft.FT_BASE_URL + '/userRead', ftReq, ft.AXIOS_FT_CONFIG)
+ console.log(respPromise)
+ return respPromise
+ },
+ lockOrUnlockUser() {
+ let ftReq = {
+ entity: {
+ fqcn: 'org.apache.directory.fortress.core.model.User',
+ userId: this.entity.userId
+ },
+ contextId: ft.CONTEXT_ID
+ }
+ ft.showWait()
+ let origEntity = this.entities[this.rowIndex]
+ let url = ft.FT_BASE_URL+ '/userLock'
+ if(origEntity.locked) {
+ url = ft.FT_BASE_URL+ '/userUnlock'
+ }
+ let saveState = this.enableSave
+ axios.post(url, ftReq, ft.AXIOS_FT_CONFIG).then(resp => {
+ origEntity.locked = !origEntity.locked
+ this.entity.locked = origEntity.locked
+ if(!saveState) {
+ this.entity._justLoaded = true
+ }
+ ft.closeWait()
+ }).catch(e => {
+ ft.showErr(e, '')
+ })
+ },
+ resetPassword() {
+ if(this.entity.newPassword == null || this.entity.newPassword.trim().length == 0) {
+ ft.showErr('New password cannot be empty')
+ return
+ }
+ let ftReq = {
+ entity: this.entity,
+ contextId: ft.CONTEXT_ID
+ }
+ ft.showWait()
+ let saveState = this.enableSave
+ axios.post(ft.FT_BASE_URL+ '/userReset', ftReq, ft.AXIOS_FT_CONFIG).then(resp => {
+ this.entity.reset = true
+ this.entities[this.rowIndex].reset = true
+ if(!saveState) {
+ this.entity._justLoaded = true
+ }
+ ft.closeWait()
+ }).catch(e => {
+ ft.showErr(e, '')
+ })
+ },
+ deleteEntities() {
+ ft.showWait()
+ for(let i=0; i< this.multipleSelection.length; i++) {
+ let e = this.multipleSelection[i]
+ let respPromise = this._deleteSingleEntity(e)
+ respPromise.then(resp => {
+ let row = this.entities.indexOf(e)
+ this.entities.splice(row, 1)
+ }).catch(e => {
+ let msg = 'Failed to delete user ' + e.userId
+ Notification.warning({message: msg, duration: 10000})
+ })
+ }
+
+ if(this.entities.length > 0) {
+ this.showEntity(this.entities[0])
+ }
+ ft.closeWait()
+ },
+ async _deleteSingleEntity(e) {
+ let ftReq = {
+ entity: e,
+ contextId: ft.CONTEXT_ID
+ }
+ let respPromise = await axios.post(ft.FT_BASE_URL+ '/userDelete', ftReq, ft.AXIOS_FT_CONFIG)
+ return respPromise
+ }
+ },
+ components: {
+ SplitPane,
+ TemporalConstraints,
+ List,
+ RoleAssignment,
+ ContactInformation
+ }
+};
+</script>
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/lib/fortress.js
----------------------------------------------------------------------
diff --git a/embrasure/src/lib/fortress.js b/embrasure/src/lib/fortress.js
new file mode 100644
index 0000000..e6f8e0c
--- /dev/null
+++ b/embrasure/src/lib/fortress.js
@@ -0,0 +1,99 @@
+import { Loading, Notification } from 'element-ui'
+
+export var FT_BASE_URL = '/fortress-rest'
+export var AXIOS_FT_CONFIG = {headers: {'Content-Type': 'application/json', 'Accept': 'application/json'}}
+export var CONTEXT_ID = 'HOME'
+
+var loadingWidget = null;
+export function showWait() {
+ loadingWidget = Loading.service({
+ lock: true,
+ text: 'Loading',
+ spinner: 'el-icon-loading',
+ background: 'rgba(0, 0, 0, 0)',
+ fullscreen: true
+ })
+ }
+
+export function closeWait() {
+ if(loadingWidget != null) {
+ loadingWidget.close()
+ loadingWidget = null
+ }
+ }
+
+ export function showSuccess(msg) {
+ Notification.success({message: msg})
+ }
+
+ export function showErr(msg, e) {
+ // close if the wait screen is still present
+ closeWait()
+ if(msg === undefined || msg === null) {
+ msg = ''
+ }
+ if(e !== null && e !== undefined && e.response !== undefined) {
+ if(e.response.data !== undefined) {
+ msg = msg + ' (' + e.response.data.detail + ')'
+ }
+ }
+ Notification.warning({message: msg, duration: 10000})
+ }
+
+ export function newUser() {
+ return {
+ address: {
+ addresses: null,
+ building: null,
+ city: null,
+ country: null,
+ departmentNumber: null,
+ postOfficeBox: null,
+ postalCode: null,
+ roomNumber: null,
+ state: null
+ },
+ adminRoles: null,
+ adminSession: null,
+ beginDate: null,
+ beginLockDate: null,
+ beginTime: null,
+ cn: null,
+ contextId: null,
+ dayMask: null,
+ description: null,
+ displayName: null,
+ dn: null,
+ emails: null,
+ employeeType: null,
+ endDate: null,
+ endLockDate: null,
+ endTime: null,
+ fqcn: null,
+ gecos: null,
+ gidNumber: null,
+ homeDirectory: null,
+ internalId: null,
+ jpegPhoto: null,
+ locked: false,
+ loginShell: null,
+ mobiles: null,
+ modCode: null,
+ modId: null,
+ name: null,
+ newPassword: null,
+ ou: null,
+ password: null,
+ phones: null,
+ pwPolicy: null,
+ reset: false,
+ roles: null,
+ sequenceId: 0,
+ sn: null,
+ system: false,
+ timeout: 60,
+ title: null,
+ uidNumber: null,
+ userId: null
+ }
+ }
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/lib/rest-examples.txt
----------------------------------------------------------------------
diff --git a/embrasure/src/lib/rest-examples.txt b/embrasure/src/lib/rest-examples.txt
new file mode 100644
index 0000000..171d2a1
--- /dev/null
+++ b/embrasure/src/lib/rest-examples.txt
@@ -0,0 +1,137 @@
+Contains curl commands of some basic fortress functions.
+
+a. Add Role:
+
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-role-user.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAdd
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-role-member.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAdd
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-role-custodian.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAdd
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-role-owner.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAdd
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-role-colgate.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAdd
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-role-ibm.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAdd
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-role-acme.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAdd
+
+# Sample request:
+<FortRequest>
+ <contextId>HOME</contextId>
+ <entity xsi:type="role" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <name>acme1</name>
+ <description>access to acme group data</description>
+ </entity>
+</FortRequest>
+b. Search Role:
+
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-search-role.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleSearch
+
+<FortRequest>
+ <contextId>HOME</contextId>
+ <value>acme</value>
+</FortRequest>
+c. Add User:
+
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-user-curly.xml https://HOSTNAME:8443/fortress-rest-2.0.2/userAdd
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-user-moe.xml https://HOSTNAME:8443/fortress-rest-2.0.2/userAdd
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-user-larry.xml https://HOSTNAME:8443/fortress-rest-2.0.2/userAdd
+
+<FortRequest>
+ <contextId>HOME</contextId>
+ <entity xsi:type="user" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <userId>curly</userId>
+ <description>curly is a test user</description>
+ <ou>default</ou>
+ <sn>horowitz</sn>
+ <cn>curly horowitz</cn>
+ <locked>false</locked>
+ </entity>
+</FortRequest>
+d. Search User:
+
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-search-user.xml https://HOSTNAME:8443/fortress-rest-2.0.2/userSearch
+
+<FortRequest>
+ <entity xsi:type="user" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <userId>rbacuser</userId>
+ </entity>
+ <contextId>HOME</contextId>
+</FortRequest>
+e. Assign User:
+
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-curly-acme.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-curly-colgate.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-curly-custodian.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-curly-ibm.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-curly-member.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-larry-acme.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-larry-colgate.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-larry-custodian.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-larry-member.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-moe-colgate.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-moe-ibm.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-moe-owner.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleAsgn
+
+<FortRequest>
+ <contextId>HOME</contextId>
+ <entity xsi:type="userRole" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <userId>curly</userId>
+ <name>acme</name>
+ </entity>
+</FortRequest>
+f. Create Session
+
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-create-session-curly.xml https://HOSTNAME:8443/fortress-rest-2.0.2/rbacCreateT
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-create-session-moe.xml https://HOSTNAME:8443/fortress-rest-2.0.2/rbacCreateT
+curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-create-session-larry.xml https://HOSTNAME:8443/fortress-rest-2.0.2/rbacCreateT
+h. Test Add Permission Object
+
+ curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-perm-object.xml https://HOSTNAME:8443/fortress-rest-2.0.1/objAdd
+i. Test Add Permission Operation
+
+ curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-perm-operation.xml https://HOSTNAME:8443/fortress-rest-2.0.2/permAdd
+j. Test Add Role Grant (to permission)
+
+ curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-add-role-grant.xml https://HOSTNAME:8443/fortress-rest-2.0.2/roleGrant
+k. Test Check Access
+
+ curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-check-access.xml https://HOSTNAME:8443/fortress-rest-2.0.2/rbacAuthZ
+l. Add User Role Constraint:
+
+ curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-curly-role-member-constraint-colgate.xml https://HOSTNAME:8443/fortress-rest-2.0.2/addRoleConstraint
+
+ <FortRequest>
+ <contextId>HOME</contextId>
+ <entity xsi:type="userRole" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <name>member</name>
+ <userId>curly</userId>
+ </entity>
+ <entity2 xsi:type="roleConstraint" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <key>engagement</key>
+ <value>colgate</value>
+ <type>USER</type>
+ </entity2>
+ </FortRequest>
+m. Remove User Role Constraint:
+
+ curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-assign-curly-role-member-constraint-colgate.xml https://HOSTNAME:8443/fortress-rest-2.0.2/removeRoleConstraint
+
+ <FortRequest>
+ <contextId>HOME</contextId>
+ <entity xsi:type="userRole" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <name>member</name>
+ <userId>curly</userId>
+ </entity>
+ <entity2 xsi:type="roleConstraint" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <key>engagement</key>
+ <value>colgate</value>
+ <type>USER</type>
+ </entity2>
+ </FortRequest>
+n. Search Permissions:
+
+ curl -X POST -u 'rbacuser' -H 'Content-type: text/xml' -k -d @test-search-perms.xml https://HOSTNAME:8443/fortress-rest-2.0.2/permSearch
+
+ <FortRequest>
+ <contextId>HOME</contextId>
+ <entity xsi:type="permGrant" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <objName></objName>
+ <opName></opName>
+ </entity>
+ </FortRequest>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/main.js
----------------------------------------------------------------------
diff --git a/embrasure/src/main.js b/embrasure/src/main.js
new file mode 100644
index 0000000..b7d6f7d
--- /dev/null
+++ b/embrasure/src/main.js
@@ -0,0 +1,22 @@
+import Vue from 'vue'
+import App from './App.vue'
+import router from './router'
+import ElementUI from 'element-ui'
+import 'element-ui/lib/theme-chalk/index.css'
+import locale from 'element-ui/lib/locale/lang/en'
+//import { Notification } from 'element-ui';
+import {DataTables} from 'vue-data-tables'
+
+Vue.config.productionTip = false
+Vue.use(ElementUI, { locale })
+Vue.use(DataTables)
+
+new Vue({
+ el: '#app',
+ router,
+ render: h => h(App),
+ components: { App },
+ template: '<App/>',
+ created: function() {
+ }
+})
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/src/router/index.js
----------------------------------------------------------------------
diff --git a/embrasure/src/router/index.js b/embrasure/src/router/index.js
new file mode 100644
index 0000000..8bc8be3
--- /dev/null
+++ b/embrasure/src/router/index.js
@@ -0,0 +1,35 @@
+/* eslint-disable */
+import Vue from 'vue'
+import ViewRouter from 'vue-router'
+import UserList from '@/components/UserList'
+import UserParent from '@/components/UserParent'
+import Users from '@/components/Users'
+//import UserDetails from '@/components/UserDetails'
+
+Vue.use(ViewRouter)
+
+export default new ViewRouter({
+ routes: [
+ {
+ path: '/',
+ name: 'Users',
+ component: Users
+ },
+ {
+ path: '/users',
+ component: UserParent,
+ children: [
+ {
+ path: '',
+ name: 'UserList',
+ component: UserList
+ },
+ // {
+ // path: ':id',
+ // name: 'UserDetails',
+ // component: UserDetails
+ // }
+ ]
+ }
+ ]
+})
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/vue.config.js
----------------------------------------------------------------------
diff --git a/embrasure/vue.config.js b/embrasure/vue.config.js
new file mode 100644
index 0000000..91ae8e1
--- /dev/null
+++ b/embrasure/vue.config.js
@@ -0,0 +1,11 @@
+module.exports = {
+ lintOnSave: false,
+ devServer: {
+ proxy: {
+ '/fortress-rest': {
+ target: 'http://localhost:7070',
+ changeOrigin: true
+ }
+ }
+ }
+}
\ No newline at end of file
[2/3] directory-fortress-enmasse git commit: first drop of new
Fortress UI
Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/package-lock.json
----------------------------------------------------------------------
diff --git a/embrasure/package-lock.json b/embrasure/package-lock.json
new file mode 100644
index 0000000..519c91d
--- /dev/null
+++ b/embrasure/package-lock.json
@@ -0,0 +1,12366 @@
+{
+ "name": "embrasure",
+ "version": "0.1.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.47.tgz",
+ "integrity": "sha512-W7IeG4MoVf4oUvWfHUx9VG9if3E0xSUDf1urrnNYtC2ow1dz2ptvQ6YsJfyVXDuPTFXz66jkHhzMW7a5Eld7TA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "7.0.0-beta.47"
+ }
+ },
+ "@babel/core": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.47.tgz",
+ "integrity": "sha512-7EIuAX0UVnCgZ0E9tz9rFK0gd+aovwMA9bul+dnkmBQYLrJdas2EHMUSmaK67i1cyZpvgVvXhHtXJxC7wo3rlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.47",
+ "@babel/generator": "7.0.0-beta.47",
+ "@babel/helpers": "7.0.0-beta.47",
+ "@babel/template": "7.0.0-beta.47",
+ "@babel/traverse": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47",
+ "babylon": "7.0.0-beta.47",
+ "convert-source-map": "1.6.0",
+ "debug": "3.2.6",
+ "json5": "0.5.1",
+ "lodash": "4.17.11",
+ "micromatch": "2.3.11",
+ "resolve": "1.8.1",
+ "semver": "5.6.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.47.tgz",
+ "integrity": "sha512-fJP+9X+gqgTTZzTqrKJHwebPwt6S/e/4YuyRyKyWHAIirGgUwjRoZgbFci24wwGYMJW7nlkCSwWG7QvCVsG0eg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.47",
+ "jsesc": "2.5.1",
+ "lodash": "4.17.11",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.47.tgz",
+ "integrity": "sha512-Pjxb/PrxyKWc7jcAXlawvNAQMxxY+tSSNC5wxJstJjpO10mocmGzBOqNYjxdvVhMb3d0BEPQ8mR+D65fFpZ+TA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.47.tgz",
+ "integrity": "sha512-nv8d6TcDBb1CJMQzwab/e0rqyqoP9d2AQBjr4GdSiVRpJX4aiLEiLBm2XprdEb/sVIRmmBnVxPXJaHDsS/K2fw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.47.tgz",
+ "integrity": "sha512-Rx9TRmCCEP0pWau9gfR6ubcbbX3nVc4ImNY143ftC70jrKdSv5rS20yz2cmCilDzhexwGZQ3PFwOLKe3C/5aEg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "7.0.0-beta.47",
+ "@babel/traverse": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.47.tgz",
+ "integrity": "sha512-pLB9RY7GZKcc/frzgfDY/HwdqxWPe60qMAvNUef1V1bDZ8i4AUgxAANgltFzj61t100WGhqaS0xGkALD+9VA+g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47",
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.47.tgz",
+ "integrity": "sha512-1mwk27zmhSuMUcVWxw5ZKiPYfuWXviZNqgA4OvFBloPf9R+dKDhNgP2uUrkHh68ltVVc3Bup1nsbd/2KM5AxEw==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.47.tgz",
+ "integrity": "sha512-0LSvt95XCYaOrDA5K68KkTyldKXizDwBnKACdYzQszp1GdbtzmSeGwFU5Ecw86fU6bkYXtDvkFTOQwk/WQSJPw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "7.0.0-beta.47",
+ "@babel/template": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.47.tgz",
+ "integrity": "sha512-63j0i3YUW8CO//uQc3ACffJdIlYcIlysuHjMF0yzQhqKoQ/CUPv0hf3nBwdRGjiWrr3JcL6++NF4XmXdwSU+fA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.47.tgz",
+ "integrity": "sha512-5BcKFhyzrsInlrfO/tGoe6khUuJzGfROD7oozF/5MWsKo/c3gVJfQ5y83lZ4XoTKJt/x4PQlLU0aHd/SJpYONA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0-beta.47.tgz",
+ "integrity": "sha512-gpipslnZw2hcVGADUtqQII9KF8FPpRZsVUXwKP/0EnWwtujRFSVL+u2Fh+VXODRAxFmTLo6eGcOr/Vfan0MqYw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.47.tgz",
+ "integrity": "sha512-Rk43Ty+a6npu9znK22IqFlseStRGWxEHi2cjmLbbi63VGiseofdUtIJI65F9MTCuMTXAX7VbY/ghef1Jp5qpvw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.47",
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.47.tgz",
+ "integrity": "sha512-CziMe30ZunAhe6j05oNOFOg7im1lcv3dYuMxrwBYVe9YdP4NHPU7a1wrDBUhaPmyqTIZDwGnFne7k1KP79SeGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "7.0.0-beta.47",
+ "@babel/helper-simple-access": "7.0.0-beta.47",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.47",
+ "@babel/template": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47",
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.47.tgz",
+ "integrity": "sha512-NhnGhjwrhzGas4A/PoBDEtEPCGJHrzhaT6qGmo1hmkA2orG4UNi7KENC38DhJII0n2oUrKUuzTwgCvxKOTiHbw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.47.tgz",
+ "integrity": "sha512-GR67o8boOKVJRKM5Nhk7oVEHpxYy8R00lwu0F82WxxBH+iiT26DqW1e/4w/mo7Bdn1A6l0pNaOlNk1PdM2Hgag==",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0-beta.47.tgz",
+ "integrity": "sha512-dafidvVkjJP5AIWkJspV+7RGj1jeNts0qYvlmVzqAGb6BmQzEldJr6ZPzrmlpW/AW1YJGdw7br2yiwvlCRqDvQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.47.tgz",
+ "integrity": "sha512-Nmj3lUHQscD160asav2bZ3sMIjGwGY9r6Vrriy9TqH7bmaClKUKUs5Twv0htFWfOKNFLEeY/MaqiAXylr1GS2w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "7.0.0-beta.47",
+ "@babel/helper-wrap-function": "7.0.0-beta.47",
+ "@babel/template": "7.0.0-beta.47",
+ "@babel/traverse": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.47.tgz",
+ "integrity": "sha512-yf2JAD1+xNTjavqazqknRgPfd6MbGfvfIcAkxWsPURynAwOMSs4zThED8ImT2d5a97rGPysRJcq1jNh2L0WYxg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "7.0.0-beta.47",
+ "@babel/helper-optimise-call-expression": "7.0.0-beta.47",
+ "@babel/traverse": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.47.tgz",
+ "integrity": "sha512-sd2t3QDKjd+hHkJKaC2AX39l6oIil1N548oMZAtV5YHlVGoWWkAVGnPMxRg7ICEjIftCU3ZI6UeaogyEhF8t7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47",
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.47.tgz",
+ "integrity": "sha512-jx8GmxryT6Qy4+24W6M6TnVL9T8bxqdyg5UKHjxBdw0Y2Sano1n0WphUS2seuOugn04W2ZQLqGc0ut8nGe/taA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.47.tgz",
+ "integrity": "sha512-SAasvh80Mz5q9x15dqH6z8jpM0WTBmxQSNZATSwJwhmWdme6r2gxpufIMr8LwQIJHmXmgNLmvh0zdWSbE/PR4Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "7.0.0-beta.47",
+ "@babel/template": "7.0.0-beta.47",
+ "@babel/traverse": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.47.tgz",
+ "integrity": "sha512-uWk7gIua2COEWLwZGxfF5Wq1bgXOt1V6xzWxqeFznrA6F1TUPiAhkK5zORiZEa5RAILp6Mswsn3xFjDyCpp3rQ==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "7.0.0-beta.47",
+ "@babel/traverse": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.47.tgz",
+ "integrity": "sha512-d505K3Hth1eg0b2swfEF7oFMw3J9M8ceFg0s6dhCSxOOF+07WDvJ0HKT/YbK/Jk9wn8Wyr6HIRAUPKJ9Wfv8Rg==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.1",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.47.tgz",
+ "integrity": "sha512-TQMLYVIqQ0MqVS1Z7jsuv3HlEetLo/7EnDY9mGBZ4c4/WLD/mu+tFuLiK2/2QH5wgi5viRfJGs/+L5TaDzxWng==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-remap-async-to-generator": "7.0.0-beta.47",
+ "@babel/plugin-syntax-async-generators": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.0.0-beta.47.tgz",
+ "integrity": "sha512-6yuCiF+ZZHPLgAa+0a6/teNeAMsWqY6AVtZA4NhCWnwP4OH0JrRaY7rwvFCJSqNGurf8rF65W9IucM/l0+HOCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-replace-supers": "7.0.0-beta.47",
+ "@babel/plugin-syntax-class-properties": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-proposal-decorators": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.0.0-beta.47.tgz",
+ "integrity": "sha512-sI+cO1okrlOyV4I63HDXf/SFsCr492HLjzNsMsd7Lk9WrViA+eQIboIiI9wHicozdgD1WrpZGJTjz7Z3xwl2Qw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/plugin-syntax-decorators": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.47.tgz",
+ "integrity": "sha512-ujUjQUyTxUWHfixRD7Y5Nm8VCgHSf6YgbM37LEnojKp5lPahZO42qJfDty+Kh0tEanpI5H8BLPkJbFSzx6TNEw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.47.tgz",
+ "integrity": "sha512-XMZavW6uior8KD4BeMavxF3PGrwVpIFlZk/GJQGkd3lOeOHil8nhHDuTWvsbsJptKFWMPkhGR18boNdxgmxyFQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.47.tgz",
+ "integrity": "sha512-TCQqSmPrgVB0Txr6WzCpxJyLuVTb9KoT0+oECKELtF717bvHOI4woR7o8D8DFkXzVQeb7Kqfu5w05gsvPq591g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-regex": "7.0.0-beta.47",
+ "regexpu-core": "4.2.0"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.47.tgz",
+ "integrity": "sha512-LCNGYTLpQAsvTmVmT/I2pz7dIh3Bu+9BLxqL7b3QfplsMQxNsoBBMend33Arb4EtPt5dX7KeeVof8tL0trDRRA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0-beta.47.tgz",
+ "integrity": "sha512-vLoAuLSjHSenX3TQmri6ttQWZp3rEtGcRp4LgYEBQ012fN5h+KmcssvkCAqm6V6ozS5KzUWpBlZ6t7YhZG6oBw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-syntax-decorators": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.0.0-beta.47.tgz",
+ "integrity": "sha512-Lv10BM3C+0Ki53lI7T9xZsSsgzQqfoQZq4pZj0F6tkK54E5BBSFfUxGavRE43CFXHbK0Hd9uMqmpGWPGtCvgAw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0-beta.47.tgz",
+ "integrity": "sha512-J2y7RAH2NwQ+ahJahj2eS1PqS2NWNWTDaEibqrE55VTJU7nPL8AhthRwIQfQkCH+8UIeL/T3Jh1iHIRkvJ6dXA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0-beta.47.tgz",
+ "integrity": "sha512-5scuJzIYZY8M+A1ra8mcKANIwB5TtsRD6Aw94xZxfvnjhhVMFR5RYE9HshVlBrZVY+r3cJDNIQLJMC/fGJHImA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.47.tgz",
+ "integrity": "sha512-UOGQCmzvNlZMQOuys7xPiTa2EjTT3xHuhUghcdJnYikqGV43obpIIaP+VDCWPvIT8g0QDIvmRWx5UefvkWXN+w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.47.tgz",
+ "integrity": "sha512-Dmq+REMR95Syg+VjV3bh63DD/tDxdraNQ4ErAOXFobfSCDbfov9YGkqSJ4K61LHTQwinQ0+dIUlgdFL2kbedIw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.47.tgz",
+ "integrity": "sha512-xiU+7RJAsqx+iZqWSQQWBu9ZDTruWimkg4puDSdRVfEwgZQdOtiU2LuO0+xGFyitJPHkKuje0WvK1tFu1dmxCw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.47.tgz",
+ "integrity": "sha512-/TXK3v6ipvmhMO81Y2Vjc7RYROkS2PcmRc+kvmU3CWA7r5I73KWg10UEW/fpWqCuoTCHHHXu1ZcZ5u+nduJeFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-remap-async-to-generator": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.47.tgz",
+ "integrity": "sha512-8KPxKyE6kb9VRbHwQ8XKsg/IPlxHaOMRyg2WfyV5C4dCmXbRdHDJy4hZKB3o4rGxjggmC/Bx8Fh51/P7UNtTcA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.47.tgz",
+ "integrity": "sha512-V/u3Zdy40KjVQeyYUaQnCGiHQbRNJoc6IEtNDERltuW9vYPHS1n6YGc+EHKi8JVYT4kE6UHOjD+BrbCCV4kjRw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.47.tgz",
+ "integrity": "sha512-hzW/jL6TPBMHJXeXwzuxMN0PFAfjVD0UzATHrFSejY5A7SvhWWrv1cZ3K0/SzCXJ9LpMdxCNiREvVjeD/Tyx2g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "7.0.0-beta.47",
+ "@babel/helper-define-map": "7.0.0-beta.47",
+ "@babel/helper-function-name": "7.0.0-beta.47",
+ "@babel/helper-optimise-call-expression": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-replace-supers": "7.0.0-beta.47",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.47",
+ "globals": "11.8.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.47.tgz",
+ "integrity": "sha512-V78qyzmjj4aq/tjpkMFbV5gPtrx7xdclW1Rn6vV9hIwMSMbtstYEXF4msy614MofvYj6gYbPbNfyhXFIUvz/xw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.47.tgz",
+ "integrity": "sha512-3AaXC9H7qPybJbSs/QMhhj9EZF9MYrb/HRytwki1tckaYifqCJquENIZxDAYmwsWIGIHiq34WqwPRMIsz/b5uQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.47.tgz",
+ "integrity": "sha512-ofB5GwipMoaOH3Qyr5g5FpXWePhIAaD4zMDOoAHDYBPuLWxzAME8YQCa0S3HJf3eTu/HTN/c/G1gDwDB8Z/gKQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-regex": "7.0.0-beta.47",
+ "regexpu-core": "4.2.0"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.47.tgz",
+ "integrity": "sha512-r3xNVYTLVasjqTowIr6s+27oc5n7A5TKbB0/4u9FHjF7ONTWaggO8UFbbj07DOJ4Ll2RkigrZA8/D+w2nJ+XlA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.47.tgz",
+ "integrity": "sha512-vyGG3kLIXpMuaPL485aqowdWFrxCxXtbzMXy9p1QTK5Q/+9UHpK9XoAVJZGknnsm091m0Ss7spo8uHaxbzYVog==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.47.tgz",
+ "integrity": "sha512-tfH5OMzV9fWLYJTzWDhoRJKr8kvBZWH26jiCgM0ayNq75ES/X947MqMNAgBjJdTAVEV2kOyks2ItgNAJT4rOUw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.47.tgz",
+ "integrity": "sha512-/5I/f8NCouugsRT6ORB1UjCP3N+Rgv/OB6SzmaeIUEpYYPM6D7WQ+4BaRYXQn4eqtOJmTgxDXYa8FgYtoeqP9A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.47.tgz",
+ "integrity": "sha512-PxBw+52qWypwR76YfS2FlW4wZfp61SjIyt3OSPZeWnf0zVQWNVrlRRunJ7lBYudDYvyMwStAE/VynZ0fHtPgng==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.47.tgz",
+ "integrity": "sha512-zW84YqQ5Kt8+t5pYrnFhjWQP2w2wq6Nxz9pozxpnvXP+lhqyJPqNdWM1lcVApORpWL1BF7BlgP08yk+5MVRfGA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.47.tgz",
+ "integrity": "sha512-MYoLyexybBJ9ODWWMsMFzxAQey68RzhQNPjfNAYPhPPB3X160EZ5qOjWxRS2rYNvuYAxs6guy5OdrDpESqFSrQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-simple-access": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.47.tgz",
+ "integrity": "sha512-bMQy3/jEZRpoUg7RdOouphBO8+7Sfjl7XrO84PtgBx4ck+ZPc4xOlBQyr2rkmsJNmmGLi42nnMI1cZZJT3LVnQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.47.tgz",
+ "integrity": "sha512-rG7KioAFCLxZ33wNBqUoxPhtXOmVEvnZNIy9wv0fSbNIQr8lO1avZ7SeBL3OZduNvLocqrESt9Xhh1nzb/zOvA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.47.tgz",
+ "integrity": "sha512-2IRZtdoPXJn7KSwrmp0xtLTZ0PnhlQxhcTZ0XZ5wfFXmsZ9vi6AK4whIZ2IXI/c2qrYK9FEYLwR5QRfL5Qe6eQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.47.tgz",
+ "integrity": "sha512-JN6ox2rH1xe6hlsd6/7d2kPjZSA97wH4oOdNOSaNqaFGEFuaP/Je4+ojHMgyHKU2nx9QHNBCTxHEj+ko+Ij6HQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-replace-supers": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.47.tgz",
+ "integrity": "sha512-UzQG8draO+30Y8eNEREuGBfmEHLL7WFxOjmTBbaTrbdOrm/znCUThqcuNz8cyn2nrZbln7M/loQ3stjf9Pt9fQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "7.0.0-beta.47",
+ "@babel/helper-get-function-arity": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.47.tgz",
+ "integrity": "sha512-JEPIiJyqYRfjOYUTZguLkb2HTwudReqLyOljpOXnJ/1ymwsiof4D6ul611DGlMxJMZJGQ6TBi59iY9GoJ6j4Iw==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "0.12.4"
+ }
+ },
+ "@babel/plugin-transform-runtime": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.0.0-beta.47.tgz",
+ "integrity": "sha512-RhnhjYsOxmKDGa1ePM5RQWFBYe1PnEZAhXTNEeIwtw1jluEoLL+PCTZDbt/aAcAkZvqwIWccjkNM/FwKTd5Sxw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.47.tgz",
+ "integrity": "sha512-+o7/yb0Nrk4Gg/tnBgfBf+G1uGZbtkSluUnj8RyD37ajpDlWmysDjFEHSfktKcuD8YHeGz2M9AYNGcClk1fr/g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.47.tgz",
+ "integrity": "sha512-LFAozFdfT4bE2AQw2BnjzLufTX4GBsTUHUGRhT8XNoDYuGnV+7k9Yj6JU3/7csJc9u6W91PArYgoO+D56CMw6Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.47.tgz",
+ "integrity": "sha512-+Rc6NihGoXcwAqAxbiumvzOYxRR0aUg1ZExfyHnI5QnQf0sf4xAfgT/YpGvEgLd5Ci0rka+IWSj54PhzZkhuTg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-regex": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.47.tgz",
+ "integrity": "sha512-ORfrfN/gQoRuI+xf+kOa2i/yvXfedFRgH+KtgoIrpUQom7OhexxzD280x80LMCIkdaVGzYhvlC3kdJkFMWAfUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.47.tgz",
+ "integrity": "sha512-PhPy5NUY5MT++fEr7/sxN1/ERSM2siHSbGgdkbqgDlyvf1NlU1HeqyfomHJEFE1Y4PX0hj+XmtjSAali/6XqYA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.47.tgz",
+ "integrity": "sha512-44nWn421tMVZ/A4+1uppzoAO7nrlwWzefMr9JUi5G+tXl0DLEtWy+F7L6zCVw19C4OAOA6WlolVro5CEs6g6AQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/helper-regex": "7.0.0-beta.47",
+ "regexpu-core": "4.2.0"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.0.0-beta.47.tgz",
+ "integrity": "sha512-ZFUgKdQDqw2H5TCMaWq6iDDO9+16RZPdDfOuoPID8Agm8I2MBlrqTI1MKWwqgEHICdZIOXkVszAMuuDTBwdzHA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "7.0.0-beta.47",
+ "@babel/helper-plugin-utils": "7.0.0-beta.47",
+ "@babel/plugin-proposal-async-generator-functions": "7.0.0-beta.47",
+ "@babel/plugin-proposal-object-rest-spread": "7.0.0-beta.47",
+ "@babel/plugin-proposal-optional-catch-binding": "7.0.0-beta.47",
+ "@babel/plugin-proposal-unicode-property-regex": "7.0.0-beta.47",
+ "@babel/plugin-syntax-async-generators": "7.0.0-beta.47",
+ "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.47",
+ "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.47",
+ "@babel/plugin-transform-arrow-functions": "7.0.0-beta.47",
+ "@babel/plugin-transform-async-to-generator": "7.0.0-beta.47",
+ "@babel/plugin-transform-block-scoped-functions": "7.0.0-beta.47",
+ "@babel/plugin-transform-block-scoping": "7.0.0-beta.47",
+ "@babel/plugin-transform-classes": "7.0.0-beta.47",
+ "@babel/plugin-transform-computed-properties": "7.0.0-beta.47",
+ "@babel/plugin-transform-destructuring": "7.0.0-beta.47",
+ "@babel/plugin-transform-dotall-regex": "7.0.0-beta.47",
+ "@babel/plugin-transform-duplicate-keys": "7.0.0-beta.47",
+ "@babel/plugin-transform-exponentiation-operator": "7.0.0-beta.47",
+ "@babel/plugin-transform-for-of": "7.0.0-beta.47",
+ "@babel/plugin-transform-function-name": "7.0.0-beta.47",
+ "@babel/plugin-transform-literals": "7.0.0-beta.47",
+ "@babel/plugin-transform-modules-amd": "7.0.0-beta.47",
+ "@babel/plugin-transform-modules-commonjs": "7.0.0-beta.47",
+ "@babel/plugin-transform-modules-systemjs": "7.0.0-beta.47",
+ "@babel/plugin-transform-modules-umd": "7.0.0-beta.47",
+ "@babel/plugin-transform-new-target": "7.0.0-beta.47",
+ "@babel/plugin-transform-object-super": "7.0.0-beta.47",
+ "@babel/plugin-transform-parameters": "7.0.0-beta.47",
+ "@babel/plugin-transform-regenerator": "7.0.0-beta.47",
+ "@babel/plugin-transform-shorthand-properties": "7.0.0-beta.47",
+ "@babel/plugin-transform-spread": "7.0.0-beta.47",
+ "@babel/plugin-transform-sticky-regex": "7.0.0-beta.47",
+ "@babel/plugin-transform-template-literals": "7.0.0-beta.47",
+ "@babel/plugin-transform-typeof-symbol": "7.0.0-beta.47",
+ "@babel/plugin-transform-unicode-regex": "7.0.0-beta.47",
+ "browserslist": "3.2.8",
+ "invariant": "2.2.4",
+ "semver": "5.6.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.47.tgz",
+ "integrity": "sha512-3IaakAC5B4bHJ0aCUKVw0pt+GruavdgWDFbf7TfKh7ZJ8yQuUp7af7MNwf3e+jH8776cjqYmMO1JNDDAE9WfrA==",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.7",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "@babel/template": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.47.tgz",
+ "integrity": "sha512-mAzrOCLwOb4jAobHi0kTwIkoamP1Do28c6zxvrDXjYSJFZHz6KGuzMaT0AV7ZCq7M3si7QypVVMVX2bE6IsuOg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47",
+ "babylon": "7.0.0-beta.47",
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.47.tgz",
+ "integrity": "sha512-kYGGs//OnUnei+9TTldxlgf7llprj7VUeDKtG50+g+0k1g0yZyrkEgbyFheYFdnudR8IDEHOEXVsUuY82r5Aiw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.47",
+ "@babel/generator": "7.0.0-beta.47",
+ "@babel/helper-function-name": "7.0.0-beta.47",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.47",
+ "@babel/types": "7.0.0-beta.47",
+ "babylon": "7.0.0-beta.47",
+ "debug": "3.2.6",
+ "globals": "11.8.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/types": {
+ "version": "7.0.0-beta.47",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.47.tgz",
+ "integrity": "sha512-MOP5pOosg7JETrVGg8OQyzmUmbyoSopT5j2HlblHsto89mPz3cmxzn1IA4UNUmnWKgeticSwfhS+Gdy25IIlBQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
+ }
+ },
+ "@intervolga/optimize-cssnano-plugin": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz",
+ "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==",
+ "dev": true,
+ "requires": {
+ "cssnano": "4.1.4",
+ "cssnano-preset-default": "4.0.2",
+ "postcss": "7.0.5"
+ }
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz",
+ "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==",
+ "dev": true
+ },
+ "@vue/babel-preset-app": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.0.5.tgz",
+ "integrity": "sha512-zMFfvjDDhR+XYESXffDqM2CBy4pmCN2sJP0OyjaGshAhXKXC3oPXynrQ5uYQ1DW+1LVFIP3k6t6gRzl8URt00w==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-proposal-class-properties": "7.0.0-beta.47",
+ "@babel/plugin-proposal-decorators": "7.0.0-beta.47",
+ "@babel/plugin-syntax-dynamic-import": "7.0.0-beta.47",
+ "@babel/plugin-syntax-jsx": "7.0.0-beta.47",
+ "@babel/plugin-transform-runtime": "7.0.0-beta.47",
+ "@babel/preset-env": "7.0.0-beta.47",
+ "@babel/runtime": "7.0.0-beta.47",
+ "babel-helper-vue-jsx-merge-props": "2.0.3",
+ "babel-plugin-dynamic-import-node": "2.2.0",
+ "babel-plugin-transform-vue-jsx": "4.0.1"
+ }
+ },
+ "@vue/cli-overlay": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.0.5.tgz",
+ "integrity": "sha512-OYwbI+HpEkEJ+eA9WkzlQOE7gjFxiOSAWHU1dIqiD041Sh+uo5OhEFfVARza7rFwHHB1emujFctYyScGx5rArA==",
+ "dev": true
+ },
+ "@vue/cli-plugin-babel": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.0.5.tgz",
+ "integrity": "sha512-nZYF93CG6xfgxpljolEcejOmcHXdoqzdNmlfakFi+7Lyvwc65T7aKG4kOV3m/FD14Bh6B56xiv3rSG9GFPR6aw==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "7.0.0-beta.47",
+ "@vue/babel-preset-app": "3.0.5",
+ "babel-loader": "8.0.4"
+ }
+ },
+ "@vue/cli-plugin-eslint": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.0.5.tgz",
+ "integrity": "sha512-FIOHXr+/blWenEhOieINKOrs6y+mfSKn6JoIBkX0TvNFVw0qprKyJFnYt/Eu/1wUis9B45uhHme+3eKfzqxSVQ==",
+ "dev": true,
+ "requires": {
+ "@vue/cli-shared-utils": "3.0.5",
+ "babel-eslint": "8.2.6",
+ "eslint": "4.19.1",
+ "eslint-loader": "2.1.1",
+ "eslint-plugin-vue": "4.7.1"
+ }
+ },
+ "@vue/cli-service": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.0.5.tgz",
+ "integrity": "sha512-rwM0qJ8wWIOSprlulADc2VWw4BINC13lz1m2tA9+i+2PN8/zIT2bxfRqNM3fxUK5bjwQAHQhqrhcpkfOtftSXg==",
+ "dev": true,
+ "requires": {
+ "@intervolga/optimize-cssnano-plugin": "1.0.6",
+ "@vue/cli-overlay": "3.0.5",
+ "@vue/cli-shared-utils": "3.0.5",
+ "@vue/preload-webpack-plugin": "1.1.0",
+ "@vue/web-component-wrapper": "1.2.0",
+ "acorn": "5.7.3",
+ "address": "1.0.3",
+ "autoprefixer": "8.6.5",
+ "cache-loader": "1.2.2",
+ "case-sensitive-paths-webpack-plugin": "2.1.2",
+ "chalk": "2.4.1",
+ "clipboardy": "1.2.3",
+ "cliui": "4.1.0",
+ "copy-webpack-plugin": "4.5.3",
+ "css-loader": "1.0.0",
+ "cssnano": "4.1.4",
+ "debug": "3.2.6",
+ "escape-string-regexp": "1.0.5",
+ "file-loader": "1.1.11",
+ "friendly-errors-webpack-plugin": "1.7.0",
+ "fs-extra": "6.0.1",
+ "globby": "8.0.1",
+ "hash-sum": "1.0.2",
+ "html-webpack-plugin": "3.2.0",
+ "launch-editor-middleware": "2.2.1",
+ "lodash.defaultsdeep": "4.6.0",
+ "lodash.mapvalues": "4.6.0",
+ "lodash.transform": "4.6.0",
+ "mini-css-extract-plugin": "0.4.4",
+ "minimist": "1.2.0",
+ "ora": "2.1.0",
+ "portfinder": "1.0.17",
+ "postcss-loader": "2.1.6",
+ "read-pkg": "4.0.1",
+ "semver": "5.6.0",
+ "slash": "2.0.0",
+ "source-map-url": "0.4.0",
+ "ssri": "6.0.1",
+ "string.prototype.padend": "3.0.0",
+ "thread-loader": "1.2.0",
+ "uglifyjs-webpack-plugin": "1.3.0",
+ "url-loader": "1.1.2",
+ "vue-loader": "15.4.2",
+ "webpack": "4.21.0",
+ "webpack-bundle-analyzer": "2.13.1",
+ "webpack-chain": "4.12.1",
+ "webpack-dev-server": "3.1.9",
+ "webpack-merge": "4.1.4",
+ "yorkie": "2.0.0"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
+ "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "dir-glob": "2.0.0",
+ "fast-glob": "2.2.3",
+ "glob": "7.1.3",
+ "ignore": "3.3.10",
+ "pify": "3.0.0",
+ "slash": "1.0.0"
+ },
+ "dependencies": {
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ }
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/cli-shared-utils": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.0.5.tgz",
+ "integrity": "sha512-z5vPzUQGZJnRkojqVbDYar8NvGSvB0kUcO0O+Y+xkxVbjZxrq78e9bJFB4PR4QsqQbuBS9v3zawLWY4MhKwKOA==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.1",
+ "execa": "0.10.0",
+ "joi": "13.7.0",
+ "launch-editor": "2.2.1",
+ "lru-cache": "4.1.3",
+ "node-ipc": "9.1.1",
+ "opn": "5.4.0",
+ "ora": "2.1.0",
+ "request": "2.88.0",
+ "request-promise-native": "1.0.5",
+ "semver": "5.6.0",
+ "string.prototype.padstart": "3.0.0"
+ }
+ },
+ "@vue/component-compiler-utils": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.2.0.tgz",
+ "integrity": "sha512-pS4zlcdD7BvedyB+IfiTfrbi6C977UMIfulSk8r6uL0BU46ZE2+fUj/zbSNSfVxeaj9ElmnSni5OMwF9np+b+w==",
+ "dev": true,
+ "requires": {
+ "consolidate": "0.15.1",
+ "hash-sum": "1.0.2",
+ "lru-cache": "4.1.3",
+ "merge-source-map": "1.1.0",
+ "postcss": "6.0.23",
+ "postcss-selector-parser": "3.1.1",
+ "prettier": "1.13.7",
+ "source-map": "0.5.7",
+ "vue-template-es2015-compiler": "1.6.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.1",
+ "source-map": "0.6.1",
+ "supports-color": "5.5.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "4.2.0",
+ "indexes-of": "1.0.1",
+ "uniq": "1.0.1"
+ }
+ }
+ }
+ },
+ "@vue/preload-webpack-plugin": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.0.tgz",
+ "integrity": "sha512-rcn2KhSHESBFMPj5vc5X2pI9bcBNQQixvJXhD5gZ4rN2iym/uH2qfDSQfUS5+qwiz0a85TCkeUs6w6jxFDudbw==",
+ "dev": true
+ },
+ "@vue/web-component-wrapper": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz",
+ "integrity": "sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==",
+ "dev": true
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.8.tgz",
+ "integrity": "sha512-dOrtdtEyB8sInpl75yLPNksY4sRl0j/+t6aHyB/YA+ab9hV3Fo7FmG12FHzP+2MvWVAJtDb+6eXR5EZbZJ+uVg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.7.8",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
+ "@webassemblyjs/wast-parser": "1.7.8"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz",
+ "integrity": "sha512-kn2zNKGsbql5i56VAgRYkpG+VazqHhQQZQycT2uXAazrAEDs23gy+Odkh5VblybjnwX2/BITkDtNmSO76hdIvQ==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz",
+ "integrity": "sha512-xUwxDXsd1dUKArJEP5wWM5zxgCSwZApSOJyP1XO7M8rNUChUDblcLQ4FpzTpWG2YeylMwMl1MlP5Ztryiz1x4g==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz",
+ "integrity": "sha512-WXiIMnuvuwlhWvVOm8xEXU9DnHaa3AgAU0ZPfvY8vO1cSsmYb2WbGbHnMLgs43vXnA7XAob9b56zuZaMkxpCBg==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz",
+ "integrity": "sha512-TLQxyD9qGOIdX5LPQOPo0Ernd88U5rHkFb8WAjeMIeA0sPjCHeVPaGqUGGIXjUcblUkjuDAc07bruCcNHUrHDA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.7.8"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz",
+ "integrity": "sha512-TjK0CnD8hAPkV5mbSp5aWl6SO1+H3WFcjWtixWoy8EMA99YnNzYhpc/WSYWhf7yrhpzkq5tZB0tvLK3Svr3IXA==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.8.tgz",
+ "integrity": "sha512-uCutAKR7Nm0VsFixcvnB4HhAyHouNbj0Dx1p7eRjFjXGGZ+N7ftTaG1ZbWCasAEbtwGj54LP8+lkBZdTCPmLGg==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz",
+ "integrity": "sha512-AdCCE3BMW6V34WYaKUmPgVHa88t2Z14P4/0LjLwuGkI0X6pf7nzp0CehzVVk51cKm2ymVXjl9dCG+gR1yhITIQ==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz",
+ "integrity": "sha512-BkBhYQuzyl4hgTGOKo87Vdw6f9nj8HhI7WYpI0MCC5qFa5ahrAPOGgyETVdnRbv+Rjukl9MxxfDmVcVC435lDg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-buffer": "1.7.8",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
+ "@webassemblyjs/wasm-gen": "1.7.8"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz",
+ "integrity": "sha512-tOarWChdG1a3y1yqCX0JMDKzrat5tQe4pV6K/TX19BcXsBLYxFQOL1DEDa5KG9syeyvCrvZ+i1+Mv1ExngvktQ==",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.8.tgz",
+ "integrity": "sha512-GCYeGPgUFWJiZuP4NICbcyUQNxNLJIf476Ei+K+jVuuebtLpfvwkvYT6iTUE7oZYehhkor4Zz2g7SJ/iZaPudQ==",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.8.tgz",
+ "integrity": "sha512-9X+f0VV+xNXW2ujfIRSXBJENGE6Qh7bNVKqu3yDjTFB3ar3nsThsGBBKdTG58aXOm2iUH6v28VIf88ymPXODHA==",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz",
+ "integrity": "sha512-6D3Hm2gFixrfyx9XjSON4ml1FZTugqpkIz5Awvrou8fnpyprVzcm4X8pyGRtA2Piixjl3DqmX/HB1xdWyE097A==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-buffer": "1.7.8",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
+ "@webassemblyjs/helper-wasm-section": "1.7.8",
+ "@webassemblyjs/wasm-gen": "1.7.8",
+ "@webassemblyjs/wasm-opt": "1.7.8",
+ "@webassemblyjs/wasm-parser": "1.7.8",
+ "@webassemblyjs/wast-printer": "1.7.8"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz",
+ "integrity": "sha512-a7O/wE6eBeVKKUYgpMK7NOHmMADD85rSXLe3CqrWRDwWff5y3cSVbzpN6Qv3z6C4hdkpq9qyij1Ga1kemOZGvQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
+ "@webassemblyjs/ieee754": "1.7.8",
+ "@webassemblyjs/leb128": "1.7.8",
+ "@webassemblyjs/utf8": "1.7.8"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz",
+ "integrity": "sha512-3lbQ0PT81NHCdi1sR/7+SNpZadM4qYcTSr62nFFAA7e5lFwJr14M1Gi+A/Y3PgcDWOHYjsaNGPpPU0H03N6Blg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-buffer": "1.7.8",
+ "@webassemblyjs/wasm-gen": "1.7.8",
+ "@webassemblyjs/wasm-parser": "1.7.8"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz",
+ "integrity": "sha512-rZ/zlhp9DHR/05zh1MbAjT2t624sjrPP/OkJCjXqzm7ynH+nIdNcn9Ixc+qzPMFXhIrk0rBoQ3to6sEIvHh9jQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-api-error": "1.7.8",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
+ "@webassemblyjs/ieee754": "1.7.8",
+ "@webassemblyjs/leb128": "1.7.8",
+ "@webassemblyjs/utf8": "1.7.8"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.8.tgz",
+ "integrity": "sha512-Q/zrvtUvzWuSiJMcSp90fi6gp2nraiHXjTV2VgAluVdVapM4gy1MQn7akja2p6eSBDQpKJPJ6P4TxRkghRS5dg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/floating-point-hex-parser": "1.7.8",
+ "@webassemblyjs/helper-api-error": "1.7.8",
+ "@webassemblyjs/helper-code-frame": "1.7.8",
+ "@webassemblyjs/helper-fsm": "1.7.8",
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz",
+ "integrity": "sha512-GllIthRtwTxRDAURRNXscu7Napzmdf1jt1gpiZiK/QN4fH0lSGs3OTmvdfsMNP7tqI4B3ZtfaaWRlNIQug6Xyg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/wast-parser": "1.7.8",
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "@xtuc/long": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
+ "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.20",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "acorn-dynamic-import": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
+ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.7.3"
+ }
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "address": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz",
+ "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==",
+ "dev": true
+ },
+ "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-errors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
+ "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
+ "dev": true
+ },
+ "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
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "ansi-colors": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.1.0.tgz",
+ "integrity": "sha512-hTv1qPdi+sVEk3jYsdjox5nQI0C9HTbjKShbCdYLKb1LOfNbb7wsF4d7OEKIZoxIHx02tSp3m94jcPW2EfMjmA==",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "dev": true
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.3"
+ }
+ },
+ "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.10",
+ "normalize-path": "2.1.1"
+ },
+ "dependencies": {
+ "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.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.3",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "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": {
+ "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-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-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"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ },
+ "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.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "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.13",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "arch": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz",
+ "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-filter": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "dev": true
+ },
+ "array-reduce": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+ "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
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.1"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": 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
+ },
+ "async-validator": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
+ "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "8.6.5",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz",
+ "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==",
+ "dev": true,
+ "requires": {
+ "browserslist": "3.2.8",
+ "caniuse-lite": "1.0.30000892",
+ "normalize-range": "0.1.2",
+ "num2fraction": "1.2.2",
+ "postcss": "6.0.23",
+ "postcss-value-parser": "3.3.1"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.1",
+ "source-map": "0.6.1",
+ "supports-color": "5.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.18.0",
+ "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
+ "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
+ "requires": {
+ "follow-redirects": "1.5.9",
+ "is-buffer": "1.1.6"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "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": "http://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"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.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
+ }
+ }
+ },
+ "babel-eslint": {
+ "version": "8.2.6",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz",
+ "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/traverse": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "1.0.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
+ "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "7.0.0-beta.44"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.44",
+ "jsesc": "2.5.1",
+ "lodash": "4.17.11",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz",
+ "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "7.0.0-beta.44",
+ "@babel/template": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz",
+ "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz",
+ "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
+ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.1",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "@babel/template": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz",
+ "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz",
+ "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/generator": "7.0.0-beta.44",
+ "@babel/helper-function-name": "7.0.0-beta.44",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "debug": "3.2.6",
+ "globals": "11.8.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.11"
+ }
+ },
+ "@babel/types": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.11",
+ "to-fast-properties": "2.0.0"
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-vue-jsx-merge-props": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+ "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
+ },
+ "babel-loader": {
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.4.tgz",
+ "integrity": "sha512-fhBhNkUToJcW9nV46v8w87AJOwAJDz84c1CL57n3Stj73FANM/b9TbCUK4YhdOwEyZ+OxhYpdeZDNzSI29Firw==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "1.0.0",
+
<TRUNCATED>
[3/3] directory-fortress-enmasse git commit: first drop of new
Fortress UI
Posted by ka...@apache.org.
first drop of new Fortress UI
Project: http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/commit/5aae8a26
Tree: http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/tree/5aae8a26
Diff: http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/diff/5aae8a26
Branch: refs/heads/FC-247
Commit: 5aae8a26f3df2d5682cbd791bc31b65bd7e80c76
Parents: 65d32f2
Author: Kiran Ayyagari <ka...@apache.org>
Authored: Sun Nov 18 21:10:16 2018 +0530
Committer: Kiran Ayyagari <ka...@apache.org>
Committed: Sun Nov 18 21:10:16 2018 +0530
----------------------------------------------------------------------
embrasure/.gitignore | 21 +
embrasure/README.md | 26 +
embrasure/babel.config.js | 5 +
embrasure/package-lock.json | 12366 +++++++++++++++++
embrasure/package.json | 50 +
embrasure/public/embrasure-favicon.png | Bin 0 -> 14376 bytes
embrasure/public/index.html | 17 +
embrasure/src/App.vue | 92 +
embrasure/src/assets/nophoto.jpg | Bin 0 -> 3667 bytes
embrasure/src/components/ContactInformation.vue | 94 +
embrasure/src/components/List.vue | 77 +
embrasure/src/components/RoleAssignment.vue | 196 +
.../src/components/TemporalConstraints.vue | 115 +
embrasure/src/components/UserList.vue | 67 +
embrasure/src/components/UserParent.vue | 37 +
embrasure/src/components/Users.vue | 488 +
embrasure/src/lib/fortress.js | 99 +
embrasure/src/lib/rest-examples.txt | 137 +
embrasure/src/main.js | 22 +
embrasure/src/router/index.js | 35 +
embrasure/vue.config.js | 11 +
21 files changed, 13955 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/.gitignore
----------------------------------------------------------------------
diff --git a/embrasure/.gitignore b/embrasure/.gitignore
new file mode 100644
index 0000000..185e663
--- /dev/null
+++ b/embrasure/.gitignore
@@ -0,0 +1,21 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw*
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/README.md
----------------------------------------------------------------------
diff --git a/embrasure/README.md b/embrasure/README.md
new file mode 100644
index 0000000..61dc085
--- /dev/null
+++ b/embrasure/README.md
@@ -0,0 +1,26 @@
+# embrasure
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Run your tests
+```
+npm run test
+```
+
+### Lints and fixes files
+```
+npm run lint
+```
http://git-wip-us.apache.org/repos/asf/directory-fortress-enmasse/blob/5aae8a26/embrasure/babel.config.js
----------------------------------------------------------------------
diff --git a/embrasure/babel.config.js b/embrasure/babel.config.js
new file mode 100644
index 0000000..ba17966
--- /dev/null
+++ b/embrasure/babel.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ presets: [
+ '@vue/app'
+ ]
+}