Skip to content

Commit 4c75816

Browse files
authored
Conductor upgrade (#3102)
* update conductor version and update package.json to reflect new repo names * use relative instead of absolute imports * fix error in BrowserHostPlugin * update default for evaluator url flag * update outdated conductor resolution in lockfile
1 parent 50d9614 commit 4c75816

File tree

12 files changed

+69
-59
lines changed

12 files changed

+69
-59
lines changed

craco.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ const cracoConfig = {
140140
'filter-obj',
141141
'@sourceacademy/c-slang',
142142
'java-parser',
143-
'sa-conductor'
143+
'conductor'
144144
),
145145
'^.+\\.module\\.(css|sass|scss)$'
146146
];

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"array-move": "^4.0.0",
4949
"browserfs": "^1.4.3",
5050
"classnames": "^2.3.2",
51+
"conductor": "https://github.com/source-academy/conductor.git#0.2.0",
5152
"dayjs": "^1.11.13",
5253
"dompurify": "^3.2.4",
5354
"flexboxgrid": "^6.3.1",
@@ -60,6 +61,7 @@
6061
"js-slang": "^1.0.80",
6162
"js-yaml": "^4.1.0",
6263
"konva": "^9.2.0",
64+
"language-directory": "https://github.com/source-academy/language-directory.git",
6365
"lodash": "^4.17.21",
6466
"lz-string": "^1.4.4",
6567
"mdast-util-from-markdown": "^2.0.0",
@@ -92,8 +94,6 @@
9294
"redux-mock-store": "^1.5.4",
9395
"redux-saga": "^1.2.3",
9496
"rehype-react": "^8.0.0",
95-
"sa-conductor": "https://github.com/tsammeow/sa-conductor.git#0.1.4",
96-
"sa-languages": "https://github.com/source-academy/sa-languages.git",
9797
"showdown": "^2.1.0",
9898
"sourceror": "^0.8.5",
9999
"unified": "^11.0.0",

src/commons/controlBar/ControlBarAutorunButtons.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Switch } from '@blueprintjs/core';
22
import { IconNames } from '@blueprintjs/icons';
33
import React from 'react';
4-
import { flagConductorEnable } from 'src/features/conductor/flagConductorEnable';
54

5+
import { flagConductorEnable } from '../../features/conductor/flagConductorEnable';
66
import ControlButton from '../ControlButton';
77
import { useFeature } from '../featureFlags/useFeature';
88
import { useResponsive } from '../utils/Hooks';

src/commons/controlBar/ControlBarEvalButton.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Tooltip } from '@blueprintjs/core';
22
import { IconNames } from '@blueprintjs/icons';
33
import React from 'react';
4-
import { flagConductorEnable } from 'src/features/conductor/flagConductorEnable';
54

5+
import { flagConductorEnable } from '../../features/conductor/flagConductorEnable';
66
import ControlButton from '../ControlButton';
77
import { useFeature } from '../featureFlags/useFeature';
88

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { flagConductorEnable } from 'src/features/conductor/flagConductorEnable';
2-
import { flagConductorEvaluatorUrl } from 'src/features/conductor/flagConductorEvaluatorUrl';
3-
1+
import { flagConductorEnable } from '../../features/conductor/flagConductorEnable';
2+
import { flagConductorEvaluatorUrl } from '../../features/conductor/flagConductorEvaluatorUrl';
43
import { FeatureFlag } from './FeatureFlag';
54

65
export const publicFlags: FeatureFlag<any>[] = [flagConductorEnable, flagConductorEvaluatorUrl];

src/commons/sagas/WorkspaceSaga/helpers/evalCode.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
import { compileAndRun as compileAndRunCCode } from '@sourceacademy/c-slang/ctowasm/dist/index';
22
import { tokenizer } from 'acorn';
3+
import { IConduit } from 'conductor/dist/conduit';
34
import { Context, interrupt, Result, resume, runFilesInContext } from 'js-slang';
45
import { ACORN_PARSE_OPTIONS, TRY_AGAIN } from 'js-slang/dist/constants';
56
import { InterruptedError } from 'js-slang/dist/errors/errors';
67
import { manualToggleDebugger } from 'js-slang/dist/stdlib/inspector';
78
import { Chapter, ErrorSeverity, ErrorType, SourceError, Variant } from 'js-slang/dist/types';
89
import { eventChannel, SagaIterator } from 'redux-saga';
910
import { call, cancel, cancelled, fork, put, race, select, take } from 'redux-saga/effects';
10-
import { IConduit } from 'sa-conductor/dist/conduit';
1111
import * as Sourceror from 'sourceror';
12-
import InterpreterActions from 'src/commons/application/actions/InterpreterActions';
13-
import { selectFeatureSaga } from 'src/commons/featureFlags/selectFeatureSaga';
14-
import { makeCCompilerConfig, specialCReturnObject } from 'src/commons/utils/CToWasmHelper';
15-
import { javaRun } from 'src/commons/utils/JavaHelper';
16-
import { BrowserHostPlugin } from 'src/features/conductor/BrowserHostPlugin';
17-
import { createConductor } from 'src/features/conductor/createConductor';
18-
import { flagConductorEnable } from 'src/features/conductor/flagConductorEnable';
19-
import { flagConductorEvaluatorUrl } from 'src/features/conductor/flagConductorEvaluatorUrl';
20-
import StoriesActions from 'src/features/stories/StoriesActions';
2112

13+
import InterpreterActions from '../../../../commons/application/actions/InterpreterActions';
14+
import { selectFeatureSaga } from '../../../../commons/featureFlags/selectFeatureSaga';
15+
import { makeCCompilerConfig, specialCReturnObject } from '../../../../commons/utils/CToWasmHelper';
16+
import { javaRun } from '../../../../commons/utils/JavaHelper';
2217
import { EventType } from '../../../../features/achievement/AchievementTypes';
18+
import { BrowserHostPlugin } from '../../../../features/conductor/BrowserHostPlugin';
19+
import { createConductor } from '../../../../features/conductor/createConductor';
20+
import { flagConductorEnable } from '../../../../features/conductor/flagConductorEnable';
21+
import { flagConductorEvaluatorUrl } from '../../../../features/conductor/flagConductorEvaluatorUrl';
22+
import StoriesActions from '../../../../features/stories/StoriesActions';
2323
import { isSchemeLanguage, OverallState } from '../../../application/ApplicationTypes';
2424
import { SideContentType } from '../../../sideContent/SideContentTypes';
2525
import { actions } from '../../../utils/ActionsHelper';
@@ -520,7 +520,8 @@ export function* evalCodeConductorSaga(
520520
const { hostPlugin, conduit }: { hostPlugin: BrowserHostPlugin; conduit: IConduit } = yield call(
521521
createConductor,
522522
url,
523-
async (fileName: string) => files[fileName]
523+
async (fileName: string) => files[fileName],
524+
(pluginName: string) => {} // TODO: implement dynamic plugin loading
524525
);
525526
const stdoutTask = yield fork(handleStdout, hostPlugin, workspaceLocation);
526527
yield call([hostPlugin, 'startEvaluator'], entrypointFilePath);

src/commons/sagas/WorkspaceSaga/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import { Context, findDeclaration, getNames } from 'js-slang';
33
import { Chapter, Variant } from 'js-slang/dist/types';
44
import Phaser from 'phaser';
55
import { call, put, select } from 'redux-saga/effects';
6-
import InterpreterActions from 'src/commons/application/actions/InterpreterActions';
7-
import { selectFeatureSaga } from 'src/commons/featureFlags/selectFeatureSaga';
8-
import { combineSagaHandlers } from 'src/commons/redux/utils';
9-
import WorkspaceActions from 'src/commons/workspace/WorkspaceActions';
10-
import { flagConductorEnable } from 'src/features/conductor/flagConductorEnable';
11-
import CseMachine from 'src/features/cseMachine/CseMachine';
126

7+
import InterpreterActions from '../../../commons/application/actions/InterpreterActions';
8+
import { selectFeatureSaga } from '../../../commons/featureFlags/selectFeatureSaga';
9+
import { combineSagaHandlers } from '../../../commons/redux/utils';
10+
import WorkspaceActions from '../../../commons/workspace/WorkspaceActions';
1311
import { EventType } from '../../../features/achievement/AchievementTypes';
12+
import { flagConductorEnable } from '../../../features/conductor/flagConductorEnable';
13+
import CseMachine from '../../../features/cseMachine/CseMachine';
1414
import DataVisualizer from '../../../features/dataVisualizer/dataVisualizer';
1515
import { WORKSPACE_BASE_PATHS } from '../../../pages/fileSystem/createInBrowserFileSystem';
1616
import {
Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
1-
import { BasicHostPlugin } from 'sa-conductor/dist/conductor/host';
2-
import { IConduit } from 'sa-conductor/dist/conduit';
1+
import { BasicHostPlugin } from 'conductor/dist/conductor/host';
2+
import { IChannel, IConduit } from 'conductor/dist/conduit';
33

44
export class BrowserHostPlugin extends BasicHostPlugin {
5-
requestFile: (fileName: string) => Promise<string | undefined>;
6-
7-
init(conduit: IConduit, channels: any): void {
8-
super.init(conduit, channels);
9-
console.log('browser-inited');
5+
requestFile(fileName: string): Promise<string | undefined> {
6+
return this.__onRequestFile(fileName);
7+
}
8+
requestLoadPlugin(pluginName: string): void {
9+
return this.__onRequestLoadPlugin(pluginName);
1010
}
1111

12-
constructor(onRequestFile: (fileName: string) => Promise<string | undefined>) {
13-
super();
14-
this.requestFile = onRequestFile;
12+
private __onRequestFile: (fileName: string) => Promise<string | undefined>;
13+
private __onRequestLoadPlugin: (pluginName: string) => void;
14+
15+
static readonly channelAttach = super.channelAttach;
16+
constructor(
17+
conduit: IConduit,
18+
channels: IChannel<any>[],
19+
onRequestFile: (fileName: string) => Promise<string | undefined>,
20+
onRequestLoadPlugin: (pluginName: string) => void
21+
) {
22+
super(conduit, channels);
23+
this.__onRequestFile = onRequestFile;
24+
this.__onRequestLoadPlugin = onRequestLoadPlugin;
1525
}
1626
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import { Conduit, IConduit } from 'sa-conductor/dist/conduit';
1+
import { Conduit, IConduit } from 'conductor/dist/conduit';
22

33
import { BrowserHostPlugin } from './BrowserHostPlugin';
44

55
export function createConductor(
66
evaluatorPath: string,
7-
onRequestFile: (fileName: string) => Promise<string | undefined>
7+
onRequestFile: (fileName: string) => Promise<string | undefined>,
8+
onRequestLoadPlugin: (pluginName: string) => void
89
): { hostPlugin: BrowserHostPlugin; conduit: IConduit } {
910
const worker = new Worker(evaluatorPath);
10-
const hostPlugin = new BrowserHostPlugin(onRequestFile);
1111
const conduit = new Conduit(worker, true);
12-
conduit.registerPlugin(hostPlugin);
12+
const hostPlugin = conduit.registerPlugin(BrowserHostPlugin, onRequestFile, onRequestLoadPlugin);
1313
return { hostPlugin, conduit };
1414
}

src/features/conductor/flagConductorEnable.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { createFeatureFlag } from 'src/commons/featureFlags';
2-
import { featureSelector } from 'src/commons/featureFlags/featureSelector';
1+
import { createFeatureFlag } from '../../commons/featureFlags';
2+
import { featureSelector } from '../../commons/featureFlags/featureSelector';
33

44
export const flagConductorEnable = createFeatureFlag(
55
'conductor.enable',
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { createFeatureFlag } from 'src/commons/featureFlags';
1+
import { createFeatureFlag } from '../../commons/featureFlags';
22

33
export const flagConductorEvaluatorUrl = createFeatureFlag(
44
'conductor.evaluator.url',
5-
'https://fyp.tsammeow.dev/evaluator/worker.js',
5+
'https://fyp.tsammeow.dev/evaluator/0.2.0/worker.js',
66
'The URL where Conductor may find the Runner to be used for running user programs.'
77
);

yarn.lock

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6867,6 +6867,13 @@ __metadata:
68676867
languageName: node
68686868
linkType: hard
68696869

6870+
"conductor@https://github.com/source-academy/conductor.git#0.2.0":
6871+
version: 0.2.0
6872+
resolution: "conductor@https://github.com/source-academy/conductor.git#commit=ff4327b38b3ea20516f1f4b9ae512d494518b36a"
6873+
checksum: 10c0/100ea2c5c716abf98a879e8f98a9ec63651d39a99e384fa9649db156e660a9918c4375c91e916f3f4efa9889c3ce9893936063a038b31683db530423b3abd14a
6874+
languageName: node
6875+
linkType: hard
6876+
68706877
"confusing-browser-globals@npm:^1.0.11":
68716878
version: 1.0.11
68726879
resolution: "confusing-browser-globals@npm:1.0.11"
@@ -9633,6 +9640,7 @@ __metadata:
96339640
buffer: "npm:^6.0.3"
96349641
canvas: "npm:^2.11.2"
96359642
classnames: "npm:^2.3.2"
9643+
conductor: "https://github.com/source-academy/conductor.git#0.2.0"
96369644
constants-browserify: "npm:^1.0.0"
96379645
coveralls: "npm:^3.1.1"
96389646
cross-env: "npm:^7.0.3"
@@ -9655,6 +9663,7 @@ __metadata:
96559663
js-slang: "npm:^1.0.80"
96569664
js-yaml: "npm:^4.1.0"
96579665
konva: "npm:^9.2.0"
9666+
language-directory: "https://github.com/source-academy/language-directory.git"
96589667
lodash: "npm:^4.17.21"
96599668
lz-string: "npm:^1.4.4"
96609669
mdast-util-from-markdown: "npm:^2.0.0"
@@ -9697,8 +9706,6 @@ __metadata:
96979706
redux-saga-test-plan: "npm:^4.0.6"
96989707
rehype-react: "npm:^8.0.0"
96999708
resize-observer-polyfill: "npm:^1.5.1"
9700-
sa-conductor: "https://github.com/tsammeow/sa-conductor.git#0.1.4"
9701-
sa-languages: "https://github.com/source-academy/sa-languages.git"
97029709
sass: "npm:^1.63.6"
97039710
showdown: "npm:^2.1.0"
97049711
sourceror: "npm:^0.8.5"
@@ -12394,6 +12401,13 @@ __metadata:
1239412401
languageName: node
1239512402
linkType: hard
1239612403

12404+
"language-directory@https://github.com/source-academy/language-directory.git":
12405+
version: 0.0.1
12406+
resolution: "language-directory@https://github.com/source-academy/language-directory.git#commit=8e406e4b28a7df5e3e66fdf3005092d0cf861143"
12407+
checksum: 10c0/2db1dd6a94497232e2a183f10769f9e98658636ad3c0c56ae2d54abd5a414dcfbaa994e651ac94507d129147da523254d81103a75f5e0ad2cbaf2274ee3f146d
12408+
languageName: node
12409+
linkType: hard
12410+
1239712411
"language-subtag-registry@npm:~0.3.2":
1239812412
version: 0.3.22
1239912413
resolution: "language-subtag-registry@npm:0.3.22"
@@ -16751,20 +16765,6 @@ __metadata:
1675116765
languageName: node
1675216766
linkType: hard
1675316767

16754-
"sa-conductor@https://github.com/tsammeow/sa-conductor.git#0.1.4":
16755-
version: 0.1.4
16756-
resolution: "sa-conductor@https://github.com/tsammeow/sa-conductor.git#commit=85b1dc310460de8d34cb4612b0438539d48c62ce"
16757-
checksum: 10c0/096166b514332f67a140073e448d86405cba25616d7b7fa35686c5e3ecba6a07c82f89a13a00d67c36f998a9065e60d22e48a3aa0f8223f02d30dd270bfccf71
16758-
languageName: node
16759-
linkType: hard
16760-
16761-
"sa-languages@https://github.com/source-academy/sa-languages.git":
16762-
version: 0.0.1
16763-
resolution: "sa-languages@https://github.com/source-academy/sa-languages.git#commit=cc1c95614ebbec49e4d3957fd3c1ee1944aa70d8"
16764-
checksum: 10c0/48b24888503d19e8fba7281bcadea8472cc4d4da24d57491ac7d342f437042795d84faa6ba8edfc1e77ca65019777aaff8f97e66bea2d298ac721aba5af87c13
16765-
languageName: node
16766-
linkType: hard
16767-
1676816768
"safe-array-concat@npm:^1.1.2":
1676916769
version: 1.1.2
1677016770
resolution: "safe-array-concat@npm:1.1.2"

0 commit comments

Comments
 (0)