Jpptr - 动作(Action)

动作的执行是由 解析器插件 一起协作执行的。

如下动作

1
["goto", "https://enncy.github.io/jpptr/test.html"]

ArrayParser 将其解析成

1
2
3
4
5
{
"use": "function",
"name": "goto",
"args": ["https://enncy.github.io/jpptr/test.html"]
}

最后再由 FunctionPlugin 去执行 puppeteer 方法

1
page.goto("https://enncy.github.io/jpptr/test.html");

解析器和插件都由 jpptr 默认加载

你可以在动作文件中使用 register 参数进行新的解析器或者插件注册, 甚至可以覆盖原有的默认模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"register":{
"parsers":[
{
"name":"number-parser",
"parser":"./number-parser.js"
}
],
"plugins":[
{
"name":"goto-plugin",
"plugin":"./goto-plugin.js"
}
]
},


"launch":{...},
"actions":[]
}
number-parser.js
1
2
3
4
5
6
7
8
9
10
module.exports = function NumberParser(action) {
if (typeof action === "number") {
if (actions === 1) {
return {
use: "goto-plugin",
href: "https://example.com",
};
}
}
};
goto-plugin.js
1
2
3
module.exports = function GotoPlugin(options) {
return [["goto", options.action.href]];
};

如果有以下动作列表

1
2
3
{
"actions": [1, 1]
}

使用自定义的 number-parser 和 goto-plugin 将会解析成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"actions": [
{
"use": "goto-plugin",
"href": "https://example.com",
"actions": [["goto", "https://example.com"]]
},
{
"use": "goto-plugin",
"href": "https://example.com",
"actions": [["goto", "https://example.com"]]
}
]
}

流程是这样的

1.jpptr 调用 number-parser

1 变成 {use: "goto-plugin",href: "https://example.com"}

2.jpptr 调用 goto-plugin

{use: "goto-plugin",href: "https://example.com"}
变成

1
2
3
4
5
{
"use": "goto-plugin",
"href": "https://example.com",
"actions": [["goto", "https://example.com"]]
}

原理就是,如果 插件 仅仅返回一个 动作列表 ,则 jpptr 会自动添加 {"actions":[...]} 的属性, 并且 jpptr 会执行 actions 里面的动作


更多详情请看 插件

作者

言小溪

发布于

2022-01-24

更新于

2022-01-24

许可协议

CC BY-NC-SA 4.0

评论