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"