You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by sh...@apache.org on 2023/02/02 22:53:16 UTC
[daffodil-vscode] branch main updated: Update omega-edit to allow configuration of the server port:
This is an automated email from the ASF dual-hosted git repository.
shanedell pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/daffodil-vscode.git
The following commit(s) were added to refs/heads/main by this push:
new bf2a5f6 Update omega-edit to allow configuration of the server port:
bf2a5f6 is described below
commit bf2a5f61e807e6816fa2c2d219950afec0ba15cd
Author: Shane Dell <sh...@gmail.com>
AuthorDate: Tue Jan 31 12:58:32 2023 -0500
Update omega-edit to allow configuration of the server port:
- Update let terminal to be const terminal.
- Change var client to be let client, and defined the type expected for client.
- Cast unzip as NodeJS.NodeJS.WritableStream
- Add information message for terminal exit code when it exists.
Closes #271
---
.gitignore | 2 +-
build/package/.vscodeignore | 2 +-
package.json | 2 +-
src/omega_edit/client.ts | 47 +++++++++++++++++++++++++++++++++------
src/omega_edit/utils.ts | 30 +++++++++++++++++++++----
src/tests/suite/omegaEdit.test.ts | 28 ++++++++++++++++++-----
src/utils.ts | 26 +++++++++++++++++-----
yarn.lock | 14 ++++++------
8 files changed, 119 insertions(+), 32 deletions(-)
diff --git a/.gitignore b/.gitignore
index d5261d7..374e92f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,7 +53,7 @@ npm-debug.log
tmp.*
# ignore omega-edit scala server package file
-omega-edit-scala-server*
+omega-edit-grpc-server*
# ignore tests unzip daffodil-debugger
daffodil-debugger-*
diff --git a/build/package/.vscodeignore b/build/package/.vscodeignore
index b07d292..bc3b2e3 100644
--- a/build/package/.vscodeignore
+++ b/build/package/.vscodeignore
@@ -28,5 +28,5 @@
!src/styles/styles.css
!src/omega_edit/omega_edit.js
!src/omega_edit/interface.html
-!node_modules/omega-edit/omega-edit-scala-server*.zip
+!node_modules/omega-edit/omega-edit-grpc-server*.zip
!src/language/providers/intellisense/DFDLGeneralFormat.dfdl.xsd
diff --git a/package.json b/package.json
index bc03573..95f53e2 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,7 @@
"dependencies": {
"await-notify": "1.0.1",
"hexy": "0.3.4",
- "omega-edit": "0.9.32",
+ "omega-edit": "0.9.33",
"unzip-stream": "0.3.1",
"uuid": "^9.0.0",
"vscode-debugadapter": "1.51.0",
diff --git a/src/omega_edit/client.ts b/src/omega_edit/client.ts
index 935314b..2f4f171 100644
--- a/src/omega_edit/client.ts
+++ b/src/omega_edit/client.ts
@@ -20,7 +20,11 @@ import * as fs from 'fs'
import * as omegaEditSession from 'omega-edit/session'
import * as omegaEditViewport from 'omega-edit/viewport'
import * as omegaEditVersion from 'omega-edit/version'
-import { startOmegaEditServer, viewportSubscribe } from './utils'
+import {
+ startOmegaEditServer,
+ viewportSubscribe,
+ initOmegaEditClient,
+} from './utils'
import { OmegaEdit } from './omega_edit'
import { v4 as uuidv4 } from 'uuid'
import XDGAppPaths from 'xdg-app-paths'
@@ -50,17 +54,38 @@ async function cleanupViewportSession(
async function commonOmegaEdit(
ctx: vscode.ExtensionContext,
startServer: boolean,
- omegaEditPackageVersion: string
+ omegaEditPackageVersion: string,
+ port: number
) {
if (!serverRunning && startServer) {
;[serverTerminal, serverRunning] = await startOmegaEditServer(
ctx,
rootPath,
- omegaEditPackageVersion
+ omegaEditPackageVersion,
+ port
)
}
}
+async function getOmegaEditPort(
+ port: number | undefined = undefined
+): Promise<number> {
+ if (!port) {
+ const portEntered = await vscode.window.showInputBox({
+ prompt: 'Enter port number to run omega-edit server on',
+ value: '9000',
+ })
+
+ if (portEntered) {
+ port = +portEntered
+ } else {
+ throw Error('Bad port entered')
+ }
+ }
+
+ return port
+}
+
export function activate(ctx: vscode.ExtensionContext) {
const omegaEditPackageVersion = getOmegaEditPackageVersion(
ctx.asAbsolutePath('./package.json')
@@ -69,8 +94,13 @@ export function activate(ctx: vscode.ExtensionContext) {
ctx.subscriptions.push(
vscode.commands.registerCommand(
'omega_edit.version',
- async (startServer: boolean = true) => {
- await commonOmegaEdit(ctx, startServer, omegaEditPackageVersion)
+ async (
+ startServer: boolean = true,
+ port: number | undefined = undefined
+ ) => {
+ port = await getOmegaEditPort(port)
+ initOmegaEditClient('127.0.0.1', port.toString())
+ await commonOmegaEdit(ctx, startServer, omegaEditPackageVersion, port)
return await omegaEditVersion.getVersion()
}
)
@@ -82,9 +112,12 @@ export function activate(ctx: vscode.ExtensionContext) {
async (
filePassed: string = '',
startServer: boolean = true,
- subscribeToViewports: boolean = true
+ subscribeToViewports: boolean = true,
+ port: number | undefined = undefined
) => {
- await commonOmegaEdit(ctx, startServer, omegaEditPackageVersion)
+ port = await getOmegaEditPort(port)
+ initOmegaEditClient('127.0.0.1', port.toString())
+ await commonOmegaEdit(ctx, startServer, omegaEditPackageVersion, port)
return await createOmegaEditWebviewPanel(
ctx,
diff --git a/src/omega_edit/utils.ts b/src/omega_edit/utils.ts
index 3b2455f..10a877c 100644
--- a/src/omega_edit/utils.ts
+++ b/src/omega_edit/utils.ts
@@ -24,9 +24,16 @@ import {
} from 'omega-edit/omega_edit_pb'
import { getClient, ALL_EVENTS } from 'omega-edit/settings'
import * as omegaEditServer from 'omega-edit/server'
-import { runScript } from '../utils'
+import { runScript, displayTerminalExitStatus } from '../utils'
+import { EditorClient } from 'omega-edit/omega_edit_grpc_pb'
-const client = getClient()
+let client: EditorClient
+export function initOmegaEditClient(
+ host: string = '127.0.0.1',
+ port: string = '9000'
+) {
+ client = getClient(host, port.toString())
+}
export var randomId = () => Math.floor(Math.random() * (1000 - 0 + 1))
@@ -138,7 +145,8 @@ export async function viewportSubscribe(
export async function startOmegaEditServer(
ctx: vscode.ExtensionContext,
rootPath: string,
- omegaEditPackageVersion: string
+ omegaEditPackageVersion: string,
+ port: number
): Promise<[vscode.Terminal, boolean]> {
const [scriptName, scriptPath] = await omegaEditServer.setupServer(
rootPath,
@@ -146,6 +154,20 @@ export async function startOmegaEditServer(
ctx.asAbsolutePath('./node_modules/omega-edit')
)
- let terminal = await runScript(scriptPath, scriptName)
+ const terminal = await runScript(
+ scriptPath,
+ scriptName,
+ null,
+ ['--port', port.toString()],
+ {
+ OMEGA_EDIT_SERVER_PORT: port.toString(),
+ },
+ '',
+ false,
+ port
+ )
+
+ displayTerminalExitStatus(terminal)
+
return [terminal, true]
}
diff --git a/src/tests/suite/omegaEdit.test.ts b/src/tests/suite/omegaEdit.test.ts
index 5c50b19..27df8db 100644
--- a/src/tests/suite/omegaEdit.test.ts
+++ b/src/tests/suite/omegaEdit.test.ts
@@ -24,6 +24,7 @@ import { unzipFile, runScript, killProcess, osCheck } from '../../utils'
import { before, after } from 'mocha'
import * as fs from 'fs'
import { PROJECT_ROOT, PACKAGE_PATH, TEST_SCHEMA } from './common'
+import { initOmegaEditClient } from '../../omega_edit/utils'
const wait_port = require('wait-port')
@@ -31,11 +32,12 @@ const omegaEditPackagePath = path.join(PROJECT_ROOT, 'node_modules/omega-edit')
const omegaEditVersion =
omegaEditClient.getOmegaEditPackageVersion(PACKAGE_PATH)
const localArtifact = new Artifact(
- 'omega-edit-scala-server',
+ 'omega-edit-grpc-server',
omegaEditVersion,
'omega-edit-grpc-server'
)
const extractedFolder = path.join(PROJECT_ROOT, localArtifact.name)
+const port = 9000
export async function runServerForTests() {
fs.copyFileSync(
@@ -43,7 +45,19 @@ export async function runServerForTests() {
`${extractedFolder}.zip`
)
await unzipFile(`${extractedFolder}.zip`, PROJECT_ROOT)
- return await runScript(`${extractedFolder}`, localArtifact.scriptName)
+ initOmegaEditClient('127.0.0.1', port.toString())
+ return await runScript(
+ `${extractedFolder}`,
+ localArtifact.scriptName,
+ null,
+ ['--port', port.toString()],
+ {
+ OMEGA_EDIT_SERVER_PORT: port.toString(),
+ },
+ '',
+ false,
+ port
+ )
}
suite('omega-edit Test Suite', () => {
@@ -88,7 +102,7 @@ suite('omega-edit Test Suite', () => {
})
suite('artifact attributes', () => {
- const packageName = 'omega-edit-scala-server'
+ const packageName = 'omega-edit-grpc-server'
const packageVersion = '1.0.0'
const scriptName = 'omega-edit-grpc-server'
const artifact = new Artifact(packageName, packageVersion, scriptName)
@@ -127,7 +141,7 @@ suite('omega-edit Test Suite', () => {
test('running omega-edit server', async () => {
assert.strictEqual(
- await wait_port({ host: '127.0.0.1', port: 9000, output: 'silent' }),
+ await wait_port({ host: '127.0.0.1', port: port, output: 'silent' }),
true
)
})
@@ -136,7 +150,8 @@ suite('omega-edit Test Suite', () => {
test('omega_edit.version returns correct version', async () => {
let version = await vscode.commands.executeCommand(
'omega_edit.version',
- false
+ false,
+ port
)
assert.strictEqual(
@@ -150,7 +165,8 @@ suite('omega-edit Test Suite', () => {
'data.edit',
TEST_SCHEMA,
false,
- false
+ false,
+ port
)
assert.strictEqual(panel.active, true)
diff --git a/src/utils.ts b/src/utils.ts
index 07feb03..56ff080 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -143,7 +143,8 @@ export async function unzipFile(zipFilePath: string, extractPath: string) {
return await new Promise((resolve, reject) => {
let stream = fs
.createReadStream(zipFilePath)
- .pipe(unzip.Extract({ path: `${extractPath}` }))
+ .pipe(unzip.Extract({ path: `${extractPath}` }) as NodeJS.WritableStream)
+
stream.on('close', () => {
try {
resolve(zipFilePath)
@@ -154,6 +155,16 @@ export async function unzipFile(zipFilePath: string, extractPath: string) {
})
}
+export async function displayTerminalExitStatus(terminal: vscode.Terminal) {
+ vscode.window.onDidCloseTerminal((t) => {
+ if (t.name === terminal.name && t.processId === terminal.processId) {
+ vscode.window.showInformationMessage(
+ `Terminal exited with status code: ${t.exitStatus?.code}`
+ )
+ }
+ })
+}
+
export async function executeScript(
name: string,
cwd: string,
@@ -161,7 +172,7 @@ export async function executeScript(
shellArgs: string[] = []
) {
// Start server in terminal based on scriptName
- let terminal = vscode.window.createTerminal({
+ const terminal = vscode.window.createTerminal({
name: name,
cwd: cwd,
hideFromUser: false,
@@ -170,6 +181,8 @@ export async function executeScript(
})
terminal.show()
+ displayTerminalExitStatus(terminal)
+
return terminal
}
@@ -215,12 +228,13 @@ export async function runScript(
}
| undefined = undefined,
type: string = '',
- hideTerminal: boolean = false
+ hideTerminal: boolean = false,
+ port: number | undefined = undefined
) {
chmodScript(scriptPath, scriptName)
// Start server in terminal based on scriptName
- let terminal = vscode.window.createTerminal({
+ const terminal = vscode.window.createTerminal({
name: scriptName,
cwd: path.join(scriptPath, 'bin'),
hideFromUser: false,
@@ -231,9 +245,11 @@ export async function runScript(
if (!hideTerminal) terminal.show()
+ displayTerminalExitStatus(terminal)
+
type.includes('daffodil')
? await delay(5000).then(() => {})
- : await wait_port({ host: '127.0.0.1', port: 9000, output: 'silent' })
+ : await wait_port({ host: '127.0.0.1', port: port, output: 'silent' })
return terminal
}
diff --git a/yarn.lock b/yarn.lock
index 797886e..37b16f6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -614,9 +614,9 @@ camelcase@^6.0.0:
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
caniuse-lite@^1.0.30001449:
- version "1.0.30001449"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz#a8d11f6a814c75c9ce9d851dc53eb1d1dfbcd657"
- integrity sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==
+ version "1.0.30001450"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz#022225b91200589196b814b51b1bbe45144cf74f"
+ integrity sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==
chainsaw@~0.1.0:
version "0.1.0"
@@ -1635,10 +1635,10 @@ object-inspect@^1.9.0:
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
-omega-edit@0.9.32:
- version "0.9.32"
- resolved "https://registry.yarnpkg.com/omega-edit/-/omega-edit-0.9.32.tgz#29006dcb23843f644f15e9b1919a2c756e231a7b"
- integrity sha512-zRwvq/+t6hKJafKjA9WUk76cc0SZP/CLjcLmFCi8Kx7orPxA3jRtCYWwYbgrhri3sQ3Xz0kxPFBDd+dCz47tHw==
+omega-edit@0.9.33:
+ version "0.9.33"
+ resolved "https://registry.yarnpkg.com/omega-edit/-/omega-edit-0.9.33.tgz#bae3de4316f1edd381bd84cfab552fa7ac2abf8d"
+ integrity sha512-NwqrK4x/kPmPr8DAyatIOcq/zVo/5i+3Gdml1fsAQEZyHjFCnH9cVvyZ2w+L6BdCFRC81O9OSajJ0L47EisxYw==
dependencies:
"@grpc/grpc-js" "^1.7.1"
"@types/google-protobuf" "^3.15.5"