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',

0 commit comments

Comments
 (0)