From 793c8ad273d0c44ba4e73202e58144a5119a0f65 Mon Sep 17 00:00:00 2001 From: yyc-git <395976266@qq.com> Date: Thu, 7 Dec 2023 17:46:11 +0800 Subject: [PATCH] example(demos): monaco: give meta3d-type type infer --- demos/monaco/lib/bs/.bsbuild | 5 +- demos/monaco/lib/bs/.bsdeps | 4 +- demos/monaco/lib/bs/.compiler.log | 4 +- demos/monaco/lib/bs/.ninja_log | 78 +++++++---- demos/monaco/lib/bs/Monaco.cmi | Bin 450 -> 506 bytes demos/monaco/lib/bs/Monaco.cmt | Bin 2488 -> 2675 bytes demos/monaco/lib/bs/Monaco.mlmap | 3 +- demos/monaco/lib/bs/build.ninja | 5 +- demos/monaco/lib/bs/install.ninja | 6 +- demos/monaco/lib/bs/src/Editor-Monaco.cmi | Bin 1657 -> 2188 bytes demos/monaco/lib/bs/src/Editor-Monaco.cmj | Bin 127 -> 137 bytes demos/monaco/lib/bs/src/Editor-Monaco.cmt | Bin 27133 -> 34984 bytes demos/monaco/lib/bs/src/Editor.ast | Bin 7952 -> 11424 bytes demos/monaco/lib/bs/src/Editor.d | 2 +- demos/monaco/lib/bs/src/Main-Monaco.cmi | Bin 669 -> 703 bytes demos/monaco/lib/bs/src/Main-Monaco.cmt | Bin 6451 -> 6521 bytes .../bs/src/external/MonacoEditor-Monaco.cmt | Bin 13824 -> 13824 bytes demos/monaco/lib/es6_global/src/Editor.bs.js | 30 +++- .../lib/es6_global/src/external/Window.bs.js | 1 + demos/monaco/lib/js/src/Editor.bs.js | 30 +++- demos/monaco/lib/js/src/external/Window.bs.js | 1 + demos/monaco/src/Editor.res | 128 ++++++++++++++++-- demos/monaco/src/external/Window.res | 4 + demos/monaco/static/meta3d-type/src/Index.ts | 100 ++++++++++++++ .../src/contribute/ContributeType.ts | 11 ++ demos/monaco/webpack.config.devserver.js | 8 ++ doc/1.0.0-beta1.org | 2 +- 27 files changed, 359 insertions(+), 63 deletions(-) create mode 100644 demos/monaco/lib/es6_global/src/external/Window.bs.js create mode 100644 demos/monaco/lib/js/src/external/Window.bs.js create mode 100755 demos/monaco/src/external/Window.res create mode 100755 demos/monaco/static/meta3d-type/src/Index.ts create mode 100755 demos/monaco/static/meta3d-type/src/contribute/ContributeType.ts 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 aacc56ee0445343f27f5ae3debfa67dee73d73e9..7d24039cae3d7bc6ee7e02d61a0de6603fdd01e6 100644 GIT binary patch delta 174 zcmX@a{EJ!7IWafK(9+V<)4<56W$Lnh3=9mrfmjoWrvP!=0yW?Kyu{@E1)Dc8GQXRs zXTbP=V!WEh2et6byp;TMhYgDzCv0%gh46GCY8@R|L><5yK2B`Yc9wH+fSUXbXrdMn nPX*$d1u&y07@TM5_~6QE`@zusY!cLIWafK(9+V<)4<56W$Lnh3=9mrfmjoWrvP!=0yW?Kyu{@E1)Dc8GQXRs zXTbP=V!WEh2et6byp;TMhYgDzCv0%gh46GCY8@R|L><5yK2B`Yc9wH+fSUXbXrdMn zPX*$d1u&y07@TM5_~6QE`@zusY!%+~D z7*klKV6Ire!oiwikyW)WtQ-@qc~z{+Ut00KZ7h*+3`{$yoz*uctY0u-_X@>t9_ zu;>BVjv%(i1{QfB+Xcjy+`u9LWV<^!Ky9;ORbjMY#fE^^39!g)U=aqY_nIuovBpH> z0LSHr3EO_Mq!v6pdwVL(!QQNl*b!LcM~)=B2!{m=l)Q>37(~U+uW^g+3ij=p%-Hz! k(XIsxSQ#^blB|r?*dl-h=>7#P6W@!9vqU;LV5)Eg01JAhHUIzs delta 408 zcmew?vO`$UIWafK(9+V<)4<56W$Lnh3=9lYfLH;DOMp0YftqiAUSe|og3TKkncq&- zGhlo-FabulE2G{9Rz@WURz@8lk41F@iwuyh4`PdLVBrO_jT{^}7#J)VSQ*uEA&1Q@yeyI% zSOkE|O(!4cSYv)GV_V?cbyv2DuQo8?TNSkiYJwRnBX$JR=-}Wm`81>CUz}?3F&Tj`uQ3OqLaxoE0nI0!w49 zZv2@Zm9q1yn*=sk<_B)TfDhP=Qq1K?YMx;f6)pC_ zq&a9wR?!lor8108l;fyoy&T)rQ$xUx-mo zXolq?#)mwDKPXa5@gGZ>ZzmfLhz52ACMjxt%;)v@t5pN8{l#)R8GFo6}_Lhdcqw>9WDm5Ime1(=@ zD)Q(Wnomz9x6tSHi@Z?g_g3;@Eim6VaY>sL z6_<#*P3p_0*2g4C`X%Y7XsxDM z+439Mdf!%o59)U@mR;|QVCrO;g1P^9Eicd{oB(v{;~hm4W?o(RBGHU48ne?)4Lww< z@mWhnMrMx2OB!ItoHb(3#aU#NI%vdsE&rbo9EDZ^S{qd~Yv{XiZR8&WhXDYa@P8;3 z%L!R7AOlrErYl<1+c&ePlsNL1 K%84;_1pWrEo$QtX delta 716 zcmeAX{K=!>oS2(qXlZHbX<%g3GIiNL1_qW^1_p+&3=GVLKL#P`wV)`!qLSgi!vqH=)~^p47@omd&*7{WlVw;W>oXt*q@fz1mI^iq z$%MyneNW)5r%=;hZaC<$fyEbM)hjS30K$2_VKa*l&;}MyxTZI7)?1)DP3+z+rM zFnBStg)_26K%FF@nVXoM8c>v9Pz-X)MCI(%N|3$Ff%Z<=;Hy?#Qk0pO?f|#;8k}_< zIziHRgmlFF!(aEWiztnA7GgaWflYd1xbI5tAXjy4TygM@%aS{bRnrn7m}1F81$^r Y`{wp+t7_TglM`mlFZ;0h9osxc08iWuk^lez diff --git a/demos/monaco/lib/bs/src/Editor-Monaco.cmj b/demos/monaco/lib/bs/src/Editor-Monaco.cmj index 712ca6c272883353c86627dee72c4bfc88054975..a8220e6afd04905e5383f20f2f1737f3a48f4ce7 100644 GIT binary patch delta 81 zcmb>LWc2zcSg=7QH!(YP!h!{k Y4h{|*)O=G*GV)U3nMF0Q* diff --git a/demos/monaco/lib/bs/src/Editor-Monaco.cmt b/demos/monaco/lib/bs/src/Editor-Monaco.cmt index 17a32b0eef89b4cba6a769b82884cbdbc520682e..093699e6c0ac3edf4fd67a0b246d2cb3ee81cd1a 100644 GIT binary patch literal 34984 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 RAL4E2=T4C0$R9`v{XcknBy9iy diff --git a/demos/monaco/lib/bs/src/Editor.ast b/demos/monaco/lib/bs/src/Editor.ast index b462110c377d6030d5b4cc9a4fba4a548ad56c8c..b977c79ca1f96f4fe13882fae0e062141c6763a7 100644 GIT binary patch literal 11424 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 literal 7952 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 OoVLpPb8PE#as&Xa_L^P* diff --git a/demos/monaco/lib/bs/src/external/MonacoEditor-Monaco.cmt b/demos/monaco/lib/bs/src/external/MonacoEditor-Monaco.cmt index f0b73c67de80e7819002a9b8244ada3b6e2653f4..4e4334bfaa73697a58b462d7e2ea7e036ff81120 100644 GIT binary patch delta 31 mcmZq3X~@~I)0i*S!obwh#4sh*EHy3Fb~2xd)aHlA@=O4-mkMS8 delta 31 mcmZq3X~@~I)0i(g(IUk-%{)2L+{h@&b~2xd)aHlA@=O4@RSJjz 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)