@kcuf/fetcher-interceptor-login 0.3.0 → 0.3.1
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/helper/message-listen-interceptor-login.js +9 -13
- package/dist/cjs/util/singleton-promise.js +6 -10
- package/dist/esm/helper/message-listen-interceptor-login.js +10 -13
- package/dist/esm/helper/message-listen-interceptor-login.js.map +1 -1
- package/dist/esm/util/singleton-promise.js +5 -10
- package/dist/esm/util/singleton-promise.js.map +1 -1
- package/dist/types/helper/message-listen-interceptor-login.d.ts +1 -1
- package/package.json +5 -4
|
@@ -5,25 +5,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = messageListenInterceptorLogin;
|
|
8
|
-
var
|
|
8
|
+
var _messenger = _interopRequireDefault(require("@kcuf/messenger"));
|
|
9
9
|
var _const = require("../const");
|
|
10
10
|
/**
|
|
11
11
|
* 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,
|
|
12
12
|
* 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回
|
|
13
13
|
*/
|
|
14
14
|
function messageListenInterceptorLogin(callback) {
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} else if (e.data.type === _const.MESSAGE_TYPE_LOGIN_ERROR) {
|
|
22
|
-
callback(false, e.data.payload);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
window.addEventListener('message', listener);
|
|
15
|
+
var offSuccess = _messenger.default.on(_const.MESSAGE_TYPE_LOGIN_SUCCESS, function (payload) {
|
|
16
|
+
return callback(true, payload);
|
|
17
|
+
});
|
|
18
|
+
var offError = _messenger.default.on(_const.MESSAGE_TYPE_LOGIN_ERROR, function (payload) {
|
|
19
|
+
return callback(false, payload);
|
|
20
|
+
});
|
|
26
21
|
return function () {
|
|
27
|
-
|
|
22
|
+
offSuccess();
|
|
23
|
+
offError();
|
|
28
24
|
};
|
|
29
25
|
}
|
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.default = singletonPromise;
|
|
7
8
|
var _fetcher = require("@kcuf/fetcher");
|
|
9
|
+
var _messenger = _interopRequireDefault(require("@kcuf/messenger"));
|
|
8
10
|
var _const = require("../const");
|
|
9
11
|
function singletonPromise(fn) {
|
|
10
12
|
var queue = null;
|
|
11
|
-
function resolveQueue(
|
|
13
|
+
function resolveQueue(responseData) {
|
|
12
14
|
if (queue) {
|
|
13
15
|
queue.forEach(function (v) {
|
|
14
|
-
v.resolve((0, _fetcher.cloneResponseData)(
|
|
16
|
+
v.resolve((0, _fetcher.cloneResponseData)(responseData));
|
|
15
17
|
});
|
|
16
18
|
queue = null;
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
type: _const.MESSAGE_TYPE_LOGIN_SUCCESS,
|
|
20
|
-
payload: data
|
|
21
|
-
}, location.origin);
|
|
20
|
+
_messenger.default.emit(_const.MESSAGE_TYPE_LOGIN_SUCCESS, responseData);
|
|
22
21
|
}
|
|
23
22
|
function rejectQueue(err) {
|
|
24
23
|
if (queue) {
|
|
@@ -27,10 +26,7 @@ function singletonPromise(fn) {
|
|
|
27
26
|
});
|
|
28
27
|
queue = null;
|
|
29
28
|
}
|
|
30
|
-
|
|
31
|
-
type: _const.MESSAGE_TYPE_LOGIN_ERROR,
|
|
32
|
-
payload: err
|
|
33
|
-
}, location.origin);
|
|
29
|
+
_messenger.default.emit(_const.MESSAGE_TYPE_LOGIN_ERROR, err);
|
|
34
30
|
}
|
|
35
31
|
return function () {
|
|
36
32
|
if (!queue) {
|
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
import
|
|
1
|
+
import messenger from '@kcuf/messenger';
|
|
2
2
|
import { MESSAGE_TYPE_LOGIN_SUCCESS, MESSAGE_TYPE_LOGIN_ERROR } from '../const';
|
|
3
|
+
|
|
3
4
|
/**
|
|
4
5
|
* 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,
|
|
5
6
|
* 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回
|
|
6
7
|
*/
|
|
7
8
|
export default function messageListenInterceptorLogin(callback) {
|
|
8
|
-
function
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
} else if (e.data.type === MESSAGE_TYPE_LOGIN_ERROR) {
|
|
15
|
-
callback(false, e.data.payload);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
window.addEventListener('message', listener);
|
|
9
|
+
var offSuccess = messenger.on(MESSAGE_TYPE_LOGIN_SUCCESS, function (payload) {
|
|
10
|
+
return callback(true, payload);
|
|
11
|
+
});
|
|
12
|
+
var offError = messenger.on(MESSAGE_TYPE_LOGIN_ERROR, function (payload) {
|
|
13
|
+
return callback(false, payload);
|
|
14
|
+
});
|
|
19
15
|
return function () {
|
|
20
|
-
|
|
16
|
+
offSuccess();
|
|
17
|
+
offError();
|
|
21
18
|
};
|
|
22
19
|
}
|
|
23
20
|
//# sourceMappingURL=message-listen-interceptor-login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-listen-interceptor-login.js","names":["MESSAGE_TYPE_LOGIN_SUCCESS","MESSAGE_TYPE_LOGIN_ERROR","messageListenInterceptorLogin","callback","
|
|
1
|
+
{"version":3,"file":"message-listen-interceptor-login.js","names":["messenger","MESSAGE_TYPE_LOGIN_SUCCESS","MESSAGE_TYPE_LOGIN_ERROR","messageListenInterceptorLogin","callback","offSuccess","on","payload","offError"],"sources":["../../../src/helper/message-listen-interceptor-login.ts"],"sourcesContent":["import messenger from '@kcuf/messenger';\n\nimport {\n MESSAGE_TYPE_LOGIN_SUCCESS,\n MESSAGE_TYPE_LOGIN_ERROR\n} from '../const';\n\n/**\n * 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,\n * 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回\n */\nexport default function messageListenInterceptorLogin(callback: (logged: boolean, payload?: unknown) => void): () => void {\n const offSuccess = messenger.on(MESSAGE_TYPE_LOGIN_SUCCESS, payload => callback(true, payload));\n const offError = messenger.on(MESSAGE_TYPE_LOGIN_ERROR, payload => callback(false, payload));\n \n return () => {\n offSuccess();\n offError();\n };\n}\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,iBAAiB;AAEvC,SACEC,0BAA0B,EAC1BC,wBAAwB,QACnB,UAAU;;AAEjB;AACA;AACA;AACA;AACA,eAAe,SAASC,6BAA6BA,CAACC,QAAsD,EAAc;EACxH,IAAMC,UAAU,GAAGL,SAAS,CAACM,EAAE,CAACL,0BAA0B,EAAE,UAAAM,OAAO;IAAA,OAAIH,QAAQ,CAAC,IAAI,EAAEG,OAAO,CAAC;EAAA,EAAC;EAC/F,IAAMC,QAAQ,GAAGR,SAAS,CAACM,EAAE,CAACJ,wBAAwB,EAAE,UAAAK,OAAO;IAAA,OAAIH,QAAQ,CAAC,KAAK,EAAEG,OAAO,CAAC;EAAA,EAAC;EAE5F,OAAO,YAAM;IACXF,UAAU,CAAC,CAAC;IACZG,QAAQ,CAAC,CAAC;EACZ,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import { cloneResponseData } from '@kcuf/fetcher';
|
|
2
|
+
import messenger from '@kcuf/messenger';
|
|
2
3
|
import { MESSAGE_TYPE_LOGIN_SUCCESS, MESSAGE_TYPE_LOGIN_ERROR } from '../const';
|
|
3
4
|
export default function singletonPromise(fn) {
|
|
4
5
|
var queue = null;
|
|
5
|
-
function resolveQueue(
|
|
6
|
+
function resolveQueue(responseData) {
|
|
6
7
|
if (queue) {
|
|
7
8
|
queue.forEach(function (v) {
|
|
8
|
-
v.resolve(cloneResponseData(
|
|
9
|
+
v.resolve(cloneResponseData(responseData));
|
|
9
10
|
});
|
|
10
11
|
queue = null;
|
|
11
12
|
}
|
|
12
|
-
|
|
13
|
-
type: MESSAGE_TYPE_LOGIN_SUCCESS,
|
|
14
|
-
payload: data
|
|
15
|
-
}, location.origin);
|
|
13
|
+
messenger.emit(MESSAGE_TYPE_LOGIN_SUCCESS, responseData);
|
|
16
14
|
}
|
|
17
15
|
function rejectQueue(err) {
|
|
18
16
|
if (queue) {
|
|
@@ -21,10 +19,7 @@ export default function singletonPromise(fn) {
|
|
|
21
19
|
});
|
|
22
20
|
queue = null;
|
|
23
21
|
}
|
|
24
|
-
|
|
25
|
-
type: MESSAGE_TYPE_LOGIN_ERROR,
|
|
26
|
-
payload: err
|
|
27
|
-
}, location.origin);
|
|
22
|
+
messenger.emit(MESSAGE_TYPE_LOGIN_ERROR, err);
|
|
28
23
|
}
|
|
29
24
|
return function () {
|
|
30
25
|
if (!queue) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleton-promise.js","names":["cloneResponseData","MESSAGE_TYPE_LOGIN_SUCCESS","MESSAGE_TYPE_LOGIN_ERROR","singletonPromise","fn","queue","resolveQueue","
|
|
1
|
+
{"version":3,"file":"singleton-promise.js","names":["cloneResponseData","messenger","MESSAGE_TYPE_LOGIN_SUCCESS","MESSAGE_TYPE_LOGIN_ERROR","singletonPromise","fn","queue","resolveQueue","responseData","forEach","v","resolve","emit","rejectQueue","err","reject","promise","Promise","_queue","push","length","then","data"],"sources":["../../../src/util/singleton-promise.ts"],"sourcesContent":["import {\n cloneResponseData\n} from '@kcuf/fetcher';\nimport messenger from '@kcuf/messenger';\n\nimport {\n MESSAGE_TYPE_LOGIN_SUCCESS,\n MESSAGE_TYPE_LOGIN_ERROR\n} from '../const';\n\ninterface IPromiseQueueItem<T = void, E extends Error = Error> {\n resolve(data: T): void;\n reject(err: E): void;\n}\n\nexport default function singletonPromise<T>(fn: () => Promise<T>): () => Promise<T> {\n let queue: IPromiseQueueItem<T>[] | null = null;\n \n function resolveQueue(responseData: T): void {\n if (queue) {\n queue.forEach(v => {\n v.resolve(cloneResponseData(responseData));\n });\n \n queue = null;\n }\n \n messenger.emit(MESSAGE_TYPE_LOGIN_SUCCESS, responseData);\n }\n \n function rejectQueue(err: Error): void {\n if (queue) {\n queue.forEach(v => {\n v.reject(err);\n });\n \n queue = null;\n }\n \n messenger.emit(MESSAGE_TYPE_LOGIN_ERROR, err);\n }\n \n return (): Promise<T> => {\n if (!queue) {\n queue = [];\n }\n \n const promise = new Promise<T>((resolve, reject) => {\n queue?.push({\n resolve,\n reject\n });\n });\n \n if (queue.length === 1) {\n fn().then(data => resolveQueue(data), (err: unknown) => rejectQueue(err as Error));\n }\n \n return promise;\n };\n}\n"],"mappings":"AAAA,SACEA,iBAAiB,QACZ,eAAe;AACtB,OAAOC,SAAS,MAAM,iBAAiB;AAEvC,SACEC,0BAA0B,EAC1BC,wBAAwB,QACnB,UAAU;AAOjB,eAAe,SAASC,gBAAgBA,CAAIC,EAAoB,EAAoB;EAClF,IAAIC,KAAoC,GAAG,IAAI;EAE/C,SAASC,YAAYA,CAACC,YAAe,EAAQ;IAC3C,IAAIF,KAAK,EAAE;MACTA,KAAK,CAACG,OAAO,CAAC,UAAAC,CAAC,EAAI;QACjBA,CAAC,CAACC,OAAO,CAACX,iBAAiB,CAACQ,YAAY,CAAC,CAAC;MAC5C,CAAC,CAAC;MAEFF,KAAK,GAAG,IAAI;IACd;IAEAL,SAAS,CAACW,IAAI,CAACV,0BAA0B,EAAEM,YAAY,CAAC;EAC1D;EAEA,SAASK,WAAWA,CAACC,GAAU,EAAQ;IACrC,IAAIR,KAAK,EAAE;MACTA,KAAK,CAACG,OAAO,CAAC,UAAAC,CAAC,EAAI;QACjBA,CAAC,CAACK,MAAM,CAACD,GAAG,CAAC;MACf,CAAC,CAAC;MAEFR,KAAK,GAAG,IAAI;IACd;IAEAL,SAAS,CAACW,IAAI,CAACT,wBAAwB,EAAEW,GAAG,CAAC;EAC/C;EAEA,OAAO,YAAkB;IACvB,IAAI,CAACR,KAAK,EAAE;MACVA,KAAK,GAAG,EAAE;IACZ;IAEA,IAAMU,OAAO,GAAG,IAAIC,OAAO,CAAI,UAACN,OAAO,EAAEI,MAAM,EAAK;MAAA,IAAAG,MAAA;MAClD,CAAAA,MAAA,GAAAZ,KAAK,cAAAY,MAAA,eAALA,MAAA,CAAOC,IAAI,CAAC;QACVR,OAAO,EAAPA,OAAO;QACPI,MAAM,EAANA;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAIT,KAAK,CAACc,MAAM,KAAK,CAAC,EAAE;MACtBf,EAAE,CAAC,CAAC,CAACgB,IAAI,CAAC,UAAAC,IAAI;QAAA,OAAIf,YAAY,CAACe,IAAI,CAAC;MAAA,GAAE,UAACR,GAAY;QAAA,OAAKD,WAAW,CAACC,GAAY,CAAC;MAAA,EAAC;IACpF;IAEA,OAAOE,OAAO;EAChB,CAAC;AACH","ignoreList":[]}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,
|
|
3
3
|
* 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回
|
|
4
4
|
*/
|
|
5
|
-
export default function messageListenInterceptorLogin(callback: (logged: boolean,
|
|
5
|
+
export default function messageListenInterceptorLogin(callback: (logged: boolean, payload?: unknown) => void): () => void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kcuf/fetcher-interceptor-login",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Fetcher interceptor seamless login and redo request.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,19 +27,20 @@
|
|
|
27
27
|
"@babel/plugin-transform-runtime": "^7.28.5",
|
|
28
28
|
"@babel/preset-env": "^7.28.6",
|
|
29
29
|
"@babel/preset-typescript": "^7.28.5",
|
|
30
|
-
"@vitest/coverage-v8": "^4.0.
|
|
30
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
31
31
|
"fetch-mock": "^12.6.0",
|
|
32
32
|
"jsdom": "^27.4.0",
|
|
33
33
|
"rimraf": "^6.1.2",
|
|
34
34
|
"typescript": "^5.9.3",
|
|
35
|
-
"vitest": "^4.0.
|
|
35
|
+
"vitest": "^4.0.18",
|
|
36
36
|
"@kcuf/ts-config": "^0.1.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@babel/runtime": ">=7.0.0"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@kcuf/fetcher": "^0.2.9"
|
|
42
|
+
"@kcuf/fetcher": "^0.2.9",
|
|
43
|
+
"@kcuf/messenger": "^0.0.2"
|
|
43
44
|
},
|
|
44
45
|
"scripts": {
|
|
45
46
|
"build:clean": "rimraf dist",
|