Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 9x 9x 5x 4x 4x 10x 10x 1x 10x 10x 5x 5x 10x 10x 2x 3x 3x 1x 2x | import { assign } from 'lodash-uni'
import { createUrlQueryString } from './createUrlQueryString'
import { parseUrlQueryString } from './parseUrlQueryString'
export type MiniProgramUrlProvider = 'wechat'
export type MiniProgramUrlVersion = 'release' | 'develop' | 'trial'
export type MiniProgramUrlStringInput = `mp://${string}`
export type MiniProgramUrlJsonInput = {
/** 提供商 */
provider?: MiniProgramUrlProvider
/** APPID */
appId?: string
/** 原始ID */
rawId?: string
/** 版本 */
version?: MiniProgramUrlVersion
/** 路径 */
path?: string
/** 查询参数 */
query?: Record<string, any>
/** 额外数据 */
data?: any
}
export type MiniProgramUrlInput =
| MiniProgramUrlStringInput
| MiniProgramUrlJsonInput
/**
* 小程序链接。
*/
export class MiniProgramUrl {
private payload: MiniProgramUrlJsonInput = {}
constructor(payload: MiniProgramUrlInput) {
if (typeof payload === 'string') {
this.update(JSON.parse(payload.substring(5)))
} else {
this.update(payload)
}
}
private getPath() {
return (
(this.payload.path ? this.payload.path.substring(1) : '') +
(this.payload.query ? `?${createUrlQueryString(this.payload.query)}` : '')
)
}
update(payload: Partial<MiniProgramUrlJsonInput>): this {
if (payload.path) {
if (payload.path[0] !== '/') {
payload.path = `/${payload.path}`
}
const [path, query] = payload.path.split('?')
if (query) {
payload.path = path
payload.query = {
...parseUrlQueryString(query),
...payload.query,
}
}
}
assign(this.payload, payload)
return this
}
toJson(): MiniProgramUrlJsonInput {
return this.payload
}
toString(): string {
return `mp://${JSON.stringify(this.payload)}`
}
toWxOpenLaunchWeappAttrs() {
return {
username: this.payload.rawId,
path: this.getPath(),
envVersion: this.payload.version,
extraData: this.payload.data
? JSON.stringify(this.payload.data)
: undefined,
}
}
toWxNavigateToMiniProgramParams() {
return {
appId: this.payload.appId,
path: this.getPath(),
envVersion: this.payload.version,
extraData: this.payload.data,
}
}
static is(
value: MiniProgramUrlStringInput,
): value is MiniProgramUrlStringInput {
return value.substring(0, 5) === 'mp://'
}
}
|