diff --git a/packages/contract-console/.gitignore b/packages/contract-console-ts/.gitignore similarity index 100% rename from packages/contract-console/.gitignore rename to packages/contract-console-ts/.gitignore diff --git a/packages/contract-console/README.md b/packages/contract-console-ts/README.md similarity index 100% rename from packages/contract-console/README.md rename to packages/contract-console-ts/README.md diff --git a/packages/contract-console/babel.config.js b/packages/contract-console-ts/babel.config.js similarity index 100% rename from packages/contract-console/babel.config.js rename to packages/contract-console-ts/babel.config.js diff --git a/packages/contract-console/output.js b/packages/contract-console-ts/output.js similarity index 100% rename from packages/contract-console/output.js rename to packages/contract-console-ts/output.js diff --git a/packages/contract-console/package.json b/packages/contract-console-ts/package.json similarity index 98% rename from packages/contract-console/package.json rename to packages/contract-console-ts/package.json index 10d7ebe0fc455c95f8d502f6ec5ab5515dd1e4b1..8258587eebabb83a5a61822e73e0cce4f807a44a 100644 --- a/packages/contract-console/package.json +++ b/packages/contract-console-ts/package.json @@ -30,7 +30,7 @@ "@vue/test-utils": "1.0.0-beta.29", "chai": "^4.2.0", "jsonql-client": "^1.2.4", - "jsonql-koa": "^1.3.3", + "jsonql-koa": "^1.3.4", "lint-staged": "^9.2.1", "server-io-core": "^1.2.0-beta.2", "typescript": "^3.5.3", diff --git a/packages/contract-console/public/favicon.ico b/packages/contract-console-ts/public/favicon.ico similarity index 100% rename from packages/contract-console/public/favicon.ico rename to packages/contract-console-ts/public/favicon.ico diff --git a/packages/contract-console/public/index.html b/packages/contract-console-ts/public/index.html similarity index 100% rename from packages/contract-console/public/index.html rename to packages/contract-console-ts/public/index.html diff --git a/packages/contract-console/src/App.vue b/packages/contract-console-ts/src/App.vue similarity index 100% rename from packages/contract-console/src/App.vue rename to packages/contract-console-ts/src/App.vue diff --git a/packages/contract-console/src/assets/logo.png b/packages/contract-console-ts/src/assets/logo.png similarity index 100% rename from packages/contract-console/src/assets/logo.png rename to packages/contract-console-ts/src/assets/logo.png diff --git a/packages/contract-console/src/components/HelloWorld.vue b/packages/contract-console-ts/src/components/HelloWorld.vue similarity index 100% rename from packages/contract-console/src/components/HelloWorld.vue rename to packages/contract-console-ts/src/components/HelloWorld.vue diff --git a/packages/contract-console/src/main.ts b/packages/contract-console-ts/src/main.ts similarity index 100% rename from packages/contract-console/src/main.ts rename to packages/contract-console-ts/src/main.ts diff --git a/packages/contract-console-ts/src/plugin/client.ts b/packages/contract-console-ts/src/plugin/client.ts new file mode 100644 index 0000000000000000000000000000000000000000..845961f66cac62d152ed329c738297923071a158 --- /dev/null +++ b/packages/contract-console-ts/src/plugin/client.ts @@ -0,0 +1,14 @@ + +import Fly from 'flyio/dist/npm/fly' +import jsonqlClient from 'jsonql-client' + +const createClient = async (contract: any, options: any) => await jsonqlClient( + Object.assign({ + hostname: 'http://localhost:8080', + keepContract: false, + showContractDesc: true, + contract + }, options) +) + +export default createClient diff --git a/packages/contract-console-ts/src/plugin/jsonql.ts b/packages/contract-console-ts/src/plugin/jsonql.ts new file mode 100644 index 0000000000000000000000000000000000000000..30322b97cf174872fcff133f0717c6ca9c44dea1 --- /dev/null +++ b/packages/contract-console-ts/src/plugin/jsonql.ts @@ -0,0 +1,10 @@ + +import contract from './public-contract.json' + +import client from './client' + +export default { + install(Vue: any, options: any = {}) { + Vue.JsonqlClient = client(contract, options) + } +} diff --git a/packages/contract-console-ts/src/plugin/public-contract.json b/packages/contract-console-ts/src/plugin/public-contract.json new file mode 100644 index 0000000000000000000000000000000000000000..c7808b85dd107461dbde05cacbebb7de39147319 --- /dev/null +++ b/packages/contract-console-ts/src/plugin/public-contract.json @@ -0,0 +1,62 @@ +{ + "query": { + "helloWorld": { + "description": "This is the stock resolver for testing purpose", + "params": [], + "returns": [ + { + "type": "string", + "description": "stock message" + } + ] + }, + "defaultCall": { + "description": false, + "params": [ + { + "type": [ + "number" + ], + "description": "a phony id", + "name": "id" + } + ], + "returns": [ + { + "type": [ + "object" + ], + "description": "an object with whatever" + } + ] + } + }, + "mutation": { + "defaultSave": { + "description": false, + "params": [ + { + "type": [ + "object" + ], + "name": "payload" + }, + { + "type": [ + "object" + ], + "name": "condition" + } + ], + "returns": [ + { + "type": [ + "boolean" + ] + } + ] + } + }, + "auth": {}, + "timestamp": 1563798679 +} diff --git a/packages/contract-console/src/shims-tsx.d.ts b/packages/contract-console-ts/src/shims-tsx.d.ts similarity index 100% rename from packages/contract-console/src/shims-tsx.d.ts rename to packages/contract-console-ts/src/shims-tsx.d.ts diff --git a/packages/contract-console/src/shims-vue.d.ts b/packages/contract-console-ts/src/shims-vue.d.ts similarity index 100% rename from packages/contract-console/src/shims-vue.d.ts rename to packages/contract-console-ts/src/shims-vue.d.ts diff --git a/packages/contract-console/src/store.ts b/packages/contract-console-ts/src/store.ts similarity index 63% rename from packages/contract-console/src/store.ts rename to packages/contract-console-ts/src/store.ts index a8822289a2a91f7df4a4a3f8b61c4f2ca65a997c..fead3eaf2585b453533ebe2c2d1ae4a4af61de3e 100644 --- a/packages/contract-console/src/store.ts +++ b/packages/contract-console-ts/src/store.ts @@ -1,10 +1,9 @@ import Vue from 'vue'; import Vuex from 'vuex'; -import createClient from './client' +import JsonqlClient from './plugin/jsonql' -const client = createClient() - -Vue.use(Vuex); +Vue.use(Vuex) +Vue.use(JsonqlClient) export default new Vuex.Store({ state: { diff --git a/packages/contract-console/tests/fixtures/contract/contract.json b/packages/contract-console-ts/tests/fixtures/contract/contract.json similarity index 100% rename from packages/contract-console/tests/fixtures/contract/contract.json rename to packages/contract-console-ts/tests/fixtures/contract/contract.json diff --git a/packages/contract-console-ts/tests/fixtures/contract/public-contract.json b/packages/contract-console-ts/tests/fixtures/contract/public-contract.json new file mode 100644 index 0000000000000000000000000000000000000000..c7808b85dd107461dbde05cacbebb7de39147319 --- /dev/null +++ b/packages/contract-console-ts/tests/fixtures/contract/public-contract.json @@ -0,0 +1,62 @@ +{ + "query": { + "helloWorld": { + "description": "This is the stock resolver for testing purpose", + "params": [], + "returns": [ + { + "type": "string", + "description": "stock message" + } + ] + }, + "defaultCall": { + "description": false, + "params": [ + { + "type": [ + "number" + ], + "description": "a phony id", + "name": "id" + } + ], + "returns": [ + { + "type": [ + "object" + ], + "description": "an object with whatever" + } + ] + } + }, + "mutation": { + "defaultSave": { + "description": false, + "params": [ + { + "type": [ + "object" + ], + "name": "payload" + }, + { + "type": [ + "object" + ], + "name": "condition" + } + ], + "returns": [ + { + "type": [ + "boolean" + ] + } + ] + } + }, + "auth": {}, + "timestamp": 1563798679 +} diff --git a/packages/contract-console/tests/fixtures/resolvers/import.js b/packages/contract-console-ts/tests/fixtures/resolvers/import.js similarity index 100% rename from packages/contract-console/tests/fixtures/resolvers/import.js rename to packages/contract-console-ts/tests/fixtures/resolvers/import.js diff --git a/packages/contract-console/tests/fixtures/resolvers/mutation/default-save.js b/packages/contract-console-ts/tests/fixtures/resolvers/mutation/default-save.js similarity index 100% rename from packages/contract-console/tests/fixtures/resolvers/mutation/default-save.js rename to packages/contract-console-ts/tests/fixtures/resolvers/mutation/default-save.js diff --git a/packages/contract-console/tests/fixtures/resolvers/query/default-call.js b/packages/contract-console-ts/tests/fixtures/resolvers/query/default-call.js similarity index 100% rename from packages/contract-console/tests/fixtures/resolvers/query/default-call.js rename to packages/contract-console-ts/tests/fixtures/resolvers/query/default-call.js diff --git a/packages/contract-console/tests/fixtures/resolvers/resolver.js b/packages/contract-console-ts/tests/fixtures/resolvers/resolver.js similarity index 100% rename from packages/contract-console/tests/fixtures/resolvers/resolver.js rename to packages/contract-console-ts/tests/fixtures/resolvers/resolver.js diff --git a/packages/contract-console/tests/fixtures/server.js b/packages/contract-console-ts/tests/fixtures/server.js similarity index 96% rename from packages/contract-console/tests/fixtures/server.js rename to packages/contract-console-ts/tests/fixtures/server.js index 8db8327c22e4efd30eaec972bbc8327197a74f85..42661c5530f6b35594b606198aab024987c6b444 100644 --- a/packages/contract-console/tests/fixtures/server.js +++ b/packages/contract-console-ts/tests/fixtures/server.js @@ -4,7 +4,7 @@ const { join } = require('path') const baseDir = join(__dirname, '..', '..') serverIo({ - port: 8000, + port: 8001, open: false, webroot: [ join(baseDir, 'node_modules'), diff --git a/packages/contract-console/tests/jsonql-client.d.ts b/packages/contract-console-ts/tests/jsonql-client.d.ts similarity index 100% rename from packages/contract-console/tests/jsonql-client.d.ts rename to packages/contract-console-ts/tests/jsonql-client.d.ts diff --git a/packages/contract-console/tests/unit/example.spec.ts b/packages/contract-console-ts/tests/unit/example.spec.ts similarity index 100% rename from packages/contract-console/tests/unit/example.spec.ts rename to packages/contract-console-ts/tests/unit/example.spec.ts diff --git a/packages/contract-console/tsconfig.json b/packages/contract-console-ts/tsconfig.json similarity index 95% rename from packages/contract-console/tsconfig.json rename to packages/contract-console-ts/tsconfig.json index e7e72905ca56eb8be58c6e8d2570e04a12d2dbee..977717422085f215cb18459b0e33f36b562387d3 100644 --- a/packages/contract-console/tsconfig.json +++ b/packages/contract-console-ts/tsconfig.json @@ -9,6 +9,7 @@ "experimentalDecorators": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, "sourceMap": true, "baseUrl": ".", "types": [ diff --git a/packages/contract-console/tslint.json b/packages/contract-console-ts/tslint.json similarity index 100% rename from packages/contract-console/tslint.json rename to packages/contract-console-ts/tslint.json diff --git a/packages/contract-console/vue.config.js b/packages/contract-console-ts/vue.config.js similarity index 33% rename from packages/contract-console/vue.config.js rename to packages/contract-console-ts/vue.config.js index 03ee09d318574ebc1369250c9ebb05c83c25146b..fdddb55b25f0f1ded226095f7b4eff1a87716ec6 100644 --- a/packages/contract-console/vue.config.js +++ b/packages/contract-console-ts/vue.config.js @@ -1,10 +1,18 @@ +// add a copy contract here +const fsx = require('fs-extra') +const { join } = require('path') +fsx.copy( + join(__dirname, 'tests', 'fixtures', 'contract', 'public-contract.json'), + join(__dirname, 'src', 'plugin', 'public-contract.json') +) + module.exports = { lintOnSave: false, devServer: { open: true, proxy: { '^/jsonql': { - target: "http://localhost:8000", + target: "http://localhost:8001", ws: true } } diff --git a/packages/contract-console/src/client.ts b/packages/contract-console/src/client.ts deleted file mode 100644 index 73fbc57db730a3abf02ec0f139d4d02737d5a95a..0000000000000000000000000000000000000000 --- a/packages/contract-console/src/client.ts +++ /dev/null @@ -1,11 +0,0 @@ - -import flyio from 'flyio' -import jsonqlClient from 'jsonql-client' - -const createClient = async () => await jsonqlClient({ - hostname: 'http://localhost:8080', - keepContract: false, - showContractDesc: true -}) - -export default createClient diff --git a/packages/contract-console/src/plugin/jsonql.ts b/packages/contract-console/src/plugin/jsonql.ts deleted file mode 100644 index 8cd28cb7a224c3c23e76999934ff186240f79e86..0000000000000000000000000000000000000000 --- a/packages/contract-console/src/plugin/jsonql.ts +++ /dev/null @@ -1,8 +0,0 @@ - -import Fly from 'flyio/dist/npm' - -export default { - install(Vue: Vue, options: any) { - - } -} diff --git a/packages/http-client/dist/jsonql-client.umd.js b/packages/http-client/dist/jsonql-client.umd.js index d8acb0e91c1992b73e994befd6f997796a2f64f4..756cecd9531769da79f85bf8f51cdae7cb176e3b 100644 --- a/packages/http-client/dist/jsonql-client.umd.js +++ b/packages/http-client/dist/jsonql-client.umd.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).jsonqlClient=e()}(this,function(){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var e=Object.assign?Object.assign:function(t,e,r,n){for(var o=arguments,a=1;a=0;e--){var r=S().key(e);t(O(r),r)}},remove:function(t){return S().removeItem(t)},clearAll:function(){return S().clear()}};function S(){return w.localStorage}function O(t){return S().getItem(t)}var k=a.trim,A={name:"cookieStorage",read:function(t){if(!t||!P(t))return null;var e="(?:^|.*;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";return unescape(E.cookie.replace(new RegExp(e),"$1"))},write:function(t,e){if(!t)return;E.cookie=escape(t)+"="+escape(e)+"; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/"},each:T,remove:x,clearAll:function(){T(function(t,e){x(e)})}},E=a.Global.document;function T(t){for(var e=E.cookie.split(/; ?/g),r=e.length-1;r>=0;r--)if(k(e[r])){var n=e[r].split("="),o=unescape(n[0]);t(unescape(n[1]),o)}}function x(t){t&&P(t)&&(E.cookie=escape(t)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/")}function P(t){return new RegExp("(?:^|;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(E.cookie)}var C=function(){var t={};return{defaults:function(e,r){t=r},get:function(e,r){var n=e();return void 0!==n?n:t[r]}}};var q="expire_mixin",z=function(){var t=this.createStore(this.storage,null,this._namespacePrefix+q);return{set:function(e,r,n,o){this.hasNamespace(q)||t.set(r,o);return e()},get:function(t,r){this.hasNamespace(q)||e.call(this,r);return t()},remove:function(e,r){this.hasNamespace(q)||t.remove(r);return e()},getExpiration:function(e,r){return t.get(r)},removeExpiredKeys:function(t){var r=[];this.each(function(t,e){r.push(e)});for(var n=0;n>>8,r[2*n+1]=i%256}return r},decompressFromUint8Array:function(e){if(null==e)return a.decompress(e);for(var r=new Array(e.length/2),n=0,o=r.length;n>=1}else{for(o=1,n=0;n>=1}0==--l&&(l=Math.pow(2,h),h++),delete u[f]}else for(o=i[f],n=0;n>=1;0==--l&&(l=Math.pow(2,h),h++),i[s]=p++,f=String(c)}if(""!==f){if(Object.prototype.hasOwnProperty.call(u,f)){if(f.charCodeAt(0)<256){for(n=0;n>=1}else{for(o=1,n=0;n>=1}0==--l&&(l=Math.pow(2,h),h++),delete u[f]}else for(o=i[f],n=0;n>=1;0==--l&&(l=Math.pow(2,h),h++)}for(o=2,n=0;n>=1;for(;;){if(v<<=1,g==e-1){d.push(r(v));break}g++}return d.join("")},decompress:function(t){return null==t?"":""==t?null:a._decompress(t.length,32768,function(e){return t.charCodeAt(e)})},_decompress:function(e,r,n){var o,a,i,u,c,s,f,l=[],p=4,h=4,d=3,v="",g=[],y={val:n(0),position:r,index:1};for(o=0;o<3;o+=1)l[o]=o;for(i=0,c=Math.pow(2,2),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),i|=(u>0?1:0)*s,s<<=1;switch(i){case 0:for(i=0,c=Math.pow(2,8),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),i|=(u>0?1:0)*s,s<<=1;f=t(i);break;case 1:for(i=0,c=Math.pow(2,16),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),i|=(u>0?1:0)*s,s<<=1;f=t(i);break;case 2:return""}for(l[3]=f,a=f,g.push(f);;){if(y.index>e)return"";for(i=0,c=Math.pow(2,d),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),i|=(u>0?1:0)*s,s<<=1;switch(f=i){case 0:for(i=0,c=Math.pow(2,8),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),i|=(u>0?1:0)*s,s<<=1;l[h++]=t(i),f=h-1,p--;break;case 1:for(i=0,c=Math.pow(2,16),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),i|=(u>0?1:0)*s,s<<=1;l[h++]=t(i),f=h-1,p--;break;case 2:return g.join("")}if(0==p&&(p=Math.pow(2,d),d++),l[f])v=l[f];else{if(f!==h)return null;v=a+a.charAt(0)}g.push(v),l[h++]=a+v.charAt(0),a=v,0==--p&&(p=Math.pow(2,d),d++)}}};return a}();null!=t&&(t.exports=e)});var U=[j,A],D=[C,z,J,function(){return{get:function(t,e){var r=t(e);if(!r)return r;var n=R.decompress(r);return null==n?r:this._deserialize(n)},set:function(t,e,r){var n=R.compress(this._serialize(r));t(e,n)}}}],H=b.createStore(U,D),L=a.Global;function K(){return L.sessionStorage}function B(t){return K().getItem(t)}var W=[{name:"sessionStorage",read:B,write:function(t,e){return K().setItem(t,e)},each:function(t){for(var e=K().length-1;e>=0;e--){var r=K().key(e);t(B(r),r)}},remove:function(t){return K().removeItem(t)},clearAll:function(){return K().clear()}},A],V=[C,z],G=b.createStore(W,V),Y=H,Q=G,X="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Z="object"==typeof X&&X&&X.Object===Object&&X,tt="object"==typeof self&&self&&self.Object===Object&&self,et=Z||tt||Function("return this")(),rt=et.Symbol,nt=Object.prototype,ot=nt.hasOwnProperty,at=nt.toString,it=rt?rt.toStringTag:void 0;var ut=Object.prototype.toString;var ct="[object Null]",st="[object Undefined]",ft=rt?rt.toStringTag:void 0;function lt(t){return null==t?void 0===t?st:ct:ft&&ft in Object(t)?function(t){var e=ot.call(t,it),r=t[it];try{t[it]=void 0;var n=!0}catch(t){}var o=at.call(t);return n&&(e?t[it]=r:delete t[it]),o}(t):function(t){return ut.call(t)}(t)}function pt(t){return null!=t&&"object"==typeof t}var ht="[object Symbol]";function dt(t){return"symbol"==typeof t||pt(t)&<(t)==ht}function vt(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r0){if(++Gt>=Kt)return arguments[0]}else Gt=0;return Vt.apply(void 0,arguments)});function Zt(t){return t!=t}function te(t,e,r){return e==e?function(t,e,r){for(var n=r-1,o=t.length;++n-1&&t%1==0&&t-1&&t%1==0&&t<=fe}function pe(t){return null!=t&&le(t.length)&&!Et(t)}var he=Object.prototype;function de(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||he)}var ve="[object Arguments]";function ge(t){return pt(t)&<(t)==ve}var ye=Object.prototype,be=ye.hasOwnProperty,me=ye.propertyIsEnumerable,_e=ge(function(){return arguments}())?ge:function(t){return pt(t)&&be.call(t,"callee")&&!me.call(t,"callee")};var we="object"==typeof exports&&exports&&!exports.nodeType&&exports,je=we&&"object"==typeof module&&module&&!module.nodeType&&module,Se=je&&je.exports===we?et.Buffer:void 0,Oe=(Se?Se.isBuffer:void 0)||function(){return!1},ke={};ke["[object Float32Array]"]=ke["[object Float64Array]"]=ke["[object Int8Array]"]=ke["[object Int16Array]"]=ke["[object Int32Array]"]=ke["[object Uint8Array]"]=ke["[object Uint8ClampedArray]"]=ke["[object Uint16Array]"]=ke["[object Uint32Array]"]=!0,ke["[object Arguments]"]=ke["[object Array]"]=ke["[object ArrayBuffer]"]=ke["[object Boolean]"]=ke["[object DataView]"]=ke["[object Date]"]=ke["[object Error]"]=ke["[object Function]"]=ke["[object Map]"]=ke["[object Number]"]=ke["[object Object]"]=ke["[object RegExp]"]=ke["[object Set]"]=ke["[object String]"]=ke["[object WeakMap]"]=!1;var Ae="object"==typeof exports&&exports&&!exports.nodeType&&exports,Ee=Ae&&"object"==typeof module&&module&&!module.nodeType&&module,Te=Ee&&Ee.exports===Ae&&Z.process,xe=function(){try{var t=Ee&&Ee.require&&Ee.require("util").types;return t||Te&&Te.binding&&Te.binding("util")}catch(t){}}(),Pe=xe&&xe.isTypedArray,Ce=Pe?function(t){return function(e){return t(e)}}(Pe):function(t){return pt(t)&&le(t.length)&&!!ke[lt(t)]},qe=Object.prototype.hasOwnProperty;function ze(t,e){var r=gt(t),n=!r&&_e(t),o=!r&&!n&&Oe(t),a=!r&&!n&&!o&&Ce(t),i=r||n||o||a,u=i?function(t,e){for(var r=-1,n=Array(t);++r-1},Xe.prototype.set=function(t,e){var r=this.__data__,n=Ye(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var Ze=Rt(et,"Map");function tr(t,e){var r,n,o=t.__data__;return("string"==(n=typeof(r=e))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?o["string"==typeof e?"string":"hash"]:o.map}function er(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e=n?t:function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(o);++nu))return!1;var s=a.get(t);if(s&&a.get(e))return s==e;var f=-1,l=!0,p=r&ln?new cn:void 0;for(a.set(t,e),a.set(e,t);++f1?e[n-1]:void 0,a=n>2?e[2]:void 0;for(o=po.length>3&&"function"==typeof o?(n--,o):void 0,a&&function(t,e,r){if(!wt(r))return!1;var n=typeof e;return!!("number"==n?pe(r)&&ne(e,r.length):"string"==n&&e in r)&&ae(r[e],t)}(e[0],e[1],a)&&(o=n<3?void 0:o,n=1),t=Object(t);++r-1;);return r}(n,o),function(t,e){for(var r=t.length;r--&&te(e,t[r],0)>-1;);return r}(n,o)+1).join("")}function wo(t){return!!gt(t)||null!=t&&""!==_o(t)}var jo=function(t){return!io(t)&&!so(parseFloat(t))},So=function(t){return""!==_o(t)&&io(t)},Oo=function(t){return function(t){return!0===t||!1===t||pt(t)&<(t)==uo}(t)},ko=function(t,e){return void 0===e&&(e=!0),!fo(t)&&""!==t&&""!==_o(t)&&(!1===e||!0===e&&!function(t){return null===t}(t))},Ao="application/vnd.api+json",Eo={Accept:Ao,"Content-Type":[Ao,"charset=utf-8"].join(";")},To="payload",xo="condition",Po="args",Co=["POST","PUT"],qo="type",zo="optional",No="enumv",Io="args",$o="checker",Fo="alias",Jo={desc:"y"},Mo="No message",Ro=qo,Uo=zo,Do=No,Ho=Io,Lo=$o,Ko=Fo,Bo="continue",Wo=function(t){switch(t){case"number":return jo;case"string":return So;case"boolean":return Oo;default:return ko}},Vo=function(t,e){return void 0===e&&(e=""),!!gt(t)&&(""===e||""===_o(e)||!(t.filter(function(t){return!Wo(e)(t)}).length>0))},Go=function(t){if(t.indexOf("array.<")>-1&&t.indexOf(">")>-1){var e=t.replace("array.<","").replace(">","");return e.indexOf("|")?e.split("|"):[e]}return!1},Yo=function(t,e){var r=t.arg;return e.length>1?!r.filter(function(t){return!(e.length>e.filter(function(e){return!Wo(e)(t)}).length)}).length:e.length>e.filter(function(t){return!Vo(r,t)}).length},Qo=function(t,e){if(void 0===e&&(e=null),wr(t)){if(!e)return!0;if(Vo(e))return!e.filter(function(e){var r=t[e.name];return!(e.type.length>e.type.filter(function(t){var e;return!!fo(r)||(!1!==(e=Go(t))?!Yo({arg:r},e):!Wo(t)(r))}).length)}).length}return!1},Xo=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 406},r.name.get=function(){return"Jsonql406Error"},Object.defineProperties(e,r),e}(Error),Zo=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"Jsonql500Error"},Object.defineProperties(e,r),e}(Error),ta=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlAuthorisationError"},Object.defineProperties(e,r),e}(Error),ea=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlContractAuthError"},Object.defineProperties(e,r),e}(Error),ra=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"JsonqlResolverAppError"},Object.defineProperties(e,r),e}(Error),na=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 404},r.name.get=function(){return"JsonqlResolverNotFoundError"},Object.defineProperties(e,r),e}(Error),oa=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlEnumError"},Object.defineProperties(e,r),e}(Error),aa=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlTypeError"},Object.defineProperties(e,r),e}(Error),ia=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlCheckerError"},Object.defineProperties(e,r),e}(Error),ua=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlValidationError"},Object.defineProperties(e,r),e}(Error),ca=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0},statusCode:{configurable:!0}};return r.name.get=function(){return"JsonqlError"},r.statusCode.get=function(){return-1},Object.defineProperties(e,r),e}(Error),sa=function(t){function e(r,n){t.call(this,n),this.statusCode=r,this.className=e.name}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlServerError"},Object.defineProperties(e,r),e}(Error),fa=Object.freeze({Jsonql406Error:Xo,Jsonql500Error:Zo,JsonqlAuthorisationError:ta,JsonqlContractAuthError:ea,JsonqlResolverAppError:ra,JsonqlResolverNotFoundError:na,JsonqlEnumError:oa,JsonqlTypeError:aa,JsonqlCheckerError:ia,JsonqlValidationError:ua,JsonqlError:ca,JsonqlServerError:sa}),la=ca,pa=function(t,e){return!!Object.keys(t).filter(function(t){return e===t}).length};function ha(t){if(pa(t,"error")){var e=t.error,r=e.className,n=e.name,o=r||n,a=e.message||Mo,i=e.detail||e;if(o&&fa[o])throw new fa[r](a,i);throw new la(a,i)}return t}function da(t){if(Array.isArray(t))throw new ua("",t);var e=t.message||Mo,r=t.detail||t;switch(!0){case t instanceof Xo:throw new Xo(e,r);case t instanceof Zo:throw new Zo(e,r);case t instanceof ta:throw new ta(e,r);case t instanceof ea:throw new ea(e,r);case t instanceof ra:throw new ra(e,r);case t instanceof na:throw new na(e,r);case t instanceof oa:throw new oa(e,r);case t instanceof aa:throw new aa(e,r);case t instanceof ia:throw new ia(e,r);case t instanceof ua:throw new ua(e,r);case t instanceof sa:throw new sa(e,r);default:throw new ca(e,r)}}var va=function(t,e){var r,n,o,a,i;switch(!0){case"object"===t:return o=(n=e).arg,a=n.param,i=[o],Array.isArray(a.keys)&&a.keys.length&&i.push(a.keys),!Qo.apply(null,i);case"array"===t:return!Vo(e.arg);case!1!==(r=Go(t)):return!Yo(e,r);default:return!Wo(t)(e.arg)}},ga=function(t,e){return fo(t)?!0!==e.optional||fo(e.defaultvalue)?null:e.defaultvalue:t},ya=function(t,e,r){var n;void 0===r&&(r=!1);var o=function(t,e){if(!Vo(e))throw new ca("params is not an array! Did something gone wrong when you generate the contract.json?");if(0===e.length)return[];if(!Vo(t))throw new ca("args is not an array! You might want to do: ES6 Array.from(arguments) or ES5 Array.prototype.slice.call(arguments)");switch(!0){case t.length==e.length:return t.map(function(t,r){return{arg:t,index:r,param:e[r]}});case!0===e[0].variable:var r=e[0].type;return t.map(function(t,n){return{arg:t,index:n,param:e[n]||{type:r,name:"_"}}});case t.lengthe.length&&1===e.length:var n,o=["any"];return!1!==(n=Go(e[0].type[0]))&&(o=n),t.map(function(t,r){return{arg:t,index:r,param:e[r]||{type:o,name:"_"}}});default:throw new ca("Could not understand your arguments and parameter structure!",{args:t,params:e})}}(t,e),a=o.filter(function(t){return!0===t.param.optional?function(t){var e=t.arg,r=t.param;return!(!wo(e)||r.type.length>r.type.filter(function(e){return va(e,t)}).length)}(t):!(t.param.type.length>t.param.type.filter(function(e){return va(e,t)}).length)});return r?((n={}).error=a,n.data=o.map(function(t){return t.arg}),n):a},ba=function(t,e){return!!t.filter(function(t){return t===e}).length},ma=function(t,e){var r=Object.keys(t);return ba(r,e)},_a=function(t){return!wo(t)};function wa(t,e){var r=bo(e,function(t,e){return!t[Ko]});return Jn(r,{})?t:function(t,e){var r={};return e=Yn(e),Zn(t,function(t,n,o){oe(r,e(t,n,o),t)}),r}(t,function(t,e){return function(t,e,r){var n;return r(t,function(t,r,o){if(e(t,r,o))return n=r,!1}),n}(r,Yn(function(t){return t.alias===e}),Zn)||e})}function ja(t,e){return lo(e,function(e,r){var n,o;return fo(t[r])||!0===e[Uo]&&_a(t[r])?ho({},e,((n={})[Bo]=!0,n)):((o={})[Ho]=t[r],o[Ro]=e[Ro],o[Uo]=e[Uo]||!1,o[Do]=e[Do]||!1,o[Lo]=e[Lo]||!1,o)})}function Sa(t,e){var r=function(t,e){var r=wa(t,e);return{pristineValues:lo(bo(e,function(t,e){return ma(r,e)}),function(t){return t.args}),checkAgainstAppProps:bo(e,function(t,e){return!ma(r,e)}),config:r}}(t,e),n=r.config,o=r.pristineValues;return[ja(n,r.checkAgainstAppProps),o]}var Oa=function(t){return Vo(t)?t:[t]};var ka=function(t,e){return!Vo(e)||function(t,e){return!!t.filter(function(t){return t===e}).length}(e,t)},Aa=function(t,e){try{return!!Et(e)&&e.apply(null,[t])}catch(t){return!1}};function Ea(t){return function(e,r){if(e[Bo])return e[Ho];var n=function(t,e){var r,n=[[t[Ho]],[(r={},r[Ro]=Oa(t[Ro]),r[Uo]=t[Uo],r)]];return Reflect.apply(e,null,n)}(e,t);if(n.length)throw new aa(r,n);if(!1!==e[Do]&&!ka(e[Ho],e[Do]))throw new oa(r);if(!1!==e[Lo]&&!Aa(e[Ho],e[Lo]))throw new ia(r);return e[Ho]}}var Ta=function(t,e){return Promise.resolve(Sa(t,e))};function xa(t,e,r,n){return void 0===t&&(t={}),Ta(t,e).then(function(t){return function(t,e){var r=t[0],n=t[1],o=lo(r,Ea(e));return ho(o,n)}(t,n)}).then(function(t){return ho({},t,r)})}var Pa=Qo,Ca=So,qa=Vo,za=function(t,e,r){return void 0===r&&(r=!1),new Promise(function(n,o){var a=ya(t,e,r);return r?a.error.length?o(a.error):n(a.data):a.length?o(a):n([])})},Na=function(t,e,r){void 0===r&&(r={});var n=r[zo],o=r[No],a=r[$o],i=r[Fo];return function(t,e,r,n,o,a){void 0===r&&(r=!1),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===a&&(a=!1);var i={};return i[Io]=t,i[qo]=e,!0===r&&(i[zo]=!0),Vo(n)&&(i[No]=n),Et(o)&&(i[$o]=o),io(a)&&(i[Fo]=a),i}.apply(null,[t,e,n,o,a,i])},Ia=function(t){return function(e,r,n){return void 0===n&&(n={}),xa(e,r,n,t)}}(ya),$a=ba,Fa=ma,Ja=function(t,e,r){var n;if(void 0===e&&(e=[]),void 0===r&&(r=!1),So(t)&&Vo(e)){var o={};return o[Po]=e,!0===r?o:((n={})[t]=o,n)}throw new ua("[createQuery] expect resolverName to be string and args to be array!",{resolverName:t,args:e})},Ma=function(t,e,r,n){var o;void 0===r&&(r={}),void 0===n&&(n=!1);var a={};if(a[To]=e,a[xo]=r,!0===n)return a;if(So(t))return(o={})[t]=a,o;throw new ua("[createMutation] expect resolverName to be string!",{resolverName:t,payload:e,condition:r})},Ra=function(t){return Object.keys(t)[0]},Ua=function(){return Math.floor(Date.now()/1e3)},Da=function(t,e){return void 0===e&&(e={}),La(e)?Promise.resolve(e):t.getContract()},Ha=function(t){return Fa(t,"data")&&!Fa(t,"error")?t.data:t},La=function(t){return t&&Pa(t)&&(Fa(t,"query")||Fa(t,"mutation"))},Ka="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function Ba(t){this.message=t}Ba.prototype=new Error,Ba.prototype.name="InvalidCharacterError";var Wa="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(t){var e=String(t).replace(/=+$/,"");if(e.length%4==1)throw new Ba("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,n,o=0,a=0,i="";n=e.charAt(a++);~n&&(r=o%4?64*r+n:n,o++%4)?i+=String.fromCharCode(255&r>>(-2*o&6)):0)n=Ka.indexOf(n);return i};var Va=function(t){var e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw"Illegal base64url string!"}try{return function(t){return decodeURIComponent(Wa(t).replace(/(.)/g,function(t,e){var r=e.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r}))}(e)}catch(t){return Wa(e)}};function Ga(t){this.message=t}Ga.prototype=new Error,Ga.prototype.name="InvalidTokenError";var Ya,Qa,Xa,Za,ti,ei,ri,ni,oi,ai=function(t,e){if("string"!=typeof t)throw new Ga("Invalid token specified");var r=!0===(e=e||{}).header?0:1;try{return JSON.parse(Va(t.split(".")[r]))}catch(t){throw new Ga("Invalid token specified: "+t.message)}},ii=Ga;function ui(t){if(Ca(t))return function(t){var e=t.iat||Math.floor(Date.now()/1e3);if(t.exp&&e>=t.exp){var r=new Date(t.exp).toISOString();throw new ca("Token has expired on "+r,t)}return t}(ai(t));throw new ca("Token must be a string!")}ai.InvalidTokenError=ii;Na("HS256",["string"]),Na(!1,["boolean","number","string"],((Ya={})[Fo]="exp",Ya[zo]=!0,Ya)),Na(!1,["boolean","number","string"],((Qa={})[Fo]="nbf",Qa[zo]=!0,Qa)),Na(!1,["boolean","string"],((Xa={})[Fo]="iss",Xa[zo]=!0,Xa)),Na(!1,["boolean","string"],((Za={})[Fo]="sub",Za[zo]=!0,Za)),Na(!1,["boolean","string"],((ti={})[Fo]="iss",ti[zo]=!0,ti)),Na(!1,["boolean"],((ei={})[zo]=!0,ei)),Na(!1,["boolean","string"],((ri={})[zo]=!0,ri)),Na(!1,["boolean","string"],((ni={})[zo]=!0,ni)),Na(!1,["boolean"],((oi={})[zo]=!0,oi));!function(){switch(!0){case"undefined"!=typeof WebSocket:return WebSocket;case"undefined"!=typeof MozWebSocket:return MozWebSocket;case"undefined"!=typeof window:return window.WebSocket||window.MozWebSocket;default:throw new ua("WebSocket is NOT SUPPORTED!")}}();var ci=Co[0],si=Co[1],fi=function(t){try{this.fly=new Fly}catch(t){throw console.error("Init fly error!",t),t}this.opts=t,this.extraHeader={},this.extraParams={},this.reqInterceptor(),this.resInterceptor()},li={headers:{configurable:!0}};li.headers.set=function(t){this.extraHeader=t},fi.prototype.request=function(t,e,r){var n;void 0===e&&(e={}),void 0===r&&(r={}),this.headers=r;var o=ho({},{_cb:Ua()},this.extraParams);if(this.opts.enableJsonp){var a=Ra(t);o=ho({},o,((n={}).jsonqlJsonpCallback=a,n)),t=t[a]}return this.fly.request(this.jsonqlEndpoint,t,ho({},{method:ci,params:o},e))},fi.prototype.reqInterceptor=function(){var t=this;this.fly.interceptors.request.use(function(e){console.info("request interceptor call");var r=t.getHeaders();for(var n in r)e.headers[n]=r[n];return e})},fi.prototype.processJsonp=function(t){return Ha(t)},fi.prototype.resInterceptor=function(){var t=this,e=t.opts.enableJsonp;this.fly.interceptors.response.use(function(r){console.info("response interceptor call"),t.cleanUp();var n=Ca(r.data)?JSON.parse(r.data):r.data;return e?t.processJsonp(n):Ha(n)},function(e){throw t.cleanUp(),console.error(e),new sa("Server side error",e)})},fi.prototype.getHeaders=function(){return this.opts.enableAuth?ho({},Eo,this.getAuthHeader(),this.extraHeader):ho({},Eo,this.extraHeader)},fi.prototype.cleanUp=function(){this.extraHeader={},this.extraParams={}},fi.prototype.get=function(){return this.opts.showContractDesc&&(this.extraParams=ho({},this.extraParams,Jo)),this.request({},{method:"GET"},this.contractHeader).then(ha).then(function(t){return console.info("144 get contract result",t),t.cache&&t.contract?t.contract:t})},fi.prototype.query=function(t,e){return void 0===e&&(e=[]),this.request(Ja(t,e)).then(ha)},fi.prototype.mutation=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r={}),this.request(Ma(t,e,r),{method:si}).then(ha)},Object.defineProperties(fi.prototype,li);var pi=function(t){function e(e){t.call(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={storeIt:{configurable:!0},jsonqlEndpoint:{configurable:!0},jsonqlContract:{configurable:!0},jsonqlToken:{configurable:!0},jsonqlUserdata:{configurable:!0}};return r.storeIt.set=function(t){throw console.info("storeIt",t),qa(t)&&t.length>=2&&Reflect.apply(Y.set,Y,t),new ua("Expect argument to be array and least 2 items!")},r.jsonqlEndpoint.set=function(t){var e=Y.get("endpoint")||[];$a(e,t)||(e.push(t),this.storeId=["endpoint",e],this.endpointIndex=e.length-1)},r.jsonqlContract.set=function(t){var e=this.opts.storageKey,r=[e],n=t[0],o=t[1],a=Y.get(e)||[];a[this.endpointIndex||0]=n,r.push(a),o&&r.push(o),this.opts.keepContract&&(this.storeIt=r)},r.jsonqlToken.set=function(t){var e="credential",r=localStorage.get(e)||[];if(!$a(r,t)){var n=r.length-1;r[n]=t,this[e+"Index"]=n;var o=[e,r];if(this.opts.tokenExpired){var a=parseFloat(this.opts.tokenExpired);if(!isNaN(a)&&a>0){var i=Ua();o.push(i+parseFloat(a))}}return this.storeIt=o,this.jsonqlUserdata=this.decoder(t),t}return!1},r.jsonqlUserdata.set=function(t){var e=["userdata",t];return t.exp&&e.push(t.exp),Reflect.apply(Y.set,Y,e)},r.jsonqlEndpoint.get=function(){var t=Y.get("endpoint");if(!t){var e=this.opts,r=[e.hostname,e.jsonqlPath].join("/");return this.jsonqlEndpoint=r,r}return t[this.endpointIndex]},r.jsonqlContract.get=function(){var t=this.opts.storageKey;return(Y.get(t)||[])[this.endpointIndex]||!1},r.jsonqlToken.get=function(){var t="credential",e=localStorage.get(t);return!!e&&e[this[t+"Index"]]},r.jsonqlUserdata.get=function(){return Q.get("userdata")},Object.defineProperties(e.prototype,r),e}(function(t){function e(e){t.call(this,e),e.enableAuth&&e.useJwt&&(this.setDecoder=ui)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={userdata:{configurable:!0},rawAuthToken:{configurable:!0},setDecoder:{configurable:!0}};return r.userdata.get=function(){return this.jsonqlUserdata},r.rawAuthToken.get=function(){return this.jsonqlToken},r.setDecoder.set=function(t){"function"==typeof t&&(this.decoder=t)},e.prototype.storeToken=function(t){return this.jsonqlToken=t},e.prototype.decoder=function(t){return t},e.prototype.getAuthHeader=function(){var t,e=this.rawAuthToken;return e?((t={})[this.opts.AUTH_HEADER]="Bearer "+e,t):{}},Object.defineProperties(e.prototype,r),e}(function(t){function e(e){t.call(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={contractHeader:{configurable:!0}};return e.prototype.getContract=function(){var t=this.readContract();if(console.info("getContract first call",t),t&&Array.isArray(t)){var e=t[this.endpointIndex||0];if(e)return Promise.resolve(e)}return this.get().then(this.storeContract.bind(this))},r.contractHeader.get=function(){var t={};return!1!==this.opts.contractKey&&(t[this.opts.contractKeyName]=this.opts.contractKey),t},e.prototype.storeContract=function(t){if(!La(t))throw new ua("Contract is malformed!");var e=[t];if(this.opts.contractExpired){var r=parseFloat(this.opts.contractExpired);!isNaN(r)&&r>0&&e.push(r)}return this.jsonqlContract=e,console.info("storeContract return result",t),t},e.prototype.readContract=function(){return La(this.opts.contract)?this.opts.contract:Y.get(this.opts.storageKey)},Object.defineProperties(e.prototype,r),e}(fi))),hi=new WeakMap,di=new WeakMap;var vi=function(t){void 0===t&&(t={}),t.logger&&"function"==typeof t.logger&&(this.logger=t.logger),this.keep=t.keep,this.result=t.keep?[]:null,this.normalStore=new Map,this.lazyStore=new Map},gi={$done:{configurable:!0},normalStore:{configurable:!0},lazyStore:{configurable:!0}};vi.prototype.logger=function(){},vi.prototype.$on=function(t,e,r){var n=this;void 0===r&&(r=null);this.validate(t,e);var o=this.takeFromStore(t);if(!1===o)return this.logger("$on",t+" callback is not in lazy store"),this.addToNormalStore(t,"on",e,r);this.logger("$on",t+" found in lazy store");var a=0;return o.forEach(function(o){var i=o[0],u=o[1],c=o[2];if(c&&"on"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);n.run(e,i,r||u),a+=n.addToNormalStore(t,"on",e,r||u)}),a},vi.prototype.$once=function(t,e,r){void 0===r&&(r=null),this.validate(t,e);var n=this.takeFromStore(t);this.normalStore;if(!1===n)return this.logger("$once",t+" not in the lazy store"),this.addToNormalStore(t,"once",e,r);this.logger("$once",n);var o=Array.from(n)[0],a=o[0],i=o[1],u=o[2];if(u&&"once"!==u)throw new Error("You are trying to register an event already been taken by other type: "+u);this.run(e,a,r||i),this.$off(t)},vi.prototype.$only=function(t,e,r){var n=this;void 0===r&&(r=null),this.validate(t,e);var o=!1,a=this.takeFromStore(t);(this.normalStore.has(t)||(this.logger("$only",t+" add to store"),o=this.addToNormalStore(t,"only",e,r)),!1!==a)&&(this.logger("$only",t+" found data in lazy store to execute"),Array.from(a).forEach(function(t){var o=t[0],a=t[1],i=t[2];if(i&&"only"!==i)throw new Error("You are trying to register an event already been taken by other type: "+i);n.run(e,o,r||a)}));return o},vi.prototype.$onlyOnce=function(t,e,r){void 0===r&&(r=null),this.validate(t,e);var n=!1,o=this.takeFromStore(t);if(this.normalStore.has(t)||(this.logger("$onlyOnce",t+" add to store"),n=this.addToNormalStore(t,"onlyOnce",e,r)),!1!==o){this.logger("$onlyOnce",o);var a=Array.from(o)[0],i=a[0],u=a[1],c=a[2];if(c&&"onlyOnce"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);this.run(e,i,r||u),this.$off(t)}return n},vi.prototype.$replace=function(t,e,r,n){if(void 0===r&&(r=null),void 0===n&&(n="on"),this.validateType(n)){this.$off(t);var o=this["$"+n];return Reflect.apply(o,this,[t,e,r])}throw new Error(n+" is not supported!")},vi.prototype.$trigger=function(t,e,r,n){void 0===e&&(e=[]),void 0===r&&(r=null),void 0===n&&(n=!1),this.validateEvt(t);var o=0,a=this.normalStore;if(this.logger("$trigger",a),a.has(t)){this.logger("$trigger",t,"found");for(var i=Array.from(a.get(t)),u=i.length,c=!1,s=0;s0;)n[o]=arguments[o+2];if(t.has(e)?(this.logger("addToStore",e+" existed"),r=t.get(e)):(this.logger("addToStore","create new Set for "+e),r=new Set),n.length>2)if(Array.isArray(n[0])){var a=n[2];this.checkTypeInLazyStore(e,a)||r.add(n)}else this.checkContentExist(n,r)||(this.logger("addToStore","insert new",n),r.add(n));else r.add(n);return t.set(e,r),[t,r.size]},vi.prototype.checkContentExist=function(t,e){return!!Array.from(e).filter(function(e){return e[0]===t[0]}).length},vi.prototype.checkTypeInStore=function(t,e){this.validateEvt(t),this.validateEvt(e);var r=this.$get(t,!0);return!1===r||!r.filter(function(t){var r=t[3];return e!==r}).length},vi.prototype.checkTypeInLazyStore=function(t,e){this.validateEvt(t),this.validateEvt(e);var r=this.lazyStore.get(t);return this.logger("checkTypeInLazyStore",r),!!r&&!!Array.from(r).filter(function(t){return t[2]!==e}).length},vi.prototype.addToNormalStore=function(t,e,r,n){if(void 0===n&&(n=null),this.logger("addToNormalStore",t,e,"add to normal store"),this.checkTypeInStore(t,e)){this.logger(e+" can add to "+t+" store");var o=this.hashFnToKey(r),a=[this.normalStore,t,o,r,n,e],i=Reflect.apply(this.addToStore,this,a),u=i[0],c=i[1];return this.normalStore=u,c}return!1},vi.prototype.addToLazyStore=function(t,e,r,n){void 0===e&&(e=[]),void 0===r&&(r=null),void 0===n&&(n=!1);var o=[this.lazyStore,t,this.toArray(e),r];n&&o.push(n);var a=Reflect.apply(this.addToStore,this,o),i=a[0],u=a[1];return this.lazyStore=i,u},vi.prototype.toArray=function(t){return Array.isArray(t)?t:[t]},gi.normalStore.set=function(t){hi.set(this,t)},gi.normalStore.get=function(){return hi.get(this)},gi.lazyStore.set=function(t){di.set(this,t)},gi.lazyStore.get=function(){return di.get(this)},vi.prototype.hashFnToKey=function(t){return t.toString().split("").reduce(function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t},0)+""},Object.defineProperties(vi.prototype,gi);var yi=new vi,bi=function(t,e,r,n){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];var a=n.auth[e].params,i=a.map(function(t,e){return r[e]}),u=r[a.length]||{};return za(r,a).then(function(){return t.query.apply(t,[e,i,u])}).catch(da)}},mi=function(t,e,r){var n={query:{},mutation:{},auth:{}},o=function(e){n.query[e]=function(){for(var n=[],o=arguments.length;o--;)n[o]=arguments[o];var a=r.query[e].params,i=a.map(function(t,e){return n[e]}),u=n[a.length]||{};return za(i,a).then(function(){return t.query.apply(t,[e,i,u])}).catch(da)}};for(var a in r.query)o(a);var i=function(e){n.mutation[e]=function(n,o,a){void 0===a&&(a={});var i=[n,o],u=r.mutation[e].params;return za(i,u).then(function(){return t.mutation.apply(t,[e,n,o,a])}).catch(da)}};for(var u in r.mutation)i(u);if(e.enableAuth&&r.auth){var c=e.loginHandlerName,s=e.logoutHandlerName;r.auth[c]&&(n[c]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=bi(t,c,0,r);return o.apply(null,e).then(t.postLoginAction).then(function(t){return yi.$trigger("login",t),t})}),r.auth[s]?n[s]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=bi(t,s,0,r);return o.apply(null,e).then(t.postLogoutAction).then(function(t){return yi.$trigger("logout",t),t})}:n[s]=function(){t.postLogoutAction("continue"),yi.$trigger("logout","continue")},n.userdata=function(){return t.userdata}}return n.returnInstance&&(n.jsonqlClientInstance=t),n.getToken=function(){return t.rawAuthToken},n.eventEmitter=yi,n},_i={contract:!1,MUTATION_ARGS:["name","payload","conditions"],CONTENT_TYPE:Ao,BEARER:"Bearer",AUTH_HEADER:"Authorization"},wi={hostname:Na([window.location.protocol,window.location.host].join("//"),["string"]),jsonqlPath:Na("jsonql",["string"]),loginHandlerName:Na("login",["string"]),logoutHandlerName:Na("logout",["string"]),enableJsonp:Na(!1,["boolean"]),enableAuth:Na(!1,["boolean"]),useJwt:Na(!0,["boolean"]),useLocalstorage:Na(!0,["boolean"]),storageKey:Na("storageKey",["string"]),authKey:Na("authKey",["string"]),contractExpired:Na(0,["number"]),keepContract:Na(!0,["boolean"]),showContractDesc:Na(!1,["boolean"]),contractKey:Na(!1,["boolean"]),contractKeyName:Na("X-JSONQL-CV-KEY",["string"]),enableTimeout:Na(!1,["boolean"]),timeout:Na(5e3,["number"]),returnInstance:Na(!1,["boolean"]),allowReturnRawToken:Na(!1,["boolean"]),debugOn:Na(!1,["boolean"])};return function(t){return void 0===t&&(t={}),function(t){var e=t.contract;return Ia(t,wi,_i).then(function(t){return t.contract=e,t})}(t).then(function(t){return{baseClient:new pi(t),opts:t}}).then(function(t){var e=t.baseClient,r=t.opts;return Da(e,r.contract).then(function(t){return mi(e,r,t)})})}}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("flyio")):"function"==typeof define&&define.amd?define(["flyio"],e):(t=t||self).jsonqlClient=e(t.Fly)}(this,function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var r=Object.assign?Object.assign:function(t,e,r,n){for(var o=arguments,i=1;i=0;e--){var r=O().key(e);t(k(r),r)}},remove:function(t){return O().removeItem(t)},clearAll:function(){return O().clear()}};function O(){return j.localStorage}function k(t){return O().getItem(t)}var A=a.trim,E={name:"cookieStorage",read:function(t){if(!t||!C(t))return null;var e="(?:^|.*;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";return unescape(T.cookie.replace(new RegExp(e),"$1"))},write:function(t,e){if(!t)return;T.cookie=escape(t)+"="+escape(e)+"; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/"},each:x,remove:P,clearAll:function(){x(function(t,e){P(e)})}},T=a.Global.document;function x(t){for(var e=T.cookie.split(/; ?/g),r=e.length-1;r>=0;r--)if(A(e[r])){var n=e[r].split("="),o=unescape(n[0]);t(unescape(n[1]),o)}}function P(t){t&&C(t)&&(T.cookie=escape(t)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/")}function C(t){return new RegExp("(?:^|;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(T.cookie)}var q=function(){var t={};return{defaults:function(e,r){t=r},get:function(e,r){var n=e();return void 0!==n?n:t[r]}}};var z="expire_mixin",N=function(){var t=this.createStore(this.storage,null,this._namespacePrefix+z);return{set:function(e,r,n,o){this.hasNamespace(z)||t.set(r,o);return e()},get:function(t,r){this.hasNamespace(z)||e.call(this,r);return t()},remove:function(e,r){this.hasNamespace(z)||t.remove(r);return e()},getExpiration:function(e,r){return t.get(r)},removeExpiredKeys:function(t){var r=[];this.each(function(t,e){r.push(e)});for(var n=0;n>>8,r[2*n+1]=a%256}return r},decompressFromUint8Array:function(e){if(null==e)return i.decompress(e);for(var r=new Array(e.length/2),n=0,o=r.length;n>=1}else{for(o=1,n=0;n>=1}0==--l&&(l=Math.pow(2,h),h++),delete u[f]}else for(o=a[f],n=0;n>=1;0==--l&&(l=Math.pow(2,h),h++),a[s]=p++,f=String(c)}if(""!==f){if(Object.prototype.hasOwnProperty.call(u,f)){if(f.charCodeAt(0)<256){for(n=0;n>=1}else{for(o=1,n=0;n>=1}0==--l&&(l=Math.pow(2,h),h++),delete u[f]}else for(o=a[f],n=0;n>=1;0==--l&&(l=Math.pow(2,h),h++)}for(o=2,n=0;n>=1;for(;;){if(v<<=1,g==e-1){d.push(r(v));break}g++}return d.join("")},decompress:function(t){return null==t?"":""==t?null:i._decompress(t.length,32768,function(e){return t.charCodeAt(e)})},_decompress:function(e,r,n){var o,i,a,u,c,s,f,l=[],p=4,h=4,d=3,v="",g=[],y={val:n(0),position:r,index:1};for(o=0;o<3;o+=1)l[o]=o;for(a=0,c=Math.pow(2,2),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),a|=(u>0?1:0)*s,s<<=1;switch(a){case 0:for(a=0,c=Math.pow(2,8),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),a|=(u>0?1:0)*s,s<<=1;f=t(a);break;case 1:for(a=0,c=Math.pow(2,16),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),a|=(u>0?1:0)*s,s<<=1;f=t(a);break;case 2:return""}for(l[3]=f,i=f,g.push(f);;){if(y.index>e)return"";for(a=0,c=Math.pow(2,d),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),a|=(u>0?1:0)*s,s<<=1;switch(f=a){case 0:for(a=0,c=Math.pow(2,8),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),a|=(u>0?1:0)*s,s<<=1;l[h++]=t(a),f=h-1,p--;break;case 1:for(a=0,c=Math.pow(2,16),s=1;s!=c;)u=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=n(y.index++)),a|=(u>0?1:0)*s,s<<=1;l[h++]=t(a),f=h-1,p--;break;case 2:return g.join("")}if(0==p&&(p=Math.pow(2,d),d++),l[f])v=l[f];else{if(f!==h)return null;v=i+i.charAt(0)}g.push(v),l[h++]=i+v.charAt(0),i=v,0==--p&&(p=Math.pow(2,d),d++)}}};return i}();null!=t&&(t.exports=e)});var D=[S,E],H=[q,N,M,function(){return{get:function(t,e){var r=t(e);if(!r)return r;var n=U.decompress(r);return null==n?r:this._deserialize(n)},set:function(t,e,r){var n=U.compress(this._serialize(r));t(e,n)}}}],L=m.createStore(D,H),K=a.Global;function B(){return K.sessionStorage}function W(t){return B().getItem(t)}var V=[{name:"sessionStorage",read:W,write:function(t,e){return B().setItem(t,e)},each:function(t){for(var e=B().length-1;e>=0;e--){var r=B().key(e);t(W(r),r)}},remove:function(t){return B().removeItem(t)},clearAll:function(){return B().clear()}},E],G=[q,N],Y=m.createStore(V,G),Q=L,X=Y,Z="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},tt="object"==typeof Z&&Z&&Z.Object===Object&&Z,et="object"==typeof self&&self&&self.Object===Object&&self,rt=tt||et||Function("return this")(),nt=rt.Symbol,ot=Object.prototype,it=ot.hasOwnProperty,at=ot.toString,ut=nt?nt.toStringTag:void 0;var ct=Object.prototype.toString;var st="[object Null]",ft="[object Undefined]",lt=nt?nt.toStringTag:void 0;function pt(t){return null==t?void 0===t?ft:st:lt&< in Object(t)?function(t){var e=it.call(t,ut),r=t[ut];try{t[ut]=void 0;var n=!0}catch(t){}var o=at.call(t);return n&&(e?t[ut]=r:delete t[ut]),o}(t):function(t){return ct.call(t)}(t)}function ht(t){return null!=t&&"object"==typeof t}var dt="[object Symbol]";function vt(t){return"symbol"==typeof t||ht(t)&&pt(t)==dt}function gt(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r0){if(++Yt>=Bt)return arguments[0]}else Yt=0;return Gt.apply(void 0,arguments)});function te(t){return t!=t}function ee(t,e,r){return e==e?function(t,e,r){for(var n=r-1,o=t.length;++n-1&&t%1==0&&t-1&&t%1==0&&t<=le}function he(t){return null!=t&&pe(t.length)&&!Tt(t)}var de=Object.prototype;function ve(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||de)}var ge="[object Arguments]";function ye(t){return ht(t)&&pt(t)==ge}var be=Object.prototype,me=be.hasOwnProperty,_e=be.propertyIsEnumerable,we=ye(function(){return arguments}())?ye:function(t){return ht(t)&&me.call(t,"callee")&&!_e.call(t,"callee")};var je="object"==typeof exports&&exports&&!exports.nodeType&&exports,Se=je&&"object"==typeof module&&module&&!module.nodeType&&module,Oe=Se&&Se.exports===je?rt.Buffer:void 0,ke=(Oe?Oe.isBuffer:void 0)||function(){return!1},Ae={};Ae["[object Float32Array]"]=Ae["[object Float64Array]"]=Ae["[object Int8Array]"]=Ae["[object Int16Array]"]=Ae["[object Int32Array]"]=Ae["[object Uint8Array]"]=Ae["[object Uint8ClampedArray]"]=Ae["[object Uint16Array]"]=Ae["[object Uint32Array]"]=!0,Ae["[object Arguments]"]=Ae["[object Array]"]=Ae["[object ArrayBuffer]"]=Ae["[object Boolean]"]=Ae["[object DataView]"]=Ae["[object Date]"]=Ae["[object Error]"]=Ae["[object Function]"]=Ae["[object Map]"]=Ae["[object Number]"]=Ae["[object Object]"]=Ae["[object RegExp]"]=Ae["[object Set]"]=Ae["[object String]"]=Ae["[object WeakMap]"]=!1;var Ee="object"==typeof exports&&exports&&!exports.nodeType&&exports,Te=Ee&&"object"==typeof module&&module&&!module.nodeType&&module,xe=Te&&Te.exports===Ee&&tt.process,Pe=function(){try{var t=Te&&Te.require&&Te.require("util").types;return t||xe&&xe.binding&&xe.binding("util")}catch(t){}}(),Ce=Pe&&Pe.isTypedArray,qe=Ce?function(t){return function(e){return t(e)}}(Ce):function(t){return ht(t)&&pe(t.length)&&!!Ae[pt(t)]},ze=Object.prototype.hasOwnProperty;function Ne(t,e){var r=yt(t),n=!r&&we(t),o=!r&&!n&&ke(t),i=!r&&!n&&!o&&qe(t),a=r||n||o||i,u=a?function(t,e){for(var r=-1,n=Array(t);++r-1},Ze.prototype.set=function(t,e){var r=this.__data__,n=Qe(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var tr=Ut(rt,"Map");function er(t,e){var r,n,o=t.__data__;return("string"==(n=typeof(r=e))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?o["string"==typeof e?"string":"hash"]:o.map}function rr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e=n?t:function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var i=Array(o);++nu))return!1;var s=i.get(t);if(s&&i.get(e))return s==e;var f=-1,l=!0,p=r&pn?new sn:void 0;for(i.set(t,e),i.set(e,t);++f1?e[n-1]:void 0,i=n>2?e[2]:void 0;for(o=ho.length>3&&"function"==typeof o?(n--,o):void 0,i&&function(t,e,r){if(!jt(r))return!1;var n=typeof e;return!!("number"==n?he(r)&&oe(e,r.length):"string"==n&&e in r)&&ae(r[e],t)}(e[0],e[1],i)&&(o=n<3?void 0:o,n=1),t=Object(t);++r-1;);return r}(n,o),function(t,e){for(var r=t.length;r--&&ee(e,t[r],0)>-1;);return r}(n,o)+1).join("")}function jo(t){return!!yt(t)||null!=t&&""!==wo(t)}var So=function(t){return!uo(t)&&!fo(parseFloat(t))},Oo=function(t){return""!==wo(t)&&uo(t)},ko=function(t){return function(t){return!0===t||!1===t||ht(t)&&pt(t)==co}(t)},Ao=function(t,e){return void 0===e&&(e=!0),!lo(t)&&""!==t&&""!==wo(t)&&(!1===e||!0===e&&!function(t){return null===t}(t))},Eo="application/vnd.api+json",To={Accept:Eo,"Content-Type":[Eo,"charset=utf-8"].join(";")},xo="payload",Po="condition",Co="args",qo=["POST","PUT"],zo="type",No="optional",Io="enumv",$o="args",Fo="checker",Jo="alias",Mo={desc:"y"},Ro="No message",Uo=zo,Do=No,Ho=Io,Lo=$o,Ko=Fo,Bo=Jo,Wo="continue",Vo=function(t){switch(t){case"number":return So;case"string":return Oo;case"boolean":return ko;default:return Ao}},Go=function(t,e){return void 0===e&&(e=""),!!yt(t)&&(""===e||""===wo(e)||!(t.filter(function(t){return!Vo(e)(t)}).length>0))},Yo=function(t){if(t.indexOf("array.<")>-1&&t.indexOf(">")>-1){var e=t.replace("array.<","").replace(">","");return e.indexOf("|")?e.split("|"):[e]}return!1},Qo=function(t,e){var r=t.arg;return e.length>1?!r.filter(function(t){return!(e.length>e.filter(function(e){return!Vo(e)(t)}).length)}).length:e.length>e.filter(function(t){return!Go(r,t)}).length},Xo=function(t,e){if(void 0===e&&(e=null),jr(t)){if(!e)return!0;if(Go(e))return!e.filter(function(e){var r=t[e.name];return!(e.type.length>e.type.filter(function(t){var e;return!!lo(r)||(!1!==(e=Yo(t))?!Qo({arg:r},e):!Vo(t)(r))}).length)}).length}return!1},Zo=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 406},r.name.get=function(){return"Jsonql406Error"},Object.defineProperties(e,r),e}(Error),ti=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"Jsonql500Error"},Object.defineProperties(e,r),e}(Error),ei=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlAuthorisationError"},Object.defineProperties(e,r),e}(Error),ri=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlContractAuthError"},Object.defineProperties(e,r),e}(Error),ni=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"JsonqlResolverAppError"},Object.defineProperties(e,r),e}(Error),oi=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 404},r.name.get=function(){return"JsonqlResolverNotFoundError"},Object.defineProperties(e,r),e}(Error),ii=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlEnumError"},Object.defineProperties(e,r),e}(Error),ai=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlTypeError"},Object.defineProperties(e,r),e}(Error),ui=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlCheckerError"},Object.defineProperties(e,r),e}(Error),ci=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlValidationError"},Object.defineProperties(e,r),e}(Error),si=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0},statusCode:{configurable:!0}};return r.name.get=function(){return"JsonqlError"},r.statusCode.get=function(){return-1},Object.defineProperties(e,r),e}(Error),fi=function(t){function e(r,n){t.call(this,n),this.statusCode=r,this.className=e.name}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlServerError"},Object.defineProperties(e,r),e}(Error),li=Object.freeze({Jsonql406Error:Zo,Jsonql500Error:ti,JsonqlAuthorisationError:ei,JsonqlContractAuthError:ri,JsonqlResolverAppError:ni,JsonqlResolverNotFoundError:oi,JsonqlEnumError:ii,JsonqlTypeError:ai,JsonqlCheckerError:ui,JsonqlValidationError:ci,JsonqlError:si,JsonqlServerError:fi}),pi=si,hi=function(t,e){return!!Object.keys(t).filter(function(t){return e===t}).length};function di(t){if(hi(t,"error")){var e=t.error,r=e.className,n=e.name,o=r||n,i=e.message||Ro,a=e.detail||e;if(o&&li[o])throw new li[r](i,a);throw new pi(i,a)}return t}function vi(t){if(Array.isArray(t))throw new ci("",t);var e=t.message||Ro,r=t.detail||t;switch(!0){case t instanceof Zo:throw new Zo(e,r);case t instanceof ti:throw new ti(e,r);case t instanceof ei:throw new ei(e,r);case t instanceof ri:throw new ri(e,r);case t instanceof ni:throw new ni(e,r);case t instanceof oi:throw new oi(e,r);case t instanceof ii:throw new ii(e,r);case t instanceof ai:throw new ai(e,r);case t instanceof ui:throw new ui(e,r);case t instanceof ci:throw new ci(e,r);case t instanceof fi:throw new fi(e,r);default:throw new si(e,r)}}var gi=function(t,e){var r,n,o,i,a;switch(!0){case"object"===t:return o=(n=e).arg,i=n.param,a=[o],Array.isArray(i.keys)&&i.keys.length&&a.push(i.keys),!Xo.apply(null,a);case"array"===t:return!Go(e.arg);case!1!==(r=Yo(t)):return!Qo(e,r);default:return!Vo(t)(e.arg)}},yi=function(t,e){return lo(t)?!0!==e.optional||lo(e.defaultvalue)?null:e.defaultvalue:t},bi=function(t,e,r){var n;void 0===r&&(r=!1);var o=function(t,e){if(!Go(e))throw new si("params is not an array! Did something gone wrong when you generate the contract.json?");if(0===e.length)return[];if(!Go(t))throw new si("args is not an array! You might want to do: ES6 Array.from(arguments) or ES5 Array.prototype.slice.call(arguments)");switch(!0){case t.length==e.length:return t.map(function(t,r){return{arg:t,index:r,param:e[r]}});case!0===e[0].variable:var r=e[0].type;return t.map(function(t,n){return{arg:t,index:n,param:e[n]||{type:r,name:"_"}}});case t.lengthe.length&&1===e.length:var n,o=["any"];return!1!==(n=Yo(e[0].type[0]))&&(o=n),t.map(function(t,r){return{arg:t,index:r,param:e[r]||{type:o,name:"_"}}});default:throw new si("Could not understand your arguments and parameter structure!",{args:t,params:e})}}(t,e),i=o.filter(function(t){return!0===t.param.optional?function(t){var e=t.arg,r=t.param;return!(!jo(e)||r.type.length>r.type.filter(function(e){return gi(e,t)}).length)}(t):!(t.param.type.length>t.param.type.filter(function(e){return gi(e,t)}).length)});return r?((n={}).error=i,n.data=o.map(function(t){return t.arg}),n):i},mi=function(t,e){return!!t.filter(function(t){return t===e}).length},_i=function(t,e){var r=Object.keys(t);return mi(r,e)},wi=function(t){return!jo(t)};function ji(t,e){var r=mo(e,function(t,e){return!t[Bo]});return Mn(r,{})?t:function(t,e){var r={};return e=Qn(e),to(t,function(t,n,o){ie(r,e(t,n,o),t)}),r}(t,function(t,e){return function(t,e,r){var n;return r(t,function(t,r,o){if(e(t,r,o))return n=r,!1}),n}(r,Qn(function(t){return t.alias===e}),to)||e})}function Si(t,e){return po(e,function(e,r){var n,o;return lo(t[r])||!0===e[Do]&&wi(t[r])?vo({},e,((n={})[Wo]=!0,n)):((o={})[Lo]=t[r],o[Uo]=e[Uo],o[Do]=e[Do]||!1,o[Ho]=e[Ho]||!1,o[Ko]=e[Ko]||!1,o)})}function Oi(t,e){var r=function(t,e){var r=ji(t,e);return{pristineValues:po(mo(e,function(t,e){return _i(r,e)}),function(t){return t.args}),checkAgainstAppProps:mo(e,function(t,e){return!_i(r,e)}),config:r}}(t,e),n=r.config,o=r.pristineValues;return[Si(n,r.checkAgainstAppProps),o]}var ki=function(t){return Go(t)?t:[t]};var Ai=function(t,e){return!Go(e)||function(t,e){return!!t.filter(function(t){return t===e}).length}(e,t)},Ei=function(t,e){try{return!!Tt(e)&&e.apply(null,[t])}catch(t){return!1}};function Ti(t){return function(e,r){if(e[Wo])return e[Lo];var n=function(t,e){var r,n=[[t[Lo]],[(r={},r[Uo]=ki(t[Uo]),r[Do]=t[Do],r)]];return Reflect.apply(e,null,n)}(e,t);if(n.length)throw new ai(r,n);if(!1!==e[Ho]&&!Ai(e[Lo],e[Ho]))throw new ii(r);if(!1!==e[Ko]&&!Ei(e[Lo],e[Ko]))throw new ui(r);return e[Lo]}}var xi=function(t,e){return Promise.resolve(Oi(t,e))};function Pi(t,e,r,n){return void 0===t&&(t={}),xi(t,e).then(function(t){return function(t,e){var r=t[0],n=t[1],o=po(r,Ti(e));return vo(o,n)}(t,n)}).then(function(t){return vo({},t,r)})}var Ci=Xo,qi=Oo,zi=Go,Ni=function(t,e,r){return void 0===r&&(r=!1),new Promise(function(n,o){var i=bi(t,e,r);return r?i.error.length?o(i.error):n(i.data):i.length?o(i):n([])})},Ii=function(t,e,r){void 0===r&&(r={});var n=r[No],o=r[Io],i=r[Fo],a=r[Jo];return function(t,e,r,n,o,i){void 0===r&&(r=!1),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===i&&(i=!1);var a={};return a[$o]=t,a[zo]=e,!0===r&&(a[No]=!0),Go(n)&&(a[Io]=n),Tt(o)&&(a[Fo]=o),uo(i)&&(a[Jo]=i),a}.apply(null,[t,e,n,o,i,a])},$i=function(t){return function(e,r,n){return void 0===n&&(n={}),Pi(e,r,n,t)}}(bi),Fi=mi,Ji=_i,Mi=function(t,e,r){var n;if(void 0===e&&(e=[]),void 0===r&&(r=!1),Oo(t)&&Go(e)){var o={};return o[Co]=e,!0===r?o:((n={})[t]=o,n)}throw new ci("[createQuery] expect resolverName to be string and args to be array!",{resolverName:t,args:e})},Ri=function(t,e,r,n){var o;void 0===r&&(r={}),void 0===n&&(n=!1);var i={};if(i[xo]=e,i[Po]=r,!0===n)return i;if(Oo(t))return(o={})[t]=i,o;throw new ci("[createMutation] expect resolverName to be string!",{resolverName:t,payload:e,condition:r})},Ui=function(t){return Object.keys(t)[0]},Di=function(){return Math.floor(Date.now()/1e3)},Hi=function(t,e){return void 0===e&&(e={}),Ki(e)?Promise.resolve(e):t.getContract()},Li=function(t){return Ji(t,"data")&&!Ji(t,"error")?t.data:t},Ki=function(t){return t&&Ci(t)&&(Ji(t,"query")||Ji(t,"mutation"))},Bi="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function Wi(t){this.message=t}Wi.prototype=new Error,Wi.prototype.name="InvalidCharacterError";var Vi="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(t){var e=String(t).replace(/=+$/,"");if(e.length%4==1)throw new Wi("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,n,o=0,i=0,a="";n=e.charAt(i++);~n&&(r=o%4?64*r+n:n,o++%4)?a+=String.fromCharCode(255&r>>(-2*o&6)):0)n=Bi.indexOf(n);return a};var Gi=function(t){var e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw"Illegal base64url string!"}try{return function(t){return decodeURIComponent(Vi(t).replace(/(.)/g,function(t,e){var r=e.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r}))}(e)}catch(t){return Vi(e)}};function Yi(t){this.message=t}Yi.prototype=new Error,Yi.prototype.name="InvalidTokenError";var Qi,Xi,Zi,ta,ea,ra,na,oa,ia,aa=function(t,e){if("string"!=typeof t)throw new Yi("Invalid token specified");var r=!0===(e=e||{}).header?0:1;try{return JSON.parse(Gi(t.split(".")[r]))}catch(t){throw new Yi("Invalid token specified: "+t.message)}},ua=Yi;function ca(t){if(qi(t))return function(t){var e=t.iat||Math.floor(Date.now()/1e3);if(t.exp&&e>=t.exp){var r=new Date(t.exp).toISOString();throw new si("Token has expired on "+r,t)}return t}(aa(t));throw new si("Token must be a string!")}aa.InvalidTokenError=ua;Ii("HS256",["string"]),Ii(!1,["boolean","number","string"],((Qi={})[Jo]="exp",Qi[No]=!0,Qi)),Ii(!1,["boolean","number","string"],((Xi={})[Jo]="nbf",Xi[No]=!0,Xi)),Ii(!1,["boolean","string"],((Zi={})[Jo]="iss",Zi[No]=!0,Zi)),Ii(!1,["boolean","string"],((ta={})[Jo]="sub",ta[No]=!0,ta)),Ii(!1,["boolean","string"],((ea={})[Jo]="iss",ea[No]=!0,ea)),Ii(!1,["boolean"],((ra={})[No]=!0,ra)),Ii(!1,["boolean","string"],((na={})[No]=!0,na)),Ii(!1,["boolean","string"],((oa={})[No]=!0,oa)),Ii(!1,["boolean"],((ia={})[No]=!0,ia));!function(){switch(!0){case"undefined"!=typeof WebSocket:return WebSocket;case"undefined"!=typeof MozWebSocket:return MozWebSocket;case"undefined"!=typeof window:return window.WebSocket||window.MozWebSocket;default:throw new ci("WebSocket is NOT SUPPORTED!")}}();var sa=qo[0],fa=qo[1],la=function(e){try{this.fly||(this.fly=new t)}catch(t){throw console.error("Init fly error!",t),t}this.opts=e,this.extraHeader={},this.extraParams={},this.reqInterceptor(),this.resInterceptor()},pa={headers:{configurable:!0}};pa.headers.set=function(t){this.extraHeader=t},la.prototype.request=function(t,e,r){var n;void 0===e&&(e={}),void 0===r&&(r={}),this.headers=r;var o=vo({},{_cb:Di()},this.extraParams);if(this.opts.enableJsonp){var i=Ui(t);o=vo({},o,((n={}).jsonqlJsonpCallback=i,n)),t=t[i]}return this.fly.request(this.jsonqlEndpoint,t,vo({},{method:sa,params:o},e))},la.prototype.reqInterceptor=function(){var t=this;this.fly.interceptors.request.use(function(e){console.info("request interceptor call");var r=t.getHeaders();for(var n in r)e.headers[n]=r[n];return e})},la.prototype.processJsonp=function(t){return Li(t)},la.prototype.resInterceptor=function(){var t=this,e=t.opts.enableJsonp;this.fly.interceptors.response.use(function(r){console.info("response interceptor call"),t.cleanUp();var n=qi(r.data)?JSON.parse(r.data):r.data;return e?t.processJsonp(n):Li(n)},function(e){throw t.cleanUp(),console.error(e),new fi("Server side error",e)})},la.prototype.getHeaders=function(){return this.opts.enableAuth?vo({},To,this.getAuthHeader(),this.extraHeader):vo({},To,this.extraHeader)},la.prototype.cleanUp=function(){this.extraHeader={},this.extraParams={}},la.prototype.get=function(){return this.opts.showContractDesc&&(this.extraParams=vo({},this.extraParams,Mo)),this.request({},{method:"GET"},this.contractHeader).then(di).then(function(t){return console.info("144 get contract result",t),t.cache&&t.contract?t.contract:t})},la.prototype.query=function(t,e){return void 0===e&&(e=[]),this.request(Mi(t,e)).then(di)},la.prototype.mutation=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r={}),this.request(Ri(t,e,r),{method:fa}).then(di)},Object.defineProperties(la.prototype,pa);var ha=function(t){function e(e,r){t.call(this,e),null!==r&&(this.fly=new r)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={storeIt:{configurable:!0},jsonqlEndpoint:{configurable:!0},jsonqlContract:{configurable:!0},jsonqlToken:{configurable:!0},jsonqlUserdata:{configurable:!0}};return r.storeIt.set=function(t){throw console.info("storeIt",t),zi(t)&&t.length>=2&&Reflect.apply(Q.set,Q,t),new ci("Expect argument to be array and least 2 items!")},r.jsonqlEndpoint.set=function(t){var e=Q.get("endpoint")||[];Fi(e,t)||(e.push(t),this.storeId=["endpoint",e],this.endpointIndex=e.length-1)},r.jsonqlContract.set=function(t){var e=this.opts.storageKey,r=[e],n=t[0],o=t[1],i=Q.get(e)||[];i[this.endpointIndex||0]=n,r.push(i),o&&r.push(o),this.opts.keepContract&&(this.storeIt=r)},r.jsonqlToken.set=function(t){var e="credential",r=localStorage.get(e)||[];if(!Fi(r,t)){var n=r.length-1;r[n]=t,this[e+"Index"]=n;var o=[e,r];if(this.opts.tokenExpired){var i=parseFloat(this.opts.tokenExpired);if(!isNaN(i)&&i>0){var a=Di();o.push(a+parseFloat(i))}}return this.storeIt=o,this.jsonqlUserdata=this.decoder(t),t}return!1},r.jsonqlUserdata.set=function(t){var e=["userdata",t];return t.exp&&e.push(t.exp),Reflect.apply(Q.set,Q,e)},r.jsonqlEndpoint.get=function(){var t=Q.get("endpoint");if(!t){var e=this.opts,r=[e.hostname,e.jsonqlPath].join("/");return this.jsonqlEndpoint=r,r}return t[this.endpointIndex]},r.jsonqlContract.get=function(){var t=this.opts.storageKey;return(Q.get(t)||[])[this.endpointIndex]||!1},r.jsonqlToken.get=function(){var t="credential",e=localStorage.get(t);return!!e&&e[this[t+"Index"]]},r.jsonqlUserdata.get=function(){return X.get("userdata")},Object.defineProperties(e.prototype,r),e}(function(t){function e(e){t.call(this,e),e.enableAuth&&e.useJwt&&(this.setDecoder=ca)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={userdata:{configurable:!0},rawAuthToken:{configurable:!0},setDecoder:{configurable:!0}};return r.userdata.get=function(){return this.jsonqlUserdata},r.rawAuthToken.get=function(){return this.jsonqlToken},r.setDecoder.set=function(t){"function"==typeof t&&(this.decoder=t)},e.prototype.storeToken=function(t){return this.jsonqlToken=t},e.prototype.decoder=function(t){return t},e.prototype.getAuthHeader=function(){var t,e=this.rawAuthToken;return e?((t={})[this.opts.AUTH_HEADER]="Bearer "+e,t):{}},Object.defineProperties(e.prototype,r),e}(function(t){function e(e){t.call(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={contractHeader:{configurable:!0}};return e.prototype.getContract=function(){var t=this.readContract();if(console.info("getContract first call",t),t&&Array.isArray(t)){var e=t[this.endpointIndex||0];if(e)return Promise.resolve(e)}return this.get().then(this.storeContract.bind(this))},r.contractHeader.get=function(){var t={};return!1!==this.opts.contractKey&&(t[this.opts.contractKeyName]=this.opts.contractKey),t},e.prototype.storeContract=function(t){if(!Ki(t))throw new ci("Contract is malformed!");var e=[t];if(this.opts.contractExpired){var r=parseFloat(this.opts.contractExpired);!isNaN(r)&&r>0&&e.push(r)}return this.jsonqlContract=e,console.info("storeContract return result",t),t},e.prototype.readContract=function(){return Ki(this.opts.contract)?this.opts.contract:Q.get(this.opts.storageKey)},Object.defineProperties(e.prototype,r),e}(la))),da=new WeakMap,va=new WeakMap;var ga=function(t){void 0===t&&(t={}),t.logger&&"function"==typeof t.logger&&(this.logger=t.logger),this.keep=t.keep,this.result=t.keep?[]:null,this.normalStore=new Map,this.lazyStore=new Map},ya={$done:{configurable:!0},normalStore:{configurable:!0},lazyStore:{configurable:!0}};ga.prototype.logger=function(){},ga.prototype.$on=function(t,e,r){var n=this;void 0===r&&(r=null);this.validate(t,e);var o=this.takeFromStore(t);if(!1===o)return this.logger("$on",t+" callback is not in lazy store"),this.addToNormalStore(t,"on",e,r);this.logger("$on",t+" found in lazy store");var i=0;return o.forEach(function(o){var a=o[0],u=o[1],c=o[2];if(c&&"on"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);n.run(e,a,r||u),i+=n.addToNormalStore(t,"on",e,r||u)}),i},ga.prototype.$once=function(t,e,r){void 0===r&&(r=null),this.validate(t,e);var n=this.takeFromStore(t);this.normalStore;if(!1===n)return this.logger("$once",t+" not in the lazy store"),this.addToNormalStore(t,"once",e,r);this.logger("$once",n);var o=Array.from(n)[0],i=o[0],a=o[1],u=o[2];if(u&&"once"!==u)throw new Error("You are trying to register an event already been taken by other type: "+u);this.run(e,i,r||a),this.$off(t)},ga.prototype.$only=function(t,e,r){var n=this;void 0===r&&(r=null),this.validate(t,e);var o=!1,i=this.takeFromStore(t);(this.normalStore.has(t)||(this.logger("$only",t+" add to store"),o=this.addToNormalStore(t,"only",e,r)),!1!==i)&&(this.logger("$only",t+" found data in lazy store to execute"),Array.from(i).forEach(function(t){var o=t[0],i=t[1],a=t[2];if(a&&"only"!==a)throw new Error("You are trying to register an event already been taken by other type: "+a);n.run(e,o,r||i)}));return o},ga.prototype.$onlyOnce=function(t,e,r){void 0===r&&(r=null),this.validate(t,e);var n=!1,o=this.takeFromStore(t);if(this.normalStore.has(t)||(this.logger("$onlyOnce",t+" add to store"),n=this.addToNormalStore(t,"onlyOnce",e,r)),!1!==o){this.logger("$onlyOnce",o);var i=Array.from(o)[0],a=i[0],u=i[1],c=i[2];if(c&&"onlyOnce"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);this.run(e,a,r||u),this.$off(t)}return n},ga.prototype.$replace=function(t,e,r,n){if(void 0===r&&(r=null),void 0===n&&(n="on"),this.validateType(n)){this.$off(t);var o=this["$"+n];return Reflect.apply(o,this,[t,e,r])}throw new Error(n+" is not supported!")},ga.prototype.$trigger=function(t,e,r,n){void 0===e&&(e=[]),void 0===r&&(r=null),void 0===n&&(n=!1),this.validateEvt(t);var o=0,i=this.normalStore;if(this.logger("$trigger",i),i.has(t)){this.logger("$trigger",t,"found");for(var a=Array.from(i.get(t)),u=a.length,c=!1,s=0;s0;)n[o]=arguments[o+2];if(t.has(e)?(this.logger("addToStore",e+" existed"),r=t.get(e)):(this.logger("addToStore","create new Set for "+e),r=new Set),n.length>2)if(Array.isArray(n[0])){var i=n[2];this.checkTypeInLazyStore(e,i)||r.add(n)}else this.checkContentExist(n,r)||(this.logger("addToStore","insert new",n),r.add(n));else r.add(n);return t.set(e,r),[t,r.size]},ga.prototype.checkContentExist=function(t,e){return!!Array.from(e).filter(function(e){return e[0]===t[0]}).length},ga.prototype.checkTypeInStore=function(t,e){this.validateEvt(t),this.validateEvt(e);var r=this.$get(t,!0);return!1===r||!r.filter(function(t){var r=t[3];return e!==r}).length},ga.prototype.checkTypeInLazyStore=function(t,e){this.validateEvt(t),this.validateEvt(e);var r=this.lazyStore.get(t);return this.logger("checkTypeInLazyStore",r),!!r&&!!Array.from(r).filter(function(t){return t[2]!==e}).length},ga.prototype.addToNormalStore=function(t,e,r,n){if(void 0===n&&(n=null),this.logger("addToNormalStore",t,e,"add to normal store"),this.checkTypeInStore(t,e)){this.logger(e+" can add to "+t+" store");var o=this.hashFnToKey(r),i=[this.normalStore,t,o,r,n,e],a=Reflect.apply(this.addToStore,this,i),u=a[0],c=a[1];return this.normalStore=u,c}return!1},ga.prototype.addToLazyStore=function(t,e,r,n){void 0===e&&(e=[]),void 0===r&&(r=null),void 0===n&&(n=!1);var o=[this.lazyStore,t,this.toArray(e),r];n&&o.push(n);var i=Reflect.apply(this.addToStore,this,o),a=i[0],u=i[1];return this.lazyStore=a,u},ga.prototype.toArray=function(t){return Array.isArray(t)?t:[t]},ya.normalStore.set=function(t){da.set(this,t)},ya.normalStore.get=function(){return da.get(this)},ya.lazyStore.set=function(t){va.set(this,t)},ya.lazyStore.get=function(){return va.get(this)},ga.prototype.hashFnToKey=function(t){return t.toString().split("").reduce(function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t},0)+""},Object.defineProperties(ga.prototype,ya);var ba=new ga,ma=function(t,e,r,n){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];var i=n.auth[e].params,a=i.map(function(t,e){return r[e]}),u=r[i.length]||{};return Ni(r,i).then(function(){return t.query.apply(t,[e,a,u])}).catch(vi)}},_a=function(t,e,r){var n={query:{},mutation:{},auth:{}},o=function(e){n.query[e]=function(){for(var n=[],o=arguments.length;o--;)n[o]=arguments[o];var i=r.query[e].params,a=i.map(function(t,e){return n[e]}),u=n[i.length]||{};return Ni(a,i).then(function(){return t.query.apply(t,[e,a,u])}).catch(vi)}};for(var i in r.query)o(i);var a=function(e){n.mutation[e]=function(n,o,i){void 0===i&&(i={});var a=[n,o],u=r.mutation[e].params;return Ni(a,u).then(function(){return t.mutation.apply(t,[e,n,o,i])}).catch(vi)}};for(var u in r.mutation)a(u);if(e.enableAuth&&r.auth){var c=e.loginHandlerName,s=e.logoutHandlerName;r.auth[c]&&(n[c]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=ma(t,c,0,r);return o.apply(null,e).then(t.postLoginAction).then(function(t){return ba.$trigger("login",t),t})}),r.auth[s]?n[s]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=ma(t,s,0,r);return o.apply(null,e).then(t.postLogoutAction).then(function(t){return ba.$trigger("logout",t),t})}:n[s]=function(){t.postLogoutAction("continue"),ba.$trigger("logout","continue")},n.userdata=function(){return t.userdata}}return n.returnInstance&&(n.jsonqlClientInstance=t),n.getToken=function(){return t.rawAuthToken},n.eventEmitter=ba,n},wa={contract:!1,MUTATION_ARGS:["name","payload","conditions"],CONTENT_TYPE:Eo,BEARER:"Bearer",AUTH_HEADER:"Authorization"},ja={hostname:Ii([window.location.protocol,window.location.host].join("//"),["string"]),jsonqlPath:Ii("jsonql",["string"]),loginHandlerName:Ii("login",["string"]),logoutHandlerName:Ii("logout",["string"]),enableJsonp:Ii(!1,["boolean"]),enableAuth:Ii(!1,["boolean"]),useJwt:Ii(!0,["boolean"]),useLocalstorage:Ii(!0,["boolean"]),storageKey:Ii("storageKey",["string"]),authKey:Ii("authKey",["string"]),contractExpired:Ii(0,["number"]),keepContract:Ii(!0,["boolean"]),showContractDesc:Ii(!1,["boolean"]),contractKey:Ii(!1,["boolean"]),contractKeyName:Ii("X-JSONQL-CV-KEY",["string"]),enableTimeout:Ii(!1,["boolean"]),timeout:Ii(5e3,["number"]),returnInstance:Ii(!1,["boolean"]),allowReturnRawToken:Ii(!1,["boolean"]),debugOn:Ii(!1,["boolean"])};return function(t,e){return void 0===t&&(t={}),void 0===e&&(e=null),function(t){var e=t.contract;return $i(t,ja,wa).then(function(t){return t.contract=e,t})}(t).then(function(t){return{baseClient:new ha(t,e),opts:t}}).then(function(t){var e=t.baseClient,r=t.opts;return Hi(e,r.contract).then(function(t){return _a(e,r,t)})})}}); //# sourceMappingURL=jsonql-client.umd.js.map diff --git a/packages/http-client/dist/jsonql-client.umd.js.map b/packages/http-client/dist/jsonql-client.umd.js.map index d2673b6bde7cbe447b6a9adb6cd5b2fb056ef1bd..900b7c836061522785dbec86413d6152b61be6fb 100644 --- a/packages/http-client/dist/jsonql-client.umd.js.map +++ b/packages/http-client/dist/jsonql-client.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"jsonql-client.umd.js","sources":["../node_modules/store/plugins/defaults.js","../node_modules/store/plugins/expire.js"],"sourcesContent":["module.exports = defaultsPlugin\n\nfunction defaultsPlugin() {\n\tvar defaultValues = {}\n\t\n\treturn {\n\t\tdefaults: defaults,\n\t\tget: get\n\t}\n\t\n\tfunction defaults(_, values) {\n\t\tdefaultValues = values\n\t}\n\t\n\tfunction get(super_fn, key) {\n\t\tvar val = super_fn()\n\t\treturn (val !== undefined ? val : defaultValues[key])\n\t}\n}\n","var namespace = 'expire_mixin'\n\nmodule.exports = expirePlugin\n\nfunction expirePlugin() {\n\tvar expirations = this.createStore(this.storage, null, this._namespacePrefix+namespace)\n\t\n\treturn {\n\t\tset: expire_set,\n\t\tget: expire_get,\n\t\tremove: expire_remove,\n\t\tgetExpiration: getExpiration,\n\t\tremoveExpiredKeys: removeExpiredKeys\n\t}\n\t\n\tfunction expire_set(super_fn, key, val, expiration) {\n\t\tif (!this.hasNamespace(namespace)) {\n\t\t\texpirations.set(key, expiration)\n\t\t}\n\t\treturn super_fn()\n\t}\n\t\n\tfunction expire_get(super_fn, key) {\n\t\tif (!this.hasNamespace(namespace)) {\n\t\t\t_checkExpiration.call(this, key)\n\t\t}\n\t\treturn super_fn()\n\t}\n\t\n\tfunction expire_remove(super_fn, key) {\n\t\tif (!this.hasNamespace(namespace)) {\n\t\t\texpirations.remove(key)\n\t\t}\n\t\treturn super_fn()\n\t}\n\t\n\tfunction getExpiration(_, key) {\n\t\treturn expirations.get(key)\n\t}\n\t\n\tfunction removeExpiredKeys(_) {\n\t\tvar keys = []\n\t\tthis.each(function(val, key) {\n\t\t\tkeys.push(key)\n\t\t})\n\t\tfor (var i=0; i ( { - baseClient: new JsonqlBaseClient(opts), + baseClient: new JsonqlBaseClient(opts, Fly), opts: opts } )) diff --git a/packages/http-client/src/lib/base/base-cls.js b/packages/http-client/src/lib/base/base-cls.js index 15bee396309d3bf29738e0b52ab5d61a482f0592..8383c4c94a836fc0430ab317f3b172215fb9b666 100644 --- a/packages/http-client/src/lib/base/base-cls.js +++ b/packages/http-client/src/lib/base/base-cls.js @@ -11,8 +11,11 @@ import AuthCls from './auth-cls' // This class will only focus on the storage system export default class JsonqlBaseClient extends AuthCls { - constructor(opts) { + constructor(opts, Fly) { super(opts) + if (Fly!==null) { + this.fly = new Fly(); + } } // @TODO diff --git a/packages/http-client/src/lib/base/http-cls.js b/packages/http-client/src/lib/base/http-cls.js index 442f2282a2a8f590d82631e076aab8f6e654c1c4..fbe192d2299a19041937456a06f925c1abb44186 100644 --- a/packages/http-client/src/lib/base/http-cls.js +++ b/packages/http-client/src/lib/base/http-cls.js @@ -1,7 +1,7 @@ // base HttpClass // import Fly from 'flyio/dist/npm/fly' import { merge } from 'lodash-es' - +import Fly from 'flyio' import { createQuery, createMutation, @@ -39,7 +39,9 @@ export default class HttpClass { // flyio now become external depedencies and it makes it easier to switch // to a different environment like WeChat mini app try { - this.fly = new Fly() + if (!this.fly) { + this.fly = new Fly() + } } catch(e) { console.error('Init fly error!', e) throw e; diff --git a/packages/web-console/.gitignore b/packages/web-console/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a0dddc6fb8c6b3feeeffa6e29bedca338e483382 --- /dev/null +++ b/packages/web-console/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/web-console/README.md b/packages/web-console/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7a1e53ac71132096396fbdb4dcec15a1395e5bf3 --- /dev/null +++ b/packages/web-console/README.md @@ -0,0 +1,29 @@ +# web-console + +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm run serve +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Run your tests +``` +npm run test +``` + +### Lints and fixes files +``` +npm run lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/packages/web-console/babel.config.js b/packages/web-console/babel.config.js new file mode 100644 index 0000000000000000000000000000000000000000..ba179669a123909a9728283fd9c004c65adb90c5 --- /dev/null +++ b/packages/web-console/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/app' + ] +} diff --git a/packages/web-console/package.json b/packages/web-console/package.json new file mode 100644 index 0000000000000000000000000000000000000000..714b2d0d316f58a8ea13d00d8a56f0025fce39d5 --- /dev/null +++ b/packages/web-console/package.json @@ -0,0 +1,53 @@ +{ + "name": "jsonql-web-console", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint", + "jsonql": "node ./tests/fixtures/server.js", + "dev": "npm run jsonql & npm run serve" + }, + "dependencies": { + "core-js": "^2.6.5", + "jsonql-client": "^1.2.4", + "jsonql-ws-client": "^1.0.0-beta.1", + "vue": "^2.6.10", + "vuex": "^3.1.1" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "^3.9.0", + "@vue/cli-plugin-eslint": "^3.9.0", + "@vue/cli-service": "^3.9.0", + "babel-eslint": "^10.0.1", + "eslint": "^5.16.0", + "eslint-plugin-vue": "^5.0.0", + "jsonql-koa": "^1.3.4", + "server-io-core": "^1.2.0-beta.2", + "vue-template-compiler": "^2.6.10" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential", + "eslint:recommended" + ], + "rules": {}, + "parserOptions": { + "parser": "babel-eslint" + } + }, + "postcss": { + "plugins": { + "autoprefixer": {} + } + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/packages/web-console/public/favicon.ico b/packages/web-console/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 Binary files /dev/null and b/packages/web-console/public/favicon.ico differ diff --git a/packages/web-console/public/fly.js b/packages/web-console/public/fly.js new file mode 100644 index 0000000000000000000000000000000000000000..9c33cf849f62a8b90fb675c92220e4907eff03ed --- /dev/null +++ b/packages/web-console/public/fly.js @@ -0,0 +1,546 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else { + var a = factory(); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})(this, function() { +return /******/ (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; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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 = 2); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +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; }; + +module.exports = { + type: function type(ob) { + return Object.prototype.toString.call(ob).slice(8, -1).toLowerCase(); + }, + isObject: function isObject(ob, real) { + if (real) { + return this.type(ob) === "object"; + } else { + return ob && (typeof ob === 'undefined' ? 'undefined' : _typeof(ob)) === 'object'; + } + }, + isFormData: function isFormData(val) { + return typeof FormData !== 'undefined' && val instanceof FormData; + }, + trim: function trim(str) { + return str.replace(/(^\s*)|(\s*$)/g, ''); + }, + encode: function encode(val) { + return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); + }, + formatParams: function formatParams(data) { + var str = ""; + var first = true; + var that = this; + if (!this.isObject(data)) { + return data; + } + + function _encode(sub, path) { + var encode = that.encode; + var type = that.type(sub); + if (type == "array") { + sub.forEach(function (e, i) { + if (!that.isObject(e)) i = ""; + _encode(e, path + ('%5B' + i + '%5D')); + }); + } else if (type == "object") { + for (var key in sub) { + if (path) { + _encode(sub[key], path + "%5B" + encode(key) + "%5D"); + } else { + _encode(sub[key], encode(key)); + } + } + } else { + if (!first) { + str += "&"; + } + first = false; + str += path + "=" + encode(sub); + } + } + + _encode(data, ""); + return str; + }, + + // Do not overwrite existing attributes + merge: function merge(a, b) { + for (var key in b) { + if (!a.hasOwnProperty(key)) { + a[key] = b[key]; + } else if (this.isObject(b[key], 1) && this.isObject(a[key], 1)) { + this.merge(a[key], b[key]); + } + } + return a; + } +}; + +/***/ }), +/* 1 */, +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +function KEEP(_,cb){cb();} +"use strict"; + +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; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var utils = __webpack_require__(0); +var isBrowser = typeof document !== "undefined"; + +var Fly = function () { + function Fly(engine) { + _classCallCheck(this, Fly); + + this.engine = engine || XMLHttpRequest; + + this.default = this; //For typeScript + + /** + * Add lock/unlock API for interceptor. + * + * Once an request/response interceptor is locked, the incoming request/response + * will be added to a queue before they enter the interceptor, they will not be + * continued until the interceptor is unlocked. + * + * @param [interceptor] either is interceptors.request or interceptors.response + */ + function wrap(interceptor) { + var resolve = void 0; + var reject = void 0; + + function _clear() { + interceptor.p = resolve = reject = null; + } + + utils.merge(interceptor, { + lock: function lock() { + if (!resolve) { + interceptor.p = new Promise(function (_resolve, _reject) { + resolve = _resolve; + reject = _reject; + }); + } + }, + unlock: function unlock() { + if (resolve) { + resolve(); + _clear(); + } + }, + clear: function clear() { + if (reject) { + reject("cancel"); + _clear(); + } + } + }); + } + + var interceptors = this.interceptors = { + response: { + use: function use(handler, onerror) { + this.handler = handler; + this.onerror = onerror; + } + }, + request: { + use: function use(handler) { + this.handler = handler; + } + } + }; + + var irq = interceptors.request; + var irp = interceptors.response; + wrap(irp); + wrap(irq); + + this.config = { + method: "GET", + baseURL: "", + headers: {}, + timeout: 0, + params: {}, // Default Url params + parseJson: true, // Convert response data to JSON object automatically. + withCredentials: false + }; + } + + _createClass(Fly, [{ + key: "request", + value: function request(url, data, options) { + var _this = this; + + var engine = new this.engine(); + var contentType = "Content-Type"; + var contentTypeLowerCase = contentType.toLowerCase(); + var interceptors = this.interceptors; + var requestInterceptor = interceptors.request; + var responseInterceptor = interceptors.response; + var requestInterceptorHandler = requestInterceptor.handler; + var promise = new Promise(function (resolve, reject) { + if (utils.isObject(url)) { + options = url; + url = options.url; + } + options = options || {}; + options.headers = options.headers || {}; + + function isPromise(p) { + // some polyfill implementation of Promise may be not standard, + // so, we test by duck-typing + return p && p.then && p.catch; + } + + /** + * If the request/response interceptor has been locked, + * the new request/response will enter a queue. otherwise, it will be performed directly. + * @param [promise] if the promise exist, means the interceptor is locked. + * @param [callback] + */ + function enqueueIfLocked(promise, callback) { + if (promise) { + promise.then(function () { + callback(); + }); + } else { + callback(); + } + } + + // make the http request + function makeRequest(options) { + data = options.body; + // Normalize the request url + url = utils.trim(options.url); + var baseUrl = utils.trim(options.baseURL || ""); + if (!url && isBrowser && !baseUrl) url = location.href; + if (url.indexOf("http") !== 0) { + var isAbsolute = url[0] === "/"; + if (!baseUrl && isBrowser) { + var arr = location.pathname.split("/"); + arr.pop(); + baseUrl = location.protocol + "//" + location.host + (isAbsolute ? "" : arr.join("/")); + } + if (baseUrl[baseUrl.length - 1] !== "/") { + baseUrl += "/"; + } + url = baseUrl + (isAbsolute ? url.substr(1) : url); + if (isBrowser) { + + // Normalize the url which contains the ".." or ".", such as + // "http://xx.com/aa/bb/../../xx" to "http://xx.com/xx" . + var t = document.createElement("a"); + t.href = url; + url = t.href; + } + } + + var responseType = utils.trim(options.responseType || ""); + var needQuery = ["GET", "HEAD", "DELETE", "OPTION"].indexOf(options.method) !== -1; + var dataType = utils.type(data); + var params = options.params || {}; + + // merge url params when the method is "GET" (data is object) + if (needQuery && dataType === "object") { + params = utils.merge(data, params); + } + // encode params to String + params = utils.formatParams(params); + + // save url params + var _params = []; + if (params) { + _params.push(params); + } + // Add data to url params when the method is "GET" (data is String) + if (needQuery && data && dataType === "string") { + _params.push(data); + } + + // make the final url + if (_params.length > 0) { + url += (url.indexOf("?") === -1 ? "?" : "&") + _params.join("&"); + } + + engine.open(options.method, url); + + // try catch for ie >=9 + try { + engine.withCredentials = !!options.withCredentials; + engine.timeout = options.timeout || 0; + if (responseType !== "stream") { + engine.responseType = responseType; + } + } catch (e) {} + + var customContentType = options.headers[contentType] || options.headers[contentTypeLowerCase]; + + // default content type + var _contentType = "application/x-www-form-urlencoded"; + // If the request data is json object, transforming it to json string, + // and set request content-type to "json". In browser, the data will + // be sent as RequestBody instead of FormData + if (utils.trim((customContentType || "").toLowerCase()) === _contentType) { + data = utils.formatParams(data); + } else if (!utils.isFormData(data) && ["object", "array"].indexOf(utils.type(data)) !== -1) { + _contentType = 'application/json;charset=utf-8'; + data = JSON.stringify(data); + } + //If user doesn't set content-type, set default. + if (!(customContentType || needQuery)) { + options.headers[contentType] = _contentType; + } + + for (var k in options.headers) { + if (k === contentType && utils.isFormData(data)) { + // Delete the content-type, Let the browser set it + delete options.headers[k]; + } else { + try { + // In browser environment, some header fields are readonly, + // write will cause the exception . + engine.setRequestHeader(k, options.headers[k]); + } catch (e) {} + } + } + + function onresult(handler, data, type) { + enqueueIfLocked(responseInterceptor.p, function () { + if (handler) { + //如果失败,添加请求信息 + if (type) { + data.request = options; + } + var ret = handler.call(responseInterceptor, data, Promise); + data = ret === undefined ? data : ret; + } + if (!isPromise(data)) { + data = Promise[type === 0 ? "resolve" : "reject"](data); + } + data.then(function (d) { + resolve(d); + }).catch(function (e) { + reject(e); + }); + }); + } + + function onerror(e) { + e.engine = engine; + onresult(responseInterceptor.onerror, e, -1); + } + + function Err(msg, status) { + this.message = msg; + this.status = status; + } + + engine.onload = function () { + try { + // The xhr of IE9 has not response field + var response = engine.response || engine.responseText; + if (response && options.parseJson && (engine.getResponseHeader(contentType) || "").indexOf("json") !== -1 + // Some third engine implementation may transform the response text to json object automatically, + // so we should test the type of response before transforming it + && !utils.isObject(response)) { + response = JSON.parse(response); + } + + var headers = engine.responseHeaders; + // In browser + if (!headers) { + headers = {}; + var items = (engine.getAllResponseHeaders() || "").split("\r\n"); + items.pop(); + items.forEach(function (e) { + if (!e) return; + var key = e.split(":")[0]; + headers[key] = engine.getResponseHeader(key); + }); + } + var status = engine.status; + var statusText = engine.statusText; + var _data = { data: response, headers: headers, status: status, statusText: statusText }; + // The _response filed of engine is set in adapter which be called in engine-wrapper.js + utils.merge(_data, engine._response); + if (status >= 200 && status < 300 || status === 304) { + _data.engine = engine; + _data.request = options; + onresult(responseInterceptor.handler, _data, 0); + } else { + var e = new Err(statusText, status); + e.response = _data; + onerror(e); + } + } catch (e) { + onerror(new Err(e.msg, engine.status)); + } + }; + + engine.onerror = function (e) { + onerror(new Err(e.msg || "Network Error", 0)); + }; + + engine.ontimeout = function () { + onerror(new Err("timeout [ " + engine.timeout + "ms ]", 1)); + }; + engine._options = options; + setTimeout(function () { + engine.send(needQuery ? null : data); + }, 0); + } + + enqueueIfLocked(requestInterceptor.p, function () { + utils.merge(options, JSON.parse(JSON.stringify(_this.config))); + var headers = options.headers; + headers[contentType] = headers[contentType] || headers[contentTypeLowerCase] || ""; + delete headers[contentTypeLowerCase]; + options.body = data || options.body; + url = utils.trim(url || ""); + options.method = options.method.toUpperCase(); + options.url = url; + var ret = options; + if (requestInterceptorHandler) { + ret = requestInterceptorHandler.call(requestInterceptor, options, Promise) || options; + } + if (!isPromise(ret)) { + ret = Promise.resolve(ret); + } + ret.then(function (d) { + //if options continue + if (d === options) { + makeRequest(d); + } else { + resolve(d); + } + }, function (err) { + reject(err); + }); + }); + }); + promise.engine = engine; + return promise; + } + }, { + key: "all", + value: function all(promises) { + return Promise.all(promises); + } + }, { + key: "spread", + value: function spread(callback) { + return function (arr) { + return callback.apply(null, arr); + }; + } + }]); + + return Fly; +}(); + +//For typeScript + + +Fly.default = Fly; + +["get", "post", "put", "patch", "head", "delete"].forEach(function (e) { + Fly.prototype[e] = function (url, data, option) { + return this.request(url, data, utils.merge({ method: e }, option)); + }; +}); +["lock", "unlock", "clear"].forEach(function (e) { + Fly.prototype[e] = function () { + this.interceptors.request[e](); + }; +}); +// Learn more about keep-loader: https://github.com/wendux/keep-loader +; +module.exports = Fly; + +/***/ }) +/******/ ]); +}); \ No newline at end of file diff --git a/packages/web-console/public/index.html b/packages/web-console/public/index.html new file mode 100644 index 0000000000000000000000000000000000000000..cf4ab841d089650e85ac0dcd1653ede179170a6d --- /dev/null +++ b/packages/web-console/public/index.html @@ -0,0 +1,18 @@ + + + + + + + + web-console + + + +
+ + + + diff --git a/packages/web-console/src/App.vue b/packages/web-console/src/App.vue new file mode 100644 index 0000000000000000000000000000000000000000..fcc566279aef926ce288d41de2fd4d841a400705 --- /dev/null +++ b/packages/web-console/src/App.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/packages/web-console/src/assets/logo.png b/packages/web-console/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43 Binary files /dev/null and b/packages/web-console/src/assets/logo.png differ diff --git a/packages/web-console/src/components/HelloWorld.vue b/packages/web-console/src/components/HelloWorld.vue new file mode 100644 index 0000000000000000000000000000000000000000..879051a29739fdfb17ae82ed23b53fac251c2b7e --- /dev/null +++ b/packages/web-console/src/components/HelloWorld.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/packages/web-console/src/main.js b/packages/web-console/src/main.js new file mode 100644 index 0000000000000000000000000000000000000000..5e59b71d18aa11764357a89cba7397ede2511af9 --- /dev/null +++ b/packages/web-console/src/main.js @@ -0,0 +1,10 @@ +import Vue from 'vue' +import App from './App.vue' +import store from './store' + +Vue.config.productionTip = false + +new Vue({ + store, + render: h => h(App), +}).$mount('#app') diff --git a/packages/web-console/src/plugin/client.js b/packages/web-console/src/plugin/client.js new file mode 100644 index 0000000000000000000000000000000000000000..8e41a28fa88e4a5f40678cf334e678bc8c4b05a3 --- /dev/null +++ b/packages/web-console/src/plugin/client.js @@ -0,0 +1,15 @@ + +import Fly from 'flyio' // this is completely uselesss +import jsonqlClient from 'jsonql-client' + +console.info('Fly', Fly) + +const createClient = async (contract, options) => await jsonqlClient( + Object.assign({ + hostname: 'http://localhost:8081', + keepContract: false, + showContractDesc: true + }, options) +) + +export default createClient diff --git a/packages/web-console/src/plugin/jsonql.js b/packages/web-console/src/plugin/jsonql.js new file mode 100644 index 0000000000000000000000000000000000000000..e5c44c4a0e9746f10002937c24054e305472d78b --- /dev/null +++ b/packages/web-console/src/plugin/jsonql.js @@ -0,0 +1,10 @@ + +import contract from './public-contract.json' + +import client from './client' + +export default { + install(Vue, options = {}) { + Vue.JsonqlClient = client(contract, options) + } +} diff --git a/packages/web-console/src/plugin/public-contract.json b/packages/web-console/src/plugin/public-contract.json new file mode 100644 index 0000000000000000000000000000000000000000..c7808b85dd107461dbde05cacbebb7de39147319 --- /dev/null +++ b/packages/web-console/src/plugin/public-contract.json @@ -0,0 +1,62 @@ +{ + "query": { + "helloWorld": { + "description": "This is the stock resolver for testing purpose", + "params": [], + "returns": [ + { + "type": "string", + "description": "stock message" + } + ] + }, + "defaultCall": { + "description": false, + "params": [ + { + "type": [ + "number" + ], + "description": "a phony id", + "name": "id" + } + ], + "returns": [ + { + "type": [ + "object" + ], + "description": "an object with whatever" + } + ] + } + }, + "mutation": { + "defaultSave": { + "description": false, + "params": [ + { + "type": [ + "object" + ], + "name": "payload" + }, + { + "type": [ + "object" + ], + "name": "condition" + } + ], + "returns": [ + { + "type": [ + "boolean" + ] + } + ] + } + }, + "auth": {}, + "timestamp": 1563798679 +} diff --git a/packages/web-console/src/store.js b/packages/web-console/src/store.js new file mode 100644 index 0000000000000000000000000000000000000000..eb733d970ddaf4517fff0327369aac5d213711f2 --- /dev/null +++ b/packages/web-console/src/store.js @@ -0,0 +1,18 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import JsonqlClient from './plugin/jsonql' + +Vue.use(Vuex) +Vue.use(JsonqlClient) + +export default new Vuex.Store({ + state: { + + }, + mutations: { + + }, + actions: { + + } +}) diff --git a/packages/web-console/tests/fixtures/contract/contract.json b/packages/web-console/tests/fixtures/contract/contract.json new file mode 100644 index 0000000000000000000000000000000000000000..cb069393ef61930092e53abf325137b2055513de --- /dev/null +++ b/packages/web-console/tests/fixtures/contract/contract.json @@ -0,0 +1,55 @@ +{ + "query": { + "defaultCall": { + "file": "/home/joel/projects/open-source/jsonql/packages/contract-console/tests/fixtures/resolvers/query/default-call.js", + "description": false, + "params": [ + { + "type": [ + "number" + ], + "description": "a phony id", + "name": "id" + } + ], + "returns": [ + { + "type": [ + "object" + ], + "description": "an object with whatever" + } + ] + } + }, + "mutation": { + "defaultSave": { + "file": "/home/joel/projects/open-source/jsonql/packages/contract-console/tests/fixtures/resolvers/mutation/default-save.js", + "description": false, + "params": [ + { + "type": [ + "object" + ], + "name": "payload" + }, + { + "type": [ + "object" + ], + "name": "condition" + } + ], + "returns": [ + { + "type": [ + "boolean" + ] + } + ] + } + }, + "auth": {}, + "timestamp": 1563798679, + "sourceType": "module" +} diff --git a/packages/web-console/tests/fixtures/contract/public-contract.json b/packages/web-console/tests/fixtures/contract/public-contract.json new file mode 100644 index 0000000000000000000000000000000000000000..c7808b85dd107461dbde05cacbebb7de39147319 --- /dev/null +++ b/packages/web-console/tests/fixtures/contract/public-contract.json @@ -0,0 +1,62 @@ +{ + "query": { + "helloWorld": { + "description": "This is the stock resolver for testing purpose", + "params": [], + "returns": [ + { + "type": "string", + "description": "stock message" + } + ] + }, + "defaultCall": { + "description": false, + "params": [ + { + "type": [ + "number" + ], + "description": "a phony id", + "name": "id" + } + ], + "returns": [ + { + "type": [ + "object" + ], + "description": "an object with whatever" + } + ] + } + }, + "mutation": { + "defaultSave": { + "description": false, + "params": [ + { + "type": [ + "object" + ], + "name": "payload" + }, + { + "type": [ + "object" + ], + "name": "condition" + } + ], + "returns": [ + { + "type": [ + "boolean" + ] + } + ] + } + }, + "auth": {}, + "timestamp": 1563798679 +} diff --git a/packages/web-console/tests/fixtures/resolvers/import.js b/packages/web-console/tests/fixtures/resolvers/import.js new file mode 100644 index 0000000000000000000000000000000000000000..6601f782c3497ae953db86928e4e6e922da04a10 --- /dev/null +++ b/packages/web-console/tests/fixtures/resolvers/import.js @@ -0,0 +1,2 @@ +require = require("esm")(module/*, options*/) +module.exports = require("./resolver.js") diff --git a/packages/web-console/tests/fixtures/resolvers/mutation/default-save.js b/packages/web-console/tests/fixtures/resolvers/mutation/default-save.js new file mode 100644 index 0000000000000000000000000000000000000000..e307c3e96edc7a8c0e7bb685e4bc28ecf888e473 --- /dev/null +++ b/packages/web-console/tests/fixtures/resolvers/mutation/default-save.js @@ -0,0 +1,10 @@ +/** + * @param {object} payload + * @param {object} condition + * @return {boolean} + */ +export default function defaultSave(payload, condition) { + + + return true; +} diff --git a/packages/web-console/tests/fixtures/resolvers/query/default-call.js b/packages/web-console/tests/fixtures/resolvers/query/default-call.js new file mode 100644 index 0000000000000000000000000000000000000000..32c8211fc3f7c85a14c9e009ab65bd12712e0ed1 --- /dev/null +++ b/packages/web-console/tests/fixtures/resolvers/query/default-call.js @@ -0,0 +1,10 @@ + +/** + * @param {number} id a phony id + * @return {object} an object with whatever + * + */ +export default function defaultCall(id) { + + return {id: id} +} diff --git a/packages/web-console/tests/fixtures/resolvers/resolver.js b/packages/web-console/tests/fixtures/resolvers/resolver.js new file mode 100644 index 0000000000000000000000000000000000000000..547fa7565ffdf294d16e4ae924c6bce10877c2ca --- /dev/null +++ b/packages/web-console/tests/fixtures/resolvers/resolver.js @@ -0,0 +1,7 @@ +import querydefaultCall from './query/default-call.js' +import mutationdefaultSave from './mutation/default-save.js' + +export { + querydefaultCall, +mutationdefaultSave +} \ No newline at end of file diff --git a/packages/web-console/tests/fixtures/server.js b/packages/web-console/tests/fixtures/server.js new file mode 100644 index 0000000000000000000000000000000000000000..42661c5530f6b35594b606198aab024987c6b444 --- /dev/null +++ b/packages/web-console/tests/fixtures/server.js @@ -0,0 +1,21 @@ +const serverIo = require('server-io-core') +const jsonqlKoa = require('jsonql-koa') +const { join } = require('path') +const baseDir = join(__dirname, '..', '..') + +serverIo({ + port: 8001, + open: false, + webroot: [ + join(baseDir, 'node_modules'), + join(baseDir, 'public') + ], + middlewares: [ + jsonqlKoa({ + jsType: 'es', + resolverDir: join(__dirname, 'resolvers'), + contractDir: join(__dirname, 'contract'), + keysDir: join(__dirname, 'keys') + }) + ] +}) diff --git a/packages/web-console/vue.config.js b/packages/web-console/vue.config.js new file mode 100644 index 0000000000000000000000000000000000000000..e9f7f6e76201ac3f7c38b3bcbad9b1caf51efc2d --- /dev/null +++ b/packages/web-console/vue.config.js @@ -0,0 +1,27 @@ +// add a copy contract here +const fsx = require('fs-extra') +const { join } = require('path') +fsx.copy( + join(__dirname, 'tests', 'fixtures', 'contract', 'public-contract.json'), + join(__dirname, 'src', 'plugin', 'public-contract.json') +) + +fsx.copy( + join(__dirname, 'node_modules', 'flyio', 'dist', 'npm', 'fly.js'), + join(__dirname, 'public', 'fly.js') +) + + +module.exports = { + lintOnSave: false, + devServer: { + port: 8081, + open: true, + proxy: { + '^/jsonql': { + target: "http://localhost:8082", + ws: true + } + } + } +}