@elice/material-exercise 1.250521.0 → 1.250529.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/cjs/components/material-exercise/context/index.js +2 -1
  2. package/cjs/components/material-exercise/context/recoil.d.ts +4 -4
  3. package/cjs/components/material-exercise/context/recoil.js +32 -30
  4. package/cjs/components/material-exercise/context/subjects.d.ts +5 -0
  5. package/cjs/components/material-exercise/context/subjects.js +5 -0
  6. package/cjs/components/material-exercise/context/types.d.ts +5 -1
  7. package/cjs/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +32 -1
  8. package/cjs/components/material-exercise/exercise-runner/ExerciseRunner.js +36 -4
  9. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +1 -1
  10. package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusMessage.js +30 -11
  11. package/cjs/components/material-exercise/exercise-runner/locales/en.json.js +1 -1
  12. package/cjs/components/material-exercise/exercise-runner/locales/ja.json.js +1 -1
  13. package/cjs/components/material-exercise/exercise-runner/locales/ko.json.js +1 -1
  14. package/cjs/components/material-exercise/exercise-runner/locales/th.json.js +1 -1
  15. package/cjs/hooks/useRunnerRoomWebSocket.js +1 -2
  16. package/cjs/hooks/useStdioWebSocket.js +2 -3
  17. package/cjs/hooks/useUsercodeEditWebSocket.d.ts +9 -1
  18. package/cjs/hooks/useUsercodeEditWebSocket.js +10 -2
  19. package/cjs/utils/async.d.ts +4 -0
  20. package/cjs/utils/async.js +15 -0
  21. package/cjs/utils/index.d.ts +1 -0
  22. package/cjs/utils/index.js +2 -0
  23. package/es/components/material-exercise/context/index.js +2 -2
  24. package/es/components/material-exercise/context/recoil.d.ts +4 -4
  25. package/es/components/material-exercise/context/recoil.js +32 -30
  26. package/es/components/material-exercise/context/subjects.d.ts +5 -0
  27. package/es/components/material-exercise/context/subjects.js +5 -1
  28. package/es/components/material-exercise/context/types.d.ts +5 -1
  29. package/es/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +33 -2
  30. package/es/components/material-exercise/exercise-runner/ExerciseRunner.js +37 -5
  31. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +2 -2
  32. package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusMessage.js +33 -14
  33. package/es/components/material-exercise/exercise-runner/locales/en.json.js +1 -1
  34. package/es/components/material-exercise/exercise-runner/locales/ja.json.js +1 -1
  35. package/es/components/material-exercise/exercise-runner/locales/ko.json.js +1 -1
  36. package/es/components/material-exercise/exercise-runner/locales/th.json.js +1 -1
  37. package/es/hooks/useRunnerRoomWebSocket.js +1 -2
  38. package/es/hooks/useStdioWebSocket.js +2 -3
  39. package/es/hooks/useUsercodeEditWebSocket.d.ts +9 -1
  40. package/es/hooks/useUsercodeEditWebSocket.js +10 -2
  41. package/es/utils/async.d.ts +4 -0
  42. package/es/utils/async.js +13 -0
  43. package/es/utils/index.d.ts +1 -0
  44. package/es/utils/index.js +1 -0
  45. package/package.json +3 -3
@@ -1,3 +1,4 @@
1
+ import type { WebsocketUsercodeMessageWriteSucceed as WSUsercodeMessageWriteSucceed } from '@elice/types';
1
2
  import type { TextOp } from 'ot-text-unicode';
2
3
  interface CursorRange {
3
4
  from: number;
@@ -17,6 +18,10 @@ export type UseUsercodeEditWebSocketPropOnInit = (doc: string) => void;
17
18
  * Event handler for `WRITE_NOTI` event.
18
19
  */
19
20
  export type UseUsercodeEditWebSocketPropOnWriteNoti = (ots: TextOp, isFromServer: boolean) => void;
21
+ /**
22
+ * Event handler for `WRITE_SUCCEED` event.
23
+ */
24
+ export type UseUsercodeEditWebSocketPropOnWriteSucceed = (msg: WSUsercodeMessageWriteSucceed, requestId: number) => void;
20
25
  /**
21
26
  * Props of `useUsercodeEditWebSocket`.
22
27
  */
@@ -25,6 +30,7 @@ interface UseUsercodeEditWebSocketProps {
25
30
  filename: string | null;
26
31
  onInit: UseUsercodeEditWebSocketPropOnInit;
27
32
  onWriteNoti: UseUsercodeEditWebSocketPropOnWriteNoti;
33
+ onWriteSucceed: UseUsercodeEditWebSocketPropOnWriteSucceed;
28
34
  }
29
35
  /**
30
36
  *
@@ -33,7 +39,9 @@ export type UseUsercodeEditWebSocketReturnSendCursor = (range: CursorRange) => v
33
39
  /**
34
40
  * Event handler for websocket message.
35
41
  */
36
- export type UseUsercodeEditWebSocketReturnSendOTs = (ots: TextOp) => void;
42
+ export type UseUsercodeEditWebSocketReturnSendOTs = (ots: TextOp) => {
43
+ requestId: number;
44
+ };
37
45
  /**
38
46
  * Return type of `useUsercodeEditWebSocket`.
39
47
  */
@@ -21,7 +21,8 @@ var useUsercodeEditWebSocket = function useUsercodeEditWebSocket(_ref) {
21
21
  var exerciseRoomId = _ref.exerciseRoomId,
22
22
  filename = _ref.filename,
23
23
  onInit = _ref.onInit,
24
- onWriteNoti = _ref.onWriteNoti;
24
+ onWriteNoti = _ref.onWriteNoti,
25
+ onWriteSucceed = _ref.onWriteSucceed;
25
26
  var _return = useRef({});
26
27
  var _useMaterialConfig = useMaterialConfig(),
27
28
  apiWsOriginUrl = _useMaterialConfig.apiWsOriginUrl;
@@ -255,6 +256,10 @@ var useUsercodeEditWebSocket = function useUsercodeEditWebSocket(_ref) {
255
256
  _doc.current = type.apply(_doc.current, ots);
256
257
  otsBuffer.current.push(ots);
257
258
  sendWrite();
259
+ return {
260
+ // Use next doc. version as id for matching request-response.
261
+ requestId: version.current + 1
262
+ };
258
263
  }, [sendWrite]);
259
264
  //
260
265
  // =============== usercode ===============
@@ -419,6 +424,7 @@ var useUsercodeEditWebSocket = function useUsercodeEditWebSocket(_ref) {
419
424
  writeIndex.current = 0;
420
425
  writeFailCount.current = 0;
421
426
  updateCursorFromOts(msg.ots);
427
+ onWriteSucceed(msg, version.current);
422
428
  };
423
429
  /**
424
430
  * Websocket on `WRITE_NOTI` message.
@@ -483,7 +489,9 @@ var useUsercodeEditWebSocket = function useUsercodeEditWebSocket(_ref) {
483
489
  if (!isReady) {
484
490
  return;
485
491
  }
486
- websocket.current = new EliceWebSocket(createUsercodeUrl);
492
+ websocket.current = new EliceWebSocket(createUsercodeUrl, undefined, {
493
+ maxPingQueueTolerance: 1
494
+ });
487
495
  websocket.current.onopen = wsOpen;
488
496
  websocket.current.onclose = wsClose;
489
497
  websocket.current.onmessage = wsMessage;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Collection of utils for async. logics.
3
+ */
4
+ export declare function withTimeout<T>(promise: Promise<T>, timeout: number, timeoutMessage?: string): Promise<T>;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @file Collection of utils for async. logics.
3
+ */
4
+ function withTimeout(promise, timeout, timeoutMessage) {
5
+ var timeoutPromise = new Promise(function (_, reject) {
6
+ setTimeout(function () {
7
+ reject(new Error(timeoutMessage !== null && timeoutMessage !== void 0 ? timeoutMessage : "Operation timeout (".concat(timeout, "ms)")));
8
+ }, timeout);
9
+ });
10
+ return Promise.race([promise, timeoutPromise]);
11
+ }
12
+
13
+ export { withTimeout };
@@ -1,2 +1,3 @@
1
+ export * from './async';
1
2
  export * from './exerciseFile';
2
3
  export * from './runner';
package/es/utils/index.js CHANGED
@@ -1,2 +1,3 @@
1
+ export { withTimeout } from './async.js';
1
2
  export { checkExerciseFileEditable, checkExerciseFileResettable } from './exerciseFile.js';
2
3
  export { getProgrammingErrorResult } from './runner.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elice/material-exercise",
3
- "version": "1.250521.0",
3
+ "version": "1.250529.1",
4
4
  "description": "User view and editing components of Elice material exercise",
5
5
  "repository": "https://git.elicer.io/elice/frontend/library/elice-material",
6
6
  "license": "UNLICENSED",
@@ -83,8 +83,8 @@
83
83
  "@elice/icons": "^1.230814.0",
84
84
  "@elice/intl": "0.241127.0",
85
85
  "@elice/markdown": "1.241015.0",
86
- "@elice/material-shared-types": "1.250521.0",
87
- "@elice/material-shared-utils": "1.250521.0",
86
+ "@elice/material-shared-types": "1.250529.1",
87
+ "@elice/material-shared-utils": "1.250529.1",
88
88
  "@elice/mui-elements": "^5.250108.0-controllabel.0",
89
89
  "@elice/mui-system": "^5.250108.0-controllabel.0",
90
90
  "@elice/types": "1.241220.0",