diff --git a/packages/@jsonql/http-client/src/core/jsonql-static-generator.js b/packages/@jsonql/http-client/src/core/jsonql-static-generator.js index c56d4b80b97cd0e30db74f79d4e126c9f1c8fe71..67757fcbcf8c7a4c1940b2beb6480f484a0f0d39 100644 --- a/packages/@jsonql/http-client/src/core/jsonql-static-generator.js +++ b/packages/@jsonql/http-client/src/core/jsonql-static-generator.js @@ -1,6 +1,6 @@ // This generator will use the old style // with default methods -import { RESULT_PROP_NAME, ERROR_PROP_NAME } from 'jsonql-constants' +import { ON_RESULT_PROP_NAME, ON_ERROR_PROP_NAME } from 'jsonql-constants' import methodsGenerator from './methods-generator' import { createEvt } from '../utils' @@ -19,8 +19,8 @@ const handler = (ee, type) => { return (resolverName, ...args) => ( new Promise((resolver, rejecter) => { // this are the callbacks - ee.$only(createEvt(type, resolverName, RESULT_PROP_NAME), resolver) - ee.$only(createEvt(type, resolverName, ERROR_PROP_NAME), rejecter) + ee.$only(createEvt(type, resolverName, ON_RESULT_PROP_NAME), resolver) + ee.$only(createEvt(type, resolverName, ON_ERROR_PROP_NAME), rejecter) // this is the main call ee.$trigger(type, { resolverName, args }) }) @@ -68,10 +68,10 @@ function setupEventHandlers(jsonqlInstance, ee, config, contract) { if (methods[type][resolverName]) { Reflect.apply(methods[type][resolverName], null, args) .then(result => { - ee.$trigger(createEvt(type, resolverName, RESULT_PROP_NAME), result) + ee.$trigger(createEvt(type, resolverName, ON_RESULT_PROP_NAME), result) }) .catch(err => { - ee.$trigger(createEvt(type, resolverName, ERROR_PROP_NAME), err) + ee.$trigger(createEvt(type, resolverName, ON_ERROR_PROP_NAME), err) }) } else { console.error(`${resolverName} is not defined in the contract!`) diff --git a/packages/@jsonql/socketio/README.md b/packages/@jsonql/socketio/README.md new file mode 100644 index 0000000000000000000000000000000000000000..53382fa03bb162a6f53355c47713ad2bc5cb4134 --- /dev/null +++ b/packages/@jsonql/socketio/README.md @@ -0,0 +1,15 @@ +# @jsonql/socketio + +This is the [socket.io]() client for jsonql + +You don't normally use this directly. This is part of the optional package for @jsonql/client + +## Examples + +Coming soon + +--- + +NB & T1S + +https://jsonql.org diff --git a/packages/@jsonql/socketio/src/io/io-main-handler.js b/packages/@jsonql/socketio/src/io/io-main-handler.js index 72d088b5c8b4fa68750e7184aa77bc6f225cceae..341168929eba9eed604b135e08419bf08739856c 100644 --- a/packages/@jsonql/socketio/src/io/io-main-handler.js +++ b/packages/@jsonql/socketio/src/io/io-main-handler.js @@ -1,15 +1,15 @@ import { - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, EMIT_EVT } from '../utils/constants' import { - ERROR_PROP_NAME, + ON_ERROR_PROP_NAME, LOGOUT_EVENT_NAME, ERROR_TYPE, ERROR_KEY, DATA_KEY, - READY_PROP_NAME + ON_READY_PROP_NAME } from 'jsonql-constants' import { isKeyInObject } from 'jsonql-params-validator' import { getDebug, createEvt, formatPayload } from '../utils' @@ -22,7 +22,7 @@ const debugFn = getDebug('io-main-handler') * @param {string} resolverName resolver to handle this call * @return {function} capture the result */ -const resultHandler = (ee, namespace, resolverName, evt = RESULT_PROP_NAME) => { +const resultHandler = (ee, namespace, resolverName, evt = ON_RESULT_PROP_NAME) => { return (result) => { ee.$trigger(createEvt(namespace, resolverName, evt), [result]) } @@ -39,7 +39,7 @@ const createResolverListener = (nspSet, nsp, ee, namespace) => { for (let resolverName in nspSet) { nsp.on( resolverName, - resultHandler(ee, namespace, resolverName, MESSAGE_PROP_NAME) + resultHandler(ee, namespace, resolverName, ON_MESSAGE_PROP_NAME) ) } } @@ -98,5 +98,5 @@ export default function ioMainHandler(namespace, socket, ee, nspSet, opts) { } }) // the last one to fire - ee.$trigger(READY_PROP_NAME, namespace) + ee.$trigger(ON_READY_PROP_NAME, namespace) } diff --git a/packages/@jsonql/ws/README.md b/packages/@jsonql/ws/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ead066d29c5cd4ab0dd642250dc60e7f4c258223 --- /dev/null +++ b/packages/@jsonql/ws/README.md @@ -0,0 +1,18 @@ +# @jsonql/ws + +The socket client for jsonql, [ws](https://www.npmjs.com/package/ws) on node, and [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) on browser + +You don't usually use this directly. This is part of the optional dependencies for @jsonql/client + +## Example + +Coming soon + + +--- + +MIT + +NB and T1S + +https://jsonql.org diff --git a/packages/@jsonql/ws/dist/jsonql-ws-client.cjs.js b/packages/@jsonql/ws/dist/jsonql-ws-client.cjs.js index 6a7b7b6c9a58ca04eb822d462b0ebfda86741682..67093144e5a3a52b6ccad9ada0a2ffdc5b50ba42 100644 --- a/packages/@jsonql/ws/dist/jsonql-ws-client.cjs.js +++ b/packages/@jsonql/ws/dist/jsonql-ws-client.cjs.js @@ -1,2 +1,2 @@ -"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var debug$3=_interopDefault(require("debug"));require("fs"),require("path");var WebSocket=_interopDefault(require("ws")),global$1="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},DATA_KEY="data",ERROR_KEY="error",JSONQL_PATH="jsonql",DEFAULT_TYPE="any",QUERY_NAME="query",MUTATION_NAME="mutation",SOCKET_NAME="socket",QUERY_ARG_NAME="args",KEY_WORD="continue",TYPE_KEY="type",OPTIONAL_KEY="optional",ENUM_KEY="enumv",ARGS_KEY="args",CHECKER_KEY="checker",ALIAS_KEY="alias",LOGIN_NAME="login",ISSUER_NAME=LOGIN_NAME,LOGOUT_NAME="logout",OR_SEPERATOR="|",STRING_TYPE="string",BOOLEAN_TYPE="boolean",ARRAY_TYPE="array",OBJECT_TYPE="object",NUMBER_TYPE="number",ARRAY_TYPE_LFT="array.<",ARRAY_TYPE_RGT=">",NO_ERROR_MSG="No message",NO_STATUS_CODE=-1,LOGIN_EVENT_NAME="__login__",LOGOUT_EVENT_NAME="__logout__",WS_REPLY_TYPE="__reply__",WS_EVT_NAME="__event__",WS_DATA_NAME="__data__",EMIT_REPLY_TYPE="emit",ACKNOWLEDGE_REPLY_TYPE="acknowledge",ERROR_TYPE="error",NSP_SET="nspSet",PUBLIC_NAMESPACE="publicNamespace",JS_WS_SOCKET_IO_NAME="socket.io",JS_WS_NAME="ws",MESSAGE_PROP_NAME="onMessage",RESULT_PROP_NAME="onResult",ERROR_PROP_NAME="onError",READY_PROP_NAME="onReady",SEND_MSG_PROP_NAME="send",NOT_LOGIN_ERR_MSG="NOT LOGIN",TOKEN_PARAM_NAME="token",SOCKET_IO=JS_WS_SOCKET_IO_NAME,MISSING_PROP_ERR="Missing property in contract!",EXPECT_FUNC_ERR="Expect a function!",EMIT_EVT=EMIT_REPLY_TYPE,UNKNOWN_RESULT="UKNNOWN RESULT!",MY_NAMESPACE="myNamespace";function isNull(e){return null===e}var freeGlobal="object"==typeof global$1&&global$1&&global$1.Object===Object&&global$1,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=freeGlobal||freeSelf||Function("return this")(),Symbol=root.Symbol;function arrayMap(e,r){for(var t=-1,n=null==e?0:e.length,o=Array(n);++to?0:o+r),(t=t>o?o:t)<0&&(t+=o),o=r>t?0:t-r>>>0,r>>>=0;for(var a=Array(o);++n=n?e:baseSlice(e,r,t)}function baseFindIndex(e,r,t,n){for(var o=e.length,a=t+(n?1:-1);n?a--:++a-1;);return t}function charsStartIndex(e,r){for(var t=-1,n=e.length;++t-1;);return t}function asciiToArray(e){return e.split("")}var rsAstralRange="\\ud800-\\udfff",rsComboMarksRange="\\u0300-\\u036f",reComboHalfMarksRange="\\ufe20-\\ufe2f",rsComboSymbolsRange="\\u20d0-\\u20ff",rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsVarRange="\\ufe0e\\ufe0f",rsZWJ="\\u200d",reHasUnicode=RegExp("["+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+"]");function hasUnicode(e){return reHasUnicode.test(e)}var rsAstralRange$1="\\ud800-\\udfff",rsComboMarksRange$1="\\u0300-\\u036f",reComboHalfMarksRange$1="\\ufe20-\\ufe2f",rsComboSymbolsRange$1="\\u20d0-\\u20ff",rsComboRange$1=rsComboMarksRange$1+reComboHalfMarksRange$1+rsComboSymbolsRange$1,rsVarRange$1="\\ufe0e\\ufe0f",rsAstral="["+rsAstralRange$1+"]",rsCombo="["+rsComboRange$1+"]",rsFitz="\\ud83c[\\udffb-\\udfff]",rsModifier="(?:"+rsCombo+"|"+rsFitz+")",rsNonAstral="[^"+rsAstralRange$1+"]",rsRegional="(?:\\ud83c[\\udde6-\\uddff]){2}",rsSurrPair="[\\ud800-\\udbff][\\udc00-\\udfff]",rsZWJ$1="\\u200d",reOptMod=rsModifier+"?",rsOptVar="["+rsVarRange$1+"]?",rsOptJoin="(?:"+rsZWJ$1+"(?:"+[rsNonAstral,rsRegional,rsSurrPair].join("|")+")"+rsOptVar+reOptMod+")*",rsSeq=rsOptVar+reOptMod+rsOptJoin,rsSymbol="(?:"+[rsNonAstral+rsCombo+"?",rsCombo,rsRegional,rsSurrPair,rsAstral].join("|")+")",reUnicode=RegExp(rsFitz+"(?="+rsFitz+")|"+rsSymbol+rsSeq,"g");function unicodeToArray(e){return e.match(reUnicode)||[]}function stringToArray(e){return hasUnicode(e)?unicodeToArray(e):asciiToArray(e)}function toString(e){return null==e?"":baseToString(e)}var reTrim=/^\s+|\s+$/g;function trim(e,r,t){if((e=toString(e))&&(t||void 0===r))return e.replace(reTrim,"");if(!e||!(r=baseToString(r)))return e;var n=stringToArray(e),o=stringToArray(r);return castSlice(n,charsStartIndex(n,o),charsEndIndex(n,o)+1).join("")}function isUndefined(e){return void 0===e}var boolTag="[object Boolean]";function isBoolean(e){return!0===e||!1===e||isObjectLike(e)&&baseGetTag(e)==boolTag}var numberTag="[object Number]";function isNumber(e){return"number"==typeof e||isObjectLike(e)&&baseGetTag(e)==numberTag}function isNaN(e){return isNumber(e)&&e!=+e}var stringTag="[object String]";function isString(e){return"string"==typeof e||!isArray(e)&&isObjectLike(e)&&baseGetTag(e)==stringTag}function overArg(e,r){return function(t){return e(r(t))}}var getPrototype=overArg(Object.getPrototypeOf,Object),objectTag="[object Object]",funcProto=Function.prototype,objectProto$2=Object.prototype,funcToString=funcProto.toString,hasOwnProperty$1=objectProto$2.hasOwnProperty,objectCtorString=funcToString.call(Object);function isPlainObject(e){if(!isObjectLike(e)||baseGetTag(e)!=objectTag)return!1;var r=getPrototype(e);if(null===r)return!0;var t=hasOwnProperty$1.call(r,"constructor")&&r.constructor;return"function"==typeof t&&t instanceof t&&funcToString.call(t)==objectCtorString}function arrayFilter(e,r){for(var t=-1,n=null==e?0:e.length,o=0,a=[];++t-1&&e%1==0&&e-1&&e%1==0&&e<=MAX_SAFE_INTEGER$1}var argsTag$1="[object Arguments]",arrayTag="[object Array]",boolTag$1="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag="[object Function]",mapTag="[object Map]",numberTag$1="[object Number]",objectTag$1="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag$1="[object String]",weakMapTag="[object WeakMap]",arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",typedArrayTags={};function baseIsTypedArray(e){return isObjectLike(e)&&isLength(e.length)&&!!typedArrayTags[baseGetTag(e)]}function baseUnary(e){return function(r){return e(r)}}typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag$1]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag$1]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag$1]=typedArrayTags[objectTag$1]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag$1]=typedArrayTags[weakMapTag]=!1;var freeExports$1="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule$1=freeExports$1&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports$1=freeModule$1&&freeModule$1.exports===freeExports$1,freeProcess=moduleExports$1&&freeGlobal.process,nodeUtil=function(){try{var e=freeModule$1&&freeModule$1.require&&freeModule$1.require("util").types;return e||freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch(e){}}(),nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray,isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray,objectProto$4=Object.prototype,hasOwnProperty$3=objectProto$4.hasOwnProperty;function arrayLikeKeys(e,r){var t=isArray(e),n=!t&&isArguments(e),o=!t&&!n&&isBuffer(e),a=!t&&!n&&!o&&isTypedArray(e),i=t||n||o||a,s=i?baseTimes(e.length,String):[],c=s.length;for(var u in e)!r&&!hasOwnProperty$3.call(e,u)||i&&("length"==u||o&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||isIndex(u,c))||s.push(u);return s}var objectProto$5=Object.prototype;function isPrototype(e){var r=e&&e.constructor;return e===("function"==typeof r&&r.prototype||objectProto$5)}var nativeKeys=overArg(Object.keys,Object),objectProto$6=Object.prototype,hasOwnProperty$4=objectProto$6.hasOwnProperty;function baseKeys(e){if(!isPrototype(e))return nativeKeys(e);var r=[];for(var t in Object(e))hasOwnProperty$4.call(e,t)&&"constructor"!=t&&r.push(t);return r}function isObject(e){var r=typeof e;return null!=e&&("object"==r||"function"==r)}var asyncTag="[object AsyncFunction]",funcTag$1="[object Function]",genTag="[object GeneratorFunction]",proxyTag="[object Proxy]";function isFunction(e){if(!isObject(e))return!1;var r=baseGetTag(e);return r==funcTag$1||r==genTag||r==asyncTag||r==proxyTag}function isArrayLike(e){return null!=e&&isLength(e.length)&&!isFunction(e)}function keys(e){return isArrayLike(e)?arrayLikeKeys(e):baseKeys(e)}function baseForOwn(e,r){return e&&baseFor(e,r,keys)}function listCacheClear(){this.__data__=[],this.size=0}function eq(e,r){return e===r||e!=e&&r!=r}function assocIndexOf(e,r){for(var t=e.length;t--;)if(eq(e[t][0],r))return t;return-1}var arrayProto=Array.prototype,splice=arrayProto.splice;function listCacheDelete(e){var r=this.__data__,t=assocIndexOf(r,e);return!(t<0)&&(t==r.length-1?r.pop():splice.call(r,t,1),--this.size,!0)}function listCacheGet(e){var r=this.__data__,t=assocIndexOf(r,e);return t<0?void 0:r[t][1]}function listCacheHas(e){return assocIndexOf(this.__data__,e)>-1}function listCacheSet(e,r){var t=this.__data__,n=assocIndexOf(t,e);return n<0?(++this.size,t.push([e,r])):t[n][1]=r,this}function ListCache(e){var r=-1,t=null==e?0:e.length;for(this.clear();++rs))return!1;var u=a.get(e);if(u&&a.get(r))return u==r;var l=-1,f=!0,p=t&COMPARE_UNORDERED_FLAG?new SetCache:void 0;for(a.set(e,r),a.set(r,e);++l0){if(++r>=HOT_COUNT)return arguments[0]}else r=0;return e.apply(void 0,arguments)}}var setToString=shortOut(baseSetToString);function baseRest(e,r){return setToString(overRest(e,r,identity),e+"")}function isIterateeCall(e,r,t){if(!isObject(t))return!1;var n=typeof r;return!!("number"==n?isArrayLike(t)&&isIndex(r,t.length):"string"==n&&r in t)&&eq(t[r],e)}function createAssigner(e){return baseRest((function(r,t){var n=-1,o=t.length,a=o>1?t[o-1]:void 0,i=o>2?t[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,i&&isIterateeCall(t[0],t[1],i)&&(a=o<3?void 0:a,o=1),r=Object(r);++n0))},isArrayLike$1=function(e){if(e.indexOf(ARRAY_TYPE_LFT$1)>-1&&e.indexOf(ARRAY_TYPE_RGT$1)>-1){var r=e.replace(ARRAY_TYPE_LFT$1,"").replace(ARRAY_TYPE_RGT$1,"");return r.indexOf(OR_SEPERATOR$1)?r.split(OR_SEPERATOR$1):[r]}return!1},arrayTypeHandler=function(e,r){var t=e.arg;return r.length>1?!t.filter((function(e){return!(r.length>r.filter((function(r){return!combineFn(r)(e)})).length)})).length:r.length>r.filter((function(e){return!checkIsArray(t,e)})).length},checkIsObject=function(e,r){if(void 0===r&&(r=null),isPlainObject(e)){if(!r)return!0;if(checkIsArray(r))return!r.filter((function(r){var t=e[r.name];return!(r.type.length>r.type.filter((function(e){var r;return!!isUndefined(t)||(!1!==(r=isArrayLike$1(e))?!arrayTypeHandler({arg:t},r):!combineFn(e)(t))})).length)})).length}return!1},objectTypeHandler=function(e){var r=e.arg,t=e.param,n=[r];return Array.isArray(t.keys)&&t.keys.length&&n.push(t.keys),checkIsObject.apply(null,n)},Jsonql406Error=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 406},t.name.get=function(){return"Jsonql406Error"},Object.defineProperties(r,t),r}(Error),Jsonql500Error=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 500},t.name.get=function(){return"Jsonql500Error"},Object.defineProperties(r,t),r}(Error),JsonqlAuthorisationError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 401},t.name.get=function(){return"JsonqlAuthorisationError"},Object.defineProperties(r,t),r}(Error),JsonqlContractAuthError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 401},t.name.get=function(){return"JsonqlContractAuthError"},Object.defineProperties(r,t),r}(Error),JsonqlResolverAppError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 500},t.name.get=function(){return"JsonqlResolverAppError"},Object.defineProperties(r,t),r}(Error),isBrowser=function(){try{if(window||document)return!0}catch(e){}return!1},isNode=function(){try{if(!isBrowser()&&global$1)return!0}catch(e){}return!1};function whereAmI(){return isBrowser()?"browser":isNode()?"node":"unknown"}var JsonqlBaseError=function(e){function r(){for(var r=[],t=arguments.length;t--;)r[t]=arguments[t];e.apply(this,r)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.where=function(){return whereAmI()},r}(Error),JsonqlResolverNotFoundError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,Error.captureStackTrace&&Error.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 404},t.name.get=function(){return"JsonqlResolverNotFoundError"},Object.defineProperties(r,t),r}(JsonqlBaseError),JsonqlEnumError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlEnumError"},Object.defineProperties(r,t),r}(Error),JsonqlTypeError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlTypeError"},Object.defineProperties(r,t),r}(Error),JsonqlCheckerError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlCheckerError"},Object.defineProperties(r,t),r}(Error),JsonqlValidationError$1=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,Error.captureStackTrace&&Error.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlValidationError"},Object.defineProperties(r,t),r}(JsonqlBaseError),JsonqlError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,Error.captureStackTrace&&Error.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0},statusCode:{configurable:!0}};return t.name.get=function(){return"JsonqlError"},t.statusCode.get=function(){return NO_STATUS_CODE},Object.defineProperties(r,t),r}(JsonqlBaseError),JsonqlServerError=function(e){function r(t,n){e.call(this,n),this.statusCode=t,this.className=r.name}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlServerError"},Object.defineProperties(r,t),r}(Error);function finalCatch(e){if(Array.isArray(e))throw new JsonqlValidationError$1("",e);var r=e.message||NO_ERROR_MSG,t=e.detail||e;switch(!0){case e instanceof Jsonql406Error:throw new Jsonql406Error(r,t);case e instanceof Jsonql500Error:throw new Jsonql500Error(r,t);case e instanceof JsonqlAuthorisationError:throw new JsonqlAuthorisationError(r,t);case e instanceof JsonqlContractAuthError:throw new JsonqlContractAuthError(r,t);case e instanceof JsonqlResolverAppError:throw new JsonqlResolverAppError(r,t);case e instanceof JsonqlResolverNotFoundError:throw new JsonqlResolverNotFoundError(r,t);case e instanceof JsonqlEnumError:throw new JsonqlEnumError(r,t);case e instanceof JsonqlTypeError:throw new JsonqlTypeError(r,t);case e instanceof JsonqlCheckerError:throw new JsonqlCheckerError(r,t);case e instanceof JsonqlValidationError$1:throw new JsonqlValidationError$1(r,t);case e instanceof JsonqlServerError:throw new JsonqlServerError(r,t);default:throw new JsonqlError(r,t)}}function log(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];try{window&&window.console&&Reflect.apply(console.log,console,e)}catch(e){}}var optionalHandler=function(e){var r=e.arg,t=e.param;return!!notEmpty(r)&&!(t.type.length>t.type.filter((function(r){return validateHandler(r,e)})).length)},validateHandler=function(e,r){var t;switch(!0){case e===OBJECT_TYPE$1:return!objectTypeHandler(r);case e===ARRAY_TYPE$1:return!checkIsArray(r.arg);case!1!==(t=isArrayLike$1(e)):return!arrayTypeHandler(r,t);default:return!combineFn(e)(r.arg)}},getOptionalValue=function(e,r){return isUndefined(e)?!0!==r.optional||isUndefined(r.defaultvalue)?null:r.defaultvalue:e},normalizeArgs=function(e,r){if(!checkIsArray(r))throw new JsonqlError(PARAMS_NOT_ARRAY_ERR);if(0===r.length)return[];if(!checkIsArray(e))throw new JsonqlError(ARGS_NOT_ARRAY_ERR);switch(!0){case e.length==r.length:return log(1),e.map((function(e,t){return{arg:e,index:t,param:r[t]}}));case!0===r[0].variable:log(2);var t=r[0].type;return e.map((function(e,n){return{arg:e,index:n,param:r[n]||{type:t,name:"_"}}}));case e.lengthr.length:log(4);var n=r.length,o=[DEFAULT_TYPE$1];return e.map((function(e,t){var a=t>=n||!!r[t].optional,i=r[t]||{type:o,name:"_"+t};return{arg:a?getOptionalValue(e,i):e,index:t,param:i,optional:a}}));default:throw log(5),new JsonqlError(EXCEPTION_CASE_ERR,{args:e,params:r})}},processReturn=function(e){return e.map((function(e){return e.arg}))},validateSync=function(e,r,t){var n;void 0===t&&(t=!1);var o=normalizeArgs(e,r),a=o.filter((function(e){return!0===e.optional||!0===e.param.optional?optionalHandler(e):!(e.param.type.length>e.param.type.filter((function(r){return validateHandler(r,e)})).length)}));return t?((n={})[ERROR_KEY]=a,n[DATA_KEY]=processReturn(o),n):a},validateAsync=function(e,r,t){return void 0===t&&(t=!1),new Promise((function(n,o){var a=validateSync(e,r,t);return t?a[ERROR_KEY].length?o(a[ERROR_KEY]):n(a[DATA_KEY]):a.length?o(a):n([])}))},isInArray=function(e,r){return!!e.filter((function(e){return e===r})).length},isKeyInObject=function(e,r){var t=Object.keys(e);return isInArray(t,r)},isEmpty=function(e){return!notEmpty(e)};function mapAliasConfigKeys(e,r){var t=omitBy(r,(function(e,r){return!e[ALIAS_KEY$1]}));return isEqual(t,{})?e:mapKeys(e,(function(e,r){return findKey(t,(function(e){return e.alias===r}))||r}))}function preservePristineValues(e,r){var t=mapAliasConfigKeys(e,r);return{pristineValues:mapValues(omitBy(r,(function(e,r){return isKeyInObject(t,r)})),(function(e){return e.args})),checkAgainstAppProps:omitBy(r,(function(e,r){return!isKeyInObject(t,r)})),config:t}}function processConfigAction(e,r){return mapValues(r,(function(r,t){var n,o;return isUndefined(e[t])||!0===r[OPTIONAL_KEY$1]&&isEmpty(e[t])?merge({},r,((n={})[KEY_WORD$1]=!0,n)):((o={})[ARGS_KEY$1]=e[t],o[TYPE_KEY$1]=r[TYPE_KEY$1],o[OPTIONAL_KEY$1]=r[OPTIONAL_KEY$1]||!1,o[ENUM_KEY$1]=r[ENUM_KEY$1]||!1,o[CHECKER_KEY$1]=r[CHECKER_KEY$1]||!1,o)}))}function prepareArgsForValidation(e,r){var t=preservePristineValues(e,r),n=t.config,o=t.pristineValues;return[processConfigAction(n,t.checkAgainstAppProps),o]}var toArray=function(e){return checkIsArray(e)?e:[e]},inArray=function(e,r){return!!e.filter((function(e){return e===r})).length};function validateHandler$1(e,r){var t,n=[[e[ARGS_KEY$1]],[(t={},t[TYPE_KEY$1]=toArray(e[TYPE_KEY$1]),t[OPTIONAL_KEY$1]=e[OPTIONAL_KEY$1],t)]];return Reflect.apply(r,null,n)}var enumHandler=function(e,r){return!checkIsArray(r)||inArray(r,e)},checkerHandler=function(e,r){try{return!!isFunction(r)&&r.apply(null,[e])}catch(e){return!1}};function runValidationAction(e){return function(r,t){if(r[KEY_WORD$1])return r[ARGS_KEY$1];var n=validateHandler$1(r,e);if(n.length)throw log("runValidationAction",t,r),new JsonqlTypeError(t,n);if(!1!==r[ENUM_KEY$1]&&!enumHandler(r[ARGS_KEY$1],r[ENUM_KEY$1]))throw log(ENUM_KEY$1,r[ENUM_KEY$1]),new JsonqlEnumError(t);if(!1!==r[CHECKER_KEY$1]&&!checkerHandler(r[ARGS_KEY$1],r[CHECKER_KEY$1]))throw log(CHECKER_KEY$1,r[CHECKER_KEY$1]),new JsonqlCheckerError(t);return r[ARGS_KEY$1]}}function runValidation(e,r){var t=e[0],n=e[1],o=mapValues(t,runValidationAction(r));return merge(o,n)}var configToArgs=function(e,r){return Promise.resolve(prepareArgsForValidation(e,r))};function checkOptionsAsync(e,r,t,n){return void 0===e&&(e={}),configToArgs(e,r).then((function(e){return runValidation(e,n)})).then((function(e){return merge({},e,t)}))}function constructConfigFn(e,r,t,n,o,a){void 0===t&&(t=!1),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===a&&(a=!1);var i={};return i[ARGS_KEY]=e,i[TYPE_KEY]=r,!0===t&&(i[OPTIONAL_KEY]=!0),checkIsArray(n)&&(i[ENUM_KEY]=n),isFunction(o)&&(i[CHECKER_KEY]=o),isString(a)&&(i[ALIAS_KEY]=a),i}var createConfig=function(e,r,t){void 0===t&&(t={});var n=t[OPTIONAL_KEY],o=t[ENUM_KEY],a=t[CHECKER_KEY],i=t[ALIAS_KEY];return constructConfigFn.apply(null,[e,r,n,o,a,i])},checkConfigAsync=function(e){return function(r,t,n){return void 0===n&&(n={}),checkOptionsAsync(r,t,n,e)}},isString$1=checkIsString,validateAsync$1=validateAsync,createConfig$1=createConfig,checkConfigAsync$1=checkConfigAsync(validateSync),isKeyInObject$1=isKeyInObject,inArray$1=function(e,r){return!!e.filter((function(e){return e===r})).length},toArray$1=function(e){return isArray(e)?e:[e]},isKeyInObject$2=function(e,r){var t=Object.keys(e);return inArray$1(t,r)},createEvt=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return e.join("_")},chainFns=function(e){for(var r=[],t=arguments.length-1;t-- >0;)r[t]=arguments[t+1];return function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return r.reduce((function(e,r){return Reflect.apply(r,null,toArray$1(e))}),Reflect.apply(e,null,t))}};function objDefineProps(e,r,t,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(e,r)&&Object.defineProperty(e,r,{set:t,get:null===n?function(){return null}:n}),e}function injectToFn(e,r,t,n){void 0===n&&(n=!1);var o=Object.getOwnPropertyDescriptor(e,r);return!1===n&&void 0!==o?e:(Object.defineProperty(e,r,{value:t,writable:n}),e)}function checkIsContract(e){return isPlainObject(e)&&(isKeyInObject$2(e,QUERY_NAME)||isKeyInObject$2(e,MUTATION_NAME)||isKeyInObject$2(e,SOCKET_NAME))}function extractSocketPart(e){return!!isKeyInObject$2(e,"socket")&&e.socket}function groupByNamespace(e,r){void 0===r&&(r=!1);var t=extractSocketPart(e);if(!1===t){if(r)return e;throw new JsonqlError("socket not found in contract!")}var n,o={},a=0;for(var i in t){var s=t[i],c=s.namespace;c&&(o[c]||(++a,o[c]={}),o[c][i]=s,n||s.public&&(n=c))}return{size:a,nspSet:o,publicNamespace:n}}function getNamespaceInOrder(e,r){var t=[];for(var n in e)n===r?t[1]=n:t[0]=n;return t}var formatPayload=function(e){var r;return(r={})[QUERY_ARG_NAME]=e,r};function getNameFromPayload(e){return Object.keys(e)[0]}function createQuery(e,r,t){var n;if(void 0===r&&(r=[]),void 0===t&&(t=!1),isString(e)&&isArray(r)){var o=formatPayload(r);return!0===t?o:((n={})[e]=o,n)}throw new JsonqlValidationError$1("[createQuery] expect resolverName to be string and args to be array!",{resolverName:e,args:r})}function createQueryStr(e,r,t){return void 0===r&&(r=[]),void 0===t&&(t=!1),JSON.stringify(createQuery(e,r,t))}var isContract=checkIsContract,BASE_NAME="jsonql-ws-client",getDebug=function(e){try{if(window.debug)return window.debug(BASE_NAME).extend(e)}catch(e){}try{if(global$1.debug)return global$1.debug(BASE_NAME).extend(e)}catch(e){}return function(){for(var r=[],t=arguments.length;t--;)r[t]=arguments[t];console.info.apply(null,[BASE_NAME,e].concat(r))}};try{window&&window.localStorage&&window.DEBUG&&localStorage.setItem("DEBUG",BASE_NAME+"*")}catch(e){}var NB_EVENT_SERVICE_PRIVATE_STORE=new WeakMap,NB_EVENT_SERVICE_PRIVATE_LAZY=new WeakMap;function hashCode(e){return e.split("").reduce((function(e,r){return(e=(e<<5)-e+r.charCodeAt(0))&e}),0)}var SuspendClass=function(){this.__suspend__=null,this.queueStore=new Set},prototypeAccessors={$suspend:{configurable:!0},$queues:{configurable:!0}};prototypeAccessors.$suspend.set=function(e){var r=this;if("boolean"!=typeof e)throw new Error("$suspend only accept Boolean value!");var t=this.__suspend__;this.__suspend__=e,this.logger("($suspend)","Change from "+t+" --\x3e "+e),!0===t&&!1===e&&setTimeout((function(){r.release()}),1)},SuspendClass.prototype.$queue=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return!0===this.__suspend__&&(this.logger("($queue)","added to $queue",e),this.queueStore.add(e)),this.__suspend__},prototypeAccessors.$queues.get=function(){var e=this.queueStore.size;return this.logger("($queues)","size: "+e),e>0?Array.from(this.queueStore):[]},SuspendClass.prototype.release=function(){var e=this,r=this.queueStore.size;if(this.logger("(release)","Release was called "+r),r>0){var t=Array.from(this.queueStore);this.queueStore.clear(),this.logger("queue",t),t.forEach((function(r){e.logger(r),Reflect.apply(e.$trigger,e,r)})),this.logger("Release size "+this.queueStore.size)}},Object.defineProperties(SuspendClass.prototype,prototypeAccessors);var NbEventServiceBase=function(e){function r(r){void 0===r&&(r={}),e.call(this),r.logger&&"function"==typeof r.logger&&(this.logger=r.logger),this.keep=r.keep,this.result=r.keep?[]:null,this.normalStore=new Map,this.lazyStore=new Map}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={normalStore:{configurable:!0},lazyStore:{configurable:!0}};return r.prototype.validateEvt=function(){for(var e=this,r=[],t=arguments.length;t--;)r[t]=arguments[t];return r.forEach((function(r){if("string"!=typeof r)throw e.logger("(validateEvt)",r),new Error("event name must be string type!")})),!0},r.prototype.validate=function(e,r){if(this.validateEvt(e)&&"function"==typeof r)return!0;throw new Error("callback required to be function type!")},r.prototype.validateType=function(e){return!!["on","only","once","onlyOnce"].filter((function(r){return e===r})).length},r.prototype.run=function(e,r,t){this.logger("(run)",e,r,t),this.$done=Reflect.apply(e,t,this.toArray(r))},r.prototype.takeFromStore=function(e,r){void 0===r&&(r="lazyStore");var t=this[r];if(t){if(this.logger("(takeFromStore)",r,t),t.has(e)){var n=t.get(e);return this.logger("(takeFromStore)","has "+e,n),t.delete(e),n}return!1}throw new Error(r+" is not supported!")},r.prototype.addToStore=function(e,r){for(var t,n=[],o=arguments.length-2;o-- >0;)n[o]=arguments[o+2];if(e.has(r)?(this.logger("(addToStore)",r+" existed"),t=e.get(r)):(this.logger("(addToStore)","create new Set for "+r),t=new Set),n.length>2)if(Array.isArray(n[0])){var a=n[2];this.checkTypeInLazyStore(r,a)||t.add(n)}else this.checkContentExist(n,t)||(this.logger("(addToStore)","insert new",n),t.add(n));else t.add(n);return e.set(r,t),[e,t.size]},r.prototype.checkContentExist=function(e,r){return!!Array.from(r).filter((function(r){return r[0]===e[0]})).length},r.prototype.checkTypeInStore=function(e,r){this.validateEvt(e,r);var t=this.$get(e,!0);return!1===t||!t.filter((function(e){var t=e[3];return r!==t})).length},r.prototype.checkTypeInLazyStore=function(e,r){this.validateEvt(e,r);var t=this.lazyStore.get(e);return this.logger("(checkTypeInLazyStore)",t),!!t&&!!Array.from(t).filter((function(e){return e[2]!==r})).length},r.prototype.addToNormalStore=function(e,r,t,n){if(void 0===n&&(n=null),this.logger("(addToNormalStore)",e,r,"try to add to normal store"),this.checkTypeInStore(e,r)){this.logger("(addToNormalStore)",r+" can add to "+e+" normal store");var o=this.hashFnToKey(t),a=[this.normalStore,e,o,t,n,r],i=Reflect.apply(this.addToStore,this,a),s=i[0],c=i[1];return this.normalStore=s,c}return!1},r.prototype.addToLazyStore=function(e,r,t,n){void 0===r&&(r=[]),void 0===t&&(t=null),void 0===n&&(n=!1);var o=[this.lazyStore,e,this.toArray(r),t];n&&o.push(n);var a=Reflect.apply(this.addToStore,this,o),i=a[0],s=a[1];return this.lazyStore=i,s},r.prototype.toArray=function(e){return Array.isArray(e)?e:[e]},t.normalStore.set=function(e){NB_EVENT_SERVICE_PRIVATE_STORE.set(this,e)},t.normalStore.get=function(){return NB_EVENT_SERVICE_PRIVATE_STORE.get(this)},t.lazyStore.set=function(e){NB_EVENT_SERVICE_PRIVATE_LAZY.set(this,e)},t.lazyStore.get=function(){return NB_EVENT_SERVICE_PRIVATE_LAZY.get(this)},r.prototype.hashFnToKey=function(e){return hashCode(e.toString())+""},Object.defineProperties(r.prototype,t),r}(SuspendClass),EventService=function(e){function r(r){void 0===r&&(r={}),e.call(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={$done:{configurable:!0}};return r.prototype.logger=function(){},r.prototype.$on=function(e,r,t){var n=this;void 0===t&&(t=null);this.validate(e,r);var o=this.takeFromStore(e);if(!1===o)return this.logger("($on)",e+" callback is not in lazy store"),this.addToNormalStore(e,"on",r,t);this.logger("($on)",e+" found in lazy store");var a=0;return o.forEach((function(o){var i=o[0],s=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.logger("($on)","call run on "+e),n.run(r,i,t||s),a+=n.addToNormalStore(e,"on",r,t||s)})),a},r.prototype.$once=function(e,r,t){void 0===t&&(t=null),this.validate(e,r);var n=this.takeFromStore(e);this.normalStore;if(!1===n)return this.logger("($once)",e+" not in the lazy store"),this.addToNormalStore(e,"once",r,t);this.logger("($once)",n);var o=Array.from(n)[0],a=o[0],i=o[1],s=o[2];if(s&&"once"!==s)throw new Error("You are trying to register an event already been taken by other type: "+s);this.logger("($once)","call run for "+e),this.run(r,a,t||i),this.$off(e)},r.prototype.$only=function(e,r,t){var n=this;void 0===t&&(t=null),this.validate(e,r);var o=!1,a=this.takeFromStore(e);(this.normalStore.has(e)||(this.logger("($only)",e+" add to store"),o=this.addToNormalStore(e,"only",r,t)),!1!==a)&&(this.logger("($only)",e+" found data in lazy store to execute"),Array.from(a).forEach((function(o){var a=o[0],i=o[1],s=o[2];if(s&&"only"!==s)throw new Error("You are trying to register an event already been taken by other type: "+s);n.logger("($only)","call run for "+e),n.run(r,a,t||i)})));return o},r.prototype.$onlyOnce=function(e,r,t){void 0===t&&(t=null),this.validate(e,r);var n=!1,o=this.takeFromStore(e);if(this.normalStore.has(e)||(this.logger("($onlyOnce)",e+" add to store"),n=this.addToNormalStore(e,"onlyOnce",r,t)),!1!==o){this.logger("($onlyOnce)",o);var a=Array.from(o)[0],i=a[0],s=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.logger("($onlyOnce)","call run for "+e),this.run(r,i,t||s),this.$off(e)}return n},r.prototype.$replace=function(e,r,t,n){if(void 0===t&&(t=null),void 0===n&&(n="on"),this.validateType(n)){this.$off(e);var o=this["$"+n];return this.logger("($replace)",e,r),Reflect.apply(o,this,[e,r,t])}throw new Error(n+" is not supported!")},r.prototype.$trigger=function(e,r,t,n){void 0===r&&(r=[]),void 0===t&&(t=null),void 0===n&&(n=!1),this.validateEvt(e);var o=0,a=this.normalStore;if(this.logger("($trigger)","normalStore",a),a.has(e)){var i=this.$queue(e,r,t,n);if(this.logger("($trigger)",e,"found; add to queue: ",i),!0===i)return this.logger("($trigger)",e,"not executed. Exit now."),!1;for(var s=Array.from(a.get(e)),c=s.length,u=!1,l=0;l-1?r.indexOf("https")>-1?r.replace("https","wss"):r.replace("http","ws"):r};function createWsClient(e,r){return void 0===r&&(r=!1),!1===r?function(r){return new e(fixWss$1(r))}:function(r,t){void 0===t&&(t=!1);var n=fixWss$1(r),o=t&&"string"==typeof t?n+"?"+TOKEN_PARAM_NAME+"="+t:n;try{return new e(o)}catch(e){return console.error("WebSocket Connection Error",e),!1}}}function createNspClient(e,r){var t=r.hostname,n=r.wssPath,o=r.wsOptions;return(0,r.nspClient)(e?[t,e].join("/"):n,o)}function createNspAuthClient(e,r){var t=r.hostname,n=r.wssPath,o=r.token,a=r.wsOptions,i=r.nspAuthClient,s=e?[t,e].join("/"):n;if(o&&"string"!=typeof o)throw new Error("Expect token to be string, but got "+o);return i(s,o,a)}function triggerNamespacesOnError(e,r,t){r.forEach((function(r){e.$call(createEvt(r,ERROR_PROP_NAME),[{message:t,namespace:r}])}))}var debugFn$5=getDebug("client-event-handler"),notLoginWsHandler=function(e,r){r.$only(createEvt(e,EMIT_EVT),(function(t,n){debugFn$5("noLoginHandler hijack the ws call",e,t,n);var o={message:NOT_LOGIN_ERR_MSG};r.$call(createEvt(e,t,ERROR_PROP_NAME),[o]),r.$call(createEvt(e,t,RESULT_PROP_NAME),[{error:o}])}))};function clientEventHandler(e,r,t,n,o,a){o.forEach((function(o){if(a[o]){debugFn$5("call bindWsHandler",o);var i=[o,a[o],t];if(e.serverType===SOCKET_IO){var s=r.nspSet;i.push(s[o]),i.push(e)}Reflect.apply(n,null,i)}else notLoginWsHandler(o,t)})),t.$on(LOGOUT_EVENT_NAME,(function(){debugFn$5("LOGOUT_EVENT_NAME"),triggerNamespacesOnError(t,o,LOGOUT_EVENT_NAME),o.forEach((function(e){clearMainEmitEvt(t,e),a[e]=!1,notLoginWsHandler(e,t)}))}))}var keys$1=[WS_REPLY_TYPE,WS_EVT_NAME,WS_DATA_NAME],isWsReply=function(e){var r=e.data;return!!r&&(keys$1.filter((function(e){return isKeyInObject$1(r,e)})).length===keys$1.length&&r)},extractWsPayload=function(e){var r,t=e.data,n=isString$1(t)?JSON.parse(t):t;if(!1!==(r=isWsReply(n)))return{resolverName:r[WS_EVT_NAME],data:r[WS_DATA_NAME],type:r[WS_REPLY_TYPE]};throw new JsonqlError("payload can not be decoded",e)},debugFn$6=getDebug("ws-main-handler"),MESSAGE_PROP_NAME$1=MESSAGE_PROP_NAME,RESULT_PROP_NAME$1=RESULT_PROP_NAME,EMIT_EVT$1=EMIT_EVT,errorTypeHandler=function(e,r,t,n){var o=[r];t&&(debugFn$6("a global error on "+r),o.push(t)),o.push(ERROR_PROP_NAME);var a=Reflect.apply(createEvt,null,o),i=n.data||n;e.$trigger(a,[i])};function wsMainHandler(e,r,t){r.onopen=function(){debugFn$6("ws.onopen listened"),t.$call(READY_PROP_NAME,e),t.$only(createEvt(e,EMIT_EVT$1),(function(e,t){debugFn$6("calling server",e,t),r.send(createQueryStr(e,t))}))},r.onmessage=function(r){try{var n=extractWsPayload(r),o=n.resolverName,a=n.type;switch(debugFn$6("Hear from server",a,n),a){case EMIT_REPLY_TYPE:var i=createEvt(e,o,MESSAGE_PROP_NAME$1),s=t.$trigger(i,[n]);debugFn$6("EMIT_REPLY_TYPE",i,s);break;case ACKNOWLEDGE_REPLY_TYPE:var c=createEvt(e,o,RESULT_PROP_NAME$1);t.$trigger(c,[n]);debugFn$6("ACKNOWLEDGE_REPLY_TYPE",c,n);break;case ERROR_TYPE:debugFn$6("ERROR_TYPE"),errorTypeHandler(t,e,o,n);break;default:debugFn$6("Unhandled event!",n),errorTypeHandler(t,e,o,n)}}catch(r){debug("ws.onmessage error",r),errorTypeHandler(t,e,!1,r)}},r.onclose=function(){debugFn$6("ws.onclose callback")},t.$on(LOGOUT_EVENT_NAME,(function(){try{debugFn$6("terminate ws connection"),r.terminate()}catch(e){console.error("ws.terminate error",e)}}))}var debugFn$7=getDebug("ws-create-client"),createNsps=function(e,r,t){var n=r.nspSet,o=r.publicNamespace,a=!1,i=[],s={};if(e.enableAuth&&e.useJwt)a=!0,s=(i=getNamespaceInOrder(n,o)).map((function(r,n){var o,a,i;return 0===n?t?(e.token=t,(o={})[r]=createNspAuthClient(r,e),o):((a={})[r]=!1,a):((i={})[r]=createNspClient(r,e),i)})).reduce((function(e,r){return Object.assign(e,r)}),{});else{var c=getNameFromPayload(n);i.push(c),s[c]=createNspClient(!1,e)}return{nsps:s,namespaces:i,login:a}};function createClient(e,r,t){var n=[e,r,t,wsMainHandler],o=e.token,a=createNsps(e,r,o),i=a.nsps,s=a.namespaces,c=a.login;return Reflect.apply(clientEventHandler,null,n.concat([s,i])),c&&t.$only(LOGIN_EVENT_NAME,(function(o){clearMainEmitEvt(t,s);var a=createNsps(e,r,o);Reflect.apply(clientEventHandler,null,n.concat([a.namespaces,a.nsps]))})),{opts:e,nspMap:r,ee:t}}function createClientResolver(e){var r=createWsClient(e),t=createWsClient(e,!0);return function(e,n,o){return e.nspClient=r,e.nspAuthClient=t,createClient(e,n,o)}}var wsClientResolver=createClientResolver(WebSocket);global$1.debug=debug$3;var node=wsClient(wsClientResolver,constProps);module.exports=node; +"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var debug$2=_interopDefault(require("debug"));require("fs"),require("path");var WebSocket=_interopDefault(require("ws")),global$1="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},DATA_KEY="data",ERROR_KEY="error",JSONQL_PATH="jsonql",DEFAULT_TYPE="any",QUERY_NAME="query",MUTATION_NAME="mutation",SOCKET_NAME="socket",QUERY_ARG_NAME="args",KEY_WORD="continue",TYPE_KEY="type",OPTIONAL_KEY="optional",ENUM_KEY="enumv",ARGS_KEY="args",CHECKER_KEY="checker",ALIAS_KEY="alias",LOGIN_NAME="login",ISSUER_NAME=LOGIN_NAME,LOGOUT_NAME="logout",OR_SEPERATOR="|",STRING_TYPE="string",BOOLEAN_TYPE="boolean",ARRAY_TYPE="array",OBJECT_TYPE="object",NUMBER_TYPE="number",ARRAY_TYPE_LFT="array.<",ARRAY_TYPE_RGT=">",NO_ERROR_MSG="No message",NO_STATUS_CODE=-1,LOGIN_EVENT_NAME="__login__",LOGOUT_EVENT_NAME="__logout__",WS_REPLY_TYPE="__reply__",WS_EVT_NAME="__event__",WS_DATA_NAME="__data__",EMIT_REPLY_TYPE="emit",ACKNOWLEDGE_REPLY_TYPE="acknowledge",ERROR_TYPE="error",NSP_SET="nspSet",PUBLIC_NAMESPACE="publicNamespace",JS_WS_SOCKET_IO_NAME="socket.io",JS_WS_NAME="ws",ON_MESSAGE_PROP_NAME="onMessage",ON_RESULT_PROP_NAME="onResult",ON_ERROR_PROP_NAME="onError",ON_READY_PROP_NAME="onReady",ON_LOGIN_PROP_NAME="onLogin",SEND_MSG_PROP_NAME="send",NOT_LOGIN_ERR_MSG="NOT LOGIN",TOKEN_PARAM_NAME="token",SOCKET_IO=JS_WS_SOCKET_IO_NAME,MISSING_PROP_ERR="Missing property in contract!",EXPECT_FUNC_ERR="Expect a function!",EMIT_EVT=EMIT_REPLY_TYPE,UNKNOWN_RESULT="UKNNOWN RESULT!",MY_NAMESPACE="myNamespace";function isNull(e){return null===e}var freeGlobal="object"==typeof global$1&&global$1&&global$1.Object===Object&&global$1,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=freeGlobal||freeSelf||Function("return this")(),Symbol=root.Symbol;function arrayMap(e,r){for(var t=-1,n=null==e?0:e.length,o=Array(n);++to?0:o+r),(t=t>o?o:t)<0&&(t+=o),o=r>t?0:t-r>>>0,r>>>=0;for(var a=Array(o);++n=n?e:baseSlice(e,r,t)}function baseFindIndex(e,r,t,n){for(var o=e.length,a=t+(n?1:-1);n?a--:++a-1;);return t}function charsStartIndex(e,r){for(var t=-1,n=e.length;++t-1;);return t}function asciiToArray(e){return e.split("")}var rsAstralRange="\\ud800-\\udfff",rsComboMarksRange="\\u0300-\\u036f",reComboHalfMarksRange="\\ufe20-\\ufe2f",rsComboSymbolsRange="\\u20d0-\\u20ff",rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsVarRange="\\ufe0e\\ufe0f",rsZWJ="\\u200d",reHasUnicode=RegExp("["+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+"]");function hasUnicode(e){return reHasUnicode.test(e)}var rsAstralRange$1="\\ud800-\\udfff",rsComboMarksRange$1="\\u0300-\\u036f",reComboHalfMarksRange$1="\\ufe20-\\ufe2f",rsComboSymbolsRange$1="\\u20d0-\\u20ff",rsComboRange$1=rsComboMarksRange$1+reComboHalfMarksRange$1+rsComboSymbolsRange$1,rsVarRange$1="\\ufe0e\\ufe0f",rsAstral="["+rsAstralRange$1+"]",rsCombo="["+rsComboRange$1+"]",rsFitz="\\ud83c[\\udffb-\\udfff]",rsModifier="(?:"+rsCombo+"|"+rsFitz+")",rsNonAstral="[^"+rsAstralRange$1+"]",rsRegional="(?:\\ud83c[\\udde6-\\uddff]){2}",rsSurrPair="[\\ud800-\\udbff][\\udc00-\\udfff]",rsZWJ$1="\\u200d",reOptMod=rsModifier+"?",rsOptVar="["+rsVarRange$1+"]?",rsOptJoin="(?:"+rsZWJ$1+"(?:"+[rsNonAstral,rsRegional,rsSurrPair].join("|")+")"+rsOptVar+reOptMod+")*",rsSeq=rsOptVar+reOptMod+rsOptJoin,rsSymbol="(?:"+[rsNonAstral+rsCombo+"?",rsCombo,rsRegional,rsSurrPair,rsAstral].join("|")+")",reUnicode=RegExp(rsFitz+"(?="+rsFitz+")|"+rsSymbol+rsSeq,"g");function unicodeToArray(e){return e.match(reUnicode)||[]}function stringToArray(e){return hasUnicode(e)?unicodeToArray(e):asciiToArray(e)}function toString(e){return null==e?"":baseToString(e)}var reTrim=/^\s+|\s+$/g;function trim(e,r,t){if((e=toString(e))&&(t||void 0===r))return e.replace(reTrim,"");if(!e||!(r=baseToString(r)))return e;var n=stringToArray(e),o=stringToArray(r);return castSlice(n,charsStartIndex(n,o),charsEndIndex(n,o)+1).join("")}function isUndefined(e){return void 0===e}var boolTag="[object Boolean]";function isBoolean(e){return!0===e||!1===e||isObjectLike(e)&&baseGetTag(e)==boolTag}var numberTag="[object Number]";function isNumber(e){return"number"==typeof e||isObjectLike(e)&&baseGetTag(e)==numberTag}function isNaN(e){return isNumber(e)&&e!=+e}var stringTag="[object String]";function isString(e){return"string"==typeof e||!isArray(e)&&isObjectLike(e)&&baseGetTag(e)==stringTag}function overArg(e,r){return function(t){return e(r(t))}}var getPrototype=overArg(Object.getPrototypeOf,Object),objectTag="[object Object]",funcProto=Function.prototype,objectProto$2=Object.prototype,funcToString=funcProto.toString,hasOwnProperty$1=objectProto$2.hasOwnProperty,objectCtorString=funcToString.call(Object);function isPlainObject(e){if(!isObjectLike(e)||baseGetTag(e)!=objectTag)return!1;var r=getPrototype(e);if(null===r)return!0;var t=hasOwnProperty$1.call(r,"constructor")&&r.constructor;return"function"==typeof t&&t instanceof t&&funcToString.call(t)==objectCtorString}function arrayFilter(e,r){for(var t=-1,n=null==e?0:e.length,o=0,a=[];++t-1&&e%1==0&&e-1&&e%1==0&&e<=MAX_SAFE_INTEGER$1}var argsTag$1="[object Arguments]",arrayTag="[object Array]",boolTag$1="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag="[object Function]",mapTag="[object Map]",numberTag$1="[object Number]",objectTag$1="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag$1="[object String]",weakMapTag="[object WeakMap]",arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",typedArrayTags={};function baseIsTypedArray(e){return isObjectLike(e)&&isLength(e.length)&&!!typedArrayTags[baseGetTag(e)]}function baseUnary(e){return function(r){return e(r)}}typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag$1]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag$1]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag$1]=typedArrayTags[objectTag$1]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag$1]=typedArrayTags[weakMapTag]=!1;var freeExports$1="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule$1=freeExports$1&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports$1=freeModule$1&&freeModule$1.exports===freeExports$1,freeProcess=moduleExports$1&&freeGlobal.process,nodeUtil=function(){try{var e=freeModule$1&&freeModule$1.require&&freeModule$1.require("util").types;return e||freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch(e){}}(),nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray,isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray,objectProto$4=Object.prototype,hasOwnProperty$3=objectProto$4.hasOwnProperty;function arrayLikeKeys(e,r){var t=isArray(e),n=!t&&isArguments(e),o=!t&&!n&&isBuffer(e),a=!t&&!n&&!o&&isTypedArray(e),i=t||n||o||a,s=i?baseTimes(e.length,String):[],c=s.length;for(var u in e)!r&&!hasOwnProperty$3.call(e,u)||i&&("length"==u||o&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||isIndex(u,c))||s.push(u);return s}var objectProto$5=Object.prototype;function isPrototype(e){var r=e&&e.constructor;return e===("function"==typeof r&&r.prototype||objectProto$5)}var nativeKeys=overArg(Object.keys,Object),objectProto$6=Object.prototype,hasOwnProperty$4=objectProto$6.hasOwnProperty;function baseKeys(e){if(!isPrototype(e))return nativeKeys(e);var r=[];for(var t in Object(e))hasOwnProperty$4.call(e,t)&&"constructor"!=t&&r.push(t);return r}function isObject(e){var r=typeof e;return null!=e&&("object"==r||"function"==r)}var asyncTag="[object AsyncFunction]",funcTag$1="[object Function]",genTag="[object GeneratorFunction]",proxyTag="[object Proxy]";function isFunction(e){if(!isObject(e))return!1;var r=baseGetTag(e);return r==funcTag$1||r==genTag||r==asyncTag||r==proxyTag}function isArrayLike(e){return null!=e&&isLength(e.length)&&!isFunction(e)}function keys(e){return isArrayLike(e)?arrayLikeKeys(e):baseKeys(e)}function baseForOwn(e,r){return e&&baseFor(e,r,keys)}function listCacheClear(){this.__data__=[],this.size=0}function eq(e,r){return e===r||e!=e&&r!=r}function assocIndexOf(e,r){for(var t=e.length;t--;)if(eq(e[t][0],r))return t;return-1}var arrayProto=Array.prototype,splice=arrayProto.splice;function listCacheDelete(e){var r=this.__data__,t=assocIndexOf(r,e);return!(t<0)&&(t==r.length-1?r.pop():splice.call(r,t,1),--this.size,!0)}function listCacheGet(e){var r=this.__data__,t=assocIndexOf(r,e);return t<0?void 0:r[t][1]}function listCacheHas(e){return assocIndexOf(this.__data__,e)>-1}function listCacheSet(e,r){var t=this.__data__,n=assocIndexOf(t,e);return n<0?(++this.size,t.push([e,r])):t[n][1]=r,this}function ListCache(e){var r=-1,t=null==e?0:e.length;for(this.clear();++rs))return!1;var u=a.get(e);if(u&&a.get(r))return u==r;var l=-1,f=!0,p=t&COMPARE_UNORDERED_FLAG?new SetCache:void 0;for(a.set(e,r),a.set(r,e);++l0){if(++r>=HOT_COUNT)return arguments[0]}else r=0;return e.apply(void 0,arguments)}}var setToString=shortOut(baseSetToString);function baseRest(e,r){return setToString(overRest(e,r,identity),e+"")}function isIterateeCall(e,r,t){if(!isObject(t))return!1;var n=typeof r;return!!("number"==n?isArrayLike(t)&&isIndex(r,t.length):"string"==n&&r in t)&&eq(t[r],e)}function createAssigner(e){return baseRest((function(r,t){var n=-1,o=t.length,a=o>1?t[o-1]:void 0,i=o>2?t[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,i&&isIterateeCall(t[0],t[1],i)&&(a=o<3?void 0:a,o=1),r=Object(r);++n0))},isArrayLike$1=function(e){if(e.indexOf(ARRAY_TYPE_LFT$1)>-1&&e.indexOf(ARRAY_TYPE_RGT$1)>-1){var r=e.replace(ARRAY_TYPE_LFT$1,"").replace(ARRAY_TYPE_RGT$1,"");return r.indexOf(OR_SEPERATOR$1)?r.split(OR_SEPERATOR$1):[r]}return!1},arrayTypeHandler=function(e,r){var t=e.arg;return r.length>1?!t.filter((function(e){return!(r.length>r.filter((function(r){return!combineFn(r)(e)})).length)})).length:r.length>r.filter((function(e){return!checkIsArray(t,e)})).length},checkIsObject=function(e,r){if(void 0===r&&(r=null),isPlainObject(e)){if(!r)return!0;if(checkIsArray(r))return!r.filter((function(r){var t=e[r.name];return!(r.type.length>r.type.filter((function(e){var r;return!!isUndefined(t)||(!1!==(r=isArrayLike$1(e))?!arrayTypeHandler({arg:t},r):!combineFn(e)(t))})).length)})).length}return!1},objectTypeHandler=function(e){var r=e.arg,t=e.param,n=[r];return Array.isArray(t.keys)&&t.keys.length&&n.push(t.keys),checkIsObject.apply(null,n)},Jsonql406Error=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 406},t.name.get=function(){return"Jsonql406Error"},Object.defineProperties(r,t),r}(Error),Jsonql500Error=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 500},t.name.get=function(){return"Jsonql500Error"},Object.defineProperties(r,t),r}(Error),JsonqlAuthorisationError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 401},t.name.get=function(){return"JsonqlAuthorisationError"},Object.defineProperties(r,t),r}(Error),JsonqlContractAuthError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 401},t.name.get=function(){return"JsonqlContractAuthError"},Object.defineProperties(r,t),r}(Error),JsonqlResolverAppError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 500},t.name.get=function(){return"JsonqlResolverAppError"},Object.defineProperties(r,t),r}(Error),isBrowser=function(){try{if(window||document)return!0}catch(e){}return!1},isNode=function(){try{if(!isBrowser()&&global$1)return!0}catch(e){}return!1};function whereAmI(){return isBrowser()?"browser":isNode()?"node":"unknown"}var JsonqlBaseError=function(e){function r(){for(var r=[],t=arguments.length;t--;)r[t]=arguments[t];e.apply(this,r)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.where=function(){return whereAmI()},r}(Error),JsonqlResolverNotFoundError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,Error.captureStackTrace&&Error.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 404},t.name.get=function(){return"JsonqlResolverNotFoundError"},Object.defineProperties(r,t),r}(JsonqlBaseError),JsonqlEnumError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlEnumError"},Object.defineProperties(r,t),r}(Error),JsonqlTypeError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlTypeError"},Object.defineProperties(r,t),r}(Error),JsonqlCheckerError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlCheckerError"},Object.defineProperties(r,t),r}(Error),JsonqlValidationError$1=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,Error.captureStackTrace&&Error.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlValidationError"},Object.defineProperties(r,t),r}(JsonqlBaseError),JsonqlError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,Error.captureStackTrace&&Error.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0},statusCode:{configurable:!0}};return t.name.get=function(){return"JsonqlError"},t.statusCode.get=function(){return NO_STATUS_CODE},Object.defineProperties(r,t),r}(JsonqlBaseError),JsonqlServerError=function(e){function r(t,n){e.call(this,n),this.statusCode=t,this.className=r.name}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlServerError"},Object.defineProperties(r,t),r}(Error);function finalCatch(e){if(Array.isArray(e))throw new JsonqlValidationError$1("",e);var r=e.message||NO_ERROR_MSG,t=e.detail||e;switch(!0){case e instanceof Jsonql406Error:throw new Jsonql406Error(r,t);case e instanceof Jsonql500Error:throw new Jsonql500Error(r,t);case e instanceof JsonqlAuthorisationError:throw new JsonqlAuthorisationError(r,t);case e instanceof JsonqlContractAuthError:throw new JsonqlContractAuthError(r,t);case e instanceof JsonqlResolverAppError:throw new JsonqlResolverAppError(r,t);case e instanceof JsonqlResolverNotFoundError:throw new JsonqlResolverNotFoundError(r,t);case e instanceof JsonqlEnumError:throw new JsonqlEnumError(r,t);case e instanceof JsonqlTypeError:throw new JsonqlTypeError(r,t);case e instanceof JsonqlCheckerError:throw new JsonqlCheckerError(r,t);case e instanceof JsonqlValidationError$1:throw new JsonqlValidationError$1(r,t);case e instanceof JsonqlServerError:throw new JsonqlServerError(r,t);default:throw new JsonqlError(r,t)}}function log(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];try{window&&window.console&&Reflect.apply(console.log,console,e)}catch(e){}}var optionalHandler=function(e){var r=e.arg,t=e.param;return!!notEmpty(r)&&!(t.type.length>t.type.filter((function(r){return validateHandler(r,e)})).length)},validateHandler=function(e,r){var t;switch(!0){case e===OBJECT_TYPE$1:return!objectTypeHandler(r);case e===ARRAY_TYPE$1:return!checkIsArray(r.arg);case!1!==(t=isArrayLike$1(e)):return!arrayTypeHandler(r,t);default:return!combineFn(e)(r.arg)}},getOptionalValue=function(e,r){return isUndefined(e)?!0!==r.optional||isUndefined(r.defaultvalue)?null:r.defaultvalue:e},normalizeArgs=function(e,r){if(!checkIsArray(r))throw new JsonqlError(PARAMS_NOT_ARRAY_ERR);if(0===r.length)return[];if(!checkIsArray(e))throw new JsonqlError(ARGS_NOT_ARRAY_ERR);switch(!0){case e.length==r.length:return log(1),e.map((function(e,t){return{arg:e,index:t,param:r[t]}}));case!0===r[0].variable:log(2);var t=r[0].type;return e.map((function(e,n){return{arg:e,index:n,param:r[n]||{type:t,name:"_"}}}));case e.lengthr.length:log(4);var n=r.length,o=[DEFAULT_TYPE$1];return e.map((function(e,t){var a=t>=n||!!r[t].optional,i=r[t]||{type:o,name:"_"+t};return{arg:a?getOptionalValue(e,i):e,index:t,param:i,optional:a}}));default:throw log(5),new JsonqlError(EXCEPTION_CASE_ERR,{args:e,params:r})}},processReturn=function(e){return e.map((function(e){return e.arg}))},validateSync=function(e,r,t){var n;void 0===t&&(t=!1);var o=normalizeArgs(e,r),a=o.filter((function(e){return!0===e.optional||!0===e.param.optional?optionalHandler(e):!(e.param.type.length>e.param.type.filter((function(r){return validateHandler(r,e)})).length)}));return t?((n={})[ERROR_KEY]=a,n[DATA_KEY]=processReturn(o),n):a},validateAsync=function(e,r,t){return void 0===t&&(t=!1),new Promise((function(n,o){var a=validateSync(e,r,t);return t?a[ERROR_KEY].length?o(a[ERROR_KEY]):n(a[DATA_KEY]):a.length?o(a):n([])}))},isInArray=function(e,r){return!!e.filter((function(e){return e===r})).length},isKeyInObject=function(e,r){var t=Object.keys(e);return isInArray(t,r)},isEmpty=function(e){return!notEmpty(e)};function mapAliasConfigKeys(e,r){var t=omitBy(r,(function(e,r){return!e[ALIAS_KEY$1]}));return isEqual(t,{})?e:mapKeys(e,(function(e,r){return findKey(t,(function(e){return e.alias===r}))||r}))}function preservePristineValues(e,r){var t=mapAliasConfigKeys(e,r);return{pristineValues:mapValues(omitBy(r,(function(e,r){return isKeyInObject(t,r)})),(function(e){return e.args})),checkAgainstAppProps:omitBy(r,(function(e,r){return!isKeyInObject(t,r)})),config:t}}function processConfigAction(e,r){return mapValues(r,(function(r,t){var n,o;return isUndefined(e[t])||!0===r[OPTIONAL_KEY$1]&&isEmpty(e[t])?merge({},r,((n={})[KEY_WORD$1]=!0,n)):((o={})[ARGS_KEY$1]=e[t],o[TYPE_KEY$1]=r[TYPE_KEY$1],o[OPTIONAL_KEY$1]=r[OPTIONAL_KEY$1]||!1,o[ENUM_KEY$1]=r[ENUM_KEY$1]||!1,o[CHECKER_KEY$1]=r[CHECKER_KEY$1]||!1,o)}))}function prepareArgsForValidation(e,r){var t=preservePristineValues(e,r),n=t.config,o=t.pristineValues;return[processConfigAction(n,t.checkAgainstAppProps),o]}var toArray=function(e){return checkIsArray(e)?e:[e]},inArray=function(e,r){return!!e.filter((function(e){return e===r})).length};function validateHandler$1(e,r){var t,n=[[e[ARGS_KEY$1]],[(t={},t[TYPE_KEY$1]=toArray(e[TYPE_KEY$1]),t[OPTIONAL_KEY$1]=e[OPTIONAL_KEY$1],t)]];return Reflect.apply(r,null,n)}var enumHandler=function(e,r){return!checkIsArray(r)||inArray(r,e)},checkerHandler=function(e,r){try{return!!isFunction(r)&&r.apply(null,[e])}catch(e){return!1}};function runValidationAction(e){return function(r,t){if(r[KEY_WORD$1])return r[ARGS_KEY$1];var n=validateHandler$1(r,e);if(n.length)throw log("runValidationAction",t,r),new JsonqlTypeError(t,n);if(!1!==r[ENUM_KEY$1]&&!enumHandler(r[ARGS_KEY$1],r[ENUM_KEY$1]))throw log(ENUM_KEY$1,r[ENUM_KEY$1]),new JsonqlEnumError(t);if(!1!==r[CHECKER_KEY$1]&&!checkerHandler(r[ARGS_KEY$1],r[CHECKER_KEY$1]))throw log(CHECKER_KEY$1,r[CHECKER_KEY$1]),new JsonqlCheckerError(t);return r[ARGS_KEY$1]}}function runValidation(e,r){var t=e[0],n=e[1],o=mapValues(t,runValidationAction(r));return merge(o,n)}var configToArgs=function(e,r){return Promise.resolve(prepareArgsForValidation(e,r))};function checkOptionsAsync(e,r,t,n){return void 0===e&&(e={}),configToArgs(e,r).then((function(e){return runValidation(e,n)})).then((function(e){return merge({},e,t)}))}function constructConfigFn(e,r,t,n,o,a){void 0===t&&(t=!1),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===a&&(a=!1);var i={};return i[ARGS_KEY]=e,i[TYPE_KEY]=r,!0===t&&(i[OPTIONAL_KEY]=!0),checkIsArray(n)&&(i[ENUM_KEY]=n),isFunction(o)&&(i[CHECKER_KEY]=o),isString(a)&&(i[ALIAS_KEY]=a),i}var createConfig=function(e,r,t){void 0===t&&(t={});var n=t[OPTIONAL_KEY],o=t[ENUM_KEY],a=t[CHECKER_KEY],i=t[ALIAS_KEY];return constructConfigFn.apply(null,[e,r,n,o,a,i])},checkConfigAsync=function(e){return function(r,t,n){return void 0===n&&(n={}),checkOptionsAsync(r,t,n,e)}},isString$1=checkIsString,validateAsync$1=validateAsync,createConfig$1=createConfig,checkConfigAsync$1=checkConfigAsync(validateSync),isKeyInObject$1=isKeyInObject,inArray$1=function(e,r){return!!e.filter((function(e){return e===r})).length},toArray$1=function(e){return isArray(e)?e:[e]},isKeyInObject$2=function(e,r){var t=Object.keys(e);return inArray$1(t,r)},createEvt=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return e.join("_")},chainFns=function(e){for(var r=[],t=arguments.length-1;t-- >0;)r[t]=arguments[t+1];return function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return r.reduce((function(e,r){return Reflect.apply(r,null,toArray$1(e))}),Reflect.apply(e,null,t))}};function objDefineProps(e,r,t,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(e,r)&&Object.defineProperty(e,r,{set:t,get:null===n?function(){return null}:n}),e}function injectToFn(e,r,t,n){void 0===n&&(n=!1);var o=Object.getOwnPropertyDescriptor(e,r);return!1===n&&void 0!==o?e:(Object.defineProperty(e,r,{value:t,writable:n}),e)}function checkIsContract(e){return isPlainObject(e)&&(isKeyInObject$2(e,QUERY_NAME)||isKeyInObject$2(e,MUTATION_NAME)||isKeyInObject$2(e,SOCKET_NAME))}function extractSocketPart(e){return!!isKeyInObject$2(e,"socket")&&e.socket}function groupByNamespace(e,r){void 0===r&&(r=!1);var t=extractSocketPart(e);if(!1===t){if(r)return e;throw new JsonqlError("socket not found in contract!")}var n,o={},a=0;for(var i in t){var s=t[i],c=s.namespace;c&&(o[c]||(++a,o[c]={}),o[c][i]=s,n||s.public&&(n=c))}return{size:a,nspSet:o,publicNamespace:n}}function getNamespaceInOrder(e,r){var t=[];for(var n in e)n===r?t[1]=n:t[0]=n;return t}var formatPayload=function(e){var r;return(r={})[QUERY_ARG_NAME]=e,r};function getNameFromPayload(e){return Object.keys(e)[0]}function createQuery(e,r,t){var n;if(void 0===r&&(r=[]),void 0===t&&(t=!1),isString(e)&&isArray(r)){var o=formatPayload(r);return!0===t?o:((n={})[e]=o,n)}throw new JsonqlValidationError$1("[createQuery] expect resolverName to be string and args to be array!",{resolverName:e,args:r})}function createQueryStr(e,r,t){return void 0===r&&(r=[]),void 0===t&&(t=!1),JSON.stringify(createQuery(e,r,t))}var isContract=checkIsContract,BASE_NAME="jsonql-ws-client",getDebug=function(e){try{if(window.debug)return window.debug(BASE_NAME).extend(e)}catch(e){}try{if(global$1.debug)return global$1.debug(BASE_NAME).extend(e)}catch(e){}return function(){for(var r=[],t=arguments.length;t--;)r[t]=arguments[t];console.info.apply(null,[BASE_NAME,e].concat(r))}};try{window&&window.localStorage&&window.DEBUG&&localStorage.setItem("DEBUG",BASE_NAME+"*")}catch(e){}var NB_EVENT_SERVICE_PRIVATE_STORE=new WeakMap,NB_EVENT_SERVICE_PRIVATE_LAZY=new WeakMap;function hashCode(e){return e.split("").reduce((function(e,r){return(e=(e<<5)-e+r.charCodeAt(0))&e}),0)}var SuspendClass=function(){this.__suspend__=null,this.queueStore=new Set},prototypeAccessors={$suspend:{configurable:!0},$queues:{configurable:!0}};prototypeAccessors.$suspend.set=function(e){var r=this;if("boolean"!=typeof e)throw new Error("$suspend only accept Boolean value!");var t=this.__suspend__;this.__suspend__=e,this.logger("($suspend)","Change from "+t+" --\x3e "+e),!0===t&&!1===e&&setTimeout((function(){r.release()}),1)},SuspendClass.prototype.$queue=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return!0===this.__suspend__&&(this.logger("($queue)","added to $queue",e),this.queueStore.add(e)),this.__suspend__},prototypeAccessors.$queues.get=function(){var e=this.queueStore.size;return this.logger("($queues)","size: "+e),e>0?Array.from(this.queueStore):[]},SuspendClass.prototype.release=function(){var e=this,r=this.queueStore.size;if(this.logger("(release)","Release was called "+r),r>0){var t=Array.from(this.queueStore);this.queueStore.clear(),this.logger("queue",t),t.forEach((function(r){e.logger(r),Reflect.apply(e.$trigger,e,r)})),this.logger("Release size "+this.queueStore.size)}},Object.defineProperties(SuspendClass.prototype,prototypeAccessors);var NbEventServiceBase=function(e){function r(r){void 0===r&&(r={}),e.call(this),r.logger&&"function"==typeof r.logger&&(this.logger=r.logger),this.keep=r.keep,this.result=r.keep?[]:null,this.normalStore=new Map,this.lazyStore=new Map}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={normalStore:{configurable:!0},lazyStore:{configurable:!0}};return r.prototype.validateEvt=function(){for(var e=this,r=[],t=arguments.length;t--;)r[t]=arguments[t];return r.forEach((function(r){if("string"!=typeof r)throw e.logger("(validateEvt)",r),new Error("event name must be string type!")})),!0},r.prototype.validate=function(e,r){if(this.validateEvt(e)&&"function"==typeof r)return!0;throw new Error("callback required to be function type!")},r.prototype.validateType=function(e){return!!["on","only","once","onlyOnce"].filter((function(r){return e===r})).length},r.prototype.run=function(e,r,t){this.logger("(run)",e,r,t),this.$done=Reflect.apply(e,t,this.toArray(r))},r.prototype.takeFromStore=function(e,r){void 0===r&&(r="lazyStore");var t=this[r];if(t){if(this.logger("(takeFromStore)",r,t),t.has(e)){var n=t.get(e);return this.logger("(takeFromStore)","has "+e,n),t.delete(e),n}return!1}throw new Error(r+" is not supported!")},r.prototype.addToStore=function(e,r){for(var t,n=[],o=arguments.length-2;o-- >0;)n[o]=arguments[o+2];if(e.has(r)?(this.logger("(addToStore)",r+" existed"),t=e.get(r)):(this.logger("(addToStore)","create new Set for "+r),t=new Set),n.length>2)if(Array.isArray(n[0])){var a=n[2];this.checkTypeInLazyStore(r,a)||t.add(n)}else this.checkContentExist(n,t)||(this.logger("(addToStore)","insert new",n),t.add(n));else t.add(n);return e.set(r,t),[e,t.size]},r.prototype.checkContentExist=function(e,r){return!!Array.from(r).filter((function(r){return r[0]===e[0]})).length},r.prototype.checkTypeInStore=function(e,r){this.validateEvt(e,r);var t=this.$get(e,!0);return!1===t||!t.filter((function(e){var t=e[3];return r!==t})).length},r.prototype.checkTypeInLazyStore=function(e,r){this.validateEvt(e,r);var t=this.lazyStore.get(e);return this.logger("(checkTypeInLazyStore)",t),!!t&&!!Array.from(t).filter((function(e){return e[2]!==r})).length},r.prototype.addToNormalStore=function(e,r,t,n){if(void 0===n&&(n=null),this.logger("(addToNormalStore)",e,r,"try to add to normal store"),this.checkTypeInStore(e,r)){this.logger("(addToNormalStore)",r+" can add to "+e+" normal store");var o=this.hashFnToKey(t),a=[this.normalStore,e,o,t,n,r],i=Reflect.apply(this.addToStore,this,a),s=i[0],c=i[1];return this.normalStore=s,c}return!1},r.prototype.addToLazyStore=function(e,r,t,n){void 0===r&&(r=[]),void 0===t&&(t=null),void 0===n&&(n=!1);var o=[this.lazyStore,e,this.toArray(r),t];n&&o.push(n);var a=Reflect.apply(this.addToStore,this,o),i=a[0],s=a[1];return this.lazyStore=i,s},r.prototype.toArray=function(e){return Array.isArray(e)?e:[e]},t.normalStore.set=function(e){NB_EVENT_SERVICE_PRIVATE_STORE.set(this,e)},t.normalStore.get=function(){return NB_EVENT_SERVICE_PRIVATE_STORE.get(this)},t.lazyStore.set=function(e){NB_EVENT_SERVICE_PRIVATE_LAZY.set(this,e)},t.lazyStore.get=function(){return NB_EVENT_SERVICE_PRIVATE_LAZY.get(this)},r.prototype.hashFnToKey=function(e){return hashCode(e.toString())+""},Object.defineProperties(r.prototype,t),r}(SuspendClass),EventService=function(e){function r(r){void 0===r&&(r={}),e.call(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={$done:{configurable:!0}};return r.prototype.logger=function(){},r.prototype.$on=function(e,r,t){var n=this;void 0===t&&(t=null);this.validate(e,r);var o=this.takeFromStore(e);if(!1===o)return this.logger("($on)",e+" callback is not in lazy store"),this.addToNormalStore(e,"on",r,t);this.logger("($on)",e+" found in lazy store");var a=0;return o.forEach((function(o){var i=o[0],s=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.logger("($on)","call run on "+e),n.run(r,i,t||s),a+=n.addToNormalStore(e,"on",r,t||s)})),a},r.prototype.$once=function(e,r,t){void 0===t&&(t=null),this.validate(e,r);var n=this.takeFromStore(e);this.normalStore;if(!1===n)return this.logger("($once)",e+" not in the lazy store"),this.addToNormalStore(e,"once",r,t);this.logger("($once)",n);var o=Array.from(n)[0],a=o[0],i=o[1],s=o[2];if(s&&"once"!==s)throw new Error("You are trying to register an event already been taken by other type: "+s);this.logger("($once)","call run for "+e),this.run(r,a,t||i),this.$off(e)},r.prototype.$only=function(e,r,t){var n=this;void 0===t&&(t=null),this.validate(e,r);var o=!1,a=this.takeFromStore(e);(this.normalStore.has(e)||(this.logger("($only)",e+" add to store"),o=this.addToNormalStore(e,"only",r,t)),!1!==a)&&(this.logger("($only)",e+" found data in lazy store to execute"),Array.from(a).forEach((function(o){var a=o[0],i=o[1],s=o[2];if(s&&"only"!==s)throw new Error("You are trying to register an event already been taken by other type: "+s);n.logger("($only)","call run for "+e),n.run(r,a,t||i)})));return o},r.prototype.$onlyOnce=function(e,r,t){void 0===t&&(t=null),this.validate(e,r);var n=!1,o=this.takeFromStore(e);if(this.normalStore.has(e)||(this.logger("($onlyOnce)",e+" add to store"),n=this.addToNormalStore(e,"onlyOnce",r,t)),!1!==o){this.logger("($onlyOnce)",o);var a=Array.from(o)[0],i=a[0],s=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.logger("($onlyOnce)","call run for "+e),this.run(r,i,t||s),this.$off(e)}return n},r.prototype.$replace=function(e,r,t,n){if(void 0===t&&(t=null),void 0===n&&(n="on"),this.validateType(n)){this.$off(e);var o=this["$"+n];return this.logger("($replace)",e,r),Reflect.apply(o,this,[e,r,t])}throw new Error(n+" is not supported!")},r.prototype.$trigger=function(e,r,t,n){void 0===r&&(r=[]),void 0===t&&(t=null),void 0===n&&(n=!1),this.validateEvt(e);var o=0,a=this.normalStore;if(this.logger("($trigger)","normalStore",a),a.has(e)){var i=this.$queue(e,r,t,n);if(this.logger("($trigger)",e,"found; add to queue: ",i),!0===i)return this.logger("($trigger)",e,"not executed. Exit now."),!1;for(var s=Array.from(a.get(e)),c=s.length,u=!1,l=0;l-1?r.indexOf("https")>-1?r.replace("https","wss"):r.replace("http","ws"):r};function createWsClient(e,r){return void 0===r&&(r=!1),!1===r?function(r){return new e(fixWss$1(r))}:function(r,t){var n=fixWss$1(r),o=t&&"string"==typeof t?n+"?"+TOKEN_PARAM_NAME+"="+t:n;try{return new e(o)}catch(e){return console.error("WebSocket Connection Error",e),!1}}}function createNspClient(e,r){var t=r.hostname,n=r.wssPath,o=r.wsOptions;return(0,r.nspClient)(e?[t,e].join("/"):n,o)}function createNspAuthClient(e,r){var t=r.hostname,n=r.wssPath,o=r.token,a=r.wsOptions,i=r.nspAuthClient,s=e?[t,e].join("/"):n;if(o&&"string"!=typeof o)throw new Error("Expect token to be string, but got "+o);return i(s,o,a)}function triggerNamespacesOnError(e,r,t){r.forEach((function(r){e.$call(createEvt(r,ON_ERROR_PROP_NAME),[{message:t,namespace:r}])}))}var debugFn$5=getDebug("client-event-handler"),notLoginWsHandler=function(e,r){r.$only(createEvt(e,EMIT_EVT),(function(t,n){debugFn$5("noLoginHandler hijack the ws call",e,t,n);var o={message:NOT_LOGIN_ERR_MSG};r.$call(createEvt(e,t,ON_ERROR_PROP_NAME),[o]),r.$call(createEvt(e,t,ON_RESULT_PROP_NAME),[{error:o}])}))},getPrivateNamespace=function(e){return e.length>1&&e[0]};function clientEventHandler(e,r,t,n,o,a){var i=getPrivateNamespace(o),s=!1;o.forEach((function(o){if(s=i===o,a[o]){debugFn$5("call bindWsHandler",s,o);var c=[o,a[o],t,s];if(e.serverType===SOCKET_IO){var u=r.nspSet;c.push(u[o]),c.push(e)}Reflect.apply(n,null,c)}else notLoginWsHandler(o,t)})),t.$on(LOGOUT_EVENT_NAME,(function(){debugFn$5("LOGOUT_EVENT_NAME"),triggerNamespacesOnError(t,o,LOGOUT_EVENT_NAME),o.forEach((function(e){clearMainEmitEvt(t,e),a[e]=!1,notLoginWsHandler(e,t)}))}))}var keys$1=[WS_REPLY_TYPE,WS_EVT_NAME,WS_DATA_NAME],isWsReply=function(e){var r=e.data;return!!r&&(keys$1.filter((function(e){return isKeyInObject$1(r,e)})).length===keys$1.length&&r)},extractWsPayload=function(e){var r,t=e.data,n=isString$1(t)?JSON.parse(t):t;if(!1!==(r=isWsReply(n)))return{resolverName:r[WS_EVT_NAME],data:r[WS_DATA_NAME],type:r[WS_REPLY_TYPE]};throw new JsonqlError("payload can not be decoded",e)},debugFn$6=getDebug("ws-main-handler"),ON_MESSAGE_PROP_NAME$1=ON_MESSAGE_PROP_NAME,ON_RESULT_PROP_NAME$1=ON_RESULT_PROP_NAME,EMIT_EVT$1=EMIT_EVT,errorTypeHandler=function(e,r,t,n){var o=[r];t&&(debugFn$6("a global error on "+r),o.push(t)),o.push(ON_ERROR_PROP_NAME);var a=Reflect.apply(createEvt,null,o),i=n.data||n;e.$trigger(a,[i])};function wsMainHandler(e,r,t,n){r.onopen=function(){debugFn$6("ws.onopen listened"),t.$call(ON_READY_PROP_NAME,e),n&&(console.log("isPrivate and fire the ON_LOGIN_PROP_NAME "+ON_LOGIN_PROP_NAME),t.$call(ON_LOGIN_PROP_NAME,e)),t.$only(createEvt(e,EMIT_EVT$1),(function(e,t){debugFn$6("calling server",e,t),r.send(createQueryStr(e,t))}))},r.onmessage=function(r){try{var n=extractWsPayload(r),o=n.resolverName,a=n.type;switch(debugFn$6("Hear from server",a,n),a){case EMIT_REPLY_TYPE:var i=createEvt(e,o,ON_MESSAGE_PROP_NAME$1),s=t.$trigger(i,[n]);debugFn$6("EMIT_REPLY_TYPE",i,s);break;case ACKNOWLEDGE_REPLY_TYPE:var c=createEvt(e,o,ON_RESULT_PROP_NAME$1);t.$trigger(c,[n]);debugFn$6("ACKNOWLEDGE_REPLY_TYPE",c,n);break;case ERROR_TYPE:debugFn$6("ERROR_TYPE"),errorTypeHandler(t,e,o,n);break;default:debugFn$6("Unhandled event!",n),errorTypeHandler(t,e,o,n)}}catch(r){console.error("ws.onmessage error",r),errorTypeHandler(t,e,!1,r)}},r.onclose=function(){debugFn$6("ws.onclose callback")},t.$on(LOGOUT_EVENT_NAME,(function(){try{debugFn$6("terminate ws connection"),r.terminate()}catch(e){console.error("ws.terminate error",e)}}))}var debugFn$7=getDebug("ws-create-client"),createNsps=function(e,r,t){var n=r.nspSet,o=r.publicNamespace,a=!1,i=[],s={};if(e.enableAuth&&e.useJwt)a=!0,s=(i=getNamespaceInOrder(n,o)).map((function(r,n){var o,a,i;return 0===n?t?(e.token=t,(o={})[r]=createNspAuthClient(r,e),o):((a={})[r]=!1,a):((i={})[r]=createNspClient(r,e),i)})).reduce((function(e,r){return Object.assign(e,r)}),{});else{var c=getNameFromPayload(n);i.push(c),s[c]=createNspClient(!1,e)}return{nsps:s,namespaces:i,login:a}};function createClient(e,r,t){var n=[e,r,t,wsMainHandler],o=e.token,a=createNsps(e,r,o),i=a.nsps,s=a.namespaces,c=a.login;return Reflect.apply(clientEventHandler,null,n.concat([s,i])),c&&t.$only(LOGIN_EVENT_NAME,(function(o){clearMainEmitEvt(t,s);var a=createNsps(e,r,o);Reflect.apply(clientEventHandler,null,n.concat([a.namespaces,a.nsps]))})),{opts:e,nspMap:r,ee:t}}function createClientResolver(e){var r=createWsClient(e),t=createWsClient(e,!0);return function(e,n,o){return e.nspClient=r,e.nspAuthClient=t,createClient(e,n,o)}}var wsClientResolver=createClientResolver(WebSocket);global$1.debug=debug$2;var node=wsClient(wsClientResolver,constProps);module.exports=node; //# sourceMappingURL=jsonql-ws-client.cjs.js.map diff --git a/packages/@jsonql/ws/dist/jsonql-ws-client.umd.js b/packages/@jsonql/ws/dist/jsonql-ws-client.umd.js index 4f8378ffb24ebfc7db08644bb296c59d628d3586..6feb18cd68b19fce5f12867f98935f88eb7dad91 100644 --- a/packages/@jsonql/ws/dist/jsonql-ws-client.umd.js +++ b/packages/@jsonql/ws/dist/jsonql-ws-client.umd.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("fs"),require("path")):"function"==typeof define&&define.amd?define(["fs","path"],e):(t=t||self).jsonqlWsClient=e(t.fs,t.path)}(this,(function(t,e){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var r="data",n="error",o="jsonql",a="query",i="mutation",u="socket",c="type",s="optional",f="enumv",l="args",p="checker",h="alias",v="No message",d="__login__",g="__logout__",y="emit",b="acknowledge",_="error",m="nspSet",w="publicNamespace",j="onResult",O="onError",S="onReady",E="token",k="socket.io",$=y,T="UKNNOWN RESULT!";var A="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},P="object"==typeof A&&A&&A.Object===Object&&A,N="object"==typeof self&&self&&self.Object===Object&&self,z=P||N||Function("return this")(),x=z.Symbol;function q(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r=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);++n-1;);return r}(n,o),function(t,e){for(var r=t.length;r--&&tt(e,t[r],0)>-1;);return r}(n,o)+1).join("")}function gt(t){return void 0===t}var yt="[object Boolean]";var bt="[object Number]";function _t(t){return function(t){return"number"==typeof t||V(t)&&D(t)==bt}(t)&&t!=+t}var mt="[object String]";function wt(t){return"string"==typeof t||!C(t)&&V(t)&&D(t)==mt}function jt(t,e){return function(r){return t(e(r))}}var Ot=jt(Object.getPrototypeOf,Object),St="[object Object]",Et=Function.prototype,kt=Object.prototype,$t=Et.toString,Tt=kt.hasOwnProperty,At=$t.call(Object);function Pt(t){if(!V(t)||D(t)!=St)return!1;var e=Ot(t);if(null===e)return!0;var r=Tt.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&$t.call(r)==At}var Nt,zt=function(t,e,r){for(var n=-1,o=Object(t),a=r(t),i=a.length;i--;){var u=a[Nt?i:++n];if(!1===e(o[u],u,o))break}return t};var xt="[object Arguments]";function qt(t){return V(t)&&D(t)==xt}var Ct=Object.prototype,Rt=Ct.hasOwnProperty,Mt=Ct.propertyIsEnumerable,Ft=qt(function(){return arguments}())?qt:function(t){return V(t)&&Rt.call(t,"callee")&&!Mt.call(t,"callee")};var Wt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Lt=Wt&&"object"==typeof module&&module&&!module.nodeType&&module,Jt=Lt&&Lt.exports===Wt?z.Buffer:void 0,It=(Jt?Jt.isBuffer:void 0)||function(){return!1},Ut=9007199254740991,Dt=/^(?:0|[1-9]\d*)$/;function Vt(t,e){var r=typeof t;return!!(e=null==e?Ut:e)&&("number"==r||"symbol"!=r&&Dt.test(t))&&t>-1&&t%1==0&&t-1&&t%1==0&&t<=Bt}var Yt={};Yt["[object Float32Array]"]=Yt["[object Float64Array]"]=Yt["[object Int8Array]"]=Yt["[object Int16Array]"]=Yt["[object Int32Array]"]=Yt["[object Uint8Array]"]=Yt["[object Uint8ClampedArray]"]=Yt["[object Uint16Array]"]=Yt["[object Uint32Array]"]=!0,Yt["[object Arguments]"]=Yt["[object Array]"]=Yt["[object ArrayBuffer]"]=Yt["[object Boolean]"]=Yt["[object DataView]"]=Yt["[object Date]"]=Yt["[object Error]"]=Yt["[object Function]"]=Yt["[object Map]"]=Yt["[object Number]"]=Yt["[object Object]"]=Yt["[object RegExp]"]=Yt["[object Set]"]=Yt["[object String]"]=Yt["[object WeakMap]"]=!1;var Gt,Kt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Qt=Kt&&"object"==typeof module&&module&&!module.nodeType&&module,Xt=Qt&&Qt.exports===Kt&&P.process,Zt=function(){try{var t=Qt&&Qt.require&&Qt.require("util").types;return t||Xt&&Xt.binding&&Xt.binding("util")}catch(t){}}(),te=Zt&&Zt.isTypedArray,ee=te?(Gt=te,function(t){return Gt(t)}):function(t){return V(t)&&Ht(t.length)&&!!Yt[D(t)]},re=Object.prototype.hasOwnProperty;function ne(t,e){var r=C(t),n=!r&&Ft(t),o=!r&&!n&&It(t),a=!r&&!n&&!o&&ee(t),i=r||n||o||a,u=i?function(t,e){for(var r=-1,n=Array(t);++r-1},me.prototype.set=function(t,e){var r=this.__data__,n=be(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var we,je=z["__core-js_shared__"],Oe=(we=/[^.]+$/.exec(je&&je.keys&&je.keys.IE_PROTO||""))?"Symbol(src)_1."+we:"";var Se=Function.prototype.toString;function Ee(t){if(null!=t){try{return Se.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var ke=/^\[object .+?Constructor\]$/,$e=Function.prototype,Te=Object.prototype,Ae=$e.toString,Pe=Te.hasOwnProperty,Ne=RegExp("^"+Ae.call(Pe).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ze(t){return!(!ce(t)||function(t){return!!Oe&&Oe in t}(t))&&(he(t)?Ne:ke).test(Ee(t))}function xe(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return ze(r)?r:void 0}var qe=xe(z,"Map"),Ce=xe(Object,"create");var Re="__lodash_hash_undefined__",Me=Object.prototype.hasOwnProperty;var Fe=Object.prototype.hasOwnProperty;var We="__lodash_hash_undefined__";function Le(t){var e=-1,r=null==t?0:t.length;for(this.clear();++eu))return!1;var s=a.get(t);if(s&&a.get(e))return s==e;var f=-1,l=!0,p=r&Ge?new Be:void 0;for(a.set(t,e),a.set(e,t);++f0){if(++e>=Mn)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(Rn);function Jn(t,e){return Ln(function(t,e,r){return e=Cn(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,a=Cn(n.length-e,0),i=Array(a);++o1?e[n-1]:void 0,a=n>2?e[2]:void 0;for(o=In.length>3&&"function"==typeof o?(n--,o):void 0,a&&function(t,e,r){if(!ce(r))return!1;var n=typeof e;return!!("number"==n?ve(r)&&Vt(e,r.length):"string"==n&&e in r)&&ye(r[e],t)}(e[0],e[1],a)&&(o=n<3?void 0:o,n=1),t=Object(t);++r0))},fo=function(t){if(t.indexOf("array.<")>-1&&t.indexOf(">")>-1){var e=t.replace("array.<","").replace(">","");return e.indexOf("|")?e.split("|"):[e]}return!1},lo=function(t,e){var r=t.arg;return e.length>1?!r.filter((function(t){return!(e.length>e.filter((function(e){return!co(e)(t)})).length)})).length:e.length>e.filter((function(t){return!so(r,t)})).length},po=function(t,e){if(void 0===e&&(e=null),Pt(t)){if(!e)return!0;if(so(e))return!e.filter((function(e){var r=t[e.name];return!(e.type.length>e.type.filter((function(t){var e;return!!gt(r)||(!1!==(e=fo(t))?!lo({arg:r},e):!co(t)(r))})).length)})).length}return!1},ho=function(t){var e=t.arg,r=t.param,n=[e];return Array.isArray(r.keys)&&r.keys.length&&n.push(r.keys),po.apply(null,n)},vo=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),go=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),yo=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),bo=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),_o=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),mo=function(){try{if(window||document)return!0}catch(t){}return!1},wo=function(){try{if(!mo()&&A)return!0}catch(t){}return!1};var jo=function(t){function e(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];t.apply(this,e)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.where=function(){return mo()?"browser":wo()?"node":"unknown"},e}(Error),Oo=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,Error.captureStackTrace&&Error.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}(jo),So=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),Eo=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),ko=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),$o=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,Error.captureStackTrace&&Error.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}(jo),To=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,Error.captureStackTrace&&Error.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}(jo),Ao=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);function Po(t){if(Array.isArray(t))throw new $o("",t);var e=t.message||v,r=t.detail||t;switch(!0){case t instanceof vo:throw new vo(e,r);case t instanceof go:throw new go(e,r);case t instanceof yo:throw new yo(e,r);case t instanceof bo:throw new bo(e,r);case t instanceof _o:throw new _o(e,r);case t instanceof Oo:throw new Oo(e,r);case t instanceof So:throw new So(e,r);case t instanceof Eo:throw new Eo(e,r);case t instanceof ko:throw new ko(e,r);case t instanceof $o:throw new $o(e,r);case t instanceof Ao:throw new Ao(e,r);default:throw new To(e,r)}}function No(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];try{window&&window.console&&Reflect.apply(console.log,console,t)}catch(t){}}var zo=function(t,e){var r;switch(!0){case"object"===t:return!ho(e);case"array"===t:return!so(e.arg);case!1!==(r=fo(t)):return!lo(e,r);default:return!co(t)(e.arg)}},xo=function(t,e){return gt(t)?!0!==e.optional||gt(e.defaultvalue)?null:e.defaultvalue:t},qo=function(t,e,o){var a;void 0===o&&(o=!1);var i=function(t,e){if(!so(e))throw new To("params is not an array! Did something gone wrong when you generate the contract.json?");if(0===e.length)return[];if(!so(t))throw new To("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 No(1),t.map((function(t,r){return{arg:t,index:r,param:e[r]}}));case!0===e[0].variable:No(2);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:No(4);var n=e.length,o=["any"];return t.map((function(t,r){var a=r>=n||!!e[r].optional,i=e[r]||{type:o,name:"_"+r};return{arg:a?xo(t,i):t,index:r,param:i,optional:a}}));default:throw No(5),new To("Could not understand your arguments and parameter structure!",{args:t,params:e})}}(t,e),u=i.filter((function(t){return!0===t.optional||!0===t.param.optional?function(t){var e=t.arg,r=t.param;return!!Kn(e)&&!(r.type.length>r.type.filter((function(e){return zo(e,t)})).length)}(t):!(t.param.type.length>t.param.type.filter((function(e){return zo(e,t)})).length)}));return o?((a={})[n]=u,a[r]=i.map((function(t){return t.arg})),a):u},Co=function(t,e){var r,n=Object.keys(t);return r=e,!!n.filter((function(t){return t===r})).length},Ro=function(t){return!Kn(t)};function Mo(t,e){var r=Gn(e,(function(t,e){return!t[io]}));return Jr(r,{})?t:function(t,e){var r={};return e=vn(e),ge(t,(function(t,n,o){gn(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,vn((function(t){return t.alias===e})),ge)||e}))}function Fo(t,e){return Dn(e,(function(e,r){var n,o;return gt(t[r])||!0===e[ro]&&Ro(t[r])?Un({},e,((n={})[uo]=!0,n)):((o={})[oo]=t[r],o[eo]=e[eo],o[ro]=e[ro]||!1,o[no]=e[no]||!1,o[ao]=e[ao]||!1,o)}))}function Wo(t,e){var r=function(t,e){var r=Mo(t,e);return{pristineValues:Dn(Gn(e,(function(t,e){return Co(r,e)})),(function(t){return t.args})),checkAgainstAppProps:Gn(e,(function(t,e){return!Co(r,e)})),config:r}}(t,e),n=r.config,o=r.pristineValues;return[Fo(n,r.checkAgainstAppProps),o]}var Lo=function(t){return so(t)?t:[t]};var Jo=function(t,e){return!so(e)||function(t,e){return!!t.filter((function(t){return t===e})).length}(e,t)},Io=function(t,e){try{return!!he(e)&&e.apply(null,[t])}catch(t){return!1}};function Uo(t){return function(e,r){if(e[uo])return e[oo];var n=function(t,e){var r,n=[[t[oo]],[(r={},r[eo]=Lo(t[eo]),r[ro]=t[ro],r)]];return Reflect.apply(e,null,n)}(e,t);if(n.length)throw No("runValidationAction",r,e),new Eo(r,n);if(!1!==e[no]&&!Jo(e[oo],e[no]))throw No(no,e[no]),new So(r);if(!1!==e[ao]&&!Io(e[oo],e[ao]))throw No(ao,e[ao]),new ko(r);return e[oo]}}var Do=function(t,e){return Promise.resolve(Wo(t,e))};function Vo(t,e,r,n){return void 0===t&&(t={}),Do(t,e).then((function(t){return function(t,e){var r=t[0],n=t[1],o=Dn(r,Uo(e));return Un(o,n)}(t,n)})).then((function(t){return Un({},t,r)}))}function Bo(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[l]=t,i[c]=e,!0===r&&(i[s]=!0),so(n)&&(i[f]=n),he(o)&&(i[p]=o),wt(a)&&(i[h]=a),i}var Ho=Xn,Yo=function(t,e,o){return void 0===o&&(o=!1),new Promise((function(a,i){var u=qo(t,e,o);return o?u[n].length?i(u[n]):a(u[r]):u.length?i(u):a([])}))},Go=function(t,e,r){void 0===r&&(r={});var n=r[s],o=r[f],a=r[p],i=r[h];return Bo.apply(null,[t,e,n,o,a,i])},Ko=function(t){return function(e,r,n){return void 0===n&&(n={}),Vo(e,r,n,t)}}(qo),Qo=Co,Xo=function(t){return C(t)?t:[t]},Zo=function(t,e){var r,n=Object.keys(t);return r=e,!!n.filter((function(t){return t===r})).length},ta=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return t.join("_")},ea=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];return e.reduce((function(t,e){return Reflect.apply(e,null,Xo(t))}),Reflect.apply(t,null,r))}};function ra(t,e,r,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(t,e)&&Object.defineProperty(t,e,{set:r,get:null===n?function(){return null}:n}),t}function na(t,e,r,n){void 0===n&&(n=!1);var o=Object.getOwnPropertyDescriptor(t,e);return!1===n&&void 0!==o?t:(Object.defineProperty(t,e,{value:r,writable:n}),t)}function oa(t){return!!Zo(t,"socket")&&t.socket}var aa=function(t){var e;return(e={}).args=t,e};function ia(t,e,r){return void 0===e&&(e=[]),void 0===r&&(r=!1),JSON.stringify(function(t,e,r){var n;if(void 0===e&&(e=[]),void 0===r&&(r=!1),wt(t)&&C(e)){var o=aa(e);return!0===r?o:((n={})[t]=o,n)}throw new $o("[createQuery] expect resolverName to be string and args to be array!",{resolverName:t,args:e})}(t,e,r))}var ua=function(t){return Pt(t)&&(Zo(t,a)||Zo(t,i)||Zo(t,u))},ca="jsonql-ws-client",sa=function(t){try{if(window.debug)return window.debug(ca).extend(t)}catch(t){}try{if(A.debug)return A.debug(ca).extend(t)}catch(t){}return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];console.info.apply(null,[ca,t].concat(e))}};try{window&&window.localStorage&&window.DEBUG&&localStorage.setItem("DEBUG",ca+"*")}catch(t){}var fa=new WeakMap,la=new WeakMap;var pa=function(){this.__suspend__=null,this.queueStore=new Set},ha={$suspend:{configurable:!0},$queues:{configurable:!0}};ha.$suspend.set=function(t){var e=this;if("boolean"!=typeof t)throw new Error("$suspend only accept Boolean value!");var r=this.__suspend__;this.__suspend__=t,this.logger("($suspend)","Change from "+r+" --\x3e "+t),!0===r&&!1===t&&setTimeout((function(){e.release()}),1)},pa.prototype.$queue=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return!0===this.__suspend__&&(this.logger("($queue)","added to $queue",t),this.queueStore.add(t)),this.__suspend__},ha.$queues.get=function(){var t=this.queueStore.size;return this.logger("($queues)","size: "+t),t>0?Array.from(this.queueStore):[]},pa.prototype.release=function(){var t=this,e=this.queueStore.size;if(this.logger("(release)","Release was called "+e),e>0){var r=Array.from(this.queueStore);this.queueStore.clear(),this.logger("queue",r),r.forEach((function(e){t.logger(e),Reflect.apply(t.$trigger,t,e)})),this.logger("Release size "+this.queueStore.size)}},Object.defineProperties(pa.prototype,ha);var va=function(t){function e(){t.call(this,{logger:sa("nb-event-service")})}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"jsonql-ws-client"},Object.defineProperties(e.prototype,r),e}(function(t){function e(e){void 0===e&&(e={}),t.call(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={$done:{configurable:!0}};return e.prototype.logger=function(){},e.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.logger("($on)","call run on "+t),n.run(e,i,r||u),a+=n.addToNormalStore(t,"on",e,r||u)})),a},e.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.logger("($once)","call run for "+t),this.run(e,a,r||i),this.$off(t)},e.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(o){var a=o[0],i=o[1],u=o[2];if(u&&"only"!==u)throw new Error("You are trying to register an event already been taken by other type: "+u);n.logger("($only)","call run for "+t),n.run(e,a,r||i)})));return o},e.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.logger("($onlyOnce)","call run for "+t),this.run(e,i,r||u),this.$off(t)}return n},e.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 this.logger("($replace)",t,e),Reflect.apply(o,this,[t,e,r])}throw new Error(n+" is not supported!")},e.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)","normalStore",a),a.has(t)){var i=this.$queue(t,e,r,n);if(this.logger("($trigger)",t,"found; add to queue: ",i),!0===i)return this.logger("($trigger)",t,"not executed. Exit now."),!1;for(var u=Array.from(a.get(t)),c=u.length,s=!1,f=0;f0;)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]},e.prototype.checkContentExist=function(t,e){return!!Array.from(e).filter((function(e){return e[0]===t[0]})).length},e.prototype.checkTypeInStore=function(t,e){this.validateEvt(t,e);var r=this.$get(t,!0);return!1===r||!r.filter((function(t){var r=t[3];return e!==r})).length},e.prototype.checkTypeInLazyStore=function(t,e){this.validateEvt(t,e);var r=this.lazyStore.get(t);return this.logger("(checkTypeInLazyStore)",r),!!r&&!!Array.from(r).filter((function(t){return t[2]!==e})).length},e.prototype.addToNormalStore=function(t,e,r,n){if(void 0===n&&(n=null),this.logger("(addToNormalStore)",t,e,"try to add to normal store"),this.checkTypeInStore(t,e)){this.logger("(addToNormalStore)",e+" can add to "+t+" normal 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},e.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},e.prototype.toArray=function(t){return Array.isArray(t)?t:[t]},r.normalStore.set=function(t){fa.set(this,t)},r.normalStore.get=function(){return fa.get(this)},r.lazyStore.set=function(t){la.set(this,t)},r.lazyStore.get=function(){return la.get(this)},e.prototype.hashFnToKey=function(t){return t.toString().split("").reduce((function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t}),0)+""},Object.defineProperties(e.prototype,r),e}(pa))),da=(sa("process-contract"),function(t){var e=oa(t);if(!1!==e)return e;throw new Oo("Missing property in contract!")});function ga(t){var e,r,n=t.contract;return t.enableAuth?function(t,e){void 0===e&&(e=!1);var r=oa(t);if(!1===r){if(e)return t;throw new To("socket not found in contract!")}var n,o={},a=0;for(var i in r){var u=r[i],c=u.namespace;c&&(o[c]||(++a,o[c]={}),o[c][i]=u,n||u.public&&(n=c))}return{size:a,nspSet:o,publicNamespace:n}}(n):((r={})[m]=((e={})[o]=da(n),e),r[w]=o,r)}var ya=function(t,e){return"ws"===e?t.replace("http://","ws://"):t},ba=function(){try{return[window.location.protocol,window.location.host].join("//")}catch(t){throw new JsonqlValidationError(t)}},_a=function(t,e){Xo(e).forEach((function(e){t.$off(ta(e,y))}))},ma=function(t){if("function"==typeof t)return!0;console.error("Expect a function!")},wa=sa("respondHandler");function ja(t,e,o){Zo(t,n)?(wa("-- rejecter called --",t[n]),o(t[n])):Zo(t,r)?(wa("-- resolver called --",t[r]),e(t[r])):(wa("-- UNKNOWN_RESULT --",t),o({message:T,error:t}))}var Oa=sa("action-call");function Sa(t,e,r,n){void 0===n&&(n=[]);var o=ta(e,y);return Oa("actionCall: "+o+" --\x3e "+r,n),t.$trigger(o,[r,Xo(n)]),new Promise((function(n,o){t.$on(ta(e,r,j),(function(t){Oa("got the first result",t),ja(t,n,o)}))}))}var Ea=sa("setup-resolver"),ka=function(t,e,r,n,o){return[na(t,"myNamespace",r),e,r,n,o]},$a=function(t,e,r,n,o){return[ra(t,j,(function(t){ma(t)&&e.$on(ta(r,n,j),(function(o){ja(o,t,(function(t){e.$trigger(ta(r,n,O),t)}))}))})),e,r,n,o]},Ta=function(t,e,r,n,o){return[ra(t,"onMessage",(function(t){if(ma(t)){e.$only(ta(r,n,"onMessage"),(function(o){ja(o,t,(function(t){e.$trigger(ta(r,n,O),t)}))}))}})),e,r,n,o]},Aa=function(t,e,r,n,o){return[ra(t,O,(function(t){ma(t)&&e.$only(ta(r,n,O),t)})),e,r,n,o]},Pa=function(t,e,r,o,a){return ra(t,"send",(function(t){Ea("got payload for",t),Yo(Xo(t),a.params,!0).then((function(a){a[n]&&a[n].length?(Ea("got ERROR_KEY",a[n]),e.$call(ta(r,o,O),[JsonqlValidationError(o,a[n])])):Sa(e,r,o,t)})).catch((function(t){Ea("error after validateAsync",t),e.$call(ta(r,o,O),[JsonqlValidationError(o,t)])}))}))};function Na(t,e,r,n,o){var a=[n,o,t,e,r],i=ea(ka,$a,Ta,Aa,Pa);return Reflect.apply(i,null,a)}var za=sa("resolver-methods");function xa(t,e,r,n){return function(){for(var o=[],a=arguments.length;a--;)o[a]=arguments[a];return Yo(o,n.params,!0).then((function(n){return Sa(t,e,r,n)})).catch(Po)}}var qa;sa("generator");function Ca(t,e,r){var n=e.nspSet;return function(t,e,r){var n={},o=e.nspSet;for(var a in o){var i=o[a];for(var u in i){var c=i[u],s=xa(r,a,u,c);n[u]=Na(a,u,c,s,r)}}return n.devHelpers={getNsp:function(){return Object.keys(o)},getVer:function(){return t.version||"NOT SET"}},Promise.resolve(n)}(t,e,r).then((function(t){return function(t,e,r){return ra(t,O,(function(t){if(ma(t))for(var n in r)e.$on(ta(n,O),t)}))}(t,r,n)})).then((function(t){return function(t,e,r){return ra(t,S,(function(t){ma(t)&&e.$on(S,t)}))}(t,r)})).then((function(e){return function(t,e,r){return r.enableAuth&&(t[r.loginHandlerName]=function(t){if(za(r.loginHandlerName,t),t&&Ho(t))return e.$trigger(d,[t]);throw new $o(r.loginHandlerName)},t[r.logoutHandlerName]=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];e.$trigger(g,t)}),t}(e,r,t)}))}var Ra={loginHandlerName:Go("login",["string"]),logoutHandlerName:Go("logout",["string"]),useJwt:Go(!0,["boolean","string"]),hostname:Go(!1,["string"]),namespace:Go(o,["string"]),wsOptions:Go({},["object"]),contract:Go({},["object"],(qa={},qa[p]=ua,qa)),enableAuth:Go(!1,["boolean"]),token:Go(!1,["string"])},Ma=sa("check-options"),Fa={eventEmitter:null,nspClient:null,nspAuthClient:null,wssPath:""};var Wa={version:"version: 0.4.0 module: umd",serverType:"ws"},La=null;"undefined"!=typeof WebSocket?La=WebSocket:"undefined"!=typeof MozWebSocket?La=MozWebSocket:void 0!==A?La=A.WebSocket||A.MozWebSocket:"undefined"!=typeof window?La=window.WebSocket||window.MozWebSocket:"undefined"!=typeof self&&(La=self.WebSocket||self.MozWebSocket);var Ja=La,Ia=function(t){var e=t.toLowerCase();return e.indexOf("http")>-1?e.indexOf("https")>-1?e.replace("https","wss"):e.replace("http","ws"):e};function Ua(t,e){return void 0===e&&(e=!1),!1===e?function(e){return new t(Ia(e))}:function(e,r){void 0===r&&(r=!1);var n=Ia(e),o=r&&"string"==typeof r?n+"?"+E+"="+r:n;try{return new t(o)}catch(t){return console.error("WebSocket Connection Error",t),!1}}}function Da(t,e){var r=e.hostname,n=e.wssPath,o=e.wsOptions;return(0,e.nspClient)(t?[r,t].join("/"):n,o)}var Va=sa("client-event-handler"),Ba=function(t,e){e.$only(ta(t,$),(function(r,n){Va("noLoginHandler hijack the ws call",t,r,n);var o={message:"NOT LOGIN"};e.$call(ta(t,r,O),[o]),e.$call(ta(t,r,j),[{error:o}])}))};function Ha(t,e,r,n,o,a){o.forEach((function(o){if(a[o]){Va("call bindWsHandler",o);var i=[o,a[o],r];if(t.serverType===k){var u=e.nspSet;i.push(u[o]),i.push(t)}Reflect.apply(n,null,i)}else Ba(o,r)})),r.$on(g,(function(){Va("LOGOUT_EVENT_NAME"),function(t,e,r){e.forEach((function(e){t.$call(ta(e,O),[{message:r,namespace:e}])}))}(r,o,g),o.forEach((function(t){_a(r,t),a[t]=!1,Ba(t,r)}))}))}var Ya=["__reply__","__event__","__data__"],Ga=function(t){var e,r=t.data;if(!1!==(e=function(t){var e=t.data;return!!e&&(Ya.filter((function(t){return Qo(e,t)})).length===Ya.length&&e)}(Ho(r)?JSON.parse(r):r)))return{resolverName:e.__event__,data:e.__data__,type:e.__reply__};throw new To("payload can not be decoded",t)},Ka=sa("ws-main-handler"),Qa="onMessage",Xa=j,Za=$,ti=function(t,e,r,n){var o=[e];r&&(Ka("a global error on "+e),o.push(r)),o.push(O);var a=Reflect.apply(ta,null,o),i=n.data||n;t.$trigger(a,[i])};function ei(t,e,r){e.onopen=function(){Ka("ws.onopen listened"),r.$call(S,t),r.$only(ta(t,Za),(function(t,r){Ka("calling server",t,r),e.send(ia(t,r))}))},e.onmessage=function(e){try{var n=Ga(e),o=n.resolverName,a=n.type;switch(Ka("Hear from server",a,n),a){case y:var i=ta(t,o,Qa),u=r.$trigger(i,[n]);Ka("EMIT_REPLY_TYPE",i,u);break;case b:var c=ta(t,o,Xa);r.$trigger(c,[n]);Ka("ACKNOWLEDGE_REPLY_TYPE",c,n);break;case _:Ka("ERROR_TYPE"),ti(r,t,o,n);break;default:Ka("Unhandled event!",n),ti(r,t,o,n)}}catch(e){debug("ws.onmessage error",e),ti(r,t,!1,e)}},e.onclose=function(){Ka("ws.onclose callback")},r.$on(g,(function(){try{Ka("terminate ws connection"),e.terminate()}catch(t){console.error("ws.terminate error",t)}}))}sa("ws-create-client");var ri=function(t,e,r){var n,o=e.nspSet,a=e.publicNamespace,i=!1,u=[],c={};if(t.enableAuth&&t.useJwt)i=!0,c=(u=function(t,e){var r=[];for(var n in t)n===e?r[1]=n:r[0]=n;return r}(o,a)).map((function(e,n){var o,a,i;return 0===n?r?(t.token=r,(o={})[e]=function(t,e){var r=e.hostname,n=e.wssPath,o=e.token,a=e.wsOptions,i=e.nspAuthClient,u=t?[r,t].join("/"):n;if(o&&"string"!=typeof o)throw new Error("Expect token to be string, but got "+o);return i(u,o,a)}(e,t),o):((a={})[e]=!1,a):((i={})[e]=Da(e,t),i)})).reduce((function(t,e){return Object.assign(t,e)}),{});else{var s=(n=o,Object.keys(n)[0]);u.push(s),c[s]=Da(!1,t)}return{nsps:c,namespaces:u,login:i}};return function(t,e){return void 0===e&&(e={}),function(r){var n=r.eventEmitter;return function(t,e){return Ko(t,Ra,Object.assign(Fa,e)).then((function(t){return t.hostname||(t.hostname=ba()),t.wssPath=ya([t.hostname,t.namespace].join("/"),t.serverType),Ma("CONFIGURATION OPTIONS",t),t}))}(r,e).then((function(t){return{opts:t,nspMap:ga(t),ee:n||new va}})).then((function(e){var r=e.opts,n=e.nspMap,o=e.ee;return t(r,n,o)})).then((function(t){return Ca(t.opts,t.nspMap,t.ee)})).catch((function(t){console.error("jsonql-ws-client init error",t)}))}}(function(t){var e=Ua(t),r=Ua(t,!0);return function(t,n,o){return t.nspClient=e,t.nspAuthClient=r,function(t,e,r){var n=[t,e,r,ei],o=t.token,a=ri(t,e,o),i=a.nsps,u=a.namespaces,c=a.login;return Reflect.apply(Ha,null,n.concat([u,i])),c&&r.$only(d,(function(o){_a(r,u);var a=ri(t,e,o);Reflect.apply(Ha,null,n.concat([a.namespaces,a.nsps]))})),{opts:t,nspMap:e,ee:r}}(t,n,o)}}(Ja),Wa)})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("fs"),require("path")):"function"==typeof define&&define.amd?define(["fs","path"],e):(t=t||self).jsonqlWsClient=e(t.fs,t.path)}(this,(function(t,e){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var r="data",n="error",o="jsonql",a="query",i="mutation",u="socket",c="type",s="optional",f="enumv",l="args",p="checker",h="alias",v="No message",d="__login__",g="__logout__",y="emit",b="acknowledge",_="error",m="nspSet",w="publicNamespace",j="onResult",O="onError",S="onReady",E="onLogin",k="token",$="socket.io",T=y,A="UKNNOWN RESULT!";var P="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},N="object"==typeof P&&P&&P.Object===Object&&P,z="object"==typeof self&&self&&self.Object===Object&&self,x=N||z||Function("return this")(),q=x.Symbol;function C(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r=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);++n-1;);return r}(n,o),function(t,e){for(var r=t.length;r--&&et(e,t[r],0)>-1;);return r}(n,o)+1).join("")}function yt(t){return void 0===t}var bt="[object Boolean]";var _t="[object Number]";function mt(t){return function(t){return"number"==typeof t||B(t)&&V(t)==_t}(t)&&t!=+t}var wt="[object String]";function jt(t){return"string"==typeof t||!R(t)&&B(t)&&V(t)==wt}function Ot(t,e){return function(r){return t(e(r))}}var St=Ot(Object.getPrototypeOf,Object),Et="[object Object]",kt=Function.prototype,$t=Object.prototype,Tt=kt.toString,At=$t.hasOwnProperty,Pt=Tt.call(Object);function Nt(t){if(!B(t)||V(t)!=Et)return!1;var e=St(t);if(null===e)return!0;var r=At.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Tt.call(r)==Pt}var zt,xt=function(t,e,r){for(var n=-1,o=Object(t),a=r(t),i=a.length;i--;){var u=a[zt?i:++n];if(!1===e(o[u],u,o))break}return t};var qt="[object Arguments]";function Ct(t){return B(t)&&V(t)==qt}var Rt=Object.prototype,Mt=Rt.hasOwnProperty,Ft=Rt.propertyIsEnumerable,Lt=Ct(function(){return arguments}())?Ct:function(t){return B(t)&&Mt.call(t,"callee")&&!Ft.call(t,"callee")};var Wt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Jt=Wt&&"object"==typeof module&&module&&!module.nodeType&&module,It=Jt&&Jt.exports===Wt?x.Buffer:void 0,Ut=(It?It.isBuffer:void 0)||function(){return!1},Dt=9007199254740991,Vt=/^(?:0|[1-9]\d*)$/;function Bt(t,e){var r=typeof t;return!!(e=null==e?Dt:e)&&("number"==r||"symbol"!=r&&Vt.test(t))&&t>-1&&t%1==0&&t-1&&t%1==0&&t<=Ht}var Gt={};Gt["[object Float32Array]"]=Gt["[object Float64Array]"]=Gt["[object Int8Array]"]=Gt["[object Int16Array]"]=Gt["[object Int32Array]"]=Gt["[object Uint8Array]"]=Gt["[object Uint8ClampedArray]"]=Gt["[object Uint16Array]"]=Gt["[object Uint32Array]"]=!0,Gt["[object Arguments]"]=Gt["[object Array]"]=Gt["[object ArrayBuffer]"]=Gt["[object Boolean]"]=Gt["[object DataView]"]=Gt["[object Date]"]=Gt["[object Error]"]=Gt["[object Function]"]=Gt["[object Map]"]=Gt["[object Number]"]=Gt["[object Object]"]=Gt["[object RegExp]"]=Gt["[object Set]"]=Gt["[object String]"]=Gt["[object WeakMap]"]=!1;var Kt,Qt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Xt=Qt&&"object"==typeof module&&module&&!module.nodeType&&module,Zt=Xt&&Xt.exports===Qt&&N.process,te=function(){try{var t=Xt&&Xt.require&&Xt.require("util").types;return t||Zt&&Zt.binding&&Zt.binding("util")}catch(t){}}(),ee=te&&te.isTypedArray,re=ee?(Kt=ee,function(t){return Kt(t)}):function(t){return B(t)&&Yt(t.length)&&!!Gt[V(t)]},ne=Object.prototype.hasOwnProperty;function oe(t,e){var r=R(t),n=!r&&Lt(t),o=!r&&!n&&Ut(t),a=!r&&!n&&!o&&re(t),i=r||n||o||a,u=i?function(t,e){for(var r=-1,n=Array(t);++r-1},we.prototype.set=function(t,e){var r=this.__data__,n=_e(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var je,Oe=x["__core-js_shared__"],Se=(je=/[^.]+$/.exec(Oe&&Oe.keys&&Oe.keys.IE_PROTO||""))?"Symbol(src)_1."+je:"";var Ee=Function.prototype.toString;function ke(t){if(null!=t){try{return Ee.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var $e=/^\[object .+?Constructor\]$/,Te=Function.prototype,Ae=Object.prototype,Pe=Te.toString,Ne=Ae.hasOwnProperty,ze=RegExp("^"+Pe.call(Ne).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function xe(t){return!(!se(t)||function(t){return!!Se&&Se in t}(t))&&(ve(t)?ze:$e).test(ke(t))}function qe(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return xe(r)?r:void 0}var Ce=qe(x,"Map"),Re=qe(Object,"create");var Me="__lodash_hash_undefined__",Fe=Object.prototype.hasOwnProperty;var Le=Object.prototype.hasOwnProperty;var We="__lodash_hash_undefined__";function Je(t){var e=-1,r=null==t?0:t.length;for(this.clear();++eu))return!1;var s=a.get(t);if(s&&a.get(e))return s==e;var f=-1,l=!0,p=r&Ke?new He:void 0;for(a.set(t,e),a.set(e,t);++f0){if(++e>=Fn)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(Mn);function In(t,e){return Jn(function(t,e,r){return e=Rn(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,a=Rn(n.length-e,0),i=Array(a);++o1?e[n-1]:void 0,a=n>2?e[2]:void 0;for(o=Un.length>3&&"function"==typeof o?(n--,o):void 0,a&&function(t,e,r){if(!se(r))return!1;var n=typeof e;return!!("number"==n?de(r)&&Bt(e,r.length):"string"==n&&e in r)&&be(r[e],t)}(e[0],e[1],a)&&(o=n<3?void 0:o,n=1),t=Object(t);++r0))},lo=function(t){if(t.indexOf("array.<")>-1&&t.indexOf(">")>-1){var e=t.replace("array.<","").replace(">","");return e.indexOf("|")?e.split("|"):[e]}return!1},po=function(t,e){var r=t.arg;return e.length>1?!r.filter((function(t){return!(e.length>e.filter((function(e){return!so(e)(t)})).length)})).length:e.length>e.filter((function(t){return!fo(r,t)})).length},ho=function(t,e){if(void 0===e&&(e=null),Nt(t)){if(!e)return!0;if(fo(e))return!e.filter((function(e){var r=t[e.name];return!(e.type.length>e.type.filter((function(t){var e;return!!yt(r)||(!1!==(e=lo(t))?!po({arg:r},e):!so(t)(r))})).length)})).length}return!1},vo=function(t){var e=t.arg,r=t.param,n=[e];return Array.isArray(r.keys)&&r.keys.length&&n.push(r.keys),ho.apply(null,n)},go=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),yo=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),bo=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),_o=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),mo=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),wo=function(){try{if(window||document)return!0}catch(t){}return!1},jo=function(){try{if(!wo()&&P)return!0}catch(t){}return!1};var Oo=function(t){function e(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];t.apply(this,e)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.where=function(){return wo()?"browser":jo()?"node":"unknown"},e}(Error),So=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,Error.captureStackTrace&&Error.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}(Oo),Eo=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),ko=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),$o=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),To=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,Error.captureStackTrace&&Error.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}(Oo),Ao=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,Error.captureStackTrace&&Error.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}(Oo),Po=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);function No(t){if(Array.isArray(t))throw new To("",t);var e=t.message||v,r=t.detail||t;switch(!0){case t instanceof go:throw new go(e,r);case t instanceof yo:throw new yo(e,r);case t instanceof bo:throw new bo(e,r);case t instanceof _o:throw new _o(e,r);case t instanceof mo:throw new mo(e,r);case t instanceof So:throw new So(e,r);case t instanceof Eo:throw new Eo(e,r);case t instanceof ko:throw new ko(e,r);case t instanceof $o:throw new $o(e,r);case t instanceof To:throw new To(e,r);case t instanceof Po:throw new Po(e,r);default:throw new Ao(e,r)}}function zo(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];try{window&&window.console&&Reflect.apply(console.log,console,t)}catch(t){}}var xo=function(t,e){var r;switch(!0){case"object"===t:return!vo(e);case"array"===t:return!fo(e.arg);case!1!==(r=lo(t)):return!po(e,r);default:return!so(t)(e.arg)}},qo=function(t,e){return yt(t)?!0!==e.optional||yt(e.defaultvalue)?null:e.defaultvalue:t},Co=function(t,e,o){var a;void 0===o&&(o=!1);var i=function(t,e){if(!fo(e))throw new Ao("params is not an array! Did something gone wrong when you generate the contract.json?");if(0===e.length)return[];if(!fo(t))throw new Ao("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 zo(1),t.map((function(t,r){return{arg:t,index:r,param:e[r]}}));case!0===e[0].variable:zo(2);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:zo(4);var n=e.length,o=["any"];return t.map((function(t,r){var a=r>=n||!!e[r].optional,i=e[r]||{type:o,name:"_"+r};return{arg:a?qo(t,i):t,index:r,param:i,optional:a}}));default:throw zo(5),new Ao("Could not understand your arguments and parameter structure!",{args:t,params:e})}}(t,e),u=i.filter((function(t){return!0===t.optional||!0===t.param.optional?function(t){var e=t.arg,r=t.param;return!!Qn(e)&&!(r.type.length>r.type.filter((function(e){return xo(e,t)})).length)}(t):!(t.param.type.length>t.param.type.filter((function(e){return xo(e,t)})).length)}));return o?((a={})[n]=u,a[r]=i.map((function(t){return t.arg})),a):u},Ro=function(t,e){var r,n=Object.keys(t);return r=e,!!n.filter((function(t){return t===r})).length},Mo=function(t){return!Qn(t)};function Fo(t,e){var r=Kn(e,(function(t,e){return!t[uo]}));return Ir(r,{})?t:function(t,e){var r={};return e=dn(e),ye(t,(function(t,n,o){yn(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,dn((function(t){return t.alias===e})),ye)||e}))}function Lo(t,e){return Vn(e,(function(e,r){var n,o;return yt(t[r])||!0===e[no]&&Mo(t[r])?Dn({},e,((n={})[co]=!0,n)):((o={})[ao]=t[r],o[ro]=e[ro],o[no]=e[no]||!1,o[oo]=e[oo]||!1,o[io]=e[io]||!1,o)}))}function Wo(t,e){var r=function(t,e){var r=Fo(t,e);return{pristineValues:Vn(Kn(e,(function(t,e){return Ro(r,e)})),(function(t){return t.args})),checkAgainstAppProps:Kn(e,(function(t,e){return!Ro(r,e)})),config:r}}(t,e),n=r.config,o=r.pristineValues;return[Lo(n,r.checkAgainstAppProps),o]}var Jo=function(t){return fo(t)?t:[t]};var Io=function(t,e){return!fo(e)||function(t,e){return!!t.filter((function(t){return t===e})).length}(e,t)},Uo=function(t,e){try{return!!ve(e)&&e.apply(null,[t])}catch(t){return!1}};function Do(t){return function(e,r){if(e[co])return e[ao];var n=function(t,e){var r,n=[[t[ao]],[(r={},r[ro]=Jo(t[ro]),r[no]=t[no],r)]];return Reflect.apply(e,null,n)}(e,t);if(n.length)throw zo("runValidationAction",r,e),new ko(r,n);if(!1!==e[oo]&&!Io(e[ao],e[oo]))throw zo(oo,e[oo]),new Eo(r);if(!1!==e[io]&&!Uo(e[ao],e[io]))throw zo(io,e[io]),new $o(r);return e[ao]}}var Vo=function(t,e){return Promise.resolve(Wo(t,e))};function Bo(t,e,r,n){return void 0===t&&(t={}),Vo(t,e).then((function(t){return function(t,e){var r=t[0],n=t[1],o=Vn(r,Do(e));return Dn(o,n)}(t,n)})).then((function(t){return Dn({},t,r)}))}function Ho(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[l]=t,i[c]=e,!0===r&&(i[s]=!0),fo(n)&&(i[f]=n),ve(o)&&(i[p]=o),jt(a)&&(i[h]=a),i}var Yo=Zn,Go=function(t,e,o){return void 0===o&&(o=!1),new Promise((function(a,i){var u=Co(t,e,o);return o?u[n].length?i(u[n]):a(u[r]):u.length?i(u):a([])}))},Ko=function(t,e,r){void 0===r&&(r={});var n=r[s],o=r[f],a=r[p],i=r[h];return Ho.apply(null,[t,e,n,o,a,i])},Qo=function(t){return function(e,r,n){return void 0===n&&(n={}),Bo(e,r,n,t)}}(Co),Xo=Ro,Zo=function(t){return R(t)?t:[t]},ta=function(t,e){var r,n=Object.keys(t);return r=e,!!n.filter((function(t){return t===r})).length},ea=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return t.join("_")},ra=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];return e.reduce((function(t,e){return Reflect.apply(e,null,Zo(t))}),Reflect.apply(t,null,r))}};function na(t,e,r,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(t,e)&&Object.defineProperty(t,e,{set:r,get:null===n?function(){return null}:n}),t}function oa(t,e,r,n){void 0===n&&(n=!1);var o=Object.getOwnPropertyDescriptor(t,e);return!1===n&&void 0!==o?t:(Object.defineProperty(t,e,{value:r,writable:n}),t)}function aa(t){return!!ta(t,"socket")&&t.socket}var ia=function(t){var e;return(e={}).args=t,e};function ua(t,e,r){return void 0===e&&(e=[]),void 0===r&&(r=!1),JSON.stringify(function(t,e,r){var n;if(void 0===e&&(e=[]),void 0===r&&(r=!1),jt(t)&&R(e)){var o=ia(e);return!0===r?o:((n={})[t]=o,n)}throw new To("[createQuery] expect resolverName to be string and args to be array!",{resolverName:t,args:e})}(t,e,r))}var ca=function(t){return Nt(t)&&(ta(t,a)||ta(t,i)||ta(t,u))},sa="jsonql-ws-client",fa=function(t){try{if(window.debug)return window.debug(sa).extend(t)}catch(t){}try{if(P.debug)return P.debug(sa).extend(t)}catch(t){}return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];console.info.apply(null,[sa,t].concat(e))}};try{window&&window.localStorage&&window.DEBUG&&localStorage.setItem("DEBUG",sa+"*")}catch(t){}var la=new WeakMap,pa=new WeakMap;var ha=function(){this.__suspend__=null,this.queueStore=new Set},va={$suspend:{configurable:!0},$queues:{configurable:!0}};va.$suspend.set=function(t){var e=this;if("boolean"!=typeof t)throw new Error("$suspend only accept Boolean value!");var r=this.__suspend__;this.__suspend__=t,this.logger("($suspend)","Change from "+r+" --\x3e "+t),!0===r&&!1===t&&setTimeout((function(){e.release()}),1)},ha.prototype.$queue=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return!0===this.__suspend__&&(this.logger("($queue)","added to $queue",t),this.queueStore.add(t)),this.__suspend__},va.$queues.get=function(){var t=this.queueStore.size;return this.logger("($queues)","size: "+t),t>0?Array.from(this.queueStore):[]},ha.prototype.release=function(){var t=this,e=this.queueStore.size;if(this.logger("(release)","Release was called "+e),e>0){var r=Array.from(this.queueStore);this.queueStore.clear(),this.logger("queue",r),r.forEach((function(e){t.logger(e),Reflect.apply(t.$trigger,t,e)})),this.logger("Release size "+this.queueStore.size)}},Object.defineProperties(ha.prototype,va);var da=function(t){function e(){t.call(this,{logger:fa("nb-event-service")})}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"jsonql-ws-client"},Object.defineProperties(e.prototype,r),e}(function(t){function e(e){void 0===e&&(e={}),t.call(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={$done:{configurable:!0}};return e.prototype.logger=function(){},e.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.logger("($on)","call run on "+t),n.run(e,i,r||u),a+=n.addToNormalStore(t,"on",e,r||u)})),a},e.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.logger("($once)","call run for "+t),this.run(e,a,r||i),this.$off(t)},e.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(o){var a=o[0],i=o[1],u=o[2];if(u&&"only"!==u)throw new Error("You are trying to register an event already been taken by other type: "+u);n.logger("($only)","call run for "+t),n.run(e,a,r||i)})));return o},e.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.logger("($onlyOnce)","call run for "+t),this.run(e,i,r||u),this.$off(t)}return n},e.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 this.logger("($replace)",t,e),Reflect.apply(o,this,[t,e,r])}throw new Error(n+" is not supported!")},e.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)","normalStore",a),a.has(t)){var i=this.$queue(t,e,r,n);if(this.logger("($trigger)",t,"found; add to queue: ",i),!0===i)return this.logger("($trigger)",t,"not executed. Exit now."),!1;for(var u=Array.from(a.get(t)),c=u.length,s=!1,f=0;f0;)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]},e.prototype.checkContentExist=function(t,e){return!!Array.from(e).filter((function(e){return e[0]===t[0]})).length},e.prototype.checkTypeInStore=function(t,e){this.validateEvt(t,e);var r=this.$get(t,!0);return!1===r||!r.filter((function(t){var r=t[3];return e!==r})).length},e.prototype.checkTypeInLazyStore=function(t,e){this.validateEvt(t,e);var r=this.lazyStore.get(t);return this.logger("(checkTypeInLazyStore)",r),!!r&&!!Array.from(r).filter((function(t){return t[2]!==e})).length},e.prototype.addToNormalStore=function(t,e,r,n){if(void 0===n&&(n=null),this.logger("(addToNormalStore)",t,e,"try to add to normal store"),this.checkTypeInStore(t,e)){this.logger("(addToNormalStore)",e+" can add to "+t+" normal 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},e.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},e.prototype.toArray=function(t){return Array.isArray(t)?t:[t]},r.normalStore.set=function(t){la.set(this,t)},r.normalStore.get=function(){return la.get(this)},r.lazyStore.set=function(t){pa.set(this,t)},r.lazyStore.get=function(){return pa.get(this)},e.prototype.hashFnToKey=function(t){return t.toString().split("").reduce((function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t}),0)+""},Object.defineProperties(e.prototype,r),e}(ha))),ga=(fa("process-contract"),function(t){var e=aa(t);if(!1!==e)return e;throw new So("Missing property in contract!")});function ya(t){var e,r,n=t.contract;return t.enableAuth?function(t,e){void 0===e&&(e=!1);var r=aa(t);if(!1===r){if(e)return t;throw new Ao("socket not found in contract!")}var n,o={},a=0;for(var i in r){var u=r[i],c=u.namespace;c&&(o[c]||(++a,o[c]={}),o[c][i]=u,n||u.public&&(n=c))}return{size:a,nspSet:o,publicNamespace:n}}(n):((r={})[m]=((e={})[o]=ga(n),e),r[w]=o,r)}var ba=function(t,e){return"ws"===e?t.replace("http://","ws://"):t},_a=function(){try{return[window.location.protocol,window.location.host].join("//")}catch(t){throw new JsonqlValidationError(t)}},ma=function(t,e){Zo(e).forEach((function(e){t.$off(ea(e,y))}))},wa=function(t){if("function"==typeof t)return!0;console.error("Expect a function!")},ja=fa("respondHandler");function Oa(t,e,o){ta(t,n)?(ja("-- rejecter called --",t[n]),o(t[n])):ta(t,r)?(ja("-- resolver called --",t[r]),e(t[r])):(ja("-- UNKNOWN_RESULT --",t),o({message:A,error:t}))}var Sa=fa("action-call");function Ea(t,e,r,n){void 0===n&&(n=[]);var o=ea(e,y);return Sa("actionCall: "+o+" --\x3e "+r,n),t.$trigger(o,[r,Zo(n)]),new Promise((function(n,o){t.$on(ea(e,r,j),(function(t){Sa("got the first result",t),Oa(t,n,o)}))}))}var ka=fa("setup-resolver"),$a=function(t,e,r,n,o){return[oa(t,"myNamespace",r),e,r,n,o]},Ta=function(t,e,r,n,o){return[na(t,j,(function(t){wa(t)&&e.$on(ea(r,n,j),(function(o){Oa(o,t,(function(t){e.$trigger(ea(r,n,O),t)}))}))})),e,r,n,o]},Aa=function(t,e,r,n,o){return[na(t,"onMessage",(function(t){if(wa(t)){e.$only(ea(r,n,"onMessage"),(function(o){Oa(o,t,(function(t){e.$trigger(ea(r,n,O),t)}))}))}})),e,r,n,o]},Pa=function(t,e,r,n,o){return[na(t,O,(function(t){wa(t)&&e.$only(ea(r,n,O),t)})),e,r,n,o]},Na=function(t,e,r,o,a){return na(t,"send",(function(t){ka("got payload for",t),Go(Zo(t),a.params,!0).then((function(a){a[n]&&a[n].length?(ka("got ERROR_KEY",a[n]),e.$call(ea(r,o,O),[JsonqlValidationError(o,a[n])])):Ea(e,r,o,t)})).catch((function(t){ka("error after validateAsync",t),e.$call(ea(r,o,O),[JsonqlValidationError(o,t)])}))}))};function za(t,e,r,n,o){var a=[n,o,t,e,r],i=ra($a,Ta,Aa,Pa,Na);return Reflect.apply(i,null,a)}var xa=fa("resolver-methods");function qa(t,e,r,n){return function(){for(var o=[],a=arguments.length;a--;)o[a]=arguments[a];return Go(o,n.params,!0).then((function(n){return Ea(t,e,r,n)})).catch(No)}}var Ca;fa("generator");function Ra(t,e,r){var n=e.nspSet;return function(t,e,r){var n={},o=e.nspSet;for(var a in o){var i=o[a];for(var u in i){var c=i[u],s=qa(r,a,u,c);n[u]=za(a,u,c,s,r)}}return n.devHelpers={getNsp:function(){return Object.keys(o)},getVer:function(){return t.version||"NOT SET"}},Promise.resolve(n)}(t,e,r).then((function(t){return function(t,e,r){return na(t,O,(function(t){if(wa(t))for(var n in r)e.$on(ea(n,O),t)}))}(t,r,n)})).then((function(t){return function(t,e,r){return na(t,S,(function(t){wa(t)&&e.$on(S,t)}))}(t,r)})).then((function(e){return function(t,e,r){return r.enableAuth?na(t,E,(function(t){wa(t)&&e.$only(E,t)})):t}(e,r,t)})).then((function(e){return function(t,e,r){return r.enableAuth&&(t[r.loginHandlerName]=function(t){if(xa(r.loginHandlerName,t),t&&Yo(t))return e.$trigger(d,[t]);throw new To(r.loginHandlerName)},t[r.logoutHandlerName]=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];e.$trigger(g,t)}),t}(e,r,t)}))}var Ma={loginHandlerName:Ko("login",["string"]),logoutHandlerName:Ko("logout",["string"]),useJwt:Ko(!0,["boolean","string"]),hostname:Ko(!1,["string"]),namespace:Ko(o,["string"]),wsOptions:Ko({},["object"]),contract:Ko({},["object"],(Ca={},Ca[p]=ca,Ca)),enableAuth:Ko(!1,["boolean"]),token:Ko(!1,["string"])},Fa=fa("check-options"),La={eventEmitter:null,nspClient:null,nspAuthClient:null,wssPath:""};var Wa={version:"version: 0.5.0 module: umd",serverType:"ws"},Ja=null;"undefined"!=typeof WebSocket?Ja=WebSocket:"undefined"!=typeof MozWebSocket?Ja=MozWebSocket:void 0!==P?Ja=P.WebSocket||P.MozWebSocket:"undefined"!=typeof window?Ja=window.WebSocket||window.MozWebSocket:"undefined"!=typeof self&&(Ja=self.WebSocket||self.MozWebSocket);var Ia=Ja,Ua=function(t){var e=t.toLowerCase();return e.indexOf("http")>-1?e.indexOf("https")>-1?e.replace("https","wss"):e.replace("http","ws"):e};function Da(t,e){return void 0===e&&(e=!1),!1===e?function(e){return new t(Ua(e))}:function(e,r){var n=Ua(e),o=r&&"string"==typeof r?n+"?"+k+"="+r:n;try{return new t(o)}catch(t){return console.error("WebSocket Connection Error",t),!1}}}function Va(t,e){var r=e.hostname,n=e.wssPath,o=e.wsOptions;return(0,e.nspClient)(t?[r,t].join("/"):n,o)}var Ba=fa("client-event-handler"),Ha=function(t,e){e.$only(ea(t,T),(function(r,n){Ba("noLoginHandler hijack the ws call",t,r,n);var o={message:"NOT LOGIN"};e.$call(ea(t,r,O),[o]),e.$call(ea(t,r,j),[{error:o}])}))},Ya=function(t){return t.length>1&&t[0]};function Ga(t,e,r,n,o,a){var i=Ya(o),u=!1;o.forEach((function(o){if(u=i===o,a[o]){Ba("call bindWsHandler",u,o);var c=[o,a[o],r,u];if(t.serverType===$){var s=e.nspSet;c.push(s[o]),c.push(t)}Reflect.apply(n,null,c)}else Ha(o,r)})),r.$on(g,(function(){Ba("LOGOUT_EVENT_NAME"),function(t,e,r){e.forEach((function(e){t.$call(ea(e,O),[{message:r,namespace:e}])}))}(r,o,g),o.forEach((function(t){ma(r,t),a[t]=!1,Ha(t,r)}))}))}var Ka=["__reply__","__event__","__data__"],Qa=function(t){var e,r=t.data;if(!1!==(e=function(t){var e=t.data;return!!e&&(Ka.filter((function(t){return Xo(e,t)})).length===Ka.length&&e)}(Yo(r)?JSON.parse(r):r)))return{resolverName:e.__event__,data:e.__data__,type:e.__reply__};throw new Ao("payload can not be decoded",t)},Xa=fa("ws-main-handler"),Za="onMessage",ti=j,ei=T,ri=function(t,e,r,n){var o=[e];r&&(Xa("a global error on "+e),o.push(r)),o.push(O);var a=Reflect.apply(ea,null,o),i=n.data||n;t.$trigger(a,[i])};function ni(t,e,r,n){e.onopen=function(){Xa("ws.onopen listened"),r.$call(S,t),n&&(console.log("isPrivate and fire the ON_LOGIN_PROP_NAME "+E),r.$call(E,t)),r.$only(ea(t,ei),(function(t,r){Xa("calling server",t,r),e.send(ua(t,r))}))},e.onmessage=function(e){try{var n=Qa(e),o=n.resolverName,a=n.type;switch(Xa("Hear from server",a,n),a){case y:var i=ea(t,o,Za),u=r.$trigger(i,[n]);Xa("EMIT_REPLY_TYPE",i,u);break;case b:var c=ea(t,o,ti);r.$trigger(c,[n]);Xa("ACKNOWLEDGE_REPLY_TYPE",c,n);break;case _:Xa("ERROR_TYPE"),ri(r,t,o,n);break;default:Xa("Unhandled event!",n),ri(r,t,o,n)}}catch(e){console.error("ws.onmessage error",e),ri(r,t,!1,e)}},e.onclose=function(){Xa("ws.onclose callback")},r.$on(g,(function(){try{Xa("terminate ws connection"),e.terminate()}catch(t){console.error("ws.terminate error",t)}}))}fa("ws-create-client");var oi=function(t,e,r){var n,o=e.nspSet,a=e.publicNamespace,i=!1,u=[],c={};if(t.enableAuth&&t.useJwt)i=!0,c=(u=function(t,e){var r=[];for(var n in t)n===e?r[1]=n:r[0]=n;return r}(o,a)).map((function(e,n){var o,a,i;return 0===n?r?(t.token=r,(o={})[e]=function(t,e){var r=e.hostname,n=e.wssPath,o=e.token,a=e.wsOptions,i=e.nspAuthClient,u=t?[r,t].join("/"):n;if(o&&"string"!=typeof o)throw new Error("Expect token to be string, but got "+o);return i(u,o,a)}(e,t),o):((a={})[e]=!1,a):((i={})[e]=Va(e,t),i)})).reduce((function(t,e){return Object.assign(t,e)}),{});else{var s=(n=o,Object.keys(n)[0]);u.push(s),c[s]=Va(!1,t)}return{nsps:c,namespaces:u,login:i}};return function(t,e){return void 0===e&&(e={}),function(r){var n=r.eventEmitter;return function(t,e){return Qo(t,Ma,Object.assign(La,e)).then((function(t){return t.hostname||(t.hostname=_a()),t.wssPath=ba([t.hostname,t.namespace].join("/"),t.serverType),Fa("CONFIGURATION OPTIONS",t),t}))}(r,e).then((function(t){return{opts:t,nspMap:ya(t),ee:n||new da}})).then((function(e){var r=e.opts,n=e.nspMap,o=e.ee;return t(r,n,o)})).then((function(t){return Ra(t.opts,t.nspMap,t.ee)})).catch((function(t){console.error("jsonql-ws-client init error",t)}))}}(function(t){var e=Da(t),r=Da(t,!0);return function(t,n,o){return t.nspClient=e,t.nspAuthClient=r,function(t,e,r){var n=[t,e,r,ni],o=t.token,a=oi(t,e,o),i=a.nsps,u=a.namespaces,c=a.login;return Reflect.apply(Ga,null,n.concat([u,i])),c&&r.$only(d,(function(o){ma(r,u);var a=oi(t,e,o);Reflect.apply(Ga,null,n.concat([a.namespaces,a.nsps]))})),{opts:t,nspMap:e,ee:r}}(t,n,o)}}(Ia),Wa)})); //# sourceMappingURL=jsonql-ws-client.umd.js.map diff --git a/packages/@jsonql/ws/old/ws/ws-main-handler.js b/packages/@jsonql/ws/old/ws/ws-main-handler.js index 09109a1451d49c76e34f055dc0fe2c80e92f0ae2..2da7420520585b9528468d6fbe6cac6cf21b63bf 100644 --- a/packages/@jsonql/ws/old/ws/ws-main-handler.js +++ b/packages/@jsonql/ws/old/ws/ws-main-handler.js @@ -1,17 +1,17 @@ // the WebSocket main handler import { - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, EMIT_EVT } from '../utils/constants' import { - ERROR_PROP_NAME, + ON_ERROR_PROP_NAME, LOGIN_EVENT_NAME, LOGOUT_EVENT_NAME, ACKNOWLEDGE_REPLY_TYPE, EMIT_REPLY_TYPE, ERROR_TYPE, - READY_PROP_NAME + ON_READY_PROP_NAME } from 'jsonql-constants' import extractWsPayload from './extract-ws-payload' @@ -34,7 +34,7 @@ const errorTypeHandler = (ee, namespace, resolverName, json) => { debugFn(`a global error on ${namespace}`) evt.push(resolverName) } - evt.push(ERROR_PROP_NAME) + evt.push(ON_ERROR_PROP_NAME) let evtName = Reflect.apply(createEvt, null, evt) // test if there is a data field let payload = json.data || json; @@ -52,7 +52,7 @@ export default function wsMainHandlerAction(namespace, ws, ee) { // send ws.onopen = function() { // we just call the onReady - ee.$call(READY_PROP_NAME, namespace) + ee.$call(ON_READY_PROP_NAME, namespace) // add listener ee.$only( createEvt(namespace, EMIT_EVT), @@ -73,12 +73,12 @@ export default function wsMainHandlerAction(namespace, ws, ee) { const { resolverName, type } = json; switch (type) { case EMIT_REPLY_TYPE: - let r = ee.$trigger(createEvt(namespace, resolverName, MESSAGE_PROP_NAME), [json]) - debugFn(MESSAGE_PROP_NAME, r) + let r = ee.$trigger(createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME), [json]) + debugFn(ON_MESSAGE_PROP_NAME, r) break; case ACKNOWLEDGE_REPLY_TYPE: - debugFn(RESULT_PROP_NAME, json) - let x = ee.$trigger(createEvt(namespace, resolverName, RESULT_PROP_NAME), [json]) + debugFn(ON_RESULT_PROP_NAME, json) + let x = ee.$trigger(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [json]) debugFn('onResult add to event?', x) break; case ERROR_TYPE: @@ -92,7 +92,7 @@ export default function wsMainHandlerAction(namespace, ws, ee) { debugFn('Unhandled event!', json) errorTypeHandler(ee, namespace, resolverName, json) // let error = {error: {'message': 'Unhandled event!', type}}; - // ee.$trigger(createEvt(namespace, resolverName, RESULT_PROP_NAME), [error]) + // ee.$trigger(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [error]) } } catch(e) { errorTypeHandler(ee, namespace, false, e) diff --git a/packages/@jsonql/ws/package.json b/packages/@jsonql/ws/package.json index 06f32057eb402b0e36d07e0510927f6096379c29..aade9804381845a45da5f0ec3525cfd690e5870e 100644 --- a/packages/@jsonql/ws/package.json +++ b/packages/@jsonql/ws/package.json @@ -1,6 +1,6 @@ { "name": "@jsonql/ws", - "version": "0.4.0", + "version": "0.5.0", "description": "WS (WebSocket) jsonql client module for browser / node", "main": "dist/jsonql-ws.cjs.js", "browser": "dist/jsonql-ws.umd.js", @@ -37,12 +37,12 @@ "license": "ISC", "homepage": "jsonql.org", "dependencies": { - "jsonql-constants": "^1.8.6", + "jsonql-constants": "^1.8.7", "jsonql-errors": "^1.1.3", "jsonql-jwt": "^1.3.3", "jsonql-params-validator": "^1.4.11", "jsonql-utils": "^0.7.8", - "jsonql-ws-client": "^1.1.1", + "jsonql-ws-client": "^1.1.3", "ws": "^7.2.0" }, "devDependencies": { diff --git a/packages/@jsonql/ws/src/core/create-ws-client.js b/packages/@jsonql/ws/src/core/create-ws-client.js index a804a0f3ac023620bdb6c2ba2cebbbb0b9f28b8a..b16522bb619c06fd95f53e9b34e2f054e425874a 100644 --- a/packages/@jsonql/ws/src/core/create-ws-client.js +++ b/packages/@jsonql/ws/src/core/create-ws-client.js @@ -32,11 +32,12 @@ export function createWsClient(WebSocket, auth = false) { /** * Create a client with auth token * @param {string} url start with ws:// @TODO check this? - * @param {string} [token = false] the jwt token + * @param {string} token the jwt token * @return {object} ws instance */ - return function createWsAuthClientHandler(url, token = false) { + return function createWsAuthClientHandler(url, token) { const ws_url = fixWss(url) + // console.log('what happen here?', url, ws_url, token) const uri = token && typeof token === 'string' ? `${ws_url}?${TOKEN_PARAM_NAME}=${token}` : ws_url; try { return new WebSocket(uri) diff --git a/packages/@jsonql/ws/src/core/ws-main-handler.js b/packages/@jsonql/ws/src/core/ws-main-handler.js index 896c679edc987f8ad5439db5a679d17da9aad9b4..9c83806d1e4c78b2f6312b3fd9ebc42aa5fb32d6 100644 --- a/packages/@jsonql/ws/src/core/ws-main-handler.js +++ b/packages/@jsonql/ws/src/core/ws-main-handler.js @@ -1,13 +1,14 @@ // the WebSocket main handler import { constants, getDebug } from 'jsonql-ws-client/share' import { - ERROR_PROP_NAME, + ON_ERROR_PROP_NAME, LOGIN_EVENT_NAME, LOGOUT_EVENT_NAME, ACKNOWLEDGE_REPLY_TYPE, EMIT_REPLY_TYPE, ERROR_TYPE, - READY_PROP_NAME + ON_READY_PROP_NAME, + ON_LOGIN_PROP_NAME } from 'jsonql-constants' import { createQueryStr, createEvt } from 'jsonql-utils/module' import extractWsPayload from './extract-ws-payload' @@ -15,8 +16,8 @@ import extractWsPayload from './extract-ws-payload' const debugFn = getDebug('ws-main-handler') const { - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, EMIT_EVT } = constants @@ -34,7 +35,7 @@ const errorTypeHandler = (ee, namespace, resolverName, json) => { debugFn(`a global error on ${namespace}`) evt.push(resolverName) } - evt.push(ERROR_PROP_NAME) + evt.push(ON_ERROR_PROP_NAME) let evtName = Reflect.apply(createEvt, null, evt) // test if there is a data field let payload = json.data || json; @@ -46,14 +47,20 @@ const errorTypeHandler = (ee, namespace, resolverName, json) => { * @param {string} namespace * @param {object} ws the nsp * @param {object} ee EventEmitter + * @param {boolean} isPrivate to id if this namespace is private or not * @return {object} promise resolve after the onopen event */ -export function wsMainHandler(namespace, ws, ee) { - // send +export function wsMainHandler(namespace, ws, ee, isPrivate) { + // connection open ws.onopen = function onOpenCallback() { debugFn('ws.onopen listened') // we just call the onReady - ee.$call(READY_PROP_NAME, namespace) + ee.$call(ON_READY_PROP_NAME, namespace) + // need an extra parameter here to id the private nsp + if (isPrivate) { + console.log(`isPrivate and fire the ON_LOGIN_PROP_NAME ${ON_LOGIN_PROP_NAME}`) + ee.$call(ON_LOGIN_PROP_NAME, namespace) + } // add listener only after the open is called ee.$only( createEvt(namespace, EMIT_EVT), @@ -67,19 +74,22 @@ export function wsMainHandler(namespace, ws, ee) { } // reply + // If we change it to the event callback style + // then the payload will just be the payload and fucks up the extractWsPayload call @TODO ws.onmessage = function onMessageCallback(payload) { + // console.log(`on.message`, typeof payload, payload) try { const json = extractWsPayload(payload) const { resolverName, type } = json; debugFn('Hear from server', type, json) switch (type) { case EMIT_REPLY_TYPE: - let e1 = createEvt(namespace, resolverName, MESSAGE_PROP_NAME) + let e1 = createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME) let r = ee.$trigger(e1, [json]) debugFn(`EMIT_REPLY_TYPE`, e1, r) break; case ACKNOWLEDGE_REPLY_TYPE: - let e2 = createEvt(namespace, resolverName, RESULT_PROP_NAME) + let e2 = createEvt(namespace, resolverName, ON_RESULT_PROP_NAME) let x = ee.$trigger(e2, [json]) debugFn(`ACKNOWLEDGE_REPLY_TYPE`, e2, json) break; @@ -95,10 +105,10 @@ export function wsMainHandler(namespace, ws, ee) { debugFn('Unhandled event!', json) errorTypeHandler(ee, namespace, resolverName, json) // let error = {error: {'message': 'Unhandled event!', type}}; - // ee.$trigger(createEvt(namespace, resolverName, RESULT_PROP_NAME), [error]) + // ee.$trigger(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [error]) } } catch(e) { - debug(`ws.onmessage error`, e) + console.error(`ws.onmessage error`, e) errorTypeHandler(ee, namespace, false, e) } } diff --git a/packages/@jsonql/ws/tests/browser/files/auth-test.js b/packages/@jsonql/ws/tests/browser/files/auth-test.js index 8a0b41776f75203daeb5bb0dd4374fbc16634f7e..229ab5c6720955b7b5cf06b77c47aeb1235b2141 100644 --- a/packages/@jsonql/ws/tests/browser/files/auth-test.js +++ b/packages/@jsonql/ws/tests/browser/files/auth-test.js @@ -18,17 +18,17 @@ QUnit.test('It should able to connect to the auth enabled server', function(asse done1() } - client.onReady = function(namespace) { + client.onLogin = function(namespace) { - console.info('myNamespace', client.simple.myNamespace) - console.info('namespace', namespace) + // console.info('myNamespace', client.simple.myNamespace) + // console.info('namespace', namespace) - if (client.simple.myNamespace === namespace) { - console.info('Logged in') + // if (client.simple.myNamespace === namespace) { + // console.info('Logged in') assert.equal('jsonql/private', namespace, "Expect the private namespace") done1() - } + // } } }) .catch(function(error) { diff --git a/packages/@jsonql/ws/tests/ws-client-auth-login.test.js b/packages/@jsonql/ws/tests/ws-client-auth-login.test.js index e4435b83bccb150e684ed4054b265ca3153e1019..93eeb517c480427572dc621ce9d481ed8918f76d 100644 --- a/packages/@jsonql/ws/tests/ws-client-auth-login.test.js +++ b/packages/@jsonql/ws/tests/ws-client-auth-login.test.js @@ -80,6 +80,11 @@ test.serial.cb('It should trigger the login call here', t => { t.plan(2) let client = t.context.client; let ctn = 0; + + client.onLogin = function onLoginCallback(namespace) { + debug('onLogin -->', namespace) + } + // add onReady and wait for the login to happen client.onReady = function testTwoOnReadyCallback(namespace) { debug('onReady -->', namespace, client.simple.myNamespace) diff --git a/packages/@jsonql/ws/tests/ws-client-auth.test.js b/packages/@jsonql/ws/tests/ws-client-auth.test.js index 211af27e3656ad8e19d2e0f55ced19d56c25f7f9..5c6b806fb24efe1edb3df0253ae7c81f46de86fd 100644 --- a/packages/@jsonql/ws/tests/ws-client-auth.test.js +++ b/packages/@jsonql/ws/tests/ws-client-auth.test.js @@ -27,7 +27,6 @@ test.before(async t => { resolverDir: join(__dirname, 'fixtures', 'resolvers'), serverType: 'ws', enableAuth: true, - // useJwt: true, keysDir: join(__dirname, 'fixtures', 'keys') }) t.context.server = app.listen(port) @@ -44,6 +43,29 @@ test.after(t => { t.context.server.close() }) +test.serial.cb(`Should able to handle multiple onMessage and one onLogin callback`, t => { + t.plan(3) + + let client = t.context.client; + + client.onReady = function onReadyCallback(w) { + debug('onReady -->', w) + t.pass() + } + + client.onReady = function onReadyAgainCallback(w) { + debug('onReady again', w) + t.pass() + } + + client.onLogin = function onLoginCallback(n) { + debug(`onLogin -->`, n) + t.pass() + t.end() + } +}) + + test.serial.cb('It should able to connect to the WebSocket public namespace', t => { t.plan(2) let client = t.context.client; @@ -67,26 +89,24 @@ test.serial.cb('It should able to connect to the WebSocket public namespace', t }) test.serial.cb('It should able to connect to a WebSocket private namespace', t => { + t.plan(2) + let client = t.context.client; - client.onReady = (w) => { - debug('onReady again', w) - } client.sendExtraMsg(100) - client.sendExtraMsg.onResult = (result) => { + + + client.sendExtraMsg.onResult = function onResultCallback(result) { t.is(101, result) t.end() } - client.sendExtraMsg.onMessage = function(num) { + client.sendExtraMsg.onMessage = function onMessageCallback(num) { t.is(102, num) } - client.onReady = (w) => { - debug('onReady -->', w) - return w; - } + }) diff --git a/packages/constants/README.md b/packages/constants/README.md index 4ab31c60c5b2c606a7bc4269d527387c0b142df3..01d8ecdee14d489a3fb929b8cc05e96abbdb990e 100755 --- a/packages/constants/README.md +++ b/packages/constants/README.md @@ -103,12 +103,17 @@ non-javascript to develop your tool. You can also use the included `constants.js - JS_WS_NAME - JS_PRIMUS_NAME - GO_WS_COOLPY7_NAME +- ON_MESSAGE_PROP_NAME +- ON_RESULT_PROP_NAME +- ON_ERROR_PROP_NAME +- ON_READY_PROP_NAME +- ON_LOGIN_PROP_NAME +- SEND_MSG_PROP_NAME - MESSAGE_PROP_NAME - RESULT_PROP_NAME - ERROR_PROP_NAME - READY_PROP_NAME - LOGIN_PROP_NAME -- SEND_MSG_PROP_NAME - CLIENT_PROP_NAME - USERDATA_PROP_NAME - DEFAULT_WS_WAIT_TIME diff --git a/packages/constants/constants.json b/packages/constants/constants.json index f4cbdd9e6724124323209429bd1aca6ea2eeb194..8f4f5a1b1d9904a002393fe095e21e80bab8da72 100644 --- a/packages/constants/constants.json +++ b/packages/constants/constants.json @@ -135,12 +135,17 @@ "JS_WS_NAME": "ws", "JS_PRIMUS_NAME": "primus", "GO_WS_COOLPY7_NAME": "coolpy7", - "MESSAGE_PROP_NAME": "onMessage", - "RESULT_PROP_NAME": "onResult", - "ERROR_PROP_NAME": "onError", - "READY_PROP_NAME": "onReady", - "LOGIN_PROP_NAME": "onLogin", + "ON_MESSAGE_PROP_NAME": "onMessage", + "ON_RESULT_PROP_NAME": "onResult", + "ON_ERROR_PROP_NAME": "onError", + "ON_READY_PROP_NAME": "onReady", + "ON_LOGIN_PROP_NAME": "onLogin", "SEND_MSG_PROP_NAME": "send", + "MESSAGE_PROP_NAME": "message", + "RESULT_PROP_NAME": "result", + "ERROR_PROP_NAME": "error", + "READY_PROP_NAME": "ready", + "LOGIN_PROP_NAME": "login", "CLIENT_PROP_NAME": "client", "USERDATA_PROP_NAME": "userdata", "DEFAULT_WS_WAIT_TIME": 5000, diff --git a/packages/constants/main.js b/packages/constants/main.js index 1d7f6e9c72043adfea14c24788836f01ead6a61a..90f543f03b8797dec7135ebb714978464786b733 100644 --- a/packages/constants/main.js +++ b/packages/constants/main.js @@ -135,12 +135,17 @@ module.exports = { "JS_WS_NAME": "ws", "JS_PRIMUS_NAME": "primus", "GO_WS_COOLPY7_NAME": "coolpy7", - "MESSAGE_PROP_NAME": "onMessage", - "RESULT_PROP_NAME": "onResult", - "ERROR_PROP_NAME": "onError", - "READY_PROP_NAME": "onReady", - "LOGIN_PROP_NAME": "onLogin", + "ON_MESSAGE_PROP_NAME": "onMessage", + "ON_RESULT_PROP_NAME": "onResult", + "ON_ERROR_PROP_NAME": "onError", + "ON_READY_PROP_NAME": "onReady", + "ON_LOGIN_PROP_NAME": "onLogin", "SEND_MSG_PROP_NAME": "send", + "MESSAGE_PROP_NAME": "message", + "RESULT_PROP_NAME": "result", + "ERROR_PROP_NAME": "error", + "READY_PROP_NAME": "ready", + "LOGIN_PROP_NAME": "login", "CLIENT_PROP_NAME": "client", "USERDATA_PROP_NAME": "userdata", "DEFAULT_WS_WAIT_TIME": 5000, diff --git a/packages/constants/module.js b/packages/constants/module.js index 01c4cf3f28b6680d0d66a51a1a4f3f4941e3ce7c..7798223d6cb9daecb28310a5f5dcbbb34fecaf3d 100644 --- a/packages/constants/module.js +++ b/packages/constants/module.js @@ -140,12 +140,21 @@ export const JS_PRIMUS_NAME = 'primus' export const GO_WS_COOLPY7_NAME = 'coolpy7'; // for ws client -export const MESSAGE_PROP_NAME = 'onMessage'; -export const RESULT_PROP_NAME = 'onResult'; -export const ERROR_PROP_NAME = 'onError'; -export const READY_PROP_NAME = 'onReady'; -export const LOGIN_PROP_NAME = 'onLogin'; // new @1.8.6 +export const ON_MESSAGE_PROP_NAME = 'onMessage'; +export const ON_RESULT_PROP_NAME = 'onResult'; +export const ON_ERROR_PROP_NAME = 'onError'; +export const ON_READY_PROP_NAME = 'onReady'; +export const ON_LOGIN_PROP_NAME = 'onLogin'; // new @1.8.6 + export const SEND_MSG_PROP_NAME = 'send'; +// breaking change from 1.8.8 the above name was the name below +// the names are using in the new resolver.on getter interface +export const MESSAGE_PROP_NAME = 'message'; +export const RESULT_PROP_NAME = 'result'; +export const ERROR_PROP_NAME = 'error'; +export const READY_PROP_NAME = 'ready'; +export const LOGIN_PROP_NAME = 'login'; // new @1.8.6 + // this one is for nodeClient inject into the resolver export const CLIENT_PROP_NAME = 'client'; export const USERDATA_PROP_NAME = 'userdata'; diff --git a/packages/constants/package.json b/packages/constants/package.json index 95fadf0e3405f0aeadcf83788f6a111357c4fdca..2a63a462b3f8492209cb8a24952378bdc963907f 100755 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-constants", - "version": "1.8.7", + "version": "1.8.8", "description": "All the share constants for json:ql tools", "main": "main.js", "module": "module.js", diff --git a/packages/http-client/src/core/jsonql-static-generator.js b/packages/http-client/src/core/jsonql-static-generator.js index c56d4b80b97cd0e30db74f79d4e126c9f1c8fe71..67757fcbcf8c7a4c1940b2beb6480f484a0f0d39 100644 --- a/packages/http-client/src/core/jsonql-static-generator.js +++ b/packages/http-client/src/core/jsonql-static-generator.js @@ -1,6 +1,6 @@ // This generator will use the old style // with default methods -import { RESULT_PROP_NAME, ERROR_PROP_NAME } from 'jsonql-constants' +import { ON_RESULT_PROP_NAME, ON_ERROR_PROP_NAME } from 'jsonql-constants' import methodsGenerator from './methods-generator' import { createEvt } from '../utils' @@ -19,8 +19,8 @@ const handler = (ee, type) => { return (resolverName, ...args) => ( new Promise((resolver, rejecter) => { // this are the callbacks - ee.$only(createEvt(type, resolverName, RESULT_PROP_NAME), resolver) - ee.$only(createEvt(type, resolverName, ERROR_PROP_NAME), rejecter) + ee.$only(createEvt(type, resolverName, ON_RESULT_PROP_NAME), resolver) + ee.$only(createEvt(type, resolverName, ON_ERROR_PROP_NAME), rejecter) // this is the main call ee.$trigger(type, { resolverName, args }) }) @@ -68,10 +68,10 @@ function setupEventHandlers(jsonqlInstance, ee, config, contract) { if (methods[type][resolverName]) { Reflect.apply(methods[type][resolverName], null, args) .then(result => { - ee.$trigger(createEvt(type, resolverName, RESULT_PROP_NAME), result) + ee.$trigger(createEvt(type, resolverName, ON_RESULT_PROP_NAME), result) }) .catch(err => { - ee.$trigger(createEvt(type, resolverName, ERROR_PROP_NAME), err) + ee.$trigger(createEvt(type, resolverName, ON_ERROR_PROP_NAME), err) }) } else { console.error(`${resolverName} is not defined in the contract!`) diff --git a/packages/ws-base/src/client/client-event-handler.js b/packages/ws-base/src/client/client-event-handler.js index ef3ede423ea3db8e519f40fa338d7f2f6d2feebd..c7cf4a39899b0fe40b96fd6fbcc6bb0f70b0c1f6 100644 --- a/packages/ws-base/src/client/client-event-handler.js +++ b/packages/ws-base/src/client/client-event-handler.js @@ -2,8 +2,8 @@ // because all the client side call are via the ee // and that makes it re-usable between different client setup import { - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, EMIT_EVT, SOCKET_IO, WS @@ -12,7 +12,7 @@ import { LOGIN_EVENT_NAME, LOGOUT_EVENT_NAME, NOT_LOGIN_ERR_MSG, - ERROR_PROP_NAME + ON_ERROR_PROP_NAME } from 'jsonql-constants' import { getDebug, createEvt, clearMainEmitEvt } from './utils' @@ -35,9 +35,9 @@ const notLoginWsHandler = (namespace, ee) => { } // It should just throw error here and should not call the result // because that's channel for handling normal event not the fake one - ee.$call(createEvt(namespace, resolverName, ERROR_PROP_NAME), [error]) + ee.$call(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [error]) // also trigger the result handler, but wrap inside the error key - ee.$call(createEvt(namespace, resolverName, RESULT_PROP_NAME), [{ error }]) + ee.$call(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [{ error }]) } ) } diff --git a/packages/ws-base/src/client/generator.js b/packages/ws-base/src/client/generator.js index ef752d0496e44fe9ffdfde50adbc4dd32858c2d9..9279f19c1a21dc70dada50948440165dd5df785b 100644 --- a/packages/ws-base/src/client/generator.js +++ b/packages/ws-base/src/client/generator.js @@ -22,12 +22,12 @@ import { ERROR_TYPE, DATA_KEY, ERROR_KEY, - ERROR_PROP_NAME, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_ERROR_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, SEND_MSG_PROP_NAME, LOGIN_EVENT_NAME, - READY_PROP_NAME, + ON_READY_PROP_NAME, LOGOUT_EVENT_NAME } from 'jsonql-constants' const { injectToFn, objDefineProps } from 'jsonql-utils' @@ -135,13 +135,13 @@ const setupResolver = (namespace, resolverName, params, fn, ee) => { // also need to setup a getter to get back the namespace of this resolver let _fn = injectToFn(fn, MY_NAMESPACE, namespace) // onResult handler - _fn = objDefineProps(_fn, RESULT_PROP_NAME, function(resultCallback) { + _fn = objDefineProps(_fn, ON_RESULT_PROP_NAME, function(resultCallback) { if (typeof resultCallback === 'function') { ee.$only( - createEvt(namespace, resolverName, RESULT_PROP_NAME), + createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), function resultHandler(result) { respondHandler(result, resultCallback, (error) => { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error) + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error) }) } ) @@ -149,24 +149,24 @@ const setupResolver = (namespace, resolverName, params, fn, ee) => { }) // we do need to add the send prop back because it's the only way to deal with // bi-directional data stream - _fn = objDefineProps(_fn, MESSAGE_PROP_NAME, function(messageCallback) { + _fn = objDefineProps(_fn, ON_MESSAGE_PROP_NAME, function(messageCallback) { // we expect this to be a function if (typeof messageCallback === 'function') { // did that add to the callback let onMessageCallback = (args) => { respondHandler(args, messageCallback, (error) => { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error) + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error) }) } // register the handler for this message event - ee.$only(createEvt(namespace, resolverName, MESSAGE_PROP_NAME), onMessageCallback) + ee.$only(createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME), onMessageCallback) } }) - // add an ERROR_PROP_NAME handler - _fn = objDefineProps(_fn, ERROR_PROP_NAME, function(resolverErrorHandler) { + // add an ON_ERROR_PROP_NAME handler + _fn = objDefineProps(_fn, ON_ERROR_PROP_NAME, function(resolverErrorHandler) { if (typeof resolverErrorHandler === 'function') { - // please note ERROR_PROP_NAME can add multiple listners - ee.$only(createEvt(namespace, resolverName, ERROR_PROP_NAME), resolverErrorHandler) + // please note ON_ERROR_PROP_NAME can add multiple listners + ee.$only(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), resolverErrorHandler) } }) // pairing with the server vesrion SEND_MSG_PROP_NAME @@ -176,7 +176,7 @@ const setupResolver = (namespace, resolverName, params, fn, ee) => { // onError if (result[ERROR_KEY] && result[ERROR_KEY].length) { ee.$call( - createEvt(namespace, resolverName, ERROR_PROP_NAME), + createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [JsonqlValidationError(resolverName, result[ERROR_KEY])] ) } else { @@ -199,13 +199,13 @@ const createNamespaceErrorHandler = (obj, ee, nspSet) => { // using the onError as name // @TODO we should follow the convention earlier // make this a setter for the obj itself - objDefineProps(obj, ERROR_PROP_NAME, function(namespaceErrorHandler) { + objDefineProps(obj, ON_ERROR_PROP_NAME, function(namespaceErrorHandler) { if (typeof namespaceErrorHandler === 'function') { - // please note ERROR_PROP_NAME can add multiple listners + // please note ON_ERROR_PROP_NAME can add multiple listners for (let namespace in nspSet) { // this one is very tricky, we need to make sure the trigger is calling // with the namespace as well as the error - ee.$on(createEvt(namespace, ERROR_PROP_NAME), namespaceErrorHandler) + ee.$on(createEvt(namespace, ON_ERROR_PROP_NAME), namespaceErrorHandler) } } }) @@ -219,10 +219,10 @@ const createNamespaceErrorHandler = (obj, ee, nspSet) => { * @return {void} */ const createOnReadyhandler = (obj, ee, nspSet) => { - objDefineProps(obj, READY_PROP_NAME, function(onReadyCallback) { + objDefineProps(obj, ON_READY_PROP_NAME, function(onReadyCallback) { if (typeof onReadyCallback === 'function') { // reduce it down to just one flat level - let result = ee.$on(READY_PROP_NAME, onReadyCallback) + let result = ee.$on(ON_READY_PROP_NAME, onReadyCallback) } }) } diff --git a/packages/ws-base/src/client/node/main.cjs.js b/packages/ws-base/src/client/node/main.cjs.js index f5a8e6ae005af31223bc7d2eddcfe5aaf872fe9c..c85f14bfea205f3440de97c4ebf13d8da72b7971 100644 --- a/packages/ws-base/src/client/node/main.cjs.js +++ b/packages/ws-base/src/client/node/main.cjs.js @@ -443,10 +443,10 @@ var JS_WS_SOCKET_IO_NAME = 'socket.io'; var JS_WS_NAME = 'ws'; // for ws client -var MESSAGE_PROP_NAME = 'onMessage'; -var RESULT_PROP_NAME = 'onResult'; -var ERROR_PROP_NAME = 'onError'; -var READY_PROP_NAME = 'onReady'; +var ON_MESSAGE_PROP_NAME = 'onMessage'; +var ON_RESULT_PROP_NAME = 'onResult'; +var ON_ERROR_PROP_NAME = 'onError'; +var ON_READY_PROP_NAME = 'onReady'; var SEND_MSG_PROP_NAME = 'send'; var NOT_LOGIN_ERR_MSG = 'NOT LOGIN'; var HSA_ALGO = 'HS256'; @@ -6825,7 +6825,7 @@ var disconnect = function (nsps, type) { */ function triggerNamespacesOnError(ee, namespaces, message) { namespaces.forEach( function (namespace) { - ee.$call(createEvt(namespace, ERROR_PROP_NAME), [{ message: message, namespace: namespace }]); + ee.$call(createEvt(namespace, ON_ERROR_PROP_NAME), [{ message: message, namespace: namespace }]); }); } @@ -6848,9 +6848,9 @@ var notLoginWsHandler = function (namespace, ee) { }; // It should just throw error here and should not call the result // because that's channel for handling normal event not the fake one - ee.$call(createEvt(namespace, resolverName, ERROR_PROP_NAME), [error]); + ee.$call(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [error]); // also trigger the result handler, but wrap inside the error key - ee.$call(createEvt(namespace, resolverName, RESULT_PROP_NAME), [{ error: error }]); + ee.$call(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [{ error: error }]); } ); }; @@ -6957,7 +6957,7 @@ var errorTypeHandler = function (ee, namespace, resolverName, json) { debugFn$3(("a global error on " + namespace)); evt.push(resolverName); } - evt.push(ERROR_PROP_NAME); + evt.push(ON_ERROR_PROP_NAME); var evtName = Reflect.apply(createEvt, null, evt); // test if there is a data field var payload = json.data || json; @@ -6975,7 +6975,7 @@ function wsMainHandlerAction(namespace, ws, ee) { // send ws.onopen = function() { // we just call the onReady - ee.$call(READY_PROP_NAME, namespace); + ee.$call(ON_READY_PROP_NAME, namespace); // add listener ee.$only( createEvt(namespace, EMIT_EVT), @@ -6997,12 +6997,12 @@ function wsMainHandlerAction(namespace, ws, ee) { var type = json.type; switch (type) { case EMIT_REPLY_TYPE: - var r = ee.$trigger(createEvt(namespace, resolverName, MESSAGE_PROP_NAME), [json]); - debugFn$3(MESSAGE_PROP_NAME, r); + var r = ee.$trigger(createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME), [json]); + debugFn$3(ON_MESSAGE_PROP_NAME, r); break; case ACKNOWLEDGE_REPLY_TYPE: - debugFn$3(RESULT_PROP_NAME, json); - var x = ee.$trigger(createEvt(namespace, resolverName, RESULT_PROP_NAME), [json]); + debugFn$3(ON_RESULT_PROP_NAME, json); + var x = ee.$trigger(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [json]); debugFn$3('onResult add to event?', x); break; case ERROR_TYPE: @@ -7016,7 +7016,7 @@ function wsMainHandlerAction(namespace, ws, ee) { debugFn$3('Unhandled event!', json); errorTypeHandler(ee, namespace, resolverName, json); // let error = {error: {'message': 'Unhandled event!', type}}; - // ee.$trigger(createEvt(namespace, resolverName, RESULT_PROP_NAME), [error]) + // ee.$trigger(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [error]) } } catch(e) { errorTypeHandler(ee, namespace, false, e); @@ -7133,7 +7133,7 @@ var debugFn$5 = getDebug('io-main-handler'); * @return {function} capture the result */ var resultHandler = function (ee, namespace, resolverName, evt) { - if ( evt === void 0 ) evt = RESULT_PROP_NAME; + if ( evt === void 0 ) evt = ON_RESULT_PROP_NAME; return function (result) { ee.$trigger(createEvt(namespace, resolverName, evt), [result]); @@ -7151,7 +7151,7 @@ var createResolverListener = function (nspSet, nsp, ee, namespace) { for (var resolverName in nspSet) { nsp.on( resolverName, - resultHandler(ee, namespace, resolverName, MESSAGE_PROP_NAME) + resultHandler(ee, namespace, resolverName, ON_MESSAGE_PROP_NAME) ); } }; @@ -7210,7 +7210,7 @@ function ioMainHandler(namespace, socket, ee, nspSet, opts) { } }); // the last one to fire - ee.$trigger(READY_PROP_NAME, namespace); + ee.$trigger(ON_READY_PROP_NAME, namespace); } // this will create the socket.io client @@ -7471,15 +7471,15 @@ var setupResolver = function (namespace, resolverName, params, fn, ee) { }); } // onResult handler - if (Object.getOwnPropertyDescriptor(fn, RESULT_PROP_NAME) === undefined) { - Object.defineProperty(fn, RESULT_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(fn, ON_RESULT_PROP_NAME) === undefined) { + Object.defineProperty(fn, ON_RESULT_PROP_NAME, { set: function(resultCallback) { if (typeof resultCallback === 'function') { ee.$only( - createEvt(namespace, resolverName, RESULT_PROP_NAME), + createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), function resultHandler(result) { respondHandler(result, resultCallback, function (error) { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error); + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error); }); } ); @@ -7492,19 +7492,19 @@ var setupResolver = function (namespace, resolverName, params, fn, ee) { } // we do need to add the send prop back because it's the only way to deal with // bi-directional data stream - if (Object.getOwnPropertyDescriptor(fn, MESSAGE_PROP_NAME) === undefined) { - Object.defineProperty(fn, MESSAGE_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(fn, ON_MESSAGE_PROP_NAME) === undefined) { + Object.defineProperty(fn, ON_MESSAGE_PROP_NAME, { set: function(messageCallback) { // we expect this to be a function if (typeof messageCallback === 'function') { // did that add to the callback var onMessageCallback = function (args) { respondHandler(args, messageCallback, function (error) { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error); + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error); }); }; // register the handler for this message event - ee.$only(createEvt(namespace, resolverName, MESSAGE_PROP_NAME), onMessageCallback); + ee.$only(createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME), onMessageCallback); } }, get: function() { @@ -7512,13 +7512,13 @@ var setupResolver = function (namespace, resolverName, params, fn, ee) { } }); } - // add an ERROR_PROP_NAME handler - if (Object.getOwnPropertyDescriptor(fn, ERROR_PROP_NAME) === undefined) { - Object.defineProperty(fn, ERROR_PROP_NAME, { + // add an ON_ERROR_PROP_NAME handler + if (Object.getOwnPropertyDescriptor(fn, ON_ERROR_PROP_NAME) === undefined) { + Object.defineProperty(fn, ON_ERROR_PROP_NAME, { set: function(resolverErrorHandler) { if (typeof resolverErrorHandler === 'function') { - // please note ERROR_PROP_NAME can add multiple listners - ee.$only(createEvt(namespace, resolverName, ERROR_PROP_NAME), resolverErrorHandler); + // please note ON_ERROR_PROP_NAME can add multiple listners + ee.$only(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), resolverErrorHandler); } }, get: function() { @@ -7535,7 +7535,7 @@ var setupResolver = function (namespace, resolverName, params, fn, ee) { // onError if (result[ERROR_KEY] && result[ERROR_KEY].length) { ee.$call( - createEvt(namespace, resolverName, ERROR_PROP_NAME), + createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [JsonqlValidationError(resolverName, result[ERROR_KEY])] ); } else { @@ -7563,15 +7563,15 @@ var createNamespaceErrorHandler = function (obj, ee, nspSet) { // using the onError as name // @TODO we should follow the convention earlier // make this a setter for the obj itself - if (Object.getOwnPropertyDescriptor(obj, ERROR_PROP_NAME) === undefined) { - Object.defineProperty(obj, ERROR_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(obj, ON_ERROR_PROP_NAME) === undefined) { + Object.defineProperty(obj, ON_ERROR_PROP_NAME, { set: function(namespaceErrorHandler) { if (typeof namespaceErrorHandler === 'function') { - // please note ERROR_PROP_NAME can add multiple listners + // please note ON_ERROR_PROP_NAME can add multiple listners for (var namespace in nspSet) { // this one is very tricky, we need to make sure the trigger is calling // with the namespace as well as the error - ee.$on(createEvt(namespace, ERROR_PROP_NAME), namespaceErrorHandler); + ee.$on(createEvt(namespace, ON_ERROR_PROP_NAME), namespaceErrorHandler); } } }, @@ -7590,12 +7590,12 @@ var createNamespaceErrorHandler = function (obj, ee, nspSet) { * @return {void} */ var createOnReadyhandler = function (obj, ee, nspSet) { - if (Object.getOwnPropertyDescriptor(obj, READY_PROP_NAME) === undefined) { - Object.defineProperty(obj, READY_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(obj, ON_READY_PROP_NAME) === undefined) { + Object.defineProperty(obj, ON_READY_PROP_NAME, { set: function(onReadyCallback) { if (typeof onReadyCallback === 'function') { // reduce it down to just one flat level - var result = ee.$on(READY_PROP_NAME, onReadyCallback); + var result = ee.$on(ON_READY_PROP_NAME, onReadyCallback); } }, get: function() { diff --git a/packages/ws-base/src/client/utils/constants.js b/packages/ws-base/src/client/utils/constants.js index 928a430444d7902b9b759bc525a3cf2ed6bac2c7..6680c0fe3ff9bbca37a256ed624cb1477391606b 100644 --- a/packages/ws-base/src/client/utils/constants.js +++ b/packages/ws-base/src/client/utils/constants.js @@ -4,8 +4,8 @@ import { EMIT_REPLY_TYPE, JS_WS_SOCKET_IO_NAME, JS_WS_NAME, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME } from 'jsonql-constants' const SOCKET_IO = JS_WS_SOCKET_IO_NAME; @@ -40,8 +40,8 @@ export { MISSING_PROP_ERR, UNKNOWN_CLIENT_ERR, EMIT_EVT, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, NAMESPACE_KEY, UNKNOWN_RESULT, NOT_ALLOW_OP, diff --git a/packages/ws-base/src/client/utils/trigger-namespaces-on-error.js b/packages/ws-base/src/client/utils/trigger-namespaces-on-error.js index 59409c8162602f2f507413873e96707f65512cea..553a67f44986284aba686b2c7f0e4e1f2902bfe2 100644 --- a/packages/ws-base/src/client/utils/trigger-namespaces-on-error.js +++ b/packages/ws-base/src/client/utils/trigger-namespaces-on-error.js @@ -1,5 +1,5 @@ -import { ERROR_PROP_NAME } from 'jsonql-constants' +import { ON_ERROR_PROP_NAME } from 'jsonql-constants' import { createEvt } from './index' /** * trigger errors on all the namespace onError handler @@ -10,6 +10,6 @@ import { createEvt } from './index' */ export default function triggerNamespacesOnError(ee, namespaces, message) { namespaces.forEach( namespace => { - ee.$call(createEvt(namespace, ERROR_PROP_NAME), [{ message, namespace }]) + ee.$call(createEvt(namespace, ON_ERROR_PROP_NAME), [{ message, namespace }]) }) } diff --git a/packages/ws-base/src/server/ws/add-property.js b/packages/ws-base/src/server/ws/add-property.js index 99b39b3ba03d2b2227ce91161f3326c3aa9e7bbd..e05e8cea633f4eef3b1c7e8b0b684c2da6f00670 100644 --- a/packages/ws-base/src/server/ws/add-property.js +++ b/packages/ws-base/src/server/ws/add-property.js @@ -1,7 +1,7 @@ // const debug = require('debug')('jsonql-ws-server:ws-add-property'); const createWsReply = require('./create-ws-reply') -const { EMIT_REPLY_TYPE, SEND_MSG_PROP_NAME, MESSAGE_PROP_NAME } = require('jsonql-constants') +const { EMIT_REPLY_TYPE, SEND_MSG_PROP_NAME, ON_MESSAGE_PROP_NAME } = require('jsonql-constants') // const { JsonqlError } = require('jsonql-errors') const addHandlerProperty = require('../share/add-handler-property') const { nil } = require('../share/helpers') @@ -19,11 +19,11 @@ const addProperty = (fn, resolverName, ws) => { }, nil) /* @TODO is this necessary? - resolver = addHandlerProperty(resolver, MESSAGE_PROP_NAME, function(handler) { + resolver = addHandlerProperty(resolver, ON_MESSAGE_PROP_NAME, function(handler) { if (handler && typeof handler === 'function') { } - throw new JsonqlError(resolverName, {message: `Require ${MESSAGE_PROP_NAME} to be a function!`}) + throw new JsonqlError(resolverName, {message: `Require ${ON_MESSAGE_PROP_NAME} to be a function!`}) }, nil) */ return resolver; diff --git a/packages/ws-client/package.json b/packages/ws-client/package.json index 73b4928707da6d55a2fbe26ff97341b10a8faa46..59c67b94ccc153ce0c454c510b42fd0ef62a2010 100755 --- a/packages/ws-client/package.json +++ b/packages/ws-client/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-ws-client", - "version": "1.1.1", + "version": "1.1.3", "description": "This is the Web Socket client base library for Node and Browser. Not for direct use.", "main": "main.js", "module": "index.js", @@ -13,6 +13,7 @@ "scripts": { "test": "ava --verbose", "prepare": "npm run test", + "test:evt": "DEBUG=jsonql-ws-* ava --verbose ./tests/event.test.js", "test:node": "DEBUG=jsonql-ws-* ava --verbose ./tests/test-node.test.js", "test:opt": "DEBUG=jsonql-ws-* ava --verbose ./tests/options.test.js", "contract": "node ./node_modules/jsonql-contract/cmd.js configFile ./tests/fixtures/contract-config.js", @@ -49,7 +50,7 @@ "node": ">=8" }, "dependencies": { - "jsonql-constants": "^1.8.6", + "jsonql-constants": "^1.8.7", "jsonql-errors": "^1.1.3", "jsonql-jwt": "^1.3.3", "jsonql-params-validator": "^1.4.11", diff --git a/packages/ws-client/src/core/action-call.js b/packages/ws-client/src/core/action-call.js index 59291b568b49e7580c93f0f487f9333d37e86479..9000d9168296e9c864a202b6dda49fb7447284fc 100644 --- a/packages/ws-client/src/core/action-call.js +++ b/packages/ws-client/src/core/action-call.js @@ -1,5 +1,5 @@ // the actual trigger call method -import { RESULT_PROP_NAME, EMIT_REPLY_TYPE } from 'jsonql-constants' +import { ON_RESULT_PROP_NAME, EMIT_REPLY_TYPE } from 'jsonql-constants' import { createEvt, toArray } from 'jsonql-utils/module' import { respondHandler } from './respond-handler' import { getDebug } from '../utils' @@ -22,7 +22,7 @@ export function actionCall(ee, namespace, resolverName, args = []) { // then we need to listen to the event callback here as well return new Promise((resolver, rejecter) => { ee.$on( - createEvt(namespace, resolverName, RESULT_PROP_NAME), + createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), function actionCallResultHandler(result) { debugFn(`got the first result`, result) respondHandler(result, resolver, rejecter) diff --git a/packages/ws-client/src/core/generator.js b/packages/ws-client/src/core/generator.js index e0d2b1b51497142f82e514470cbcbe43448931bb..5406a29be05c8362a0622738821c7c565022ca3f 100644 --- a/packages/ws-client/src/core/generator.js +++ b/packages/ws-client/src/core/generator.js @@ -56,8 +56,8 @@ export function generator(opts, nspMap, ee) { .then(obj1 => createNamespaceErrorHandler(obj1, ee, nspSet)) // add onReady handler .then(obj2 => createOnReadyhandler(obj2, ee, nspSet)) - // add onLogin handler - .then(obj3 => createOnLoginhandler(obj3, ee, nspSet)) - // Auth related methods + // add onLogin handler -- this is optional + .then(obj3 => createOnLoginhandler(obj3, ee, opts)) + // Auth related methods -- this is optional .then(obj4 => createAuthMethods(obj4, ee, opts)) } diff --git a/packages/ws-client/src/core/resolver-methods.js b/packages/ws-client/src/core/resolver-methods.js index fcb2de8c0292abaed8305ae65eb76c4cb8f31dba..648e130717a4a117df7bc63407ed33a34365b02f 100644 --- a/packages/ws-client/src/core/resolver-methods.js +++ b/packages/ws-client/src/core/resolver-methods.js @@ -22,13 +22,13 @@ import { ERROR_TYPE, DATA_KEY, ERROR_KEY, - ERROR_PROP_NAME, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, - LOGIN_PROP_NAME, + ON_ERROR_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, + ON_LOGIN_PROP_NAME, SEND_MSG_PROP_NAME, LOGIN_EVENT_NAME, - READY_PROP_NAME, + ON_READY_PROP_NAME, LOGOUT_EVENT_NAME } from 'jsonql-constants' import { @@ -78,16 +78,16 @@ export function createNamespaceErrorHandler(obj, ee, nspSet) { // using the onError as name // @TODO we should follow the convention earlier // make this a setter for the obj itself - return objDefineProps(obj, ERROR_PROP_NAME, function(namespaceErrorHandler) { - if (isFunc(namespaceErrorHandler)) { - // please note ERROR_PROP_NAME can add multiple listners - for (let namespace in nspSet) { - // this one is very tricky, we need to make sure the trigger is calling - // with the namespace as well as the error - ee.$on(createEvt(namespace, ERROR_PROP_NAME), namespaceErrorHandler) - } + return objDefineProps(obj, ON_ERROR_PROP_NAME, function(namespaceErrorHandler) { + if (isFunc(namespaceErrorHandler)) { + // please note ON_ERROR_PROP_NAME can add multiple listners + for (let namespace in nspSet) { + // this one is very tricky, we need to make sure the trigger is calling + // with the namespace as well as the error + ee.$on(createEvt(namespace, ON_ERROR_PROP_NAME), namespaceErrorHandler) } - }) + } + }) } /** @@ -98,10 +98,10 @@ export function createNamespaceErrorHandler(obj, ee, nspSet) { * @return {object} obj with onReady prop */ export function createOnReadyhandler(obj, ee, nspSet) { - return objDefineProps(obj, READY_PROP_NAME, function(onReadyCallback) { + return objDefineProps(obj, ON_READY_PROP_NAME, function(onReadyCallback) { if (isFunc(onReadyCallback)) { // reduce it down to just one flat level - ee.$on(READY_PROP_NAME, onReadyCallback) + ee.$on(ON_READY_PROP_NAME, onReadyCallback) } }) } @@ -111,16 +111,20 @@ export function createOnReadyhandler(obj, ee, nspSet) { * Plus this will check if it's the private namespace that fired the event * @param {object} obj the client itself * @param {object} ee Event Emitter - * @param {object} nspSet namespace keys + * @param {object} opts configuration * @return {object} obj with onLogin prop */ -export function createOnLoginhandler(obj, ee, nspSet) { - return objDefineProps(obj, LOGIN_PROP_NAME, function(onLoginCallback) { - if (isFunc(onLoginCallback)) { - // only one callback can registered with it, TBC - ee.$only(LOGIN_PROP_NAME, onLoginCallback) - } - }) +export function createOnLoginhandler(obj, ee, opts) { + if (opts.enableAuth) { + return objDefineProps(obj, ON_LOGIN_PROP_NAME, function(onLoginCallback) { + if (isFunc(onLoginCallback)) { + // only one callback can registered with it, TBC + ee.$only(ON_LOGIN_PROP_NAME, onLoginCallback) + } + }) + } + // just skip it + return obj } /** diff --git a/packages/ws-client/src/core/setup-resolver.js b/packages/ws-client/src/core/setup-resolver.js index 6620aa18073b8d7485f759430348d51d9d98417e..f3f895e5a720a2cb72b9ea5fccf2814975750205 100644 --- a/packages/ws-client/src/core/setup-resolver.js +++ b/packages/ws-client/src/core/setup-resolver.js @@ -3,12 +3,12 @@ import { ERROR_TYPE, DATA_KEY, ERROR_KEY, - ERROR_PROP_NAME, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_ERROR_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, SEND_MSG_PROP_NAME, LOGIN_EVENT_NAME, - READY_PROP_NAME, + ON_READY_PROP_NAME, LOGOUT_EVENT_NAME } from 'jsonql-constants' import { @@ -39,13 +39,13 @@ const setupNamespace = (fn, ee, namespace, resolverName, params) => [ // onResult handler const setupOnResult = (fn, ee, namespace, resolverName, params) => [ - objDefineProps(fn, RESULT_PROP_NAME, function(resultCallback) { + objDefineProps(fn, ON_RESULT_PROP_NAME, function(resultCallback) { if (isFunc(resultCallback)) { ee.$on( - createEvt(namespace, resolverName, RESULT_PROP_NAME), + createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), function resultHandler(result) { respondHandler(result, resultCallback, (error) => { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error) + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error) }) } ) @@ -60,17 +60,17 @@ const setupOnResult = (fn, ee, namespace, resolverName, params) => [ // we do need to add the send prop back because it's the only way to deal with // bi-directional data stream const setupOnMessage = (fn, ee, namespace, resolverName, params) => [ - objDefineProps(fn, MESSAGE_PROP_NAME, function(messageCallback) { + objDefineProps(fn, ON_MESSAGE_PROP_NAME, function(messageCallback) { // we expect this to be a function if (isFunc(messageCallback)) { // did that add to the callback let onMessageCallback = (args) => { respondHandler(args, messageCallback, (error) => { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error) + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error) }) } // register the handler for this message event - ee.$only(createEvt(namespace, resolverName, MESSAGE_PROP_NAME), onMessageCallback) + ee.$only(createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME), onMessageCallback) } }), ee, @@ -79,12 +79,12 @@ const setupOnMessage = (fn, ee, namespace, resolverName, params) => [ params ] -// add an ERROR_PROP_NAME handler +// add an ON_ERROR_PROP_NAME handler const setupOnError = (fn, ee, namespace, resolverName, params) => [ - objDefineProps(fn, ERROR_PROP_NAME, function(resolverErrorHandler) { + objDefineProps(fn, ON_ERROR_PROP_NAME, function(resolverErrorHandler) { if (isFunc(resolverErrorHandler)) { - // please note ERROR_PROP_NAME can add multiple listners - ee.$only(createEvt(namespace, resolverName, ERROR_PROP_NAME), resolverErrorHandler) + // please note ON_ERROR_PROP_NAME can add multiple listners + ee.$only(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), resolverErrorHandler) } }), ee, @@ -106,7 +106,7 @@ const setupSend = (fn, ee, namespace, resolverName, params) => ( if (result[ERROR_KEY] && result[ERROR_KEY].length) { debugFn(`got ERROR_KEY`, result[ERROR_KEY]) ee.$call( - createEvt(namespace, resolverName, ERROR_PROP_NAME), + createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [JsonqlValidationError(resolverName, result[ERROR_KEY])] ) } else { @@ -117,7 +117,7 @@ const setupSend = (fn, ee, namespace, resolverName, params) => ( .catch(err => { debugFn(`error after validateAsync`, err) ee.$call( - createEvt(namespace, resolverName, ERROR_PROP_NAME), + createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [JsonqlValidationError(resolverName, err)] ) }) diff --git a/packages/ws-client/src/options/constants.js b/packages/ws-client/src/options/constants.js index bbc935c94ab1481e4f18aa7a8f4ffa9540d82733..7d7478045df4f729975b6b3cddc82363bd37461e 100644 --- a/packages/ws-client/src/options/constants.js +++ b/packages/ws-client/src/options/constants.js @@ -4,8 +4,8 @@ import { EMIT_REPLY_TYPE, JS_WS_SOCKET_IO_NAME, JS_WS_NAME, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME } from 'jsonql-constants' const SOCKET_IO = JS_WS_SOCKET_IO_NAME; @@ -42,8 +42,8 @@ export { MISSING_PROP_ERR, UNKNOWN_CLIENT_ERR, EMIT_EVT, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, NAMESPACE_KEY, UNKNOWN_RESULT, NOT_ALLOW_OP, diff --git a/packages/ws-client/src/share/client-event-handler.js b/packages/ws-client/src/share/client-event-handler.js index 9b6516ddbc5165b8ed8903d344c367a0f9b711fd..703f32cd4214c2b89a1abd7170963574fd76d621 100644 --- a/packages/ws-client/src/share/client-event-handler.js +++ b/packages/ws-client/src/share/client-event-handler.js @@ -5,8 +5,8 @@ // because all the client side call are via the ee // and that makes it re-usable between different client setup import { - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, EMIT_EVT, SOCKET_IO, WS @@ -15,7 +15,7 @@ import { LOGIN_EVENT_NAME, LOGOUT_EVENT_NAME, NOT_LOGIN_ERR_MSG, - ERROR_PROP_NAME + ON_ERROR_PROP_NAME } from 'jsonql-constants' import { getDebug, createEvt, clearMainEmitEvt } from '../utils' @@ -38,13 +38,22 @@ const notLoginWsHandler = (namespace, ee) => { } // It should just throw error here and should not call the result // because that's channel for handling normal event not the fake one - ee.$call(createEvt(namespace, resolverName, ERROR_PROP_NAME), [error]) + ee.$call(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [error]) // also trigger the result handler, but wrap inside the error key - ee.$call(createEvt(namespace, resolverName, RESULT_PROP_NAME), [{ error }]) + ee.$call(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [{ error }]) } ) } +/** + * get the private namespace + * @param {array} namespaces array + * @return {*} string on success + */ +const getPrivateNamespace = (namespaces) => ( + namespaces.length > 1 ? namespaces[0] : false +) + /** * centralize all the comm in one place * @param {object} opts configuration @@ -56,14 +65,19 @@ const notLoginWsHandler = (namespace, ee) => { * @return {void} nothing */ export function clientEventHandler(opts, nspMap, ee, bindWsHandler, namespaces, nsps) { + // @1.1.3 add isPrivate prop to id which namespace is the private nsp + // then we can use this prop to determine if we need to fire the ON_LOGIN_PROP_NAME event + const privateNamespace = getPrivateNamespace(namespaces) + let isPrivate = false; // loop // @BUG for io this has to be in order the one with auth need to get call first // The order of login is very import we need to run a waterfall here to make sure // one is execute then the other namespaces.forEach(namespace => { + isPrivate = privateNamespace === namespace; if (nsps[namespace]) { - debugFn('call bindWsHandler', namespace) - let args = [namespace, nsps[namespace], ee] + debugFn('call bindWsHandler', isPrivate, namespace) + let args = [namespace, nsps[namespace], ee, isPrivate] if (opts.serverType === SOCKET_IO) { let { nspSet } = nspMap; args.push(nspSet[namespace]) diff --git a/packages/ws-client/src/share/trigger-namespaces-on-error.js b/packages/ws-client/src/share/trigger-namespaces-on-error.js index 1496f6601baf855aab78f8ea470e75b82b74ce69..50fb90b4819ebd87a73092644c1c2eff34447d06 100644 --- a/packages/ws-client/src/share/trigger-namespaces-on-error.js +++ b/packages/ws-client/src/share/trigger-namespaces-on-error.js @@ -1,5 +1,5 @@ // this use by client-event-handler -import { ERROR_PROP_NAME } from 'jsonql-constants' +import { ON_ERROR_PROP_NAME } from 'jsonql-constants' import { createEvt } from 'jsonql-utils' /** * trigger errors on all the namespace onError handler @@ -10,6 +10,6 @@ import { createEvt } from 'jsonql-utils' */ export function triggerNamespacesOnError(ee, namespaces, message) { namespaces.forEach( namespace => { - ee.$call(createEvt(namespace, ERROR_PROP_NAME), [{ message, namespace }]) + ee.$call(createEvt(namespace, ON_ERROR_PROP_NAME), [{ message, namespace }]) }) } diff --git a/packages/ws-client/tests/event.test.js b/packages/ws-client/tests/event.test.js index 5d72ded9fc7f5f9156e0514426525cc7c0df988f..0b409e73b7394f86f85f04cffbb7db814329209f 100644 --- a/packages/ws-client/tests/event.test.js +++ b/packages/ws-client/tests/event.test.js @@ -2,6 +2,7 @@ const test = require('ava') const NbEventService = require('nb-event-service') const debug = require('debug')('jsonql-ws-client:test:event') +const { objDefineProps } = require('jsonql-utils') test.before(t => { t.context.evt = new NbEventService({logger: debug}) @@ -29,3 +30,30 @@ test.cb(`It should able to trigger multiple callback`, t => { evt.$trigger('something', 1) }) + +test.cb(`Test the object getter to return a function to create a new on interface`, t => { + + t.plan(1) + + const setter = function(value) { + console.log(value) + } + + const getter = function() { + return function(value, callback) { + console.log(value, callback) + if (typeof callback === 'function') { + callback(value) + } + } + } + + let obj = {} + obj = objDefineProps(obj, 'on', setter, getter) + + obj.on('yes', function cb(value) { + t.is('yes', value) + t.end() + }) + +}) diff --git a/packages/ws-client/tests/fixtures/beta/src/client-event-handler.js b/packages/ws-client/tests/fixtures/beta/src/client-event-handler.js index 634ddf4c4e4ffe5a4b7bc0c48ac59cda3b1827cb..647ebaf007351bc1aaf8534549d7c243e19d2c42 100644 --- a/packages/ws-client/tests/fixtures/beta/src/client-event-handler.js +++ b/packages/ws-client/tests/fixtures/beta/src/client-event-handler.js @@ -3,8 +3,8 @@ // because all the client side call are via the ee // and that makes it re-usable between different client setup import { - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, EMIT_EVT, SOCKET_IO, WS @@ -13,7 +13,7 @@ import { LOGIN_EVENT_NAME, LOGOUT_EVENT_NAME, NOT_LOGIN_ERR_MSG, - ERROR_PROP_NAME + ON_ERROR_PROP_NAME } from 'jsonql-constants' import { getDebug, createEvt, clearMainEmitEvt } from './utils' @@ -36,9 +36,9 @@ const notLoginWsHandler = (namespace, ee) => { } // It should just throw error here and should not call the result // because that's channel for handling normal event not the fake one - ee.$call(createEvt(namespace, resolverName, ERROR_PROP_NAME), [error]) + ee.$call(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [error]) // also trigger the result handler, but wrap inside the error key - ee.$call(createEvt(namespace, resolverName, RESULT_PROP_NAME), [{ error }]) + ee.$call(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [{ error }]) } ) } diff --git a/packages/ws-client/tests/fixtures/beta/src/generator.js b/packages/ws-client/tests/fixtures/beta/src/generator.js index 72ad566ae716b7e1f246eba8bb33f481d939518c..0228923bd34172932b33d2fb5232809a54f909f3 100644 --- a/packages/ws-client/tests/fixtures/beta/src/generator.js +++ b/packages/ws-client/tests/fixtures/beta/src/generator.js @@ -22,12 +22,12 @@ import { ERROR_TYPE, DATA_KEY, ERROR_KEY, - ERROR_PROP_NAME, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_ERROR_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, SEND_MSG_PROP_NAME, LOGIN_EVENT_NAME, - READY_PROP_NAME, + ON_READY_PROP_NAME, LOGOUT_EVENT_NAME } from 'jsonql-constants' import { getDebug, constants, createEvt, toArray } from './utils' @@ -138,15 +138,15 @@ const setupResolver = (namespace, resolverName, params, fn, ee) => { }) } // onResult handler - if (Object.getOwnPropertyDescriptor(fn, RESULT_PROP_NAME) === undefined) { - Object.defineProperty(fn, RESULT_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(fn, ON_RESULT_PROP_NAME) === undefined) { + Object.defineProperty(fn, ON_RESULT_PROP_NAME, { set: function(resultCallback) { if (typeof resultCallback === 'function') { ee.$only( - createEvt(namespace, resolverName, RESULT_PROP_NAME), + createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), function resultHandler(result) { respondHandler(result, resultCallback, (error) => { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error) + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error) }) } ) @@ -159,19 +159,19 @@ const setupResolver = (namespace, resolverName, params, fn, ee) => { } // we do need to add the send prop back because it's the only way to deal with // bi-directional data stream - if (Object.getOwnPropertyDescriptor(fn, MESSAGE_PROP_NAME) === undefined) { - Object.defineProperty(fn, MESSAGE_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(fn, ON_MESSAGE_PROP_NAME) === undefined) { + Object.defineProperty(fn, ON_MESSAGE_PROP_NAME, { set: function(messageCallback) { // we expect this to be a function if (typeof messageCallback === 'function') { // did that add to the callback let onMessageCallback = (args) => { respondHandler(args, messageCallback, (error) => { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error) + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error) }) } // register the handler for this message event - ee.$only(createEvt(namespace, resolverName, MESSAGE_PROP_NAME), onMessageCallback) + ee.$only(createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME), onMessageCallback) } }, get: function() { @@ -179,13 +179,13 @@ const setupResolver = (namespace, resolverName, params, fn, ee) => { } }) } - // add an ERROR_PROP_NAME handler - if (Object.getOwnPropertyDescriptor(fn, ERROR_PROP_NAME) === undefined) { - Object.defineProperty(fn, ERROR_PROP_NAME, { + // add an ON_ERROR_PROP_NAME handler + if (Object.getOwnPropertyDescriptor(fn, ON_ERROR_PROP_NAME) === undefined) { + Object.defineProperty(fn, ON_ERROR_PROP_NAME, { set: function(resolverErrorHandler) { if (typeof resolverErrorHandler === 'function') { - // please note ERROR_PROP_NAME can add multiple listners - ee.$only(createEvt(namespace, resolverName, ERROR_PROP_NAME), resolverErrorHandler) + // please note ON_ERROR_PROP_NAME can add multiple listners + ee.$only(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), resolverErrorHandler) } }, get: function() { @@ -202,7 +202,7 @@ const setupResolver = (namespace, resolverName, params, fn, ee) => { // onError if (result[ERROR_KEY] && result[ERROR_KEY].length) { ee.$call( - createEvt(namespace, resolverName, ERROR_PROP_NAME), + createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [JsonqlValidationError(resolverName, result[ERROR_KEY])] ) } else { @@ -230,15 +230,15 @@ const createNamespaceErrorHandler = (obj, ee, nspSet) => { // using the onError as name // @TODO we should follow the convention earlier // make this a setter for the obj itself - if (Object.getOwnPropertyDescriptor(obj, ERROR_PROP_NAME) === undefined) { - Object.defineProperty(obj, ERROR_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(obj, ON_ERROR_PROP_NAME) === undefined) { + Object.defineProperty(obj, ON_ERROR_PROP_NAME, { set: function(namespaceErrorHandler) { if (typeof namespaceErrorHandler === 'function') { - // please note ERROR_PROP_NAME can add multiple listners + // please note ON_ERROR_PROP_NAME can add multiple listners for (let namespace in nspSet) { // this one is very tricky, we need to make sure the trigger is calling // with the namespace as well as the error - ee.$on(createEvt(namespace, ERROR_PROP_NAME), namespaceErrorHandler) + ee.$on(createEvt(namespace, ON_ERROR_PROP_NAME), namespaceErrorHandler) } } }, @@ -257,12 +257,12 @@ const createNamespaceErrorHandler = (obj, ee, nspSet) => { * @return {void} */ const createOnReadyhandler = (obj, ee, nspSet) => { - if (Object.getOwnPropertyDescriptor(obj, READY_PROP_NAME) === undefined) { - Object.defineProperty(obj, READY_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(obj, ON_READY_PROP_NAME) === undefined) { + Object.defineProperty(obj, ON_READY_PROP_NAME, { set: function(onReadyCallback) { if (typeof onReadyCallback === 'function') { // reduce it down to just one flat level - let result = ee.$on(READY_PROP_NAME, onReadyCallback) + let result = ee.$on(ON_READY_PROP_NAME, onReadyCallback) } }, get: function() { diff --git a/packages/ws-client/tests/fixtures/beta/src/io/io-main-handler.js b/packages/ws-client/tests/fixtures/beta/src/io/io-main-handler.js index 72d088b5c8b4fa68750e7184aa77bc6f225cceae..341168929eba9eed604b135e08419bf08739856c 100644 --- a/packages/ws-client/tests/fixtures/beta/src/io/io-main-handler.js +++ b/packages/ws-client/tests/fixtures/beta/src/io/io-main-handler.js @@ -1,15 +1,15 @@ import { - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, EMIT_EVT } from '../utils/constants' import { - ERROR_PROP_NAME, + ON_ERROR_PROP_NAME, LOGOUT_EVENT_NAME, ERROR_TYPE, ERROR_KEY, DATA_KEY, - READY_PROP_NAME + ON_READY_PROP_NAME } from 'jsonql-constants' import { isKeyInObject } from 'jsonql-params-validator' import { getDebug, createEvt, formatPayload } from '../utils' @@ -22,7 +22,7 @@ const debugFn = getDebug('io-main-handler') * @param {string} resolverName resolver to handle this call * @return {function} capture the result */ -const resultHandler = (ee, namespace, resolverName, evt = RESULT_PROP_NAME) => { +const resultHandler = (ee, namespace, resolverName, evt = ON_RESULT_PROP_NAME) => { return (result) => { ee.$trigger(createEvt(namespace, resolverName, evt), [result]) } @@ -39,7 +39,7 @@ const createResolverListener = (nspSet, nsp, ee, namespace) => { for (let resolverName in nspSet) { nsp.on( resolverName, - resultHandler(ee, namespace, resolverName, MESSAGE_PROP_NAME) + resultHandler(ee, namespace, resolverName, ON_MESSAGE_PROP_NAME) ) } } @@ -98,5 +98,5 @@ export default function ioMainHandler(namespace, socket, ee, nspSet, opts) { } }) // the last one to fire - ee.$trigger(READY_PROP_NAME, namespace) + ee.$trigger(ON_READY_PROP_NAME, namespace) } diff --git a/packages/ws-client/tests/fixtures/beta/src/node/main.cjs.js b/packages/ws-client/tests/fixtures/beta/src/node/main.cjs.js index b8b7ad9fec24418b404f857ce7cdffbbb34b6450..7108ecfd725995491ebd2cb285f070dac9d79189 100644 --- a/packages/ws-client/tests/fixtures/beta/src/node/main.cjs.js +++ b/packages/ws-client/tests/fixtures/beta/src/node/main.cjs.js @@ -443,10 +443,10 @@ var JS_WS_SOCKET_IO_NAME = 'socket.io'; var JS_WS_NAME = 'ws'; // for ws client -var MESSAGE_PROP_NAME = 'onMessage'; -var RESULT_PROP_NAME = 'onResult'; -var ERROR_PROP_NAME = 'onError'; -var READY_PROP_NAME = 'onReady'; +var ON_MESSAGE_PROP_NAME = 'onMessage'; +var ON_RESULT_PROP_NAME = 'onResult'; +var ON_ERROR_PROP_NAME = 'onError'; +var ON_READY_PROP_NAME = 'onReady'; var SEND_MSG_PROP_NAME = 'send'; var NOT_LOGIN_ERR_MSG = 'NOT LOGIN'; var HSA_ALGO = 'HS256'; @@ -6678,7 +6678,7 @@ var disconnect = function (nsps, type) { */ function triggerNamespacesOnError(ee, namespaces, message) { namespaces.forEach( function (namespace) { - ee.$call(createEvt(namespace, ERROR_PROP_NAME), [{ message: message, namespace: namespace }]); + ee.$call(createEvt(namespace, ON_ERROR_PROP_NAME), [{ message: message, namespace: namespace }]); }); } @@ -6701,9 +6701,9 @@ var notLoginWsHandler = function (namespace, ee) { }; // It should just throw error here and should not call the result // because that's channel for handling normal event not the fake one - ee.$call(createEvt(namespace, resolverName, ERROR_PROP_NAME), [error]); + ee.$call(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [error]); // also trigger the result handler, but wrap inside the error key - ee.$call(createEvt(namespace, resolverName, RESULT_PROP_NAME), [{ error: error }]); + ee.$call(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [{ error: error }]); } ); }; @@ -6810,7 +6810,7 @@ var errorTypeHandler = function (ee, namespace, resolverName, json) { debugFn$3(("a global error on " + namespace)); evt.push(resolverName); } - evt.push(ERROR_PROP_NAME); + evt.push(ON_ERROR_PROP_NAME); var evtName = Reflect.apply(createEvt, null, evt); // test if there is a data field var payload = json.data || json; @@ -6828,7 +6828,7 @@ function wsMainHandlerAction(namespace, ws, ee) { // send ws.onopen = function() { // we just call the onReady - ee.$call(READY_PROP_NAME, namespace); + ee.$call(ON_READY_PROP_NAME, namespace); // add listener ee.$only( createEvt(namespace, EMIT_EVT), @@ -6850,12 +6850,12 @@ function wsMainHandlerAction(namespace, ws, ee) { var type = json.type; switch (type) { case EMIT_REPLY_TYPE: - var r = ee.$trigger(createEvt(namespace, resolverName, MESSAGE_PROP_NAME), [json]); - debugFn$3(MESSAGE_PROP_NAME, r); + var r = ee.$trigger(createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME), [json]); + debugFn$3(ON_MESSAGE_PROP_NAME, r); break; case ACKNOWLEDGE_REPLY_TYPE: - debugFn$3(RESULT_PROP_NAME, json); - var x = ee.$trigger(createEvt(namespace, resolverName, RESULT_PROP_NAME), [json]); + debugFn$3(ON_RESULT_PROP_NAME, json); + var x = ee.$trigger(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [json]); debugFn$3('onResult add to event?', x); break; case ERROR_TYPE: @@ -6869,7 +6869,7 @@ function wsMainHandlerAction(namespace, ws, ee) { debugFn$3('Unhandled event!', json); errorTypeHandler(ee, namespace, resolverName, json); // let error = {error: {'message': 'Unhandled event!', type}}; - // ee.$trigger(createEvt(namespace, resolverName, RESULT_PROP_NAME), [error]) + // ee.$trigger(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [error]) } } catch(e) { errorTypeHandler(ee, namespace, false, e); @@ -6986,7 +6986,7 @@ var debugFn$5 = getDebug('io-main-handler'); * @return {function} capture the result */ var resultHandler = function (ee, namespace, resolverName, evt) { - if ( evt === void 0 ) evt = RESULT_PROP_NAME; + if ( evt === void 0 ) evt = ON_RESULT_PROP_NAME; return function (result) { ee.$trigger(createEvt(namespace, resolverName, evt), [result]); @@ -7004,7 +7004,7 @@ var createResolverListener = function (nspSet, nsp, ee, namespace) { for (var resolverName in nspSet) { nsp.on( resolverName, - resultHandler(ee, namespace, resolverName, MESSAGE_PROP_NAME) + resultHandler(ee, namespace, resolverName, ON_MESSAGE_PROP_NAME) ); } }; @@ -7063,7 +7063,7 @@ function ioMainHandler(namespace, socket, ee, nspSet, opts) { } }); // the last one to fire - ee.$trigger(READY_PROP_NAME, namespace); + ee.$trigger(ON_READY_PROP_NAME, namespace); } // this will create the socket.io client @@ -7324,15 +7324,15 @@ var setupResolver = function (namespace, resolverName, params, fn, ee) { }); } // onResult handler - if (Object.getOwnPropertyDescriptor(fn, RESULT_PROP_NAME) === undefined) { - Object.defineProperty(fn, RESULT_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(fn, ON_RESULT_PROP_NAME) === undefined) { + Object.defineProperty(fn, ON_RESULT_PROP_NAME, { set: function(resultCallback) { if (typeof resultCallback === 'function') { ee.$only( - createEvt(namespace, resolverName, RESULT_PROP_NAME), + createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), function resultHandler(result) { respondHandler(result, resultCallback, function (error) { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error); + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error); }); } ); @@ -7345,19 +7345,19 @@ var setupResolver = function (namespace, resolverName, params, fn, ee) { } // we do need to add the send prop back because it's the only way to deal with // bi-directional data stream - if (Object.getOwnPropertyDescriptor(fn, MESSAGE_PROP_NAME) === undefined) { - Object.defineProperty(fn, MESSAGE_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(fn, ON_MESSAGE_PROP_NAME) === undefined) { + Object.defineProperty(fn, ON_MESSAGE_PROP_NAME, { set: function(messageCallback) { // we expect this to be a function if (typeof messageCallback === 'function') { // did that add to the callback var onMessageCallback = function (args) { respondHandler(args, messageCallback, function (error) { - ee.$trigger(createEvt(namespace, resolverName, ERROR_PROP_NAME), error); + ee.$trigger(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), error); }); }; // register the handler for this message event - ee.$only(createEvt(namespace, resolverName, MESSAGE_PROP_NAME), onMessageCallback); + ee.$only(createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME), onMessageCallback); } }, get: function() { @@ -7365,13 +7365,13 @@ var setupResolver = function (namespace, resolverName, params, fn, ee) { } }); } - // add an ERROR_PROP_NAME handler - if (Object.getOwnPropertyDescriptor(fn, ERROR_PROP_NAME) === undefined) { - Object.defineProperty(fn, ERROR_PROP_NAME, { + // add an ON_ERROR_PROP_NAME handler + if (Object.getOwnPropertyDescriptor(fn, ON_ERROR_PROP_NAME) === undefined) { + Object.defineProperty(fn, ON_ERROR_PROP_NAME, { set: function(resolverErrorHandler) { if (typeof resolverErrorHandler === 'function') { - // please note ERROR_PROP_NAME can add multiple listners - ee.$only(createEvt(namespace, resolverName, ERROR_PROP_NAME), resolverErrorHandler); + // please note ON_ERROR_PROP_NAME can add multiple listners + ee.$only(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), resolverErrorHandler); } }, get: function() { @@ -7388,7 +7388,7 @@ var setupResolver = function (namespace, resolverName, params, fn, ee) { // onError if (result[ERROR_KEY] && result[ERROR_KEY].length) { ee.$call( - createEvt(namespace, resolverName, ERROR_PROP_NAME), + createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [JsonqlValidationError(resolverName, result[ERROR_KEY])] ); } else { @@ -7416,15 +7416,15 @@ var createNamespaceErrorHandler = function (obj, ee, nspSet) { // using the onError as name // @TODO we should follow the convention earlier // make this a setter for the obj itself - if (Object.getOwnPropertyDescriptor(obj, ERROR_PROP_NAME) === undefined) { - Object.defineProperty(obj, ERROR_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(obj, ON_ERROR_PROP_NAME) === undefined) { + Object.defineProperty(obj, ON_ERROR_PROP_NAME, { set: function(namespaceErrorHandler) { if (typeof namespaceErrorHandler === 'function') { - // please note ERROR_PROP_NAME can add multiple listners + // please note ON_ERROR_PROP_NAME can add multiple listners for (var namespace in nspSet) { // this one is very tricky, we need to make sure the trigger is calling // with the namespace as well as the error - ee.$on(createEvt(namespace, ERROR_PROP_NAME), namespaceErrorHandler); + ee.$on(createEvt(namespace, ON_ERROR_PROP_NAME), namespaceErrorHandler); } } }, @@ -7443,12 +7443,12 @@ var createNamespaceErrorHandler = function (obj, ee, nspSet) { * @return {void} */ var createOnReadyhandler = function (obj, ee, nspSet) { - if (Object.getOwnPropertyDescriptor(obj, READY_PROP_NAME) === undefined) { - Object.defineProperty(obj, READY_PROP_NAME, { + if (Object.getOwnPropertyDescriptor(obj, ON_READY_PROP_NAME) === undefined) { + Object.defineProperty(obj, ON_READY_PROP_NAME, { set: function(onReadyCallback) { if (typeof onReadyCallback === 'function') { // reduce it down to just one flat level - var result = ee.$on(READY_PROP_NAME, onReadyCallback); + var result = ee.$on(ON_READY_PROP_NAME, onReadyCallback); } }, get: function() { diff --git a/packages/ws-client/tests/fixtures/beta/src/utils/constants.js b/packages/ws-client/tests/fixtures/beta/src/utils/constants.js index 928a430444d7902b9b759bc525a3cf2ed6bac2c7..6680c0fe3ff9bbca37a256ed624cb1477391606b 100644 --- a/packages/ws-client/tests/fixtures/beta/src/utils/constants.js +++ b/packages/ws-client/tests/fixtures/beta/src/utils/constants.js @@ -4,8 +4,8 @@ import { EMIT_REPLY_TYPE, JS_WS_SOCKET_IO_NAME, JS_WS_NAME, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME } from 'jsonql-constants' const SOCKET_IO = JS_WS_SOCKET_IO_NAME; @@ -40,8 +40,8 @@ export { MISSING_PROP_ERR, UNKNOWN_CLIENT_ERR, EMIT_EVT, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, NAMESPACE_KEY, UNKNOWN_RESULT, NOT_ALLOW_OP, diff --git a/packages/ws-client/tests/fixtures/beta/src/utils/trigger-namespaces-on-error.js b/packages/ws-client/tests/fixtures/beta/src/utils/trigger-namespaces-on-error.js index 59409c8162602f2f507413873e96707f65512cea..553a67f44986284aba686b2c7f0e4e1f2902bfe2 100644 --- a/packages/ws-client/tests/fixtures/beta/src/utils/trigger-namespaces-on-error.js +++ b/packages/ws-client/tests/fixtures/beta/src/utils/trigger-namespaces-on-error.js @@ -1,5 +1,5 @@ -import { ERROR_PROP_NAME } from 'jsonql-constants' +import { ON_ERROR_PROP_NAME } from 'jsonql-constants' import { createEvt } from './index' /** * trigger errors on all the namespace onError handler @@ -10,6 +10,6 @@ import { createEvt } from './index' */ export default function triggerNamespacesOnError(ee, namespaces, message) { namespaces.forEach( namespace => { - ee.$call(createEvt(namespace, ERROR_PROP_NAME), [{ message, namespace }]) + ee.$call(createEvt(namespace, ON_ERROR_PROP_NAME), [{ message, namespace }]) }) } diff --git a/packages/ws-client/tests/fixtures/beta/src/ws/ws-main-handler.js b/packages/ws-client/tests/fixtures/beta/src/ws/ws-main-handler.js index 2bf16b6cae6f10e68f01f84ddd9212fa7c01e401..0a2f84b88b72e7514286c41fd4e477e33246c09d 100644 --- a/packages/ws-client/tests/fixtures/beta/src/ws/ws-main-handler.js +++ b/packages/ws-client/tests/fixtures/beta/src/ws/ws-main-handler.js @@ -1,17 +1,17 @@ // the WebSocket main handler import { - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, EMIT_EVT } from '../utils/constants' import { - ERROR_PROP_NAME, + ON_ERROR_PROP_NAME, LOGIN_EVENT_NAME, LOGOUT_EVENT_NAME, ACKNOWLEDGE_REPLY_TYPE, EMIT_REPLY_TYPE, ERROR_TYPE, - READY_PROP_NAME + ON_READY_PROP_NAME } from 'jsonql-constants' import { createQueryStr } from 'jsonql-utils' @@ -34,7 +34,7 @@ const errorTypeHandler = (ee, namespace, resolverName, json) => { debugFn(`a global error on ${namespace}`) evt.push(resolverName) } - evt.push(ERROR_PROP_NAME) + evt.push(ON_ERROR_PROP_NAME) let evtName = Reflect.apply(createEvt, null, evt) // test if there is a data field let payload = json.data || json; @@ -53,7 +53,7 @@ export default function wsMainHandlerAction(namespace, ws, ee) { ws.onopen = function() { debugFn('ws.onopen listened') // we just call the onReady - ee.$call(READY_PROP_NAME, namespace) + ee.$call(ON_READY_PROP_NAME, namespace) // add listener ee.$only( createEvt(namespace, EMIT_EVT), @@ -74,12 +74,12 @@ export default function wsMainHandlerAction(namespace, ws, ee) { debugFn('Hear from server', type, json) switch (type) { case EMIT_REPLY_TYPE: - let r = ee.$trigger(createEvt(namespace, resolverName, MESSAGE_PROP_NAME), [json]) - debugFn(`MESSAGE_PROP_NAME`, r) + let r = ee.$trigger(createEvt(namespace, resolverName, ON_MESSAGE_PROP_NAME), [json]) + debugFn(`ON_MESSAGE_PROP_NAME`, r) break; case ACKNOWLEDGE_REPLY_TYPE: - debugFn(`RESULT_PROP_NAME`, json) - let x = ee.$trigger(createEvt(namespace, resolverName, RESULT_PROP_NAME), [json]) + debugFn(`ON_RESULT_PROP_NAME`, json) + let x = ee.$trigger(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [json]) debugFn('onResult add to event?', x) break; case ERROR_TYPE: @@ -93,7 +93,7 @@ export default function wsMainHandlerAction(namespace, ws, ee) { debugFn('Unhandled event!', json) errorTypeHandler(ee, namespace, resolverName, json) // let error = {error: {'message': 'Unhandled event!', type}}; - // ee.$trigger(createEvt(namespace, resolverName, RESULT_PROP_NAME), [error]) + // ee.$trigger(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [error]) } } catch(e) { debug(`ws.onmessage error`, e) diff --git a/packages/ws-client/tests/fixtures/old-ws-client/client-event-handler.js b/packages/ws-client/tests/fixtures/old-ws-client/client-event-handler.js index c6c3f51083dfdaf84a10e02ca756de89ea137148..5efa279b43bc0072d3fb8b2aaef0da021fb2246a 100644 --- a/packages/ws-client/tests/fixtures/old-ws-client/client-event-handler.js +++ b/packages/ws-client/tests/fixtures/old-ws-client/client-event-handler.js @@ -2,8 +2,8 @@ // because all the client side call are via the ee // and that makes it re-usable between different client setup import { - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, EMIT_EVT, SOCKET_IO, WS @@ -12,7 +12,7 @@ import { LOGIN_EVENT_NAME, LOGOUT_EVENT_NAME, NOT_LOGIN_ERR_MSG, - ERROR_PROP_NAME + ON_ERROR_PROP_NAME } from 'jsonql-constants' import { getDebug, createEvt, clearMainEmitEvt } from '../utils' @@ -35,9 +35,9 @@ const notLoginWsHandler = (namespace, ee) => { } // It should just throw error here and should not call the result // because that's channel for handling normal event not the fake one - ee.$call(createEvt(namespace, resolverName, ERROR_PROP_NAME), [error]) + ee.$call(createEvt(namespace, resolverName, ON_ERROR_PROP_NAME), [error]) // also trigger the result handler, but wrap inside the error key - ee.$call(createEvt(namespace, resolverName, RESULT_PROP_NAME), [{ error }]) + ee.$call(createEvt(namespace, resolverName, ON_RESULT_PROP_NAME), [{ error }]) } ) } diff --git a/packages/ws-client/tests/fixtures/old-ws-client/trigger-namespaces-on-error.js b/packages/ws-client/tests/fixtures/old-ws-client/trigger-namespaces-on-error.js index 5dc3fa81850fa6083a1fb9cfc1a65ae9772b6a57..2ac04e7b7eb0315b0424ec27b5505c123bf45c4f 100644 --- a/packages/ws-client/tests/fixtures/old-ws-client/trigger-namespaces-on-error.js +++ b/packages/ws-client/tests/fixtures/old-ws-client/trigger-namespaces-on-error.js @@ -1,4 +1,4 @@ -import { ERROR_PROP_NAME } from 'jsonql-constants' +import { ON_ERROR_PROP_NAME } from 'jsonql-constants' import { createEvt } from './index' /** @@ -10,6 +10,6 @@ import { createEvt } from './index' */ export default function triggerNamespacesOnError(ee, namespaces, message) { namespaces.forEach( namespace => { - ee.$call(createEvt(namespace, ERROR_PROP_NAME), [{ message, namespace }]) + ee.$call(createEvt(namespace, ON_ERROR_PROP_NAME), [{ message, namespace }]) }) } diff --git a/packages/ws-client/tests/options.test.js b/packages/ws-client/tests/options.test.js index 65f00912b40945351093f1c9809a083d842b6306..28de4e0c20cbbb59e12e689948f7e52915172782 100644 --- a/packages/ws-client/tests/options.test.js +++ b/packages/ws-client/tests/options.test.js @@ -3,12 +3,10 @@ const test = require('ava') const debug = require('debug')('jsonql-ws-client:test:options') const { constants, triggerNamespacesOnError } = require('../share') -const { objDefineProps, injectToFn, chainFns } = require('jsonql-utils')//require('../../utils/main') +const { objDefineProps, injectToFn, chainFns } = require('jsonql-utils') test(`Should have the constants in options`, t => { - t.truthy(constants.MY_NAMESPACE) - t.is(typeof triggerNamespacesOnError, 'function') }) diff --git a/packages/ws-client/tests/test-node-parts.test.js b/packages/ws-client/tests/test-node-parts.OLD.js similarity index 100% rename from packages/ws-client/tests/test-node-parts.test.js rename to packages/ws-client/tests/test-node-parts.OLD.js diff --git a/packages/ws-client/tests/test-node.test.js b/packages/ws-client/tests/test-node.test.js index 03ea693ead49fd32125a62548af4a6fe52ab676a..68bd053abe3450ab88f9d63a887fd721acea3707 100644 --- a/packages/ws-client/tests/test-node.test.js +++ b/packages/ws-client/tests/test-node.test.js @@ -24,12 +24,13 @@ import { ERROR_TYPE, DATA_KEY, ERROR_KEY, - ERROR_PROP_NAME, - MESSAGE_PROP_NAME, - RESULT_PROP_NAME, + ON_ERROR_PROP_NAME, + ON_MESSAGE_PROP_NAME, + ON_RESULT_PROP_NAME, + ON_LOGIN_PROP_NAME, SEND_MSG_PROP_NAME, LOGIN_EVENT_NAME, - READY_PROP_NAME, + ON_READY_PROP_NAME, LOGOUT_EVENT_NAME } from 'jsonql-constants' @@ -71,12 +72,13 @@ test.serial('It should able to create the WebSocket client object', t => { t.truthy(client) t.true(typeof client.pinging === 'function') /// test individual properties - t.truthy( Object.getOwnPropertyDescriptor(client.pinging, ERROR_PROP_NAME), `has ${ERROR_PROP_NAME} prop`) - t.truthy( Object.getOwnPropertyDescriptor(client.pinging, MESSAGE_PROP_NAME), `has ${MESSAGE_PROP_NAME} prop`) - t.truthy( Object.getOwnPropertyDescriptor(client.pinging, RESULT_PROP_NAME), `has ${RESULT_PROP_NAME} prop`) + t.truthy( Object.getOwnPropertyDescriptor(client.pinging, ON_ERROR_PROP_NAME), `has ${ON_ERROR_PROP_NAME} prop`) + t.truthy( Object.getOwnPropertyDescriptor(client.pinging, ON_MESSAGE_PROP_NAME), `has ${ON_MESSAGE_PROP_NAME} prop`) + t.truthy( Object.getOwnPropertyDescriptor(client.pinging, ON_RESULT_PROP_NAME), `has ${ON_RESULT_PROP_NAME} prop`) t.truthy( Object.getOwnPropertyDescriptor(client.pinging, SEND_MSG_PROP_NAME), `has ${SEND_MSG_PROP_NAME} prop`) - t.truthy( Object.getOwnPropertyDescriptor(client, READY_PROP_NAME), `the client object should have ${READY_PROP_NAME} prop`) + t.truthy( Object.getOwnPropertyDescriptor(client, ON_READY_PROP_NAME), `the client object should have ${ON_READY_PROP_NAME} prop`) + t.truthy( Object.getOwnPropertyDescriptor(client, ON_LOGIN_PROP_NAME), `the client object should have ${ON_LOGIN_PROP_NAME} prop`) }) @@ -101,10 +103,10 @@ test.serial.cb('The ws client can connect to the WebSocket server public interfa t.pass() } - debug(`${MESSAGE_PROP_NAME}`) + debug(`${ON_MESSAGE_PROP_NAME}`) client.pinging.onMessage = function testOnMessageCallback(msg) { ++ctn; - debug(`[${ctn}] ${MESSAGE_PROP_NAME}`, msg) + debug(`[${ctn}] ${ON_MESSAGE_PROP_NAME}`, msg) t.pass() t.end() } diff --git a/packages/ws-server/src/share/add-property.js b/packages/ws-server/src/share/add-property.js index 46a331dde54ea2464bc715b9d2811d64c3e73481..e4a2f7c92278e24a1d7fb2274a097c54be86f6e1 100644 --- a/packages/ws-server/src/share/add-property.js +++ b/packages/ws-server/src/share/add-property.js @@ -3,7 +3,7 @@ const _ = require('lodash') const { EMIT_REPLY_TYPE, SEND_MSG_PROP_NAME, - MESSAGE_PROP_NAME, + ON_MESSAGE_PROP_NAME, JS_WS_NAME } = require('jsonql-constants') // @BUG it's weird this file is not here but no error was throw @@ -16,11 +16,11 @@ const debug = getDebug(`addProperty`) /* @TODO is this necessary? -resolver = addHandlerProperty(resolver, MESSAGE_PROP_NAME, function(handler) { +resolver = addHandlerProperty(resolver, ON_MESSAGE_PROP_NAME, function(handler) { if (handler && typeof handler === 'function') { } - throw new JsonqlError(resolverName, {message: `Require ${MESSAGE_PROP_NAME} to be a function!`}) + throw new JsonqlError(resolverName, {message: `Require ${ON_MESSAGE_PROP_NAME} to be a function!`}) }, nil) */