@next-core/easyops-runtime 0.12.41 → 0.12.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/websocket/MessageDispatcher.js +1 -1
- package/dist/cjs/websocket/MessageDispatcher.js.map +1 -1
- package/dist/esm/websocket/MessageDispatcher.js +1 -1
- package/dist/esm/websocket/MessageDispatcher.js.map +1 -1
- package/dist/types/websocket/MessageDispatcher.d.ts +1 -1
- package/package.json +3 -3
|
@@ -51,7 +51,7 @@ class MessageDispatcher {
|
|
|
51
51
|
onMessage(channel, listener) {
|
|
52
52
|
let stringifiedPayload = (0, _classPrivateFieldGet3.default)(_channelPayloads, this).get(channel);
|
|
53
53
|
let warned = false;
|
|
54
|
-
(0, _classPrivateGetter2.default)(_MessageDispatcher_brand, this, _get_ms).onMessage(response => {
|
|
54
|
+
return (0, _classPrivateGetter2.default)(_MessageDispatcher_brand, this, _get_ms).onMessage(response => {
|
|
55
55
|
if (!stringifiedPayload) {
|
|
56
56
|
stringifiedPayload = (0, _classPrivateFieldGet3.default)(_channelPayloads, this).get(channel);
|
|
57
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageDispatcher.js","names":["_runtime","require","_lodash","_MessageService","_ms","WeakMap","_memoizedChannels","_channelPayloads","_MessageDispatcher_brand","WeakSet","MessageDispatcher","constructor","_classPrivateMethodInitSpec2","default","_classPrivateFieldInitSpec2","sub","Map","unsub","subscribe","channel","payload","stringifiedPayload","JSON","stringify","_assertClassBrand2","_subOrUnsub","call","unsubscribe","_classPrivateFieldGet3","get","msg","console","error","Promise","reject","Error","parse","result","delete","then","onMessage","listener","warned","_classPrivateGetter2","_get_ms","response","event","matchMessageChannel","message","onClose","reset","_classPrivateFieldGet2","clear","exports","_this","protocol","location","url","window","host","getBasePath","_classPrivateFieldSet2","MessageService","type","hit","request","promise","resolve","identity","getIdentity","disposeOnMessage","isSuccess","isFailed","disposeOnClose","retryCount","RETRY_LIMIT","send","set","system","topic","responsePayload","includes","RegExp","replace","_m","p1","p2","escapeRegExp","test"],"sources":["../../../src/websocket/MessageDispatcher.ts"],"sourcesContent":["import { getBasePath } from \"@next-core/runtime\";\nimport { escapeRegExp } from \"lodash\";\nimport {\n MessageService,\n type MessageListener,\n CloseListener,\n RETRY_LIMIT,\n} from \"./MessageService.js\";\n\ninterface MessageResponse {\n event:\n | \"TOPIC.SUB_SUCCESS\"\n | \"TOPIC.SUB_FAILED\"\n | \"TOPIC.UNSUB_SUCCESS\"\n | \"TOPIC.UNSUB_FAILED\"\n | \"MESSAGE.PUSH\";\n payload: MessagePayload;\n}\n\ninterface MessagePayload {\n source?: string;\n system: string;\n topic: string;\n message?: unknown;\n}\n\nexport class MessageDispatcher {\n #_ms: MessageService | undefined;\n #memoizedChannels = {\n sub: new Map<string, Promise<unknown>>(),\n unsub: new Map<string, Promise<unknown>>(),\n };\n #channelPayloads = new Map<string, string>();\n\n get #ms(): MessageService {\n if (!this.#_ms) {\n const protocol = location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const url = `${protocol}//${\n window.location.host\n }${getBasePath()}api/websocket_service/v1/ws`;\n this.#_ms = new MessageService(url);\n }\n return this.#_ms;\n }\n\n subscribe(channel: string, payload: MessagePayload): Promise<unknown> {\n const stringifiedPayload = JSON.stringify(payload);\n return this.#subOrUnsub(\"sub\", channel, payload, stringifiedPayload);\n }\n\n unsubscribe(channel: string): Promise<unknown> {\n const stringifiedPayload = this.#channelPayloads.get(channel);\n if (!stringifiedPayload) {\n const msg = `The message channel to unsubscribe \"${channel}\" is not found`;\n // eslint-disable-next-line no-console\n console.error(msg);\n return Promise.reject(new Error(msg));\n }\n\n const payload = JSON.parse(stringifiedPayload);\n const result = this.#subOrUnsub(\n \"unsub\",\n channel,\n payload,\n stringifiedPayload\n );\n\n this.#memoizedChannels.sub.delete(stringifiedPayload);\n\n result.then(() => {\n this.#channelPayloads.delete(channel);\n });\n\n return result;\n }\n\n onMessage(channel: string, listener: MessageListener): void {\n let stringifiedPayload = this.#channelPayloads.get(channel);\n let warned = false;\n\n this.#ms.onMessage<MessageResponse>((response) => {\n if (!stringifiedPayload) {\n stringifiedPayload = this.#channelPayloads.get(channel);\n }\n if (!stringifiedPayload) {\n if (!warned) {\n // eslint-disable-next-line no-console\n console.error(`Message channel: \"${channel}\" not found`);\n warned = true;\n }\n return;\n }\n if (\n response.event === \"MESSAGE.PUSH\" &&\n matchMessageChannel(stringifiedPayload, response.payload)\n ) {\n listener(response.payload.message);\n }\n });\n }\n\n onClose(listener: CloseListener) {\n return this.#ms.onClose(listener);\n }\n\n reset(): void {\n this.#memoizedChannels.sub.clear();\n this.#memoizedChannels.unsub.clear();\n this.#channelPayloads.clear();\n this.#_ms?.reset();\n }\n\n #subOrUnsub(\n type: \"sub\" | \"unsub\",\n channel: string,\n payload: MessagePayload,\n stringifiedPayload: string\n ): Promise<unknown> {\n const hit = this.#memoizedChannels[type].get(stringifiedPayload);\n if (hit) {\n return hit;\n }\n const request = {\n event: type === \"sub\" ? \"TOPIC.SUB\" : \"TOPIC.UNSUB\",\n payload,\n };\n const promise = new Promise((resolve, reject) => {\n const identity = getIdentity(payload);\n const disposeOnMessage = this.#ms.onMessage<MessageResponse>(\n (response) => {\n const isSuccess =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_SUCCESS\" : \"TOPIC.UNSUB_SUCCESS\");\n const isFailed =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_FAILED\" : \"TOPIC.UNSUB_FAILED\");\n if (\n (isSuccess || isFailed) &&\n // Put this after event type checks, to prevent unnecessary\n // JSON stringify.\n identity === getIdentity(response.payload)\n ) {\n (isSuccess ? resolve : reject)(response);\n disposeOnMessage();\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n disposeOnClose();\n }\n }\n );\n // istanbul ignore next: currently can't mock this\n const disposeOnClose = this.#ms.onClose(() => {\n // V2 will emit error callback for sub/unsub each time connect failed,\n // while v3 will emit only once after retry limit exceeded.\n // Keep the `EVENT.detail.retryCount` for compatibility.\n reject({\n retryCount: RETRY_LIMIT,\n });\n disposeOnMessage();\n disposeOnClose();\n });\n this.#ms.send(request);\n });\n\n if (type === \"sub\") {\n this.#channelPayloads.set(channel, stringifiedPayload);\n }\n this.#memoizedChannels[type].set(stringifiedPayload, promise);\n return promise;\n }\n}\n\nfunction getIdentity(payload: MessagePayload) {\n const { system, topic } = payload;\n return JSON.stringify({ system, topic });\n}\n\nfunction matchMessageChannel(\n stringifiedPayload: string,\n responsePayload: MessagePayload\n): boolean {\n const payload = JSON.parse(stringifiedPayload) as MessagePayload;\n return (\n payload.system === responsePayload.system &&\n // Exact match\n (payload.topic === responsePayload.topic ||\n // Wildcards match\n // For `ab.cd.*`:\n // - Matches `ab.cd.r` or `ab.cd.x.yz`\n // - DOES NOT match `ab.cd.x/yz` or `ab.x.cd` or `x.ab.cd.yz`\n (typeof payload.topic === \"string\" &&\n payload.topic.includes(\"*\") &&\n new RegExp(\n `^${payload.topic.replace(\n /([^*]*)\\*([^*]*)/g,\n (_m, p1, p2) => `${escapeRegExp(p1)}[^/]*${escapeRegExp(p2)}`\n )}$`\n ).test(responsePayload.topic)))\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AAK6B,IAAAG,GAAA,oBAAAC,OAAA;AAAA,IAAAC,iBAAA,oBAAAD,OAAA;AAAA,IAAAE,gBAAA,oBAAAF,OAAA;AAAA,IAAAG,wBAAA,oBAAAC,OAAA;AAmBtB,MAAMC,iBAAiB,CAAC;EAAAC,YAAA;IAAA,IAAAC,4BAAA,CAAAC,OAAA,QAAAL,wBAAA;IAC7B,IAAAM,2BAAA,CAAAD,OAAA,QAAAT,GAAI;IACJ,IAAAU,2BAAA,CAAAD,OAAA,QAAAP,iBAAiB,EAAG;MAClBS,GAAG,EAAE,IAAIC,GAAG,CAA2B,CAAC;MACxCC,KAAK,EAAE,IAAID,GAAG,CAA2B;IAC3C,CAAC;IACD,IAAAF,2BAAA,CAAAD,OAAA,QAAAN,gBAAgB,EAAG,IAAIS,GAAG,CAAiB,CAAC;EAAC;EAa7CE,SAASA,CAACC,OAAe,EAAEC,OAAuB,EAAoB;IACpE,MAAMC,kBAAkB,GAAGC,IAAI,CAACC,SAAS,CAACH,OAAO,CAAC;IAClD,OAAO,IAAAI,kBAAA,CAAAX,OAAA,EAAAL,wBAAA,MAAI,EAACiB,WAAU,CAAC,CAAAC,IAAA,CAAhB,IAAI,EAAa,KAAK,EAAEP,OAAO,EAAEC,OAAO,EAAEC,kBAAkB;EACrE;EAEAM,WAAWA,CAACR,OAAe,EAAoB;IAC7C,MAAME,kBAAkB,GAAG,IAAAO,sBAAA,CAAAf,OAAA,EAAKN,gBAAgB,EAArB,IAAoB,CAAC,CAACsB,GAAG,CAACV,OAAO,CAAC;IAC7D,IAAI,CAACE,kBAAkB,EAAE;MACvB,MAAMS,GAAG,GAAG,uCAAuCX,OAAO,gBAAgB;MAC1E;MACAY,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC;MAClB,OAAOG,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAACL,GAAG,CAAC,CAAC;IACvC;IAEA,MAAMV,OAAO,GAAGE,IAAI,CAACc,KAAK,CAACf,kBAAkB,CAAC;IAC9C,MAAMgB,MAAM,GAAG,IAAAb,kBAAA,CAAAX,OAAA,EAAAL,wBAAA,MAAI,EAACiB,WAAU,CAAC,CAAAC,IAAA,CAAhB,IAAI,EACjB,OAAO,EACPP,OAAO,EACPC,OAAO,EACPC,kBAAkB,CACnB;IAED,IAAAO,sBAAA,CAAAf,OAAA,EAAKP,iBAAiB,EAAtB,IAAqB,CAAC,CAACS,GAAG,CAACuB,MAAM,CAACjB,kBAAkB,CAAC;IAErDgB,MAAM,CAACE,IAAI,CAAC,MAAM;MAChB,IAAAX,sBAAA,CAAAf,OAAA,EAAKN,gBAAgB,EAArB,IAAoB,CAAC,CAAC+B,MAAM,CAACnB,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOkB,MAAM;EACf;EAEAG,SAASA,CAACrB,OAAe,EAAEsB,QAAyB,EAAQ;IAC1D,IAAIpB,kBAAkB,GAAG,IAAAO,sBAAA,CAAAf,OAAA,EAAKN,gBAAgB,EAArB,IAAoB,CAAC,CAACsB,GAAG,CAACV,OAAO,CAAC;IAC3D,IAAIuB,MAAM,GAAG,KAAK;IAElB,IAAAC,oBAAA,CAAA9B,OAAA,EAAAL,wBAAA,MAAI,EAACoC,OAAE,CAAC,CAACJ,SAAS,CAAmBK,QAAQ,IAAK;MAChD,IAAI,CAACxB,kBAAkB,EAAE;QACvBA,kBAAkB,GAAG,IAAAO,sBAAA,CAAAf,OAAA,EAAKN,gBAAgB,EAArB,IAAoB,CAAC,CAACsB,GAAG,CAACV,OAAO,CAAC;MACzD;MACA,IAAI,CAACE,kBAAkB,EAAE;QACvB,IAAI,CAACqB,MAAM,EAAE;UACX;UACAX,OAAO,CAACC,KAAK,CAAC,qBAAqBb,OAAO,aAAa,CAAC;UACxDuB,MAAM,GAAG,IAAI;QACf;QACA;MACF;MACA,IACEG,QAAQ,CAACC,KAAK,KAAK,cAAc,IACjCC,mBAAmB,CAAC1B,kBAAkB,EAAEwB,QAAQ,CAACzB,OAAO,CAAC,EACzD;QACAqB,QAAQ,CAACI,QAAQ,CAACzB,OAAO,CAAC4B,OAAO,CAAC;MACpC;IACF,CAAC,CAAC;EACJ;EAEAC,OAAOA,CAACR,QAAuB,EAAE;IAC/B,OAAO,IAAAE,oBAAA,CAAA9B,OAAA,EAAAL,wBAAA,MAAI,EAACoC,OAAE,CAAC,CAACK,OAAO,CAACR,QAAQ,CAAC;EACnC;EAEAS,KAAKA,CAAA,EAAS;IAAA,IAAAC,sBAAA;IACZ,IAAAvB,sBAAA,CAAAf,OAAA,EAAKP,iBAAiB,EAAtB,IAAqB,CAAC,CAACS,GAAG,CAACqC,KAAK,CAAC,CAAC;IAClC,IAAAxB,sBAAA,CAAAf,OAAA,EAAKP,iBAAiB,EAAtB,IAAqB,CAAC,CAACW,KAAK,CAACmC,KAAK,CAAC,CAAC;IACpC,IAAAxB,sBAAA,CAAAf,OAAA,EAAKN,gBAAgB,EAArB,IAAoB,CAAC,CAAC6C,KAAK,CAAC,CAAC;IAC7B,CAAAD,sBAAA,OAAAvB,sBAAA,CAAAf,OAAA,EAAKT,GAAI,EAAT,IAAQ,CAAC,cAAA+C,sBAAA,eAATA,sBAAA,CAAWD,KAAK,CAAC,CAAC;EACpB;AA2DF;AAACG,OAAA,CAAA3C,iBAAA,GAAAA,iBAAA;AAAA,SAAAkC,QAAAU,KAAA,EAvI2B;EACxB,IAAI,CAAC,IAAA1B,sBAAA,CAAAf,OAAA,EAAKT,GAAI,EAAAkD,KAAD,CAAC,EAAE;IACd,MAAMC,QAAQ,GAAGC,QAAQ,CAACD,QAAQ,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK;IAChE,MAAME,GAAG,GAAG,GAAGF,QAAQ,KACrBG,MAAM,CAACF,QAAQ,CAACG,IAAI,GACnB,IAAAC,oBAAW,EAAC,CAAC,6BAA6B;IAC7C,IAAAC,sBAAA,CAAAhD,OAAA,EAAKT,GAAI,EAAAkD,KAAA,EAAG,IAAIQ,8BAAc,CAACL,GAAG,CAA1B,CAAC;EACX;EACA,OAAO,IAAA7B,sBAAA,CAAAf,OAAA,EAAKT,GAAI,EAAAkD,KAAD,CAAC;AAClB;AAAC,SAAA7B,YAsECsC,IAAqB,EACrB5C,OAAe,EACfC,OAAuB,EACvBC,kBAA0B,EACR;EAClB,MAAM2C,GAAG,GAAG,IAAApC,sBAAA,CAAAf,OAAA,EAAKP,iBAAiB,EAAtB,IAAqB,CAAC,CAACyD,IAAI,CAAC,CAAClC,GAAG,CAACR,kBAAkB,CAAC;EAChE,IAAI2C,GAAG,EAAE;IACP,OAAOA,GAAG;EACZ;EACA,MAAMC,OAAO,GAAG;IACdnB,KAAK,EAAEiB,IAAI,KAAK,KAAK,GAAG,WAAW,GAAG,aAAa;IACnD3C;EACF,CAAC;EACD,MAAM8C,OAAO,GAAG,IAAIjC,OAAO,CAAC,CAACkC,OAAO,EAAEjC,MAAM,KAAK;IAC/C,MAAMkC,QAAQ,GAAGC,WAAW,CAACjD,OAAO,CAAC;IACrC,MAAMkD,gBAAgB,GAAG,IAAA3B,oBAAA,CAAA9B,OAAA,EAAAL,wBAAA,MAAI,EAACoC,OAAE,CAAC,CAACJ,SAAS,CACxCK,QAAQ,IAAK;MACZ,MAAM0B,SAAS,GACb1B,QAAQ,CAACC,KAAK,MACbiB,IAAI,KAAK,KAAK,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;MAChE,MAAMS,QAAQ,GACZ3B,QAAQ,CAACC,KAAK,MACbiB,IAAI,KAAK,KAAK,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;MAC9D,IACE,CAACQ,SAAS,IAAIC,QAAQ;MACtB;MACA;MACAJ,QAAQ,KAAKC,WAAW,CAACxB,QAAQ,CAACzB,OAAO,CAAC,EAC1C;QACA,CAACmD,SAAS,GAAGJ,OAAO,GAAGjC,MAAM,EAAEW,QAAQ,CAAC;QACxCyB,gBAAgB,CAAC,CAAC;QAClB;QACAG,cAAc,CAAC,CAAC;MAClB;IACF,CACF,CAAC;IACD;IACA,MAAMA,cAAc,GAAG,IAAA9B,oBAAA,CAAA9B,OAAA,EAAAL,wBAAA,MAAI,EAACoC,OAAE,CAAC,CAACK,OAAO,CAAC,MAAM;MAC5C;MACA;MACA;MACAf,MAAM,CAAC;QACLwC,UAAU,EAAEC;MACd,CAAC,CAAC;MACFL,gBAAgB,CAAC,CAAC;MAClBG,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,IAAA9B,oBAAA,CAAA9B,OAAA,EAAAL,wBAAA,MAAI,EAACoC,OAAE,CAAC,CAACgC,IAAI,CAACX,OAAO,CAAC;EACxB,CAAC,CAAC;EAEF,IAAIF,IAAI,KAAK,KAAK,EAAE;IAClB,IAAAnC,sBAAA,CAAAf,OAAA,EAAKN,gBAAgB,EAArB,IAAoB,CAAC,CAACsE,GAAG,CAAC1D,OAAO,EAAEE,kBAAkB,CAAC;EACxD;EACA,IAAAO,sBAAA,CAAAf,OAAA,EAAKP,iBAAiB,EAAtB,IAAqB,CAAC,CAACyD,IAAI,CAAC,CAACc,GAAG,CAACxD,kBAAkB,EAAE6C,OAAO,CAAC;EAC7D,OAAOA,OAAO;AAChB;AAGF,SAASG,WAAWA,CAACjD,OAAuB,EAAE;EAC5C,MAAM;IAAE0D,MAAM;IAAEC;EAAM,CAAC,GAAG3D,OAAO;EACjC,OAAOE,IAAI,CAACC,SAAS,CAAC;IAAEuD,MAAM;IAAEC;EAAM,CAAC,CAAC;AAC1C;AAEA,SAAShC,mBAAmBA,CAC1B1B,kBAA0B,EAC1B2D,eAA+B,EACtB;EACT,MAAM5D,OAAO,GAAGE,IAAI,CAACc,KAAK,CAACf,kBAAkB,CAAmB;EAChE,OACED,OAAO,CAAC0D,MAAM,KAAKE,eAAe,CAACF,MAAM;EACzC;EACC1D,OAAO,CAAC2D,KAAK,KAAKC,eAAe,CAACD,KAAK;EACtC;EACA;EACA;EACA;EACC,OAAO3D,OAAO,CAAC2D,KAAK,KAAK,QAAQ,IAChC3D,OAAO,CAAC2D,KAAK,CAACE,QAAQ,CAAC,GAAG,CAAC,IAC3B,IAAIC,MAAM,CACR,IAAI9D,OAAO,CAAC2D,KAAK,CAACI,OAAO,CACvB,mBAAmB,EACnB,CAACC,EAAE,EAAEC,EAAE,EAAEC,EAAE,KAAK,GAAG,IAAAC,oBAAY,EAACF,EAAE,CAAC,QAAQ,IAAAE,oBAAY,EAACD,EAAE,CAAC,EAC7D,CAAC,GACH,CAAC,CAACE,IAAI,CAACR,eAAe,CAACD,KAAK,CAAE,CAAC;AAEvC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MessageDispatcher.js","names":["_runtime","require","_lodash","_MessageService","_ms","WeakMap","_memoizedChannels","_channelPayloads","_MessageDispatcher_brand","WeakSet","MessageDispatcher","constructor","_classPrivateMethodInitSpec2","default","_classPrivateFieldInitSpec2","sub","Map","unsub","subscribe","channel","payload","stringifiedPayload","JSON","stringify","_assertClassBrand2","_subOrUnsub","call","unsubscribe","_classPrivateFieldGet3","get","msg","console","error","Promise","reject","Error","parse","result","delete","then","onMessage","listener","warned","_classPrivateGetter2","_get_ms","response","event","matchMessageChannel","message","onClose","reset","_classPrivateFieldGet2","clear","exports","_this","protocol","location","url","window","host","getBasePath","_classPrivateFieldSet2","MessageService","type","hit","request","promise","resolve","identity","getIdentity","disposeOnMessage","isSuccess","isFailed","disposeOnClose","retryCount","RETRY_LIMIT","send","set","system","topic","responsePayload","includes","RegExp","replace","_m","p1","p2","escapeRegExp","test"],"sources":["../../../src/websocket/MessageDispatcher.ts"],"sourcesContent":["import { getBasePath } from \"@next-core/runtime\";\nimport { escapeRegExp } from \"lodash\";\nimport {\n MessageService,\n type MessageListener,\n CloseListener,\n RETRY_LIMIT,\n} from \"./MessageService.js\";\n\ninterface MessageResponse {\n event:\n | \"TOPIC.SUB_SUCCESS\"\n | \"TOPIC.SUB_FAILED\"\n | \"TOPIC.UNSUB_SUCCESS\"\n | \"TOPIC.UNSUB_FAILED\"\n | \"MESSAGE.PUSH\";\n payload: MessagePayload;\n}\n\ninterface MessagePayload {\n source?: string;\n system: string;\n topic: string;\n message?: unknown;\n}\n\nexport class MessageDispatcher {\n #_ms: MessageService | undefined;\n #memoizedChannels = {\n sub: new Map<string, Promise<unknown>>(),\n unsub: new Map<string, Promise<unknown>>(),\n };\n #channelPayloads = new Map<string, string>();\n\n get #ms(): MessageService {\n if (!this.#_ms) {\n const protocol = location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const url = `${protocol}//${\n window.location.host\n }${getBasePath()}api/websocket_service/v1/ws`;\n this.#_ms = new MessageService(url);\n }\n return this.#_ms;\n }\n\n subscribe(channel: string, payload: MessagePayload): Promise<unknown> {\n const stringifiedPayload = JSON.stringify(payload);\n return this.#subOrUnsub(\"sub\", channel, payload, stringifiedPayload);\n }\n\n unsubscribe(channel: string): Promise<unknown> {\n const stringifiedPayload = this.#channelPayloads.get(channel);\n if (!stringifiedPayload) {\n const msg = `The message channel to unsubscribe \"${channel}\" is not found`;\n // eslint-disable-next-line no-console\n console.error(msg);\n return Promise.reject(new Error(msg));\n }\n\n const payload = JSON.parse(stringifiedPayload);\n const result = this.#subOrUnsub(\n \"unsub\",\n channel,\n payload,\n stringifiedPayload\n );\n\n this.#memoizedChannels.sub.delete(stringifiedPayload);\n\n result.then(() => {\n this.#channelPayloads.delete(channel);\n });\n\n return result;\n }\n\n onMessage(channel: string, listener: MessageListener) {\n let stringifiedPayload = this.#channelPayloads.get(channel);\n let warned = false;\n\n return this.#ms.onMessage<MessageResponse>((response) => {\n if (!stringifiedPayload) {\n stringifiedPayload = this.#channelPayloads.get(channel);\n }\n if (!stringifiedPayload) {\n if (!warned) {\n // eslint-disable-next-line no-console\n console.error(`Message channel: \"${channel}\" not found`);\n warned = true;\n }\n return;\n }\n if (\n response.event === \"MESSAGE.PUSH\" &&\n matchMessageChannel(stringifiedPayload, response.payload)\n ) {\n listener(response.payload.message);\n }\n });\n }\n\n onClose(listener: CloseListener) {\n return this.#ms.onClose(listener);\n }\n\n reset(): void {\n this.#memoizedChannels.sub.clear();\n this.#memoizedChannels.unsub.clear();\n this.#channelPayloads.clear();\n this.#_ms?.reset();\n }\n\n #subOrUnsub(\n type: \"sub\" | \"unsub\",\n channel: string,\n payload: MessagePayload,\n stringifiedPayload: string\n ): Promise<unknown> {\n const hit = this.#memoizedChannels[type].get(stringifiedPayload);\n if (hit) {\n return hit;\n }\n const request = {\n event: type === \"sub\" ? \"TOPIC.SUB\" : \"TOPIC.UNSUB\",\n payload,\n };\n const promise = new Promise((resolve, reject) => {\n const identity = getIdentity(payload);\n const disposeOnMessage = this.#ms.onMessage<MessageResponse>(\n (response) => {\n const isSuccess =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_SUCCESS\" : \"TOPIC.UNSUB_SUCCESS\");\n const isFailed =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_FAILED\" : \"TOPIC.UNSUB_FAILED\");\n if (\n (isSuccess || isFailed) &&\n // Put this after event type checks, to prevent unnecessary\n // JSON stringify.\n identity === getIdentity(response.payload)\n ) {\n (isSuccess ? resolve : reject)(response);\n disposeOnMessage();\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n disposeOnClose();\n }\n }\n );\n // istanbul ignore next: currently can't mock this\n const disposeOnClose = this.#ms.onClose(() => {\n // V2 will emit error callback for sub/unsub each time connect failed,\n // while v3 will emit only once after retry limit exceeded.\n // Keep the `EVENT.detail.retryCount` for compatibility.\n reject({\n retryCount: RETRY_LIMIT,\n });\n disposeOnMessage();\n disposeOnClose();\n });\n this.#ms.send(request);\n });\n\n if (type === \"sub\") {\n this.#channelPayloads.set(channel, stringifiedPayload);\n }\n this.#memoizedChannels[type].set(stringifiedPayload, promise);\n return promise;\n }\n}\n\nfunction getIdentity(payload: MessagePayload) {\n const { system, topic } = payload;\n return JSON.stringify({ system, topic });\n}\n\nfunction matchMessageChannel(\n stringifiedPayload: string,\n responsePayload: MessagePayload\n): boolean {\n const payload = JSON.parse(stringifiedPayload) as MessagePayload;\n return (\n payload.system === responsePayload.system &&\n // Exact match\n (payload.topic === responsePayload.topic ||\n // Wildcards match\n // For `ab.cd.*`:\n // - Matches `ab.cd.r` or `ab.cd.x.yz`\n // - DOES NOT match `ab.cd.x/yz` or `ab.x.cd` or `x.ab.cd.yz`\n (typeof payload.topic === \"string\" &&\n payload.topic.includes(\"*\") &&\n new RegExp(\n `^${payload.topic.replace(\n /([^*]*)\\*([^*]*)/g,\n (_m, p1, p2) => `${escapeRegExp(p1)}[^/]*${escapeRegExp(p2)}`\n )}$`\n ).test(responsePayload.topic)))\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -44,7 +44,7 @@ export class MessageDispatcher {
|
|
|
44
44
|
onMessage(channel, listener) {
|
|
45
45
|
let stringifiedPayload = _classPrivateFieldGet(_channelPayloads, this).get(channel);
|
|
46
46
|
let warned = false;
|
|
47
|
-
_classPrivateGetter(_MessageDispatcher_brand, this, _get_ms).onMessage(response => {
|
|
47
|
+
return _classPrivateGetter(_MessageDispatcher_brand, this, _get_ms).onMessage(response => {
|
|
48
48
|
if (!stringifiedPayload) {
|
|
49
49
|
stringifiedPayload = _classPrivateFieldGet(_channelPayloads, this).get(channel);
|
|
50
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageDispatcher.js","names":["getBasePath","escapeRegExp","MessageService","RETRY_LIMIT","_ms","WeakMap","_memoizedChannels","_channelPayloads","_MessageDispatcher_brand","WeakSet","MessageDispatcher","constructor","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","sub","Map","unsub","subscribe","channel","payload","stringifiedPayload","JSON","stringify","_assertClassBrand","_subOrUnsub","call","unsubscribe","_classPrivateFieldGet","get","msg","console","error","Promise","reject","Error","parse","result","delete","then","onMessage","listener","warned","_classPrivateGetter","_get_ms","response","event","matchMessageChannel","message","onClose","reset","_classPrivateFieldGet2","clear","_this","protocol","location","url","window","host","_classPrivateFieldSet","type","hit","request","promise","resolve","identity","getIdentity","disposeOnMessage","isSuccess","isFailed","disposeOnClose","retryCount","send","set","system","topic","responsePayload","includes","RegExp","replace","_m","p1","p2","test"],"sources":["../../../src/websocket/MessageDispatcher.ts"],"sourcesContent":["import { getBasePath } from \"@next-core/runtime\";\nimport { escapeRegExp } from \"lodash\";\nimport {\n MessageService,\n type MessageListener,\n CloseListener,\n RETRY_LIMIT,\n} from \"./MessageService.js\";\n\ninterface MessageResponse {\n event:\n | \"TOPIC.SUB_SUCCESS\"\n | \"TOPIC.SUB_FAILED\"\n | \"TOPIC.UNSUB_SUCCESS\"\n | \"TOPIC.UNSUB_FAILED\"\n | \"MESSAGE.PUSH\";\n payload: MessagePayload;\n}\n\ninterface MessagePayload {\n source?: string;\n system: string;\n topic: string;\n message?: unknown;\n}\n\nexport class MessageDispatcher {\n #_ms: MessageService | undefined;\n #memoizedChannels = {\n sub: new Map<string, Promise<unknown>>(),\n unsub: new Map<string, Promise<unknown>>(),\n };\n #channelPayloads = new Map<string, string>();\n\n get #ms(): MessageService {\n if (!this.#_ms) {\n const protocol = location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const url = `${protocol}//${\n window.location.host\n }${getBasePath()}api/websocket_service/v1/ws`;\n this.#_ms = new MessageService(url);\n }\n return this.#_ms;\n }\n\n subscribe(channel: string, payload: MessagePayload): Promise<unknown> {\n const stringifiedPayload = JSON.stringify(payload);\n return this.#subOrUnsub(\"sub\", channel, payload, stringifiedPayload);\n }\n\n unsubscribe(channel: string): Promise<unknown> {\n const stringifiedPayload = this.#channelPayloads.get(channel);\n if (!stringifiedPayload) {\n const msg = `The message channel to unsubscribe \"${channel}\" is not found`;\n // eslint-disable-next-line no-console\n console.error(msg);\n return Promise.reject(new Error(msg));\n }\n\n const payload = JSON.parse(stringifiedPayload);\n const result = this.#subOrUnsub(\n \"unsub\",\n channel,\n payload,\n stringifiedPayload\n );\n\n this.#memoizedChannels.sub.delete(stringifiedPayload);\n\n result.then(() => {\n this.#channelPayloads.delete(channel);\n });\n\n return result;\n }\n\n onMessage(channel: string, listener: MessageListener): void {\n let stringifiedPayload = this.#channelPayloads.get(channel);\n let warned = false;\n\n this.#ms.onMessage<MessageResponse>((response) => {\n if (!stringifiedPayload) {\n stringifiedPayload = this.#channelPayloads.get(channel);\n }\n if (!stringifiedPayload) {\n if (!warned) {\n // eslint-disable-next-line no-console\n console.error(`Message channel: \"${channel}\" not found`);\n warned = true;\n }\n return;\n }\n if (\n response.event === \"MESSAGE.PUSH\" &&\n matchMessageChannel(stringifiedPayload, response.payload)\n ) {\n listener(response.payload.message);\n }\n });\n }\n\n onClose(listener: CloseListener) {\n return this.#ms.onClose(listener);\n }\n\n reset(): void {\n this.#memoizedChannels.sub.clear();\n this.#memoizedChannels.unsub.clear();\n this.#channelPayloads.clear();\n this.#_ms?.reset();\n }\n\n #subOrUnsub(\n type: \"sub\" | \"unsub\",\n channel: string,\n payload: MessagePayload,\n stringifiedPayload: string\n ): Promise<unknown> {\n const hit = this.#memoizedChannels[type].get(stringifiedPayload);\n if (hit) {\n return hit;\n }\n const request = {\n event: type === \"sub\" ? \"TOPIC.SUB\" : \"TOPIC.UNSUB\",\n payload,\n };\n const promise = new Promise((resolve, reject) => {\n const identity = getIdentity(payload);\n const disposeOnMessage = this.#ms.onMessage<MessageResponse>(\n (response) => {\n const isSuccess =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_SUCCESS\" : \"TOPIC.UNSUB_SUCCESS\");\n const isFailed =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_FAILED\" : \"TOPIC.UNSUB_FAILED\");\n if (\n (isSuccess || isFailed) &&\n // Put this after event type checks, to prevent unnecessary\n // JSON stringify.\n identity === getIdentity(response.payload)\n ) {\n (isSuccess ? resolve : reject)(response);\n disposeOnMessage();\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n disposeOnClose();\n }\n }\n );\n // istanbul ignore next: currently can't mock this\n const disposeOnClose = this.#ms.onClose(() => {\n // V2 will emit error callback for sub/unsub each time connect failed,\n // while v3 will emit only once after retry limit exceeded.\n // Keep the `EVENT.detail.retryCount` for compatibility.\n reject({\n retryCount: RETRY_LIMIT,\n });\n disposeOnMessage();\n disposeOnClose();\n });\n this.#ms.send(request);\n });\n\n if (type === \"sub\") {\n this.#channelPayloads.set(channel, stringifiedPayload);\n }\n this.#memoizedChannels[type].set(stringifiedPayload, promise);\n return promise;\n }\n}\n\nfunction getIdentity(payload: MessagePayload) {\n const { system, topic } = payload;\n return JSON.stringify({ system, topic });\n}\n\nfunction matchMessageChannel(\n stringifiedPayload: string,\n responsePayload: MessagePayload\n): boolean {\n const payload = JSON.parse(stringifiedPayload) as MessagePayload;\n return (\n payload.system === responsePayload.system &&\n // Exact match\n (payload.topic === responsePayload.topic ||\n // Wildcards match\n // For `ab.cd.*`:\n // - Matches `ab.cd.r` or `ab.cd.x.yz`\n // - DOES NOT match `ab.cd.x/yz` or `ab.x.cd` or `x.ab.cd.yz`\n (typeof payload.topic === \"string\" &&\n payload.topic.includes(\"*\") &&\n new RegExp(\n `^${payload.topic.replace(\n /([^*]*)\\*([^*]*)/g,\n (_m, p1, p2) => `${escapeRegExp(p1)}[^/]*${escapeRegExp(p2)}`\n )}$`\n ).test(responsePayload.topic)))\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MessageDispatcher.js","names":["getBasePath","escapeRegExp","MessageService","RETRY_LIMIT","_ms","WeakMap","_memoizedChannels","_channelPayloads","_MessageDispatcher_brand","WeakSet","MessageDispatcher","constructor","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","sub","Map","unsub","subscribe","channel","payload","stringifiedPayload","JSON","stringify","_assertClassBrand","_subOrUnsub","call","unsubscribe","_classPrivateFieldGet","get","msg","console","error","Promise","reject","Error","parse","result","delete","then","onMessage","listener","warned","_classPrivateGetter","_get_ms","response","event","matchMessageChannel","message","onClose","reset","_classPrivateFieldGet2","clear","_this","protocol","location","url","window","host","_classPrivateFieldSet","type","hit","request","promise","resolve","identity","getIdentity","disposeOnMessage","isSuccess","isFailed","disposeOnClose","retryCount","send","set","system","topic","responsePayload","includes","RegExp","replace","_m","p1","p2","test"],"sources":["../../../src/websocket/MessageDispatcher.ts"],"sourcesContent":["import { getBasePath } from \"@next-core/runtime\";\nimport { escapeRegExp } from \"lodash\";\nimport {\n MessageService,\n type MessageListener,\n CloseListener,\n RETRY_LIMIT,\n} from \"./MessageService.js\";\n\ninterface MessageResponse {\n event:\n | \"TOPIC.SUB_SUCCESS\"\n | \"TOPIC.SUB_FAILED\"\n | \"TOPIC.UNSUB_SUCCESS\"\n | \"TOPIC.UNSUB_FAILED\"\n | \"MESSAGE.PUSH\";\n payload: MessagePayload;\n}\n\ninterface MessagePayload {\n source?: string;\n system: string;\n topic: string;\n message?: unknown;\n}\n\nexport class MessageDispatcher {\n #_ms: MessageService | undefined;\n #memoizedChannels = {\n sub: new Map<string, Promise<unknown>>(),\n unsub: new Map<string, Promise<unknown>>(),\n };\n #channelPayloads = new Map<string, string>();\n\n get #ms(): MessageService {\n if (!this.#_ms) {\n const protocol = location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const url = `${protocol}//${\n window.location.host\n }${getBasePath()}api/websocket_service/v1/ws`;\n this.#_ms = new MessageService(url);\n }\n return this.#_ms;\n }\n\n subscribe(channel: string, payload: MessagePayload): Promise<unknown> {\n const stringifiedPayload = JSON.stringify(payload);\n return this.#subOrUnsub(\"sub\", channel, payload, stringifiedPayload);\n }\n\n unsubscribe(channel: string): Promise<unknown> {\n const stringifiedPayload = this.#channelPayloads.get(channel);\n if (!stringifiedPayload) {\n const msg = `The message channel to unsubscribe \"${channel}\" is not found`;\n // eslint-disable-next-line no-console\n console.error(msg);\n return Promise.reject(new Error(msg));\n }\n\n const payload = JSON.parse(stringifiedPayload);\n const result = this.#subOrUnsub(\n \"unsub\",\n channel,\n payload,\n stringifiedPayload\n );\n\n this.#memoizedChannels.sub.delete(stringifiedPayload);\n\n result.then(() => {\n this.#channelPayloads.delete(channel);\n });\n\n return result;\n }\n\n onMessage(channel: string, listener: MessageListener) {\n let stringifiedPayload = this.#channelPayloads.get(channel);\n let warned = false;\n\n return this.#ms.onMessage<MessageResponse>((response) => {\n if (!stringifiedPayload) {\n stringifiedPayload = this.#channelPayloads.get(channel);\n }\n if (!stringifiedPayload) {\n if (!warned) {\n // eslint-disable-next-line no-console\n console.error(`Message channel: \"${channel}\" not found`);\n warned = true;\n }\n return;\n }\n if (\n response.event === \"MESSAGE.PUSH\" &&\n matchMessageChannel(stringifiedPayload, response.payload)\n ) {\n listener(response.payload.message);\n }\n });\n }\n\n onClose(listener: CloseListener) {\n return this.#ms.onClose(listener);\n }\n\n reset(): void {\n this.#memoizedChannels.sub.clear();\n this.#memoizedChannels.unsub.clear();\n this.#channelPayloads.clear();\n this.#_ms?.reset();\n }\n\n #subOrUnsub(\n type: \"sub\" | \"unsub\",\n channel: string,\n payload: MessagePayload,\n stringifiedPayload: string\n ): Promise<unknown> {\n const hit = this.#memoizedChannels[type].get(stringifiedPayload);\n if (hit) {\n return hit;\n }\n const request = {\n event: type === \"sub\" ? \"TOPIC.SUB\" : \"TOPIC.UNSUB\",\n payload,\n };\n const promise = new Promise((resolve, reject) => {\n const identity = getIdentity(payload);\n const disposeOnMessage = this.#ms.onMessage<MessageResponse>(\n (response) => {\n const isSuccess =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_SUCCESS\" : \"TOPIC.UNSUB_SUCCESS\");\n const isFailed =\n response.event ===\n (type === \"sub\" ? \"TOPIC.SUB_FAILED\" : \"TOPIC.UNSUB_FAILED\");\n if (\n (isSuccess || isFailed) &&\n // Put this after event type checks, to prevent unnecessary\n // JSON stringify.\n identity === getIdentity(response.payload)\n ) {\n (isSuccess ? resolve : reject)(response);\n disposeOnMessage();\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n disposeOnClose();\n }\n }\n );\n // istanbul ignore next: currently can't mock this\n const disposeOnClose = this.#ms.onClose(() => {\n // V2 will emit error callback for sub/unsub each time connect failed,\n // while v3 will emit only once after retry limit exceeded.\n // Keep the `EVENT.detail.retryCount` for compatibility.\n reject({\n retryCount: RETRY_LIMIT,\n });\n disposeOnMessage();\n disposeOnClose();\n });\n this.#ms.send(request);\n });\n\n if (type === \"sub\") {\n this.#channelPayloads.set(channel, stringifiedPayload);\n }\n this.#memoizedChannels[type].set(stringifiedPayload, promise);\n return promise;\n }\n}\n\nfunction getIdentity(payload: MessagePayload) {\n const { system, topic } = payload;\n return JSON.stringify({ system, topic });\n}\n\nfunction matchMessageChannel(\n stringifiedPayload: string,\n responsePayload: MessagePayload\n): boolean {\n const payload = JSON.parse(stringifiedPayload) as MessagePayload;\n return (\n payload.system === responsePayload.system &&\n // Exact match\n (payload.topic === responsePayload.topic ||\n // Wildcards match\n // For `ab.cd.*`:\n // - Matches `ab.cd.r` or `ab.cd.x.yz`\n // - DOES NOT match `ab.cd.x/yz` or `ab.x.cd` or `x.ab.cd.yz`\n (typeof payload.topic === \"string\" &&\n payload.topic.includes(\"*\") &&\n new RegExp(\n `^${payload.topic.replace(\n /([^*]*)\\*([^*]*)/g,\n (_m, p1, p2) => `${escapeRegExp(p1)}[^/]*${escapeRegExp(p2)}`\n )}$`\n ).test(responsePayload.topic)))\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@ export declare class MessageDispatcher {
|
|
|
9
9
|
#private;
|
|
10
10
|
subscribe(channel: string, payload: MessagePayload): Promise<unknown>;
|
|
11
11
|
unsubscribe(channel: string): Promise<unknown>;
|
|
12
|
-
onMessage(channel: string, listener: MessageListener): void;
|
|
12
|
+
onMessage(channel: string, listener: MessageListener): () => void;
|
|
13
13
|
onClose(listener: CloseListener): () => void;
|
|
14
14
|
reset(): void;
|
|
15
15
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-core/easyops-runtime",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.43",
|
|
4
4
|
"homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"repository": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@next-core/cook": "^2.5.3",
|
|
49
49
|
"@next-core/http": "^1.2.8",
|
|
50
50
|
"@next-core/pipes": "^2.0.27",
|
|
51
|
-
"@next-core/runtime": "^1.58.
|
|
51
|
+
"@next-core/runtime": "^1.58.1",
|
|
52
52
|
"@next-core/types": "^1.14.0",
|
|
53
53
|
"@next-core/utils": "^1.7.28",
|
|
54
54
|
"js-yaml": "^3.14.1",
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"jest-websocket-mock": "^2.5.0",
|
|
61
61
|
"whatwg-fetch": "^3.6.20"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "83dc7a4163a5b09fc9a9a1ef0ed101d83c82ffa4"
|
|
64
64
|
}
|