-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
143 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/** 这是一个生命周期Hooks | ||
* | ||
*/ | ||
|
||
/** 状态枚举 | ||
* 数据加载完成状态 | ||
* 渲染完成状态 | ||
* 更新完成 | ||
* 销毁完成 | ||
*/ | ||
|
||
enum Status { | ||
Loading = 'loading', | ||
Loaded = 'loaded', | ||
Rendering = 'rendering', | ||
Rendered = 'rendered', | ||
UpdateStart = 'start_update', | ||
Updated = 'updated', | ||
Destroyed = 'destroyed' | ||
} | ||
|
||
export type LifeCycleHandler = (...args: any[]) => void; | ||
/** 生命周期处理方法 */ | ||
export type LifeCycle = { | ||
[key: string]: LifeCycleHandler[]; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
import { | ||
decodeHashURI, | ||
decodeParamsURI, | ||
encodeHashURI, | ||
encodeParamsURI, | ||
setEncodeParams, | ||
getDecodeParams | ||
} from './url'; | ||
|
||
declare global { | ||
interface URL { | ||
encodeParamsURI: (params: Record<string, any>) => string; | ||
decodeParamsURI: () => Record<string, any>; | ||
encodeHashURI: (params: Record<string, any>) => string; | ||
decodeHashURI: () => Record<string, any>; | ||
} | ||
} | ||
|
||
/** 给URL上添加加密的params属性 */ | ||
URL.prototype.encodeParamsURI = function (params: Record<string, any>) { | ||
setEncodeParams(this.searchParams, params); | ||
return this.toString(); | ||
}; | ||
|
||
/** 解密URL上params属性 */ | ||
URL.prototype.decodeParamsURI = function () { | ||
const default_params = this.searchParams; | ||
return getDecodeParams(default_params); | ||
}; | ||
|
||
/** 给URL上添加加密的hash属性 */ | ||
URL.prototype.encodeHashURI = function (params: Record<string, any>) { | ||
const hash = this.hash.slice(1); | ||
const hash_params = new URLSearchParams(hash); | ||
setEncodeParams(hash_params, params); | ||
this.hash = hash_params.toString(); | ||
return this.toString(); | ||
}; | ||
|
||
/** 解密URL上hash属性 */ | ||
URL.prototype.decodeHashURI = function () { | ||
const hash = this.hash.slice(1); | ||
const hash_params = new URLSearchParams(hash); | ||
return getDecodeParams(hash_params); | ||
}; | ||
|
||
export { encodeParamsURI, decodeParamsURI, encodeHashURI, decodeHashURI }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/** | ||
* 对URL上的参数增加加密参数 | ||
* @param target_params 添加参数的URL对象 | ||
* @param params 需要添加的参数 | ||
* @returns | ||
*/ | ||
export const setEncodeParams = ( | ||
target_params: URLSearchParams, | ||
params: Record<string, any> | ||
) => { | ||
Object.keys(params).forEach((p) => { | ||
const append = window.btoa( | ||
window.encodeURIComponent(JSON.stringify(params[p])) | ||
); | ||
target_params.set(p, append); | ||
}); | ||
return target_params; | ||
}; | ||
|
||
/** | ||
* 保留原始没有加密过的参数,对加密过的参数进行解密 | ||
* @param default_params 原始URL上的参数信息 | ||
* @returns 解密后的结果 | ||
*/ | ||
export const getDecodeParams = (default_params: URLSearchParams) => { | ||
const target_params: Record<string, any> = {}; | ||
for (const [key, value] of default_params.entries()) { | ||
if (value) { | ||
try { | ||
const decode = JSON.parse( | ||
window.decodeURIComponent(window.atob(value)) | ||
); | ||
target_params[key] = decode; | ||
} catch (e) { | ||
target_params[key] = value; | ||
} | ||
} | ||
} | ||
return target_params; | ||
}; | ||
|
||
/** 给URL上添加加密的params属性 */ | ||
export const encodeParamsURI = (uri: string, params: Record<string, any>) => { | ||
const url = new URL(uri); | ||
setEncodeParams(url.searchParams, params); | ||
return url.toString(); | ||
}; | ||
|
||
/** 解密URL上params属性 */ | ||
export const decodeParamsURI = (uri: string) => { | ||
const default_params = new URL(uri).searchParams; | ||
return getDecodeParams(default_params); | ||
}; | ||
|
||
/** 给URL上添加加密的hash属性 */ | ||
export const encodeHashURI = (uri: string, params: Record<string, any>) => { | ||
const url = new URL(uri); | ||
const hash = url.hash.slice(1); | ||
const hash_params = new URLSearchParams(hash); | ||
setEncodeParams(hash_params, params); | ||
url.hash = hash_params.toString(); | ||
return url.toString(); | ||
}; | ||
|
||
/** 解密URL上hash属性 */ | ||
export const decodeHashURI = (uri: string) => { | ||
const hash = new URL(uri).hash.slice(1); | ||
const hash_params = new URLSearchParams(hash); | ||
return getDecodeParams(hash_params); | ||
}; |