Skip to content

Commit 07a4dc1

Browse files
committed
chore: update dependencies and improve code structure
- Updated various dependencies in package.json for better performance and security. - Refactored saveData.ts to simplify variable declarations and improve readability. - Modified Frame.tsx and WUDetails.tsx to streamline state management and component rendering. - Cleaned up session.ts by removing unnecessary variable initialization. - Enhanced extension tests in extension.test.ts for better clarity and error handling. - Simplified test suite execution in index.ts and removed Mocha dependency from tsconfig.test.json.
1 parent f58145a commit 07a4dc1

9 files changed

Lines changed: 398 additions & 1321 deletions

File tree

package-lock.json

Lines changed: 325 additions & 1227 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -56,73 +56,74 @@
5656
"exceljs": "4.4.0",
5757
"html-to-text": "9.0.5"
5858
},
59+
"overrides": {
60+
"vite": "7.3.2"
61+
},
5962
"devDependencies": {
60-
"@eslint/js": "9.39.4",
63+
"@eslint/js": "10.0.1",
6164
"@fluentui/react": "8.125.5",
6265
"@fluentui/react-hooks": "8.10.2",
63-
"@hpcc-js/api": "3.4.15",
64-
"@hpcc-js/common": "3.7.5",
65-
"@hpcc-js/comms": "3.15.4",
66-
"@hpcc-js/dgrid": "3.7.5",
66+
"@hpcc-js/api": "3.4.16",
67+
"@hpcc-js/common": "3.7.6",
68+
"@hpcc-js/comms": "3.15.6",
69+
"@hpcc-js/dgrid": "3.7.6",
6770
"@hpcc-js/dgrid-shim": "3.4.5",
6871
"@hpcc-js/esbuild-plugins": "1.8.7",
6972
"@hpcc-js/observable-shim": "3.1.0",
70-
"@hpcc-js/observablehq-compiler": "3.7.8",
71-
"@hpcc-js/util": "3.5.4",
73+
"@hpcc-js/observablehq-compiler": "3.7.9",
74+
"@hpcc-js/util": "3.5.5",
7275
"@hpcc-js/wasm-expat": "1.13.2",
7376
"@hpcc-js/wasm-llama": "1.0.0",
7477
"@hpcc-js/wasm-zstd": "1.12.2",
7578
"@langchain/community": "1.1.27",
76-
"@langchain/core": "1.1.39",
77-
"@langchain/classic": "1.0.28",
79+
"@langchain/core": "1.1.40",
80+
"@langchain/classic": "1.0.31",
7881
"@langchain/ollama": "1.2.6",
7982
"@observablehq/inspector": "5.0.1",
8083
"@observablehq/parser": "6.1.0",
8184
"@observablehq/runtime": "6.0.0",
8285
"@observablehq/stdlib": "5.8.8",
8386
"@octokit/rest": "22.0.1",
84-
"@types/mocha": "10.0.10",
8587
"@types/node": "24.12.2",
8688
"@types/react": "18.3.28",
8789
"@types/react-dom": "18.3.7",
8890
"@types/tmp": "0.2.6",
8991
"@types/vscode": "1.105.0",
9092
"@types/vscode-notebook-renderer": "1.72.4",
9193
"@vscode/test-electron": "2.5.2",
92-
"@vitest/coverage-v8": "4.1.3",
93-
"@vitest/ui": "4.1.3",
94+
"@vitest/coverage-v8": "4.1.5",
95+
"@vitest/ui": "4.1.5",
9496
"@vscode/debugadapter": "1.68.0",
9597
"@vscode/debugprotocol": "1.68.0",
9698
"@vscode/extension-telemetry": "1.5.1",
97-
"@vscode/vsce": "3.7.1",
99+
"@vscode/vsce": "3.9.1",
98100
"adm-zip": "0.5.17",
99101
"antlr4": "4.13.2",
100102
"assert": "2.1.0",
101103
"copy-to-clipboard": "3.3.3",
102104
"copyfiles": "2.4.1",
103105
"csv-writer": "1.6.0",
104-
"diff": "8.0.4",
106+
"diff": "9.0.0",
105107
"esbuild": "0.28.0",
106108
"esbuild-copy-static-files": "0.1.0",
107109
"esbuild-plugin-text-replace": "1.3.0",
108110
"esbuild-plugin-umd-wrapper": "3.0.0",
109-
"eslint": "9.39.4",
110-
"eslint-plugin-react-hooks": "7.0.1",
111+
"eslint": "10.2.1",
112+
"eslint-plugin-react-hooks": "7.1.1",
111113
"glob": "13.0.6",
112114
"jsdom": "29.0.2",
113-
"langchain": "1.3.0",
114-
"mocha": "11.7.5",
115+
"langchain": "1.3.3",
115116
"npm-run-all": "4.1.5",
116117
"react": "18.3.1",
117118
"react-dom": "18.3.1",
118119
"rimraf": "6.1.3",
119120
"run-script-os": "1.1.6",
120121
"tslib": "2.8.1",
121-
"typescript": "6.0.2",
122-
"typescript-eslint": "8.58.0",
122+
"typescript": "6.0.3",
123+
"typescript-eslint": "8.59.0",
123124
"use-resize-observer": "9.1.0",
124-
"uuid": "13.0.0",
125-
"vitest": "4.1.3",
125+
"uuid": "14.0.0",
126+
"vitest": "4.1.5",
126127
"yargs": "18.0.0"
127128
},
128129
"author": {

src/ecl/saveData.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,6 @@ export class SaveData {
108108
const numPieces = Math.floor(totalRows / pieceSize);
109109
const pieces = numPieces == 0 ? 1 : numPieces;
110110
let i = 0;
111-
let number = 0;
112-
let displayNum = 0;
113111

114112
if (this._type == SaveFileType.CSV) {
115113
this._createCsvWriter = createArrayCsvWriter;
@@ -120,8 +118,8 @@ export class SaveData {
120118
}
121119

122120
for (let s = 0; i < pieces; s += pieceSize, i++) {
123-
number = totalRows < pieceSize ? totalRows : pieceSize;
124-
displayNum = s + pieceSize > totalRows ? totalRows : s + pieceSize;
121+
const number = totalRows < pieceSize ? totalRows : pieceSize;
122+
const displayNum = s + pieceSize > totalRows ? totalRows : s + pieceSize;
125123
eclStatusBar.showClientTools(`${result.Name} (${displayNum} of ${totalRows})...`, `${localize("Saving data to")} ${this._filePath}`);
126124
await this.fetchRows(result, s, number);
127125
}
@@ -202,13 +200,10 @@ export class SaveData {
202200
if (result.Total > maxRowsFound)
203201
maxRowsFound = result.Total;
204202
}
205-
let userLimit = -1;
206203
if (maxRowsFound > this._maxRows) {
207-
userLimit = await this.promptUserMaxRows(maxRowsFound);
208-
} else {
209-
userLimit = this._maxRows;
204+
return this.promptUserMaxRows(maxRowsFound);
210205
}
211-
return userLimit;
206+
return this._maxRows;
212207
}
213208

214209
async promptUserMaxRows(rowCount: number): Promise<number> {

src/eclwatch/Frame.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,11 @@ interface FrameProps {
1414
export const Frame: React.FunctionComponent<FrameProps> = () => {
1515

1616
const state = useMessageReceiver();
17-
const [name, setName] = React.useState<string>(state?.resultName ?? "");
18-
19-
React.useEffect(() => {
20-
setName(state?.resultName ?? "");
21-
}, [state?.wuid, state?.resultName]);
2217

2318
return <ThemeProvider style={{ height: "100%" }}>
2419
{
2520
state ?
26-
<WUDetails opts={state} wuid={state.wuid} name={name} setName={setName}></WUDetails> :
21+
<WUDetails key={`${state.wuid}-${state.resultName}`} opts={state} wuid={state.wuid} initialName={state.resultName ?? ""}></WUDetails> :
2722
<div>...loading...</div>
2823
}
2924
</ThemeProvider >;

src/eclwatch/WUDetails.tsx

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,18 @@ const pivotStyles: IStyleFunctionOrObject<IPivotStyleProps, IPivotStyles> = {
2424
export interface WUDetailsProps {
2525
opts: IOptions;
2626
wuid: string;
27-
name: string;
28-
setName: React.Dispatch<React.SetStateAction<string>>;
27+
initialName: string;
2928
}
3029

3130
export const WUDetails: React.FunctionComponent<WUDetailsProps> = ({
3231
opts,
3332
wuid,
34-
name,
35-
setName
33+
initialName
3634
}) => {
3735

3836
const pivotRef = React.useRef<HTMLDivElement>(null);
3937

38+
const [name, setName] = React.useState(initialName);
4039
const [selectedValue, setSelectedValue] = React.useState<string | undefined>();
4140
const [spinnerMessage, setSpinnerMessage] = React.useState("Loading...");
4241
const [complete, setComplete] = React.useState(false);
@@ -67,8 +66,6 @@ export const WUDetails: React.FunctionComponent<WUDetailsProps> = ({
6766
}
6867

6968
if (wuid) {
70-
setSpinnerMessage("Loading...");
71-
update(false, [], []);
7269
const wu = Workunit.attach(opts, wuid);
7370
wu.refresh().then(() => {
7471
if (wu.isComplete()) {
@@ -82,20 +79,17 @@ export const WUDetails: React.FunctionComponent<WUDetailsProps> = ({
8279
setSpinnerMessage(e.message);
8380
update(true, [], []);
8481
});
85-
} else {
86-
setSpinnerMessage("");
87-
update(true, [], []);
8882
}
8983

9084
return () => {
9185
canceled = true;
9286
};
93-
}, [name, opts, setName, wuid]);
87+
}, [name, opts, wuid]);
9488

9589
const handleLinkClick = React.useCallback((item?: PivotItem) => {
9690
setName(item?.props.itemKey ?? "");
9791
setSelectedValue(item?.props["data-result"]?.Value);
98-
}, [setName]);
92+
}, []);
9993

10094
const hasIssues = exceptions.length > 0;
10195
const hasResults = results.length > 0;

src/hpccplatform/session.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,6 @@ export class SessionManager {
559559
const activeUri: string = vscode.window.activeTextEditor?.document?.uri.toString(true) || "";
560560
if (activeUri) {
561561
const eclConfig = vscode.workspace.getConfiguration("ecl", null);
562-
isPinned = false;
563562
const pinnedLaunchConfigurations = eclConfig.get<object>("pinnedLaunchConfigurations");
564563
isPinned = !!pinnedLaunchConfigurations[activeUri];
565564
}
Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
11
import * as assert from 'assert';
22
import * as vscode from 'vscode';
33

4-
suite('Extension Activation Test', () => {
5-
test('extension manifest is discoverable', () => {
4+
export async function run(): Promise<void> {
5+
console.log('Test: extension manifest is discoverable');
6+
{
67
const ext = vscode.extensions.getExtension('hpcc-systems.ecl');
78
assert.ok(ext, 'Extension should be found in the extension manifest');
8-
});
9+
console.log(' PASS');
10+
}
911

10-
test('extension can activate when dependencies are present', async function () {
12+
console.log('Test: extension can activate when dependencies are present');
13+
{
1114
const ext = vscode.extensions.getExtension('hpcc-systems.ecl');
1215
assert.ok(ext, 'Extension should be found');
1316

1417
// Check if required dependency is present
1518
const requiredDep = vscode.extensions.getExtension('GordonSmith.observable-js');
1619
if (!requiredDep) {
17-
console.log('⚠️ Test skipped: GordonSmith.observable-js extension not installed (expected in CI/minimal environments)');
18-
this.skip();
19-
return;
20-
}
20+
console.log(' SKIPPED: GordonSmith.observable-js extension not installed (expected in CI/minimal environments)');
21+
} else {
22+
// Attempt activation
23+
try {
24+
await ext?.activate();
25+
} catch (e: unknown) {
26+
const msg = (e as Error)?.message || String(e);
27+
throw new Error(`Extension activation failed: ${msg}`);
28+
}
2129

22-
// Attempt activation
23-
try {
24-
await ext?.activate();
25-
} catch (e: unknown) {
26-
const msg = (e as Error)?.message || String(e);
27-
throw new Error(`Extension activation failed: ${msg}`);
30+
const commands = await vscode.commands.getCommands(true);
31+
assert.ok(commands.includes('ecl.submit'), 'ecl.submit command should be registered');
32+
assert.ok(commands.includes('ecl.compile'), 'ecl.compile command should be registered');
33+
console.log(' PASS');
2834
}
29-
30-
const commands = await vscode.commands.getCommands(true);
31-
assert.ok(commands.includes('ecl.submit'), 'ecl.submit command should be registered');
32-
assert.ok(commands.includes('ecl.compile'), 'ecl.compile command should be registered');
33-
});
34-
});
35+
}
36+
}

test/integration/suite/index.ts

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,25 @@
11
import * as path from 'path';
2-
import Mocha from 'mocha';
32
import { globSync } from 'glob';
43

5-
export function run(): Promise<void> {
6-
const mocha = new Mocha({
7-
ui: 'tdd',
8-
color: true,
9-
timeout: 20000
10-
});
11-
4+
export async function run(): Promise<void> {
125
const testsRoot = path.resolve(__dirname);
6+
const files = globSync('**/*.test.js', { cwd: testsRoot });
7+
8+
let failures = 0;
139

14-
return new Promise((resolve, reject) => {
15-
try {
16-
const files = globSync('**/*.test.js', { cwd: testsRoot });
17-
for (const f of files) {
18-
mocha.addFile(path.resolve(testsRoot, f));
10+
for (const f of files) {
11+
const mod = require(path.resolve(testsRoot, f));
12+
if (typeof mod.run === 'function') {
13+
try {
14+
await mod.run();
15+
} catch (e) {
16+
failures++;
17+
console.error(`FAIL: ${f}`, e);
1918
}
20-
mocha.run((failures: number) => {
21-
if (failures > 0) {
22-
reject(new Error(`${failures} tests failed.`));
23-
} else {
24-
resolve();
25-
}
26-
});
27-
} catch (e) {
28-
reject(e);
2919
}
30-
});
20+
}
21+
22+
if (failures > 0) {
23+
throw new Error(`${failures} test files failed.`);
24+
}
3125
}

tsconfig.test.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
"skipLibCheck": true,
1010
"types": [
1111
"node",
12-
"vscode",
13-
"mocha"
12+
"vscode"
1413
],
1514
"noEmitOnError": true
1615
},

0 commit comments

Comments
 (0)