This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push:
new 0abac84 JBang run experimental (#63)
0abac84 is described below
commit 0abac8483e451831d9afaab4d80e2b3a37157749
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Tue Nov 2 09:24:49 2021 -0400
JBang run experimental (#63)
---
karavan-vscode/icons/run.png | Bin 0 -> 16012 bytes
karavan-vscode/icons/run.svg | 2 ++
karavan-vscode/package.json | 17 ++++++++-
karavan-vscode/src/extension.ts | 75 +++++++++++++++++++++++++++++++---------
karavan-vscode/webview/App.tsx | 6 ++++
5 files changed, 82 insertions(+), 18 deletions(-)
diff --git a/karavan-vscode/icons/run.png b/karavan-vscode/icons/run.png
new file mode 100644
index 0000000..647d31e
Binary files /dev/null and b/karavan-vscode/icons/run.png differ
diff --git a/karavan-vscode/icons/run.svg b/karavan-vscode/icons/run.svg
new file mode 100644
index 0000000..271f6b5
--- /dev/null
+++ b/karavan-vscode/icons/run.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="no"?>
+<svg fill="#F69923" height="100%" width="100%" viewBox="0 0 448 512"
aria-hidden="true" role="img" style="vertical-align: -0.125em;"
aria-describedby="pf-tooltip-368" xmlns="http://www.w3.org/2000/svg"><path
d="M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4
41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"></path></svg>
\ No newline at end of file
diff --git a/karavan-vscode/package.json b/karavan-vscode/package.json
index 22757a8..e03193a 100644
--- a/karavan-vscode/package.json
+++ b/karavan-vscode/package.json
@@ -42,7 +42,8 @@
],
"activationEvents": [
"onCommand:karavan.create",
- "onCommand:karavan.open"
+ "onCommand:karavan.open",
+ "onCommand:karavan.jbang-run"
],
"main": "./dist/extension.js",
"contributes": {
@@ -58,6 +59,11 @@
"light": "./icons/icon.png",
"dark": "./icons/icon.png"
}
+ },
+ {
+ "command": "karavan.jbang-run",
+ "title": "Run with JBang",
+ "icon": "./icons/run.png"
}
],
"menus": {
@@ -69,6 +75,10 @@
{
"command": "karavan.open",
"when": "resourceExtname == .yaml"
+ },
+ {
+ "command": "karavan.jbang-run",
+ "when": "resourceExtname == .yaml"
}
],
"editor/title": [
@@ -76,6 +86,11 @@
"command": "karavan.open",
"when": "resourceExtname == .yaml",
"group": "navigation"
+ },
+ {
+ "command": "karavan.jbang-run",
+ "when": "resourceExtname == .yaml || karavan:loaded",
+ "group": "navigation"
}
]
},
diff --git a/karavan-vscode/src/extension.ts b/karavan-vscode/src/extension.ts
index 4c76cb9..f7fe044 100644
--- a/karavan-vscode/src/extension.ts
+++ b/karavan-vscode/src/extension.ts
@@ -17,25 +17,28 @@
import * as vscode from "vscode";
import * as fs from "fs";
import * as path from "path";
-import {CamelYaml} from "../designer/api/CamelYaml";
+import { CamelYaml } from "../designer/api/CamelYaml";
import { CamelUi } from "../designer/api/CamelUi";
+const KARAVAN_LOADED = "karavan:loaded";
+const KARAVAN_PANELS: Map<any, string> = new Map<string, string>();
+
export function activate(context: vscode.ExtensionContext) {
const webviewContent = fs
.readFileSync(
vscode.Uri.joinPath(context.extensionUri,
"dist/index.html").fsPath,
- {encoding: "utf-8"}
+ { encoding: "utf-8" }
)
.replace(
"styleUri",
vscode.Uri.joinPath(context.extensionUri, "/dist/main.css")
- .with({scheme: "vscode-resource"})
+ .with({ scheme: "vscode-resource" })
.toString()
)
.replace(
"scriptUri",
vscode.Uri.joinPath(context.extensionUri, "/dist/webview.js")
- .with({scheme: "vscode-resource"})
+ .with({ scheme: "vscode-resource" })
.toString()
);
@@ -56,8 +59,8 @@ export function activate(context: vscode.ExtensionContext) {
}
}
}).then(value => {
- if (value) openKaravanWebView(context, webviewContent,
value || '', undefined);
- });
+ if (value) openKaravanWebView(context, webviewContent,
value, value + '.yaml', undefined);
+ });
}
);
@@ -65,26 +68,54 @@ export function activate(context: vscode.ExtensionContext) {
const open = vscode.commands.registerCommand(
"karavan.open",
(...args: any[]) => {
- if (args && args.length >0){
+ if (args && args.length > 0) {
const yaml =
fs.readFileSync(path.resolve(args[0].path)).toString('utf8');
const parce = isIntegration(yaml);
- if (parce[0]){
- openKaravanWebView(context, webviewContent, parce[1] ||
'', yaml);
+ const filename = path.basename(args[0].path);
+ if (parce[0]) {
+ openKaravanWebView(context, webviewContent, parce[1] ||
'', filename || '', yaml);
} else {
vscode.window.showErrorMessage("File is not Camel-K
Integration!")
}
}
}
);
+
+ // Run Camel-K integration in designer
+ const run = vscode.commands.registerCommand(
+ "karavan.jbang-run",
+ (...args: any[]) => {
+ if (args && args.length > 0) {
+ if (args[0].path.startsWith('webview-panel/webview')) {
+ const filename = KARAVAN_PANELS.get(args[0].path);
+ console.log(filename)
+ if (filename){
+ runCamelJbang(filename);
+ }
+ } else {
+ const yaml =
fs.readFileSync(path.resolve(args[0].path)).toString('utf8');
+ const parce = isIntegration(yaml);
+ const filename = path.basename(args[0].path);
+ console.log(filename)
+ if (parce[0]) {
+ runCamelJbang(filename);
+ } else {
+ vscode.window.showErrorMessage("File is not Camel-K
Integration!")
+ }
+ }
+ }
+ }
+ );
context.subscriptions.push(create);
context.subscriptions.push(open);
+ context.subscriptions.push(run);
}
-function openKaravanWebView(context: vscode.ExtensionContext, webviewContent:
string, name: string, yaml?:string) {
+function openKaravanWebView(context: vscode.ExtensionContext, webviewContent:
string, name: string, filename: string, yaml?: string) {
// Karavan webview
const panel = vscode.window.createWebviewPanel(
"karavan",
- CamelUi.nameFomTitle(name),
+ CamelUi.nameFomTitle(filename),
vscode.ViewColumn.One,
{
enableScripts: true,
@@ -102,13 +133,13 @@ function openKaravanWebView(context:
vscode.ExtensionContext, webviewContent: st
);
// Read and send Kamelets
- panel.webview.postMessage({command: 'kamelets', kamelets:
readKamelets(context)});
+ panel.webview.postMessage({ command: 'kamelets', kamelets:
readKamelets(context) });
// Read and send Components
- panel.webview.postMessage({command: 'components', components:
readComponents(context)});
+ panel.webview.postMessage({ command: 'components', components:
readComponents(context) });
// Send integration
- panel.webview.postMessage({command: 'open', name: name, yaml: yaml});
+ panel.webview.postMessage({ command: 'open', name: name, yaml: yaml });
// Handle messages from the webview
@@ -116,19 +147,22 @@ function openKaravanWebView(context:
vscode.ExtensionContext, webviewContent: st
message => {
switch (message.command) {
case 'save':
- if (vscode.workspace.workspaceFolders){
- const uriFolder: vscode.Uri =
vscode.workspace.workspaceFolders[0].uri;
+ if (vscode.workspace.workspaceFolders) {
+ const uriFolder: vscode.Uri =
vscode.workspace.workspaceFolders[0].uri;
const uriFile: vscode.Uri =
vscode.Uri.file(path.join(uriFolder.path, message.name + '.yaml'));
fs.writeFile(uriFile.path, message.yaml, err => {
if (err) vscode.window.showErrorMessage("Error: "
+ err?.message);
});
}
return;
+ case 'url-mapping':
+ KARAVAN_PANELS.set('webview-panel/webview-' +
message.pathId, CamelUi.nameFomTitle(message.name) + '.yaml');
}
},
undefined,
context.subscriptions
);
+ vscode.commands.executeCommand("setContext", KARAVAN_LOADED, true);
}
function readKamelets(context: vscode.ExtensionContext): string[] {
@@ -145,12 +179,19 @@ function readComponents(context:
vscode.ExtensionContext): string[] {
function isIntegration(yaml: string): [boolean, string?] {
const i = CamelYaml.yamlToIntegration(yaml);
- if (i.kind === 'Integration' && i.metadata.name){
+ if (i.kind === 'Integration' && i.metadata.name) {
return [true, i.metadata.name];
} else {
return [false, undefined];
}
}
+function runCamelJbang(filename: string) {
+ const terminal = vscode.window.createTerminal(`Karavan: ` + filename);
+ terminal.show();
+ terminal.sendText("CamelJBang run " + filename);
+}
+
export function deactivate() {
+ vscode.commands.executeCommand("setContext", KARAVAN_LOADED, false);
}
diff --git a/karavan-vscode/webview/App.tsx b/karavan-vscode/webview/App.tsx
index 1a55e5a..6ba0cf9 100644
--- a/karavan-vscode/webview/App.tsx
+++ b/karavan-vscode/webview/App.tsx
@@ -55,12 +55,18 @@ class App extends React.Component<Props, State> {
case 'open':
if (this.state.name === '' && this.state.key === ''){
this.setState({name: message.name, yaml: message.yaml, key:
Math.random().toString()});
+ this.sendUrlMapping(message.name)
}
break;
}
});
}
+ sendUrlMapping(name: string){
+ const url = new URL(window.location.href)
+ vscode.postMessage({ command: 'url-mapping', pathId: url.host, name: name
})
+ }
+
save(name: string, yaml: string) {
vscode.postMessage({
command: 'save',