Skip to content

Commit 1340a30

Browse files
authored
Merge pull request #12 from KeJunMao/dev
Added curl to code tool
2 parents 1843515 + 14d440f commit 1340a30

File tree

16 files changed

+614
-8
lines changed

16 files changed

+614
-8
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
</a>
1717
</p>
1818

19+
[简体中文](./README_zh-CN.md)[English](./README.md)
20+
1921
## Demo
2022

2123
- Base64
@@ -24,14 +26,16 @@
2426
- JWT
2527
- JSON < > YAML
2628
- Number Base
29+
- Timestamp
30+
- CURL To Code
2731
- UUID
2832
- Hash
2933
- Regex Tester
3034
- Color Blindness Simulator
3135
- Qrcode
32-
- Timestamp
3336
- CRON
34-
- and more!
37+
- UserAgent
38+
- and more coming!
3539

3640
![all tools](./docs/img/all_tool.png)
3741

README_zh-CN.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[简体中文](./README_zh-CN.md)[English](./README.md)
2+
3+
## 示例
4+
5+
- Base64
6+
- HTML
7+
- URL
8+
- JWT
9+
- JSON < > YAML
10+
- Number Base
11+
- Timestamp
12+
- CURL To Code
13+
- UUID
14+
- Hash
15+
- Regex Tester
16+
- Color Blindness Simulator
17+
- Qrcode
18+
- CRON
19+
- UserAgent
20+
- 更多工具即将到来
21+
22+
![all tools](./docs/img/all_tool.png)
23+
24+
## 功能特性
25+
26+
### 搜索工具
27+
28+
![search tool](./docs/img/search_tool.png)
29+
30+
### 魔棒
31+
32+
你可以点击魔棒工具,扩展会自动识别剪贴板内容并打开合适的工具
33+
34+
![automatically](./docs/img/automatically.png)

locales/en.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
"view.devtoys.coders.tooltip": "All Encoder/Decoder Tools",
2424
"view.devtoys.coders.url.label": "URL",
2525
"view.devtoys.coders.url.tooltip": "Encode URL or decode URL",
26+
"view.devtoys.convertors.curlToCode.label": "CURL",
27+
"view.devtoys.convertors.curlToCode.panel.title": "Covert Curl Commands To Code",
28+
"view.devtoys.convertors.curlToCode.tooltip": "Convert curl commands to Python, JavaScript, PHP, R, Go, Rust, Elixir, Java, MATLAB, Ansible URI, Strest, Dart or JSON",
2629
"view.devtoys.convertors.jsonToYaml.label": "JSON < > YAML",
2730
"view.devtoys.convertors.jsonToYaml.panel.title": "JSON < > YAML",
2831
"view.devtoys.convertors.jsonToYaml.tooltip": "Convert JSON to YAML",

locales/zh-CN.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
"view.devtoys.coders.tooltip": "所有编码器/解码器",
2424
"view.devtoys.coders.url.label": "URL",
2525
"view.devtoys.coders.url.tooltip": "编码 URL 或解码 URL",
26+
"view.devtoys.convertors.curlToCode.label": "CURL",
27+
"view.devtoys.convertors.curlToCode.panel.title": "CURL 转代码",
28+
"view.devtoys.convertors.curlToCode.tooltip": "把 CURL 命令转为 Python, JavaScript, PHP, R, Go, Rust, Elixir, Java, MATLAB, Ansible URI, Strest, Dart 或者 JSON",
2629
"view.devtoys.convertors.jsonToYaml.label": "JSON < > YAML",
2730
"view.devtoys.convertors.jsonToYaml.panel.title": "JSON YAML 互转",
2831
"view.devtoys.convertors.jsonToYaml.tooltip": "JSON 和 YAML 互转",

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@
121121
"concurrently": "^7.0.0",
122122
"cron-parser": "^4.2.1",
123123
"crypto-js": "^4.1.1",
124+
"curlconverter": "^3.21.0",
124125
"esbuild": "^0.14.22",
125126
"eslint": "^8.6.0",
126127
"esno": "^0.14.1",

src/Panel/CurlToCode.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { PanelType } from "../shared";
2+
import { ToolPanel } from "../common/ToolPanel";
3+
import * as vscode from "vscode";
4+
import i18n from "../i18n";
5+
//@ts-ignore
6+
import * as curlconverter from "curlconverter";
7+
8+
export class CurlToCode extends ToolPanel<CurlToCode> {
9+
constructor(panel: vscode.WebviewPanel, extensionUri: vscode.Uri) {
10+
super(panel, extensionUri, PanelType.curlToCode, "react");
11+
}
12+
13+
public static createOrShow(extensionUri: vscode.Uri) {
14+
super.createOrShow(
15+
extensionUri,
16+
PanelType.curlToCode,
17+
i18n.t("view.devtoys.convertors.curlToCode.panel.title"),
18+
CurlToCode
19+
);
20+
}
21+
22+
protected async _update() {
23+
super._update();
24+
const webview = this.panel.webview;
25+
webview.onDidReceiveMessage(async (data) => {
26+
switch (data.type) {
27+
case "onConvert": {
28+
const { language, command } = data.value;
29+
let result;
30+
try {
31+
// @ts-ignore
32+
result = curlconverter[language](command);
33+
} catch (error) {
34+
result = String(error);
35+
}
36+
webview.postMessage(result);
37+
break;
38+
}
39+
}
40+
});
41+
}
42+
43+
public static canBeTreatedByTool(data: string): boolean | PanelType {
44+
if (data.startsWith("curl ")) {
45+
return PanelType.curlToCode;
46+
}
47+
return false;
48+
}
49+
50+
public dispose(): void {
51+
super.dispose();
52+
CurlToCode.currentPanel = undefined;
53+
}
54+
}
55+
56+
ToolPanel.allPanel.add(CurlToCode);

src/commands/showTool.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { DevToysNode } from "../explorer/DevToysNode";
33
import { Base64 } from "../Panel/Base64";
44
import { ColorBlindnessSimulator } from "../Panel/ColorBlindnessSimulator";
55
import { Cron } from "../Panel/Cron";
6+
import { CurlToCode } from "../Panel/CurlToCode";
67
import { Hash } from "../Panel/Hash";
78
import { Html } from "../Panel/Html";
89
import { JsonToYaml } from "../Panel/JsonToYaml";
@@ -18,6 +19,7 @@ import { PanelType } from "../shared";
1819

1920
export default (context: vscode.ExtensionContext) => (node?: DevToysNode) => {
2021
if (!node) {
22+
vscode.commands.executeCommand("devtoys.searchTool");
2123
return;
2224
}
2325
switch (node.panel) {
@@ -63,5 +65,8 @@ export default (context: vscode.ExtensionContext) => (node?: DevToysNode) => {
6365
case PanelType.userAgent:
6466
UserAgent.createOrShow(context.extensionUri);
6567
break;
68+
case PanelType.curlToCode:
69+
CurlToCode.createOrShow(context.extensionUri);
70+
break;
6671
}
6772
};

src/common/ToolPanel.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ export class ToolPanel<V> {
77
static allPanel: Set<any> = new Set();
88

99
private readonly _panel: vscode.WebviewPanel;
10+
11+
public get panel(): vscode.WebviewPanel {
12+
return this._panel;
13+
}
14+
1015
private readonly _extensionUri: vscode.Uri;
1116
private _disposables: vscode.Disposable[] = [];
1217
private _type: PanelType;
@@ -76,7 +81,7 @@ export class ToolPanel<V> {
7681
return false;
7782
}
7883

79-
private async _update() {
84+
protected async _update() {
8085
const webview = this._panel.webview;
8186

8287
this._panel.webview.html = this._getHtmlForWebview(webview);

src/explorer/explorerNodeManager.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ class ExplorerNodeManager implements Disposable {
4848
tooltip: i18n.t("view.devtoys.convertors.timestamp.tooltip"),
4949
panel: PanelType.timestamp,
5050
},
51+
{
52+
label: i18n.t("view.devtoys.convertors.curlToCode.label"),
53+
tooltip: i18n.t("view.devtoys.convertors.curlToCode.tooltip"),
54+
panel: PanelType.curlToCode,
55+
},
5156
];
5257

5358
const generators: IToolData[] = [

src/shared.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export enum PanelType {
1616
timestamp = "timestamp",
1717
cron = "cron",
1818
userAgent = "userAgent",
19+
curlToCode = "curlToCode",
1920
}
2021

2122
export enum Category {

0 commit comments

Comments
 (0)