@kcuf/messenger 0.0.1 → 0.0.2

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/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # @kcuf/messenger
2
2
 
3
- 封装 `postMessage`,有可以将 `postMessage` 转化成 `Promise` 的方法。
4
-
5
- 注意:需要使用者自己保证 `Promise`。
3
+ * 🧱 优雅且类型安全的 `postMessage`
4
+ * 😎 可以传递 `Error` 对象
5
+ * 🎯 可以转成 `Promise`
6
+ * 🪁 可以跨 Window 发送事件
6
7
 
7
8
  ## 兼容性
8
9
 
@@ -80,3 +81,7 @@ function useEffectOnMessengerXx(): void {
80
81
  你还是可以用原生的 `addEventListener('messenger', ...)` 来监听,唯一的区别就是你要自己去判断 `e.data.type` 等。
81
82
 
82
83
  同样的,`@kcuf/messenger#on` 也可以接收裸写的 `postMessage({ type, data })`。只不过,你裸写 `postMessage` 很可能漏掉 `targetOrigin`。
84
+
85
+ ### `type` 可否为空字符串?
86
+
87
+ 不可。
@@ -20,9 +20,13 @@ var Messenger = exports.default = /*#__PURE__*/function () {
20
20
  (0, _defineProperty2.default)(this, "messageReceiverMap", {});
21
21
  var thisWindow = (0, _util.getTargetWindow)();
22
22
  thisWindow.addEventListener('message', function (e) {
23
- var _e$data = e.data,
24
- type = _e$data.type,
25
- payload = _e$data.payload;
23
+ var _e$data;
24
+ if (!((_e$data = e.data) !== null && _e$data !== void 0 && _e$data.type)) {
25
+ return;
26
+ }
27
+ var _e$data2 = e.data,
28
+ type = _e$data2.type,
29
+ payload = _e$data2.payload;
26
30
  var _this$getReceivers = _this.getReceivers(type),
27
31
  _this$getReceivers2 = (0, _slicedToArray2.default)(_this$getReceivers, 2),
28
32
  receivers = _this$getReceivers2[0],
@@ -96,9 +100,8 @@ var Messenger = exports.default = /*#__PURE__*/function () {
96
100
  */
97
101
  }, {
98
102
  key: "on",
99
- value:
100
- // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
101
- function on(type, fn) {
103
+ value: function on(type, fn) {
104
+ // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
102
105
  return this.addReceiver(type, fn);
103
106
  }
104
107
 
@@ -107,9 +110,8 @@ var Messenger = exports.default = /*#__PURE__*/function () {
107
110
  */
108
111
  }, {
109
112
  key: "once",
110
- value:
111
- // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
112
- function once(type, fn) {
113
+ value: function once(type, fn) {
114
+ // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
113
115
  return this.addReceiver(type, fn, true);
114
116
  }
115
117
 
@@ -118,10 +120,9 @@ var Messenger = exports.default = /*#__PURE__*/function () {
118
120
  */
119
121
  }, {
120
122
  key: "onPromise",
121
- value:
122
- // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
123
- function onPromise(type, fn) {
123
+ value: function onPromise(type, fn) {
124
124
  var _this3 = this;
125
+ // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
125
126
  return this.on(type, function (payload) {
126
127
  if (!(payload !== null && payload !== void 0 && payload._dismiss_)) {
127
128
  // 得到的 payload 下有 _dismiss_ 参数才响应,否则 pass
@@ -159,6 +160,9 @@ var Messenger = exports.default = /*#__PURE__*/function () {
159
160
  key: "addReceiver",
160
161
  value: function addReceiver(type, fn, once) {
161
162
  var _this4 = this;
163
+ if (typeof fn !== 'function') {
164
+ throw new Error('Messenger:addReceiver: fn is not a function');
165
+ }
162
166
  var receivers = this.messageReceiverMap[type];
163
167
  if (!receivers) {
164
168
  receivers = [];
@@ -14,9 +14,13 @@ var Messenger = /*#__PURE__*/function () {
14
14
  _defineProperty(this, "messageReceiverMap", {});
15
15
  var thisWindow = getTargetWindow();
16
16
  thisWindow.addEventListener('message', function (e) {
17
- var _e$data = e.data,
18
- type = _e$data.type,
19
- payload = _e$data.payload;
17
+ var _e$data;
18
+ if (!((_e$data = e.data) !== null && _e$data !== void 0 && _e$data.type)) {
19
+ return;
20
+ }
21
+ var _e$data2 = e.data,
22
+ type = _e$data2.type,
23
+ payload = _e$data2.payload;
20
24
  var _this$getReceivers = _this.getReceivers(type),
21
25
  _this$getReceivers2 = _slicedToArray(_this$getReceivers, 2),
22
26
  receivers = _this$getReceivers2[0],
@@ -90,9 +94,8 @@ var Messenger = /*#__PURE__*/function () {
90
94
  */
91
95
  }, {
92
96
  key: "on",
93
- value:
94
- // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
95
- function on(type, fn) {
97
+ value: function on(type, fn) {
98
+ // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
96
99
  return this.addReceiver(type, fn);
97
100
  }
98
101
 
@@ -101,9 +104,8 @@ var Messenger = /*#__PURE__*/function () {
101
104
  */
102
105
  }, {
103
106
  key: "once",
104
- value:
105
- // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
106
- function once(type, fn) {
107
+ value: function once(type, fn) {
108
+ // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
107
109
  return this.addReceiver(type, fn, true);
108
110
  }
109
111
 
@@ -112,10 +114,9 @@ var Messenger = /*#__PURE__*/function () {
112
114
  */
113
115
  }, {
114
116
  key: "onPromise",
115
- value:
116
- // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
117
- function onPromise(type, fn) {
117
+ value: function onPromise(type, fn) {
118
118
  var _this3 = this;
119
+ // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters
119
120
  return this.on(type, function (payload) {
120
121
  if (!(payload !== null && payload !== void 0 && payload._dismiss_)) {
121
122
  // 得到的 payload 下有 _dismiss_ 参数才响应,否则 pass
@@ -153,6 +154,9 @@ var Messenger = /*#__PURE__*/function () {
153
154
  key: "addReceiver",
154
155
  value: function addReceiver(type, fn, once) {
155
156
  var _this4 = this;
157
+ if (typeof fn !== 'function') {
158
+ throw new Error('Messenger:addReceiver: fn is not a function');
159
+ }
156
160
  var receivers = this.messageReceiverMap[type];
157
161
  if (!receivers) {
158
162
  receivers = [];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["buildPayloadForPromise","errorToPlain","getTargetWindow","plainToError","Messenger","_this","_classCallCheck","_defineProperty","thisWindow","addEventListener","e","_e$data","data","type","payload","_this$getReceivers","getReceivers","_this$getReceivers2","_slicedToArray","receivers","receiversOnce","forEach","v","fn","removeReceiver","_createClass","key","value","emit","_options$targetOrigin","options","arguments","length","undefined","theWindow","targetWindow","postMessage","targetOrigin","location","origin","emitPromise","_this2","payloadForPromise","Promise","resolve","reject","once","_dismiss_","payloadBack","Error","error","on","addReceiver","onPromise","_this3","then","err","_receiversForType$red","receiversForType","messageReceiverMap","receiversTuple","reduce","result","push","_this4","receiver","index","indexOf","splice","default"],"sources":["../../../src/messenger/index.ts"],"sourcesContent":["import {\n TFnOff,\n IMessageData,\n TMessengerCallback,\n TMessengerReceiverMap,\n IMessengerEmitOptions,\n IMessengerPayloadPromise,\n IMessengerPayloadPromiseBack,\n IMessengerReceiver\n} from '../types';\nimport {\n buildPayloadForPromise,\n errorToPlain,\n getTargetWindow,\n plainToError\n} from '../util';\n\n/**\n * 封装 `postMessage`,全局只有一个监听事件\n */\nexport default class Messenger {\n private messageReceiverMap: TMessengerReceiverMap = {};\n \n constructor() {\n const thisWindow = getTargetWindow();\n \n thisWindow.addEventListener('message', (e: MessageEvent<IMessageData>): void => {\n const {\n data: {\n type,\n payload\n }\n } = e;\n const [receivers, receiversOnce] = this.getReceivers(type);\n \n receivers.forEach(v => v.fn(payload));\n receiversOnce.forEach(v => v.fn(payload));\n \n receiversOnce.forEach(v => this.removeReceiver(type, v));\n });\n }\n \n /**\n * 广播消息,当传入的对象 payload 不是 plain 对象的时候(如 Error、function、DOMElement、JSX 等),这里会报错\n * 「Uncaught DOMException: The object could not be cloned.」或 「DataCloneError: The object could not be cloned.」\n * 这个错误不能吃掉,因为使用者需要同步地知道调用失败了\n */\n emit(type: string): void;\n emit(type: string, payload: undefined, options: IMessengerEmitOptions): void;\n emit<P = unknown>(type: string, payload: P, options?: IMessengerEmitOptions): void; // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n emit(type: string, payload?: unknown, options: IMessengerEmitOptions = {}): void {\n const theWindow = getTargetWindow(options.targetWindow);\n \n theWindow.postMessage({\n type,\n payload\n }, options.targetOrigin ?? theWindow.location.origin);\n }\n \n /**\n * 广播事件,返回 Promise,必须要有 `onPromise` 来承接该事件,否则此 `Promise` 将永远无法结束\n */\n emitPromise<T = void>(type: string): Promise<T>;\n emitPromise<T = void>(type: string, payload: undefined, options: IMessengerEmitOptions): Promise<T>;\n emitPromise<T = void, P = unknown>(type: string, payload: P, options?: IMessengerEmitOptions): Promise<T>; // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n emitPromise<T = void, P = unknown>(type: string, payload?: P, options?: IMessengerEmitOptions): Promise<T> {\n const payloadForPromise = buildPayloadForPromise<P | undefined>(type, payload);\n \n // 触发 `onPromise` 的回调,不要放到 `new Promise` 内部,因为它可能会报错,这个错需要保持是同步的\n this.emit<IMessengerPayloadPromise<P | undefined>>(type, payloadForPromise, options);\n \n return new Promise<T>((resolve, reject) => {\n // `onPromise` 的回调返回的是 `Promise`,它 `resolve` 或 `reject` 都会广播一个以 `_dismiss_` 为类型的 `message`,\n // 这里使用单次订阅是因为这个 `message` 只需要消费一次。\n this.once<IMessengerPayloadPromiseBack<T>>(payloadForPromise._dismiss_, (payloadBack?: IMessengerPayloadPromiseBack<T>): void => {\n if (!payloadBack) { // 一般来说不可能没有 payloadBack,但代码需要严谨\n reject(new Error('Messenger:emitPromise MessengerPayloadPromiseBack is missing.'));\n \n return;\n }\n \n const {\n value,\n error\n } = payloadBack;\n \n if (error) {\n reject(plainToError(error));\n } else {\n resolve(value as T);\n }\n });\n });\n }\n \n /**\n * 注册回调,返回用于注销的方法\n */\n on(type: string, fn: () => void): TFnOff;\n on<P = unknown>(type: string, fn: (payload: P) => void): TFnOff; // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n on(type: string, fn: (payload: unknown) => void): TFnOff {\n return this.addReceiver(type, fn);\n }\n \n /**\n * 注册单次回调,运行一次后将自动注销\n */\n once(type: string, fn: () => void): TFnOff;\n once<P = unknown>(type: string, fn: (payload: P) => void): TFnOff; // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n once<P = unknown>(type: string, fn: (payload: P) => void): TFnOff {\n return this.addReceiver(type, fn, true);\n }\n \n /**\n * 对 emitPromise 对应的 type 进行响应,这里关心的 payload 还是 emitPromise 所传入的 payload\n */\n onPromise<T = void>(type: string, fn: () => T | Promise<T>): TFnOff;\n onPromise<T, P = unknown>(type: string, fn: (payload: P) => T | Promise<T>): TFnOff; // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n onPromise<T, P = unknown>(type: string, fn: (payload: P) => T | Promise<T>): TFnOff {\n return this.on(type, (payload?: IMessengerPayloadPromise<P>) => {\n if (!payload?._dismiss_) { // 得到的 payload 下有 _dismiss_ 参数才响应,否则 pass\n return;\n }\n \n // 这里广播是事件会被 `emitPromise` 方法内部的 once 消化\n Promise.resolve(fn(payload.payload)).then((value: T) => {\n this.emit<IMessengerPayloadPromiseBack<T>>(payload._dismiss_, {\n value\n });\n }, (err: unknown) => {\n this.emit<IMessengerPayloadPromiseBack<T>>(payload._dismiss_, {\n error: errorToPlain(err)\n });\n });\n });\n }\n \n private getReceivers(type: string): [IMessengerReceiver[], IMessengerReceiver[]] {\n const receiversForType = this.messageReceiverMap[type];\n const receiversTuple: [IMessengerReceiver[], IMessengerReceiver[]] = [[], []];\n \n return receiversForType?.reduce((result: [IMessengerReceiver[], IMessengerReceiver[]], v) => {\n if (v.once) {\n result[1].push(v);\n } else {\n result[0].push(v);\n }\n \n return result;\n }, receiversTuple) ?? receiversTuple;\n }\n \n private addReceiver<P>(type: string, fn: TMessengerCallback<P>, once?: boolean): TFnOff {\n let receivers = this.messageReceiverMap[type];\n \n if (!receivers) {\n receivers = [];\n this.messageReceiverMap[type] = receivers;\n }\n \n const receiver: IMessengerReceiver = {\n fn,\n once\n };\n \n receivers.push(receiver);\n \n return () => this.removeReceiver(type, receiver);\n }\n \n private removeReceiver(type: string, receiver: IMessengerReceiver): void {\n const receivers = this.messageReceiverMap[type];\n \n if (!receivers) {\n return;\n }\n \n const index = receivers.indexOf(receiver);\n \n if (index >= 0) {\n receivers.splice(index, 1);\n }\n \n if (!receivers.length) {\n delete this.messageReceiverMap[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["buildPayloadForPromise","errorToPlain","getTargetWindow","plainToError","Messenger","_this","_classCallCheck","_defineProperty","thisWindow","addEventListener","e","_e$data","data","type","_e$data2","payload","_this$getReceivers","getReceivers","_this$getReceivers2","_slicedToArray","receivers","receiversOnce","forEach","v","fn","removeReceiver","_createClass","key","value","emit","_options$targetOrigin","options","arguments","length","undefined","theWindow","targetWindow","postMessage","targetOrigin","location","origin","emitPromise","_this2","payloadForPromise","Promise","resolve","reject","once","_dismiss_","payloadBack","Error","error","on","addReceiver","onPromise","_this3","then","err","_receiversForType$red","receiversForType","messageReceiverMap","receiversTuple","reduce","result","push","_this4","receiver","index","indexOf","splice","default"],"sources":["../../../src/messenger/index.ts"],"sourcesContent":["import {\n TMessengerOff,\n IMessageData,\n TMessengerCallback,\n TMessengerReceiverMap,\n IMessengerEmitOptions,\n IMessengerPayloadPromise,\n IMessengerPayloadPromiseBack,\n IMessengerReceiver\n} from '../types';\nimport {\n buildPayloadForPromise,\n errorToPlain,\n getTargetWindow,\n plainToError\n} from '../util';\n\n/**\n * 封装 `postMessage`,全局只有一个监听事件\n */\nexport default class Messenger {\n private messageReceiverMap: TMessengerReceiverMap = {};\n \n constructor() {\n const thisWindow = getTargetWindow();\n \n thisWindow.addEventListener('message', (e: MessageEvent<IMessageData | undefined>): void => {\n if (!e.data?.type) {\n return;\n }\n \n const {\n type,\n payload\n } = e.data;\n const [receivers, receiversOnce] = this.getReceivers(type);\n \n receivers.forEach(v => v.fn(payload));\n receiversOnce.forEach(v => v.fn(payload));\n \n receiversOnce.forEach(v => this.removeReceiver(type, v));\n });\n }\n \n /**\n * 广播消息,当传入的对象 payload 不是 plain 对象的时候(如 Error、function、DOMElement、JSX 等),这里会报错\n * 「Uncaught DOMException: The object could not be cloned.」或 「DataCloneError: The object could not be cloned.」\n * 这个错误不能吃掉,因为使用者需要同步地知道调用失败了\n */\n emit(type: string): void;\n emit(type: string, payload: undefined, options: IMessengerEmitOptions): void;\n emit<P = unknown>(type: string, payload: P, options?: IMessengerEmitOptions): void; // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n emit(type: string, payload?: unknown, options: IMessengerEmitOptions = {}): void {\n const theWindow = getTargetWindow(options.targetWindow);\n \n theWindow.postMessage({\n type,\n payload\n }, options.targetOrigin ?? theWindow.location.origin);\n }\n \n /**\n * 广播事件,返回 Promise,必须要有 `onPromise` 来承接该事件,否则此 `Promise` 将永远无法结束\n */\n emitPromise<T = void>(type: string): Promise<T>;\n emitPromise<T = void>(type: string, payload: undefined, options: IMessengerEmitOptions): Promise<T>;\n emitPromise<T = void, P = unknown>(type: string, payload: P, options?: IMessengerEmitOptions): Promise<T>; // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n emitPromise<T = void, P = unknown>(type: string, payload?: P, options?: IMessengerEmitOptions): Promise<T> {\n const payloadForPromise = buildPayloadForPromise<P | undefined>(type, payload);\n \n // 触发 `onPromise` 的回调,不要放到 `new Promise` 内部,因为它可能会报错,这个错需要保持是同步的\n this.emit<IMessengerPayloadPromise<P | undefined>>(type, payloadForPromise, options);\n \n return new Promise<T>((resolve, reject) => {\n // `onPromise` 的回调返回的是 `Promise`,它 `resolve` 或 `reject` 都会广播一个以 `_dismiss_` 为类型的 `message`,\n // 这里使用单次订阅是因为这个 `message` 只需要消费一次。\n this.once<IMessengerPayloadPromiseBack<T>>(payloadForPromise._dismiss_, (payloadBack?: IMessengerPayloadPromiseBack<T>): void => {\n if (!payloadBack) { // 一般来说不可能没有 payloadBack,但代码需要严谨\n reject(new Error('Messenger:emitPromise MessengerPayloadPromiseBack is missing.'));\n \n return;\n }\n \n const {\n value,\n error\n } = payloadBack;\n \n if (error) {\n reject(plainToError(error));\n } else {\n resolve(value as T);\n }\n });\n });\n }\n \n /**\n * 注册回调,返回用于注销的方法\n */\n on<P = unknown>(type: string, fn: (payload?: P) => void): TMessengerOff { // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n return this.addReceiver(type, fn);\n }\n \n /**\n * 注册单次回调,运行一次后将自动注销\n */\n once<P = unknown>(type: string, fn: (payload?: P) => void): TMessengerOff { // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n return this.addReceiver(type, fn, true);\n }\n \n /**\n * 对 emitPromise 对应的 type 进行响应,这里关心的 payload 还是 emitPromise 所传入的 payload\n */\n onPromise<T, P = unknown>(type: string, fn: (payload?: P) => T | Promise<T>): TMessengerOff { // eslint-disable-line @typescript-eslint/no-unnecessary-type-parameters\n return this.on(type, (payload?: IMessengerPayloadPromise<P>) => {\n if (!payload?._dismiss_) { // 得到的 payload 下有 _dismiss_ 参数才响应,否则 pass\n return;\n }\n \n // 这里广播是事件会被 `emitPromise` 方法内部的 once 消化\n Promise.resolve(fn(payload.payload)).then((value: T) => {\n this.emit<IMessengerPayloadPromiseBack<T>>(payload._dismiss_, {\n value\n });\n }, (err: unknown) => {\n this.emit<IMessengerPayloadPromiseBack<T>>(payload._dismiss_, {\n error: errorToPlain(err)\n });\n });\n });\n }\n \n private getReceivers(type: string): [IMessengerReceiver[], IMessengerReceiver[]] {\n const receiversForType = this.messageReceiverMap[type];\n const receiversTuple: [IMessengerReceiver[], IMessengerReceiver[]] = [[], []];\n \n return receiversForType?.reduce((result: [IMessengerReceiver[], IMessengerReceiver[]], v) => {\n if (v.once) {\n result[1].push(v);\n } else {\n result[0].push(v);\n }\n \n return result;\n }, receiversTuple) ?? receiversTuple;\n }\n \n private addReceiver(type: string, fn: unknown, once?: boolean): TMessengerOff {\n if (typeof fn !== 'function') {\n throw new Error('Messenger:addReceiver: fn is not a function');\n }\n \n let receivers = this.messageReceiverMap[type];\n \n if (!receivers) {\n receivers = [];\n this.messageReceiverMap[type] = receivers;\n }\n \n const receiver: IMessengerReceiver = {\n fn: fn as TMessengerCallback,\n once\n };\n \n receivers.push(receiver);\n \n return () => this.removeReceiver(type, receiver);\n }\n \n private removeReceiver(type: string, receiver: IMessengerReceiver): void {\n const receivers = this.messageReceiverMap[type];\n \n if (!receivers) {\n return;\n }\n \n const index = receivers.indexOf(receiver);\n \n if (index >= 0) {\n receivers.splice(index, 1);\n }\n \n if (!receivers.length) {\n delete this.messageReceiverMap[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/types/index.ts"],"sourcesContent":["export type TTargetWindow = Window | 'top' | 'parent';\n\nexport interface IMessageData {\n type: string;\n payload: never;\n}\n\nexport interface IMessengerEmitOptions {\n targetWindow?: TTargetWindow;\n targetOrigin?: string;\n}\n\nexport type TMessengerCallback<P = unknown> = (payload: P) => void;\n\nexport interface IMessengerReceiver<P = never> {\n fn: TMessengerCallback<P>;\n once?: boolean;\n // priority?: number; // 优先级,越大越优先\n}\n\n/**\n * 为每个 MessageEvent.data 的 `type`,建立一个接收序列\n */\nexport type TMessengerReceiverMap = Record<string, IMessengerReceiver[]>;\n\n/**\n * 以 Promise 的形式广播事件的时候的 payload 包裹\n */\nexport interface IMessengerPayloadPromise<P = void> {\n _dismiss_: string; // onPromise 中会将此包裹打开,如果里边有该值,表明此事件合法,否则不会响应\n payload: P; // 原 payload\n}\n\n/**\n * `emitPromise` 和 `onPromise` 的纽带\n */\nexport interface IMessengerPayloadPromiseBack<T> {\n value?: T;\n error?: Record<string, unknown>; // 可能是 string、对象或 Error\n}\n\nexport type TFnOff = () => void;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/types/index.ts"],"sourcesContent":["export type TTargetWindow = Window | 'top' | 'parent';\n\nexport interface IMessageData {\n type: string;\n payload: never;\n}\n\nexport interface IMessengerEmitOptions {\n targetWindow?: TTargetWindow;\n targetOrigin?: string;\n}\n\nexport type TMessengerCallback<P = unknown> = (payload?: P) => void;\n\nexport interface IMessengerReceiver<P = never> {\n fn: TMessengerCallback<P>;\n once?: boolean;\n // priority?: number; // 优先级,越大越优先\n}\n\n/**\n * 为每个 MessageEvent.data 的 `type`,建立一个接收序列\n */\nexport type TMessengerReceiverMap = Record<string, IMessengerReceiver[]>;\n\n/**\n * 以 Promise 的形式广播事件的时候的 payload 包裹\n */\nexport interface IMessengerPayloadPromise<P = void> {\n _dismiss_: string; // onPromise 中会将此包裹打开,如果里边有该值,表明此事件合法,否则不会响应\n payload: P; // 原 payload\n}\n\n/**\n * `emitPromise` 和 `onPromise` 的纽带\n */\nexport interface IMessengerPayloadPromiseBack<T> {\n value?: T;\n error?: Record<string, unknown>; // 可能是 string、对象或 Error\n}\n\nexport type TMessengerOff = () => void;\n"],"mappings":"","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { TFnOff, IMessengerEmitOptions } from '../types';
1
+ import { TMessengerOff, IMessengerEmitOptions } from '../types';
2
2
  /**
3
3
  * 封装 `postMessage`,全局只有一个监听事件
4
4
  */
@@ -22,18 +22,15 @@ export default class Messenger {
22
22
  /**
23
23
  * 注册回调,返回用于注销的方法
24
24
  */
25
- on(type: string, fn: () => void): TFnOff;
26
- on<P = unknown>(type: string, fn: (payload: P) => void): TFnOff;
25
+ on<P = unknown>(type: string, fn: (payload?: P) => void): TMessengerOff;
27
26
  /**
28
27
  * 注册单次回调,运行一次后将自动注销
29
28
  */
30
- once(type: string, fn: () => void): TFnOff;
31
- once<P = unknown>(type: string, fn: (payload: P) => void): TFnOff;
29
+ once<P = unknown>(type: string, fn: (payload?: P) => void): TMessengerOff;
32
30
  /**
33
31
  * 对 emitPromise 对应的 type 进行响应,这里关心的 payload 还是 emitPromise 所传入的 payload
34
32
  */
35
- onPromise<T = void>(type: string, fn: () => T | Promise<T>): TFnOff;
36
- onPromise<T, P = unknown>(type: string, fn: (payload: P) => T | Promise<T>): TFnOff;
33
+ onPromise<T, P = unknown>(type: string, fn: (payload?: P) => T | Promise<T>): TMessengerOff;
37
34
  private getReceivers;
38
35
  private addReceiver;
39
36
  private removeReceiver;
@@ -7,7 +7,7 @@ export interface IMessengerEmitOptions {
7
7
  targetWindow?: TTargetWindow;
8
8
  targetOrigin?: string;
9
9
  }
10
- export type TMessengerCallback<P = unknown> = (payload: P) => void;
10
+ export type TMessengerCallback<P = unknown> = (payload?: P) => void;
11
11
  export interface IMessengerReceiver<P = never> {
12
12
  fn: TMessengerCallback<P>;
13
13
  once?: boolean;
@@ -30,4 +30,4 @@ export interface IMessengerPayloadPromiseBack<T> {
30
30
  value?: T;
31
31
  error?: Record<string, unknown>;
32
32
  }
33
- export type TFnOff = () => void;
33
+ export type TMessengerOff = () => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kcuf/messenger",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "A simple and type safe post-message enhancement.",
5
5
  "keywords": [
6
6
  "postMessage",