From 822cd8102b65172331b0cf844931aa0291ca8099 Mon Sep 17 00:00:00 2001 From: sartrey Date: Sat, 3 Oct 2020 23:02:36 +0800 Subject: [PATCH 1/2] 0.5.0, ! rebase project --- README.md | 34 +- ROADMAP.md | 25 - lib/static/index.js | 1 - model/package.json | 19 + .gitignore => views/.gitignore | 0 .npmignore => views/.npmignore | 0 views/README.md | 32 + views/ROADMAP.md | 25 + {bin => views/bin}/guide.txt | 0 {bin => views/bin}/keyroll | 0 build.js => views/build.js | 0 index.js => views/index.js | 0 .../client/assets/MaterialIcons-Regular.woff2 | Bin {lib => views/lib}/client/assets/codepoints | 0 .../client/assets/react-dom.development.js | 0 .../client/assets/react-dom.production.min.js | 0 .../lib}/client/assets/react.development.js | 0 .../client/assets/react.production.min.js | 0 .../lib}/client/component/AccessMask.jsx | 0 .../lib}/client/component/AccessMask.scss | 0 .../lib}/client/component/DeviceList.jsx | 0 .../lib}/client/component/DeviceList.scss | 0 .../lib}/client/component/RecordList.jsx | 0 .../lib}/client/component/RecordList.scss | 0 .../lib}/client/component/RecordListItem.jsx | 0 .../lib}/client/component/VolumnList.jsx | 0 .../lib}/client/component/VolumnList.scss | 0 .../lib}/client/component/VolumnListItem.jsx | 0 .../lib}/client/component/design/Button.jsx | 0 .../lib}/client/component/design/Button.scss | 0 .../lib}/client/component/design/Icon.jsx | 0 .../lib}/client/component/design/Icon.scss | 0 .../lib}/client/component/design/Input.jsx | 0 .../lib}/client/component/design/Input.scss | 0 .../lib}/client/component/design/index.js | 0 .../lib}/client/component/higher/editable.jsx | 0 {lib => views/lib}/client/index.jsx | 0 {lib => views/lib}/client/index.scss | 0 {lib => views/lib}/client/store.js | 0 {lib => views/lib}/kernel/Device.js | 0 {lib => views/lib}/kernel/Record.js | 0 {lib => views/lib}/kernel/Secure.js | 0 {lib => views/lib}/kernel/Volumn.js | 0 {lib => views/lib}/kernel/index.js | 0 {lib => views/lib}/server/editRecord.js | 0 {lib => views/lib}/server/editVolumn.js | 0 {lib => views/lib}/server/findRecord.js | 0 {lib => views/lib}/server/findRecords.js | 0 {lib => views/lib}/server/findVolumns.js | 0 {lib => views/lib}/server/killRecord.js | 0 {lib => views/lib}/server/killVolumn.js | 0 {lib => views/lib}/server/lockDevice.js | 0 {lib => views/lib}/server/scanDevices.js | 0 {lib => views/lib}/server/unlockDevice.js | 0 .../static/assets/MaterialIcons-Regular.woff2 | Bin .../static/assets/react-dom.development.js | 0 .../static/assets/react-dom.production.min.js | 0 .../lib}/static/assets/react.development.js | 0 .../static/assets/react.production.min.js | 0 {lib => views/lib}/static/index.css | 2 + views/lib/static/index.css.map | 1 + views/lib/static/index.js | 3497 +++++++++++++++++ views/lib/static/index.js.map | 1 + {lib => views/lib}/static/launch.js | 0 package-lock.json => views/package-lock.json | 0 package.json => views/package.json | 0 66 files changed, 3581 insertions(+), 56 deletions(-) delete mode 100644 lib/static/index.js create mode 100644 model/package.json rename .gitignore => views/.gitignore (100%) rename .npmignore => views/.npmignore (100%) create mode 100644 views/README.md create mode 100644 views/ROADMAP.md rename {bin => views/bin}/guide.txt (100%) rename {bin => views/bin}/keyroll (100%) rename build.js => views/build.js (100%) rename index.js => views/index.js (100%) rename {lib => views/lib}/client/assets/MaterialIcons-Regular.woff2 (100%) rename {lib => views/lib}/client/assets/codepoints (100%) rename {lib => views/lib}/client/assets/react-dom.development.js (100%) rename {lib => views/lib}/client/assets/react-dom.production.min.js (100%) rename {lib => views/lib}/client/assets/react.development.js (100%) rename {lib => views/lib}/client/assets/react.production.min.js (100%) rename {lib => views/lib}/client/component/AccessMask.jsx (100%) rename {lib => views/lib}/client/component/AccessMask.scss (100%) rename {lib => views/lib}/client/component/DeviceList.jsx (100%) rename {lib => views/lib}/client/component/DeviceList.scss (100%) rename {lib => views/lib}/client/component/RecordList.jsx (100%) rename {lib => views/lib}/client/component/RecordList.scss (100%) rename {lib => views/lib}/client/component/RecordListItem.jsx (100%) rename {lib => views/lib}/client/component/VolumnList.jsx (100%) rename {lib => views/lib}/client/component/VolumnList.scss (100%) rename {lib => views/lib}/client/component/VolumnListItem.jsx (100%) rename {lib => views/lib}/client/component/design/Button.jsx (100%) rename {lib => views/lib}/client/component/design/Button.scss (100%) rename {lib => views/lib}/client/component/design/Icon.jsx (100%) rename {lib => views/lib}/client/component/design/Icon.scss (100%) rename {lib => views/lib}/client/component/design/Input.jsx (100%) rename {lib => views/lib}/client/component/design/Input.scss (100%) rename {lib => views/lib}/client/component/design/index.js (100%) rename {lib => views/lib}/client/component/higher/editable.jsx (100%) rename {lib => views/lib}/client/index.jsx (100%) rename {lib => views/lib}/client/index.scss (100%) rename {lib => views/lib}/client/store.js (100%) rename {lib => views/lib}/kernel/Device.js (100%) rename {lib => views/lib}/kernel/Record.js (100%) rename {lib => views/lib}/kernel/Secure.js (100%) rename {lib => views/lib}/kernel/Volumn.js (100%) rename {lib => views/lib}/kernel/index.js (100%) rename {lib => views/lib}/server/editRecord.js (100%) rename {lib => views/lib}/server/editVolumn.js (100%) rename {lib => views/lib}/server/findRecord.js (100%) rename {lib => views/lib}/server/findRecords.js (100%) rename {lib => views/lib}/server/findVolumns.js (100%) rename {lib => views/lib}/server/killRecord.js (100%) rename {lib => views/lib}/server/killVolumn.js (100%) rename {lib => views/lib}/server/lockDevice.js (100%) rename {lib => views/lib}/server/scanDevices.js (100%) rename {lib => views/lib}/server/unlockDevice.js (100%) rename {lib => views/lib}/static/assets/MaterialIcons-Regular.woff2 (100%) rename {lib => views/lib}/static/assets/react-dom.development.js (100%) rename {lib => views/lib}/static/assets/react-dom.production.min.js (100%) rename {lib => views/lib}/static/assets/react.development.js (100%) rename {lib => views/lib}/static/assets/react.production.min.js (100%) rename {lib => views/lib}/static/index.css (99%) create mode 100644 views/lib/static/index.css.map create mode 100644 views/lib/static/index.js create mode 100644 views/lib/static/index.js.map rename {lib => views/lib}/static/launch.js (100%) rename package-lock.json => views/package-lock.json (100%) rename package.json => views/package.json (100%) diff --git a/README.md b/README.md index 7abc9dd..792aebf 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,6 @@ -# keyroll +# KeyRoll -`keyroll` is a secure key-value storage toolkit. +## Project Structure -## Usage - -### install as global dependency - -`npm install -g keyroll` - -### start server anywhere - -```sh -# serve ~/.keyroll at 9988 -keyroll - -# serve ~/.keyroll at 8080 -keyroll --port=8080 - -# fork server -keyroll fork - -# stop server -keyroll stop - -# show help -keyroll help -``` - -### access homepage - -`http://localhost:YOUR-PORT` \ No newline at end of file +`model` directory contains a low-level secure key-value storage library. +`views` directory contains several frontend apps. \ No newline at end of file diff --git a/ROADMAP.md b/ROADMAP.md index d15e167..e69de29 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,25 +0,0 @@ -# Keyroll Roadmap - -## Milestone 0 -1. single local storage for single user (done) -2. data model (done) -3. project boilerplate from firecell (done) - -## Milestone 1 -1. secure filter for data request -2. password - -## Milestone 2 -1. extensible data schema - -## Milestone 3 -1. custom local storage devices -2. usb devices - -## Milestone 4 -1. backup and recovery at external storage or cloud like google or onedrive - -## Milestone 5 -1. biometric - human face -2. biometric - voice code -3. biometric - finger print diff --git a/lib/static/index.js b/lib/static/index.js deleted file mode 100644 index 7eee3a4..0000000 --- a/lib/static/index.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t){e.exports=React},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t){e.exports=ReactDOM},function(e,t,n){"use strict";n.r(t);var r=n(0),o=n.n(r),i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},c=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"";return Array.isArray(e)?[].concat(s(e)):d(e)?u({},e):m(t)?[]:{}},b=1,_=function(){return b+=1},g=function(e,t){var n=e.indexOf(t);if(-1!==n){for(var r=n,o=r+1,i=e.length;o0&&void 0!==arguments[0]?arguments[0]:{},n=t.data,r=t.maxSnapshots,o=void 0===r?1/0:r;a(this,e),this.__data=n,this.__maxSnapshots=o,this.__snapshots=[],this.__snapshotIndex=-1}return c(e,[{key:"read",value:function(e){return function(e,t){for(var n=e,r=0;r1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2];if(!t.length)return n;var r={};r.HEAD=e;for(var o=r,i="HEAD",a=e,c=0;cthis.maxSnapshots&&(this.__snapshots.shift(),this.__snapshotIndex-=1)}},{key:"canUndo",value:function(){return this.__snapshotIndex>0}},{key:"undo",value:function(){if(!this.canUndo())throw new RangeError("no more snapshot available");this.__snapshotIndex-=1,this.__data=this.__snapshots[this.__snapshotIndex]}},{key:"canRedo",value:function(){return this.__snapshotIndex+11&&void 0!==arguments[1]&&arguments[1];return t&&void 0===e.__noflux_id&&Object.defineProperty(e,"__noflux_id",{enumerable:!1,writable:!0,configurable:!0,value:_()}),e.__noflux_id},E=function e(){a(this,e),this.children={},this.subtreeListeners=[],this.ownListeners=[]},k=function(){function e(){a(this,e),this.__tree=new E}return c(e,[{key:"__traverse",value:function(e){var t=e.path,n=e.createEmptyPath,r=void 0!==n&&n,o=e.callbackBeforeRecursion,i=e.callbackAfterRecursion,a=e.callbackAtBottom,c=this.__tree,u=[];u.push(c);for(var s=0;s<=t.length;s+=1){if((s===t.length||!r&&void 0===c.children[t[s]])&&a){a(c,s);break}o&&o(c);var f=t[s];void 0===c.children[f]&&(c.children[f]=new E),c=c.children[f],u.push(c)}if(i)for(;u.length;)i(c=u.pop())}},{key:"addListener",value:function(e,t){var n=this;if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return O(t,!0),this.__traverse({path:e,createEmptyPath:!0,callbackAfterRecursion:function(e){return e.subtreeListeners.push(t)},callbackAtBottom:function(e){return e.ownListeners.push(t)}}),function(){n.removeListener(e,t)}}},{key:"removeListener",value:function(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');this.__traverse({path:e,callbackAfterRecursion:function(e){return g(e.subtreeListeners,t)},callbackAtBottom:function(e){return g(e.ownListeners,t)}})}},{key:"emit",value:function(e,t){var n=[];this.__traverse({path:e,callbackAtBottom:function(t,r){r===e.length&&n.push.apply(n,s(t.subtreeListeners))},callbackAfterRecursion:function(e){e.ownListeners.length&&n.push.apply(n,s(e.ownListeners))}});for(var r={},o=0;o0&&void 0!==arguments[0]?arguments[0]:{},n=t.store,r=void 0===n?new w:n,o=t.cursor,i=void 0===o?[]:o,c=t.emitters,u=void 0===c?{get:new k,set:new k}:c;a(this,e),this.__store=r,this.__cursor=i,this.__emitters=u}return c(e,[{key:"cursor",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=this.__store,r=this.__cursor,o=this.__emitters;return t=p(t),new e({store:n,cursor:r.concat(t),emitters:o})}},{key:"get",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length;if(0!==t)return this.cursor(e).get();var n=this.__store.read(this.__cursor);return this.__emitters.get.emit(this.__cursor,{path:y(this.__cursor),value:n}),n}},{key:"set",value:function(e,t){var n=arguments.length;if(n<1)throw new TypeError("value argument must be set");if(1===n){var r=[void 0,e];e=r[0],t=r[1]}if(void 0!==e)return this.cursor(e).set(t);this.__store.write(this.__cursor,t),this.__emitters.set.emit(this.__cursor,{path:y(this.__cursor),value:t})}},{key:"update",value:function(e,t){var n=arguments.length;if(n<1)throw new TypeError("callback argument must be set");if(1===n){var r=[void 0,e];e=r[0],t=r[1]}if("function"!=typeof t)throw new TypeError("callback argument must be a function");var o=void 0===e?this:this.cursor(e);o.set(t(o.get()))}},{key:"__getEmitterByName",value:function(e){if(!this.__emitters[e])throw new Error("event not allowed");return this.__emitters[e]}},{key:"on",value:function(e,t){return this.__getEmitterByName(e).on(this.__cursor,t)}},{key:"addEventListener",value:function(e,t){return this.on(e,t)}},{key:"off",value:function(e,t){this.__getEmitterByName(e).off(this.__cursor,t)}},{key:"removeEventListener",value:function(e,t){this.off(e,t)}},{key:"snapshot",value:function(){this.__store.snapshot()}},{key:"canUndo",value:function(){return this.__store.canUndo()}},{key:"undo",value:function(){this.__store.undo(),this.__emitters.set.emit([],{path:y([]),value:this.__store.read([])})}},{key:"canRedo",value:function(){return this.__store.canRedo()}},{key:"redo",value:function(){this.__store.redo(),this.__emitters.set.emit([],{path:y([]),value:this.__store.read([])})}},{key:"__arrayOperator",value:function(e,t){var n,r=(n=this.get(),h(n)?[]:[].concat(s(n)));Array.prototype[e].apply(r,t),this.set(r)}},{key:"push",value:function(){for(var e=arguments.length,t=Array(e),n=0;n-1};function z(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e)||""===e)throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function G(e){return"string"!=typeof e&&(e=String(e)),e}function K(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return F&&(t[Symbol.iterator]=function(){return t}),t}function W(e){this.map={},e instanceof W?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function J(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function X(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function Q(e){var t=new FileReader,n=X(t);return t.readAsArrayBuffer(e),n}function Y(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function Z(){return this.bodyUsed=!1,this._initBody=function(e){var t;this.bodyUsed=this.bodyUsed,this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:V&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:M&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:L&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():$&&V&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=Y(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):$&&(ArrayBuffer.prototype.isPrototypeOf(e)||q(e))?this._bodyArrayBuffer=Y(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):L&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},V&&(this.blob=function(){var e=J(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){if(this._bodyArrayBuffer){var e=J(this);return e||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer))}return this.blob().then(Q)}),this.text=function(){var e,t,n,r=J(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=X(t),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(o),!("GET"!==this.method&&"HEAD"!==this.method||"no-store"!==t.cache&&"no-cache"!==t.cache)){var i=/([?&])_=[^&]*/;if(i.test(this.url))this.url=this.url.replace(i,"$1_="+(new Date).getTime());else{this.url+=(/\?/.test(this.url)?"&":"?")+"_="+(new Date).getTime()}}}function ne(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function re(e,t){if(!(this instanceof re))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"",this.headers=new W(t.headers),this.url=t.url||"",this._initBody(e)}te.prototype.clone=function(){return new te(this,{body:this._bodyInit})},Z.call(te.prototype),Z.call(re.prototype),re.prototype.clone=function(){return new re(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new W(this.headers),url:this.url})},re.error=function(){var e=new re(null,{status:0,statusText:""});return e.type="error",e};var oe=[301,302,303,307,308];re.redirect=function(e,t){if(-1===oe.indexOf(t))throw new RangeError("Invalid status code");return new re(null,{status:t,headers:{location:e}})};var ie=N.DOMException;try{new ie}catch(e){(ie=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack}).prototype=Object.create(Error.prototype),ie.prototype.constructor=ie}function ae(e,t){return new Promise((function(n,r){var o=new te(e,t);if(o.signal&&o.signal.aborted)return r(new ie("Aborted","AbortError"));var i=new XMLHttpRequest;function a(){i.abort()}i.onload=function(){var e,t,r={status:i.status,statusText:i.statusText,headers:(e=i.getAllResponseHeaders()||"",t=new W,e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}})),t)};r.url="responseURL"in i?i.responseURL:r.headers.get("X-Request-URL");var o="response"in i?i.response:i.responseText;setTimeout((function(){n(new re(o,r))}),0)},i.onerror=function(){setTimeout((function(){r(new TypeError("Network request failed"))}),0)},i.ontimeout=function(){setTimeout((function(){r(new TypeError("Network request failed"))}),0)},i.onabort=function(){setTimeout((function(){r(new ie("Aborted","AbortError"))}),0)},i.open(o.method,function(e){try{return""===e&&N.location.href?N.location.href:e}catch(t){return e}}(o.url),!0),"include"===o.credentials?i.withCredentials=!0:"omit"===o.credentials&&(i.withCredentials=!1),"responseType"in i&&(V?i.responseType="blob":$&&o.headers.get("Content-Type")&&-1!==o.headers.get("Content-Type").indexOf("application/octet-stream")&&(i.responseType="arraybuffer")),!t||"object"!=typeof t.headers||t.headers instanceof W?o.headers.forEach((function(e,t){i.setRequestHeader(t,e)})):Object.getOwnPropertyNames(t.headers).forEach((function(e){i.setRequestHeader(e,G(t.headers[e]))})),o.signal&&(o.signal.addEventListener("abort",a),i.onreadystatechange=function(){4===i.readyState&&o.signal.removeEventListener("abort",a)}),i.send(void 0===o._bodyInit?null:o._bodyInit)}))}function ce(e,t){console.warn(`action [${e}] <=`,t);return fetch("/__/data/"+e,{method:"POST",body:JSON.stringify(t)}).then(e=>e.json()).then(t=>{if(0===t.state)return console.warn(`action [${e}] =>`,t.model),t.model;throw console.error(`action [${e}] =>`,t.error),console.warn(t.stack),new Error("server error")})}ae.polyfill=!0,N.fetch||(N.fetch=ae,N.Headers=W,N.Request=te,N.Response=re);const ue={scanDevices:async e=>{const t=e;if(t.length>0){const e=t[0];e.selected=!0,await se.findVolumns({device:{name:e.name}})}j.set("devices",t)},lockDevice:e=>{const t=e,n=j.get("devices").map(e=>e.name===t.name?t:e);j.set("devices",n)},unlockDevice:e=>{const t=e,n=j.get("devices").map(e=>e.name===t.name?t:e);j.set("devices",n)},findVolumns:e=>{const t=e;j.set("volumns",t)},findRecords:e=>{const t=e;j.set("records",t)},killRecord:e=>{}},se=new Proxy({},{get:(e,t)=>async e=>{const n=await ce(t,e),r=ue[t];return r&&await r(n),n}}),fe={initialize:function(){j.set({devices:[],volumns:[],records:[]})},raiseQuery:ce,action:se};n(1);function le(e){return o.a.createElement("i",{className:"icon"},e.name)}n(2);function pe(e){var t=e.size,n=e.icon,i=e.children;return o.a.createElement("button",{className:Object(r.cls)("button",t),onClick:e.onClick},o.a.createElement(le,{name:n}),i&&o.a.createElement("span",null,i))}n(3);function ye(e){return(ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function he(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function de(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0&&(t.splice(n,1),this.setState({model:t}))})),function(e){return n.apply(this,arguments)})},{key:"updateItem",value:(t=Ie((function*(e,t){var n=yield l.update(e,t),r=this.state.model,o=r.indexOf(e);o>=0&&(r.splice(o,1,n),this.setState({model:r}))})),function(e,n){return t.apply(this,arguments)})},{key:"reconcileModel",value:function(){var e=this.state.model,t=l.source(),n=[];return e.forEach((function(e){e.$temp&&n.push(e)})),t.forEach((function(t){var r=e.find((function(e){return e[f]===t[f]}));n.push(r||t)})),n}},{key:"render",value:function(){var e=this,t=this.reconcileModel();return o.a.createElement("div",{className:p},a&&o.a.createElement(a,null),t.length>0&&o.a.createElement("ul",null,t.map((function(t){return o.a.createElement(i,{key:t[f]||"temp-".concat(t.$temp),model:t,selected:t.selected,onSelect:function(){return e.selectItem(t)},onRemove:function(){return e.removeItem(t)},onUpdate:function(n){return e.updateItem(t,n)}})}))),c&&o.a.createElement(c,null))}}]),s}(r.Component);return U(y)}function Qe(e){return(Qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ye(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ze(e,t){for(var n=0;n=0&&j.cursor("records").splice(o,1)}));return function(t){return e.apply(this,arguments)}}(),update:function(){var e=Dt((function*(e,t){var n=j.get("devices").find((function(e){return e.selected})),r=j.get("volumns").find((function(e){return e.selected})),o=function(e){for(var t=1;t0?o.a.createElement("div",null,o.a.createElement("h1",null,"danger"),o.a.createElement("p",null,"your device is broken")):o.a.createElement("div",null,o.a.createElement("h1",null,"create secret"),o.a.createElement("input",{type:"password",value:r.code,onChange:function(e){return t.changeInput("code",e.target.value)},onKeyUp:function(n){return t.handleEnter(n.keyCode,(function(){return t.lockDevice(e)}))}}),o.a.createElement(pe,{onClick:function(){return t.randomCode()}},"random"))}},{key:"renderAccessPanel",value:function(e){var t=this,n=this.state,r=n.input;return n.error,o.a.createElement("div",null,o.a.createElement("h1",null,"verify secret"),o.a.createElement("input",{type:"password",value:r.code,onChange:function(e){return t.changeInput("code",e.target.value)},onKeyUp:function(n){return t.handleEnter(n.keyCode,(function(){return t.unlockDevice(e)}))}}))}},{key:"render",value:function(){var e=j.get("devices").find((function(e){return e.selected})),t=!e||!e.secure.secret||e.secure.locked;return o.a.createElement("div",{className:Object(r.cls)("access-mask",!t&&"hide")},e&&e.secure.secret?this.renderAccessPanel(e):this.renderSecretPanel(e))}}])&&zt(t.prototype,n),i&&zt(t,i),s}(r.Component),Qt=U(Xt);n(8);function Yt(e){return(Yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Zt(e,t){for(var n=0;n0&&(e=t[r[0]])}window.epii.entry=e}else console.error("settle-loader error :: __webpack_exports__ not found");n(9)}()}]); \ No newline at end of file diff --git a/model/package.json b/model/package.json new file mode 100644 index 0000000..77b858b --- /dev/null +++ b/model/package.json @@ -0,0 +1,19 @@ +{ + "name": "@voram/keyroll", + "version": "0.1.0", + "description": "A low-level secure key-value storage.", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/voram/keyroll.git" + }, + "author": "Sartrey Lee", + "license": "MIT", + "bugs": { + "url": "https://github.com/voram/keyroll/issues" + }, + "homepage": "https://github.com/voram/keyroll#readme" +} diff --git a/.gitignore b/views/.gitignore similarity index 100% rename from .gitignore rename to views/.gitignore diff --git a/.npmignore b/views/.npmignore similarity index 100% rename from .npmignore rename to views/.npmignore diff --git a/views/README.md b/views/README.md new file mode 100644 index 0000000..7abc9dd --- /dev/null +++ b/views/README.md @@ -0,0 +1,32 @@ +# keyroll + +`keyroll` is a secure key-value storage toolkit. + +## Usage + +### install as global dependency + +`npm install -g keyroll` + +### start server anywhere + +```sh +# serve ~/.keyroll at 9988 +keyroll + +# serve ~/.keyroll at 8080 +keyroll --port=8080 + +# fork server +keyroll fork + +# stop server +keyroll stop + +# show help +keyroll help +``` + +### access homepage + +`http://localhost:YOUR-PORT` \ No newline at end of file diff --git a/views/ROADMAP.md b/views/ROADMAP.md new file mode 100644 index 0000000..d15e167 --- /dev/null +++ b/views/ROADMAP.md @@ -0,0 +1,25 @@ +# Keyroll Roadmap + +## Milestone 0 +1. single local storage for single user (done) +2. data model (done) +3. project boilerplate from firecell (done) + +## Milestone 1 +1. secure filter for data request +2. password + +## Milestone 2 +1. extensible data schema + +## Milestone 3 +1. custom local storage devices +2. usb devices + +## Milestone 4 +1. backup and recovery at external storage or cloud like google or onedrive + +## Milestone 5 +1. biometric - human face +2. biometric - voice code +3. biometric - finger print diff --git a/bin/guide.txt b/views/bin/guide.txt similarity index 100% rename from bin/guide.txt rename to views/bin/guide.txt diff --git a/bin/keyroll b/views/bin/keyroll similarity index 100% rename from bin/keyroll rename to views/bin/keyroll diff --git a/build.js b/views/build.js similarity index 100% rename from build.js rename to views/build.js diff --git a/index.js b/views/index.js similarity index 100% rename from index.js rename to views/index.js diff --git a/lib/client/assets/MaterialIcons-Regular.woff2 b/views/lib/client/assets/MaterialIcons-Regular.woff2 similarity index 100% rename from lib/client/assets/MaterialIcons-Regular.woff2 rename to views/lib/client/assets/MaterialIcons-Regular.woff2 diff --git a/lib/client/assets/codepoints b/views/lib/client/assets/codepoints similarity index 100% rename from lib/client/assets/codepoints rename to views/lib/client/assets/codepoints diff --git a/lib/client/assets/react-dom.development.js b/views/lib/client/assets/react-dom.development.js similarity index 100% rename from lib/client/assets/react-dom.development.js rename to views/lib/client/assets/react-dom.development.js diff --git a/lib/client/assets/react-dom.production.min.js b/views/lib/client/assets/react-dom.production.min.js similarity index 100% rename from lib/client/assets/react-dom.production.min.js rename to views/lib/client/assets/react-dom.production.min.js diff --git a/lib/client/assets/react.development.js b/views/lib/client/assets/react.development.js similarity index 100% rename from lib/client/assets/react.development.js rename to views/lib/client/assets/react.development.js diff --git a/lib/client/assets/react.production.min.js b/views/lib/client/assets/react.production.min.js similarity index 100% rename from lib/client/assets/react.production.min.js rename to views/lib/client/assets/react.production.min.js diff --git a/lib/client/component/AccessMask.jsx b/views/lib/client/component/AccessMask.jsx similarity index 100% rename from lib/client/component/AccessMask.jsx rename to views/lib/client/component/AccessMask.jsx diff --git a/lib/client/component/AccessMask.scss b/views/lib/client/component/AccessMask.scss similarity index 100% rename from lib/client/component/AccessMask.scss rename to views/lib/client/component/AccessMask.scss diff --git a/lib/client/component/DeviceList.jsx b/views/lib/client/component/DeviceList.jsx similarity index 100% rename from lib/client/component/DeviceList.jsx rename to views/lib/client/component/DeviceList.jsx diff --git a/lib/client/component/DeviceList.scss b/views/lib/client/component/DeviceList.scss similarity index 100% rename from lib/client/component/DeviceList.scss rename to views/lib/client/component/DeviceList.scss diff --git a/lib/client/component/RecordList.jsx b/views/lib/client/component/RecordList.jsx similarity index 100% rename from lib/client/component/RecordList.jsx rename to views/lib/client/component/RecordList.jsx diff --git a/lib/client/component/RecordList.scss b/views/lib/client/component/RecordList.scss similarity index 100% rename from lib/client/component/RecordList.scss rename to views/lib/client/component/RecordList.scss diff --git a/lib/client/component/RecordListItem.jsx b/views/lib/client/component/RecordListItem.jsx similarity index 100% rename from lib/client/component/RecordListItem.jsx rename to views/lib/client/component/RecordListItem.jsx diff --git a/lib/client/component/VolumnList.jsx b/views/lib/client/component/VolumnList.jsx similarity index 100% rename from lib/client/component/VolumnList.jsx rename to views/lib/client/component/VolumnList.jsx diff --git a/lib/client/component/VolumnList.scss b/views/lib/client/component/VolumnList.scss similarity index 100% rename from lib/client/component/VolumnList.scss rename to views/lib/client/component/VolumnList.scss diff --git a/lib/client/component/VolumnListItem.jsx b/views/lib/client/component/VolumnListItem.jsx similarity index 100% rename from lib/client/component/VolumnListItem.jsx rename to views/lib/client/component/VolumnListItem.jsx diff --git a/lib/client/component/design/Button.jsx b/views/lib/client/component/design/Button.jsx similarity index 100% rename from lib/client/component/design/Button.jsx rename to views/lib/client/component/design/Button.jsx diff --git a/lib/client/component/design/Button.scss b/views/lib/client/component/design/Button.scss similarity index 100% rename from lib/client/component/design/Button.scss rename to views/lib/client/component/design/Button.scss diff --git a/lib/client/component/design/Icon.jsx b/views/lib/client/component/design/Icon.jsx similarity index 100% rename from lib/client/component/design/Icon.jsx rename to views/lib/client/component/design/Icon.jsx diff --git a/lib/client/component/design/Icon.scss b/views/lib/client/component/design/Icon.scss similarity index 100% rename from lib/client/component/design/Icon.scss rename to views/lib/client/component/design/Icon.scss diff --git a/lib/client/component/design/Input.jsx b/views/lib/client/component/design/Input.jsx similarity index 100% rename from lib/client/component/design/Input.jsx rename to views/lib/client/component/design/Input.jsx diff --git a/lib/client/component/design/Input.scss b/views/lib/client/component/design/Input.scss similarity index 100% rename from lib/client/component/design/Input.scss rename to views/lib/client/component/design/Input.scss diff --git a/lib/client/component/design/index.js b/views/lib/client/component/design/index.js similarity index 100% rename from lib/client/component/design/index.js rename to views/lib/client/component/design/index.js diff --git a/lib/client/component/higher/editable.jsx b/views/lib/client/component/higher/editable.jsx similarity index 100% rename from lib/client/component/higher/editable.jsx rename to views/lib/client/component/higher/editable.jsx diff --git a/lib/client/index.jsx b/views/lib/client/index.jsx similarity index 100% rename from lib/client/index.jsx rename to views/lib/client/index.jsx diff --git a/lib/client/index.scss b/views/lib/client/index.scss similarity index 100% rename from lib/client/index.scss rename to views/lib/client/index.scss diff --git a/lib/client/store.js b/views/lib/client/store.js similarity index 100% rename from lib/client/store.js rename to views/lib/client/store.js diff --git a/lib/kernel/Device.js b/views/lib/kernel/Device.js similarity index 100% rename from lib/kernel/Device.js rename to views/lib/kernel/Device.js diff --git a/lib/kernel/Record.js b/views/lib/kernel/Record.js similarity index 100% rename from lib/kernel/Record.js rename to views/lib/kernel/Record.js diff --git a/lib/kernel/Secure.js b/views/lib/kernel/Secure.js similarity index 100% rename from lib/kernel/Secure.js rename to views/lib/kernel/Secure.js diff --git a/lib/kernel/Volumn.js b/views/lib/kernel/Volumn.js similarity index 100% rename from lib/kernel/Volumn.js rename to views/lib/kernel/Volumn.js diff --git a/lib/kernel/index.js b/views/lib/kernel/index.js similarity index 100% rename from lib/kernel/index.js rename to views/lib/kernel/index.js diff --git a/lib/server/editRecord.js b/views/lib/server/editRecord.js similarity index 100% rename from lib/server/editRecord.js rename to views/lib/server/editRecord.js diff --git a/lib/server/editVolumn.js b/views/lib/server/editVolumn.js similarity index 100% rename from lib/server/editVolumn.js rename to views/lib/server/editVolumn.js diff --git a/lib/server/findRecord.js b/views/lib/server/findRecord.js similarity index 100% rename from lib/server/findRecord.js rename to views/lib/server/findRecord.js diff --git a/lib/server/findRecords.js b/views/lib/server/findRecords.js similarity index 100% rename from lib/server/findRecords.js rename to views/lib/server/findRecords.js diff --git a/lib/server/findVolumns.js b/views/lib/server/findVolumns.js similarity index 100% rename from lib/server/findVolumns.js rename to views/lib/server/findVolumns.js diff --git a/lib/server/killRecord.js b/views/lib/server/killRecord.js similarity index 100% rename from lib/server/killRecord.js rename to views/lib/server/killRecord.js diff --git a/lib/server/killVolumn.js b/views/lib/server/killVolumn.js similarity index 100% rename from lib/server/killVolumn.js rename to views/lib/server/killVolumn.js diff --git a/lib/server/lockDevice.js b/views/lib/server/lockDevice.js similarity index 100% rename from lib/server/lockDevice.js rename to views/lib/server/lockDevice.js diff --git a/lib/server/scanDevices.js b/views/lib/server/scanDevices.js similarity index 100% rename from lib/server/scanDevices.js rename to views/lib/server/scanDevices.js diff --git a/lib/server/unlockDevice.js b/views/lib/server/unlockDevice.js similarity index 100% rename from lib/server/unlockDevice.js rename to views/lib/server/unlockDevice.js diff --git a/lib/static/assets/MaterialIcons-Regular.woff2 b/views/lib/static/assets/MaterialIcons-Regular.woff2 similarity index 100% rename from lib/static/assets/MaterialIcons-Regular.woff2 rename to views/lib/static/assets/MaterialIcons-Regular.woff2 diff --git a/lib/static/assets/react-dom.development.js b/views/lib/static/assets/react-dom.development.js similarity index 100% rename from lib/static/assets/react-dom.development.js rename to views/lib/static/assets/react-dom.development.js diff --git a/lib/static/assets/react-dom.production.min.js b/views/lib/static/assets/react-dom.production.min.js similarity index 100% rename from lib/static/assets/react-dom.production.min.js rename to views/lib/static/assets/react-dom.production.min.js diff --git a/lib/static/assets/react.development.js b/views/lib/static/assets/react.development.js similarity index 100% rename from lib/static/assets/react.development.js rename to views/lib/static/assets/react.development.js diff --git a/lib/static/assets/react.production.min.js b/views/lib/static/assets/react.production.min.js similarity index 100% rename from lib/static/assets/react.production.min.js rename to views/lib/static/assets/react.production.min.js diff --git a/lib/static/index.css b/views/lib/static/index.css similarity index 99% rename from lib/static/index.css rename to views/lib/static/index.css index 333e0a7..ec50449 100644 --- a/lib/static/index.css +++ b/views/lib/static/index.css @@ -341,3 +341,5 @@ ul { position: relative; } + +/*# sourceMappingURL=index.css.map*/ \ No newline at end of file diff --git a/views/lib/static/index.css.map b/views/lib/static/index.css.map new file mode 100644 index 0000000..dffdc41 --- /dev/null +++ b/views/lib/static/index.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///Icon.scss","webpack:///Button.scss","webpack:///Input.scss","webpack:///DeviceList.scss","webpack:///VolumnList.scss","webpack:///RecordList.scss","webpack:///AccessMask.scss","webpack:///index.scss"],"names":[],"mappings":"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","file":"index.css","sourcesContent":["@font-face {\n font-family: 'Material Icons';\n font-style: normal;\n font-weight: 400;\n src: local('Material Icons'),\n local('MaterialIcons-Regular'),\n url(assets/MaterialIcons-Regular.woff2) format('woff2');\n}\n\n.icon {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n display: inline-block;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n\n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n}\n",".button {\n border: 1px solid #ccc;\n border-radius: .3rem;\n text-align: left;\n outline: none;\n line-height: 1.5rem;\n background: #f3f3f3;\n transition: .2s;\n\n &:hover {\n background: #fff;\n cursor: pointer;\n }\n\n > * {\n vertical-align: top;\n }\n\n i {\n font-size: 1.5rem;\n }\n\n span {\n margin: 0 .25rem;\n font-size: 1.1rem;\n }\n\n &.small {\n line-height: 1rem;\n\n i {\n font-size: 1rem;\n }\n\n span {\n font-size: .9rem;\n }\n }\n}",".input {\n box-sizing: border-box;\n width: 100%;\n padding: .5rem;\n border: 1px solid #ccc;\n border-radius: .3rem;\n outline: none;\n transition: .2s;\n\n &:hover {\n border-color: #999;\n }\n\n &:focus {\n border-color: #666;\n }\n}",".device-list {\n ul {\n li {\n display: flex;\n box-sizing: border-box;\n margin-left: .75rem;\n padding: .5rem .7rem;\n border-right: 1px solid #eee;\n border-radius: .3rem 0 0 .3rem;\n color: #01579B;\n background: #fff;\n cursor: pointer;\n\n span {\n flex: 1;\n }\n\n .icon {\n line-height: 1.5rem;\n }\n }\n }\n}",".volumn-list {\n background: #f6f6f6;\n border-right: 1px solid #ccc;\n overflow: hidden;\n display: flex;\n width: 20rem;\n height: 100%;\n flex-direction: column;\n\n .header {\n display: flex;\n flex-direction: row;\n padding: .5rem;\n border-bottom: 1px solid #ddd;\n\n button {\n margin-left: .5rem;\n padding: 0 .5rem;\n\n i {\n font-size: 1.2rem;\n }\n }\n }\n\n .viewer {\n display: flex;\n flex-direction: row;\n\n .logo {\n width: 3.5rem;\n height: 3.5rem;\n border-radius: .5rem;\n background: #ddd;\n }\n\n .info {\n flex: 1;\n margin-left: .5rem;\n\n .action {\n margin-top: .2rem;\n padding-top: .3rem;\n\n .button {\n margin-right: .5rem;\n padding: 0 .5rem;\n border-color: transparent;\n border-radius: .3rem;\n }\n }\n }\n }\n\n ul {\n flex: 1;\n overflow: auto;\n background: #f3f3f3;\n }\n\n li {\n padding: .5rem;\n border-bottom: 1px solid #eee;\n background: #fcfcfc;\n transition: .3s;\n\n &:hover {\n background: #f6f6f6;\n }\n\n &.empty {\n padding: .5rem;\n text-align: center;\n }\n\n &.active {\n color: #fff;\n background: #0277BD;\n }\n }\n}\n\n.input-volumn {\n input {\n margin-bottom: .5rem;\n }\n}",".record-list {\n flex: 1;\n height: 100%;\n overflow: auto;\n\n .header {\n margin: .75rem;\n\n > .detail {\n display: flex;\n flex-direction: row;\n margin-bottom: .75rem;\n\n .logo {\n width: 6rem;\n height: 6rem;\n border-radius: 1rem;\n background: #ddd;\n }\n \n .info {\n margin-left: .5rem;\n } \n }\n\n > .action {\n .button {\n padding: .5rem; \n }\n }\n }\n\n ul {\n margin: .75rem;\n border: 1px solid #ddd;\n border-radius: .75rem;\n }\n\n li {\n padding: .5rem .75rem;\n border-bottom: 1px solid #ccc;\n background: #fcfcfc;\n transition: .3s cubic-bezier(0.33, 1, 0.68, 1);\n\n &:first-of-type {\n border-radius: .75rem .75rem 0 0;\n }\n\n &:last-of-type {\n border-radius: 0 0 .75rem .75rem;\n border: none;\n }\n\n &:only-of-type {\n border-radius: .75rem;\n }\n\n &:hover {\n background: #f3f3f3;\n }\n }\n\n .record-viewer {\n .field-name {\n color: #999;\n font-size: .8rem;\n }\n\n .field-value {\n }\n }\n}",".access-mask {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: #0277BD;\n\n > div {\n width: 20rem;\n margin: 25vh auto 0;\n color: #fff;\n\n h1 {\n font-size: 1.5rem;\n font-weight: normal;\n color: #fff;\n text-shadow: 0 0 1px #333;\n }\n\n input {\n display: block;\n font-size: 1.5rem;\n box-sizing: border-box;\n width: 100%;\n margin: .5rem 0 .6rem;\n padding: .5rem;\n border: 2px solid #01579B;\n border-radius: .5rem;\n text-align: center;\n outline: none;\n color: #333;\n }\n }\n}","* {\n margin: 0;\n padding: 0;\n}\n\nhtml, body, div#app {\n height: 100vh;\n overflow: hidden;\n}\n\nhtml {\n font-size: 14px;\n}\n\nbody {\n background: #f6f6f6;\n}\n\nul {\n padding: 0;\n list-style: none;\n}\n\n.hide {\n display: none;\n}\n\n.container {\n min-width: 60rem;\n height: 100%;\n display: flex;\n flex-direction: row;\n\n h1 {\n font-size: 1.1rem;\n }\n}\n\n.side {\n width: 16rem;\n height: 100%;\n overflow: auto;\n background: #01579B;\n box-shadow: inset -1px 0 3px rgba(0,75,100,.5);\n\n .header {\n height: auto;\n padding: .75rem 1rem;\n line-height: 1.8rem;\n \n h1 {\n color: #fff;\n }\n }\n}\n\n.main {\n display: flex;\n flex: 1;\n height: 100%;\n position: relative;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/views/lib/static/index.js b/views/lib/static/index.js new file mode 100644 index 0000000..af95e89 --- /dev/null +++ b/views/lib/static/index.js @@ -0,0 +1,3497 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./lib/client/index.jsx"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./lib/client/component/AccessMask.jsx": +/*!*********************************************!*\ + !*** ./lib/client/component/AccessMask.jsx ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _noflux_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noflux/react */ "./node_modules/@noflux/react/dist/noflux-react.es.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store */ "./lib/client/store.js"); +/* harmony import */ var _design__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./design */ "./lib/client/component/design/index.js"); +/* harmony import */ var _AccessMask_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AccessMask.scss */ "./lib/client/component/AccessMask.scss"); +/* harmony import */ var _AccessMask_scss__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_AccessMask_scss__WEBPACK_IMPORTED_MODULE_4__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + + + + + + +var AccessMask = /*#__PURE__*/function (_Component) { + _inherits(AccessMask, _Component); + + var _super = _createSuper(AccessMask); + + function AccessMask(props) { + var _this; + + _classCallCheck(this, AccessMask); + + _this = _super.call(this, props); + _this.state = { + input: { + code: '' + }, + error: null + }; + return _this; + } + + _createClass(AccessMask, [{ + key: "changeInput", + value: function changeInput(key, value) { + var input = this.state.input; + input[key] = value; + this.setState({ + input: input + }); + } + }, { + key: "handleEnter", + value: function handleEnter(key, action) { + if (key === 13) action(); + } + }, { + key: "randomCode", + value: function randomCode() { + throw new Error('not support'); + } + }, { + key: "lockDevice", + value: function lockDevice(device) { + var _this2 = this; + + var input = this.state.input; + return _store__WEBPACK_IMPORTED_MODULE_2__["action"].lockDevice({ + device: { + name: device.name, + code: input.code + } + }).then(function () {})["catch"](function (error) { + _this2.setState({ + error: error.code + }); + }); + } + }, { + key: "unlockDevice", + value: function () { + var _unlockDevice = _asyncToGenerator(function* (device) { + var input = this.state.input; + device = yield _store__WEBPACK_IMPORTED_MODULE_2__["action"].unlockDevice({ + device: { + name: device.name, + code: input.code + } + }); + device.selected = true; + var devices = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('devices').map(function (e) { + return e.name === device.name ? device : e; + }); + _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].set('devices', devices); + input.code = ''; + this.setState({ + input: input + }); + }); + + function unlockDevice(_x) { + return _unlockDevice.apply(this, arguments); + } + + return unlockDevice; + }() + }, { + key: "renderSecretPanel", + value: function renderSecretPanel(device) { + var _this3 = this; + + var _this$state = this.state, + input = _this$state.input, + error = _this$state.error; + if (!device) return; + + if (!device.secure.secret && device.size > 0) { + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", null, "danger"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, "your device is broken")); + } + + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", null, "create secret"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { + type: "password", + value: input.code, + onChange: function onChange(e) { + return _this3.changeInput('code', e.target.value); + }, + onKeyUp: function onKeyUp(e) { + return _this3.handleEnter(e.keyCode, function () { + return _this3.lockDevice(device); + }); + } + }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_3__["Button"], { + onClick: function onClick() { + return _this3.randomCode(); + } + }, "random")); + } + }, { + key: "renderAccessPanel", + value: function renderAccessPanel(device) { + var _this4 = this; + + var _this$state2 = this.state, + input = _this$state2.input, + error = _this$state2.error; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", null, "verify secret"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { + type: "password", + value: input.code, + onChange: function onChange(e) { + return _this4.changeInput('code', e.target.value); + }, + onKeyUp: function onKeyUp(e) { + return _this4.handleEnter(e.keyCode, function () { + return _this4.unlockDevice(device); + }); + } + })); + } + }, { + key: "render", + value: function render() { + var devices = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('devices'); + var currentDevice = devices.find(function (e) { + return e.selected; + }); + var willBlockAccess = !currentDevice || !currentDevice.secure.secret || currentDevice.secure.locked; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: Object(react__WEBPACK_IMPORTED_MODULE_0__["cls"])('access-mask', !willBlockAccess && 'hide') + }, currentDevice && currentDevice.secure.secret ? this.renderAccessPanel(currentDevice) : this.renderSecretPanel(currentDevice)); + } + }]); + + return AccessMask; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_noflux_react__WEBPACK_IMPORTED_MODULE_1__["connect"])(AccessMask)); + +/***/ }), + +/***/ "./lib/client/component/AccessMask.scss": +/*!**********************************************!*\ + !*** ./lib/client/component/AccessMask.scss ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./lib/client/component/DeviceList.jsx": +/*!*********************************************!*\ + !*** ./lib/client/component/DeviceList.jsx ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _noflux_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noflux/react */ "./node_modules/@noflux/react/dist/noflux-react.es.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store */ "./lib/client/store.js"); +/* harmony import */ var _design__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./design */ "./lib/client/component/design/index.js"); +/* harmony import */ var _DeviceList_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DeviceList.scss */ "./lib/client/component/DeviceList.scss"); +/* harmony import */ var _DeviceList_scss__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_DeviceList_scss__WEBPACK_IMPORTED_MODULE_4__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + + + + + + +var DeviceList = /*#__PURE__*/function (_Component) { + _inherits(DeviceList, _Component); + + var _super = _createSuper(DeviceList); + + function DeviceList() { + _classCallCheck(this, DeviceList); + + return _super.apply(this, arguments); + } + + _createClass(DeviceList, [{ + key: "componentDidMount", + value: function () { + var _componentDidMount = _asyncToGenerator(function* () { + yield _store__WEBPACK_IMPORTED_MODULE_2__["action"].scanDevices(); + }); + + function componentDidMount() { + return _componentDidMount.apply(this, arguments); + } + + return componentDidMount; + }() + }, { + key: "lockDevice", + value: function () { + var _lockDevice = _asyncToGenerator(function* (device) { + if (device.secure.locked) return; + device = yield _store__WEBPACK_IMPORTED_MODULE_2__["action"].lockDevice({ + device: { + name: device.name + } + }); + device.selected = true; + var devices = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('devices').map(function (e) { + return e.name === device.name ? device : e; + }); + _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].set('devices', devices); + }); + + function lockDevice(_x) { + return _lockDevice.apply(this, arguments); + } + + return lockDevice; + }() + }, { + key: "render", + value: function render() { + var _this = this; + + var devices = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('devices'); + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "device-list" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("ul", null, devices.map(function (device) { + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("li", { + key: device.name, + onClick: function onClick() { + return _this.lockDevice(device); + } + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", null, device.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_3__["Icon"], { + name: device.secure.locked ? 'lock' : 'lock_open' + })); + }))); + } + }]); + + return DeviceList; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_noflux_react__WEBPACK_IMPORTED_MODULE_1__["connect"])(DeviceList)); + +/***/ }), + +/***/ "./lib/client/component/DeviceList.scss": +/*!**********************************************!*\ + !*** ./lib/client/component/DeviceList.scss ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./lib/client/component/RecordList.jsx": +/*!*********************************************!*\ + !*** ./lib/client/component/RecordList.jsx ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _higher_editable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./higher/editable */ "./lib/client/component/higher/editable.jsx"); +/* harmony import */ var _design__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./design */ "./lib/client/component/design/index.js"); +/* harmony import */ var _RecordListItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./RecordListItem */ "./lib/client/component/RecordListItem.jsx"); +/* harmony import */ var _noflux_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @noflux/react */ "./node_modules/@noflux/react/dist/noflux-react.es.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../store */ "./lib/client/store.js"); +/* harmony import */ var _RecordList_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./RecordList.scss */ "./lib/client/component/RecordList.scss"); +/* harmony import */ var _RecordList_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_RecordList_scss__WEBPACK_IMPORTED_MODULE_6__); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + + + + + + + + +var RecordListHeader = /*#__PURE__*/function (_Component) { + _inherits(RecordListHeader, _Component); + + var _super = _createSuper(RecordListHeader); + + function RecordListHeader() { + _classCallCheck(this, RecordListHeader); + + return _super.apply(this, arguments); + } + + _createClass(RecordListHeader, [{ + key: "render", + value: function render() { + var _this = this; + + var volumn = _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].get('volumns').find(function (e) { + return e.selected; + }); + console.log('volumn', volumn); + + if (!volumn) { + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "header" + }, "empty"); + } + + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "header" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "detail" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "logo" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "info" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", null, volumn.name))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "action" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_2__["Button"], { + icon: "add", + onClick: function onClick() { + return _this.parent.createItem(); + } + }, "add record"))); + } + }]); + + return RecordListHeader; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_higher_editable__WEBPACK_IMPORTED_MODULE_1__["createEditableList"])([_RecordListItem__WEBPACK_IMPORTED_MODULE_3__["default"], Object(_noflux_react__WEBPACK_IMPORTED_MODULE_4__["connect"])(RecordListHeader)], { + entityName: 'record', + entityKey: 'id', + dataSource: { + source: function source() { + return _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].get('records'); + }, + select: function select() {}, + "delete": function () { + var _delete2 = _asyncToGenerator(function* (item) { + var device = _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].get('devices').find(function (e) { + return e.selected; + }); + var volumn = _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].get('volumns').find(function (e) { + return e.selected; + }); + var records = _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].get('records'); + yield _store__WEBPACK_IMPORTED_MODULE_5__["action"].killRecord({ + device: { + name: device.name + }, + volumn: { + name: volumn.name + }, + record: { + id: item.id + } + }); + var index = records.findIndex(function (e) { + return e.id === item.id; + }); + + if (index >= 0) { + _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].cursor('records').splice(index, 1); + } + }); + + function _delete(_x) { + return _delete2.apply(this, arguments); + } + + return _delete; + }(), + update: function () { + var _update = _asyncToGenerator(function* (item, next) { + var device = _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].get('devices').find(function (e) { + return e.selected; + }); + var volumn = _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].get('volumns').find(function (e) { + return e.selected; + }); + + var record = _objectSpread({}, next); + + if (item.$temp) { + record.id = undefined; + } + + yield _store__WEBPACK_IMPORTED_MODULE_5__["action"].editRecord({ + device: { + name: device.name + }, + volumn: { + name: volumn.name + }, + record: record + }).then(function (result) { + record.id = result.id; // todo - show value ? + }); + + if (item.$temp) { + _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].cursor('records').push(record); + } else { + var records = _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].get('records'); + var index = records.findIndex(function (e) { + return e.id === item.id; + }); + _noflux_react__WEBPACK_IMPORTED_MODULE_4__["state"].cursor('records').splice(index, 1, record); + } + + return next; + }); + + function update(_x2, _x3) { + return _update.apply(this, arguments); + } + + return update; + }() + } +})); + +/***/ }), + +/***/ "./lib/client/component/RecordList.scss": +/*!**********************************************!*\ + !*** ./lib/client/component/RecordList.scss ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./lib/client/component/RecordListItem.jsx": +/*!*************************************************!*\ + !*** ./lib/client/component/RecordListItem.jsx ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _design__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./design */ "./lib/client/component/design/index.js"); +/* harmony import */ var _higher_editable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./higher/editable */ "./lib/client/component/higher/editable.jsx"); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + + + + +var RecordEditor = /*#__PURE__*/function (_Component) { + _inherits(RecordEditor, _Component); + + var _super = _createSuper(RecordEditor); + + function RecordEditor() { + _classCallCheck(this, RecordEditor); + + return _super.apply(this, arguments); + } + + _createClass(RecordEditor, [{ + key: "render", + value: function render() { + var _this$props = this.props, + model = _this$props.model, + input = _this$props.input, + _onChange = _this$props.onChange, + onUpdate = _this$props.onUpdate, + onCancel = _this$props.onCancel; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Input"], { + placeholder: "name", + defaultValue: model.name, + onChange: function onChange(e) { + return _onChange('name', e.target.value); + } + }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Input"], { + placeholder: "value", + defaultValue: model.value, + onChange: function onChange(e) { + return _onChange('value', e.target.value); + } + }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { + type: "checkbox", + checked: input.seal, + onChange: function onChange(e) { + return _onChange('seal', e.target.checked); + } + }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Button"], { + icon: "save", + onClick: onUpdate + }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Button"], { + icon: "close", + onClick: onCancel + }))); + } + }]); + + return RecordEditor; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + +var RecordViewer = /*#__PURE__*/function (_Component2) { + _inherits(RecordViewer, _Component2); + + var _super2 = _createSuper(RecordViewer); + + function RecordViewer(props) { + var _this; + + _classCallCheck(this, RecordViewer); + + _this = _super2.call(this, props); + _this.state = { + model: { + unsealedValue: false + } + }; + return _this; + } + + _createClass(RecordViewer, [{ + key: "render", + value: function render() { + var _this$props2 = this.props, + model = _this$props2.model, + onActive = _this$props2.onActive, + onRemove = _this$props2.onRemove, + onSelect = _this$props2.onSelect; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "record-viewer", + onClick: onSelect + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "field-name" + }, model.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, "type = ", model.type), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "field-value" + }, model.seal ? this.state.model.unsealedValue && '***' : model.value), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Button"], { + icon: "edit", + onClick: onActive + }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Button"], { + icon: "delete", + onClick: onRemove + })); + } + }]); + + return RecordViewer; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_higher_editable__WEBPACK_IMPORTED_MODULE_2__["createEditableListItem"])([RecordEditor, RecordViewer], { + entityName: 'record' +})); + +/***/ }), + +/***/ "./lib/client/component/VolumnList.jsx": +/*!*********************************************!*\ + !*** ./lib/client/component/VolumnList.jsx ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _noflux_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noflux/react */ "./node_modules/@noflux/react/dist/noflux-react.es.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store */ "./lib/client/store.js"); +/* harmony import */ var _higher_editable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./higher/editable */ "./lib/client/component/higher/editable.jsx"); +/* harmony import */ var _design__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./design */ "./lib/client/component/design/index.js"); +/* harmony import */ var _VolumnListItem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./VolumnListItem */ "./lib/client/component/VolumnListItem.jsx"); +/* harmony import */ var _VolumnList_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./VolumnList.scss */ "./lib/client/component/VolumnList.scss"); +/* harmony import */ var _VolumnList_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_VolumnList_scss__WEBPACK_IMPORTED_MODULE_6__); +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + + + + + + + + +var VolumnListHeader = /*#__PURE__*/function (_Component) { + _inherits(VolumnListHeader, _Component); + + var _super = _createSuper(VolumnListHeader); + + function VolumnListHeader() { + _classCallCheck(this, VolumnListHeader); + + return _super.apply(this, arguments); + } + + _createClass(VolumnListHeader, [{ + key: "render", + value: function render() { + var _this = this; + + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "header" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_4__["Input"], { + onChange: function onChange(e) { + return _this.filterVolumn(e.target.value); + } + }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_4__["Button"], { + icon: "add", + onClick: function onClick() { + return _this.parent.createItem(); + } + })); + } + }]); + + return VolumnListHeader; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_higher_editable__WEBPACK_IMPORTED_MODULE_3__["createEditableList"])([_VolumnListItem__WEBPACK_IMPORTED_MODULE_5__["default"], VolumnListHeader], { + entityName: 'volumn', + entityKey: 'name', + dataSource: { + source: function source() { + return _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('volumns'); + }, + select: function () { + var _select = _asyncToGenerator(function* (item) { + var volumns = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('volumns').map(function (e) { + if (e.name === item.name) { + item.selected = true; + return item; + } + + e.selected = false; + return e; + }); + _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].set('volumns', volumns); + var device = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('devices').find(function (e) { + return e.selected; + }); + yield _store__WEBPACK_IMPORTED_MODULE_2__["action"].findRecords({ + device: { + name: device.name + }, + volumn: { + name: item.name + } + }); + }); + + function select(_x) { + return _select.apply(this, arguments); + } + + return select; + }(), + "delete": function () { + var _delete2 = _asyncToGenerator(function* (item) { + var device = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('devices').find(function (e) { + return e.selected; + }); + yield _store__WEBPACK_IMPORTED_MODULE_2__["action"].killVolumn({ + device: { + name: device.name + }, + volumn: { + name: item.name + } + }); + yield _store__WEBPACK_IMPORTED_MODULE_2__["action"].findVolumns({ + device: { + name: device.name + } + }); + }); + + function _delete(_x2) { + return _delete2.apply(this, arguments); + } + + return _delete; + }(), + update: function () { + var _update = _asyncToGenerator(function* (item, next) { + var device = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('devices').find(function (e) { + return e.selected; + }); + yield _store__WEBPACK_IMPORTED_MODULE_2__["action"].editVolumn({ + device: { + name: device.name + }, + volumn: next + }); + yield _store__WEBPACK_IMPORTED_MODULE_2__["action"].findVolumns({ + device: { + name: device.name + } + }); + return next; + }); + + function update(_x3, _x4) { + return _update.apply(this, arguments); + } + + return update; + }() + } +})); + +/***/ }), + +/***/ "./lib/client/component/VolumnList.scss": +/*!**********************************************!*\ + !*** ./lib/client/component/VolumnList.scss ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./lib/client/component/VolumnListItem.jsx": +/*!*************************************************!*\ + !*** ./lib/client/component/VolumnListItem.jsx ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _design__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./design */ "./lib/client/component/design/index.js"); +/* harmony import */ var _higher_editable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./higher/editable */ "./lib/client/component/higher/editable.jsx"); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + + + + +var VolumnEditor = /*#__PURE__*/function (_Component) { + _inherits(VolumnEditor, _Component); + + var _super = _createSuper(VolumnEditor); + + function VolumnEditor() { + _classCallCheck(this, VolumnEditor); + + return _super.apply(this, arguments); + } + + _createClass(VolumnEditor, [{ + key: "render", + value: function render() { + var _this$props = this.props, + model = _this$props.model, + _onChange = _this$props.onChange, + onUpdate = _this$props.onUpdate, + onCancel = _this$props.onCancel; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Input"], { + defaultValue: model.name, + onChange: function onChange(e) { + return _onChange('name', e.target.value); + } + }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Button"], { + icon: "save", + onClick: onUpdate + }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Button"], { + icon: "close", + onClick: onCancel + })); + } + }]); + + return VolumnEditor; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + +var VolumnViewer = /*#__PURE__*/function (_Component2) { + _inherits(VolumnViewer, _Component2); + + var _super2 = _createSuper(VolumnViewer); + + function VolumnViewer() { + _classCallCheck(this, VolumnViewer); + + return _super2.apply(this, arguments); + } + + _createClass(VolumnViewer, [{ + key: "render", + value: function render() { + var _this$props2 = this.props, + model = _this$props2.model, + onActive = _this$props2.onActive, + onRemove = _this$props2.onRemove, + onSelect = _this$props2.onSelect, + selected = _this$props2.selected; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "viewer", + onClick: onSelect + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "logo" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "info" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, model.name), selected && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "action" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Button"], { + size: "small", + icon: "edit", + onClick: onActive + }, "edit"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_design__WEBPACK_IMPORTED_MODULE_1__["Button"], { + size: "small", + icon: "delete", + onClick: onRemove + }, "remove")))); + } + }]); + + return VolumnViewer; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_higher_editable__WEBPACK_IMPORTED_MODULE_2__["createEditableListItem"])([VolumnEditor, VolumnViewer], { + entityName: 'volumn' +})); + +/***/ }), + +/***/ "./lib/client/component/design/Button.jsx": +/*!************************************************!*\ + !*** ./lib/client/component/design/Button.jsx ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Button; }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Icon */ "./lib/client/component/design/Icon.jsx"); +/* harmony import */ var _Button_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Button.scss */ "./lib/client/component/design/Button.scss"); +/* harmony import */ var _Button_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Button_scss__WEBPACK_IMPORTED_MODULE_2__); + + + +function Button(props) { + var size = props.size, + icon = props.icon, + children = props.children; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { + className: Object(react__WEBPACK_IMPORTED_MODULE_0__["cls"])('button', size), + onClick: props.onClick + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Icon__WEBPACK_IMPORTED_MODULE_1__["default"], { + name: icon + }), children && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", null, children)); +} + +/***/ }), + +/***/ "./lib/client/component/design/Button.scss": +/*!*************************************************!*\ + !*** ./lib/client/component/design/Button.scss ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./lib/client/component/design/Icon.jsx": +/*!**********************************************!*\ + !*** ./lib/client/component/design/Icon.jsx ***! + \**********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Icon; }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _Icon_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Icon.scss */ "./lib/client/component/design/Icon.scss"); +/* harmony import */ var _Icon_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Icon_scss__WEBPACK_IMPORTED_MODULE_1__); + + +function Icon(props) { + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", { + className: "icon" + }, props.name); +} + +/***/ }), + +/***/ "./lib/client/component/design/Icon.scss": +/*!***********************************************!*\ + !*** ./lib/client/component/design/Icon.scss ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./lib/client/component/design/Input.jsx": +/*!***********************************************!*\ + !*** ./lib/client/component/design/Input.jsx ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Input; }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _Input_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Input.scss */ "./lib/client/component/design/Input.scss"); +/* harmony import */ var _Input_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Input_scss__WEBPACK_IMPORTED_MODULE_1__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + + + +var Input = /*#__PURE__*/function (_Component) { + _inherits(Input, _Component); + + var _super = _createSuper(Input); + + function Input() { + _classCallCheck(this, Input); + + return _super.apply(this, arguments); + } + + _createClass(Input, [{ + key: "render", + value: function render() { + var _this$props = this.props, + type = _this$props.type, + defaultValue = _this$props.defaultValue, + onChange = _this$props.onChange; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { + className: "input", + defaultValue: defaultValue, + onChange: onChange + }); + } + }]); + + return Input; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + + + +/***/ }), + +/***/ "./lib/client/component/design/Input.scss": +/*!************************************************!*\ + !*** ./lib/client/component/design/Input.scss ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./lib/client/component/design/index.js": +/*!**********************************************!*\ + !*** ./lib/client/component/design/index.js ***! + \**********************************************/ +/*! exports provided: Button, Icon, Input */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Button */ "./lib/client/component/design/Button.jsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Button", function() { return _Button__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Icon */ "./lib/client/component/design/Icon.jsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Icon", function() { return _Icon__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Input */ "./lib/client/component/design/Input.jsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Input", function() { return _Input__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + + + + + + + + +/***/ }), + +/***/ "./lib/client/component/higher/editable.jsx": +/*!**************************************************!*\ + !*** ./lib/client/component/higher/editable.jsx ***! + \**************************************************/ +/*! exports provided: createEditableListItem, createEditableList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createEditableListItem", function() { return createEditableListItem; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createEditableList", function() { return createEditableList; }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _noflux_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noflux/react */ "./node_modules/@noflux/react/dist/noflux-react.es.js"); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + +function createEditableListItem(components, options) { + var _components = _slicedToArray(components, 2), + Editor = _components[0], + Viewer = _components[1]; + + var entityName = options.entityName, + validator = options.validator; + var className = "".concat(entityName, "-list-item"); + + var EditableListItem = /*#__PURE__*/function (_Component) { + _inherits(EditableListItem, _Component); + + var _super = _createSuper(EditableListItem); + + function EditableListItem(props) { + var _this; + + _classCallCheck(this, EditableListItem); + + _this = _super.call(this, props); + var model = props.model; + _this.state = { + input: model.$temp ? {} : _objectSpread({}, model), + error: null, + stage: model.$temp ? 'editor' : 'viewer' + }; + return _this; + } + + _createClass(EditableListItem, [{ + key: "changeInput", + value: function changeInput(key, value) { + var input = this.state.input; + input[key] = value; + this.setState({ + input: input + }); + } + }, { + key: "activeInput", + value: function activeInput() { + this.setState({ + stage: 'editor' + }); + } + }, { + key: "cancelInput", + value: function cancelInput() { + var model = this.props.model; // todo - confirm unsaved + + if (model.$temp) { + // only remove temp item + this.raiseRemove(); + } else { + this.setState({ + stage: 'viewer' + }); + } + } + }, { + key: "raiseSelect", + value: function raiseSelect() { + if (this.props.onSelect) { + this.props.onSelect(); + } + } + }, { + key: "raiseRemove", + value: function raiseRemove() { + if (this.props.onRemove) { + this.props.onRemove(); + } + } + }, { + key: "raiseUpdate", + value: function raiseUpdate() { + var input = this.state.input; + + if (validator) { + var error = validator(input); + this.setState({ + error: error + }); + + if (error) { + console.error(error); + return; + } + } + + this.setState({ + stage: 'viewer' + }); + + if (this.props.onUpdate) { + this.props.onUpdate(input); + } + } + }, { + key: "render", + value: function render() { + var _this2 = this; + + var _this$state = this.state, + stage = _this$state.stage, + input = _this$state.input; + var _this$props = this.props, + model = _this$props.model, + selected = _this$props.selected; + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("li", { + className: Object(react__WEBPACK_IMPORTED_MODULE_0__["cls"])(className, selected && 'active') + }, stage === 'editor' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Editor, { + model: model, + input: input, + onCancel: function onCancel() { + return _this2.cancelInput(); + }, + onUpdate: function onUpdate() { + return _this2.raiseUpdate(); + }, + onChange: function onChange(key, value) { + return _this2.changeInput(key, value); + } + }), stage === 'viewer' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Viewer, { + model: model, + selected: selected, + onSelect: function onSelect() { + return _this2.raiseSelect(); + }, + onActive: function onActive() { + return _this2.activeInput(); + }, + onRemove: function onRemove() { + return _this2.raiseRemove(); + } + })); + } + }]); + + return EditableListItem; + }(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + + return EditableListItem; +} +function createEditableList(components, options) { + var _components2 = _slicedToArray(components, 3), + EditableListItem = _components2[0], + HeaderView = _components2[1], + FooterView = _components2[2]; + + var entityName = options.entityName, + _options$entityKey = options.entityKey, + entityKey = _options$entityKey === void 0 ? 'key' : _options$entityKey, + dataSource = options.dataSource; + var className = "".concat(entityName, "-list"); + + var EditableList = /*#__PURE__*/function (_Component2) { + _inherits(EditableList, _Component2); + + var _super2 = _createSuper(EditableList); + + function EditableList(props) { + var _this3; + + _classCallCheck(this, EditableList); + + _this3 = _super2.call(this, props); + _this3.state = { + model: [] + }; + _this3.idgen = 1; + if (HeaderView) HeaderView.prototype.parent = _assertThisInitialized(_this3); + if (FooterView) FooterView.prototype.parent = _assertThisInitialized(_this3); + return _this3; + } + + _createClass(EditableList, [{ + key: "createItem", + value: function createItem() { + var model = this.state.model; + model.unshift({ + $temp: this.idgen + }); + this.idgen += 1; + this.setState({ + model: model + }); + } + }, { + key: "selectItem", + value: function () { + var _selectItem = _asyncToGenerator(function* (item) { + yield dataSource.select(item); + }); + + function selectItem(_x) { + return _selectItem.apply(this, arguments); + } + + return selectItem; + }() + }, { + key: "removeItem", + value: function () { + var _removeItem = _asyncToGenerator(function* (item) { + if (!item.$temp) { + yield dataSource["delete"](item); + } + + var model = this.state.model; + var i = model.indexOf(item); + + if (i >= 0) { + model.splice(i, 1); + this.setState({ + model: model + }); + } + }); + + function removeItem(_x2) { + return _removeItem.apply(this, arguments); + } + + return removeItem; + }() + }, { + key: "updateItem", + value: function () { + var _updateItem = _asyncToGenerator(function* (item, next) { + var result = yield dataSource.update(item, next); + var model = this.state.model; + var i = model.indexOf(item); + + if (i >= 0) { + model.splice(i, 1, result); + this.setState({ + model: model + }); + } + }); + + function updateItem(_x3, _x4) { + return _updateItem.apply(this, arguments); + } + + return updateItem; + }() + }, { + key: "reconcileModel", + value: function reconcileModel() { + var innerModel = this.state.model; + var outerModel = dataSource.source(); + var model = []; + innerModel.forEach(function (e) { + if (e.$temp) model.push(e); + }); + outerModel.forEach(function (eo) { + var e = innerModel.find(function (ei) { + return ei[entityKey] === eo[entityKey]; + }); + model.push(e || eo); + }); + return model; + } + }, { + key: "render", + value: function render() { + var _this4 = this; + + var model = this.reconcileModel(); + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: className + }, HeaderView && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(HeaderView, null), model.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("ul", null, model.map(function (item) { + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(EditableListItem, { + key: item[entityKey] || "temp-".concat(item.$temp), + model: item, + selected: item.selected, + onSelect: function onSelect() { + return _this4.selectItem(item); + }, + onRemove: function onRemove() { + return _this4.removeItem(item); + }, + onUpdate: function onUpdate(input) { + return _this4.updateItem(item, input); + } + }); + })), FooterView && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FooterView, null)); + } + }]); + + return EditableList; + }(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + + return Object(_noflux_react__WEBPACK_IMPORTED_MODULE_1__["connect"])(EditableList); +} + +/***/ }), + +/***/ "./lib/client/index.jsx": +/*!******************************!*\ + !*** ./lib/client/index.jsx ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _noflux_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noflux/react */ "./node_modules/@noflux/react/dist/noflux-react.es.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./store */ "./lib/client/store.js"); +/* harmony import */ var _component_DeviceList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./component/DeviceList */ "./lib/client/component/DeviceList.jsx"); +/* harmony import */ var _component_VolumnList__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./component/VolumnList */ "./lib/client/component/VolumnList.jsx"); +/* harmony import */ var _component_RecordList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./component/RecordList */ "./lib/client/component/RecordList.jsx"); +/* harmony import */ var _component_AccessMask__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./component/AccessMask */ "./lib/client/component/AccessMask.jsx"); +/* harmony import */ var _index_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./index.scss */ "./lib/client/index.scss"); +/* harmony import */ var _index_scss__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_index_scss__WEBPACK_IMPORTED_MODULE_7__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + + + +react__WEBPACK_IMPORTED_MODULE_0___default.a.cls = function concatClassNames() { + var names = arguments; + + if (arguments.length === 1) { + names = arguments[0]; + } else { + names = Array.prototype.slice.call(arguments); + } + + if (Array.isArray(names)) { + return names.filter(Boolean).join(' '); + } + + return names; +}; + + + + + + + + + +var App = /*#__PURE__*/function (_Component) { + _inherits(App, _Component); + + var _super = _createSuper(App); + + function App(props) { + var _this; + + _classCallCheck(this, App); + + _this = _super.call(this, props); + _store__WEBPACK_IMPORTED_MODULE_2__["default"].initialize(); + return _this; + } + + _createClass(App, [{ + key: "render", + value: function render() { + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "container" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "side" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "header" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", null, "KeyRoll")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_component_DeviceList__WEBPACK_IMPORTED_MODULE_3__["default"], null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: "main" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_component_VolumnList__WEBPACK_IMPORTED_MODULE_4__["default"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_component_RecordList__WEBPACK_IMPORTED_MODULE_5__["default"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_component_AccessMask__WEBPACK_IMPORTED_MODULE_6__["default"], null))); + } + }]); + + return App; +}(react__WEBPACK_IMPORTED_MODULE_0__["Component"]); + +/* harmony default export */ __webpack_exports__["default"] = (Object(_noflux_react__WEBPACK_IMPORTED_MODULE_1__["connect"])(App));;(function(){if (typeof window !== 'undefined' && window) { + if (!window.epii) window.epii = {}; + if (typeof __webpack_exports__ !== 'undefined' && __webpack_exports__) { + var capture = __webpack_exports__.default; + if (!capture) { + var keys = Object.keys(__webpack_exports__); + if (keys.length > 0) { + capture = __webpack_exports__[keys[0]]; + } + } + window.epii.entry = capture; + } else { + console.error('settle-loader error :: __webpack_exports__ not found'); + } +};__webpack_require__(/*! react-dom */ "react-dom");}()); + +/***/ }), + +/***/ "./lib/client/index.scss": +/*!*******************************!*\ + !*** ./lib/client/index.scss ***! + \*******************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + +/***/ "./lib/client/store.js": +/*!*****************************!*\ + !*** ./lib/client/store.js ***! + \*****************************/ +/*! exports provided: initialize, raiseQuery, action, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "raiseQuery", function() { return raiseQuery; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "action", function() { return actionHandler; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return store; }); +/* harmony import */ var whatwg_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! whatwg-fetch */ "./node_modules/whatwg-fetch/fetch.js"); +/* harmony import */ var _noflux_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noflux/react */ "./node_modules/@noflux/react/dist/noflux-react.es.js"); + + + +function raiseQuery(action, payload) { + console.warn(`action [${action}] <=`, payload) + const apiPath = `/__/data/${action}`; + return fetch(apiPath, { + method: 'POST', + body: JSON.stringify(payload), + // headers: {} + }) + .then(response => response.json()) + .then(json => { + if (json.state === 0) { + console.warn(`action [${action}] =>`, json.model); + return json.model; + } + console.error(`action [${action}] =>`, json.error); + console.warn(json.stack); + throw new Error('server error'); + }); +} + +function initialize() { + _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].set({ + devices: [], + volumns: [], + records: [], + }); +} + +const stateActions = { + scanDevices: async (model) => { + const devices = model; + if (devices.length > 0) { + const device = devices[0]; + device.selected = true; + await actionHandler.findVolumns({ + device: { name: device.name } + }); + } + _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].set('devices', devices); + }, + + lockDevice: (model) => { + const device = model; + const devices = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('devices') + .map(e => e.name === device.name ? device : e); + _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].set('devices', devices); + }, + + unlockDevice: (model) => { + const device = model; + const devices = _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].get('devices') + .map(e => e.name === device.name ? device : e); + _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].set('devices', devices); + }, + + findVolumns: (model) => { + const volumns = model; + _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].set('volumns', volumns); + }, + + findRecords: (model) => { + const records = model; + _noflux_react__WEBPACK_IMPORTED_MODULE_1__["state"].set('records', records); + }, + + killRecord: (model) => { + } +}; + +const actionHandler = new Proxy({}, { + get: (o, prop) => { + // todo - use o to do sth magic + return async (payload) => { + const model = await raiseQuery(prop, payload); + const stateAction = stateActions[prop]; + if (stateAction) { + await stateAction(model); + } + return model; + } + } +}); + +const store = { + initialize, + raiseQuery, + action: actionHandler, +}; + + + +// export function findRecord(query) { +// return fetchData('findRecord', query); +// } + +// export function findRecords(query) { +// return fetchData('findRecords', query); +// } + +// export function killRecord(query, model) { +// return fetchData('killRecord', query, model) +// .then(result => { +// console.log('killRecord', result); +// }); +// } + +/***/ }), + +/***/ "./node_modules/@noflux/react/dist/noflux-react.es.js": +/*!************************************************************!*\ + !*** ./node_modules/@noflux/react/dist/noflux-react.es.js ***! + \************************************************************/ +/*! exports provided: state, connect */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "state", function() { return state; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return connect; }); +/* harmony import */ var _noflux_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @noflux/state */ "./node_modules/@noflux/state/dist/noflux-state.es.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* + * @license + * @noflux/react v1.0.0 + * (c) 2017-2018 Malash + * Released under the MIT License. + */ + + + +var state = new _noflux_state__WEBPACK_IMPORTED_MODULE_0__["State"](); + +var __DEV__ = "development" !== 'production'; + +/* global performance */ +var timer = typeof performance !== 'undefined' && performance && performance.now ? performance : Date; + +var isReactComponent = function isReactComponent(Component$$1) { + return Boolean(Component$$1 && Component$$1.prototype && typeof Component$$1.prototype.render === 'function'); +}; + +var isReactComponentInstance = function isReactComponentInstance(instance) { + return Boolean(instance && typeof instance.render === 'function'); +}; + +var getComponentName = function getComponentName(Component$$1) { + var constructor = Component$$1.prototype && Component$$1.prototype.constructor; + return Component$$1.displayName || constructor && constructor.displayName || Component$$1.name || constructor && constructor.name || 'Component'; +}; + +// detect if the component is rendering from the client or the server +// copy from fbjs/lib/ExecutionEnvironment +// https://github.com/facebook/fbjs/blob/38bf26f4e6ea64d7ff68393919fb5e98f5ceac3b/packages/fbjs/src/core/ExecutionEnvironment.js#L12-L16 +var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); + +var hasSymbol = typeof Symbol === 'function' && Symbol.for; + +var SYMBOL_NOFLUX = hasSymbol ? Symbol.for('noflux') : '__noflux'; + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +var get = function get(object, property, receiver) { + if (object === null) object = Function.prototype; + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent === null) { + return undefined; + } else { + return get(parent, property, receiver); + } + } else if ("value" in desc) { + return desc.value; + } else { + var getter = desc.get; + + if (getter === undefined) { + return undefined; + } + + return getter.call(receiver); + } +}; + +var inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; +}; + +var possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; +}; + +var connectComponent = function connectComponent(Target) { + if (Target[SYMBOL_NOFLUX]) { + throw new SyntaxError('You should not use @connect for component ' + getComponentName(Target) + ' more than once.'); + } + Target[SYMBOL_NOFLUX] = {}; + + // skip event listening for server-side rendering + if (!canUseDOM) { + return Target; + } + + var ConnectedComponent = function (_Target) { + inherits(ConnectedComponent, _Target); + + function ConnectedComponent(props) { + classCallCheck(this, ConnectedComponent); + + // init + var _this = possibleConstructorReturn(this, (ConnectedComponent.__proto__ || Object.getPrototypeOf(ConnectedComponent)).call(this, props)); + + _this[SYMBOL_NOFLUX] = { + getPaths: {}, + onSetDisposers: [], + mounted: false, + isForcingUpdate: false + }; + var __noflux = _this[SYMBOL_NOFLUX]; + + var onSet = function onSet() { + // skip re-render after unmounting component + // TODO: test this guard + if (!__noflux.mounted) return; + + // skip duplicate forceUpdate calling + if (__noflux.isForcingUpdate) return; + __noflux.isForcingUpdate = true; + + var startTime = timer.now(); + _this.forceUpdate(function () { + __noflux.isForcingUpdate = false; + + var endTime = timer.now(); + var cost = endTime - startTime; + if (__DEV__) { + // eslint-disable-next-line no-console + console.log('[noflux] ' + getComponentName(Target) + ' rendering time ' + cost.toFixed(3) + ' ms'); + } + }); + }; + __noflux.onGetDisposer = state.on('get', function (_ref) { + var path = _ref.path; + + if (__noflux.isRendering && !__noflux.getPaths[path]) { + __noflux.getPaths[path] = true; + // register cursor on set handler + __noflux.onSetDisposers.push(state.cursor(path).on('set', onSet)); + } + }); + return _this; + } + + createClass(ConnectedComponent, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // set component mounted flag + this[SYMBOL_NOFLUX].mounted = true; + + // call origin componentDidMount + if (get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'componentDidMount', this)) { + get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'componentDidMount', this).call(this); + } + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + var __noflux = this[SYMBOL_NOFLUX]; + // dispose cursor on set listeners + __noflux.onSetDisposers.forEach(function (disposer) { + return disposer(); + }); + + // dispose get listener + __noflux.onGetDisposer(); + + // reset component mounted flag + __noflux.mounted = false; + + // call origin componentWillUnmount + if (get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'componentWillUnmount', this)) { + get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'componentWillUnmount', this).call(this); + } + } + }, { + key: 'render', + value: function render() { + if (!get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'render', this)) { + throw new Error('No render method found on the returned component instance of ' + getComponentName(Target) + ', you may have forgotten to define render.'); + } + + var __noflux = this[SYMBOL_NOFLUX]; + __noflux.isRendering = true; + var vdom = get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'render', this).call(this); + __noflux.isRendering = false; + return vdom; + } + }]); + return ConnectedComponent; + }(Target); + + ConnectedComponent.displayName = 'Connect(' + getComponentName(Target) + ')'; + + return ConnectedComponent; +}; + +var connect = function connect(target, prop, descriptor) { + if (!target) { + throw new TypeError('@connect() is invalid, do you mean @connect ?'); + } + if (isReactComponentInstance(target) && prop && descriptor) { + throw new SyntaxError('@connect should not be used for component method.'); + } + if (!isReactComponent(target)) { + if (typeof target !== 'function') { + throw new TypeError('@connect should be used for React component'); + } + + var ConnectedComponent = function (_Component) { + inherits(ConnectedComponent, _Component); + + function ConnectedComponent() { + classCallCheck(this, ConnectedComponent); + return possibleConstructorReturn(this, (ConnectedComponent.__proto__ || Object.getPrototypeOf(ConnectedComponent)).apply(this, arguments)); + } + + createClass(ConnectedComponent, [{ + key: 'render', + value: function render() { + return target.call(this, this.props, this.context); + } + }]); + return ConnectedComponent; + }(react__WEBPACK_IMPORTED_MODULE_1__["Component"]); + + ConnectedComponent.displayName = 'Connect(' + getComponentName(target) + ')'; + ConnectedComponent.contextTypes = target.contextTypes; + ConnectedComponent.propTypes = target.propTypes; + ConnectedComponent.defaultProps = target.defaultProps; + + return connectComponent(ConnectedComponent); + } + return connectComponent(target); +}; + + + + +/***/ }), + +/***/ "./node_modules/@noflux/state/dist/noflux-state.es.js": +/*!************************************************************!*\ + !*** ./node_modules/@noflux/state/dist/noflux-state.es.js ***! + \************************************************************/ +/*! exports provided: State, Store */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "State", function() { return State; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Store", function() { return Store; }); +/* + * @license + * @noflux/state v1.0.1 + * (c) 2017-2018 Malash + * Released under the MIT License. + */ +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + +var toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } else { + return Array.from(arr); + } +}; + +var SYMBOL_NOFLUX = '__noflux'; + +/* + * JSON Pointer style escape + * http://tools.ietf.org/html/rfc6901 + */ +var escapePath = function escapePath(path) { + return path.replace(/~/g, '~1').replace(/\./g, '~0'); +}; +var unescapePath = function unescapePath(path) { + return path.replace(/~0/g, '.').replace(/~1/g, '~'); +}; + +var parsePath = function parsePath(path) { + if (Array.isArray(path)) { + return path; + } + if (typeof path === 'string') { + if (!path.length) { + return []; + } + // path with dot, e.g. 'a~1b.c' => ['a.b', 'c'] + if (path.indexOf('~') !== -1) { + return path.split('.').map(unescapePath); + } + return path.split('.'); + } + throw Error('State.prototype.cursor only accept string or array, ' + (typeof path === 'undefined' ? 'undefined' : _typeof(path)) + ' is forbidden'); +}; + +var stringifyPath = function stringifyPath(path) { + if (typeof path === 'string') { + return path; + } + if (Array.isArray(path)) { + // path with dot, e.g. ['a.b', 'c'] => 'a~1b.c' + return path.map(escapePath).join('.'); + } + throw Error('State.prototype.cursor only accept string or array, ' + (typeof path === 'undefined' ? 'undefined' : _typeof(path)) + ' is forbidden'); +}; + +var isNullOrUndefined = function isNullOrUndefined(obj) { + return obj === undefined || obj === null; +}; + +var getByPath = function getByPath(obj, path) { + var pointer = obj; + for (var i = 0; i < path.length; i += 1) { + var next = path[i]; + // only null and undefined has no properties + // ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/No_properties + if (isNullOrUndefined(pointer)) { + return undefined; + } + pointer = pointer[next]; + } + return pointer; +}; + +var isObject = function isObject(obj) { + return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null; +}; +var isNumeric = function isNumeric(num) { + return !isNaN(num) && num !== ''; +}; + +var shallowClone = function shallowClone(obj) { + var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + + if (Array.isArray(obj)) { + return [].concat(toConsumableArray(obj)); + } else if (isObject(obj)) { + return _extends({}, obj); + } + if (isNumeric(path)) { + return []; + } else { + return {}; + } +}; + +var HEAD = 'HEAD'; +var setByPath = function setByPath(obj) { + var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var value = arguments[2]; + + if (!path.length) { + return value; + } + + var root = {}; + root[HEAD] = obj; + var parentPointer = root; + var lastNext = HEAD; + var pointer = obj; + for (var i = 0; i < path.length; i += 1) { + var next = path[i]; + parentPointer[lastNext] = shallowClone(pointer, next); + parentPointer = parentPointer[lastNext]; + lastNext = next; + if (isNullOrUndefined(pointer)) { + // always skip traversing null or undefined + pointer = null; + } else { + pointer = pointer[next]; + } + } + parentPointer[lastNext] = value; + return root[HEAD]; +}; + +// null or undefined will cause an error +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from +var arrayFromAllowNullOrUndefined = function arrayFromAllowNullOrUndefined(arrayLike) { + return isNullOrUndefined(arrayLike) ? [] : [].concat(toConsumableArray(arrayLike)); +}; + +var count = 1; +var getNextId = function getNextId() { + count += 1; + return count; +}; + +var removeFirstFromArray = function removeFirstFromArray(array, value) { + var pos = array.indexOf(value); + if (pos !== -1) { + // about 1.5x faster than the two-arg version of Array#splice() as nodejs said + // https://github.com/nodejs/node/blob/v6.x/lib/events.js#L470-L475 + for (var i = pos, k = i + 1, n = array.length; k < n; i += 1, k += 1) { + array[i] = array[k]; + } + array.pop(); + } +}; + +var Store = function () { + function Store() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + data = _ref.data, + _ref$maxSnapshots = _ref.maxSnapshots, + maxSnapshots = _ref$maxSnapshots === undefined ? Infinity : _ref$maxSnapshots; + + classCallCheck(this, Store); + + this.__data = data; + this.__maxSnapshots = maxSnapshots; + this.__snapshots = []; + this.__snapshotIndex = -1; + } + + createClass(Store, [{ + key: 'read', + value: function read(path) { + return getByPath(this.__data, path); + } + }, { + key: 'write', + value: function write(path, value) { + this.__data = setByPath(this.__data, path, value); + } + }, { + key: 'snapshot', + value: function snapshot() { + this.__snapshotIndex += 1; + this.__snapshots[this.__snapshotIndex] = this.__data; + // override redid snapshots + this.__snapshots.length = this.__snapshotIndex + 1; + if (this.__snapshots.length > this.maxSnapshots) { + this.__snapshots.shift(); + this.__snapshotIndex -= 1; + } + } + }, { + key: 'canUndo', + value: function canUndo() { + return this.__snapshotIndex > 0; + } + }, { + key: 'undo', + value: function undo() { + if (!this.canUndo()) { + throw new RangeError('no more snapshot available'); + } + this.__snapshotIndex -= 1; + this.__data = this.__snapshots[this.__snapshotIndex]; + } + }, { + key: 'canRedo', + value: function canRedo() { + return this.__snapshotIndex + 1 < this.__snapshots.length; + } + }, { + key: 'redo', + value: function redo() { + if (!this.canRedo()) { + throw new RangeError('no more snapshot available'); + } + this.__snapshotIndex += 1; + this.__data = this.__snapshots[this.__snapshotIndex]; + } + }]); + return Store; +}(); + +// reduce property get times will accelerate 10%~15% +var SYMBOL_NOFLUX_ID = SYMBOL_NOFLUX + '_id'; + +var getListenerId = function getListenerId(listener) { + var autoGenerate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + // unique id for each listener + if (autoGenerate && listener[SYMBOL_NOFLUX_ID] === undefined) { + Object.defineProperty(listener, SYMBOL_NOFLUX_ID, { + enumerable: false, + writable: true, + configurable: true, + value: getNextId() + }); + } + return listener[SYMBOL_NOFLUX_ID]; +}; + +/* + * for performance hit, every node maintain ownListeners and subtreeListeners + * ownListeners[listenerId] = listener on current path + * subtreeListeners[listenerId] = merge( + * ownListeners[listenerId], + * children.every.subtreeListeners[listenerId], + * ) + */ +var ListenerTreeNode = function ListenerTreeNode() { + classCallCheck(this, ListenerTreeNode); + this.children = {}; + this.subtreeListeners = []; + this.ownListeners = []; +}; + +var ListenerTree = function () { + function ListenerTree() { + classCallCheck(this, ListenerTree); + this.__tree = new ListenerTreeNode(); + } + + createClass(ListenerTree, [{ + key: '__traverse', + value: function __traverse(_ref) { + var path = _ref.path, + _ref$createEmptyPath = _ref.createEmptyPath, + createEmptyPath = _ref$createEmptyPath === undefined ? false : _ref$createEmptyPath, + callbackBeforeRecursion = _ref.callbackBeforeRecursion, + callbackAfterRecursion = _ref.callbackAfterRecursion, + callbackAtBottom = _ref.callbackAtBottom; + + var pointer = this.__tree; + // save call stack for backtracking + var stack = []; + stack.push(pointer); + for (var index = 0; index <= path.length; index += 1) { + var isAtBottom = index === path.length || !createEmptyPath && pointer.children[path[index]] === undefined; + if (isAtBottom && callbackAtBottom) { + callbackAtBottom(pointer, index); + break; + } + if (callbackBeforeRecursion) { + callbackBeforeRecursion(pointer); + } + var child = path[index]; + if (pointer.children[child] === undefined) { + pointer.children[child] = new ListenerTreeNode(); + } + pointer = pointer.children[child]; + stack.push(pointer); + } + if (callbackAfterRecursion) { + while (stack.length) { + pointer = stack.pop(); + callbackAfterRecursion(pointer); + } + } + } + }, { + key: 'addListener', + value: function addListener(path, listener) { + var _this = this; + + if (typeof listener !== 'function') { + throw new TypeError('"listener" argument must be a function'); + } + // init listener id + getListenerId(listener, true); + this.__traverse({ + path: path, + createEmptyPath: true, + callbackAfterRecursion: function callbackAfterRecursion(node) { + return node.subtreeListeners.push(listener); + }, + callbackAtBottom: function callbackAtBottom(node) { + return node.ownListeners.push(listener); + } + }); + return function () { + _this.removeListener(path, listener); + }; + } + }, { + key: 'removeListener', + value: function removeListener(path, listener) { + if (typeof listener !== 'function') { + throw new TypeError('"listener" argument must be a function'); + } + this.__traverse({ + path: path, + callbackAfterRecursion: function callbackAfterRecursion(node) { + return removeFirstFromArray(node.subtreeListeners, listener); + }, + callbackAtBottom: function callbackAtBottom(node) { + return removeFirstFromArray(node.ownListeners, listener); + } + }); + } + + // path [a, b, ..., n] will emit + // merge(ownListener[root], ownListener[a], ownListener[b], ..., subtreeListener[n]) + + }, { + key: 'emit', + value: function emit(path, data) { + var listeners = []; + this.__traverse({ + path: path, + callbackAtBottom: function callbackAtBottom(node, index) { + // if emit an empty path, there is no subtree + if (index === path.length) { + listeners.push.apply(listeners, toConsumableArray(node.subtreeListeners)); + } + }, + callbackAfterRecursion: function callbackAfterRecursion(node) { + if (node.ownListeners.length) { + listeners.push.apply(listeners, toConsumableArray(node.ownListeners)); + } + } + }); + var called = {}; + for (var index = 0; index < listeners.length; index += 1) { + var listener = listeners[index]; + var listenerId = getListenerId(listener); + // same listener will call once + if (!called[listenerId]) { + called[listenerId] = true; + listener(data); + } + } + } + }, { + key: 'on', + value: function on(path, listener) { + return this.addListener(path, listener); + } + }, { + key: 'off', + value: function off(path, listener) { + this.removeListener(path, listener); + } + }]); + return ListenerTree; +}(); + +var State = function () { + function State() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$store = _ref.store, + store = _ref$store === undefined ? new Store() : _ref$store, + _ref$cursor = _ref.cursor, + cursor = _ref$cursor === undefined ? [] : _ref$cursor, + _ref$emitters = _ref.emitters, + emitters = _ref$emitters === undefined ? { + get: new ListenerTree(), + set: new ListenerTree() + } : _ref$emitters; + + classCallCheck(this, State); + + this.__store = store; + this.__cursor = cursor; + this.__emitters = emitters; + } + + createClass(State, [{ + key: 'cursor', + value: function cursor() { + var subPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var __store = this.__store, + __cursor = this.__cursor, + __emitters = this.__emitters; + + subPath = parsePath(subPath); + return new State({ + store: __store, + cursor: __cursor.concat(subPath), + emitters: __emitters + }); + } + }, { + key: 'get', + value: function get$$1() { + var subPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var length = arguments.length; + + if (length !== 0) { + return this.cursor(subPath).get(); + } + var value = this.__store.read(this.__cursor); + this.__emitters.get.emit(this.__cursor, { + path: stringifyPath(this.__cursor), + value: value + }); + return value; + } + }, { + key: 'set', + value: function set$$1(subPath, value) { + var length = arguments.length; + + if (length < 1) { + throw new TypeError('value argument must be set'); + } + if (length === 1) { + var _ref2 = [undefined, subPath]; + subPath = _ref2[0]; + value = _ref2[1]; + } + if (subPath !== undefined) { + return this.cursor(subPath).set(value); + } + this.__store.write(this.__cursor, value); + this.__emitters.set.emit(this.__cursor, { + path: stringifyPath(this.__cursor), + value: value + }); + } + }, { + key: 'update', + value: function update(subPath, callback) { + var length = arguments.length; + + if (length < 1) { + throw new TypeError('callback argument must be set'); + } + if (length === 1) { + var _ref3 = [undefined, subPath]; + subPath = _ref3[0]; + callback = _ref3[1]; + } + if (typeof callback !== 'function') { + throw new TypeError('callback argument must be a function'); + } + var s = subPath === undefined ? this : this.cursor(subPath); + s.set(callback(s.get())); + } + }, { + key: '__getEmitterByName', + value: function __getEmitterByName(message) { + if (!this.__emitters[message]) { + throw new Error('event not allowed'); + } + return this.__emitters[message]; + } + }, { + key: 'on', + value: function on(message, callback) { + return this.__getEmitterByName(message).on(this.__cursor, callback); + } + }, { + key: 'addEventListener', + value: function addEventListener(message, callback) { + return this.on(message, callback); + } + }, { + key: 'off', + value: function off(message, callback) { + this.__getEmitterByName(message).off(this.__cursor, callback); + } + }, { + key: 'removeEventListener', + value: function removeEventListener(message, callback) { + this.off(message, callback); + } + + // snapshot support + + }, { + key: 'snapshot', + value: function snapshot() { + this.__store.snapshot(); + } + }, { + key: 'canUndo', + value: function canUndo() { + return this.__store.canUndo(); + } + }, { + key: 'undo', + value: function undo() { + this.__store.undo(); + // snapshot always emit root event + this.__emitters.set.emit([], { + path: stringifyPath([]), + value: this.__store.read([]) + }); + } + }, { + key: 'canRedo', + value: function canRedo() { + return this.__store.canRedo(); + } + }, { + key: 'redo', + value: function redo() { + this.__store.redo(); + // snapshot always emit root event + this.__emitters.set.emit([], { + path: stringifyPath([]), + value: this.__store.read([]) + }); + } + + // immutable Array operators + + }, { + key: '__arrayOperator', + value: function __arrayOperator(operator, values) { + var array = arrayFromAllowNullOrUndefined(this.get()); + Array.prototype[operator].apply(array, values); + this.set(array); + } + }, { + key: 'push', + value: function push() { + for (var _len = arguments.length, values = Array(_len), _key = 0; _key < _len; _key++) { + values[_key] = arguments[_key]; + } + + this.__arrayOperator('push', values); + } + }, { + key: 'pop', + value: function pop() { + this.__arrayOperator('pop'); + } + }, { + key: 'unshift', + value: function unshift() { + for (var _len2 = arguments.length, values = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + values[_key2] = arguments[_key2]; + } + + this.__arrayOperator('unshift', values); + } + }, { + key: 'shift', + value: function shift() { + this.__arrayOperator('shift'); + } + }, { + key: 'fill', + value: function fill(value) { + this.__arrayOperator('fill', [value]); + } + }, { + key: 'reverse', + value: function reverse() { + this.__arrayOperator('reverse'); + } + }, { + key: 'splice', + value: function splice() { + for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + values[_key3] = arguments[_key3]; + } + + this.__arrayOperator('splice', values); + } + }]); + return State; +}(); + + + + +/***/ }), + +/***/ "./node_modules/whatwg-fetch/fetch.js": +/*!********************************************!*\ + !*** ./node_modules/whatwg-fetch/fetch.js ***! + \********************************************/ +/*! exports provided: Headers, Request, Response, DOMException, fetch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Headers", function() { return Headers; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Request", function() { return Request; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Response", function() { return Response; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DOMException", function() { return DOMException; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetch", function() { return fetch; }); +var global = + (typeof globalThis !== 'undefined' && globalThis) || + (typeof self !== 'undefined' && self) || + (typeof global !== 'undefined' && global) + +var support = { + searchParams: 'URLSearchParams' in global, + iterable: 'Symbol' in global && 'iterator' in Symbol, + blob: + 'FileReader' in global && + 'Blob' in global && + (function() { + try { + new Blob() + return true + } catch (e) { + return false + } + })(), + formData: 'FormData' in global, + arrayBuffer: 'ArrayBuffer' in global +} + +function isDataView(obj) { + return obj && DataView.prototype.isPrototypeOf(obj) +} + +if (support.arrayBuffer) { + var viewClasses = [ + '[object Int8Array]', + '[object Uint8Array]', + '[object Uint8ClampedArray]', + '[object Int16Array]', + '[object Uint16Array]', + '[object Int32Array]', + '[object Uint32Array]', + '[object Float32Array]', + '[object Float64Array]' + ] + + var isArrayBufferView = + ArrayBuffer.isView || + function(obj) { + return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 + } +} + +function normalizeName(name) { + if (typeof name !== 'string') { + name = String(name) + } + if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === '') { + throw new TypeError('Invalid character in header field name') + } + return name.toLowerCase() +} + +function normalizeValue(value) { + if (typeof value !== 'string') { + value = String(value) + } + return value +} + +// Build a destructive iterator for the value list +function iteratorFor(items) { + var iterator = { + next: function() { + var value = items.shift() + return {done: value === undefined, value: value} + } + } + + if (support.iterable) { + iterator[Symbol.iterator] = function() { + return iterator + } + } + + return iterator +} + +function Headers(headers) { + this.map = {} + + if (headers instanceof Headers) { + headers.forEach(function(value, name) { + this.append(name, value) + }, this) + } else if (Array.isArray(headers)) { + headers.forEach(function(header) { + this.append(header[0], header[1]) + }, this) + } else if (headers) { + Object.getOwnPropertyNames(headers).forEach(function(name) { + this.append(name, headers[name]) + }, this) + } +} + +Headers.prototype.append = function(name, value) { + name = normalizeName(name) + value = normalizeValue(value) + var oldValue = this.map[name] + this.map[name] = oldValue ? oldValue + ', ' + value : value +} + +Headers.prototype['delete'] = function(name) { + delete this.map[normalizeName(name)] +} + +Headers.prototype.get = function(name) { + name = normalizeName(name) + return this.has(name) ? this.map[name] : null +} + +Headers.prototype.has = function(name) { + return this.map.hasOwnProperty(normalizeName(name)) +} + +Headers.prototype.set = function(name, value) { + this.map[normalizeName(name)] = normalizeValue(value) +} + +Headers.prototype.forEach = function(callback, thisArg) { + for (var name in this.map) { + if (this.map.hasOwnProperty(name)) { + callback.call(thisArg, this.map[name], name, this) + } + } +} + +Headers.prototype.keys = function() { + var items = [] + this.forEach(function(value, name) { + items.push(name) + }) + return iteratorFor(items) +} + +Headers.prototype.values = function() { + var items = [] + this.forEach(function(value) { + items.push(value) + }) + return iteratorFor(items) +} + +Headers.prototype.entries = function() { + var items = [] + this.forEach(function(value, name) { + items.push([name, value]) + }) + return iteratorFor(items) +} + +if (support.iterable) { + Headers.prototype[Symbol.iterator] = Headers.prototype.entries +} + +function consumed(body) { + if (body.bodyUsed) { + return Promise.reject(new TypeError('Already read')) + } + body.bodyUsed = true +} + +function fileReaderReady(reader) { + return new Promise(function(resolve, reject) { + reader.onload = function() { + resolve(reader.result) + } + reader.onerror = function() { + reject(reader.error) + } + }) +} + +function readBlobAsArrayBuffer(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsArrayBuffer(blob) + return promise +} + +function readBlobAsText(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsText(blob) + return promise +} + +function readArrayBufferAsText(buf) { + var view = new Uint8Array(buf) + var chars = new Array(view.length) + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]) + } + return chars.join('') +} + +function bufferClone(buf) { + if (buf.slice) { + return buf.slice(0) + } else { + var view = new Uint8Array(buf.byteLength) + view.set(new Uint8Array(buf)) + return view.buffer + } +} + +function Body() { + this.bodyUsed = false + + this._initBody = function(body) { + /* + fetch-mock wraps the Response object in an ES6 Proxy to + provide useful test harness features such as flush. However, on + ES5 browsers without fetch or Proxy support pollyfills must be used; + the proxy-pollyfill is unable to proxy an attribute unless it exists + on the object before the Proxy is created. This change ensures + Response.bodyUsed exists on the instance, while maintaining the + semantic of setting Request.bodyUsed in the constructor before + _initBody is called. + */ + this.bodyUsed = this.bodyUsed + this._bodyInit = body + if (!body) { + this._bodyText = '' + } else if (typeof body === 'string') { + this._bodyText = body + } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { + this._bodyBlob = body + } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { + this._bodyFormData = body + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this._bodyText = body.toString() + } else if (support.arrayBuffer && support.blob && isDataView(body)) { + this._bodyArrayBuffer = bufferClone(body.buffer) + // IE 10-11 can't handle a DataView body. + this._bodyInit = new Blob([this._bodyArrayBuffer]) + } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { + this._bodyArrayBuffer = bufferClone(body) + } else { + this._bodyText = body = Object.prototype.toString.call(body) + } + + if (!this.headers.get('content-type')) { + if (typeof body === 'string') { + this.headers.set('content-type', 'text/plain;charset=UTF-8') + } else if (this._bodyBlob && this._bodyBlob.type) { + this.headers.set('content-type', this._bodyBlob.type) + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8') + } + } + } + + if (support.blob) { + this.blob = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return Promise.resolve(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(new Blob([this._bodyArrayBuffer])) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as blob') + } else { + return Promise.resolve(new Blob([this._bodyText])) + } + } + + this.arrayBuffer = function() { + if (this._bodyArrayBuffer) { + var isConsumed = consumed(this) + if (isConsumed) { + return isConsumed + } + if (ArrayBuffer.isView(this._bodyArrayBuffer)) { + return Promise.resolve( + this._bodyArrayBuffer.buffer.slice( + this._bodyArrayBuffer.byteOffset, + this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength + ) + ) + } else { + return Promise.resolve(this._bodyArrayBuffer) + } + } else { + return this.blob().then(readBlobAsArrayBuffer) + } + } + } + + this.text = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return readBlobAsText(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as text') + } else { + return Promise.resolve(this._bodyText) + } + } + + if (support.formData) { + this.formData = function() { + return this.text().then(decode) + } + } + + this.json = function() { + return this.text().then(JSON.parse) + } + + return this +} + +// HTTP methods whose capitalization should be normalized +var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'] + +function normalizeMethod(method) { + var upcased = method.toUpperCase() + return methods.indexOf(upcased) > -1 ? upcased : method +} + +function Request(input, options) { + if (!(this instanceof Request)) { + throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.') + } + + options = options || {} + var body = options.body + + if (input instanceof Request) { + if (input.bodyUsed) { + throw new TypeError('Already read') + } + this.url = input.url + this.credentials = input.credentials + if (!options.headers) { + this.headers = new Headers(input.headers) + } + this.method = input.method + this.mode = input.mode + this.signal = input.signal + if (!body && input._bodyInit != null) { + body = input._bodyInit + input.bodyUsed = true + } + } else { + this.url = String(input) + } + + this.credentials = options.credentials || this.credentials || 'same-origin' + if (options.headers || !this.headers) { + this.headers = new Headers(options.headers) + } + this.method = normalizeMethod(options.method || this.method || 'GET') + this.mode = options.mode || this.mode || null + this.signal = options.signal || this.signal + this.referrer = null + + if ((this.method === 'GET' || this.method === 'HEAD') && body) { + throw new TypeError('Body not allowed for GET or HEAD requests') + } + this._initBody(body) + + if (this.method === 'GET' || this.method === 'HEAD') { + if (options.cache === 'no-store' || options.cache === 'no-cache') { + // Search for a '_' parameter in the query string + var reParamSearch = /([?&])_=[^&]*/ + if (reParamSearch.test(this.url)) { + // If it already exists then set the value with the current time + this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime()) + } else { + // Otherwise add a new '_' parameter to the end with the current time + var reQueryString = /\?/ + this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime() + } + } + } +} + +Request.prototype.clone = function() { + return new Request(this, {body: this._bodyInit}) +} + +function decode(body) { + var form = new FormData() + body + .trim() + .split('&') + .forEach(function(bytes) { + if (bytes) { + var split = bytes.split('=') + var name = split.shift().replace(/\+/g, ' ') + var value = split.join('=').replace(/\+/g, ' ') + form.append(decodeURIComponent(name), decodeURIComponent(value)) + } + }) + return form +} + +function parseHeaders(rawHeaders) { + var headers = new Headers() + // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space + // https://tools.ietf.org/html/rfc7230#section-3.2 + var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ') + preProcessedHeaders.split(/\r?\n/).forEach(function(line) { + var parts = line.split(':') + var key = parts.shift().trim() + if (key) { + var value = parts.join(':').trim() + headers.append(key, value) + } + }) + return headers +} + +Body.call(Request.prototype) + +function Response(bodyInit, options) { + if (!(this instanceof Response)) { + throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.') + } + if (!options) { + options = {} + } + + this.type = 'default' + this.status = options.status === undefined ? 200 : options.status + this.ok = this.status >= 200 && this.status < 300 + this.statusText = 'statusText' in options ? options.statusText : '' + this.headers = new Headers(options.headers) + this.url = options.url || '' + this._initBody(bodyInit) +} + +Body.call(Response.prototype) + +Response.prototype.clone = function() { + return new Response(this._bodyInit, { + status: this.status, + statusText: this.statusText, + headers: new Headers(this.headers), + url: this.url + }) +} + +Response.error = function() { + var response = new Response(null, {status: 0, statusText: ''}) + response.type = 'error' + return response +} + +var redirectStatuses = [301, 302, 303, 307, 308] + +Response.redirect = function(url, status) { + if (redirectStatuses.indexOf(status) === -1) { + throw new RangeError('Invalid status code') + } + + return new Response(null, {status: status, headers: {location: url}}) +} + +var DOMException = global.DOMException +try { + new DOMException() +} catch (err) { + DOMException = function(message, name) { + this.message = message + this.name = name + var error = Error(message) + this.stack = error.stack + } + DOMException.prototype = Object.create(Error.prototype) + DOMException.prototype.constructor = DOMException +} + +function fetch(input, init) { + return new Promise(function(resolve, reject) { + var request = new Request(input, init) + + if (request.signal && request.signal.aborted) { + return reject(new DOMException('Aborted', 'AbortError')) + } + + var xhr = new XMLHttpRequest() + + function abortXhr() { + xhr.abort() + } + + xhr.onload = function() { + var options = { + status: xhr.status, + statusText: xhr.statusText, + headers: parseHeaders(xhr.getAllResponseHeaders() || '') + } + options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL') + var body = 'response' in xhr ? xhr.response : xhr.responseText + setTimeout(function() { + resolve(new Response(body, options)) + }, 0) + } + + xhr.onerror = function() { + setTimeout(function() { + reject(new TypeError('Network request failed')) + }, 0) + } + + xhr.ontimeout = function() { + setTimeout(function() { + reject(new TypeError('Network request failed')) + }, 0) + } + + xhr.onabort = function() { + setTimeout(function() { + reject(new DOMException('Aborted', 'AbortError')) + }, 0) + } + + function fixUrl(url) { + try { + return url === '' && global.location.href ? global.location.href : url + } catch (e) { + return url + } + } + + xhr.open(request.method, fixUrl(request.url), true) + + if (request.credentials === 'include') { + xhr.withCredentials = true + } else if (request.credentials === 'omit') { + xhr.withCredentials = false + } + + if ('responseType' in xhr) { + if (support.blob) { + xhr.responseType = 'blob' + } else if ( + support.arrayBuffer && + request.headers.get('Content-Type') && + request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1 + ) { + xhr.responseType = 'arraybuffer' + } + } + + if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) { + Object.getOwnPropertyNames(init.headers).forEach(function(name) { + xhr.setRequestHeader(name, normalizeValue(init.headers[name])) + }) + } else { + request.headers.forEach(function(value, name) { + xhr.setRequestHeader(name, value) + }) + } + + if (request.signal) { + request.signal.addEventListener('abort', abortXhr) + + xhr.onreadystatechange = function() { + // DONE (success or failure) + if (xhr.readyState === 4) { + request.signal.removeEventListener('abort', abortXhr) + } + } + } + + xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit) + }) +} + +fetch.polyfill = true + +if (!global.fetch) { + global.fetch = fetch + global.Headers = Headers + global.Request = Request + global.Response = Response +} + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = React; + +/***/ }), + +/***/ "react-dom": +/*!***************************!*\ + !*** external "ReactDOM" ***! + \***************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = ReactDOM; + +/***/ }) + +/******/ }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/views/lib/static/index.js.map b/views/lib/static/index.js.map new file mode 100644 index 0000000..a04e956 --- /dev/null +++ b/views/lib/static/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./lib/client/component/AccessMask.jsx","webpack:///./lib/client/component/AccessMask.scss","webpack:///./lib/client/component/DeviceList.jsx","webpack:///./lib/client/component/DeviceList.scss","webpack:///./lib/client/component/RecordList.jsx","webpack:///./lib/client/component/RecordList.scss","webpack:///./lib/client/component/RecordListItem.jsx","webpack:///./lib/client/component/VolumnList.jsx","webpack:///./lib/client/component/VolumnList.scss","webpack:///./lib/client/component/VolumnListItem.jsx","webpack:///./lib/client/component/design/Button.jsx","webpack:///./lib/client/component/design/Button.scss","webpack:///./lib/client/component/design/Icon.jsx","webpack:///./lib/client/component/design/Icon.scss","webpack:///./lib/client/component/design/Input.jsx","webpack:///./lib/client/component/design/Input.scss","webpack:///./lib/client/component/design/index.js","webpack:///./lib/client/component/higher/editable.jsx","webpack:///./lib/client/index.jsx","webpack:///./lib/client/index.scss","webpack:///./lib/client/store.js","webpack:///./node_modules/@noflux/react/dist/noflux-react.es.js","webpack:///./node_modules/@noflux/state/dist/noflux-state.es.js","webpack:///./node_modules/whatwg-fetch/fetch.js","webpack:///external \"React\"","webpack:///external \"ReactDOM\""],"names":["AccessMask","props","state","input","code","error","key","value","setState","action","Error","device","lockDevice","name","then","unlockDevice","selected","devices","get","map","e","set","secure","secret","size","changeInput","target","handleEnter","keyCode","randomCode","currentDevice","find","willBlockAccess","locked","cls","renderAccessPanel","renderSecretPanel","Component","connect","DeviceList","scanDevices","RecordListHeader","volumn","console","log","parent","createItem","createEditableList","RecordListItem","entityName","entityKey","dataSource","source","select","item","records","killRecord","record","id","index","findIndex","cursor","splice","update","next","$temp","undefined","editRecord","result","push","RecordEditor","model","onChange","onUpdate","onCancel","seal","checked","RecordViewer","unsealedValue","onActive","onRemove","onSelect","type","createEditableListItem","VolumnListHeader","filterVolumn","VolumnListItem","volumns","findRecords","killVolumn","findVolumns","editVolumn","VolumnEditor","VolumnViewer","Button","icon","children","onClick","Icon","Input","defaultValue","components","options","Editor","Viewer","validator","className","EditableListItem","stage","raiseRemove","cancelInput","raiseUpdate","raiseSelect","activeInput","HeaderView","FooterView","EditableList","idgen","prototype","unshift","i","indexOf","innerModel","outerModel","forEach","eo","ei","reconcileModel","length","selectItem","removeItem","updateItem"],"mappings":"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CA;AACA,IAAI,mDAAK;AACT,GAAG;;AAEH;AACA;AACA,IAAI,mDAAK;AACT,GAAG;;AAEH;AACA;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAOE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR,I;;;;;;;;;;;;AChHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACsC;AACJ;;AAElC,gBAAgB,mDAAK;;AAErB,cAAc,aAAoB;;AAElC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK,CAAC,+CAAS;;AAEf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAE0B;;;;;;;;;;;;;ACxQ1B;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6CAA6C,gBAAgB;;AAE7D;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH,sBAAsB;AACtB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qFAAqF;AACrF;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uEAAuE,aAAa;AACpF;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,0EAA0E,eAAe;AACzF;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,0EAA0E,eAAe;AACzF;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAEuB;;;;;;;;;;;;;ACtoBxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,qDAAqD;AACrD,OAAO;AACP;AACA,OAAO;AACP,4EAA4E;AAC5E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,qBAAqB;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA6B,0BAA0B,eAAe;AACtE;;AAEO;AACP;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACplBA,uB;;;;;;;;;;;ACAA,0B","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./lib/client/index.jsx\");\n","import React, { Component, cls } from 'react';\nimport { connect, state } from '@noflux/react';\nimport { action } from '../store';\nimport { Icon, Button } from './design';\nimport './AccessMask.scss';\n\nclass AccessMask extends Component {\n constructor(props) {\n super(props);\n this.state = {\n input: {\n code: ''\n },\n error: null\n };\n }\n\n changeInput(key, value) {\n const { input } = this.state;\n input[key] = value;\n this.setState({ input });\n }\n\n handleEnter(key, action) {\n if (key === 13) action();\n }\n\n randomCode() {\n throw new Error('not support');\n }\n\n lockDevice(device) {\n const { input } = this.state;\n return action.lockDevice({ \n device: { name: device.name, code: input.code }\n })\n .then(() => {})\n .catch((error) => {\n this.setState({ error: error.code })\n });\n }\n\n async unlockDevice(device) { \n const { input } = this.state; \n device = await action.unlockDevice({ \n device: { name: device.name, code: input.code }\n });\n device.selected = true;\n const devices = state.get('devices')\n .map(e => e.name === device.name ? device : e);\n state.set('devices', devices);\n input.code = ''\n this.setState({ input });\n }\n\n renderSecretPanel(device) {\n const { input, error } = this.state;\n if (!device) return;\n if (!device.secure.secret && device.size > 0) {\n return (\n
\n

danger

\n

your device is broken

\n
\n );\n }\n return (\n
\n

create secret

\n this.changeInput('code', e.target.value)}\n onKeyUp={e => this.handleEnter(e.keyCode, () => this.lockDevice(device))} />\n \n
\n );\n }\n\n renderAccessPanel(device) {\n const { input, error } = this.state;\n return (\n
\n

verify secret

\n this.changeInput('code', e.target.value)} \n onKeyUp={e => this.handleEnter(e.keyCode, () => this.unlockDevice(device))} />\n
\n );\n }\n\n render() {\n const devices = state.get('devices');\n const currentDevice = devices.find(e => e.selected);\n const willBlockAccess = !currentDevice || !currentDevice.secure.secret || currentDevice.secure.locked;\n return (\n
\n { (currentDevice && currentDevice.secure.secret)\n ? this.renderAccessPanel(currentDevice)\n : this.renderSecretPanel(currentDevice) }\n
\n );\n }\n}\n\nexport default connect(AccessMask);","// extracted by mini-css-extract-plugin","import React, { Component } from 'react';\nimport { connect, state } from '@noflux/react';\nimport { action } from '../store';\nimport { Icon } from './design';\nimport './DeviceList.scss';\n\nclass DeviceList extends Component {\n async componentDidMount() {\n await action.scanDevices();\n }\n\n async lockDevice(device) {\n if (device.secure.locked) return;\n device = await action.lockDevice({\n device: { name: device.name }\n });\n device.selected = true;\n const devices = state.get('devices')\n .map(e => e.name === device.name ? device : e);\n state.set('devices', devices);\n }\n\n render() {\n const devices = state.get('devices');\n return (\n
\n
    \n {devices.map(device => (\n
  • this.lockDevice(device)}>\n {device.name}\n \n
  • \n ))}\n
\n
\n );\n }\n}\n\nexport default connect(DeviceList);\n","// extracted by mini-css-extract-plugin","import React, { Component } from 'react';\nimport { createEditableList } from './higher/editable';\nimport { Button } from './design';\nimport RecordListItem from './RecordListItem';\nimport { connect, state } from '@noflux/react';\nimport { action } from '../store';\nimport './RecordList.scss';\n\nclass RecordListHeader extends Component {\n render() {\n const volumn = state.get('volumns').find(e => e.selected);\n console.log('volumn', volumn);\n if (!volumn) {\n return (\n
\n empty\n
\n );\n }\n return (\n
\n
\n
\n \n
\n
\n

{volumn.name}

\n
\n
\n
\n \n
\n
\n );\n }\n}\n\nexport default createEditableList(\n [\n RecordListItem,\n connect(RecordListHeader)\n ],\n {\n entityName: 'record',\n entityKey: 'id',\n dataSource: {\n source: () => {\n return state.get('records');\n },\n select: () => {},\n delete: async (item) => {\n const device = state.get('devices').find(e => e.selected);\n const volumn = state.get('volumns').find(e => e.selected);\n const records = state.get('records');\n await action.killRecord({\n device: { name: device.name },\n volumn: { name: volumn.name },\n record: { id: item.id }\n });\n const index = records.findIndex(e => e.id === item.id);\n if (index >= 0) {\n state.cursor('records').splice(index, 1);\n }\n },\n update: async (item, next) => {\n const device = state.get('devices').find(e => e.selected);\n const volumn = state.get('volumns').find(e => e.selected);\n const record = { ...next };\n if (item.$temp) {\n record.id = undefined;\n }\n await action.editRecord({\n device: { name: device.name },\n volumn: { name: volumn.name },\n record\n })\n .then(result => {\n record.id = result.id;\n // todo - show value ?\n });\n if (item.$temp) {\n state.cursor('records').push(record);\n } else {\n const records = state.get('records');\n const index = records.findIndex(e => e.id === item.id);\n state.cursor('records').splice(index, 1, record);\n }\n return next;\n }\n }\n }\n);\n","// extracted by mini-css-extract-plugin","import React, { Component } from 'react';\nimport { Button, Input } from './design';\nimport { createEditableListItem } from './higher/editable';\n\nclass RecordEditor extends Component {\n render() {\n const { model, input, onChange, onUpdate, onCancel } = this.props;\n return (\n
\n onChange('name', e.target.value)} />\n onChange('value', e.target.value)} />\n onChange('seal', e.target.checked)} />\n
\n
\n
\n );\n }\n}\n\nclass RecordViewer extends Component {\n constructor(props) {\n super(props);\n this.state = {\n model: {\n unsealedValue: false\n }\n };\n }\n\n render() {\n const { model, onActive, onRemove, onSelect } = this.props;\n return (\n
\n
{model.name}
\n
type = {model.type}
\n
\n { model.seal ? (this.state.model.unsealedValue && '***') : model.value }\n
\n
\n );\n }\n}\n\nexport default createEditableListItem(\n [\n RecordEditor,\n RecordViewer\n ],\n {\n entityName: 'record'\n }\n);\n","import React, { Component } from 'react';\nimport { state } from '@noflux/react';\nimport { action } from '../store';\nimport { createEditableList } from './higher/editable';\nimport { Button, Input } from './design';\nimport VolumnListItem from './VolumnListItem';\nimport './VolumnList.scss';\n\nclass VolumnListHeader extends Component {\n render() {\n return (\n
\n this.filterVolumn(e.target.value)} />\n
\n );\n }\n}\n\nexport default createEditableList(\n [\n VolumnListItem,\n VolumnListHeader\n ],\n {\n entityName: 'volumn',\n entityKey: 'name',\n dataSource: {\n source: () => {\n return state.get('volumns');\n },\n select: async (item) => {\n const volumns = state.get('volumns').map(e => {\n if (e.name === item.name) {\n item.selected = true;\n return item;\n }\n e.selected = false;\n return e;\n });\n state.set('volumns', volumns);\n const device = state.get('devices').find(e => e.selected);\n await action.findRecords({\n device: { name: device.name },\n volumn: { name: item.name }\n });\n },\n delete: async (item) => {\n const device = state.get('devices').find(e => e.selected);\n await action.killVolumn({\n device: { name: device.name },\n volumn: { name: item.name }\n });\n await action.findVolumns({\n device: { name: device.name }\n });\n },\n update: async (item, next) => {\n const device = state.get('devices').find(e => e.selected);\n await action.editVolumn({\n device: { name: device.name },\n volumn: next\n });\n await action.findVolumns({\n device: { name: device.name }\n });\n return next;\n }\n }\n }\n);\n","// extracted by mini-css-extract-plugin","import React, { Component } from 'react';\nimport { Button, Input } from './design';\nimport { createEditableListItem } from './higher/editable';\n\nclass VolumnEditor extends Component {\n render() {\n const { model, onChange, onUpdate, onCancel } = this.props;\n return (\n
\n onChange('name', e.target.value)} />\n
\n );\n }\n}\n\nclass VolumnViewer extends Component {\n render() {\n const { model, onActive, onRemove, onSelect, selected } = this.props;\n return (\n
\n
\n \n
\n
\n
{model.name}
\n { selected && (\n
\n \n \n
\n ) }\n
\n
\n );\n }\n}\n\nexport default createEditableListItem(\n [\n VolumnEditor,\n VolumnViewer\n ],\n {\n entityName: 'volumn'\n }\n);\n","import React, { Component, cls } from 'react';\nimport Icon from './Icon';\nimport './Button.scss';\n\nexport default function Button(props) {\n const { size, icon, children } = props;\n return (\n \n );\n}","// extracted by mini-css-extract-plugin","import React, { Component } from 'react';\nimport './Icon.scss';\n\nexport default function Icon(props) {\n return (\n {props.name}\n );\n}\n","// extracted by mini-css-extract-plugin","import React, { Component } from 'react';\nimport './Input.scss';\n\nexport default class Input extends Component {\n render() {\n const {\n type,\n defaultValue,\n onChange\n } = this.props;\n return (\n \n );\n }\n}","// extracted by mini-css-extract-plugin","import Button from './Button';\nimport Icon from './Icon';\nimport Input from './Input';\n\nexport {\n Button,\n Icon,\n Input\n};\n","import React, { Component, cls } from 'react';\nimport { connect, state } from '@noflux/react';\n\nexport function createEditableListItem(components, options) {\n const [\n Editor,\n Viewer\n ] = components;\n const {\n entityName,\n validator\n } = options;\n const className = `${entityName}-list-item`;\n class EditableListItem extends Component {\n constructor(props) {\n super(props);\n const { model } = props;\n this.state = {\n input: model.$temp ? {} : { ...model },\n error: null,\n stage: model.$temp ? 'editor' : 'viewer'\n };\n }\n\n changeInput(key, value) {\n const { input } = this.state;\n input[key] = value;\n this.setState({ input });\n }\n \n activeInput() {\n this.setState({ stage: 'editor' });\n }\n \n cancelInput() {\n const { model } = this.props;\n // todo - confirm unsaved\n if (model.$temp) {\n // only remove temp item\n this.raiseRemove();\n } else {\n this.setState({ stage: 'viewer' });\n }\n }\n\n raiseSelect() {\n if (this.props.onSelect) {\n this.props.onSelect();\n }\n }\n \n raiseRemove() {\n if (this.props.onRemove) {\n this.props.onRemove();\n }\n }\n \n raiseUpdate() {\n const { input } = this.state;\n if (validator) {\n const error = validator(input);\n this.setState({ error });\n if (error) {\n console.error(error);\n return;\n }\n }\n this.setState({ stage: 'viewer' });\n if (this.props.onUpdate) {\n this.props.onUpdate(input);\n }\n }\n \n render() {\n const { stage, input } = this.state;\n const { model, selected } = this.props;\n return (\n
  • \n { stage === 'editor' && (\n this.cancelInput()}\n onUpdate={() => this.raiseUpdate()}\n onChange={(key, value) => this.changeInput(key, value)} />\n ) }\n { stage === 'viewer' && (\n this.raiseSelect()}\n onActive={() => this.activeInput()}\n onRemove={() => this.raiseRemove()} />\n ) }\n
  • \n );\n }\n }\n return EditableListItem;\n}\n\nexport function createEditableList(components, options) {\n const [\n EditableListItem,\n HeaderView,\n FooterView\n ] = components;\n const {\n entityName,\n entityKey = 'key',\n dataSource,\n } = options;\n const className = `${entityName}-list`;\n class EditableList extends Component {\n constructor(props) {\n super(props);\n this.state = {\n model: []\n };\n this.idgen = 1;\n if (HeaderView) HeaderView.prototype.parent = this;\n if (FooterView) FooterView.prototype.parent = this;\n }\n\n createItem() {\n const { model } = this.state;\n model.unshift({ $temp: this.idgen });\n this.idgen += 1;\n this.setState({ model });\n }\n \n async selectItem(item) {\n await dataSource.select(item);\n }\n\n async removeItem(item) {\n if (!item.$temp) {\n await dataSource.delete(item);\n }\n const { model } = this.state;\n const i = model.indexOf(item);\n if (i >= 0) {\n model.splice(i, 1);\n this.setState({ model });\n }\n }\n \n async updateItem(item, next) {\n const result = await dataSource.update(item, next);\n const { model } = this.state;\n const i = model.indexOf(item);\n if (i >= 0) {\n model.splice(i, 1, result);\n this.setState({ model });\n }\n }\n\n reconcileModel() {\n const innerModel = this.state.model;\n const outerModel = dataSource.source();\n const model = [];\n innerModel.forEach(e => {\n if (e.$temp) model.push(e);\n });\n outerModel.forEach(eo => {\n const e = innerModel.find(ei => ei[entityKey] === eo[entityKey]);\n model.push(e || eo);\n });\n return model;\n }\n\n render() {\n const model = this.reconcileModel();\n return (\n
    \n { HeaderView && () }\n { model.length > 0 && (\n
      \n { model.map((item) => {\n return (\n this.selectItem(item)}\n onRemove={() => this.removeItem(item)} \n onUpdate={(input) => this.updateItem(item, input)} />\n );\n }) }\n
    \n ) }\n { FooterView && () }\n
    \n );\n }\n }\n return connect(EditableList);\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport React, { Component } from 'react';\n\nReact.cls = function concatClassNames() {\n var names = arguments;\n\n if (arguments.length === 1) {\n names = arguments[0];\n } else {\n names = Array.prototype.slice.call(arguments);\n }\n\n if (Array.isArray(names)) {\n return names.filter(Boolean).join(' ');\n }\n\n return names;\n};\n\nimport { connect, state } from '@noflux/react';\nimport store from './store';\nimport DeviceList from './component/DeviceList';\nimport VolumnList from './component/VolumnList';\nimport RecordList from './component/RecordList';\nimport AccessMask from './component/AccessMask';\nimport './index.scss';\n\nvar App = /*#__PURE__*/function (_Component) {\n _inherits(App, _Component);\n\n var _super = _createSuper(App);\n\n function App(props) {\n var _this;\n\n _classCallCheck(this, App);\n\n _this = _super.call(this, props);\n store.initialize();\n return _this;\n }\n\n _createClass(App, [{\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"side\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"header\"\n }, /*#__PURE__*/React.createElement(\"h1\", null, \"KeyRoll\")), /*#__PURE__*/React.createElement(DeviceList, null)), /*#__PURE__*/React.createElement(\"div\", {\n className: \"main\"\n }, /*#__PURE__*/React.createElement(VolumnList, null), /*#__PURE__*/React.createElement(RecordList, null), /*#__PURE__*/React.createElement(AccessMask, null)));\n }\n }]);\n\n return App;\n}(Component);\n\nexport default connect(App);;(function(){if (typeof window !== 'undefined' && window) {\n if (!window.epii) window.epii = {};\n if (typeof __webpack_exports__ !== 'undefined' && __webpack_exports__) {\n var capture = __webpack_exports__.default;\n if (!capture) {\n var keys = Object.keys(__webpack_exports__);\n if (keys.length > 0) {\n capture = __webpack_exports__[keys[0]];\n }\n }\n window.epii.entry = capture;\n } else {\n console.error('settle-loader error :: __webpack_exports__ not found');\n }\n};require('react-dom');}());","// extracted by mini-css-extract-plugin","import 'whatwg-fetch';\nimport { state } from '@noflux/react';\n\nfunction raiseQuery(action, payload) {\n console.warn(`action [${action}] <=`, payload)\n const apiPath = `/__/data/${action}`;\n return fetch(apiPath, {\n method: 'POST',\n body: JSON.stringify(payload),\n // headers: {}\n })\n .then(response => response.json())\n .then(json => {\n if (json.state === 0) {\n console.warn(`action [${action}] =>`, json.model);\n return json.model;\n }\n console.error(`action [${action}] =>`, json.error);\n console.warn(json.stack);\n throw new Error('server error');\n });\n}\n\nfunction initialize() {\n state.set({\n devices: [],\n volumns: [],\n records: [],\n });\n}\n\nconst stateActions = {\n scanDevices: async (model) => {\n const devices = model;\n if (devices.length > 0) {\n const device = devices[0];\n device.selected = true;\n await actionHandler.findVolumns({\n device: { name: device.name }\n });\n }\n state.set('devices', devices);\n },\n\n lockDevice: (model) => {\n const device = model;\n const devices = state.get('devices')\n .map(e => e.name === device.name ? device : e);\n state.set('devices', devices);\n },\n\n unlockDevice: (model) => {\n const device = model;\n const devices = state.get('devices')\n .map(e => e.name === device.name ? device : e);\n state.set('devices', devices);\n },\n \n findVolumns: (model) => {\n const volumns = model;\n state.set('volumns', volumns);\n },\n\n findRecords: (model) => {\n const records = model;\n state.set('records', records);\n },\n\n killRecord: (model) => {\n }\n};\n\nconst actionHandler = new Proxy({}, {\n get: (o, prop) => {\n // todo - use o to do sth magic\n return async (payload) => {\n const model = await raiseQuery(prop, payload);\n const stateAction = stateActions[prop];\n if (stateAction) {\n await stateAction(model);\n }\n return model;\n }\n }\n});\n\nconst store = {\n initialize,\n raiseQuery,\n action: actionHandler,\n};\n\nexport {\n initialize,\n raiseQuery,\n actionHandler as action,\n store as default,\n};\n\n// export function findRecord(query) {\n// return fetchData('findRecord', query);\n// }\n\n// export function findRecords(query) {\n// return fetchData('findRecords', query);\n// }\n\n// export function killRecord(query, model) {\n// return fetchData('killRecord', query, model)\n// .then(result => {\n// console.log('killRecord', result);\n// });\n// }","/*\n * @license\n * @noflux/react v1.0.0\n * (c) 2017-2018 Malash \n * Released under the MIT License.\n */\nimport { State } from '@noflux/state';\nimport { Component } from 'react';\n\nvar state = new State();\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\n/* global performance */\nvar timer = typeof performance !== 'undefined' && performance && performance.now ? performance : Date;\n\nvar isReactComponent = function isReactComponent(Component$$1) {\n return Boolean(Component$$1 && Component$$1.prototype && typeof Component$$1.prototype.render === 'function');\n};\n\nvar isReactComponentInstance = function isReactComponentInstance(instance) {\n return Boolean(instance && typeof instance.render === 'function');\n};\n\nvar getComponentName = function getComponentName(Component$$1) {\n var constructor = Component$$1.prototype && Component$$1.prototype.constructor;\n return Component$$1.displayName || constructor && constructor.displayName || Component$$1.name || constructor && constructor.name || 'Component';\n};\n\n// detect if the component is rendering from the client or the server\n// copy from fbjs/lib/ExecutionEnvironment\n// https://github.com/facebook/fbjs/blob/38bf26f4e6ea64d7ff68393919fb5e98f5ceac3b/packages/fbjs/src/core/ExecutionEnvironment.js#L12-L16\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\n\nvar SYMBOL_NOFLUX = hasSymbol ? Symbol.for('noflux') : '__noflux';\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar connectComponent = function connectComponent(Target) {\n if (Target[SYMBOL_NOFLUX]) {\n throw new SyntaxError('You should not use @connect for component ' + getComponentName(Target) + ' more than once.');\n }\n Target[SYMBOL_NOFLUX] = {};\n\n // skip event listening for server-side rendering\n if (!canUseDOM) {\n return Target;\n }\n\n var ConnectedComponent = function (_Target) {\n inherits(ConnectedComponent, _Target);\n\n function ConnectedComponent(props) {\n classCallCheck(this, ConnectedComponent);\n\n // init\n var _this = possibleConstructorReturn(this, (ConnectedComponent.__proto__ || Object.getPrototypeOf(ConnectedComponent)).call(this, props));\n\n _this[SYMBOL_NOFLUX] = {\n getPaths: {},\n onSetDisposers: [],\n mounted: false,\n isForcingUpdate: false\n };\n var __noflux = _this[SYMBOL_NOFLUX];\n\n var onSet = function onSet() {\n // skip re-render after unmounting component\n // TODO: test this guard\n if (!__noflux.mounted) return;\n\n // skip duplicate forceUpdate calling\n if (__noflux.isForcingUpdate) return;\n __noflux.isForcingUpdate = true;\n\n var startTime = timer.now();\n _this.forceUpdate(function () {\n __noflux.isForcingUpdate = false;\n\n var endTime = timer.now();\n var cost = endTime - startTime;\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[noflux] ' + getComponentName(Target) + ' rendering time ' + cost.toFixed(3) + ' ms');\n }\n });\n };\n __noflux.onGetDisposer = state.on('get', function (_ref) {\n var path = _ref.path;\n\n if (__noflux.isRendering && !__noflux.getPaths[path]) {\n __noflux.getPaths[path] = true;\n // register cursor on set handler\n __noflux.onSetDisposers.push(state.cursor(path).on('set', onSet));\n }\n });\n return _this;\n }\n\n createClass(ConnectedComponent, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // set component mounted flag\n this[SYMBOL_NOFLUX].mounted = true;\n\n // call origin componentDidMount\n if (get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'componentDidMount', this)) {\n get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'componentDidMount', this).call(this);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n var __noflux = this[SYMBOL_NOFLUX];\n // dispose cursor on set listeners\n __noflux.onSetDisposers.forEach(function (disposer) {\n return disposer();\n });\n\n // dispose get listener\n __noflux.onGetDisposer();\n\n // reset component mounted flag\n __noflux.mounted = false;\n\n // call origin componentWillUnmount\n if (get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'componentWillUnmount', this)) {\n get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'componentWillUnmount', this).call(this);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n if (!get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'render', this)) {\n throw new Error('No render method found on the returned component instance of ' + getComponentName(Target) + ', you may have forgotten to define render.');\n }\n\n var __noflux = this[SYMBOL_NOFLUX];\n __noflux.isRendering = true;\n var vdom = get(ConnectedComponent.prototype.__proto__ || Object.getPrototypeOf(ConnectedComponent.prototype), 'render', this).call(this);\n __noflux.isRendering = false;\n return vdom;\n }\n }]);\n return ConnectedComponent;\n }(Target);\n\n ConnectedComponent.displayName = 'Connect(' + getComponentName(Target) + ')';\n\n return ConnectedComponent;\n};\n\nvar connect = function connect(target, prop, descriptor) {\n if (!target) {\n throw new TypeError('@connect() is invalid, do you mean @connect ?');\n }\n if (isReactComponentInstance(target) && prop && descriptor) {\n throw new SyntaxError('@connect should not be used for component method.');\n }\n if (!isReactComponent(target)) {\n if (typeof target !== 'function') {\n throw new TypeError('@connect should be used for React component');\n }\n\n var ConnectedComponent = function (_Component) {\n inherits(ConnectedComponent, _Component);\n\n function ConnectedComponent() {\n classCallCheck(this, ConnectedComponent);\n return possibleConstructorReturn(this, (ConnectedComponent.__proto__ || Object.getPrototypeOf(ConnectedComponent)).apply(this, arguments));\n }\n\n createClass(ConnectedComponent, [{\n key: 'render',\n value: function render() {\n return target.call(this, this.props, this.context);\n }\n }]);\n return ConnectedComponent;\n }(Component);\n\n ConnectedComponent.displayName = 'Connect(' + getComponentName(target) + ')';\n ConnectedComponent.contextTypes = target.contextTypes;\n ConnectedComponent.propTypes = target.propTypes;\n ConnectedComponent.defaultProps = target.defaultProps;\n\n return connectComponent(ConnectedComponent);\n }\n return connectComponent(target);\n};\n\nexport { state, connect };\n","/*\n * @license\n * @noflux/state v1.0.1\n * (c) 2017-2018 Malash \n * Released under the MIT License.\n */\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nvar SYMBOL_NOFLUX = '__noflux';\n\n/*\n * JSON Pointer style escape\n * http://tools.ietf.org/html/rfc6901\n */\nvar escapePath = function escapePath(path) {\n return path.replace(/~/g, '~1').replace(/\\./g, '~0');\n};\nvar unescapePath = function unescapePath(path) {\n return path.replace(/~0/g, '.').replace(/~1/g, '~');\n};\n\nvar parsePath = function parsePath(path) {\n if (Array.isArray(path)) {\n return path;\n }\n if (typeof path === 'string') {\n if (!path.length) {\n return [];\n }\n // path with dot, e.g. 'a~1b.c' => ['a.b', 'c']\n if (path.indexOf('~') !== -1) {\n return path.split('.').map(unescapePath);\n }\n return path.split('.');\n }\n throw Error('State.prototype.cursor only accept string or array, ' + (typeof path === 'undefined' ? 'undefined' : _typeof(path)) + ' is forbidden');\n};\n\nvar stringifyPath = function stringifyPath(path) {\n if (typeof path === 'string') {\n return path;\n }\n if (Array.isArray(path)) {\n // path with dot, e.g. ['a.b', 'c'] => 'a~1b.c'\n return path.map(escapePath).join('.');\n }\n throw Error('State.prototype.cursor only accept string or array, ' + (typeof path === 'undefined' ? 'undefined' : _typeof(path)) + ' is forbidden');\n};\n\nvar isNullOrUndefined = function isNullOrUndefined(obj) {\n return obj === undefined || obj === null;\n};\n\nvar getByPath = function getByPath(obj, path) {\n var pointer = obj;\n for (var i = 0; i < path.length; i += 1) {\n var next = path[i];\n // only null and undefined has no properties\n // ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/No_properties\n if (isNullOrUndefined(pointer)) {\n return undefined;\n }\n pointer = pointer[next];\n }\n return pointer;\n};\n\nvar isObject = function isObject(obj) {\n return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null;\n};\nvar isNumeric = function isNumeric(num) {\n return !isNaN(num) && num !== '';\n};\n\nvar shallowClone = function shallowClone(obj) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n if (Array.isArray(obj)) {\n return [].concat(toConsumableArray(obj));\n } else if (isObject(obj)) {\n return _extends({}, obj);\n }\n if (isNumeric(path)) {\n return [];\n } else {\n return {};\n }\n};\n\nvar HEAD = 'HEAD';\nvar setByPath = function setByPath(obj) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var value = arguments[2];\n\n if (!path.length) {\n return value;\n }\n\n var root = {};\n root[HEAD] = obj;\n var parentPointer = root;\n var lastNext = HEAD;\n var pointer = obj;\n for (var i = 0; i < path.length; i += 1) {\n var next = path[i];\n parentPointer[lastNext] = shallowClone(pointer, next);\n parentPointer = parentPointer[lastNext];\n lastNext = next;\n if (isNullOrUndefined(pointer)) {\n // always skip traversing null or undefined\n pointer = null;\n } else {\n pointer = pointer[next];\n }\n }\n parentPointer[lastNext] = value;\n return root[HEAD];\n};\n\n// null or undefined will cause an error\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from\nvar arrayFromAllowNullOrUndefined = function arrayFromAllowNullOrUndefined(arrayLike) {\n return isNullOrUndefined(arrayLike) ? [] : [].concat(toConsumableArray(arrayLike));\n};\n\nvar count = 1;\nvar getNextId = function getNextId() {\n count += 1;\n return count;\n};\n\nvar removeFirstFromArray = function removeFirstFromArray(array, value) {\n var pos = array.indexOf(value);\n if (pos !== -1) {\n // about 1.5x faster than the two-arg version of Array#splice() as nodejs said\n // https://github.com/nodejs/node/blob/v6.x/lib/events.js#L470-L475\n for (var i = pos, k = i + 1, n = array.length; k < n; i += 1, k += 1) {\n array[i] = array[k];\n }\n array.pop();\n }\n};\n\nvar Store = function () {\n function Store() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n data = _ref.data,\n _ref$maxSnapshots = _ref.maxSnapshots,\n maxSnapshots = _ref$maxSnapshots === undefined ? Infinity : _ref$maxSnapshots;\n\n classCallCheck(this, Store);\n\n this.__data = data;\n this.__maxSnapshots = maxSnapshots;\n this.__snapshots = [];\n this.__snapshotIndex = -1;\n }\n\n createClass(Store, [{\n key: 'read',\n value: function read(path) {\n return getByPath(this.__data, path);\n }\n }, {\n key: 'write',\n value: function write(path, value) {\n this.__data = setByPath(this.__data, path, value);\n }\n }, {\n key: 'snapshot',\n value: function snapshot() {\n this.__snapshotIndex += 1;\n this.__snapshots[this.__snapshotIndex] = this.__data;\n // override redid snapshots\n this.__snapshots.length = this.__snapshotIndex + 1;\n if (this.__snapshots.length > this.maxSnapshots) {\n this.__snapshots.shift();\n this.__snapshotIndex -= 1;\n }\n }\n }, {\n key: 'canUndo',\n value: function canUndo() {\n return this.__snapshotIndex > 0;\n }\n }, {\n key: 'undo',\n value: function undo() {\n if (!this.canUndo()) {\n throw new RangeError('no more snapshot available');\n }\n this.__snapshotIndex -= 1;\n this.__data = this.__snapshots[this.__snapshotIndex];\n }\n }, {\n key: 'canRedo',\n value: function canRedo() {\n return this.__snapshotIndex + 1 < this.__snapshots.length;\n }\n }, {\n key: 'redo',\n value: function redo() {\n if (!this.canRedo()) {\n throw new RangeError('no more snapshot available');\n }\n this.__snapshotIndex += 1;\n this.__data = this.__snapshots[this.__snapshotIndex];\n }\n }]);\n return Store;\n}();\n\n// reduce property get times will accelerate 10%~15%\nvar SYMBOL_NOFLUX_ID = SYMBOL_NOFLUX + '_id';\n\nvar getListenerId = function getListenerId(listener) {\n var autoGenerate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // unique id for each listener\n if (autoGenerate && listener[SYMBOL_NOFLUX_ID] === undefined) {\n Object.defineProperty(listener, SYMBOL_NOFLUX_ID, {\n enumerable: false,\n writable: true,\n configurable: true,\n value: getNextId()\n });\n }\n return listener[SYMBOL_NOFLUX_ID];\n};\n\n/*\n * for performance hit, every node maintain ownListeners and subtreeListeners\n * ownListeners[listenerId] = listener on current path\n * subtreeListeners[listenerId] = merge(\n * ownListeners[listenerId],\n * children.every.subtreeListeners[listenerId],\n * )\n */\nvar ListenerTreeNode = function ListenerTreeNode() {\n classCallCheck(this, ListenerTreeNode);\n this.children = {};\n this.subtreeListeners = [];\n this.ownListeners = [];\n};\n\nvar ListenerTree = function () {\n function ListenerTree() {\n classCallCheck(this, ListenerTree);\n this.__tree = new ListenerTreeNode();\n }\n\n createClass(ListenerTree, [{\n key: '__traverse',\n value: function __traverse(_ref) {\n var path = _ref.path,\n _ref$createEmptyPath = _ref.createEmptyPath,\n createEmptyPath = _ref$createEmptyPath === undefined ? false : _ref$createEmptyPath,\n callbackBeforeRecursion = _ref.callbackBeforeRecursion,\n callbackAfterRecursion = _ref.callbackAfterRecursion,\n callbackAtBottom = _ref.callbackAtBottom;\n\n var pointer = this.__tree;\n // save call stack for backtracking\n var stack = [];\n stack.push(pointer);\n for (var index = 0; index <= path.length; index += 1) {\n var isAtBottom = index === path.length || !createEmptyPath && pointer.children[path[index]] === undefined;\n if (isAtBottom && callbackAtBottom) {\n callbackAtBottom(pointer, index);\n break;\n }\n if (callbackBeforeRecursion) {\n callbackBeforeRecursion(pointer);\n }\n var child = path[index];\n if (pointer.children[child] === undefined) {\n pointer.children[child] = new ListenerTreeNode();\n }\n pointer = pointer.children[child];\n stack.push(pointer);\n }\n if (callbackAfterRecursion) {\n while (stack.length) {\n pointer = stack.pop();\n callbackAfterRecursion(pointer);\n }\n }\n }\n }, {\n key: 'addListener',\n value: function addListener(path, listener) {\n var _this = this;\n\n if (typeof listener !== 'function') {\n throw new TypeError('\"listener\" argument must be a function');\n }\n // init listener id\n getListenerId(listener, true);\n this.__traverse({\n path: path,\n createEmptyPath: true,\n callbackAfterRecursion: function callbackAfterRecursion(node) {\n return node.subtreeListeners.push(listener);\n },\n callbackAtBottom: function callbackAtBottom(node) {\n return node.ownListeners.push(listener);\n }\n });\n return function () {\n _this.removeListener(path, listener);\n };\n }\n }, {\n key: 'removeListener',\n value: function removeListener(path, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('\"listener\" argument must be a function');\n }\n this.__traverse({\n path: path,\n callbackAfterRecursion: function callbackAfterRecursion(node) {\n return removeFirstFromArray(node.subtreeListeners, listener);\n },\n callbackAtBottom: function callbackAtBottom(node) {\n return removeFirstFromArray(node.ownListeners, listener);\n }\n });\n }\n\n // path [a, b, ..., n] will emit\n // merge(ownListener[root], ownListener[a], ownListener[b], ..., subtreeListener[n])\n\n }, {\n key: 'emit',\n value: function emit(path, data) {\n var listeners = [];\n this.__traverse({\n path: path,\n callbackAtBottom: function callbackAtBottom(node, index) {\n // if emit an empty path, there is no subtree\n if (index === path.length) {\n listeners.push.apply(listeners, toConsumableArray(node.subtreeListeners));\n }\n },\n callbackAfterRecursion: function callbackAfterRecursion(node) {\n if (node.ownListeners.length) {\n listeners.push.apply(listeners, toConsumableArray(node.ownListeners));\n }\n }\n });\n var called = {};\n for (var index = 0; index < listeners.length; index += 1) {\n var listener = listeners[index];\n var listenerId = getListenerId(listener);\n // same listener will call once\n if (!called[listenerId]) {\n called[listenerId] = true;\n listener(data);\n }\n }\n }\n }, {\n key: 'on',\n value: function on(path, listener) {\n return this.addListener(path, listener);\n }\n }, {\n key: 'off',\n value: function off(path, listener) {\n this.removeListener(path, listener);\n }\n }]);\n return ListenerTree;\n}();\n\nvar State = function () {\n function State() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$store = _ref.store,\n store = _ref$store === undefined ? new Store() : _ref$store,\n _ref$cursor = _ref.cursor,\n cursor = _ref$cursor === undefined ? [] : _ref$cursor,\n _ref$emitters = _ref.emitters,\n emitters = _ref$emitters === undefined ? {\n get: new ListenerTree(),\n set: new ListenerTree()\n } : _ref$emitters;\n\n classCallCheck(this, State);\n\n this.__store = store;\n this.__cursor = cursor;\n this.__emitters = emitters;\n }\n\n createClass(State, [{\n key: 'cursor',\n value: function cursor() {\n var subPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var __store = this.__store,\n __cursor = this.__cursor,\n __emitters = this.__emitters;\n\n subPath = parsePath(subPath);\n return new State({\n store: __store,\n cursor: __cursor.concat(subPath),\n emitters: __emitters\n });\n }\n }, {\n key: 'get',\n value: function get$$1() {\n var subPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var length = arguments.length;\n\n if (length !== 0) {\n return this.cursor(subPath).get();\n }\n var value = this.__store.read(this.__cursor);\n this.__emitters.get.emit(this.__cursor, {\n path: stringifyPath(this.__cursor),\n value: value\n });\n return value;\n }\n }, {\n key: 'set',\n value: function set$$1(subPath, value) {\n var length = arguments.length;\n\n if (length < 1) {\n throw new TypeError('value argument must be set');\n }\n if (length === 1) {\n var _ref2 = [undefined, subPath];\n subPath = _ref2[0];\n value = _ref2[1];\n }\n if (subPath !== undefined) {\n return this.cursor(subPath).set(value);\n }\n this.__store.write(this.__cursor, value);\n this.__emitters.set.emit(this.__cursor, {\n path: stringifyPath(this.__cursor),\n value: value\n });\n }\n }, {\n key: 'update',\n value: function update(subPath, callback) {\n var length = arguments.length;\n\n if (length < 1) {\n throw new TypeError('callback argument must be set');\n }\n if (length === 1) {\n var _ref3 = [undefined, subPath];\n subPath = _ref3[0];\n callback = _ref3[1];\n }\n if (typeof callback !== 'function') {\n throw new TypeError('callback argument must be a function');\n }\n var s = subPath === undefined ? this : this.cursor(subPath);\n s.set(callback(s.get()));\n }\n }, {\n key: '__getEmitterByName',\n value: function __getEmitterByName(message) {\n if (!this.__emitters[message]) {\n throw new Error('event not allowed');\n }\n return this.__emitters[message];\n }\n }, {\n key: 'on',\n value: function on(message, callback) {\n return this.__getEmitterByName(message).on(this.__cursor, callback);\n }\n }, {\n key: 'addEventListener',\n value: function addEventListener(message, callback) {\n return this.on(message, callback);\n }\n }, {\n key: 'off',\n value: function off(message, callback) {\n this.__getEmitterByName(message).off(this.__cursor, callback);\n }\n }, {\n key: 'removeEventListener',\n value: function removeEventListener(message, callback) {\n this.off(message, callback);\n }\n\n // snapshot support\n\n }, {\n key: 'snapshot',\n value: function snapshot() {\n this.__store.snapshot();\n }\n }, {\n key: 'canUndo',\n value: function canUndo() {\n return this.__store.canUndo();\n }\n }, {\n key: 'undo',\n value: function undo() {\n this.__store.undo();\n // snapshot always emit root event\n this.__emitters.set.emit([], {\n path: stringifyPath([]),\n value: this.__store.read([])\n });\n }\n }, {\n key: 'canRedo',\n value: function canRedo() {\n return this.__store.canRedo();\n }\n }, {\n key: 'redo',\n value: function redo() {\n this.__store.redo();\n // snapshot always emit root event\n this.__emitters.set.emit([], {\n path: stringifyPath([]),\n value: this.__store.read([])\n });\n }\n\n // immutable Array operators\n\n }, {\n key: '__arrayOperator',\n value: function __arrayOperator(operator, values) {\n var array = arrayFromAllowNullOrUndefined(this.get());\n Array.prototype[operator].apply(array, values);\n this.set(array);\n }\n }, {\n key: 'push',\n value: function push() {\n for (var _len = arguments.length, values = Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n this.__arrayOperator('push', values);\n }\n }, {\n key: 'pop',\n value: function pop() {\n this.__arrayOperator('pop');\n }\n }, {\n key: 'unshift',\n value: function unshift() {\n for (var _len2 = arguments.length, values = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n values[_key2] = arguments[_key2];\n }\n\n this.__arrayOperator('unshift', values);\n }\n }, {\n key: 'shift',\n value: function shift() {\n this.__arrayOperator('shift');\n }\n }, {\n key: 'fill',\n value: function fill(value) {\n this.__arrayOperator('fill', [value]);\n }\n }, {\n key: 'reverse',\n value: function reverse() {\n this.__arrayOperator('reverse');\n }\n }, {\n key: 'splice',\n value: function splice() {\n for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n this.__arrayOperator('splice', values);\n }\n }]);\n return State;\n}();\n\nexport { State, Store };\n","var global =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n (typeof global !== 'undefined' && global)\n\nvar support = {\n searchParams: 'URLSearchParams' in global,\n iterable: 'Symbol' in global && 'iterator' in Symbol,\n blob:\n 'FileReader' in global &&\n 'Blob' in global &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in global,\n arrayBuffer: 'ArrayBuffer' in global\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n }\n if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : ''\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = global.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === '' && global.location.href ? global.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob'\n } else if (\n support.arrayBuffer &&\n request.headers.get('Content-Type') &&\n request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n ) {\n xhr.responseType = 'arraybuffer'\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!global.fetch) {\n global.fetch = fetch\n global.Headers = Headers\n global.Request = Request\n global.Response = Response\n}\n","module.exports = React;","module.exports = ReactDOM;"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/static/launch.js b/views/lib/static/launch.js similarity index 100% rename from lib/static/launch.js rename to views/lib/static/launch.js diff --git a/package-lock.json b/views/package-lock.json similarity index 100% rename from package-lock.json rename to views/package-lock.json diff --git a/package.json b/views/package.json similarity index 100% rename from package.json rename to views/package.json From 15b8e7b3dd259ba749a0a7a74b84b294714c5ce9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Oct 2020 02:53:01 +0000 Subject: [PATCH 2/2] Bump node-fetch from 2.6.0 to 2.6.1 in /views Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1. - [Release notes](https://github.com/bitinn/node-fetch/releases) - [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1) Signed-off-by: dependabot[bot] --- views/package-lock.json | 8 ++++---- views/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/views/package-lock.json b/views/package-lock.json index e3e85fe..f3337af 100644 --- a/views/package-lock.json +++ b/views/package-lock.json @@ -1,6 +1,6 @@ { "name": "keyroll", - "version": "0.3.2", + "version": "0.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4713,9 +4713,9 @@ "dev": true }, "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "node-libs-browser": { "version": "2.2.1", diff --git a/views/package.json b/views/package.json index 8c825cc..07c31cc 100644 --- a/views/package.json +++ b/views/package.json @@ -28,7 +28,7 @@ "@epiijs/minion": "^1.3.0", "@noflux/react": "^1.0.0", "nanoid": "^3.1.12", - "node-fetch": "^2.6.0" + "node-fetch": "^2.6.1" }, "optionalDependencies": { "chalk": "^3.0.0"