@mongosh/browser-repl 2.3.5 → 2.3.6
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.
- package/README.md +10 -4
- package/lib/components/password-prompt.js +2 -2
- package/lib/components/password-prompt.js.map +1 -1
- package/lib/components/shell-input.js +3 -2
- package/lib/components/shell-input.js.map +1 -1
- package/lib/components/shell.d.ts +16 -60
- package/lib/components/shell.js +210 -202
- package/lib/components/shell.js.map +1 -1
- package/lib/sandbox.js +5 -22
- package/lib/sandbox.js.map +1 -1
- package/package.json +16 -11
- package/scripts/sync-to-compass.js +74 -0
package/README.md
CHANGED
|
@@ -31,14 +31,20 @@ const runtime = new IframeRuntime(serviceProvider);
|
|
|
31
31
|
Shell is a React component with the following properties:
|
|
32
32
|
|
|
33
33
|
- `runtime: Runtime`: The runtime used to evaluate code.
|
|
34
|
-
- `onOutputChanged?: (output:
|
|
35
|
-
- `onHistoryChanged?: (history:
|
|
34
|
+
- `onOutputChanged?: (output: ShellOutputEntry[]) => void`: A function called each time the output changes with an array of `ShellOutputEntries`.
|
|
35
|
+
- `onHistoryChanged?: (history: string[]) => void`: A function called each time the history changes with an array of history entries ordered from the most recent to the oldest entry.
|
|
36
|
+
- `onEditorChanged?: (editor: EditorRef | null) => void`: A function called each time the editor ref changes. Can be used to call editor methods.
|
|
37
|
+
- `onOperationStarted?: () => void`: A function called when an operation has begun.
|
|
38
|
+
- `onOperationEnd?: () => void`: A function called when an operation has completed (both error and success).
|
|
36
39
|
- `redactInfo?: boolean`: If set, the shell will omit or redact entries containing sensitive info from history. Defaults to `false`.
|
|
37
40
|
- `maxOutputLength?: number`: The maxiumum number of lines to keep in the output. Defaults to `1000`.
|
|
38
41
|
- `maxHistoryLength?: number`: The maxiumum number of lines to keep in the history. Defaults to `1000`.
|
|
39
|
-
- `
|
|
40
|
-
- `
|
|
42
|
+
- `initialEvaluate?: string|string[]`: A set of input strings to evaluate right after shell is mounted.
|
|
43
|
+
- `initialText?: string`: The initial text for the input field.
|
|
44
|
+
- `output?: ShellOutputEntry[]`: An array of entries to be displayed in the output area. Can be used to restore the output between sessions, or to setup a greeting message. **Note**: new entries will not be appended to the array.
|
|
45
|
+
- `history?: readonly string[]`: An array of history entries to prepopulate the history.
|
|
41
46
|
Can be used to restore the history between sessions. Entries must be ordered from the most recent to the oldest. Note: new entries will not be appended to the array.
|
|
47
|
+
- `isOperationInProgress?: boolean`: Can be used to restore the value between sessions.
|
|
42
48
|
|
|
43
49
|
### `ShellOutputEntry`
|
|
44
50
|
|
|
@@ -53,10 +53,10 @@ class PasswordPrompt extends react_1.Component {
|
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
render() {
|
|
56
|
-
return (react_1.default.createElement("label", { id: "password-
|
|
56
|
+
return (react_1.default.createElement("label", { id: "password-prompt-label", className: passwordPrompt },
|
|
57
57
|
this.props.prompt,
|
|
58
58
|
":\u00A0",
|
|
59
|
-
react_1.default.createElement(compass_components_1.TextInput, { "aria-labelledby": "password-
|
|
59
|
+
react_1.default.createElement(compass_components_1.TextInput, { "data-testid": "password-prompt", "aria-labelledby": "password-prompt-label", type: "password", onKeyDown: this.onKeyDown, className: passwordPropmtInputStyles, sizeVariant: "xsmall", autoFocus: true })));
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
exports.PasswordPrompt = PasswordPrompt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-prompt.js","sourceRoot":"","sources":["../../src/components/password-prompt.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAyC;AACzC,uEAA8E;AAE9E,MAAM,cAAc,GAAG,IAAA,wBAAG,EAAC;IACzB,WAAW,EAAE,EAAE;IACf,SAAS,EAAE;QACT,UAAU,EAAE,iCAAY,CAAC,IAAI;KAC9B;CACF,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,IAAA,wBAAG,EAAC;IACpC,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AAQH,MAAa,cAAe,SAAQ,iBAA8B;IAChE,YAAY,KAA0B;QACpC,KAAK,CAAC,KAAK,CAAC,CAAC;QAGf,cAAS,GAAG,CAAC,EAAyC,EAAQ,EAAE;YAC9D,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,KAAK,OAAO;oBACV,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAE,EAAE,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,KAAK,CAAC;gBACX,KAAK,QAAQ;oBACX,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACtB,MAAM;gBACR;oBACE,MAAM;YACV,CAAC;QACH,CAAC,CAAC;IAdF,CAAC;IAgBD,MAAM;QACJ,OAAO,CACL,yCAAO,EAAE,EAAC,
|
|
1
|
+
{"version":3,"file":"password-prompt.js","sourceRoot":"","sources":["../../src/components/password-prompt.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAyC;AACzC,uEAA8E;AAE9E,MAAM,cAAc,GAAG,IAAA,wBAAG,EAAC;IACzB,WAAW,EAAE,EAAE;IACf,SAAS,EAAE;QACT,UAAU,EAAE,iCAAY,CAAC,IAAI;KAC9B;CACF,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,IAAA,wBAAG,EAAC;IACpC,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AAQH,MAAa,cAAe,SAAQ,iBAA8B;IAChE,YAAY,KAA0B;QACpC,KAAK,CAAC,KAAK,CAAC,CAAC;QAGf,cAAS,GAAG,CAAC,EAAyC,EAAQ,EAAE;YAC9D,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,KAAK,OAAO;oBACV,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAE,EAAE,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,KAAK,CAAC;gBACX,KAAK,QAAQ;oBACX,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACtB,MAAM;gBACR;oBACE,MAAM;YACV,CAAC;QACH,CAAC,CAAC;IAdF,CAAC;IAgBD,MAAM;QACJ,OAAO,CACL,yCAAO,EAAE,EAAC,uBAAuB,EAAC,SAAS,EAAE,cAAc;YACxD,IAAI,CAAC,KAAK,CAAC,MAAM;;YAClB,8BAAC,8BAAS,mBACI,iBAAiB,qBACb,uBAAuB,EACvC,IAAI,EAAC,UAAU,EACf,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,SAAS,EAAE,yBAAyB,EACpC,WAAW,EAAC,QAAQ,EACpB,SAAS,SACE,CACP,CACT,CAAC;IACJ,CAAC;CACF;AAnCD,wCAmCC"}
|
|
@@ -71,10 +71,11 @@ class ShellInput extends react_1.Component {
|
|
|
71
71
|
});
|
|
72
72
|
};
|
|
73
73
|
this.onEnter = async () => {
|
|
74
|
+
const value = this.state.currentValue;
|
|
75
|
+
this.setState({ currentValue: '' });
|
|
74
76
|
if (this.props.onInput) {
|
|
75
|
-
await this.props.onInput(
|
|
77
|
+
await this.props.onInput(value);
|
|
76
78
|
}
|
|
77
|
-
this.setState({ currentValue: '' });
|
|
78
79
|
};
|
|
79
80
|
this.initializeHistoryNavigation();
|
|
80
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-input.js","sourceRoot":"","sources":["../../src/components/shell-input.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAyC;AACzC,uEAA2D;AAG3D,qCAAkC;AAClC,kEAAyC;AACzC,2DAAsD;AAEtD,MAAM,UAAU,GAAG,IAAA,wBAAG,EAAC;IACrB,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,MAAM;CAClB,CAAC,CAAC;AAoBH,MAAa,UAAW,SAAQ,iBAA2C;IASzE,YAAY,KAAsB;;QAChC,KAAK,CAAC,KAAK,CAAC,CAAC;QATN,UAAK,GAAoB;YAChC,YAAY,EAAE,MAAA,IAAI,CAAC,KAAK,CAAC,WAAW,mCAAI,EAAE;YAC1C,QAAQ,EAAE,KAAK;SAChB,CAAC;QAEM,6BAAwB,GAAa,EAAE,CAAC;QACxC,2BAAsB,GAAG,CAAC,CAAC;QA0B3B,aAAQ,GAAG,CAAC,KAAa,EAAQ,EAAE;;YACzC,MAAA,MAAA,IAAI,CAAC,KAAK,EAAC,YAAY,mDAAG,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAgBM,gBAAW,GAAG,GAAqB,EAAE;YAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IACE,IAAI,CAAC,sBAAsB;oBAC3B,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EACxC,CAAC;oBACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;gBAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAE9B,IAAI,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEM,gBAAW,GAAG,GAAqB,EAAE;YAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IAAI,IAAI,CAAC,sBAAsB,IAAI,CAAC,EAAE,CAAC;oBACrC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;gBAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAE9B,IAAI,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEM,YAAO,GAAG,KAAK,IAAmB,EAAE;YAC1C,
|
|
1
|
+
{"version":3,"file":"shell-input.js","sourceRoot":"","sources":["../../src/components/shell-input.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,69 +1,25 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { EditorRef } from '@mongodb-js/compass-editor';
|
|
2
3
|
import type { Runtime } from '@mongosh/browser-runtime-core';
|
|
3
4
|
import type { WorkerRuntime } from '@mongosh/node-runtime-worker-thread';
|
|
4
5
|
import type { ShellOutputEntry } from './shell-output';
|
|
5
6
|
interface ShellProps {
|
|
6
7
|
runtime: Runtime | WorkerRuntime;
|
|
7
|
-
|
|
8
|
-
onHistoryChanged: (history: readonly string[]) => void;
|
|
9
|
-
onInputChanged?: (input: string) => void;
|
|
8
|
+
className?: string;
|
|
10
9
|
redactInfo?: boolean;
|
|
11
|
-
maxOutputLength
|
|
12
|
-
maxHistoryLength
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
maxOutputLength?: number;
|
|
11
|
+
maxHistoryLength?: number;
|
|
12
|
+
onInputChanged?: (input: string) => void;
|
|
13
|
+
onOutputChanged?: (output: ShellOutputEntry[]) => void;
|
|
14
|
+
onHistoryChanged?: (history: string[]) => void;
|
|
15
|
+
onOperationStarted?: () => void;
|
|
16
|
+
onOperationEnd?: () => void;
|
|
16
17
|
initialEvaluate?: string | string[];
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
interface ShellState {
|
|
23
|
-
operationInProgress: boolean;
|
|
24
|
-
output: readonly ShellOutputEntry[];
|
|
25
|
-
history: readonly string[];
|
|
26
|
-
passwordPrompt: string;
|
|
27
|
-
shellPrompt: string;
|
|
28
|
-
}
|
|
29
|
-
export declare class _Shell extends Component<ShellProps, ShellState> {
|
|
30
|
-
static defaultProps: {
|
|
31
|
-
onHistoryChanged: () => void;
|
|
32
|
-
onOperationStarted: () => void;
|
|
33
|
-
onOperationEnd: () => void;
|
|
34
|
-
onOutputChanged: () => void;
|
|
35
|
-
maxOutputLength: number;
|
|
36
|
-
maxHistoryLength: number;
|
|
37
|
-
initialInput: string;
|
|
38
|
-
initialOutput: never[];
|
|
39
|
-
initialHistory: never[];
|
|
40
|
-
};
|
|
41
|
-
private shellInputElement;
|
|
42
|
-
private editor?;
|
|
43
|
-
private onFinishPasswordPrompt;
|
|
44
|
-
private onCancelPasswordPrompt;
|
|
45
|
-
readonly state: ShellState;
|
|
46
|
-
componentDidMount(): void;
|
|
47
|
-
componentDidUpdate(): void;
|
|
48
|
-
private evaluate;
|
|
49
|
-
private updateShellPrompt;
|
|
50
|
-
private addEntryToHistory;
|
|
51
|
-
private addEntriesToOutput;
|
|
52
|
-
onClearCommand: () => void;
|
|
53
|
-
onPrint: (result: {
|
|
54
|
-
type: string | null;
|
|
55
|
-
printable: any;
|
|
56
|
-
}[]) => void;
|
|
57
|
-
onPrompt: (question: string, type: 'password' | 'yesno') => Promise<string>;
|
|
58
|
-
private onInput;
|
|
59
|
-
private appendEmptyInput;
|
|
60
|
-
private scrollToBottom;
|
|
61
|
-
private onShellClicked;
|
|
62
|
-
private setEditor;
|
|
63
|
-
focusEditor: () => void;
|
|
64
|
-
private onSigInt;
|
|
65
|
-
renderInput(): JSX.Element;
|
|
66
|
-
render(): JSX.Element;
|
|
18
|
+
initialText?: string;
|
|
19
|
+
output?: ShellOutputEntry[];
|
|
20
|
+
history?: string[];
|
|
21
|
+
isOperationInProgress?: boolean;
|
|
22
|
+
onEditorChanged?: (editor: EditorRef | null) => void;
|
|
67
23
|
}
|
|
68
|
-
export declare const Shell: React.ForwardRefExoticComponent<
|
|
24
|
+
export declare const Shell: React.ForwardRefExoticComponent<ShellProps & React.RefAttributes<EditorRef | null>>;
|
|
69
25
|
export {};
|
package/lib/components/shell.js
CHANGED
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.Shell =
|
|
26
|
+
exports.Shell = void 0;
|
|
27
27
|
const react_1 = __importStar(require("react"));
|
|
28
28
|
const compass_components_1 = require("@mongodb-js/compass-components");
|
|
29
29
|
const history_1 = require("@mongosh/history");
|
|
@@ -66,160 +66,121 @@ const shellContainerDarkModeStyles = (0, compass_components_1.css)({
|
|
|
66
66
|
backgroundColor: compass_components_1.palette.gray.dark4,
|
|
67
67
|
color: compass_components_1.palette.gray.light3,
|
|
68
68
|
});
|
|
69
|
-
const noop = () => {
|
|
70
|
-
};
|
|
71
69
|
const normalizeInitialEvaluate = (initialEvaluate) => {
|
|
70
|
+
if (!initialEvaluate) {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
72
73
|
return (Array.isArray(initialEvaluate) ? initialEvaluate : [initialEvaluate]).filter((line) => {
|
|
73
74
|
return !!line;
|
|
74
75
|
});
|
|
75
76
|
};
|
|
76
|
-
const
|
|
77
|
-
return (!initialEvaluate || normalizeInitialEvaluate(initialEvaluate).length === 0);
|
|
77
|
+
const noop = () => {
|
|
78
78
|
};
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
};
|
|
123
|
-
this.onPrint = (result) => {
|
|
124
|
-
const output = this.addEntriesToOutput(result.map((entry) => ({
|
|
125
|
-
format: 'output',
|
|
126
|
-
type: entry.type,
|
|
127
|
-
value: entry.printable,
|
|
128
|
-
})));
|
|
129
|
-
this.setState({ output });
|
|
130
|
-
this.props.onOutputChanged(output);
|
|
79
|
+
const capLengthEnd = (elements, maxLength) => {
|
|
80
|
+
elements.splice(0, elements.length - maxLength);
|
|
81
|
+
};
|
|
82
|
+
const capLengthStart = (elements, maxLength) => {
|
|
83
|
+
elements.splice(maxLength);
|
|
84
|
+
};
|
|
85
|
+
const _Shell = ({ runtime, className, redactInfo, maxOutputLength = 1000, maxHistoryLength = 1000, onInputChanged, onOutputChanged, onHistoryChanged, onOperationStarted, onOperationEnd, initialEvaluate, initialText, output, history, isOperationInProgress = false, }, ref) => {
|
|
86
|
+
const darkMode = (0, compass_components_1.useDarkMode)();
|
|
87
|
+
const editorRef = (0, react_1.useRef)(null);
|
|
88
|
+
const shellInputContainerRef = (0, react_1.useRef)(null);
|
|
89
|
+
const initialEvaluateRef = (0, react_1.useRef)(initialEvaluate);
|
|
90
|
+
const outputRef = (0, react_1.useRef)(output);
|
|
91
|
+
const historyRef = (0, react_1.useRef)(history);
|
|
92
|
+
(0, react_1.useImperativeHandle)(ref, () => {
|
|
93
|
+
return {
|
|
94
|
+
foldAll() {
|
|
95
|
+
var _a, _b;
|
|
96
|
+
return (_b = (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.foldAll()) !== null && _b !== void 0 ? _b : false;
|
|
97
|
+
},
|
|
98
|
+
unfoldAll() {
|
|
99
|
+
var _a, _b;
|
|
100
|
+
return (_b = (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.unfoldAll()) !== null && _b !== void 0 ? _b : false;
|
|
101
|
+
},
|
|
102
|
+
copyAll() {
|
|
103
|
+
var _a, _b;
|
|
104
|
+
return (_b = (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.copyAll()) !== null && _b !== void 0 ? _b : false;
|
|
105
|
+
},
|
|
106
|
+
prettify() {
|
|
107
|
+
var _a, _b;
|
|
108
|
+
return (_b = (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.prettify()) !== null && _b !== void 0 ? _b : false;
|
|
109
|
+
},
|
|
110
|
+
focus() {
|
|
111
|
+
var _a, _b;
|
|
112
|
+
return (_b = (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.focus()) !== null && _b !== void 0 ? _b : false;
|
|
113
|
+
},
|
|
114
|
+
applySnippet(template) {
|
|
115
|
+
var _a, _b;
|
|
116
|
+
return (_b = (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.applySnippet(template)) !== null && _b !== void 0 ? _b : false;
|
|
117
|
+
},
|
|
118
|
+
get editor() {
|
|
119
|
+
var _a, _b;
|
|
120
|
+
return (_b = (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.editor) !== null && _b !== void 0 ? _b : null;
|
|
121
|
+
},
|
|
131
122
|
};
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
123
|
+
}, []);
|
|
124
|
+
const [passwordPrompt, setPasswordPrompt] = (0, react_1.useState)('');
|
|
125
|
+
const [shellPrompt, setShellPrompt] = (0, react_1.useState)('>');
|
|
126
|
+
const [onFinishPasswordPrompt, setOnFinishPasswordPrompt] = (0, react_1.useState)(() => noop);
|
|
127
|
+
const [onCancelPasswordPrompt, setOnCancelPasswordPrompt] = (0, react_1.useState)(() => noop);
|
|
128
|
+
const focusEditor = (0, react_1.useCallback)(() => {
|
|
129
|
+
var _a;
|
|
130
|
+
(_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
131
|
+
}, [editorRef]);
|
|
132
|
+
const listener = (0, react_1.useMemo)(() => {
|
|
133
|
+
return {
|
|
134
|
+
onPrint: (result) => {
|
|
135
|
+
var _a;
|
|
136
|
+
const newOutput = [
|
|
137
|
+
...((_a = outputRef.current) !== null && _a !== void 0 ? _a : []),
|
|
138
|
+
...result.map((entry) => ({
|
|
139
|
+
format: 'output',
|
|
140
|
+
type: entry.type,
|
|
141
|
+
value: entry.printable,
|
|
142
|
+
})),
|
|
143
|
+
];
|
|
144
|
+
capLengthEnd(newOutput, maxOutputLength);
|
|
145
|
+
outputRef.current = newOutput;
|
|
146
|
+
onOutputChanged === null || onOutputChanged === void 0 ? void 0 : onOutputChanged(newOutput);
|
|
147
|
+
},
|
|
148
|
+
onPrompt: async (question, type) => {
|
|
149
|
+
if (type !== 'password') {
|
|
150
|
+
throw new Error('yes/no prompts not implemented yet');
|
|
151
|
+
}
|
|
152
|
+
const reset = () => {
|
|
153
|
+
setOnFinishPasswordPrompt(() => noop);
|
|
154
|
+
setOnCancelPasswordPrompt(() => noop);
|
|
155
|
+
setPasswordPrompt('');
|
|
156
|
+
setTimeout(focusEditor, 1);
|
|
150
157
|
};
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
});
|
|
169
|
-
this.props.onOutputChanged(output);
|
|
170
|
-
const outputLine = await this.evaluate(code);
|
|
171
|
-
output = this.addEntriesToOutput([outputLine]);
|
|
172
|
-
const history = this.addEntryToHistory(code);
|
|
173
|
-
this.setState({
|
|
174
|
-
operationInProgress: false,
|
|
175
|
-
output,
|
|
176
|
-
history,
|
|
177
|
-
});
|
|
178
|
-
this.props.onOutputChanged(output);
|
|
179
|
-
this.props.onHistoryChanged(history);
|
|
180
|
-
};
|
|
181
|
-
this.onShellClicked = (event) => {
|
|
182
|
-
if (event.currentTarget === event.target) {
|
|
183
|
-
this.focusEditor();
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
this.setEditor = (editor) => {
|
|
187
|
-
this.editor = editor;
|
|
188
|
-
};
|
|
189
|
-
this.focusEditor = () => {
|
|
190
|
-
var _a;
|
|
191
|
-
(_a = this.editor) === null || _a === void 0 ? void 0 : _a.focus();
|
|
192
|
-
};
|
|
193
|
-
this.onSigInt = () => {
|
|
194
|
-
if (this.state.operationInProgress &&
|
|
195
|
-
this.props.runtime.interrupt) {
|
|
196
|
-
return this.props.runtime.interrupt();
|
|
197
|
-
}
|
|
198
|
-
return Promise.resolve(false);
|
|
158
|
+
const ret = new Promise((resolve, reject) => {
|
|
159
|
+
setOnFinishPasswordPrompt(() => (result) => {
|
|
160
|
+
reset();
|
|
161
|
+
resolve(result);
|
|
162
|
+
});
|
|
163
|
+
setOnCancelPasswordPrompt(() => () => {
|
|
164
|
+
reset();
|
|
165
|
+
reject(new Error('Canceled by user'));
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
setPasswordPrompt(question);
|
|
169
|
+
return ret;
|
|
170
|
+
},
|
|
171
|
+
onClearCommand: () => {
|
|
172
|
+
outputRef.current = [];
|
|
173
|
+
onOutputChanged === null || onOutputChanged === void 0 ? void 0 : onOutputChanged([]);
|
|
174
|
+
},
|
|
199
175
|
};
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
let evalLines = [];
|
|
203
|
-
if (this.props.initialEvaluate) {
|
|
204
|
-
evalLines = normalizeInitialEvaluate(this.props.initialEvaluate);
|
|
205
|
-
}
|
|
206
|
-
this.scrollToBottom();
|
|
207
|
-
void this.updateShellPrompt().then(async () => {
|
|
208
|
-
for (const input of evalLines) {
|
|
209
|
-
await this.onInput(input);
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
componentDidUpdate() {
|
|
214
|
-
this.scrollToBottom();
|
|
215
|
-
}
|
|
216
|
-
async updateShellPrompt() {
|
|
176
|
+
}, [focusEditor, maxOutputLength, onOutputChanged]);
|
|
177
|
+
const updateShellPrompt = (0, react_1.useCallback)(async () => {
|
|
217
178
|
var _a;
|
|
218
|
-
let
|
|
179
|
+
let newShellPrompt = '>';
|
|
219
180
|
let hasCustomPrompt = false;
|
|
220
181
|
try {
|
|
221
|
-
|
|
222
|
-
const promptResult = await
|
|
182
|
+
runtime.setEvaluationListener(listener);
|
|
183
|
+
const promptResult = await runtime.evaluate(`
|
|
223
184
|
(() => {
|
|
224
185
|
switch (typeof prompt) {
|
|
225
186
|
case 'function':
|
|
@@ -230,7 +191,7 @@ class _Shell extends react_1.Component {
|
|
|
230
191
|
})()`);
|
|
231
192
|
if (promptResult.type === null &&
|
|
232
193
|
typeof promptResult.printable === 'string') {
|
|
233
|
-
|
|
194
|
+
newShellPrompt = promptResult.printable;
|
|
234
195
|
hasCustomPrompt = true;
|
|
235
196
|
}
|
|
236
197
|
}
|
|
@@ -238,71 +199,118 @@ class _Shell extends react_1.Component {
|
|
|
238
199
|
}
|
|
239
200
|
if (!hasCustomPrompt) {
|
|
240
201
|
try {
|
|
241
|
-
|
|
202
|
+
newShellPrompt = (_a = (await runtime.getShellPrompt())) !== null && _a !== void 0 ? _a : '>';
|
|
242
203
|
}
|
|
243
204
|
catch (_c) {
|
|
244
205
|
}
|
|
245
206
|
}
|
|
246
|
-
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
207
|
+
setShellPrompt(newShellPrompt);
|
|
208
|
+
}, [listener, runtime]);
|
|
209
|
+
const evaluate = (0, react_1.useCallback)(async (code) => {
|
|
210
|
+
let outputLine;
|
|
211
|
+
try {
|
|
212
|
+
onOperationStarted === null || onOperationStarted === void 0 ? void 0 : onOperationStarted();
|
|
213
|
+
runtime.setEvaluationListener(listener);
|
|
214
|
+
const result = await runtime.evaluate(code);
|
|
215
|
+
outputLine = {
|
|
216
|
+
format: 'output',
|
|
217
|
+
type: result.type,
|
|
218
|
+
value: result.printable,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
outputLine = {
|
|
223
|
+
format: 'error',
|
|
224
|
+
value: error,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
finally {
|
|
228
|
+
await updateShellPrompt();
|
|
229
|
+
onOperationEnd === null || onOperationEnd === void 0 ? void 0 : onOperationEnd();
|
|
230
|
+
}
|
|
231
|
+
return outputLine;
|
|
232
|
+
}, [listener, onOperationEnd, onOperationStarted, runtime, updateShellPrompt]);
|
|
233
|
+
const onInput = (0, react_1.useCallback)(async (code) => {
|
|
234
|
+
var _a, _b;
|
|
235
|
+
const newOutput = [...((_a = outputRef.current) !== null && _a !== void 0 ? _a : [])];
|
|
236
|
+
const newHistory = [...((_b = historyRef.current) !== null && _b !== void 0 ? _b : [])];
|
|
237
|
+
if (!code || code.trim() === '') {
|
|
238
|
+
newOutput.push({
|
|
239
|
+
format: 'input',
|
|
240
|
+
value: ' ',
|
|
241
|
+
});
|
|
242
|
+
capLengthEnd(newOutput, maxOutputLength);
|
|
243
|
+
outputRef.current = newOutput;
|
|
244
|
+
onOutputChanged === null || onOutputChanged === void 0 ? void 0 : onOutputChanged(newOutput);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
newOutput.push({
|
|
263
248
|
format: 'input',
|
|
264
|
-
value:
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
249
|
+
value: code,
|
|
250
|
+
});
|
|
251
|
+
capLengthEnd(newOutput, maxOutputLength);
|
|
252
|
+
outputRef.current = newOutput;
|
|
253
|
+
onOutputChanged === null || onOutputChanged === void 0 ? void 0 : onOutputChanged(newOutput);
|
|
254
|
+
const outputLine = await evaluate(code);
|
|
255
|
+
newOutput.push(outputLine);
|
|
256
|
+
capLengthEnd(newOutput, maxOutputLength);
|
|
257
|
+
outputRef.current = newOutput;
|
|
258
|
+
onOutputChanged === null || onOutputChanged === void 0 ? void 0 : onOutputChanged(newOutput);
|
|
259
|
+
newHistory.unshift(code);
|
|
260
|
+
capLengthStart(newHistory, maxHistoryLength);
|
|
261
|
+
(0, history_1.changeHistory)(newHistory, redactInfo ? 'redact-sensitive-data' : 'keep-sensitive-data');
|
|
262
|
+
historyRef.current = newHistory;
|
|
263
|
+
onHistoryChanged === null || onHistoryChanged === void 0 ? void 0 : onHistoryChanged(newHistory);
|
|
264
|
+
}, [
|
|
265
|
+
onOutputChanged,
|
|
266
|
+
evaluate,
|
|
267
|
+
redactInfo,
|
|
268
|
+
maxHistoryLength,
|
|
269
|
+
onHistoryChanged,
|
|
270
|
+
maxOutputLength,
|
|
271
|
+
]);
|
|
272
|
+
const setEditorRef = (0, react_1.useCallback)((editor) => {
|
|
273
|
+
editorRef.current = editor;
|
|
274
|
+
}, []);
|
|
275
|
+
const scrollToBottom = (0, react_1.useCallback)(() => {
|
|
276
|
+
if (!shellInputContainerRef.current) {
|
|
271
277
|
return;
|
|
272
278
|
}
|
|
273
|
-
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
if (
|
|
277
|
-
|
|
279
|
+
shellInputContainerRef.current.scrollIntoView();
|
|
280
|
+
}, [shellInputContainerRef]);
|
|
281
|
+
const onShellClicked = (0, react_1.useCallback)((event) => {
|
|
282
|
+
if (event.currentTarget === event.target) {
|
|
283
|
+
focusEditor();
|
|
278
284
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
285
|
+
}, [focusEditor]);
|
|
286
|
+
const onSigInt = (0, react_1.useCallback)(() => {
|
|
287
|
+
if (isOperationInProgress && runtime.interrupt) {
|
|
288
|
+
return runtime.interrupt();
|
|
289
|
+
}
|
|
290
|
+
return Promise.resolve(false);
|
|
291
|
+
}, [isOperationInProgress, runtime]);
|
|
292
|
+
(0, react_1.useEffect)(() => {
|
|
293
|
+
const evalLines = normalizeInitialEvaluate(initialEvaluateRef.current);
|
|
294
|
+
if (evalLines.length) {
|
|
295
|
+
void (async () => {
|
|
296
|
+
for (const input of evalLines) {
|
|
297
|
+
await onInput(input);
|
|
298
|
+
}
|
|
299
|
+
})();
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
void updateShellPrompt();
|
|
303
|
+
}
|
|
304
|
+
}, [onInput, updateShellPrompt]);
|
|
305
|
+
(0, react_1.useEffect)(() => {
|
|
306
|
+
(0, compass_components_1.rafraf)(() => {
|
|
307
|
+
scrollToBottom();
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
return (react_1.default.createElement("div", { "data-testid": "shell", className: (0, compass_components_1.cx)(shellContainer, darkMode ? shellContainerDarkModeStyles : shellContainerLightModeStyles, className), onClick: onShellClicked },
|
|
311
|
+
react_1.default.createElement("div", null,
|
|
312
|
+
react_1.default.createElement(shell_output_1.ShellOutput, { output: output !== null && output !== void 0 ? output : [] })),
|
|
313
|
+
react_1.default.createElement("div", { ref: shellInputContainerRef }, passwordPrompt ? (react_1.default.createElement(password_prompt_1.PasswordPrompt, { onFinish: onFinishPasswordPrompt, onCancel: onCancelPasswordPrompt, prompt: passwordPrompt })) : (react_1.default.createElement(shell_input_1.ShellInput, { initialText: initialText, onTextChange: onInputChanged, prompt: shellPrompt, autocompleter: runtime, history: history, onClearCommand: listener.onClearCommand, onInput: onInput, operationInProgress: isOperationInProgress, editorRef: setEditorRef, onSigInt: onSigInt })))));
|
|
303
314
|
};
|
|
304
|
-
exports.Shell = react_1.default.forwardRef(
|
|
305
|
-
const darkMode = (0, compass_components_1.useDarkMode)();
|
|
306
|
-
return react_1.default.createElement(_Shell, { darkMode: darkMode, ref: ref, ...props });
|
|
307
|
-
});
|
|
315
|
+
exports.Shell = react_1.default.forwardRef(_Shell);
|
|
308
316
|
//# sourceMappingURL=shell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/components/shell.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/components/shell.tsx"],"names":[],"mappings":"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"}
|
package/lib/sandbox.js
CHANGED
|
@@ -151,31 +151,29 @@ const IframeRuntimeExample = () => {
|
|
|
151
151
|
const [redactInfo, setRedactInfo] = (0, react_1.useState)(false);
|
|
152
152
|
const [maxOutputLength, setMaxOutputLength] = (0, react_1.useState)(1000);
|
|
153
153
|
const [maxHistoryLength, setMaxHistoryLength] = (0, react_1.useState)(1000);
|
|
154
|
-
const [initialInput, setInitialInput] = (0, react_1.useState)('');
|
|
155
154
|
const [initialEvaluate, setInitialEvaluate] = (0, react_1.useState)([]);
|
|
156
|
-
const [
|
|
155
|
+
const [initialText, setInitialText] = (0, react_1.useState)('');
|
|
156
|
+
const [output, setOutput] = (0, react_1.useState)([
|
|
157
157
|
{ format: 'output', value: { foo: 1, bar: true, buz: function () { } } },
|
|
158
158
|
]);
|
|
159
|
-
const [
|
|
159
|
+
const [history, setHistory] = (0, react_1.useState)([
|
|
160
160
|
'show dbs',
|
|
161
161
|
'db.coll.stats()',
|
|
162
162
|
'{x: 1, y: {z: 2}, k: [1, 2, 3]}',
|
|
163
163
|
'passwordPrompt()',
|
|
164
164
|
'(() => { throw new Error("Whoops!"); })()',
|
|
165
165
|
]);
|
|
166
|
+
const [isOperationInProgress, setIsOperationInProgress] = (0, react_1.useState)(false);
|
|
166
167
|
(0, react_1.useEffect)(() => {
|
|
167
168
|
void runtime.initialize();
|
|
168
169
|
return () => {
|
|
169
170
|
void runtime.destroy();
|
|
170
171
|
};
|
|
171
172
|
}, []);
|
|
172
|
-
const key = (0, react_1.useMemo)(() => {
|
|
173
|
-
return initialHistory.concat(initialInput, initialEvaluate).join('');
|
|
174
|
-
}, [initialHistory, initialInput, initialEvaluate]);
|
|
175
173
|
return (react_1.default.createElement("div", { className: sandboxContainer },
|
|
176
174
|
react_1.default.createElement("div", { className: shellContainer },
|
|
177
175
|
react_1.default.createElement(compass_components_1.ThemeProvider, { theme: { theme: darkMode ? compass_components_1.Theme.Dark : compass_components_1.Theme.Light, enabled: true } },
|
|
178
|
-
react_1.default.createElement(index_1.Shell, {
|
|
176
|
+
react_1.default.createElement(index_1.Shell, { runtime: runtime, redactInfo: redactInfo, maxOutputLength: maxOutputLength, maxHistoryLength: maxHistoryLength, initialText: initialText, initialEvaluate: initialEvaluate.filter(Boolean), output: output, history: history, isOperationInProgress: isOperationInProgress, onInputChanged: setInitialText, onOutputChanged: setOutput, onHistoryChanged: setHistory, onOperationStarted: () => setIsOperationInProgress(true), onOperationEnd: () => setIsOperationInProgress(false) }))),
|
|
179
177
|
react_1.default.createElement("div", { className: controlsContainer },
|
|
180
178
|
react_1.default.createElement(compass_components_1.FormFieldContainer, { className: formField },
|
|
181
179
|
react_1.default.createElement(compass_components_1.Label, { id: "darkModeLabel", htmlFor: "darkMode" }, "darkMode"),
|
|
@@ -208,21 +206,6 @@ const IframeRuntimeExample = () => {
|
|
|
208
206
|
react_1.default.createElement(compass_components_1.TextInput, { className: textInput, "aria-labelledby": "maxHistoryLengthLabel", type: "number", value: String(maxHistoryLength), onChange: (evt) => {
|
|
209
207
|
setMaxHistoryLength(Number(evt.currentTarget.value));
|
|
210
208
|
} })),
|
|
211
|
-
react_1.default.createElement(compass_components_1.FormFieldContainer, { className: formField },
|
|
212
|
-
react_1.default.createElement(compass_components_1.Label, { id: "initialHistoryLabel", htmlFor: "initialHistory" }, "initialHistory"),
|
|
213
|
-
react_1.default.createElement(compass_components_1.Description, null,
|
|
214
|
-
"An array of history entries to prepopulate the history. Can be used to restore the history between sessions. Entries must be ordered from the most recent to the oldest.",
|
|
215
|
-
react_1.default.createElement("br", null),
|
|
216
|
-
"Note: new entries will not be appended to the array"),
|
|
217
|
-
react_1.default.createElement(compass_components_1.TextArea, { "aria-labelledby": "initialHistory", value: initialHistory.join('\n'), onChange: (evt) => {
|
|
218
|
-
setInitialHistory(evt.currentTarget.value.split('\n'));
|
|
219
|
-
}, className: (0, compass_components_1.cx)(textarea, textInput) })),
|
|
220
|
-
react_1.default.createElement(compass_components_1.FormFieldContainer, { className: formField },
|
|
221
|
-
react_1.default.createElement(compass_components_1.Label, { id: "initialInputLabel", htmlFor: "initialInput" }, "initialInput"),
|
|
222
|
-
react_1.default.createElement(compass_components_1.Description, null, "Initial value in the shell input field"),
|
|
223
|
-
react_1.default.createElement(compass_components_1.TextInput, { className: textInput, "aria-labelledby": "initialInputLabel", value: initialInput, onChange: (evt) => {
|
|
224
|
-
setInitialInput(evt.currentTarget.value);
|
|
225
|
-
} })),
|
|
226
209
|
react_1.default.createElement(compass_components_1.FormFieldContainer, { className: formField },
|
|
227
210
|
react_1.default.createElement(compass_components_1.Label, { id: "initialEvaluateLabel", htmlFor: "initialEvaluate" }, "initialEvaluate"),
|
|
228
211
|
react_1.default.createElement(compass_components_1.Description, null, "A set of input strings to evaluate right after shell is mounted"),
|
package/lib/sandbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAiC;AACjC,+
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAiC;AACjC,+CAAmD;AACnD,uEAYwC;AACxC,qDAAiD;AACjD,mCAAgC;AAIhC,IAAA,iCAAY,EAAC;IACX,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC;KACV;IACD,GAAG,EAAE;QACH,SAAS,EAAE,YAAY;KACxB;IACD,oBAAoB,EAAE;QACpB,gBAAgB,EAAE,MAAM;QACxB,aAAa,EAAE,WAAW;KAC3B;CACF,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAA,wBAAG,EAAC;IAC3B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,OAAO;CACnB,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAA,wBAAG,EAAC;IACzB,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,GAAG;CACf,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,IAAA,wBAAG,EAAC;IAC5B,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,IAAA,wBAAG,EAAC;IACnB,QAAQ,EAAE;QACR,MAAM,EAAE,UAAU;QAClB,SAAS,EAAE,OAAO;KACnB;CACF,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAA,wBAAG,EAAC;IACpB,QAAQ,EAAE,GAAG;CACd,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAA,wBAAG,EAAC;IACpB,OAAO,EAAE,MAAM;IACf,iBAAiB,EAAE;;;GAGlB;IACD,mBAAmB,EAAE,SAAS;IAC9B,SAAS,EAAE,EAAE;IACb,YAAY,EAAE,OAAO;IACrB,UAAU,EAAE,OAAO;IACnB,iBAAiB,EAAE;QACjB,QAAQ,EAAE,OAAO;KAClB;IACD,iBAAiB,EAAE;QACjB,QAAQ,EAAE,aAAa;KACxB;IACD,iBAAiB,EAAE;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,KAAK;KACnB;CACF,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,EAAiB,EAAE,CACzC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACtB,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,MAAM,mBAAmB;IACvB,KAAK,CAAC,SAAS;QACb,MAAM,KAAK,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;SACjC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO;YACL,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;YACjC,SAAS,EAAE;gBACT,GAAG,EAAE,sBAAsB;aAC5B;SACF,CAAC;IACJ,CAAC;IAED,WAAW;QACT,OAAO;YACL,WAAW,EAAE;gBACX,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,SAAS;aACnB;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAElB,OAAO;YACL,SAAS,EAAE;gBACT,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAChD,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAChD,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC9D,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;aACvD;YACD,SAAS,EAAE,KAAK;YAChB,EAAE,EAAE,CAAC;SACN,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAElB,OAAO;YACL,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY,EAAE;YAChD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE;YAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;YACpC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE;YAC/C,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;YAC9B,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE;SACnC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,KAAK,EAAE,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;CACF;AAED,MAAM,OAAO,GAAG,IAAI,8BAAa,CAAC,IAAI,mBAAmB,EAAS,CAAC,CAAC;AAEpE,MAAM,oBAAoB,GAA4B,GAAG,EAAE;IACzD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAW,EAAE,CAAC,CAAC;IAErE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAqB;QACvD,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,cAAa,CAAC,EAAE,EAAE;KACxE,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC;QACrC,UAAU;QACV,iBAAiB;QACjB,iCAAiC;QACjC,kBAAkB;QAClB,2CAA2C;KAC5C,CAAC,CAAC;IACH,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE1E,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC;QAC1B,OAAO,GAAS,EAAE;YAChB,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,uCAAK,SAAS,EAAE,gBAAgB;QAC9B,uCAAK,SAAS,EAAE,cAAc;YAC5B,8BAAC,kCAAa,IACZ,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,0BAAK,CAAC,IAAI,CAAC,CAAC,CAAC,0BAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;gBAEpE,8BAAC,aAAK,IACJ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAChD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,qBAAqB,EAAE,qBAAqB,EAC5C,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,SAAS,EAC1B,gBAAgB,EAAE,UAAU,EAC5B,kBAAkB,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,EACxD,cAAc,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,GACrD,CACY,CACZ;QACN,uCAAK,SAAS,EAAE,iBAAiB;YAC/B,8BAAC,uCAAkB,IAAC,SAAS,EAAE,SAAS;gBACtC,8BAAC,0BAAK,IAAC,EAAE,EAAC,eAAe,EAAC,OAAO,EAAC,UAAU,eAEpC;gBACR,8BAAC,gCAAW,iCAAqC;gBACjD,8BAAC,2BAAM,uBACW,eAAe,EAC/B,EAAE,EAAC,UAAU,EACb,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,WAAW,GACrB,CACiB;YAErB,8BAAC,uCAAkB,IAAC,SAAS,EAAE,SAAS;gBACtC,8BAAC,0BAAK,IAAC,EAAE,EAAC,iBAAiB,EAAC,OAAO,EAAC,YAAY,iBAExC;gBACR,8BAAC,gCAAW;;oBAEqB,oDAAkB;wBACrC;gBACd,8BAAC,2BAAM,uBACW,iBAAiB,EACjC,EAAE,EAAC,YAAY,EACf,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,aAAa,GACvB,CACiB;YAErB,8BAAC,uCAAkB,IAAC,SAAS,EAAE,SAAS;gBACtC,8BAAC,0BAAK,IAAC,EAAE,EAAC,sBAAsB,EAAC,OAAO,EAAC,iBAAiB,sBAElD;gBACR,8BAAC,gCAAW;;oBACsD,GAAG;oBACnE,mDAAiB;wBACL;gBACd,8BAAC,8BAAS,IACR,SAAS,EAAE,SAAS,qBACJ,sBAAsB,EACtC,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,EAC9B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;wBAChB,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtD,CAAC,GACD,CACiB;YAErB,8BAAC,uCAAkB,IAAC,SAAS,EAAE,SAAS;gBACtC,8BAAC,0BAAK,IAAC,EAAE,EAAC,uBAAuB,EAAC,OAAO,EAAC,kBAAkB,uBAEpD;gBACR,8BAAC,gCAAW;;oBACuD,GAAG;oBACpE,mDAAiB;wBACL;gBACd,8BAAC,8BAAS,IACR,SAAS,EAAE,SAAS,qBACJ,uBAAuB,EACvC,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAC/B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;wBAChB,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;oBACvD,CAAC,GACD,CACiB;YAErB,8BAAC,uCAAkB,IAAC,SAAS,EAAE,SAAS;gBACtC,8BAAC,0BAAK,IAAC,EAAE,EAAC,sBAAsB,EAAC,OAAO,EAAC,iBAAiB,sBAElD;gBACR,8BAAC,gCAAW,0EAEE;gBACd,8BAAC,6BAAQ,uBACS,iBAAiB,EACjC,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EACjC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;wBAChB,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1D,CAAC,EACD,SAAS,EAAE,IAAA,uBAAE,EAAC,QAAQ,EAAE,SAAS,CAAC,GAClC,CACiB,CACjB,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,mBAAQ,CAAC,MAAM,CAAC,8BAAC,oBAAoB,OAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mongosh/browser-repl",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.6",
|
|
4
4
|
"description": "Browser presentation component for Mongo Shell",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=14.15.1"
|
|
@@ -35,7 +35,8 @@
|
|
|
35
35
|
"depcheck": "depcheck",
|
|
36
36
|
"compile": "tsc -p tsconfig.json",
|
|
37
37
|
"prettier": "prettier",
|
|
38
|
-
"reformat": "npm run prettier -- --write . && npm run eslint --fix"
|
|
38
|
+
"reformat": "npm run prettier -- --write . && npm run eslint --fix",
|
|
39
|
+
"sync-to-compass": "node scripts/sync-to-compass.js"
|
|
39
40
|
},
|
|
40
41
|
"config": {
|
|
41
42
|
"unsafe-perm": true
|
|
@@ -55,12 +56,12 @@
|
|
|
55
56
|
]
|
|
56
57
|
},
|
|
57
58
|
"dependencies": {
|
|
58
|
-
"@mongosh/browser-runtime-core": "2.3.
|
|
59
|
-
"@mongosh/errors": "2.3.
|
|
60
|
-
"@mongosh/history": "2.3.
|
|
61
|
-
"@mongosh/i18n": "2.3.
|
|
62
|
-
"@mongosh/node-runtime-worker-thread": "2.3.
|
|
63
|
-
"@mongosh/service-provider-core": "2.3.
|
|
59
|
+
"@mongosh/browser-runtime-core": "2.3.6",
|
|
60
|
+
"@mongosh/errors": "2.3.6",
|
|
61
|
+
"@mongosh/history": "2.3.6",
|
|
62
|
+
"@mongosh/i18n": "2.3.6",
|
|
63
|
+
"@mongosh/node-runtime-worker-thread": "2.3.6",
|
|
64
|
+
"@mongosh/service-provider-core": "2.3.6",
|
|
64
65
|
"numeral": "^2.0.6",
|
|
65
66
|
"text-table": "^0.2.0"
|
|
66
67
|
},
|
|
@@ -71,10 +72,13 @@
|
|
|
71
72
|
"@babel/preset-typescript": "^7.18.6",
|
|
72
73
|
"@mongodb-js/compass-components": "*",
|
|
73
74
|
"@mongodb-js/compass-editor": "*",
|
|
74
|
-
"@mongodb-js/eslint-config-mongosh": "2.3.
|
|
75
|
+
"@mongodb-js/eslint-config-mongosh": "2.3.6",
|
|
75
76
|
"@mongodb-js/prettier-config-devtools": "^1.0.1",
|
|
76
|
-
"@mongodb-js/tsconfig-mongosh": "2.3.
|
|
77
|
+
"@mongodb-js/tsconfig-mongosh": "2.3.6",
|
|
77
78
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.8",
|
|
79
|
+
"@testing-library/dom": "^8.20.1",
|
|
80
|
+
"@testing-library/react": "^12.1.5",
|
|
81
|
+
"@testing-library/user-event": "^13.5.0",
|
|
78
82
|
"@types/numeral": "^2.0.2",
|
|
79
83
|
"@types/react": "^16.9.17",
|
|
80
84
|
"@types/react-dom": "^18.0.8",
|
|
@@ -95,6 +99,7 @@
|
|
|
95
99
|
"karma-mocha-reporter": "^2.2.5",
|
|
96
100
|
"karma-typescript": "^5.5.4",
|
|
97
101
|
"karma-webpack": "^5.0.0",
|
|
102
|
+
"lodash": "^4.17.21",
|
|
98
103
|
"mongodb": "^6.12.0",
|
|
99
104
|
"path-browserify": "^1.0.1",
|
|
100
105
|
"prettier": "^2.8.8",
|
|
@@ -117,5 +122,5 @@
|
|
|
117
122
|
"react": "^17.0.2",
|
|
118
123
|
"react-dom": "^17.0.2"
|
|
119
124
|
},
|
|
120
|
-
"gitHead": "
|
|
125
|
+
"gitHead": "5405fe459055cf7a3f2c4213dea698797e460ca0"
|
|
121
126
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
'use strict';
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const child_process = require('child_process');
|
|
6
|
+
const { debounce } = require('lodash');
|
|
7
|
+
|
|
8
|
+
if (!process.env.COMPASS_HOME) {
|
|
9
|
+
throw new Error('Missing required environment variable $COMPASS_HOME.');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const packageDir = path.resolve(__dirname, '..');
|
|
13
|
+
const srcDir = path.resolve(__dirname, '..', 'src');
|
|
14
|
+
const libDir = path.resolve(__dirname, '..', 'lib');
|
|
15
|
+
|
|
16
|
+
const destDir = path.dirname(
|
|
17
|
+
child_process.execFileSync(
|
|
18
|
+
'node',
|
|
19
|
+
['-p', "require.resolve('@mongosh/browser-repl')"],
|
|
20
|
+
{ cwd: process.env.COMPASS_HOME, encoding: 'utf-8' }
|
|
21
|
+
)
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
console.log({ packageDir, srcDir, libDir, destDir });
|
|
25
|
+
|
|
26
|
+
const compileAndCopy = debounce(
|
|
27
|
+
function () {
|
|
28
|
+
try {
|
|
29
|
+
child_process.execFileSync('npm', ['run', 'compile'], {
|
|
30
|
+
cwd: packageDir,
|
|
31
|
+
encoding: 'utf-8',
|
|
32
|
+
});
|
|
33
|
+
} catch (err) {
|
|
34
|
+
if (err.code) {
|
|
35
|
+
// Spawning child process failed
|
|
36
|
+
console.error(err.code);
|
|
37
|
+
} else {
|
|
38
|
+
// Child was spawned but exited with non-zero exit code
|
|
39
|
+
// Error contains any stdout and stderr from the child
|
|
40
|
+
const { stdout, stderr } = err;
|
|
41
|
+
|
|
42
|
+
console.log(stdout);
|
|
43
|
+
console.error(stderr);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
fs.cpSync(libDir, destDir, { recursive: true });
|
|
47
|
+
console.log('done.');
|
|
48
|
+
},
|
|
49
|
+
1_000,
|
|
50
|
+
{
|
|
51
|
+
leading: true,
|
|
52
|
+
trailing: true,
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
const srcWatcher = fs.watch(
|
|
57
|
+
srcDir,
|
|
58
|
+
{ recursive: true },
|
|
59
|
+
function (eventType, filename) {
|
|
60
|
+
console.log(eventType, filename);
|
|
61
|
+
compileAndCopy();
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
function cleanup() {
|
|
66
|
+
srcWatcher.close();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
for (const evt of ['SIGINT', 'SIGTERM']) {
|
|
70
|
+
process.on(evt, cleanup);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// do an initial copy on startup
|
|
74
|
+
compileAndCopy();
|