@i.un/libs 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/dist/browser/dom.d.ts +1 -0
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser.cjs +2 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.modern.js +2 -0
- package/dist/browser.modern.js.map +1 -0
- package/dist/browser.module.js +2 -0
- package/dist/browser.module.js.map +1 -0
- package/dist/browser.umd.js +2 -0
- package/dist/browser.umd.js.map +1 -0
- package/dist/common/cloneDeep.d.ts +1 -0
- package/dist/common/generateDeterministicUniqueKey.d.ts +5 -0
- package/dist/common/getGlobal.d.ts +1 -0
- package/dist/common/index.d.ts +5 -0
- package/dist/common/type.d.ts +17 -0
- package/dist/common/wrapFunctionWithCache.d.ts +11 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.modern.js +2 -0
- package/dist/index.modern.js.map +1 -0
- package/dist/index.module.js +2 -0
- package/dist/index.module.js.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/node/index.d.ts +1 -0
- package/dist/node/node.d.ts +1 -0
- package/dist/node.cjs +2 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.modern.js +2 -0
- package/dist/node.modern.js.map +1 -0
- package/dist/node.module.js +2 -0
- package/dist/node.module.js.map +1 -0
- package/dist/node.umd.js +2 -0
- package/dist/node.umd.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createDocument(): Document;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./dom";
|
package/dist/browser.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return"function"==typeof(null==e?void 0:e.clone)}function n(e){return"object"!=typeof e&&"function"!=typeof e&&"symbol"!=typeof e||null===e}function t(e){return n(e)?e+"":JSON.stringify(e,function(e,n){return"object"!=typeof n||null===n||Array.isArray(n)?n:Object.keys(n).sort().reduce(function(e,t){return e[t]=n[t],e},{})})}function r(n){if(null===n||"object"!=typeof n)return n;if(e(n))return n.clone();if(Array.isArray(n)){for(var t=[],o=0;o<n.length;o++)t[o]=r(n[o]);return t}if("object"==typeof n){var i={};for(var u in n)n.hasOwnProperty(u)&&(i[u]=r(n[u]));return i}return n}var o={};function i(e){return o[e]}var u={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};exports.cloneDeep=r,exports.createDocument=function(){return document.implementation.createHTMLDocument()},exports.generateDeterministicUniqueKey=t,exports.getGlobal=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this},exports.isCloneable=e,exports.isPrimitive=n,exports.wrapFunctionWithCache=function(n,f){return void 0===f&&(f=u),function(){var l=[].slice.call(arguments),c=t(l)+n.name+(f.identifier||"");if(o[c])return Promise.resolve(r(i(c)));var a=c+"_wl_loading";if(o[a]){var s=Object.assign({},u,f);return new Promise(function(e){var n=Date.now(),t=setInterval(function(){o[c]?(clearInterval(t),e(r(i(c)))):Date.now()-n>s.timeout&&(o[a]=!1,clearInterval(t),e(r(s.timeoutResult)))},100)})}return o[a]=!0,n.apply(void 0,l).then(function(n){return o[c]=n,n&&e(n)?n.clone():o[c]}).catch(function(e){throw e}).finally(function(){o[a]=!1})}};
|
|
2
|
+
//# sourceMappingURL=browser.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.cjs","sources":["../src/common/type.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts","../src/browser/dom.ts","../src/common/getGlobal.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n","export function createDocument() {\n return document.implementation.createHTMLDocument();\n}","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","document","implementation","createHTMLDocument","globalThis","self","window","global","this","func","setting","args","slice","call","arguments","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","apply","then","res","error"],"mappings":"AAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,CCzBgB,SAAAC,EAA+BC,GAC7C,OAAIH,EAAYG,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBL,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBM,MAAMC,QAAQP,GAQ3DA,EAPEQ,OAAOC,KAAKT,GAChBU,OACAC,OAAO,SAACC,EAAUC,GAEjB,OADAD,EAAIC,GAAOb,EAAMa,GACVD,CACT,EAAG,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAajB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIQ,MAAMC,QAAQV,GAAM,CAEtB,IADA,IAAMkB,EAAkB,GACfC,EAAI,EAAGA,EAAInB,EAAIoB,OAAQD,IAC9BD,EAASC,GAAKF,EAAUjB,EAAImB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARlB,EAAkB,CAC3B,IAAMqB,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAOtB,EACTA,EAAYuB,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUjB,EAAIsB,KAGhC,OAAOD,CACR,CAED,OAAOrB,CACT,CCpBA,IAAMwB,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,IAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,+CCvBE,WACZ,OAAOC,SAASC,eAAeC,oBACnC,wECEE,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,qFFUEC,EACAC,GAEA,gBAFAA,IAAAA,EAAmBf,GAEZ,eAAYgB,EAAUC,GAAAA,MAAAC,KAAAC,WACrBpB,EACJtB,EAA+BuC,GAC/BF,EAAKM,MACJL,EAAQV,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOsB,QAAQC,QAAQhC,EAAUQ,EAAiBC,KAGpD,IAAMwB,EAAwBxB,EAAS,cAEvC,GAAIF,EAAM0B,GAAgB,CACxB,IAAMC,EAAWxC,OAAOyC,OAAO,CAAA,EAAIzB,EAAgBe,GACnD,WAAWM,QAAQ,SAAAC,GACjB,IAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,WACpBjC,EAAME,IACRgC,cAAcF,GACdP,EAAQhC,EAAUQ,EAAiBC,MAC1B4B,KAAKC,MAAQF,EAAYF,EAASvB,UAC3CJ,EAAM0B,IAAiB,EACvBQ,cAAcF,GACdP,EAAQhC,EAAUkC,EAAStB,gBAE/B,EAAG,IACL,EACD,CAGD,OAFAL,EAAM0B,IAAiB,EAEhBT,EAAIkB,aAAIhB,GACZiB,KAAK,SAAAC,GAGJ,OADArC,EAAME,GAAUmC,EACZA,GAAO9D,EAAY8D,GAEdA,EAAI5D,QAENuB,EAAME,EACf,SACO,SAACoC,GACN,MAAMA,CACR,WACS,WACPtC,EAAM0B,IAAiB,CACzB,EACJ,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return"function"==typeof(null==e?void 0:e.clone)}function t(e){return"object"!=typeof e&&"function"!=typeof e&&"symbol"!=typeof e||null===e}function n(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this}function o(e){return t(e)?e+"":JSON.stringify(e,function(e,t){return"object"!=typeof t||null===t||Array.isArray(t)?t:Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{})})}function r(t){if(null===t||"object"!=typeof t)return t;if(e(t))return t.clone();if(Array.isArray(t)){const e=[];for(let n=0;n<t.length;n++)e[n]=r(t[n]);return e}if("object"==typeof t){const e={};for(let n in t)t.hasOwnProperty(n)&&(e[n]=r(t[n]));return e}return t}const i={};function u(e){return i[e]}const f={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};function c(t,n=f){return function(...c){const l=o(c)+t.name+(n.identifier||"");if(i[l])return Promise.resolve(r(u(l)));const s=l+"_wl_loading";if(i[s]){const e=Object.assign({},f,n);return new Promise(t=>{const n=Date.now(),o=setInterval(()=>{i[l]?(clearInterval(o),t(r(u(l)))):Date.now()-n>e.timeout&&(i[s]=!1,clearInterval(o),t(r(e.timeoutResult)))},100)})}return i[s]=!0,t(...c).then(t=>(i[l]=t,t&&e(t)?t.clone():i[l])).catch(e=>{throw e}).finally(()=>{i[s]=!1})}}function l(){return document.implementation.createHTMLDocument()}export{r as cloneDeep,l as createDocument,o as generateDeterministicUniqueKey,n as getGlobal,e as isCloneable,t as isPrimitive,c as wrapFunctionWithCache};
|
|
2
|
+
//# sourceMappingURL=browser.modern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.modern.js","sources":["../src/common/type.ts","../src/common/getGlobal.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts","../src/browser/dom.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n","export function createDocument() {\n return document.implementation.createHTMLDocument();\n}"],"names":["isCloneable","obj","clone","isPrimitive","value","getGlobal","globalThis","self","window","global","this","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","wrapFunctionWithCache","func","setting","args","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","then","res","catch","error","finally","createDocument","document","implementation","createHTMLDocument"],"mappings":"AAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,UC3BgBC,IACd,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,CCjBgB,SAAAC,EAA+BC,GAC7C,OAAIT,EAAYS,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBX,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBY,MAAMC,QAAQb,GAQ3DA,EAPEc,OAAOC,KAAKf,GAChBgB,OACAC,OAAO,CAACC,EAAUC,KACjBD,EAAIC,GAAOnB,EAAMmB,GACVD,GACN,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAavB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIc,MAAMC,QAAQhB,GAAM,CACtB,MAAMwB,EAAkB,GACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIzB,EAAI0B,OAAQD,IAC9BD,EAASC,GAAKF,EAAUvB,EAAIyB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARxB,EAAkB,CAC3B,MAAM2B,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAO5B,EACTA,EAAY6B,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUvB,EAAI4B,KAGhC,OAAOD,CACR,CAED,OAAO3B,CACT,CCpBA,MAAM8B,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,MAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,aAQEC,EACdC,EACAC,EAAmBR,GAEnB,OAAgB,YAAGS,GACjB,MAAMV,EACJtB,EAA+BgC,GAC/BF,EAAKG,MACJF,EAAQH,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOY,QAAQC,QAAQtB,EAAUQ,EAAiBC,KAGpD,MAAMc,EAAwBd,EAAS,cAEvC,GAAIF,EAAMgB,GAAgB,CACxB,MAAMC,EAAW9B,OAAO+B,OAAO,CAAA,EAAIf,EAAgBQ,GACnD,OAAO,IAAIG,QAAQC,IACjB,MAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,KACpBvB,EAAME,IACRsB,cAAcF,GACdP,EAAQtB,EAAUQ,EAAiBC,MAC1BkB,KAAKC,MAAQF,EAAYF,EAASb,UAC3CJ,EAAMgB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQtB,EAAUwB,EAASZ,gBAC5B,EACA,IACL,EACD,CAGD,OAFAL,EAAMgB,IAAiB,EAEhBN,KAAQE,GACZa,KAAKC,IAEJ1B,EAAME,GAAUwB,EACZA,GAAOzD,EAAYyD,GAEdA,EAAIvD,QAEN6B,EAAME,KAEdyB,MAAOC,IACN,MAAMA,IAEPC,QAAQ,KACP7B,EAAMgB,IAAiB,CACzB,EACJ,CACF,CClFgB,SAAAc,IACZ,OAAOC,SAASC,eAAeC,oBACnC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function n(n){return"function"==typeof(null==n?void 0:n.clone)}function e(n){return"object"!=typeof n&&"function"!=typeof n&&"symbol"!=typeof n||null===n}function t(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this}function r(n){return e(n)?n+"":JSON.stringify(n,function(n,e){return"object"!=typeof e||null===e||Array.isArray(e)?e:Object.keys(e).sort().reduce(function(n,t){return n[t]=e[t],n},{})})}function o(e){if(null===e||"object"!=typeof e)return e;if(n(e))return e.clone();if(Array.isArray(e)){for(var t=[],r=0;r<e.length;r++)t[r]=o(e[r]);return t}if("object"==typeof e){var i={};for(var u in e)e.hasOwnProperty(u)&&(i[u]=o(e[u]));return i}return e}var i={};function u(n){return i[n]}var f={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};function l(e,t){return void 0===t&&(t=f),function(){var l=[].slice.call(arguments),c=r(l)+e.name+(t.identifier||"");if(i[c])return Promise.resolve(o(u(c)));var a=c+"_wl_loading";if(i[a]){var s=Object.assign({},f,t);return new Promise(function(n){var e=Date.now(),t=setInterval(function(){i[c]?(clearInterval(t),n(o(u(c)))):Date.now()-e>s.timeout&&(i[a]=!1,clearInterval(t),n(o(s.timeoutResult)))},100)})}return i[a]=!0,e.apply(void 0,l).then(function(e){return i[c]=e,e&&n(e)?e.clone():i[c]}).catch(function(n){throw n}).finally(function(){i[a]=!1})}}function c(){return document.implementation.createHTMLDocument()}export{o as cloneDeep,c as createDocument,r as generateDeterministicUniqueKey,t as getGlobal,n as isCloneable,e as isPrimitive,l as wrapFunctionWithCache};
|
|
2
|
+
//# sourceMappingURL=browser.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.module.js","sources":["../src/common/type.ts","../src/common/getGlobal.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts","../src/browser/dom.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n","export function createDocument() {\n return document.implementation.createHTMLDocument();\n}"],"names":["isCloneable","obj","clone","isPrimitive","value","getGlobal","globalThis","self","window","global","this","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","wrapFunctionWithCache","func","setting","args","slice","call","arguments","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","apply","then","res","error","createDocument","document","implementation","createHTMLDocument"],"mappings":"AAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,UC3BgBC,IACd,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,CCjBgB,SAAAC,EAA+BC,GAC7C,OAAIT,EAAYS,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBX,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBY,MAAMC,QAAQb,GAQ3DA,EAPEc,OAAOC,KAAKf,GAChBgB,OACAC,OAAO,SAACC,EAAUC,GAEjB,OADAD,EAAIC,GAAOnB,EAAMmB,GACVD,CACT,EAAG,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAavB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIc,MAAMC,QAAQhB,GAAM,CAEtB,IADA,IAAMwB,EAAkB,GACfC,EAAI,EAAGA,EAAIzB,EAAI0B,OAAQD,IAC9BD,EAASC,GAAKF,EAAUvB,EAAIyB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARxB,EAAkB,CAC3B,IAAM2B,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAO5B,EACTA,EAAY6B,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUvB,EAAI4B,KAGhC,OAAOD,CACR,CAED,OAAO3B,CACT,CCpBA,IAAM8B,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,IAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,aAQEC,EACdC,EACAC,GAEA,gBAFAA,IAAAA,EAAmBR,GAEZ,eAAYS,EAAUC,GAAAA,MAAAC,KAAAC,WACrBb,EACJtB,EAA+BgC,GAC/BF,EAAKM,MACJL,EAAQH,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOe,QAAQC,QAAQzB,EAAUQ,EAAiBC,KAGpD,IAAMiB,EAAwBjB,EAAS,cAEvC,GAAIF,EAAMmB,GAAgB,CACxB,IAAMC,EAAWjC,OAAOkC,OAAO,CAAA,EAAIlB,EAAgBQ,GACnD,WAAWM,QAAQ,SAAAC,GACjB,IAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,WACpB1B,EAAME,IACRyB,cAAcF,GACdP,EAAQzB,EAAUQ,EAAiBC,MAC1BqB,KAAKC,MAAQF,EAAYF,EAAShB,UAC3CJ,EAAMmB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQzB,EAAU2B,EAASf,gBAE/B,EAAG,IACL,EACD,CAGD,OAFAL,EAAMmB,IAAiB,EAEhBT,EAAIkB,aAAIhB,GACZiB,KAAK,SAAAC,GAGJ,OADA9B,EAAME,GAAU4B,EACZA,GAAO7D,EAAY6D,GAEdA,EAAI3D,QAEN6B,EAAME,EACf,SACO,SAAC6B,GACN,MAAMA,CACR,WACS,WACP/B,EAAMmB,IAAiB,CACzB,EACJ,CACF,CClFgB,SAAAa,IACZ,OAAOC,SAASC,eAAeC,oBACnC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e||self).iunLibs={})}(this,function(e){function n(e){return"function"==typeof(null==e?void 0:e.clone)}function t(e){return"object"!=typeof e&&"function"!=typeof e&&"symbol"!=typeof e||null===e}function o(e){return t(e)?e+"":JSON.stringify(e,function(e,n){return"object"!=typeof n||null===n||Array.isArray(n)?n:Object.keys(n).sort().reduce(function(e,t){return e[t]=n[t],e},{})})}function i(e){if(null===e||"object"!=typeof e)return e;if(n(e))return e.clone();if(Array.isArray(e)){for(var t=[],o=0;o<e.length;o++)t[o]=i(e[o]);return t}if("object"==typeof e){var r={};for(var u in e)e.hasOwnProperty(u)&&(r[u]=i(e[u]));return r}return e}var r={};function u(e){return r[e]}var f={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};e.cloneDeep=i,e.createDocument=function(){return document.implementation.createHTMLDocument()},e.generateDeterministicUniqueKey=o,e.getGlobal=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this},e.isCloneable=n,e.isPrimitive=t,e.wrapFunctionWithCache=function(e,t){return void 0===t&&(t=f),function(){var l=[].slice.call(arguments),c=o(l)+e.name+(t.identifier||"");if(r[c])return Promise.resolve(i(u(c)));var a=c+"_wl_loading";if(r[a]){var s=Object.assign({},f,t);return new Promise(function(e){var n=Date.now(),t=setInterval(function(){r[c]?(clearInterval(t),e(i(u(c)))):Date.now()-n>s.timeout&&(r[a]=!1,clearInterval(t),e(i(s.timeoutResult)))},100)})}return r[a]=!0,e.apply(void 0,l).then(function(e){return r[c]=e,e&&n(e)?e.clone():r[c]}).catch(function(e){throw e}).finally(function(){r[a]=!1})}}});
|
|
2
|
+
//# sourceMappingURL=browser.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.umd.js","sources":["../src/common/type.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts","../src/browser/dom.ts","../src/common/getGlobal.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n","export function createDocument() {\n return document.implementation.createHTMLDocument();\n}","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","document","implementation","createHTMLDocument","globalThis","self","window","global","this","func","setting","args","slice","call","arguments","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","apply","then","res","error"],"mappings":"iOAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,CCzBgB,SAAAC,EAA+BC,GAC7C,OAAIH,EAAYG,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBL,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBM,MAAMC,QAAQP,GAQ3DA,EAPEQ,OAAOC,KAAKT,GAChBU,OACAC,OAAO,SAACC,EAAUC,GAEjB,OADAD,EAAIC,GAAOb,EAAMa,GACVD,CACT,EAAG,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAajB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIQ,MAAMC,QAAQV,GAAM,CAEtB,IADA,IAAMkB,EAAkB,GACfC,EAAI,EAAGA,EAAInB,EAAIoB,OAAQD,IAC9BD,EAASC,GAAKF,EAAUjB,EAAImB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARlB,EAAkB,CAC3B,IAAMqB,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAOtB,EACTA,EAAYuB,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUjB,EAAIsB,KAGhC,OAAOD,CACR,CAED,OAAOrB,CACT,CCpBA,IAAMwB,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,IAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,mCCvBE,WACZ,OAAOC,SAASC,eAAeC,oBACnC,4DCEE,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,mEFUEC,EACAC,GAEA,gBAFAA,IAAAA,EAAmBf,GAEZ,eAAYgB,EAAUC,GAAAA,MAAAC,KAAAC,WACrBpB,EACJtB,EAA+BuC,GAC/BF,EAAKM,MACJL,EAAQV,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOsB,QAAQC,QAAQhC,EAAUQ,EAAiBC,KAGpD,IAAMwB,EAAwBxB,EAAS,cAEvC,GAAIF,EAAM0B,GAAgB,CACxB,IAAMC,EAAWxC,OAAOyC,OAAO,CAAA,EAAIzB,EAAgBe,GACnD,WAAWM,QAAQ,SAAAC,GACjB,IAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,WACpBjC,EAAME,IACRgC,cAAcF,GACdP,EAAQhC,EAAUQ,EAAiBC,MAC1B4B,KAAKC,MAAQF,EAAYF,EAASvB,UAC3CJ,EAAM0B,IAAiB,EACvBQ,cAAcF,GACdP,EAAQhC,EAAUkC,EAAStB,gBAE/B,EAAG,IACL,EACD,CAGD,OAFAL,EAAM0B,IAAiB,EAEhBT,EAAIkB,aAAIhB,GACZiB,KAAK,SAAAC,GAGJ,OADArC,EAAME,GAAUmC,EACZA,GAAO9D,EAAY8D,GAEdA,EAAI5D,QAENuB,EAAME,EACf,SACO,SAACoC,GACN,MAAMA,CACR,WACS,WACPtC,EAAM0B,IAAiB,CACzB,EACJ,CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cloneDeep<T>(obj: T): T;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getGlobal(this: any): any;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type AsyncFunction<Args extends any[], T> = (...args: Args) => Promise<T>;
|
|
2
|
+
interface Cloneable {
|
|
3
|
+
clone(): this;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* 类型保护函数,检查一个对象是否实现了 Cloneable 接口
|
|
7
|
+
*/
|
|
8
|
+
export declare function isCloneable(obj: any): obj is Cloneable;
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* @param value
|
|
12
|
+
* @returns boolean
|
|
13
|
+
*
|
|
14
|
+
* 判断一个变量是否为简单值
|
|
15
|
+
*/
|
|
16
|
+
export declare function isPrimitive(value: any): value is string | number | boolean | null | undefined;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AsyncFunction } from './type';
|
|
2
|
+
interface Setting {
|
|
3
|
+
timeout?: number;
|
|
4
|
+
timeoutResult?: any;
|
|
5
|
+
identifier?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 给函数包装缓存功能
|
|
9
|
+
*/
|
|
10
|
+
export declare function wrapFunctionWithCache<Args extends any[], T>(func: AsyncFunction<Args, T>, setting?: Setting): AsyncFunction<Args, T>;
|
|
11
|
+
export {};
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return"function"==typeof(null==e?void 0:e.clone)}function n(e){return"object"!=typeof e&&"function"!=typeof e&&"symbol"!=typeof e||null===e}function t(e){return n(e)?e+"":JSON.stringify(e,function(e,n){return"object"!=typeof n||null===n||Array.isArray(n)?n:Object.keys(n).sort().reduce(function(e,t){return e[t]=n[t],e},{})})}function r(n){if(null===n||"object"!=typeof n)return n;if(e(n))return n.clone();if(Array.isArray(n)){for(var t=[],o=0;o<n.length;o++)t[o]=r(n[o]);return t}if("object"==typeof n){var i={};for(var u in n)n.hasOwnProperty(u)&&(i[u]=r(n[u]));return i}return n}var o={};function i(e){return o[e]}var u={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};exports.cloneDeep=r,exports.generateDeterministicUniqueKey=t,exports.getGlobal=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this},exports.isCloneable=e,exports.isPrimitive=n,exports.wrapFunctionWithCache=function(n,f){return void 0===f&&(f=u),function(){var l=[].slice.call(arguments),c=t(l)+n.name+(f.identifier||"");if(o[c])return Promise.resolve(r(i(c)));var a=c+"_wl_loading";if(o[a]){var s=Object.assign({},u,f);return new Promise(function(e){var n=Date.now(),t=setInterval(function(){o[c]?(clearInterval(t),e(r(i(c)))):Date.now()-n>s.timeout&&(o[a]=!1,clearInterval(t),e(r(s.timeoutResult)))},100)})}return o[a]=!0,n.apply(void 0,l).then(function(n){return o[c]=n,n&&e(n)?n.clone():o[c]}).catch(function(e){throw e}).finally(function(){o[a]=!1})}};
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/common/type.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts","../src/common/getGlobal.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","globalThis","self","window","global","this","func","setting","args","slice","call","arguments","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","apply","then","res","error"],"mappings":"AAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,CCzBgB,SAAAC,EAA+BC,GAC7C,OAAIH,EAAYG,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBL,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBM,MAAMC,QAAQP,GAQ3DA,EAPEQ,OAAOC,KAAKT,GAChBU,OACAC,OAAO,SAACC,EAAUC,GAEjB,OADAD,EAAIC,GAAOb,EAAMa,GACVD,CACT,EAAG,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAajB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIQ,MAAMC,QAAQV,GAAM,CAEtB,IADA,IAAMkB,EAAkB,GACfC,EAAI,EAAGA,EAAInB,EAAIoB,OAAQD,IAC9BD,EAASC,GAAKF,EAAUjB,EAAImB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARlB,EAAkB,CAC3B,IAAMqB,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAOtB,EACTA,EAAYuB,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUjB,EAAIsB,KAGhC,OAAOD,CACR,CAED,OAAOrB,CACT,CCpBA,IAAMwB,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,IAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,8FCnBZ,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,qFDUEC,EACAC,GAEA,gBAFAA,IAAAA,EAAmBZ,GAEZ,eAAYa,EAAUC,GAAAA,MAAAC,KAAAC,WACrBjB,EACJtB,EAA+BoC,GAC/BF,EAAKM,MACJL,EAAQP,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOmB,QAAQC,QAAQ7B,EAAUQ,EAAiBC,KAGpD,IAAMqB,EAAwBrB,EAAS,cAEvC,GAAIF,EAAMuB,GAAgB,CACxB,IAAMC,EAAWrC,OAAOsC,OAAO,CAAA,EAAItB,EAAgBY,GACnD,WAAWM,QAAQ,SAAAC,GACjB,IAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,WACpB9B,EAAME,IACR6B,cAAcF,GACdP,EAAQ7B,EAAUQ,EAAiBC,MAC1ByB,KAAKC,MAAQF,EAAYF,EAASpB,UAC3CJ,EAAMuB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQ7B,EAAU+B,EAASnB,gBAE/B,EAAG,IACL,EACD,CAGD,OAFAL,EAAMuB,IAAiB,EAEhBT,EAAIkB,aAAIhB,GACZiB,KAAK,SAAAC,GAGJ,OADAlC,EAAME,GAAUgC,EACZA,GAAO3D,EAAY2D,GAEdA,EAAIzD,QAENuB,EAAME,EACf,SACO,SAACiC,GACN,MAAMA,CACR,WACS,WACPnC,EAAMuB,IAAiB,CACzB,EACJ,CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./common";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return"function"==typeof(null==e?void 0:e.clone)}function t(e){return"object"!=typeof e&&"function"!=typeof e&&"symbol"!=typeof e||null===e}function n(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this}function o(e){return t(e)?e+"":JSON.stringify(e,function(e,t){return"object"!=typeof t||null===t||Array.isArray(t)?t:Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{})})}function r(t){if(null===t||"object"!=typeof t)return t;if(e(t))return t.clone();if(Array.isArray(t)){const e=[];for(let n=0;n<t.length;n++)e[n]=r(t[n]);return e}if("object"==typeof t){const e={};for(let n in t)t.hasOwnProperty(n)&&(e[n]=r(t[n]));return e}return t}const i={};function u(e){return i[e]}const f={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};function l(t,n=f){return function(...l){const c=o(l)+t.name+(n.identifier||"");if(i[c])return Promise.resolve(r(u(c)));const s=c+"_wl_loading";if(i[s]){const e=Object.assign({},f,n);return new Promise(t=>{const n=Date.now(),o=setInterval(()=>{i[c]?(clearInterval(o),t(r(u(c)))):Date.now()-n>e.timeout&&(i[s]=!1,clearInterval(o),t(r(e.timeoutResult)))},100)})}return i[s]=!0,t(...l).then(t=>(i[c]=t,t&&e(t)?t.clone():i[c])).catch(e=>{throw e}).finally(()=>{i[s]=!1})}}export{r as cloneDeep,o as generateDeterministicUniqueKey,n as getGlobal,e as isCloneable,t as isPrimitive,l as wrapFunctionWithCache};
|
|
2
|
+
//# sourceMappingURL=index.modern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/common/type.ts","../src/common/getGlobal.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","getGlobal","globalThis","self","window","global","this","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","wrapFunctionWithCache","func","setting","args","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","then","res","catch","error","finally"],"mappings":"AAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,UC3BgBC,IACd,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,CCjBgB,SAAAC,EAA+BC,GAC7C,OAAIT,EAAYS,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBX,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBY,MAAMC,QAAQb,GAQ3DA,EAPEc,OAAOC,KAAKf,GAChBgB,OACAC,OAAO,CAACC,EAAUC,KACjBD,EAAIC,GAAOnB,EAAMmB,GACVD,GACN,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAavB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIc,MAAMC,QAAQhB,GAAM,CACtB,MAAMwB,EAAkB,GACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIzB,EAAI0B,OAAQD,IAC9BD,EAASC,GAAKF,EAAUvB,EAAIyB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARxB,EAAkB,CAC3B,MAAM2B,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAO5B,EACTA,EAAY6B,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUvB,EAAI4B,KAGhC,OAAOD,CACR,CAED,OAAO3B,CACT,CCpBA,MAAM8B,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,MAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,aAQEC,EACdC,EACAC,EAAmBR,GAEnB,OAAgB,YAAGS,GACjB,MAAMV,EACJtB,EAA+BgC,GAC/BF,EAAKG,MACJF,EAAQH,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOY,QAAQC,QAAQtB,EAAUQ,EAAiBC,KAGpD,MAAMc,EAAwBd,EAAS,cAEvC,GAAIF,EAAMgB,GAAgB,CACxB,MAAMC,EAAW9B,OAAO+B,OAAO,CAAA,EAAIf,EAAgBQ,GACnD,OAAO,IAAIG,QAAQC,IACjB,MAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,KACpBvB,EAAME,IACRsB,cAAcF,GACdP,EAAQtB,EAAUQ,EAAiBC,MAC1BkB,KAAKC,MAAQF,EAAYF,EAASb,UAC3CJ,EAAMgB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQtB,EAAUwB,EAASZ,gBAC5B,EACA,IACL,EACD,CAGD,OAFAL,EAAMgB,IAAiB,EAEhBN,KAAQE,GACZa,KAAKC,IAEJ1B,EAAME,GAAUwB,EACZA,GAAOzD,EAAYyD,GAEdA,EAAIvD,QAEN6B,EAAME,KAEdyB,MAAOC,IACN,MAAMA,IAEPC,QAAQ,KACP7B,EAAMgB,IAAiB,CACzB,EACJ,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function n(n){return"function"==typeof(null==n?void 0:n.clone)}function e(n){return"object"!=typeof n&&"function"!=typeof n&&"symbol"!=typeof n||null===n}function t(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this}function r(n){return e(n)?n+"":JSON.stringify(n,function(n,e){return"object"!=typeof e||null===e||Array.isArray(e)?e:Object.keys(e).sort().reduce(function(n,t){return n[t]=e[t],n},{})})}function o(e){if(null===e||"object"!=typeof e)return e;if(n(e))return e.clone();if(Array.isArray(e)){for(var t=[],r=0;r<e.length;r++)t[r]=o(e[r]);return t}if("object"==typeof e){var i={};for(var u in e)e.hasOwnProperty(u)&&(i[u]=o(e[u]));return i}return e}var i={};function u(n){return i[n]}var f={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};function l(e,t){return void 0===t&&(t=f),function(){var l=[].slice.call(arguments),c=r(l)+e.name+(t.identifier||"");if(i[c])return Promise.resolve(o(u(c)));var a=c+"_wl_loading";if(i[a]){var s=Object.assign({},f,t);return new Promise(function(n){var e=Date.now(),t=setInterval(function(){i[c]?(clearInterval(t),n(o(u(c)))):Date.now()-e>s.timeout&&(i[a]=!1,clearInterval(t),n(o(s.timeoutResult)))},100)})}return i[a]=!0,e.apply(void 0,l).then(function(e){return i[c]=e,e&&n(e)?e.clone():i[c]}).catch(function(n){throw n}).finally(function(){i[a]=!1})}}export{o as cloneDeep,r as generateDeterministicUniqueKey,t as getGlobal,n as isCloneable,e as isPrimitive,l as wrapFunctionWithCache};
|
|
2
|
+
//# sourceMappingURL=index.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.module.js","sources":["../src/common/type.ts","../src/common/getGlobal.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","getGlobal","globalThis","self","window","global","this","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","wrapFunctionWithCache","func","setting","args","slice","call","arguments","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","apply","then","res","error"],"mappings":"AAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,UC3BgBC,IACd,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,CCjBgB,SAAAC,EAA+BC,GAC7C,OAAIT,EAAYS,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBX,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBY,MAAMC,QAAQb,GAQ3DA,EAPEc,OAAOC,KAAKf,GAChBgB,OACAC,OAAO,SAACC,EAAUC,GAEjB,OADAD,EAAIC,GAAOnB,EAAMmB,GACVD,CACT,EAAG,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAavB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIc,MAAMC,QAAQhB,GAAM,CAEtB,IADA,IAAMwB,EAAkB,GACfC,EAAI,EAAGA,EAAIzB,EAAI0B,OAAQD,IAC9BD,EAASC,GAAKF,EAAUvB,EAAIyB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARxB,EAAkB,CAC3B,IAAM2B,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAO5B,EACTA,EAAY6B,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUvB,EAAI4B,KAGhC,OAAOD,CACR,CAED,OAAO3B,CACT,CCpBA,IAAM8B,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,IAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,aAQEC,EACdC,EACAC,GAEA,gBAFAA,IAAAA,EAAmBR,GAEZ,eAAYS,EAAUC,GAAAA,MAAAC,KAAAC,WACrBb,EACJtB,EAA+BgC,GAC/BF,EAAKM,MACJL,EAAQH,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOe,QAAQC,QAAQzB,EAAUQ,EAAiBC,KAGpD,IAAMiB,EAAwBjB,EAAS,cAEvC,GAAIF,EAAMmB,GAAgB,CACxB,IAAMC,EAAWjC,OAAOkC,OAAO,CAAA,EAAIlB,EAAgBQ,GACnD,WAAWM,QAAQ,SAAAC,GACjB,IAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,WACpB1B,EAAME,IACRyB,cAAcF,GACdP,EAAQzB,EAAUQ,EAAiBC,MAC1BqB,KAAKC,MAAQF,EAAYF,EAAShB,UAC3CJ,EAAMmB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQzB,EAAU2B,EAASf,gBAE/B,EAAG,IACL,EACD,CAGD,OAFAL,EAAMmB,IAAiB,EAEhBT,EAAIkB,aAAIhB,GACZiB,KAAK,SAAAC,GAGJ,OADA9B,EAAME,GAAU4B,EACZA,GAAO7D,EAAY6D,GAEdA,EAAI3D,QAEN6B,EAAME,EACf,SACO,SAAC6B,GACN,MAAMA,CACR,WACS,WACP/B,EAAMmB,IAAiB,CACzB,EACJ,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e||self).iunLibs={})}(this,function(e){function n(e){return"function"==typeof(null==e?void 0:e.clone)}function t(e){return"object"!=typeof e&&"function"!=typeof e&&"symbol"!=typeof e||null===e}function i(e){return t(e)?e+"":JSON.stringify(e,function(e,n){return"object"!=typeof n||null===n||Array.isArray(n)?n:Object.keys(n).sort().reduce(function(e,t){return e[t]=n[t],e},{})})}function o(e){if(null===e||"object"!=typeof e)return e;if(n(e))return e.clone();if(Array.isArray(e)){for(var t=[],i=0;i<e.length;i++)t[i]=o(e[i]);return t}if("object"==typeof e){var r={};for(var f in e)e.hasOwnProperty(f)&&(r[f]=o(e[f]));return r}return e}var r={};function f(e){return r[e]}var u={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};e.cloneDeep=o,e.generateDeterministicUniqueKey=i,e.getGlobal=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this},e.isCloneable=n,e.isPrimitive=t,e.wrapFunctionWithCache=function(e,t){return void 0===t&&(t=u),function(){var l=[].slice.call(arguments),c=i(l)+e.name+(t.identifier||"");if(r[c])return Promise.resolve(o(f(c)));var a=c+"_wl_loading";if(r[a]){var s=Object.assign({},u,t);return new Promise(function(e){var n=Date.now(),t=setInterval(function(){r[c]?(clearInterval(t),e(o(f(c)))):Date.now()-n>s.timeout&&(r[a]=!1,clearInterval(t),e(o(s.timeoutResult)))},100)})}return r[a]=!0,e.apply(void 0,l).then(function(e){return r[c]=e,e&&n(e)?e.clone():r[c]}).catch(function(e){throw e}).finally(function(){r[a]=!1})}}});
|
|
2
|
+
//# sourceMappingURL=index.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/common/type.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts","../src/common/getGlobal.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","globalThis","self","window","global","this","func","setting","args","slice","call","arguments","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","apply","then","res","error"],"mappings":"iOAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,CCzBgB,SAAAC,EAA+BC,GAC7C,OAAIH,EAAYG,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBL,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBM,MAAMC,QAAQP,GAQ3DA,EAPEQ,OAAOC,KAAKT,GAChBU,OACAC,OAAO,SAACC,EAAUC,GAEjB,OADAD,EAAIC,GAAOb,EAAMa,GACVD,CACT,EAAG,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAajB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIQ,MAAMC,QAAQV,GAAM,CAEtB,IADA,IAAMkB,EAAkB,GACfC,EAAI,EAAGA,EAAInB,EAAIoB,OAAQD,IAC9BD,EAASC,GAAKF,EAAUjB,EAAImB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARlB,EAAkB,CAC3B,IAAMqB,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAOtB,EACTA,EAAYuB,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUjB,EAAIsB,KAGhC,OAAOD,CACR,CAED,OAAOrB,CACT,CCpBA,IAAMwB,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,IAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,4ECnBZ,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,mEDUEC,EACAC,GAEA,gBAFAA,IAAAA,EAAmBZ,GAEZ,eAAYa,EAAUC,GAAAA,MAAAC,KAAAC,WACrBjB,EACJtB,EAA+BoC,GAC/BF,EAAKM,MACJL,EAAQP,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOmB,QAAQC,QAAQ7B,EAAUQ,EAAiBC,KAGpD,IAAMqB,EAAwBrB,EAAS,cAEvC,GAAIF,EAAMuB,GAAgB,CACxB,IAAMC,EAAWrC,OAAOsC,OAAO,CAAA,EAAItB,EAAgBY,GACnD,WAAWM,QAAQ,SAAAC,GACjB,IAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,WACpB9B,EAAME,IACR6B,cAAcF,GACdP,EAAQ7B,EAAUQ,EAAiBC,MAC1ByB,KAAKC,MAAQF,EAAYF,EAASpB,UAC3CJ,EAAMuB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQ7B,EAAU+B,EAASnB,gBAE/B,EAAG,IACL,EACD,CAGD,OAFAL,EAAMuB,IAAiB,EAEhBT,EAAIkB,aAAIhB,GACZiB,KAAK,SAAAC,GAGJ,OADAlC,EAAME,GAAUgC,EACZA,GAAO3D,EAAY2D,GAEdA,EAAIzD,QAENuB,EAAME,EACf,SACO,SAACiC,GACN,MAAMA,CACR,WACS,WACPnC,EAAMuB,IAAiB,CACzB,EACJ,CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getNode(): void;
|
package/dist/node.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return"function"==typeof(null==e?void 0:e.clone)}function n(e){return"object"!=typeof e&&"function"!=typeof e&&"symbol"!=typeof e||null===e}function t(e){return n(e)?e+"":JSON.stringify(e,function(e,n){return"object"!=typeof n||null===n||Array.isArray(n)?n:Object.keys(n).sort().reduce(function(e,t){return e[t]=n[t],e},{})})}function r(n){if(null===n||"object"!=typeof n)return n;if(e(n))return n.clone();if(Array.isArray(n)){for(var t=[],o=0;o<n.length;o++)t[o]=r(n[o]);return t}if("object"==typeof n){var i={};for(var u in n)n.hasOwnProperty(u)&&(i[u]=r(n[u]));return i}return n}var o={};function i(e){return o[e]}var u={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};exports.cloneDeep=r,exports.generateDeterministicUniqueKey=t,exports.getGlobal=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this},exports.isCloneable=e,exports.isPrimitive=n,exports.wrapFunctionWithCache=function(n,f){return void 0===f&&(f=u),function(){var l=[].slice.call(arguments),c=t(l)+n.name+(f.identifier||"");if(o[c])return Promise.resolve(r(i(c)));var a=c+"_wl_loading";if(o[a]){var s=Object.assign({},u,f);return new Promise(function(e){var n=Date.now(),t=setInterval(function(){o[c]?(clearInterval(t),e(r(i(c)))):Date.now()-n>s.timeout&&(o[a]=!1,clearInterval(t),e(r(s.timeoutResult)))},100)})}return o[a]=!0,n.apply(void 0,l).then(function(n){return o[c]=n,n&&e(n)?n.clone():o[c]}).catch(function(e){throw e}).finally(function(){o[a]=!1})}};
|
|
2
|
+
//# sourceMappingURL=node.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.cjs","sources":["../src/common/type.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts","../src/common/getGlobal.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","globalThis","self","window","global","this","func","setting","args","slice","call","arguments","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","apply","then","res","error"],"mappings":"AAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,CCzBgB,SAAAC,EAA+BC,GAC7C,OAAIH,EAAYG,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBL,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBM,MAAMC,QAAQP,GAQ3DA,EAPEQ,OAAOC,KAAKT,GAChBU,OACAC,OAAO,SAACC,EAAUC,GAEjB,OADAD,EAAIC,GAAOb,EAAMa,GACVD,CACT,EAAG,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAajB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIQ,MAAMC,QAAQV,GAAM,CAEtB,IADA,IAAMkB,EAAkB,GACfC,EAAI,EAAGA,EAAInB,EAAIoB,OAAQD,IAC9BD,EAASC,GAAKF,EAAUjB,EAAImB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARlB,EAAkB,CAC3B,IAAMqB,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAOtB,EACTA,EAAYuB,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUjB,EAAIsB,KAGhC,OAAOD,CACR,CAED,OAAOrB,CACT,CCpBA,IAAMwB,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,IAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,8FCnBZ,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,qFDUEC,EACAC,GAEA,gBAFAA,IAAAA,EAAmBZ,GAEZ,eAAYa,EAAUC,GAAAA,MAAAC,KAAAC,WACrBjB,EACJtB,EAA+BoC,GAC/BF,EAAKM,MACJL,EAAQP,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOmB,QAAQC,QAAQ7B,EAAUQ,EAAiBC,KAGpD,IAAMqB,EAAwBrB,EAAS,cAEvC,GAAIF,EAAMuB,GAAgB,CACxB,IAAMC,EAAWrC,OAAOsC,OAAO,CAAA,EAAItB,EAAgBY,GACnD,WAAWM,QAAQ,SAAAC,GACjB,IAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,WACpB9B,EAAME,IACR6B,cAAcF,GACdP,EAAQ7B,EAAUQ,EAAiBC,MAC1ByB,KAAKC,MAAQF,EAAYF,EAASpB,UAC3CJ,EAAMuB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQ7B,EAAU+B,EAASnB,gBAE/B,EAAG,IACL,EACD,CAGD,OAFAL,EAAMuB,IAAiB,EAEhBT,EAAIkB,aAAIhB,GACZiB,KAAK,SAAAC,GAGJ,OADAlC,EAAME,GAAUgC,EACZA,GAAO3D,EAAY2D,GAEdA,EAAIzD,QAENuB,EAAME,EACf,SACO,SAACiC,GACN,MAAMA,CACR,WACS,WACPnC,EAAMuB,IAAiB,CACzB,EACJ,CACF"}
|
package/dist/node.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return"function"==typeof(null==e?void 0:e.clone)}function t(e){return"object"!=typeof e&&"function"!=typeof e&&"symbol"!=typeof e||null===e}function n(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this}function o(e){return t(e)?e+"":JSON.stringify(e,function(e,t){return"object"!=typeof t||null===t||Array.isArray(t)?t:Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{})})}function r(t){if(null===t||"object"!=typeof t)return t;if(e(t))return t.clone();if(Array.isArray(t)){const e=[];for(let n=0;n<t.length;n++)e[n]=r(t[n]);return e}if("object"==typeof t){const e={};for(let n in t)t.hasOwnProperty(n)&&(e[n]=r(t[n]));return e}return t}const i={};function u(e){return i[e]}const f={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};function l(t,n=f){return function(...l){const c=o(l)+t.name+(n.identifier||"");if(i[c])return Promise.resolve(r(u(c)));const s=c+"_wl_loading";if(i[s]){const e=Object.assign({},f,n);return new Promise(t=>{const n=Date.now(),o=setInterval(()=>{i[c]?(clearInterval(o),t(r(u(c)))):Date.now()-n>e.timeout&&(i[s]=!1,clearInterval(o),t(r(e.timeoutResult)))},100)})}return i[s]=!0,t(...l).then(t=>(i[c]=t,t&&e(t)?t.clone():i[c])).catch(e=>{throw e}).finally(()=>{i[s]=!1})}}export{r as cloneDeep,o as generateDeterministicUniqueKey,n as getGlobal,e as isCloneable,t as isPrimitive,l as wrapFunctionWithCache};
|
|
2
|
+
//# sourceMappingURL=node.modern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.modern.js","sources":["../src/common/type.ts","../src/common/getGlobal.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","getGlobal","globalThis","self","window","global","this","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","wrapFunctionWithCache","func","setting","args","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","then","res","catch","error","finally"],"mappings":"AAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,UC3BgBC,IACd,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,CCjBgB,SAAAC,EAA+BC,GAC7C,OAAIT,EAAYS,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBX,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBY,MAAMC,QAAQb,GAQ3DA,EAPEc,OAAOC,KAAKf,GAChBgB,OACAC,OAAO,CAACC,EAAUC,KACjBD,EAAIC,GAAOnB,EAAMmB,GACVD,GACN,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAavB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIc,MAAMC,QAAQhB,GAAM,CACtB,MAAMwB,EAAkB,GACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIzB,EAAI0B,OAAQD,IAC9BD,EAASC,GAAKF,EAAUvB,EAAIyB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARxB,EAAkB,CAC3B,MAAM2B,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAO5B,EACTA,EAAY6B,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUvB,EAAI4B,KAGhC,OAAOD,CACR,CAED,OAAO3B,CACT,CCpBA,MAAM8B,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,MAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,aAQEC,EACdC,EACAC,EAAmBR,GAEnB,OAAgB,YAAGS,GACjB,MAAMV,EACJtB,EAA+BgC,GAC/BF,EAAKG,MACJF,EAAQH,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOY,QAAQC,QAAQtB,EAAUQ,EAAiBC,KAGpD,MAAMc,EAAwBd,EAAS,cAEvC,GAAIF,EAAMgB,GAAgB,CACxB,MAAMC,EAAW9B,OAAO+B,OAAO,CAAA,EAAIf,EAAgBQ,GACnD,OAAO,IAAIG,QAAQC,IACjB,MAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,KACpBvB,EAAME,IACRsB,cAAcF,GACdP,EAAQtB,EAAUQ,EAAiBC,MAC1BkB,KAAKC,MAAQF,EAAYF,EAASb,UAC3CJ,EAAMgB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQtB,EAAUwB,EAASZ,gBAC5B,EACA,IACL,EACD,CAGD,OAFAL,EAAMgB,IAAiB,EAEhBN,KAAQE,GACZa,KAAKC,IAEJ1B,EAAME,GAAUwB,EACZA,GAAOzD,EAAYyD,GAEdA,EAAIvD,QAEN6B,EAAME,KAEdyB,MAAOC,IACN,MAAMA,IAEPC,QAAQ,KACP7B,EAAMgB,IAAiB,CACzB,EACJ,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function n(n){return"function"==typeof(null==n?void 0:n.clone)}function e(n){return"object"!=typeof n&&"function"!=typeof n&&"symbol"!=typeof n||null===n}function t(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this}function r(n){return e(n)?n+"":JSON.stringify(n,function(n,e){return"object"!=typeof e||null===e||Array.isArray(e)?e:Object.keys(e).sort().reduce(function(n,t){return n[t]=e[t],n},{})})}function o(e){if(null===e||"object"!=typeof e)return e;if(n(e))return e.clone();if(Array.isArray(e)){for(var t=[],r=0;r<e.length;r++)t[r]=o(e[r]);return t}if("object"==typeof e){var i={};for(var u in e)e.hasOwnProperty(u)&&(i[u]=o(e[u]));return i}return e}var i={};function u(n){return i[n]}var f={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};function l(e,t){return void 0===t&&(t=f),function(){var l=[].slice.call(arguments),c=r(l)+e.name+(t.identifier||"");if(i[c])return Promise.resolve(o(u(c)));var a=c+"_wl_loading";if(i[a]){var s=Object.assign({},f,t);return new Promise(function(n){var e=Date.now(),t=setInterval(function(){i[c]?(clearInterval(t),n(o(u(c)))):Date.now()-e>s.timeout&&(i[a]=!1,clearInterval(t),n(o(s.timeoutResult)))},100)})}return i[a]=!0,e.apply(void 0,l).then(function(e){return i[c]=e,e&&n(e)?e.clone():i[c]}).catch(function(n){throw n}).finally(function(){i[a]=!1})}}export{o as cloneDeep,r as generateDeterministicUniqueKey,t as getGlobal,n as isCloneable,e as isPrimitive,l as wrapFunctionWithCache};
|
|
2
|
+
//# sourceMappingURL=node.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.module.js","sources":["../src/common/type.ts","../src/common/getGlobal.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","getGlobal","globalThis","self","window","global","this","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","wrapFunctionWithCache","func","setting","args","slice","call","arguments","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","apply","then","res","error"],"mappings":"AAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,UC3BgBC,IACd,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,CCjBgB,SAAAC,EAA+BC,GAC7C,OAAIT,EAAYS,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBX,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBY,MAAMC,QAAQb,GAQ3DA,EAPEc,OAAOC,KAAKf,GAChBgB,OACAC,OAAO,SAACC,EAAUC,GAEjB,OADAD,EAAIC,GAAOnB,EAAMmB,GACVD,CACT,EAAG,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAavB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIc,MAAMC,QAAQhB,GAAM,CAEtB,IADA,IAAMwB,EAAkB,GACfC,EAAI,EAAGA,EAAIzB,EAAI0B,OAAQD,IAC9BD,EAASC,GAAKF,EAAUvB,EAAIyB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARxB,EAAkB,CAC3B,IAAM2B,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAO5B,EACTA,EAAY6B,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUvB,EAAI4B,KAGhC,OAAOD,CACR,CAED,OAAO3B,CACT,CCpBA,IAAM8B,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,IAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,aAQEC,EACdC,EACAC,GAEA,gBAFAA,IAAAA,EAAmBR,GAEZ,eAAYS,EAAUC,GAAAA,MAAAC,KAAAC,WACrBb,EACJtB,EAA+BgC,GAC/BF,EAAKM,MACJL,EAAQH,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOe,QAAQC,QAAQzB,EAAUQ,EAAiBC,KAGpD,IAAMiB,EAAwBjB,EAAS,cAEvC,GAAIF,EAAMmB,GAAgB,CACxB,IAAMC,EAAWjC,OAAOkC,OAAO,CAAA,EAAIlB,EAAgBQ,GACnD,WAAWM,QAAQ,SAAAC,GACjB,IAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,WACpB1B,EAAME,IACRyB,cAAcF,GACdP,EAAQzB,EAAUQ,EAAiBC,MAC1BqB,KAAKC,MAAQF,EAAYF,EAAShB,UAC3CJ,EAAMmB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQzB,EAAU2B,EAASf,gBAE/B,EAAG,IACL,EACD,CAGD,OAFAL,EAAMmB,IAAiB,EAEhBT,EAAIkB,aAAIhB,GACZiB,KAAK,SAAAC,GAGJ,OADA9B,EAAME,GAAU4B,EACZA,GAAO7D,EAAY6D,GAEdA,EAAI3D,QAEN6B,EAAME,EACf,SACO,SAAC6B,GACN,MAAMA,CACR,WACS,WACP/B,EAAMmB,IAAiB,CACzB,EACJ,CACF"}
|
package/dist/node.umd.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e||self).iunLibs={})}(this,function(e){function n(e){return"function"==typeof(null==e?void 0:e.clone)}function t(e){return"object"!=typeof e&&"function"!=typeof e&&"symbol"!=typeof e||null===e}function i(e){return t(e)?e+"":JSON.stringify(e,function(e,n){return"object"!=typeof n||null===n||Array.isArray(n)?n:Object.keys(n).sort().reduce(function(e,t){return e[t]=n[t],e},{})})}function o(e){if(null===e||"object"!=typeof e)return e;if(n(e))return e.clone();if(Array.isArray(e)){for(var t=[],i=0;i<e.length;i++)t[i]=o(e[i]);return t}if("object"==typeof e){var r={};for(var f in e)e.hasOwnProperty(f)&&(r[f]=o(e[f]));return r}return e}var r={};function f(e){return r[e]}var u={timeout:6e4,timeoutResult:{code:408,msg:"请求超时"},identifier:""};e.cloneDeep=o,e.generateDeterministicUniqueKey=i,e.getGlobal=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this},e.isCloneable=n,e.isPrimitive=t,e.wrapFunctionWithCache=function(e,t){return void 0===t&&(t=u),function(){var l=[].slice.call(arguments),c=i(l)+e.name+(t.identifier||"");if(r[c])return Promise.resolve(o(f(c)));var a=c+"_wl_loading";if(r[a]){var s=Object.assign({},u,t);return new Promise(function(e){var n=Date.now(),t=setInterval(function(){r[c]?(clearInterval(t),e(o(f(c)))):Date.now()-n>s.timeout&&(r[a]=!1,clearInterval(t),e(o(s.timeoutResult)))},100)})}return r[a]=!0,e.apply(void 0,l).then(function(e){return r[c]=e,e&&n(e)?e.clone():r[c]}).catch(function(e){throw e}).finally(function(){r[a]=!1})}}});
|
|
2
|
+
//# sourceMappingURL=node.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.umd.js","sources":["../src/common/type.ts","../src/common/generateDeterministicUniqueKey.ts","../src/common/cloneDeep.ts","../src/common/wrapFunctionWithCache.ts","../src/common/getGlobal.ts"],"sourcesContent":["export type AsyncFunction<Args extends any[], T> = (\n ...args: Args\n) => Promise<T>;\n\ninterface Cloneable {\n clone(): this;\n}\n/**\n * 类型保护函数,检查一个对象是否实现了 Cloneable 接口\n */\nexport function isCloneable(obj: any): obj is Cloneable {\n return typeof obj?.clone === 'function';\n}\n\n/**\n *\n * @param value\n * @returns boolean\n *\n * 判断一个变量是否为简单值\n */\nexport function isPrimitive(\n value: any\n): value is string | number | boolean | null | undefined {\n return (\n (typeof value !== 'object' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol') ||\n value === null\n );\n}\n","import { isPrimitive } from './type';\n/**\n * @private\n * 序列化 api 参数, 相等的对象,返回相同的字符串\n */\nexport function generateDeterministicUniqueKey(params: any) {\n if (isPrimitive(params)) {\n return params + '';\n }\n return JSON.stringify(params, function(_key: string | number, value: any) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((pre: any, cur: string) => {\n pre[cur] = value[cur];\n return pre;\n }, {});\n }\n return value;\n });\n}\n","import { isCloneable } from './type';\n\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if(isCloneable(obj)) {\n return obj.clone();\n }\n\n if (Array.isArray(obj)) {\n const newArray: any[] = [];\n for (let i = 0; i < obj.length; i++) {\n newArray[i] = cloneDeep(obj[i]);\n }\n return (newArray as unknown) as T;\n }\n\n if (typeof obj === 'object') {\n const newObj: { [key: string]: any } = {};\n for (let key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n newObj[key] = cloneDeep(obj[key]);\n }\n }\n return newObj as T;\n }\n\n return obj;\n}\n","// import { getGlobal } from './getGlobal';\nimport { generateDeterministicUniqueKey } from './generateDeterministicUniqueKey';\nimport { cloneDeep } from './cloneDeep';\nimport { isCloneable, AsyncFunction } from './type';\n// const global = getGlobal();\n// if (!global.__wl_fun_api_cache) {\n// global.__wl_fun_api_cache = {};\n// }\n\n// const cache = global.__wl_fun_api_cache;\nconst cache: Record<string, any> = {};\nfunction getCachedData<T = any>(apiKey: string) {\n return cache[apiKey] as T;\n}\n\ninterface Setting {\n timeout?: number;\n timeoutResult?: any;\n identifier?: string;\n}\nconst defalutSetting: Setting = {\n timeout: 60000,\n timeoutResult: { code: 408, msg: '请求超时' },\n identifier: '',\n};\n\n/**\n * 给函数包装缓存功能\n */\n\n\nexport function wrapFunctionWithCache<Args extends any[], T>(\n func: AsyncFunction<Args, T>,\n setting: Setting = defalutSetting\n): AsyncFunction<Args, T> {\n return function(...args: Args): Promise<T> {\n const apiKey: string =\n generateDeterministicUniqueKey(args) +\n func.name +\n (setting.identifier || ''); //缓存key\n\n if (cache[apiKey]) {\n return Promise.resolve(cloneDeep(getCachedData<T>(apiKey)));\n }\n\n const apiLoadingKey: string = apiKey + '_wl_loading'; //缓存loading key\n\n if (cache[apiLoadingKey]) {\n const _setting = Object.assign({}, defalutSetting, setting);\n return new Promise(resolve => {\n const startTime = Date.now();\n const timer = setInterval(() => {\n if (cache[apiKey]) {\n clearInterval(timer);\n resolve(cloneDeep(getCachedData<T>(apiKey)));\n } else if (Date.now() - startTime > _setting.timeout!) {\n cache[apiLoadingKey] = false;\n clearInterval(timer);\n resolve(cloneDeep(_setting.timeoutResult));\n }\n }, 100);\n });\n }\n cache[apiLoadingKey] = true;\n\n return func(...args)\n .then(res => {\n // 缓存原始数据,或者clone数据,不能return 同一份数据,会被释放\n cache[apiKey] = res;\n if (res && isCloneable(res)) {\n // fetch 缓存,不能把原始数据return,否则会被释放\n return res.clone();\n }\n return cache[apiKey];\n })\n .catch((error: any) => {\n throw error;\n })\n .finally(() => {\n cache[apiLoadingKey] = false;\n });\n };\n}\n","declare var global: typeof globalThis;\n\n// 获取全局对象\nexport function getGlobal(this: any) {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // 如果以上都不符合,则返回 this\n return this;\n}\n"],"names":["isCloneable","obj","clone","isPrimitive","value","generateDeterministicUniqueKey","params","JSON","stringify","_key","Array","isArray","Object","keys","sort","reduce","pre","cur","cloneDeep","newArray","i","length","newObj","key","hasOwnProperty","cache","getCachedData","apiKey","defalutSetting","timeout","timeoutResult","code","msg","identifier","globalThis","self","window","global","this","func","setting","args","slice","call","arguments","name","Promise","resolve","apiLoadingKey","_setting","assign","startTime","Date","now","timer","setInterval","clearInterval","apply","then","res","error"],"mappings":"iOAUM,SAAUA,EAAYC,GAC1B,MAA6B,yBAAfA,SAAAA,EAAKC,MACrB,CASM,SAAUC,EACdC,GAEA,MACoB,iBAAVA,GACW,mBAAVA,GACU,iBAAVA,GACC,OAAVA,CAEJ,CCzBgB,SAAAC,EAA+BC,GAC7C,OAAIH,EAAYG,GACPA,EAAS,GAEXC,KAAKC,UAAUF,EAAQ,SAASG,EAAuBL,GAC5D,MAAqB,iBAAVA,GAAgC,OAAVA,GAAmBM,MAAMC,QAAQP,GAQ3DA,EAPEQ,OAAOC,KAAKT,GAChBU,OACAC,OAAO,SAACC,EAAUC,GAEjB,OADAD,EAAIC,GAAOb,EAAMa,GACVD,CACT,EAAG,CAAE,EAGX,EACF,CClBgB,SAAAE,EAAajB,GAC3B,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAGD,EAAYC,GACb,OAAOA,EAAIC,QAGb,GAAIQ,MAAMC,QAAQV,GAAM,CAEtB,IADA,IAAMkB,EAAkB,GACfC,EAAI,EAAGA,EAAInB,EAAIoB,OAAQD,IAC9BD,EAASC,GAAKF,EAAUjB,EAAImB,IAE9B,OAAQD,CACT,CAED,GAAmB,iBAARlB,EAAkB,CAC3B,IAAMqB,EAAiC,CAAE,EACzC,IAAK,IAAIC,KAAOtB,EACTA,EAAYuB,eAAeD,KAC9BD,EAAOC,GAAOL,EAAUjB,EAAIsB,KAGhC,OAAOD,CACR,CAED,OAAOrB,CACT,CCpBA,IAAMwB,EAA6B,CAAE,EACrC,SAASC,EAAuBC,GAC9B,OAAOF,EAAME,EACf,CAOA,IAAMC,EAA0B,CAC9BC,QAAS,IACTC,cAAe,CAAEC,KAAM,IAAKC,IAAK,QACjCC,WAAY,4ECnBZ,MAA0B,oBAAfC,WACFA,WAGW,oBAATC,KACFA,KAGa,oBAAXC,OACFA,OAGa,oBAAXC,OACFA,OAKXC,IAAA,mEDUEC,EACAC,GAEA,gBAFAA,IAAAA,EAAmBZ,GAEZ,eAAYa,EAAUC,GAAAA,MAAAC,KAAAC,WACrBjB,EACJtB,EAA+BoC,GAC/BF,EAAKM,MACJL,EAAQP,YAAc,IAEzB,GAAIR,EAAME,GACR,OAAOmB,QAAQC,QAAQ7B,EAAUQ,EAAiBC,KAGpD,IAAMqB,EAAwBrB,EAAS,cAEvC,GAAIF,EAAMuB,GAAgB,CACxB,IAAMC,EAAWrC,OAAOsC,OAAO,CAAA,EAAItB,EAAgBY,GACnD,WAAWM,QAAQ,SAAAC,GACjB,IAAMI,EAAYC,KAAKC,MACjBC,EAAQC,YAAY,WACpB9B,EAAME,IACR6B,cAAcF,GACdP,EAAQ7B,EAAUQ,EAAiBC,MAC1ByB,KAAKC,MAAQF,EAAYF,EAASpB,UAC3CJ,EAAMuB,IAAiB,EACvBQ,cAAcF,GACdP,EAAQ7B,EAAU+B,EAASnB,gBAE/B,EAAG,IACL,EACD,CAGD,OAFAL,EAAMuB,IAAiB,EAEhBT,EAAIkB,aAAIhB,GACZiB,KAAK,SAAAC,GAGJ,OADAlC,EAAME,GAAUgC,EACZA,GAAO3D,EAAY2D,GAEdA,EAAIzD,QAENuB,EAAME,EACf,SACO,SAACiC,GACN,MAAMA,CACR,WACS,WACPnC,EAAMuB,IAAiB,CACzB,EACJ,CACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@i.un/libs",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "一个实用的ts函数库",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"source": "src/index.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
"browser": {
|
|
9
|
+
"types": "./dist/browser.d.ts",
|
|
10
|
+
"require": "./dist/browser.cjs",
|
|
11
|
+
"default": "./dist/browser.modern.js"
|
|
12
|
+
},
|
|
13
|
+
"node": {
|
|
14
|
+
"types": "./dist/node.d.ts",
|
|
15
|
+
"require": "./dist/node.cjs",
|
|
16
|
+
"default": "./dist/node.modern.js"
|
|
17
|
+
},
|
|
18
|
+
"default": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"require": "./dist/index.cjs",
|
|
21
|
+
"default": "./dist/index.modern.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"main": "dist/index.cjs",
|
|
25
|
+
"module": "dist/index.module.js",
|
|
26
|
+
"umd:main": "dist/index.umd.js",
|
|
27
|
+
"amdName": "iunLibs",
|
|
28
|
+
"types": "dist/index.d.ts",
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "microbundle src/*.ts",
|
|
31
|
+
"dev": "microbundle watch",
|
|
32
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"dist"
|
|
39
|
+
],
|
|
40
|
+
"keywords": [],
|
|
41
|
+
"author": "zhyswan",
|
|
42
|
+
"license": "ISC",
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"microbundle": "^0.15.1"
|
|
45
|
+
}
|
|
46
|
+
}
|