mp-weixin-back 0.0.5 → 0.0.7
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/build.config.ts +2 -2
- package/dist/index.cjs +33 -11
- package/dist/index.d.cts +4 -0
- package/dist/index.d.mts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.mjs +33 -11
- package/package.json +5 -2
- package/src/context.ts +26 -9
- package/src/index.ts +1 -0
- package/types/index.ts +5 -1
- package/utils/index.ts +8 -2
- /package/{.prettierrc.js → .prettierrc.cjs} +0 -0
package/build.config.ts
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const path = require('path');
|
|
4
4
|
const fs = require('fs');
|
|
5
5
|
const JSON5 = require('json5');
|
|
6
|
+
const kolorist = require('kolorist');
|
|
6
7
|
const generate = require('@babel/generator');
|
|
7
8
|
const compilerSfc = require('@vue/compiler-sfc');
|
|
8
9
|
const astKit = require('ast-kit');
|
|
@@ -63,14 +64,17 @@ async function transformVueFile(code, id) {
|
|
|
63
64
|
const callback = node.expression.arguments[0];
|
|
64
65
|
const backArguments = node.expression.arguments[1];
|
|
65
66
|
if (backArguments && backArguments.type == "ObjectExpression") {
|
|
66
|
-
const config = new Function(
|
|
67
|
+
const config = new Function(
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
`return (${(generate__default.default ? generate__default.default : generate__default)(backArguments).code});`
|
|
70
|
+
)();
|
|
67
71
|
pageBackConfig = { ...pageBackConfig, ...config };
|
|
68
72
|
}
|
|
69
73
|
if (callback && (callback.type === "ArrowFunctionExpression" || callback.type === "FunctionExpression")) {
|
|
70
74
|
const body = callback.body;
|
|
71
75
|
if (body.type === "BlockStatement") {
|
|
72
76
|
body.body.forEach((statement) => {
|
|
73
|
-
callbackCode += generate__default(statement).code;
|
|
77
|
+
callbackCode += (generate__default.default ? generate__default.default : generate__default)(statement).code;
|
|
74
78
|
});
|
|
75
79
|
}
|
|
76
80
|
}
|
|
@@ -80,6 +84,7 @@ async function transformVueFile(code, id) {
|
|
|
80
84
|
}
|
|
81
85
|
if (!hasPageBack)
|
|
82
86
|
return;
|
|
87
|
+
this.log.devLog(`\u9875\u9762${this.getPageById(id)}\u6CE8\u5165mp-weixin-back`);
|
|
83
88
|
if (!pageBackConfig.preventDefault) {
|
|
84
89
|
callbackCode += `uni.navigateBack({ delta: 1 });`;
|
|
85
90
|
}
|
|
@@ -145,6 +150,19 @@ class pageContext {
|
|
|
145
150
|
constructor(config) {
|
|
146
151
|
__publicField(this, "config");
|
|
147
152
|
__publicField(this, "pages", []);
|
|
153
|
+
__publicField(this, "log", {
|
|
154
|
+
info: (text) => {
|
|
155
|
+
console.log(kolorist.white(text));
|
|
156
|
+
},
|
|
157
|
+
error: (text) => {
|
|
158
|
+
console.log(kolorist.red(text));
|
|
159
|
+
},
|
|
160
|
+
devLog: (text) => {
|
|
161
|
+
if (this.config.mode === "development" && this.config.debug) {
|
|
162
|
+
console.log(kolorist.green(text));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
});
|
|
148
166
|
this.config = config;
|
|
149
167
|
}
|
|
150
168
|
getPagesJsonPath() {
|
|
@@ -168,16 +186,19 @@ class pageContext {
|
|
|
168
186
|
this.pages.push(...mainPages);
|
|
169
187
|
}
|
|
170
188
|
if (subpackages) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
189
|
+
for (let i = 0; i < subpackages.length; i++) {
|
|
190
|
+
const element = subpackages[i];
|
|
191
|
+
const root = element.root;
|
|
192
|
+
const subPages = element.pages.reduce((acc, current) => {
|
|
193
|
+
acc.push(`${root}/${current.path}`.replace("//", "/"));
|
|
194
|
+
return acc;
|
|
195
|
+
}, []);
|
|
196
|
+
this.pages.push(...subPages);
|
|
197
|
+
}
|
|
177
198
|
}
|
|
178
199
|
} catch (error) {
|
|
179
|
-
|
|
180
|
-
|
|
200
|
+
this.log.error("\u8BFB\u53D6pages.json\u6587\u4EF6\u5931\u8D25");
|
|
201
|
+
this.log.devLog(String(error));
|
|
181
202
|
}
|
|
182
203
|
}
|
|
183
204
|
// 获取指定id的page
|
|
@@ -195,7 +216,8 @@ function MpBackPlugin(userOptions = {}) {
|
|
|
195
216
|
let context;
|
|
196
217
|
const defaultOptions = {
|
|
197
218
|
preventDefault: false,
|
|
198
|
-
frequency: 1
|
|
219
|
+
frequency: 1,
|
|
220
|
+
debug: false
|
|
199
221
|
};
|
|
200
222
|
const options = { ...defaultOptions, ...userOptions };
|
|
201
223
|
return {
|
package/dist/index.d.cts
CHANGED
package/dist/index.d.mts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import JSON5 from 'json5';
|
|
4
|
+
import { white, red, green } from 'kolorist';
|
|
4
5
|
import generate from '@babel/generator';
|
|
5
6
|
import { parse } from '@vue/compiler-sfc';
|
|
6
7
|
import { babelParse, walkAST } from 'ast-kit';
|
|
@@ -54,14 +55,17 @@ async function transformVueFile(code, id) {
|
|
|
54
55
|
const callback = node.expression.arguments[0];
|
|
55
56
|
const backArguments = node.expression.arguments[1];
|
|
56
57
|
if (backArguments && backArguments.type == "ObjectExpression") {
|
|
57
|
-
const config = new Function(
|
|
58
|
+
const config = new Function(
|
|
59
|
+
// @ts-ignore
|
|
60
|
+
`return (${(generate.default ? generate.default : generate)(backArguments).code});`
|
|
61
|
+
)();
|
|
58
62
|
pageBackConfig = { ...pageBackConfig, ...config };
|
|
59
63
|
}
|
|
60
64
|
if (callback && (callback.type === "ArrowFunctionExpression" || callback.type === "FunctionExpression")) {
|
|
61
65
|
const body = callback.body;
|
|
62
66
|
if (body.type === "BlockStatement") {
|
|
63
67
|
body.body.forEach((statement) => {
|
|
64
|
-
callbackCode += generate(statement).code;
|
|
68
|
+
callbackCode += (generate.default ? generate.default : generate)(statement).code;
|
|
65
69
|
});
|
|
66
70
|
}
|
|
67
71
|
}
|
|
@@ -71,6 +75,7 @@ async function transformVueFile(code, id) {
|
|
|
71
75
|
}
|
|
72
76
|
if (!hasPageBack)
|
|
73
77
|
return;
|
|
78
|
+
this.log.devLog(`\u9875\u9762${this.getPageById(id)}\u6CE8\u5165mp-weixin-back`);
|
|
74
79
|
if (!pageBackConfig.preventDefault) {
|
|
75
80
|
callbackCode += `uni.navigateBack({ delta: 1 });`;
|
|
76
81
|
}
|
|
@@ -136,6 +141,19 @@ class pageContext {
|
|
|
136
141
|
constructor(config) {
|
|
137
142
|
__publicField(this, "config");
|
|
138
143
|
__publicField(this, "pages", []);
|
|
144
|
+
__publicField(this, "log", {
|
|
145
|
+
info: (text) => {
|
|
146
|
+
console.log(white(text));
|
|
147
|
+
},
|
|
148
|
+
error: (text) => {
|
|
149
|
+
console.log(red(text));
|
|
150
|
+
},
|
|
151
|
+
devLog: (text) => {
|
|
152
|
+
if (this.config.mode === "development" && this.config.debug) {
|
|
153
|
+
console.log(green(text));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
139
157
|
this.config = config;
|
|
140
158
|
}
|
|
141
159
|
getPagesJsonPath() {
|
|
@@ -159,16 +177,19 @@ class pageContext {
|
|
|
159
177
|
this.pages.push(...mainPages);
|
|
160
178
|
}
|
|
161
179
|
if (subpackages) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
180
|
+
for (let i = 0; i < subpackages.length; i++) {
|
|
181
|
+
const element = subpackages[i];
|
|
182
|
+
const root = element.root;
|
|
183
|
+
const subPages = element.pages.reduce((acc, current) => {
|
|
184
|
+
acc.push(`${root}/${current.path}`.replace("//", "/"));
|
|
185
|
+
return acc;
|
|
186
|
+
}, []);
|
|
187
|
+
this.pages.push(...subPages);
|
|
188
|
+
}
|
|
168
189
|
}
|
|
169
190
|
} catch (error) {
|
|
170
|
-
|
|
171
|
-
|
|
191
|
+
this.log.error("\u8BFB\u53D6pages.json\u6587\u4EF6\u5931\u8D25");
|
|
192
|
+
this.log.devLog(String(error));
|
|
172
193
|
}
|
|
173
194
|
}
|
|
174
195
|
// 获取指定id的page
|
|
@@ -186,7 +207,8 @@ function MpBackPlugin(userOptions = {}) {
|
|
|
186
207
|
let context;
|
|
187
208
|
const defaultOptions = {
|
|
188
209
|
preventDefault: false,
|
|
189
|
-
frequency: 1
|
|
210
|
+
frequency: 1,
|
|
211
|
+
debug: false
|
|
190
212
|
};
|
|
191
213
|
const options = { ...defaultOptions, ...userOptions };
|
|
192
214
|
return {
|
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mp-weixin-back",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.7",
|
|
5
5
|
"description": "监听微信小程序的手势返回和页面默认导航栏的返回",
|
|
6
|
-
"main": "
|
|
6
|
+
"main": "dist/index.cjs",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
7
9
|
"scripts": {
|
|
8
10
|
"build": "unbuild",
|
|
9
11
|
"test": "vitest"
|
|
@@ -46,6 +48,7 @@
|
|
|
46
48
|
"ast-kit": "^1.3.1",
|
|
47
49
|
"happy-dom": "^15.11.6",
|
|
48
50
|
"json5": "^2.2.3",
|
|
51
|
+
"kolorist": "^1.8.0",
|
|
49
52
|
"typescript": "^5.7.2",
|
|
50
53
|
"vitest": "^2.1.5"
|
|
51
54
|
},
|
package/src/context.ts
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import path from 'path'
|
|
2
2
|
import fs from 'fs'
|
|
3
3
|
import JSON5 from 'json5'
|
|
4
|
+
import { red, white, green } from 'kolorist'
|
|
4
5
|
import { ContextConfig, PagesJson } from '../types'
|
|
5
6
|
import { transformVueFile } from '../utils'
|
|
6
7
|
|
|
7
8
|
export class pageContext {
|
|
8
9
|
config: ContextConfig
|
|
9
10
|
pages: string[] = []
|
|
11
|
+
log = {
|
|
12
|
+
info: (text: string) => {
|
|
13
|
+
console.log(white(text))
|
|
14
|
+
},
|
|
15
|
+
error: (text: string) => {
|
|
16
|
+
console.log(red(text))
|
|
17
|
+
},
|
|
18
|
+
devLog: (text: string) => {
|
|
19
|
+
if (this.config.mode === 'development' && this.config.debug) {
|
|
20
|
+
console.log(green(text))
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
}
|
|
10
24
|
|
|
11
25
|
constructor(config: ContextConfig) {
|
|
12
26
|
this.config = config
|
|
@@ -31,16 +45,19 @@ export class pageContext {
|
|
|
31
45
|
this.pages.push(...mainPages)
|
|
32
46
|
}
|
|
33
47
|
if (subpackages) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
for (let i = 0; i < subpackages.length; i++) {
|
|
49
|
+
const element = subpackages[i]
|
|
50
|
+
const root = element.root
|
|
51
|
+
const subPages = element.pages.reduce((acc: string[], current) => {
|
|
52
|
+
acc.push(`${root}/${current.path}`.replace('//', '/'))
|
|
53
|
+
return acc
|
|
54
|
+
}, [])
|
|
55
|
+
this.pages.push(...subPages)
|
|
56
|
+
}
|
|
40
57
|
}
|
|
41
|
-
} catch (error) {
|
|
42
|
-
|
|
43
|
-
|
|
58
|
+
} catch (error: unknown) {
|
|
59
|
+
this.log.error('读取pages.json文件失败')
|
|
60
|
+
this.log.devLog(String(error))
|
|
44
61
|
}
|
|
45
62
|
}
|
|
46
63
|
// 获取指定id的page
|
package/src/index.ts
CHANGED
package/types/index.ts
CHANGED
|
@@ -9,6 +9,10 @@ export type Config = {
|
|
|
9
9
|
* 阻止次数,默认是 `1`
|
|
10
10
|
*/
|
|
11
11
|
frequency: number
|
|
12
|
+
/**
|
|
13
|
+
* 调试模式
|
|
14
|
+
*/
|
|
15
|
+
debug: boolean
|
|
12
16
|
/**
|
|
13
17
|
* 页面回退时触发
|
|
14
18
|
*/
|
|
@@ -31,5 +35,5 @@ type Pages = { path: string }[]
|
|
|
31
35
|
|
|
32
36
|
export type PagesJson = {
|
|
33
37
|
pages: Pages
|
|
34
|
-
subpackages: { root: string; pages: Pages }
|
|
38
|
+
subpackages: { root: string; pages: Pages }[]
|
|
35
39
|
}
|
package/utils/index.ts
CHANGED
|
@@ -71,7 +71,10 @@ export async function transformVueFile(this: pageContext, code: string, id: stri
|
|
|
71
71
|
const backArguments = node.expression.arguments[1]
|
|
72
72
|
// 第二个参数为object才有效,覆盖插件传入的配置
|
|
73
73
|
if (backArguments && backArguments.type == 'ObjectExpression') {
|
|
74
|
-
const config = new Function(
|
|
74
|
+
const config = new Function(
|
|
75
|
+
// @ts-ignore
|
|
76
|
+
`return (${(generate.default ? generate.default : generate)(backArguments).code});`
|
|
77
|
+
)()
|
|
75
78
|
pageBackConfig = { ...pageBackConfig, ...config }
|
|
76
79
|
}
|
|
77
80
|
|
|
@@ -83,7 +86,8 @@ export async function transformVueFile(this: pageContext, code: string, id: stri
|
|
|
83
86
|
if (body.type === 'BlockStatement') {
|
|
84
87
|
// 遍历 BlockStatement 的内容
|
|
85
88
|
body.body.forEach((statement) => {
|
|
86
|
-
|
|
89
|
+
// @ts-ignore
|
|
90
|
+
callbackCode += (generate.default ? generate.default : generate)(statement).code // 将 AST 节点生成代码
|
|
87
91
|
})
|
|
88
92
|
}
|
|
89
93
|
}
|
|
@@ -94,6 +98,8 @@ export async function transformVueFile(this: pageContext, code: string, id: stri
|
|
|
94
98
|
|
|
95
99
|
if (!hasPageBack) return
|
|
96
100
|
|
|
101
|
+
this.log.devLog(`页面${this.getPageById(id)}注入mp-weixin-back`)
|
|
102
|
+
|
|
97
103
|
// 不阻止默认行为就返回到上一层
|
|
98
104
|
if (!pageBackConfig.preventDefault) {
|
|
99
105
|
callbackCode += `uni.navigateBack({ delta: 1 });`
|
|
File without changes
|