lgsso-sdk 1.0.4 → 1.0.6
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 +163 -119
- package/dist/lgsso-sdk.js +449 -2
- package/dist/lgsso-sdk.min.js +2 -0
- package/package.json +31 -31
- package/rollup.config.js +33 -0
- package/src/index.js +13 -245
- package/src/{api.js → request.js} +89 -77
- package/src/sso.js +238 -0
- package/src/utils.js +103 -0
- package/dist/lgsso-sdk.js.LICENSE.txt +0 -1
- package/src/index.d.ts +0 -87
- package/webpack.config.js +0 -32
package/dist/lgsso-sdk.js
CHANGED
|
@@ -1,2 +1,449 @@
|
|
|
1
|
-
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("lgssoSdk",[],t):"object"==typeof exports?exports.lgssoSdk=t():e.lgssoSdk=t()}(this,()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(){var e,t,r="function"==typeof Symbol?Symbol:{},c=r.iterator||"@@iterator",i=r.toStringTag||"@@toStringTag";function u(r,n,c,i){var u=n&&n.prototype instanceof s?n:s,f=Object.create(u.prototype);return o(f,"_invoke",function(r,n,o){var c,i,u,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,i=0,u=e,p.n=r,a}};function y(r,n){for(i=r,u=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(u=c[(i=c[4])?5:(i=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(i=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,i=0))}if(o||r>1)return a;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),i=f,u=d;(t=i<2?e:u)||!l;){c||(i?i<3?(i>1&&(p.n=-1),y(i,u)):p.n=u:p.v=u);try{if(s=2,c){if(i||(o="next"),t=c[o]){if(!(t=t.call(c,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,i<2&&(i=0)}else 1===i&&(t=c.return)&&t.call(c),i<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),i=1);c=e}else if((t=(l=p.n<0)?u:r.call(n,p))!==a)break}catch(t){c=e,i=1,u=t}finally{s=1}}return{value:t,done:l}}}(r,c,i),!0),f}var a={};function s(){}function f(){}function l(){}t=Object.getPrototypeOf;var p=[][c]?t(t([][c]())):(o(t={},c,function(){return this}),t),y=l.prototype=s.prototype=Object.create(p);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,o(e,i,"GeneratorFunction")),e.prototype=Object.create(y),e}return f.prototype=l,o(y,"constructor",l),o(l,"constructor",f),f.displayName="GeneratorFunction",o(l,i,"GeneratorFunction"),o(y),o(y,i,"Generator"),o(y,c,function(){return this}),o(y,"toString",function(){return"[object Generator]"}),(n=function(){return{w:u,m:d}})()}function o(e,t,r,n){var c=Object.defineProperty;try{c({},"",{})}catch(e){c=0}o=function(e,t,r,n){function i(t,r){o(e,t,function(e){return this._invoke(t,r,e)})}t?c?c(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(i("next",0),i("throw",1),i("return",2))},o(e,t,r,n)}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?c(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):c(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function s(e){return f.apply(this,arguments)}function f(){var e;return e=n().m(function e(t){var r,o,c,u,a,s,f,l,p,y,d=arguments;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:if(r=d.length>1&&void 0!==d[1]?d[1]:"GET",o=d.length>2&&void 0!==d[2]?d[2]:{},c=d.length>3&&void 0!==d[3]?d[3]:{},u=d.length>4&&void 0!==d[4]?d[4]:5e3,"undefined"!=typeof window){e.n=1;break}return e.a(2,{code:-200,msg:"request方法只能在浏览器环境使用",success:!1});case 1:return a=new AbortController,s=setTimeout(function(){return a.abort()},u),"GET"!==(f={method:r.toUpperCase(),headers:i({"Content-Type":"application/json"},c),signal:a.signal}).method&&o&&(f.body=JSON.stringify(o)),e.p=2,e.n=3,fetch(t,f);case 3:if(l=e.v,clearTimeout(s),l.ok){e.n=4;break}return e.a(2,{code:l.status,msg:"HTTP请求失败: ".concat(l.statusText),success:!1});case 4:return e.p=4,e.n=5,l.json();case 5:return p=e.v,e.a(2,p);case 6:return e.p=6,e.v,e.a(2,{code:-201,msg:"响应数据不是有效的JSON格式",success:!1});case 7:if(e.p=7,y=e.v,clearTimeout(s),"AbortError"!==y.name){e.n=8;break}return e.a(2,{code:-202,msg:"请求超时(".concat(u,"ms)"),success:!1});case 8:return e.a(2,{code:-203,msg:"网络请求失败: ".concat(y.message),success:!1});case 9:return e.a(2)}},e,null,[[4,6],[2,7]])}),f=function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){a(c,n,o,i,u,"next",e)}function u(e){a(c,n,o,i,u,"throw",e)}i(void 0)})},f.apply(this,arguments)}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function p(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function c(r,n,o,c){var a=n&&n.prototype instanceof u?n:u,s=Object.create(a.prototype);return y(s,"_invoke",function(r,n,o){var c,u,a,s=0,f=o||[],l=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return c=t,u=0,a=e,p.n=r,i}};function y(r,n){for(u=r,a=n,t=0;!l&&s&&!o&&t<f.length;t++){var o,c=f[t],y=p.p,d=c[2];r>3?(o=d===n)&&(a=c[(u=c[4])?5:(u=3,3)],c[4]=c[5]=e):c[0]<=y&&((o=r<2&&y<c[1])?(u=0,p.v=n,p.n=c[1]):y<d&&(o=r<3||c[0]>n||n>d)&&(c[4]=r,c[5]=n,p.n=d,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===f&&y(f,d),u=f,a=d;(t=u<2?e:a)||!l;){c||(u?u<3?(u>1&&(p.n=-1),y(u,a)):p.n=a:p.v=a);try{if(s=2,c){if(u||(o="next"),t=c[o]){if(!(t=t.call(c,a)))throw TypeError("iterator result is not an object");if(!t.done)return t;a=t.value,u<2&&(u=0)}else 1===u&&(t=c.return)&&t.call(c),u<2&&(a=TypeError("The iterator does not provide a '"+o+"' method"),u=1);c=e}else if((t=(l=p.n<0)?a:r.call(n,p))!==i)break}catch(t){c=e,u=1,a=t}finally{s=1}}return{value:t,done:l}}}(r,o,c),!0),s}var i={};function u(){}function a(){}function s(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(y(t={},n,function(){return this}),t),l=s.prototype=u.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,y(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return a.prototype=s,y(l,"constructor",s),y(s,"constructor",a),a.displayName="GeneratorFunction",y(s,o,"GeneratorFunction"),y(l),y(l,o,"Generator"),y(l,n,function(){return this}),y(l,"toString",function(){return"[object Generator]"}),(p=function(){return{w:c,m:d}})()}function y(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}y=function(e,t,r,n){function c(t,r){y(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(c("next",0),c("throw",1),c("return",2))},y(e,t,r,n)}function d(e,t,r,n,o,c,i){try{var u=e[c](i),a=u.value}catch(e){return void r(e)}u.done?t(a):Promise.resolve(a).then(n,o)}function b(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var c=e.apply(t,r);function i(e){d(c,n,o,i,u,"next",e)}function u(e){d(c,n,o,i,u,"throw",e)}i(void 0)})}}function m(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function v(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?m(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):m(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function g(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}e.r(t),e.d(t,{default:()=>x,getAccessCode:()=>G,getToken:()=>C,init:()=>P,logout:()=>K,removeToken:()=>A,toUrl:()=>E});var h=null;function w(){return"undefined"!=typeof window&&"undefined"!=typeof document}function O(e){return w()?new URLSearchParams(window.location.search).get(e):null}function j(e){if(w()){var t=new URLSearchParams(window.location.search);if(t.has(e)){t.delete(e);var r="".concat(window.location.pathname).concat(t.toString()?"?".concat(t.toString()):"");window.history.replaceState({},document.title,r)}}}function S(){return w()?window.location.href:""}function k(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=v(v({},{accessCodeKey:"accessCode",tokenKey:"scm_token",timeout:5e3,headers:{},tokenApi:"",refreshCodeApi:"",logoutApi:"",logOutUrl:""}),e);if("string"!=typeof t.accessCodeKey||""===t.accessCodeKey.trim())throw new Error("accessCodeKey必须是有效的字符串");if("string"!=typeof t.tokenKey||""===t.tokenKey.trim())throw new Error("tokenKey必须是有效的字符串");return t}function P(){return T.apply(this,arguments)}function T(){return T=b(p().m(function e(){var t,r,n,o,c=arguments;return p().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=c.length>0&&void 0!==c[0]?c[0]:{},e.p=1,h=k(t),r=O(h.accessCodeKey),j(h.accessCodeKey),h.tokenApi){e.n=2;break}return e.a(2,{code:-100,msg:"缺少tokenApi",success:!1});case 2:if(!h.tokenApi||!r){e.n=4;break}return e.n=3,s(h.tokenApi,"POST",{accessCode:r},h.headers,h.timeout);case 3:return 0===(n=e.v).code&&n.data&&localStorage.setItem(h.tokenKey,n.data),setTimeout(function(){return j(h.accessCodeKey)},300),e.a(2,n);case 4:C()||(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(encodeURIComponent(S())));case 5:return e.a(2,{code:0,msg:"",success:!0});case 6:return e.p=6,o=e.v,e.a(2,{code:-100,msg:"初始化失败: ".concat(o.message),success:!1})}},e,null,[[1,6]])})),T.apply(this,arguments)}function C(){return h&&w()?localStorage.getItem(h.tokenKey):null}function A(){h&&w()&&localStorage.removeItem(h.tokenKey)}function K(){return _.apply(this,arguments)}function _(){return(_=b(p().m(function e(){var t,r;return p().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(h.logoutApi){e.n=2;break}return e.a(2,{code:-102,msg:"未配置logoutApi",success:!1});case 2:return e.p=2,e.n=3,s(h.logoutApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,C())),h.timeout);case 3:return t=e.v,A(),h.logOutUrl&&w()&&(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(encodeURIComponent(S()))),e.a(2,t);case 4:return e.p=4,r=e.v,e.a(2,{code:-103,msg:"退出失败: ".concat(r.message),success:!1})}},e,null,[[2,4]])}))).apply(this,arguments)}function E(e){return U.apply(this,arguments)}function U(){return(U=b(p().m(function e(t){var r,n,o,c;return p().w(function(e){for(;;)switch(e.p=e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(t){e.n=2;break}return e.a(2,{code:-104,msg:"请提供跳转地址",success:!1});case 2:if(h.refreshCodeApi){e.n=3;break}return e.a(2,{code:-105,msg:"未配置refreshCodeApi",success:!1});case 3:if(r=C()){e.n=4;break}return h.logOutUrl&&w()&&(window.location.href="".concat(h.logOutUrl,"?redirect_uri=").concat(encodeURIComponent(S()))),e.a(2,{code:-106,msg:"未找到有效token",success:!1});case 4:return e.p=4,e.n=5,s(h.refreshCodeApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,r)),h.timeout);case 5:return 0===(n=e.v).code&&n.data&&w()&&((o=new URL(t)).searchParams.set(h.accessCodeKey,n.data),window.location.href=o.toString()),e.a(2,n);case 6:return e.p=6,c=e.v,e.a(2,{code:-107,msg:"跳转失败: ".concat(c.message),success:!1})}},e,null,[[4,6]])}))).apply(this,arguments)}var G=function(){var e=b(p().m(function e(){var t;return p().w(function(e){for(;;)switch(e.n){case 0:if(h){e.n=1;break}return e.a(2,{code:-101,msg:"请先调用init方法初始化",success:!1});case 1:if(t=C()){e.n=2;break}return e.a(2,{code:-106,msg:"未找到有效token",success:!1});case 2:return e.n=3,s(h.refreshCodeApi,"POST",{},v(v({},h.headers),{},g({},h.tokenKey,t)),h.timeout);case 3:return e.a(2,e.v)}},e)}));return function(){return e.apply(this,arguments)}}();const x={init:P,getToken:C,removeToken:A,logout:K,toUrl:E,getAccessCode:G};return t})());
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.lgsso = {}));
|
|
5
|
+
})(this, (function (exports) { 'use strict';
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* @Author: Robin LEI
|
|
9
|
+
* @Date: 2025-08-21 15:09:15
|
|
10
|
+
* @LastEditTime: 2025-08-21 15:22:11
|
|
11
|
+
* @FilePath: \lg-wms-admind:\业务代码\中联钢信\五服一管\lg-ssosdk\src\utils.js
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* 检查是否在浏览器环境
|
|
15
|
+
*/
|
|
16
|
+
function isBrowser() {
|
|
17
|
+
return typeof window !== 'undefined' && typeof document !== 'undefined';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* 解析URL中的查询参数
|
|
22
|
+
* @param {string} name - 参数名
|
|
23
|
+
* @param {string} [url] - 可选URL,默认使用当前页面URL
|
|
24
|
+
* @returns {string|null} 参数值
|
|
25
|
+
*/
|
|
26
|
+
function getQueryParam(name, url) {
|
|
27
|
+
if (!isBrowser()) return null;
|
|
28
|
+
|
|
29
|
+
const targetUrl = url || window.location.href;
|
|
30
|
+
const urlObj = new URL(targetUrl);
|
|
31
|
+
|
|
32
|
+
// 先检查常规查询参数
|
|
33
|
+
let param = urlObj.searchParams.get(name);
|
|
34
|
+
if (param !== null) return param;
|
|
35
|
+
|
|
36
|
+
// 检查hash中的查询参数
|
|
37
|
+
if (urlObj.hash.includes('?')) {
|
|
38
|
+
const hashQuery = urlObj.hash.split('?')[1];
|
|
39
|
+
const hashParams = new URLSearchParams(hashQuery);
|
|
40
|
+
return hashParams.get(name);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* 移除URL中的指定参数
|
|
48
|
+
* @param {string} name - 参数名
|
|
49
|
+
*/
|
|
50
|
+
function removeQueryParam(name) {
|
|
51
|
+
if (!isBrowser()) return;
|
|
52
|
+
|
|
53
|
+
const url = new URL(window.location.href);
|
|
54
|
+
let params, newUrl;
|
|
55
|
+
|
|
56
|
+
// 处理hash模式(参数在#之后)
|
|
57
|
+
if (url.hash.includes('?')) {
|
|
58
|
+
const [hashPath, hashQuery] = url.hash.split('?');
|
|
59
|
+
params = new URLSearchParams(hashQuery);
|
|
60
|
+
|
|
61
|
+
if (params.has(name)) {
|
|
62
|
+
params.delete(name);
|
|
63
|
+
const newHash = params.toString() ? `${hashPath}?${params.toString()}` : hashPath;
|
|
64
|
+
url.hash = newHash;
|
|
65
|
+
newUrl = url.toString();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// 处理history模式(参数在?之后)
|
|
69
|
+
else {
|
|
70
|
+
params = new URLSearchParams(url.search);
|
|
71
|
+
if (params.has(name)) {
|
|
72
|
+
params.delete(name);
|
|
73
|
+
url.search = params.toString();
|
|
74
|
+
newUrl = url.toString();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// 更新URL
|
|
79
|
+
if (newUrl && newUrl !== window.location.href) {
|
|
80
|
+
window.location.replace(newUrl);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* 获取当前完整URL(包含所有参数)
|
|
86
|
+
* @returns {string} 当前URL
|
|
87
|
+
*/
|
|
88
|
+
function getCurrentUrlWithParams() {
|
|
89
|
+
if (!isBrowser()) return '';
|
|
90
|
+
return window.location.href;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* 合并配置对象
|
|
95
|
+
* @param {Object} defaults - 默认配置
|
|
96
|
+
* @param {Object} options - 用户配置
|
|
97
|
+
* @returns {Object} 合并后的配置
|
|
98
|
+
*/
|
|
99
|
+
function mergeConfigs(defaults, options) {
|
|
100
|
+
if (!options) return { ...defaults };
|
|
101
|
+
|
|
102
|
+
const merged = { ...defaults };
|
|
103
|
+
for (const key in options) {
|
|
104
|
+
if (options.hasOwnProperty(key)) {
|
|
105
|
+
merged[key] = options[key];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return merged;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* 通用HTTP请求工具
|
|
113
|
+
* @param {string} url - 请求URL
|
|
114
|
+
* @param {Object} options - 请求选项
|
|
115
|
+
* @param {string} [options.method='GET'] - 请求方法
|
|
116
|
+
* @param {Object} [options.data] - 请求数据
|
|
117
|
+
* @param {Object} [options.headers] - 请求头
|
|
118
|
+
* @param {number} [options.timeout=5000] - 超时时间(ms)
|
|
119
|
+
* @returns {Promise<Object>} 请求结果
|
|
120
|
+
*/
|
|
121
|
+
async function request(url, {
|
|
122
|
+
method = 'GET',
|
|
123
|
+
data = {},
|
|
124
|
+
headers = {},
|
|
125
|
+
timeout = 5000
|
|
126
|
+
} = {}) {
|
|
127
|
+
if (!isBrowser()) {
|
|
128
|
+
return {
|
|
129
|
+
code: -200,
|
|
130
|
+
msg: 'request方法只能在浏览器环境使用',
|
|
131
|
+
success: false
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// 超时控制
|
|
136
|
+
const controller = new AbortController();
|
|
137
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
138
|
+
|
|
139
|
+
// 构建请求配置
|
|
140
|
+
const options = {
|
|
141
|
+
method: method.toUpperCase(),
|
|
142
|
+
headers: {
|
|
143
|
+
'Content-Type': 'application/json',
|
|
144
|
+
...headers
|
|
145
|
+
},
|
|
146
|
+
signal: controller.signal
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
// 处理请求体(GET请求不携带body)
|
|
150
|
+
if (options.method !== 'GET' && data) {
|
|
151
|
+
options.body = JSON.stringify(data);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
try {
|
|
155
|
+
const response = await fetch(url, options);
|
|
156
|
+
clearTimeout(timeoutId);
|
|
157
|
+
|
|
158
|
+
// 处理HTTP错误状态码
|
|
159
|
+
if (!response.ok) {
|
|
160
|
+
return {
|
|
161
|
+
code: response.status,
|
|
162
|
+
msg: `HTTP请求失败: ${response.statusText}`,
|
|
163
|
+
success: false
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// 尝试解析JSON响应
|
|
168
|
+
try {
|
|
169
|
+
const result = await response.json();
|
|
170
|
+
return result;
|
|
171
|
+
} catch (jsonError) {
|
|
172
|
+
return {
|
|
173
|
+
code: -201,
|
|
174
|
+
msg: '响应数据不是有效的JSON格式',
|
|
175
|
+
success: false
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
} catch (error) {
|
|
179
|
+
clearTimeout(timeoutId);
|
|
180
|
+
|
|
181
|
+
// 超时错误处理
|
|
182
|
+
if (error.name === 'AbortError') {
|
|
183
|
+
return {
|
|
184
|
+
code: -202,
|
|
185
|
+
msg: `请求超时(${timeout}ms)`,
|
|
186
|
+
success: false
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// 其他网络错误
|
|
191
|
+
return {
|
|
192
|
+
code: -203,
|
|
193
|
+
msg: `网络请求失败: ${error.message}`,
|
|
194
|
+
success: false
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// 默认配置
|
|
200
|
+
const DEFAULT_CONFIG = {
|
|
201
|
+
accessCodeKey: 'accessCode',
|
|
202
|
+
tokenKey: 'scm_token',
|
|
203
|
+
timeout: 5000,
|
|
204
|
+
headers: {},
|
|
205
|
+
tokenApi: '',
|
|
206
|
+
refreshCodeApi: '',
|
|
207
|
+
logoutApi: '',
|
|
208
|
+
logOutUrl: '',
|
|
209
|
+
storage: localStorage, // 可替换为sessionStorage
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
let config = null;
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* 验证配置的有效性
|
|
216
|
+
* @param {Object} options - 配置选项
|
|
217
|
+
* @throws {Error} 当配置无效时抛出错误
|
|
218
|
+
*/
|
|
219
|
+
function validateConfig(options) {
|
|
220
|
+
if (typeof options.accessCodeKey !== 'string' || options.accessCodeKey.trim() === '') {
|
|
221
|
+
throw new Error('accessCodeKey必须是有效的字符串');
|
|
222
|
+
}
|
|
223
|
+
if (typeof options.tokenKey !== 'string' || options.tokenKey.trim() === '') {
|
|
224
|
+
throw new Error('tokenKey必须是有效的字符串');
|
|
225
|
+
}
|
|
226
|
+
if (options.storage && (typeof options.storage.setItem !== 'function' || typeof options.storage.getItem !== 'function')) {
|
|
227
|
+
throw new Error('storage必须实现setItem和getItem方法');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* 创建SSO实例
|
|
233
|
+
* @returns {Object} SSO实例
|
|
234
|
+
*/
|
|
235
|
+
function createSSO() {
|
|
236
|
+
return {
|
|
237
|
+
/**
|
|
238
|
+
* 初始化SDK
|
|
239
|
+
* @param {Object} options - 配置参数
|
|
240
|
+
* @returns {Promise<Object>} 接口返回结果
|
|
241
|
+
*/
|
|
242
|
+
async init(options = {}) {
|
|
243
|
+
try {
|
|
244
|
+
// 合并并验证配置
|
|
245
|
+
config = mergeConfigs(DEFAULT_CONFIG, options);
|
|
246
|
+
validateConfig(config);
|
|
247
|
+
|
|
248
|
+
const accessCode = getQueryParam(config.accessCodeKey);
|
|
249
|
+
|
|
250
|
+
// 验证必要的API配置
|
|
251
|
+
if (!config.tokenApi) {
|
|
252
|
+
return { code: -100, msg: '缺少tokenApi配置', success: false };
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// 如果存在accessCode,尝试获取token
|
|
256
|
+
if (accessCode) {
|
|
257
|
+
const result = await request(
|
|
258
|
+
config.tokenApi,
|
|
259
|
+
{
|
|
260
|
+
method: 'POST',
|
|
261
|
+
data: { accessCode },
|
|
262
|
+
headers: config.headers,
|
|
263
|
+
timeout: config.timeout
|
|
264
|
+
}
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
if (result.code === 0 && result.data) {
|
|
268
|
+
config.storage.setItem(config.tokenKey, result.data);
|
|
269
|
+
removeQueryParam(config.accessCodeKey);
|
|
270
|
+
}
|
|
271
|
+
return result;
|
|
272
|
+
}
|
|
273
|
+
// 如果没有token,跳转到登录页
|
|
274
|
+
else if (!this.getToken()) {
|
|
275
|
+
if (isBrowser() && config.logOutUrl) {
|
|
276
|
+
window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return { code: 0, msg: '初始化成功', success: true };
|
|
281
|
+
} catch (error) {
|
|
282
|
+
return { code: -100, msg: `初始化失败: ${error.message}`, success: false };
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* 获取存储的token
|
|
288
|
+
* @returns {string|null} token值或null
|
|
289
|
+
*/
|
|
290
|
+
getToken() {
|
|
291
|
+
if (!config || !isBrowser()) return null;
|
|
292
|
+
return config.storage.getItem(config.tokenKey);
|
|
293
|
+
},
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* 删除存储的token
|
|
297
|
+
*/
|
|
298
|
+
removeToken() {
|
|
299
|
+
if (!config || !isBrowser()) return;
|
|
300
|
+
config.storage.removeItem(config.tokenKey);
|
|
301
|
+
},
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* 退出登录
|
|
305
|
+
* @returns {Promise<Object>} 接口返回结果
|
|
306
|
+
*/
|
|
307
|
+
async logout() {
|
|
308
|
+
if (!config) {
|
|
309
|
+
return { code: -101, msg: '请先调用init方法初始化', success: false };
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (!config.logoutApi) {
|
|
313
|
+
return { code: -102, msg: '未配置logoutApi', success: false };
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const token = this.getToken();
|
|
317
|
+
if (token) {
|
|
318
|
+
try {
|
|
319
|
+
const result = await request(
|
|
320
|
+
config.logoutApi,
|
|
321
|
+
{
|
|
322
|
+
method: 'POST',
|
|
323
|
+
headers: { ...config.headers, [config.tokenKey]: token },
|
|
324
|
+
timeout: config.timeout
|
|
325
|
+
}
|
|
326
|
+
);
|
|
327
|
+
this.removeToken();
|
|
328
|
+
|
|
329
|
+
if (isBrowser() && config.logOutUrl) {
|
|
330
|
+
window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;
|
|
331
|
+
}
|
|
332
|
+
return result;
|
|
333
|
+
} catch (error) {
|
|
334
|
+
return { code: -103, msg: `退出失败: ${error.message}`, success: false };
|
|
335
|
+
}
|
|
336
|
+
} else {
|
|
337
|
+
this.removeToken();
|
|
338
|
+
if (isBrowser() && config.logOutUrl) {
|
|
339
|
+
window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;
|
|
340
|
+
}
|
|
341
|
+
return { code: 0, msg: '已成功清除token', success: true };
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* 用token换取新accessCode并跳转到指定URL
|
|
347
|
+
* @param {string} redirectUrl - 目标跳转地址
|
|
348
|
+
* @returns {Promise<Object>} 接口返回结果
|
|
349
|
+
*/
|
|
350
|
+
async toUrl(redirectUrl) {
|
|
351
|
+
if (!config) {
|
|
352
|
+
return { code: -101, msg: '请先调用init方法初始化', success: false };
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
if (!redirectUrl) {
|
|
356
|
+
return { code: -104, msg: '请提供跳转地址', success: false };
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
if (!config.refreshCodeApi) {
|
|
360
|
+
return { code: -105, msg: '未配置refreshCodeApi', success: false };
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
const token = this.getToken();
|
|
364
|
+
if (!token) {
|
|
365
|
+
if (isBrowser() && config.logOutUrl) {
|
|
366
|
+
// 修改:使用参数传入的redirectUrl作为重定向地址
|
|
367
|
+
window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(redirectUrl)}`;
|
|
368
|
+
}
|
|
369
|
+
return { code: -106, msg: '未找到有效token', success: false };
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
try {
|
|
373
|
+
const result = await request(
|
|
374
|
+
config.refreshCodeApi,
|
|
375
|
+
{
|
|
376
|
+
method: 'POST',
|
|
377
|
+
headers: { ...config.headers, [config.tokenKey]: token },
|
|
378
|
+
timeout: config.timeout
|
|
379
|
+
}
|
|
380
|
+
);
|
|
381
|
+
|
|
382
|
+
if (result.code === 0 && result.data && isBrowser()) {
|
|
383
|
+
const url = new URL(redirectUrl);
|
|
384
|
+
url.searchParams.set(config.accessCodeKey, result.data);
|
|
385
|
+
window.location.href = url.toString();
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return result;
|
|
389
|
+
} catch (error) {
|
|
390
|
+
return { code: -107, msg: `跳转失败: ${error.message}`, success: false };
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* 获取accessCode(通过token换取)
|
|
396
|
+
* @returns {Promise<Object>} 接口返回结果(data为accessCode)
|
|
397
|
+
*/
|
|
398
|
+
async getAccessCode() {
|
|
399
|
+
if (!config) {
|
|
400
|
+
return { code: -101, msg: '请先调用init方法初始化', success: false };
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
const token = this.getToken();
|
|
404
|
+
if (!token) {
|
|
405
|
+
return { code: -106, msg: '未找到有效token', success: false };
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
if (!config.refreshCodeApi) {
|
|
409
|
+
return { code: -105, msg: '未配置refreshCodeApi', success: false };
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
return request(
|
|
413
|
+
config.refreshCodeApi,
|
|
414
|
+
{
|
|
415
|
+
method: 'POST',
|
|
416
|
+
headers: { ...config.headers, [config.tokenKey]: token },
|
|
417
|
+
timeout: config.timeout
|
|
418
|
+
}
|
|
419
|
+
);
|
|
420
|
+
},
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* 获取当前配置
|
|
424
|
+
* @returns {Object|null} 当前配置
|
|
425
|
+
*/
|
|
426
|
+
getConfig() {
|
|
427
|
+
return { ...config }; // 返回配置的副本,防止外部修改
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// 创建默认实例
|
|
433
|
+
const lgsso = createSSO();
|
|
434
|
+
|
|
435
|
+
/*
|
|
436
|
+
* @Author: Robin LEI
|
|
437
|
+
* @Date: 2025-08-21 15:08:08
|
|
438
|
+
* @LastEditTime: 2025-08-21 15:12:09
|
|
439
|
+
* @FilePath: \lg-wms-admind:\业务代码\中联钢信\五服一管\lg-ssosdk\src\index.js
|
|
440
|
+
*/
|
|
441
|
+
|
|
442
|
+
exports.createSSO = createSSO;
|
|
443
|
+
exports.default = lgsso;
|
|
444
|
+
exports.lgsso = lgsso;
|
|
445
|
+
|
|
446
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
447
|
+
|
|
448
|
+
}));
|
|
449
|
+
//# sourceMappingURL=lgsso-sdk.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).lgsso={})}(this,function(e){"use strict";function t(){return"undefined"!=typeof window&&"undefined"!=typeof document}function o(){return t()?window.location.href:""}async function s(e,{method:o="GET",data:s={},headers:n={},timeout:r=5e3}={}){if(!t())return{code:-200,msg:"request方法只能在浏览器环境使用",success:!1};const c=new AbortController,i=setTimeout(()=>c.abort(),r),a={method:o.toUpperCase(),headers:{"Content-Type":"application/json",...n},signal:c.signal};"GET"!==a.method&&s&&(a.body=JSON.stringify(s));try{const t=await fetch(e,a);if(clearTimeout(i),!t.ok)return{code:t.status,msg:`HTTP请求失败: ${t.statusText}`,success:!1};try{return await t.json()}catch(e){return{code:-201,msg:"响应数据不是有效的JSON格式",success:!1}}}catch(e){return clearTimeout(i),"AbortError"===e.name?{code:-202,msg:`请求超时(${r}ms)`,success:!1}:{code:-203,msg:`网络请求失败: ${e.message}`,success:!1}}}const n={accessCodeKey:"accessCode",tokenKey:"scm_token",timeout:5e3,headers:{},tokenApi:"",refreshCodeApi:"",logoutApi:"",logOutUrl:"",storage:localStorage};let r=null;function c(){return{async init(e={}){try{r=function(e,t){if(!t)return{...e};const o={...e};for(const e in t)t.hasOwnProperty(e)&&(o[e]=t[e]);return o}(n,e),function(e){if("string"!=typeof e.accessCodeKey||""===e.accessCodeKey.trim())throw new Error("accessCodeKey必须是有效的字符串");if("string"!=typeof e.tokenKey||""===e.tokenKey.trim())throw new Error("tokenKey必须是有效的字符串");if(e.storage&&("function"!=typeof e.storage.setItem||"function"!=typeof e.storage.getItem))throw new Error("storage必须实现setItem和getItem方法")}(r);const c=function(e,o){if(!t())return null;const s=o||window.location.href,n=new URL(s);let r=n.searchParams.get(e);if(null!==r)return r;if(n.hash.includes("?")){const t=n.hash.split("?")[1];return new URLSearchParams(t).get(e)}return null}(r.accessCodeKey);if(!r.tokenApi)return{code:-100,msg:"缺少tokenApi配置",success:!1};if(c){const e=await s(r.tokenApi,{method:"POST",data:{accessCode:c},headers:r.headers,timeout:r.timeout});return 0===e.code&&e.data&&(r.storage.setItem(r.tokenKey,e.data),function(e){if(!t())return;const o=new URL(window.location.href);let s,n;if(o.hash.includes("?")){const[t,r]=o.hash.split("?");if(s=new URLSearchParams(r),s.has(e)){s.delete(e);const r=s.toString()?`${t}?${s.toString()}`:t;o.hash=r,n=o.toString()}}else s=new URLSearchParams(o.search),s.has(e)&&(s.delete(e),o.search=s.toString(),n=o.toString());n&&n!==window.location.href&&window.location.replace(n)}(r.accessCodeKey)),e}return this.getToken()||t()&&r.logOutUrl&&(window.location.href=`${r.logOutUrl}?redirect_uri=${encodeURIComponent(o())}`),{code:0,msg:"初始化成功",success:!0}}catch(e){return{code:-100,msg:`初始化失败: ${e.message}`,success:!1}}},getToken:()=>r&&t()?r.storage.getItem(r.tokenKey):null,removeToken(){r&&t()&&r.storage.removeItem(r.tokenKey)},async logout(){if(!r)return{code:-101,msg:"请先调用init方法初始化",success:!1};if(!r.logoutApi)return{code:-102,msg:"未配置logoutApi",success:!1};const e=this.getToken();if(!e)return this.removeToken(),t()&&r.logOutUrl&&(window.location.href=`${r.logOutUrl}?redirect_uri=${encodeURIComponent(o())}`),{code:0,msg:"已成功清除token",success:!0};try{const n=await s(r.logoutApi,{method:"POST",headers:{...r.headers,[r.tokenKey]:e},timeout:r.timeout});return this.removeToken(),t()&&r.logOutUrl&&(window.location.href=`${r.logOutUrl}?redirect_uri=${encodeURIComponent(o())}`),n}catch(e){return{code:-103,msg:`退出失败: ${e.message}`,success:!1}}},async toUrl(e){if(!r)return{code:-101,msg:"请先调用init方法初始化",success:!1};if(!e)return{code:-104,msg:"请提供跳转地址",success:!1};if(!r.refreshCodeApi)return{code:-105,msg:"未配置refreshCodeApi",success:!1};const o=this.getToken();if(!o)return t()&&r.logOutUrl&&(window.location.href=`${r.logOutUrl}?redirect_uri=${encodeURIComponent(e)}`),{code:-106,msg:"未找到有效token",success:!1};try{const n=await s(r.refreshCodeApi,{method:"POST",headers:{...r.headers,[r.tokenKey]:o},timeout:r.timeout});if(0===n.code&&n.data&&t()){const t=new URL(e);t.searchParams.set(r.accessCodeKey,n.data),window.location.href=t.toString()}return n}catch(e){return{code:-107,msg:`跳转失败: ${e.message}`,success:!1}}},async getAccessCode(){if(!r)return{code:-101,msg:"请先调用init方法初始化",success:!1};const e=this.getToken();return e?r.refreshCodeApi?s(r.refreshCodeApi,{method:"POST",headers:{...r.headers,[r.tokenKey]:e},timeout:r.timeout}):{code:-105,msg:"未配置refreshCodeApi",success:!1}:{code:-106,msg:"未找到有效token",success:!1}},getConfig:()=>({...r})}}const i=c();e.createSSO=c,e.default=i,e.lgsso=i,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=lgsso-sdk.min.js.map
|
package/package.json
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "lgsso-sdk",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"
|
|
14
|
-
},
|
|
15
|
-
"keywords": [
|
|
16
|
-
"sso",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"auth",
|
|
20
|
-
"login"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
}
|
|
31
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "lgsso-sdk",
|
|
3
|
+
"version": "1.0.6",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "无框架依赖的单点登录SDK",
|
|
6
|
+
"main": "dist/lgsso-sdk.js",
|
|
7
|
+
"browser": "dist/lgsso-sdk.min.js",
|
|
8
|
+
"unpkg": "dist/lgsso-sdk.min.js",
|
|
9
|
+
"jsdelivr": "dist/lgsso-sdk.min.js",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "rollup -c",
|
|
12
|
+
"dev": "rollup -c -w",
|
|
13
|
+
"test": "echo \"Error: no test specified\" && exit 0"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"sso",
|
|
17
|
+
"single sign on",
|
|
18
|
+
"authentication",
|
|
19
|
+
"auth",
|
|
20
|
+
"login",
|
|
21
|
+
"logout"
|
|
22
|
+
],
|
|
23
|
+
"author": "",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@rollup/plugin-commonjs": "^25.0.0",
|
|
27
|
+
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
28
|
+
"rollup": "^3.29.4",
|
|
29
|
+
"rollup-plugin-terser": "^7.0.2"
|
|
30
|
+
}
|
|
31
|
+
}
|
package/rollup.config.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import resolve from '@rollup/plugin-node-resolve';
|
|
2
|
+
import commonjs from '@rollup/plugin-commonjs';
|
|
3
|
+
import { terser } from 'rollup-plugin-terser';
|
|
4
|
+
|
|
5
|
+
export default [
|
|
6
|
+
{
|
|
7
|
+
input: 'src/index.js',
|
|
8
|
+
output: [
|
|
9
|
+
{
|
|
10
|
+
file: 'dist/lgsso-sdk.js',
|
|
11
|
+
format: 'umd',
|
|
12
|
+
name: 'lgsso',
|
|
13
|
+
sourcemap: true
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
file: 'dist/lgsso-sdk.min.js',
|
|
17
|
+
format: 'umd',
|
|
18
|
+
name: 'lgsso',
|
|
19
|
+
sourcemap: true,
|
|
20
|
+
plugins: [terser()]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
file: 'dist/lgsso-sdk.esm.js',
|
|
24
|
+
format: 'esm',
|
|
25
|
+
sourcemap: true
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
plugins: [
|
|
29
|
+
resolve(),
|
|
30
|
+
commonjs()
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
];
|