diff --git a/demos/monaco/lib/bs/.bsbuild b/demos/monaco/lib/bs/.bsbuild index ce464dab0..1364598be 100644 --- a/demos/monaco/lib/bs/.bsbuild +++ b/demos/monaco/lib/bs/.bsbuild @@ -1,7 +1,8 @@ -3 +4 Main Editor +Window MonacoEditor src src/external -1 +1 0 diff --git a/demos/monaco/lib/bs/.bsdeps b/demos/monaco/lib/bs/.bsdeps index 5e23c9f8a..c4dee6c00 100644 --- a/demos/monaco/lib/bs/.bsdeps +++ b/demos/monaco/lib/bs/.bsdeps @@ -1,8 +1,8 @@ 10.1.4 /Users/yang/Github/Meta3D/demos/monaco 0 -bsconfig.json 0x1.95a66368p+30 +bsconfig.json 0x1.95c61a28p+30 src 0x1.95a653bcp+30 -src/external 0x1.95a64904p+30 +src/external 0x1.95c618bcp+30 === /Users/yang/Github/Meta3D/node_modules/rescript/darwin/rescript.exe 0x1.95811b6p+30 diff --git a/demos/monaco/lib/bs/.compiler.log b/demos/monaco/lib/bs/.compiler.log index 67c6a07af..05f961b01 100644 --- a/demos/monaco/lib/bs/.compiler.log +++ b/demos/monaco/lib/bs/.compiler.log @@ -1,2 +1,2 @@ -#Start(1701425282334) -#Done(1701425282401) +#Start(1701942328135) +#Done(1701942328180) diff --git a/demos/monaco/lib/bs/.ninja_log b/demos/monaco/lib/bs/.ninja_log index aac1d5997..f47b18859 100644 --- a/demos/monaco/lib/bs/.ninja_log +++ b/demos/monaco/lib/bs/.ninja_log @@ -1,30 +1,50 @@ # ninja log v6 -38 89 1701424572559842196 src/Editor-Monaco.cmj 39b2e3766d98d43a -89 125 1701424572618336550 ../es6_global/src/Main.bs.js 310c78b32d6bfaa9 -20 39 1701424518949784060 src/external/MonacoEditor-Monaco.cmj cf9d6de7d9937c42 -89 125 1701424572618336550 src/Main-Monaco.cmi 310c78b32d6bfaa9 -89 125 1701424572618336550 src/Main-Monaco.cmj 310c78b32d6bfaa9 -89 125 1701424572618336550 ../js/src/Main.bs.js 310c78b32d6bfaa9 -14 20 1701424518949784060 src/external/MonacoEditor.d 3beb54659d8754a6 -0 14 1701424518949784060 src/external/MonacoEditor.ast 18aee9080f099d38 -20 39 1701424518949784060 ../js/src/external/MonacoEditor.bs.js cf9d6de7d9937c42 -1 26 1701424572559842196 src/Editor.ast c6c5cb33c5f68401 -0 21 1701420387626411236 src/Main.ast 71353078246625c8 -21 32 1701420387638870669 src/Main.d ce6c5184e1881641 -26 38 1701424572559842196 src/Editor.d 8a1d9d7890c7b7f2 -20 39 1701424518949784060 src/external/MonacoEditor-Monaco.cmi cf9d6de7d9937c42 -38 89 1701424572559842196 ../js/src/Editor.bs.js 39b2e3766d98d43a -20 39 1701424518949784060 ../es6_global/src/external/MonacoEditor.bs.js cf9d6de7d9937c42 -38 89 1701424572559842196 ../es6_global/src/Editor.bs.js 39b2e3766d98d43a -1 23 1701420387627206261 Monaco.cmi f40aeddade8ac3e5 -38 89 1701424572559842196 src/Editor-Monaco.cmi 39b2e3766d98d43a -0 15 1701425282347553498 src/Editor.ast c6c5cb33c5f68401 -15 21 1701425282347553498 src/Editor.d 8a1d9d7890c7b7f2 -21 42 1701425282347553498 src/Editor-Monaco.cmj 39b2e3766d98d43a -21 42 1701425282347553498 src/Editor-Monaco.cmi 39b2e3766d98d43a -21 42 1701425282347553498 ../es6_global/src/Editor.bs.js 39b2e3766d98d43a -21 42 1701425282347553498 ../js/src/Editor.bs.js 39b2e3766d98d43a -42 67 1701425282372349539 src/Main-Monaco.cmj 310c78b32d6bfaa9 -42 67 1701425282372349539 src/Main-Monaco.cmi 310c78b32d6bfaa9 -42 67 1701425282372349539 ../es6_global/src/Main.bs.js 310c78b32d6bfaa9 -42 67 1701425282372349539 ../js/src/Main.bs.js 310c78b32d6bfaa9 +24 34 1701942268252368999 src/Editor.d 2b9e2a0f4bb583d8 +3 30 1701938830086002233 src/external/Window.ast 9734818094eebe2c +33 51 1701938830108846035 src/external/MonacoEditor.d df1ae6e3ad492683 +47 71 1701938830128497664 src/external/Window-Monaco.cmj 9be054b8dca3aee1 +0 25 1701938830081420360 src/Main.ast 71353078246625c8 +0 24 1701942268252368999 src/Editor.ast c6c5cb33c5f68401 +25 47 1701938830104896770 src/Main.d 8497062471059ed +30 47 1701938830104831773 src/external/Window.d bb1f588939e26b1f +47 71 1701938830128497664 src/external/Window-Monaco.cmi 9be054b8dca3aee1 +7 34 1701938830089465803 Monaco.cmi f40aeddade8ac3e5 +69 104 1701942268293335344 ../es6_global/src/Main.bs.js 19a34d0bb7e41e40 +47 71 1701938830128497664 ../js/src/external/Window.bs.js 9be054b8dca3aee1 +5 33 1701938830087313296 src/external/MonacoEditor.ast 18aee9080f099d38 +35 69 1701942268252368999 src/Editor-Monaco.cmi 73b687b35b4bde17 +35 69 1701942268252368999 ../es6_global/src/Editor.bs.js 73b687b35b4bde17 +35 69 1701942268252368999 ../js/src/Editor.bs.js 73b687b35b4bde17 +51 92 1701938830136060222 ../es6_global/src/external/MonacoEditor.bs.js 6f3a41df040774f1 +51 92 1701938830136060222 src/external/MonacoEditor-Monaco.cmi 6f3a41df040774f1 +51 92 1701938830136060222 ../js/src/external/MonacoEditor.bs.js 6f3a41df040774f1 +69 104 1701942268293335344 src/Main-Monaco.cmi 19a34d0bb7e41e40 +51 92 1701938830136060222 src/external/MonacoEditor-Monaco.cmj 6f3a41df040774f1 +47 71 1701938830128497664 ../es6_global/src/external/Window.bs.js 9be054b8dca3aee1 +35 69 1701942268252368999 src/Editor-Monaco.cmj 73b687b35b4bde17 +69 104 1701942268293335344 ../js/src/Main.bs.js 19a34d0bb7e41e40 +69 104 1701942268293335344 src/Main-Monaco.cmj 19a34d0bb7e41e40 +0 14 1701942319906849842 src/Editor.ast c6c5cb33c5f68401 +14 20 1701942319906849842 src/Editor.d 2b9e2a0f4bb583d8 +20 42 1701942319906849842 src/Editor-Monaco.cmj 73b687b35b4bde17 +20 42 1701942319906849842 src/Editor-Monaco.cmi 73b687b35b4bde17 +20 42 1701942319906849842 ../es6_global/src/Editor.bs.js 73b687b35b4bde17 +20 42 1701942319906849842 ../js/src/Editor.bs.js 73b687b35b4bde17 +0 14 1701942325356473555 src/Editor.ast c6c5cb33c5f68401 +14 20 1701942325356473555 src/Editor.d 2b9e2a0f4bb583d8 +20 43 1701942325356473555 src/Editor-Monaco.cmj 73b687b35b4bde17 +20 43 1701942325356473555 src/Editor-Monaco.cmi 73b687b35b4bde17 +20 43 1701942325356473555 ../es6_global/src/Editor.bs.js 73b687b35b4bde17 +20 43 1701942325356473555 ../js/src/Editor.bs.js 73b687b35b4bde17 +0 16 1701942327557764517 src/Editor.ast c6c5cb33c5f68401 +16 22 1701942327557764517 src/Editor.d 2b9e2a0f4bb583d8 +22 46 1701942327557764517 src/Editor-Monaco.cmj 73b687b35b4bde17 +22 46 1701942327557764517 src/Editor-Monaco.cmi 73b687b35b4bde17 +22 46 1701942327557764517 ../es6_global/src/Editor.bs.js 73b687b35b4bde17 +22 46 1701942327557764517 ../js/src/Editor.bs.js 73b687b35b4bde17 +0 16 1701942328150233703 src/Editor.ast c6c5cb33c5f68401 +16 23 1701942328150233703 src/Editor.d 2b9e2a0f4bb583d8 +23 45 1701942328150233703 src/Editor-Monaco.cmj 73b687b35b4bde17 +23 45 1701942328150233703 src/Editor-Monaco.cmi 73b687b35b4bde17 +23 45 1701942328150233703 ../es6_global/src/Editor.bs.js 73b687b35b4bde17 +23 45 1701942328150233703 ../js/src/Editor.bs.js 73b687b35b4bde17 diff --git a/demos/monaco/lib/bs/Monaco.cmi b/demos/monaco/lib/bs/Monaco.cmi index aacc56ee0..7d24039ca 100644 Binary files a/demos/monaco/lib/bs/Monaco.cmi and b/demos/monaco/lib/bs/Monaco.cmi differ diff --git a/demos/monaco/lib/bs/Monaco.cmt b/demos/monaco/lib/bs/Monaco.cmt index 5ddbe6180..c0bb73e94 100644 Binary files a/demos/monaco/lib/bs/Monaco.cmt and b/demos/monaco/lib/bs/Monaco.cmt differ diff --git a/demos/monaco/lib/bs/Monaco.mlmap b/demos/monaco/lib/bs/Monaco.mlmap index b9502e9dd..ce4052ba0 100644 --- a/demos/monaco/lib/bs/Monaco.mlmap +++ b/demos/monaco/lib/bs/Monaco.mlmap @@ -1,4 +1,5 @@ -\";4:.I`xk +#rU* * Main Editor +Window MonacoEditor diff --git a/demos/monaco/lib/bs/build.ninja b/demos/monaco/lib/bs/build.ninja index f434abd8e..e41719eb7 100644 --- a/demos/monaco/lib/bs/build.ninja +++ b/demos/monaco/lib/bs/build.ninja @@ -4,7 +4,7 @@ rule astj command = /Users/yang/Github/Meta3D/node_modules/rescript/darwin/bsc.exe -w -0-1-2-3-4-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40-41-42-43-44-45-46-47-48-49-50-51-52-53-54-55-56-57-58-59-60-61-62-K -warn-error +5+6 -bs-v 10.1.4 -bs-jsx 3 -bs-no-version-header -bs-super-errors -absname -bs-ast -o $out $i o src/Main.ast : astj ../../src/Main.res rule deps - command = /Users/yang/Github/Meta3D/node_modules/rescript/darwin/bsb_helper.exe -hash e38a7ab3e67acc0d6f1ee81b744e4774 -bs-ns Monaco $in + command = /Users/yang/Github/Meta3D/node_modules/rescript/darwin/bsb_helper.exe -hash 5d4346621252757fb3931357f9018c24 -bs-ns Monaco $in restat = 1 o src/Main.d : deps src/Main.ast rule mij @@ -15,6 +15,9 @@ o src/Main-Monaco.cmj src/Main-Monaco.cmi ../es6_global/src/Main.bs.js ../js/src o src/Editor.ast : astj ../../src/Editor.res o src/Editor.d : deps src/Editor.ast o src/Editor-Monaco.cmj src/Editor-Monaco.cmi ../es6_global/src/Editor.bs.js ../js/src/Editor.bs.js : mij src/Editor.ast +o src/external/Window.ast : astj ../../src/external/Window.res +o src/external/Window.d : deps src/external/Window.ast +o src/external/Window-Monaco.cmj src/external/Window-Monaco.cmi ../es6_global/src/external/Window.bs.js ../js/src/external/Window.bs.js : mij src/external/Window.ast o src/external/MonacoEditor.ast : astj ../../src/external/MonacoEditor.res o src/external/MonacoEditor.d : deps src/external/MonacoEditor.ast o src/external/MonacoEditor-Monaco.cmj src/external/MonacoEditor-Monaco.cmi ../es6_global/src/external/MonacoEditor.bs.js ../js/src/external/MonacoEditor.bs.js : mij src/external/MonacoEditor.ast diff --git a/demos/monaco/lib/bs/install.ninja b/demos/monaco/lib/bs/install.ninja index 1261dd0a4..6079d1efb 100644 --- a/demos/monaco/lib/bs/install.ninja +++ b/demos/monaco/lib/bs/install.ninja @@ -11,6 +11,10 @@ o Editor-Monaco.cmi : cp ../bs/src/Editor-Monaco.cmi o Editor-Monaco.cmj : cp ../bs/src/Editor-Monaco.cmj o Editor-Monaco.cmt : cp ../bs/src/Editor-Monaco.cmt o Editor.res : cp ../../src/Editor.res +o Window-Monaco.cmi : cp ../bs/src/external/Window-Monaco.cmi +o Window-Monaco.cmj : cp ../bs/src/external/Window-Monaco.cmj +o Window-Monaco.cmt : cp ../bs/src/external/Window-Monaco.cmt +o Window.res : cp ../../src/external/Window.res o MonacoEditor-Monaco.cmi : cp ../bs/src/external/MonacoEditor-Monaco.cmi o MonacoEditor-Monaco.cmj : cp ../bs/src/external/MonacoEditor-Monaco.cmj o MonacoEditor-Monaco.cmt : cp ../bs/src/external/MonacoEditor-Monaco.cmt @@ -18,4 +22,4 @@ o MonacoEditor.res : cp ../../src/external/MonacoEditor.res o Monaco.cmi : cp ../bs/Monaco.cmi o Monaco.cmj : cp ../bs/Monaco.cmj o Monaco.cmt : cp ../bs/Monaco.cmt -build install.stamp : touch Main-Monaco.cmi Main-Monaco.cmj Editor-Monaco.cmi Editor-Monaco.cmj MonacoEditor-Monaco.cmi MonacoEditor-Monaco.cmj Monaco.cmi Monaco.cmj +build install.stamp : touch Main-Monaco.cmi Main-Monaco.cmj Editor-Monaco.cmi Editor-Monaco.cmj Window-Monaco.cmi Window-Monaco.cmj MonacoEditor-Monaco.cmi MonacoEditor-Monaco.cmj Monaco.cmi Monaco.cmj diff --git a/demos/monaco/lib/bs/src/Editor-Monaco.cmi b/demos/monaco/lib/bs/src/Editor-Monaco.cmi index 9adf7e484..60ef52e6b 100644 Binary files a/demos/monaco/lib/bs/src/Editor-Monaco.cmi and b/demos/monaco/lib/bs/src/Editor-Monaco.cmi differ diff --git a/demos/monaco/lib/bs/src/Editor-Monaco.cmj b/demos/monaco/lib/bs/src/Editor-Monaco.cmj index 712ca6c27..a8220e6af 100644 Binary files a/demos/monaco/lib/bs/src/Editor-Monaco.cmj and b/demos/monaco/lib/bs/src/Editor-Monaco.cmj differ diff --git a/demos/monaco/lib/bs/src/Editor-Monaco.cmt b/demos/monaco/lib/bs/src/Editor-Monaco.cmt index 17a32b0ee..093699e6c 100644 Binary files a/demos/monaco/lib/bs/src/Editor-Monaco.cmt and b/demos/monaco/lib/bs/src/Editor-Monaco.cmt differ diff --git a/demos/monaco/lib/bs/src/Editor.ast b/demos/monaco/lib/bs/src/Editor.ast index b462110c3..b977c79ca 100644 Binary files a/demos/monaco/lib/bs/src/Editor.ast and b/demos/monaco/lib/bs/src/Editor.ast differ diff --git a/demos/monaco/lib/bs/src/Editor.d b/demos/monaco/lib/bs/src/Editor.d index 60829a0e3..b9931c243 100644 --- a/demos/monaco/lib/bs/src/Editor.d +++ b/demos/monaco/lib/bs/src/Editor.d @@ -1 +1 @@ -src/Editor-Monaco.cmj : Monaco.cmi src/external/MonacoEditor-Monaco.cmj src/external/MonacoEditor-Monaco.cmi +src/Editor-Monaco.cmj : Monaco.cmi src/external/MonacoEditor-Monaco.cmj src/external/MonacoEditor-Monaco.cmi src/external/Window-Monaco.cmj src/external/Window-Monaco.cmi diff --git a/demos/monaco/lib/bs/src/Main-Monaco.cmi b/demos/monaco/lib/bs/src/Main-Monaco.cmi index b6d40ee2e..a35ac8b99 100644 Binary files a/demos/monaco/lib/bs/src/Main-Monaco.cmi and b/demos/monaco/lib/bs/src/Main-Monaco.cmi differ diff --git a/demos/monaco/lib/bs/src/Main-Monaco.cmt b/demos/monaco/lib/bs/src/Main-Monaco.cmt index c0b729340..33a0d1439 100644 Binary files a/demos/monaco/lib/bs/src/Main-Monaco.cmt and b/demos/monaco/lib/bs/src/Main-Monaco.cmt differ diff --git a/demos/monaco/lib/bs/src/external/MonacoEditor-Monaco.cmt b/demos/monaco/lib/bs/src/external/MonacoEditor-Monaco.cmt index f0b73c67d..4e4334bfa 100644 Binary files a/demos/monaco/lib/bs/src/external/MonacoEditor-Monaco.cmt and b/demos/monaco/lib/bs/src/external/MonacoEditor-Monaco.cmt differ diff --git a/demos/monaco/lib/es6_global/src/Editor.bs.js b/demos/monaco/lib/es6_global/src/Editor.bs.js index 15ffcc2af..d6692a5d7 100644 --- a/demos/monaco/lib/es6_global/src/Editor.bs.js +++ b/demos/monaco/lib/es6_global/src/Editor.bs.js @@ -22,6 +22,21 @@ function onChange(param, newValue, $$event) { }), __x); } +function _wrapDTs(dts) { + return "declare module \"meta3d-type\"{\n " + dts + "\n }"; +} + +function _addMeta3dTypeLib(editor, monaco) { + var __x = window.fetch("static/meta3d-type/src/Index.ts"); + var __x$1 = Js_promise.then_((function (param) { + return Promise.resolve(param.text()); + }), __x); + return Js_promise.then_((function (dts) { + var dts$1 = _wrapDTs(dts); + return monaco.languages.typescript.typescriptDefaults.addExtraLib(dts$1); + }), __x$1); +} + function editorDidMount(param, editor, monaco) { var tsProxyRef = param[0]; console.log([ @@ -33,10 +48,13 @@ function editorDidMount(param, editor, monaco) { var __x$1 = Js_promise.then_((function (worker) { return worker(editor.getModel().uri); }), __x); - return Js_promise.then_((function (proxy) { - tsProxyRef.current = proxy; - return Promise.resolve(undefined); - }), __x$1); + var __x$2 = Js_promise.then_((function (proxy) { + tsProxyRef.current = proxy; + return Promise.resolve(undefined); + }), __x$1); + return Js_promise.then_((function (param) { + return _addMeta3dTypeLib(editor, monaco); + }), __x$2); } function editorWillUnmount(editor, monaco) { @@ -46,6 +64,8 @@ function editorWillUnmount(editor, monaco) { var Method = { onChange: onChange, + _wrapDTs: _wrapDTs, + _addMeta3dTypeLib: _addMeta3dTypeLib, editorDidMount: editorDidMount, editorWillUnmount: editorWillUnmount }; @@ -62,7 +82,7 @@ function Editor(Props) { editor ]; return React.createElement(ReactMonacoEditor, { - value: "let a = 1", + value: "import { api } from \"meta3d-type\"\n \nexport let getContribute = (api:api) => {\n return {\n inputName: \"RunStopButtonInput\",\n func: (meta3dState) => {\n let runState = api.action.getActionState(meta3dState, \"Run\")\n\n if (api.nullable.isNullable(runState)) {\n return Promise.resolve(false)\n }\n\n runState = api.nullable.getExn(runState)\n\n return Promise.resolve(runState.isRun)\n }\n }\n}\n\n ", width: "800", height: "600", language: "typescript", diff --git a/demos/monaco/lib/es6_global/src/external/Window.bs.js b/demos/monaco/lib/es6_global/src/external/Window.bs.js new file mode 100644 index 000000000..ae1b9f17e --- /dev/null +++ b/demos/monaco/lib/es6_global/src/external/Window.bs.js @@ -0,0 +1 @@ +/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/demos/monaco/lib/js/src/Editor.bs.js b/demos/monaco/lib/js/src/Editor.bs.js index e88d61d9e..d55972d7e 100644 --- a/demos/monaco/lib/js/src/Editor.bs.js +++ b/demos/monaco/lib/js/src/Editor.bs.js @@ -22,6 +22,21 @@ function onChange(param, newValue, $$event) { }), __x); } +function _wrapDTs(dts) { + return "declare module \"meta3d-type\"{\n " + dts + "\n }"; +} + +function _addMeta3dTypeLib(editor, monaco) { + var __x = window.fetch("static/meta3d-type/src/Index.ts"); + var __x$1 = Js_promise.then_((function (param) { + return Promise.resolve(param.text()); + }), __x); + return Js_promise.then_((function (dts) { + var dts$1 = _wrapDTs(dts); + return monaco.languages.typescript.typescriptDefaults.addExtraLib(dts$1); + }), __x$1); +} + function editorDidMount(param, editor, monaco) { var tsProxyRef = param[0]; console.log([ @@ -33,10 +48,13 @@ function editorDidMount(param, editor, monaco) { var __x$1 = Js_promise.then_((function (worker) { return worker(editor.getModel().uri); }), __x); - return Js_promise.then_((function (proxy) { - tsProxyRef.current = proxy; - return Promise.resolve(undefined); - }), __x$1); + var __x$2 = Js_promise.then_((function (proxy) { + tsProxyRef.current = proxy; + return Promise.resolve(undefined); + }), __x$1); + return Js_promise.then_((function (param) { + return _addMeta3dTypeLib(editor, monaco); + }), __x$2); } function editorWillUnmount(editor, monaco) { @@ -46,6 +64,8 @@ function editorWillUnmount(editor, monaco) { var Method = { onChange: onChange, + _wrapDTs: _wrapDTs, + _addMeta3dTypeLib: _addMeta3dTypeLib, editorDidMount: editorDidMount, editorWillUnmount: editorWillUnmount }; @@ -62,7 +82,7 @@ function Editor(Props) { editor ]; return React.createElement(ReactMonacoEditor, { - value: "let a = 1", + value: "import { api } from \"meta3d-type\"\n \nexport let getContribute = (api:api) => {\n return {\n inputName: \"RunStopButtonInput\",\n func: (meta3dState) => {\n let runState = api.action.getActionState(meta3dState, \"Run\")\n\n if (api.nullable.isNullable(runState)) {\n return Promise.resolve(false)\n }\n\n runState = api.nullable.getExn(runState)\n\n return Promise.resolve(runState.isRun)\n }\n }\n}\n\n ", width: "800", height: "600", language: "typescript", diff --git a/demos/monaco/lib/js/src/external/Window.bs.js b/demos/monaco/lib/js/src/external/Window.bs.js new file mode 100644 index 000000000..ae1b9f17e --- /dev/null +++ b/demos/monaco/lib/js/src/external/Window.bs.js @@ -0,0 +1 @@ +/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/demos/monaco/src/Editor.res b/demos/monaco/src/Editor.res index db2d72bb9..c143020f0 100644 --- a/demos/monaco/src/Editor.res +++ b/demos/monaco/src/Editor.res @@ -29,6 +29,88 @@ module Method = { } } + /* ! refer to: +https://github.com/microsoft/monaco-editor/issues/1839 + */ + let _wrapDTs = dts => { + //TODO implement + Obj.magic(1) + {j`declare module "meta3d-type"{ + ${dts} + }`} + } + + /* ! refer to: +https://copyprogramming.com/howto/how-to-use-addextralib-in-monaco-with-an-external-type-definition + */ + let _addMeta3dTypeLib = (editor, monaco) => { + // let path = "node_modules/meta3d-type/src/Index.ts" + let path = "static/meta3d-type/src/Index.ts" + // let url = "meta3d-type" + // let url = "node_modules/@types/meta3d-type/index.d.ts" + // let url = "file:///node_modules/@types/meta3d-type/index.d.ts" + // let url = "file:///node_modules/meta3d-type/index.d.ts" + // let url = "meta3d-type" + // let url = "node_modules/meta3d-type/index.d.ts" + // let url = "" + + // let path = %raw("require('node_modules/meta3d-type/src/Index.ts')") + // let path = %raw("require('/Users/yang/Github/Meta3D/demos/monaco/external/dts/meta3d-type/src/Index.ts')") + + Window.fetchDTs(path) + ->Js.Promise.then_(({text}: Window.fetchResult) => { + text(.)->Js.Promise.resolve + }, _) + ->Js.Promise.then_( + dts => { + // Js.log(dts) + + let dts = dts->_wrapDTs + + monaco["languages"]["typescript"]["typescriptDefaults"]["addExtraLib"](. dts) + }, + // monaco["languages"]["typescript"]["typescriptDefaults"]["addExtraLib"](. dts, url) + + // monaco["languages"]["typescript"]["typescriptDefaults"]["setCompilerOptions"](. { + // "target": monaco["languages"]["typescript"]["ScriptTarget"]["ES6"], + // // "module": monaco["languages"]["typescript"]["ModuleKind"]["ES6"], + // "module": monaco["languages"]["typescript"]["ModuleKind"]["CommonJs"], + // "allowNonTsExtensions": true, + // "allowSyntheticDefaultImports": true, + // "moduleResolution": monaco["languages"]["typescript"]["ModuleResolutionKind"]["NodeJs"], + // // "noLib": true, + // // "typeRoots": ["node_modules/@types"], + // }) + + // editor["setModel"](. + // monaco["editor"]["createModel"](. dts, "typescript", monaco["Uri"]["parse"](. url)), + // ) + + // monaco["languages"]["typescript"]["javascriptDefaults"]["setCompilerOptions"](. { + // "target": monaco["languages"]["typescript"]["ScriptTarget"]["ES6"], + // "module": monaco["languages"]["typescript"]["ModuleKind"]["ES6"], + // "allowNonTsExtensions": true, + // "allowSyntheticDefaultImports": true, // for use of import React from 'react' ranther than import * as React from 'react' + // "moduleResolution": monaco["languages"]["typescript"]["ModuleResolutionKind"]["NodeJs"], + // // "noEmit": true, + // // "types": ["node_modules/@types"], + // "include": ["node_modules/@types"], + // }) + + // for use of import React from 'react' ranther than import * as React from 'react' + + // "noEmit": true, + // "types": ["node_modules/@types"], + + // monaco["languages"]["typescript"]["typescriptDefaults"]["setDiagnosticsOptions"](. { + // "noSemanticValidation": true, + // "noSyntaxValidation": true, + // }) + + _, + ) + } + let editorDidMount = ( ( tsProxyRef: React.ref>, @@ -50,20 +132,19 @@ module Method = { // var editor = monaco.editor.create(...etc...); // var tsProxy: ts.IMonacoTypeScriptServiceProxy; - monaco["languages"]["typescript"]["getTypeScriptWorker"](.) - ->Js.Promise.then_(worker => { - worker(. editor["getModel"](.)["uri"]) - }, _) - ->Js.Promise.then_( - proxy => { - tsProxyRef.current = proxy + // _addMeta3dTypeLib(monaco)->Js.Promise.then_(_ => { + // monaco["languages"]["typescript"]["getTypeScriptWorker"](.) + // }, _) - Js.Promise.resolve() - }, - // setTsProxy(_ => proxy->Some) + monaco["languages"]["typescript"]["getTypeScriptWorker"](.)->Js.Promise.then_(worker => { + worker(. editor["getModel"](.)["uri"]) + }, _)->Js.Promise.then_(proxy => { + tsProxyRef.current = proxy - _, - ) + Js.Promise.resolve() + }, _)->Js.Promise.then_(_ => { + _addMeta3dTypeLib(editor, monaco) + }, _) } let editorWillUnmount = (editor, monaco) => { @@ -75,7 +156,28 @@ module Method = { @react.component let make = () => { - let code = {j`let a = 1`} + let code = { + j`import { api } from "meta3d-type" + +export let getContribute = (api:api) => { + return { + inputName: "RunStopButtonInput", + func: (meta3dState) => { + let runState = api.action.getActionState(meta3dState, "Run") + + if (api.nullable.isNullable(runState)) { + return Promise.resolve(false) + } + + runState = api.nullable.getExn(runState) + + return Promise.resolve(runState.isRun) + } + } +} + + ` + } // let (tsProxy, setTsProxy) = React.useState(() => None) // let (editor, setEditor) = React.useState(() => None) diff --git a/demos/monaco/src/external/Window.res b/demos/monaco/src/external/Window.res new file mode 100755 index 000000000..2c820fad8 --- /dev/null +++ b/demos/monaco/src/external/Window.res @@ -0,0 +1,4 @@ +type fetchResult = {text: (. unit) => string} + +@val @scope("window") +external fetchDTs: string => Js.Promise.t = "fetch" diff --git a/demos/monaco/static/meta3d-type/src/Index.ts b/demos/monaco/static/meta3d-type/src/Index.ts new file mode 100755 index 000000000..b17969cd7 --- /dev/null +++ b/demos/monaco/static/meta3d-type/src/Index.ts @@ -0,0 +1,100 @@ +import { nullable } from "meta3d-commonlib-ts/src/nullable" +import { contributeType } from "./contribute/ContributeType" +import type { List, Map } from "immutable" + +export type extensionName = string + +export type contributeName = string + +export type extensionProtocolName = string + +export type contributeProtocolName = string + +export type extensionService = any + +export type extensionState = any + +export type packageProtocolName = string + +export type getContributeFuncResult = any + +export abstract class state { protected opaque!: any }; /* simulate opaque types */ + +// tslint:disable-next-line:interface-over-type-literal +export type nullableAPI = { + getExn: (data: nullable) => data; + isNullable: (data: nullable) => boolean; + return: (data: data) => nullable; + getWithDefault: (data: nullable, defaultValue: data) => data; + map: (func: (data: data1) => data2, data: nullable) => nullable; + bind: (func: (data: data1) => nullable, data: nullable) => nullable; + getEmpty: () => nullable; +}; + +// tslint:disable-next-line:interface-over-type-literal +export type immutableAPI = { + createList: () => List; + createListOfData: (data: Array) => List; + createMap: () => Map + createMapOfData: (data: Record) => Map +}; + +// tslint:disable-next-line:interface-over-type-literal +export type actionAPI = { getActionState: (state: state, actionName: string) => nullable; setActionState: (state: state, actionName: string, actionState: actionState) => state }; + +// tslint:disable-next-line:interface-over-type-literal +export type uiControlAPI = { getUIControlState: (state: state, uiControlName: string) => uiControlState; setUIControlState: (state: state, uiControlName: string, uiControlState: uiControlState) => state }; + +// tslint:disable-next-line:interface-over-type-literal +export type api = { + registerExtension(state: state, extensionProtocolName: extensionProtocolName, getExtensionServiceFunc: getExtensionServiceFunc, getLifeFunc: getLifeFunc, extensionState: extensionState): state, + getExtensionService(state: state, extensionProtocolName: extensionProtocolName): extensionService, + getExtensionState(state: state, extensionProtocolName: extensionProtocolName): extensionState, + setExtensionState(state: state, extensionProtocolName: extensionProtocolName, extensionState: extensionState): state + getPackageService(state: state, packageProtocolName: packageProtocolName): nullable, + registerContribute(state: state, contributeProtocolName: contributeProtocolName, getContributeFunc: getContributeFunc): state, + getContribute(state: state, contributeProtocolName: contributeProtocolName): contribute, + getAllContributesByType(state: state, contributeType: contributeType): Array, + getPackage(state: state, packageProtocolName: packageProtocolName): nullable + restore(currentState: state, targetState: state): state, + deepCopy(state: state): state, + nullable: nullableAPI; + immutable: immutableAPI; + action: actionAPI; + uiControl: uiControlAPI +}; + +// tslint:disable-next-line:interface-over-type-literal +export type getExtensionService = (_1: api) => extensionService; + +// tslint:disable-next-line:interface-over-type-literal +export type createExtensionState = (_1: state, _2: api) => extensionState; + +export type getContribute = (_1: api) => contribute; + + +export type extensionLifeEventHandler = (state: state, extensionService: extensionService) => state; + +type extensionLifeHandlerData = any + +export type extensionLifeAsyncEventHandler = (state: state, extensionService: extensionService, extensionLifeHandlerData: extensionLifeHandlerData) => Promise; + +export type canvasData = { + width: number, + height: number +} + +export type configData = any + +export type startConfigData = [canvasData, configData] + +export type extensionLife = { + onRegister?: extensionLifeEventHandler, + onRestore?: (currentState: state, targetState: state) => state, + onDeepCopy?: (state: state) => state, + onStart?: (state: state, extensionService: extensionService, configData: startConfigData) => void, + onInit?: extensionLifeAsyncEventHandler, + onUpdate?: extensionLifeAsyncEventHandler, +} + +export type getExtensionLife = (_1: api, extensionProtocolName: extensionProtocolName) => extensionLife diff --git a/demos/monaco/static/meta3d-type/src/contribute/ContributeType.ts b/demos/monaco/static/meta3d-type/src/contribute/ContributeType.ts new file mode 100755 index 000000000..589ecf9ef --- /dev/null +++ b/demos/monaco/static/meta3d-type/src/contribute/ContributeType.ts @@ -0,0 +1,11 @@ +export enum contributeType { + UIControl = 0, + Skin, + Element, + Action, + Component, + GameObject, + Pipeline, + Input, + Unknown +} diff --git a/demos/monaco/webpack.config.devserver.js b/demos/monaco/webpack.config.devserver.js index 7bcb272ca..db859023f 100755 --- a/demos/monaco/webpack.config.devserver.js +++ b/demos/monaco/webpack.config.devserver.js @@ -115,6 +115,14 @@ module.exports = { template: './index.html', filename: 'index.html' }), + new CopyWebpackPlugin({ + patterns: [ + { + from: 'static/meta3d-type', + to: 'static/meta3d-type' + }, + ], + }), new MonacoWebpackPlugin({ // available options are documented at https://github.com/microsoft/monaco-editor/blob/main/webpack-plugin/README.md#options languages: ['typescript'] diff --git a/doc/1.0.0-beta1.org b/doc/1.0.0-beta1.org index ae9191270..3b72bbcc8 100755 --- a/doc/1.0.0-beta1.org +++ b/doc/1.0.0-beta1.org @@ -171,7 +171,7 @@ export default function getModelsInOrder(currentModel, monaco) { -** TODO monaco demo2 by give more type infer(e.g. action state type, editor whole package) +** DONE monaco demo2 by give more type infer(e.g. action state type, editor whole package)