From 45d0bddf3fb18ad4fdb2b8bb97ef2b69ab598a36 Mon Sep 17 00:00:00 2001 From: seveibar Date: Tue, 8 Oct 2024 17:13:59 -0700 Subject: [PATCH 1/5] wip safe compile dts --- bun.lockb | Bin 93428 -> 94238 bytes lib/code-runner/safe-compile-dts.ts | 66 ++++++++++++++++++++++++++++ package.json | 2 + 3 files changed, 68 insertions(+) create mode 100644 lib/code-runner/safe-compile-dts.ts diff --git a/bun.lockb b/bun.lockb index 7873dd58e3a9a9d429016457b3f62917e85d28e4..dc2a0a29216242f5129cf953360f37ba92241741 100755 GIT binary patch delta 15338 zcmeHOd0bRSw(e?Z~jacPJeHN-I*0Z~B_6-*@YNjurh7#FPQ zbr;;hB@&~?7~_(0PolIkl=iE)45xeLvkU!3=TZ)V>6XX@wIU!AH`r?yj7 z_hQ|<-|LoN(9I1GIg`H4ZBB9hcDKyPzdYUW`cNV4&a$GP3;O3dc`yC5Q{~Lrg-k=? zZdqoa$Lad6Ou=XmZY^ ztfE{^dReVkpRPKMrUexqlRG|dREfqzk=ue@ke=u$8y`KcFq;bBaMEZzk$xWR2Hwz2 zE?>@5m{+O6S)*}9st)y2=?PiIW5UMfmYjk%)p7~x)U<-U@p%)nii(aRo#Z8GCzZPe zZUx?_q`!wkRLfK_*_+%_*6$6bt_2~HxD90dE45W4!3zm%!BpY*NF`njt7M=KOa=ZM zL$-FPl^XK5b_^H}YOo)e>Z!oM`+;YGeKe&S+pyMhMiCO)AY*|t3B5eziWh^SVk@2$ zW2Et%FnN4QPT|PhSxBb_PAVKXj;8T53~~VEa4hqCD=<}bM=$qiR8j7$x#NqAE<>h>$-riXRnJ)snWkh3FLMYi z?SMAZz`B6ZCEGo;ow!!vV+wCmxEzd@+ujGGrM4*wk5st7!rc@OR#>kvjSZE%-cD+5 zsjWti*bXWDvBE3CG;wnko~H0Ph5w*%PT}~X!f{!eoH2!C^G0S(njR{9Qjx-5UF8Ke z1~PeOUQw8|wk{*RIeE~e+^msUsT0&?n>D_qAgefMO!lO#oZKQPg~{X9A51Q~5=;}3 zla)gbr5UJ|(_ac#JSsOUrx@uqkZJsl5wiX~q|ustQ{mUZEy;s|Bjpz66crVhOvu%Y zr3|FsK)N*JkZHoQqGWk9n0j&tOnPgS^ght@hJ3&vk6d=NJhcH}(zC?K=>cHOf=vr9 zrNxvE1)6iC!XaStpadAC7QbFN5;2V?-6YR_BG?`2UBOtlw%6k1hWSG#{qb4j3-eIK z9Wpg^dc17!fWm<=Od~ln0pm{<)gZwGtOrwpg^9A^848zx$?!zv`+}P#$p-Frlgq7x zOyw>?CcPRk$?uuvii^SIv;!@2!xO-?sGXBB{^Vq#NT8lH7_q9s8^KiI5}1bWBv?;! zirmwEkfok?mn$3vrV$D3AusxBFg0`~m>RSQOjD@^(=Ia`<*^KHZ3cipq|*k)S&cqc_=49rXK$Qnetyz^rmLWJ^LC=6&BN#l0%|K&^FJ1i7-g)!<*7Yru9oQGV&efvz zVLa5$%m(v3Hw$~0SK@aouXD2q9kA{qQG+v|m>kFR+%4Kx4!p|U%m(s0cZ)E~LC$vK zQSK&ok>|Cxuo1ixzty}BzklT+9u{WgdHA*QN)L;$9Y-)6#m1x(cX^0j%E#|qUa7Ze z9h>oby;*n(Cvb15IY15dwy_9zkwOKV@dj6uFcfDpR-jGG8{AF8tVXHY(ExN-< zdy#MQOcdI}3#fC>QpuMU$&toLSO*E7PhCaHJ3PvJ#H4klT z7K*Wa;kxKLj0m4YqCvtG2AH&t9=skZ1F*F;wn4WMQaZoxo~Zi`u}FShpC|-lZPN^3 zT0Bg`2uRc`^wERbkQZdpeUHU8lotdg>SD0$hDfnlh{n{Nv1=7eCEKP1nW6U>LO&ie|TZ>q#q*vb<3lCA# zCP^`>OidCVAV#BsJ;B!`M24z6#6%C1ZVseWX>FdOm^6Yk{=r@4rJ$A8<|Ih8lBCro zY=K1fFgMtuZb72?h9>6px#yZ#7e+#oXNA_n^2WSsH^Ey6maMMJMOtvq&_*CEXkA(wTe9Y?zMPTC~XqUS%|Eiw(TqXlCE>5R*k)63z2XX5C>lEP-ElOB4p6)9KQ9 zQHz#A8b#?khggl~C5mZ>#`3B-GppovaTZ+*G@_f7+{?)G=J_V8vp_8y1*x$Q zY%{M*wrIUlcxZ}QJ3NKwr|94AL-Jzcutzd43PGP>4asD9LWBtAdot!%`BptS1jmH48&~%8myM zaVEBySEgEYi_rZcd{b(o?lxkBrC6_C8cjbbwg54!6stvSfD|*JI~h`}6fs%vYs4fy ztxq3bpJvu=??b*7=8-7erWo1;C&Bg}jzf@K)PXi%-RqEWw7Dj-Djw3?q7AU}{N6Y$ zt@7w%EU*GU=XJd;f-_2?KeRIhn1oD7G*i+6s+$j~x3tsTKnynJ)vb-o;GuoZ!rK{5 z7AiZ-EBjisZJy`#ea+hR=Xt2rER@4P$hcIYa1j!1>KLYIlh(f;uir5FH-$fUK|B2{oP0s0x`*(NI)Pa z*ZL5k^eqZkEBq0dLQ^LFkEK+ZsoXYzc)OBLOnRTFyTMK+VV9!Nl&RonN;)ygy8$w= zN0Ik}DeMI(f1kqp!Q?TA6!|ci*1|D>!ZCF>uqVg{zCTL%9MWr zAj3ZcBwqw5G-a}P86du*a6NegC0ql@z)gSxG0C?9GI$4|Kuq#oz!CUOk?(`a&O?Ag zQzko4q*R$nW@H4RlpSM}YCKR1=9`3Qd_@G)_tXN4Od6SYU@5kfLx8#jea4e~OSoPbK5`n6lFF zL)=T@-XtIpQ~ADN8i5QY|9K^!n4GDhr;<)g zJ?y2(#MGdF{7_cLpH62Qk|6+9{C{>RtMflfsdzM)LQ`%H`CoJxYfAqahIMG*?;Xa} z5la6%hjQuPJ&eh~41lKOUvns9{41yyg#Q<&HBJ@Nj`#0F8H4ceL;2r_G8X0k>!G|g zX=u42`JLN?-akFu@#q^jRvk88ipZMsn^&jhQ@&_EDm|4&>CgL4XRYcdM|ST&=waVw zKD&C=OtJPXtsC}=hhwWf=lJf!eR;ra?{r~l$<1F5I<9|d^pq8oJpY`g>vVVdAFmgD z*W&!jabMRQ{Cxk9dGB00ed_48Wb3Oh-Pu2Jfwkd+)1*-+jvTRWoKoCzB6dEedE)v6 zJfEMOmC4V}cHyzJtxV+8XJ_&mb6of(NQ-#XoJ<}!*M-lYV`WQtEu<@udd{`7WxQ-| zCSO?Q!heCZf~S;a^4{}Y_?j{+tKbcgeuFf4o|UcQ74tIrdhWt?+{)JQ0X&nx^nnZC z25B82!Wgqf= zkPbuYBwF#e{fS~GpR&+}pN6!Rw_BLWgBQ8*w-;LR7xj~n&O(Y^WMw<}^hN03V)PHv zP9C)w{ab?mEw-{7{R;AK|) z|5n8^^lv%(x7^AO@Bz!wzZK{oq(hvoK>y0ozZF(?gjYlQ1X7!FD?7%s%F(|H^bgWk z+`R(*TZ#TvSlMyD57J>somN`eNj`BU`nL-GgLI0wTZR6uM*mh>*=c@qRVF*bLsn)0NQ2i~@%PP&_2^e6`c-Mg-+l*FqF+_$7o@*(R)v0TK)|2ysE~r=t2zG8WZgP(OD_lAN<5vqZgt=DnwIbN?C6qPls!3b+(?agJN(b4oNU{E zg|DY47S~`MJY4fDFW9wC$KvtYA?r=}a02Ny&(13>$b~{#&#kTYEREz7 zKFn@@rGZWhJPP08AKx^WK6xq!N~#CQUOfFEs4_i6s_&9l5vOc=>r(UcKmbtS3MxMk+w>d-QVZ3Ah6np?d+?4}1aq88`qO1Za-wj}ss9Ww-rw>kwPd zci$eWTY*?P54aQP@-|}c0Q8tVn)kVrSo#`bQ-EL~1PBGX0?z?qKse9|=nT*+p%q96 z=>4-h5C{YT^ul}?I!Az`z=yyFpc0q?bOVwAGmrxe1BR2Iy@Cj4TN4Wy0sI$*}y%Xs-Yk z0}Fxqzz17Pe%YZdbwE_BKm;!U76D6u<-k&4nZo7ZmB4y{+-NOO0Z`f+U^TExkySn7 z)4;dDVc<)E9N`FXh$foGnI?)nV=k}>pstgbQ~_EAo55uO=@5SeQ2thcbantA1G|82 z3RBv4fY#bh;1flrw7tL{n&{n#(844Ingrtg3hx6S1ZX*Z0UQ9x7?q(simPRs=21`8 zhEwOLp)~l%0P4Bgxvx>b<|}}DrS?WGaI}fyDa4Nhs_r+4pH%WsC`>j8lt&db9WkrmZjv%*MNH93h-CpB5(ny1?b568T=D)8Mp-00gk{`;5tBlavQh> z+yH1zH2~y0Cm!Jk;Z|EFar16N4aQ-Ubp1S@kuTF6EAz* z&aYf49bLRjf6}wdeUy$2H&E#+{?%h2zpcpkhV?Il{c5lGomHi0!%gAQ#_&kZG0vWh zHmY|32amY+^ugS$Ur{~=wHvUjILP;$)EtzI4w^bOXn2gDBVYc+n;H0yC($gCUwx9{ zpN;|7qni2wIdAlz89YsDMpSq_4i6pw?5Q_v%L|_Ru&(^wr(K&D>*PCTQkDVFh&P}5 z#Htr{1GPU5A8_Nw1XzeiLt=1_IY~#V?QOT0$Blc7Ek#aLcohC=&d*O`K7Q(j;i{Hr zo;>YwI!4OJRAH}~Kau&c4fAKRXl9tdhh=DWg4l|&P~n&$Ust;%rZA{15r=~O)XTw{ z1HR1|cKb-J-O^NX4ix&Sw}sc2JSmJW_e*i4(MD4uHOl>9+v9O;%Y^o+H7FVz9!29A z*HSt!ZNEKuW6b`SK3Jn=?U3Sy!RjqmJD}Fl5L-bUIpmA|%U#QLTJ{1`+8|}J*i{RK zc@SM7Mm2A^8k(ke)Us(vq2c~sd<6=zzf*Y(D#r+@*O&v^*LK(|wBLzlVeTm>NZdrW zpP>N%Su3LdKCD`NNP6n^=In_blagDw#=($5_R=~r0=AH zsSWZSX^pLE!%NkJLZg6{JhtXqKtVrZ~gH6KVFGU@_4N%~EfD4?4f6;@!K` zeeDYQVj&b_)obDbulHk@rk=Lh70Ny3F1!A8GU~ZU#~#^pJ`;DNDBCW6=fsxyEom!n zEN7liTX%I%Ev;8_B~0ULaaJ?v(X#b)jK)zR?jw1#cn;*JUhjT2(-1Ig>hniYj9Jn6k^qj*^%8Bzp}&06;q@dI@C^jDz>exoR)vXxzjiHoEkAqU_M6WvbW9I-Q4vP z_Q98S1@$`k;b#5Cv?~Ss?K%4P;#7fo`>7Ym_iJwS>RhKywrg|~KZNmE^~QN<>)>cM z^XCe?f_f)C+w+m&8mRx(o-;*!jG}((CHBL=+5)Gp9?b0uLI&ctyl_$SoPNYxDhL#o+;ajolqSc^ zfhyGN>Zz_<))mh>@h9wRIJd|Rri*X3V9{EyuHq*xm;r0;D(V02c_g`wbkg+|16!g= z(?jKbbgI*^B}wnE84rbM*{{?K?MZj`Rv&eX9fKSbs)9%K7Yk6-PrczD8qxdFZ$tIB zB?ZYPUlJ=?V!hXhC%u`ELA}|2W&NLA&zy0>PSrU=-rYy$W=|fCgMap$nwVPOqX%Ju zw%{o4_DJu9h9OWi$($5}eJ4hvUVV@MwYX)A5?-b>7UzX}Iez#1chmGYOJGSZj)xa9 z$pwwgLc4K%+1|J|`l}hOueR4R)Dv#NS-VD@2nDQ{nWU%QmKO@U9jqU)cozmZHr!xD z<(tJlQ1Dl;&A-#fY+ZGC#$#nzFarV6;`vt0TN@HBwgMZ~d-5&k^&I5>*4bY6HmNu1 zlMXru4|G1X&7PATExwGh{_16XPmjy#!83aAvyZJdMx0C5)$93}`@imxF?i7qNy88u zZqle1_*3*7@_avh@eSlCTZPg>q@8n3x=tq+O}gB>=UmaUw~X?+6TiUc zX4$?I`Ov@vM>sZ~*+y{$G}uOQSR0I_dimWm?0DLR#jn>%ijm>QIL%3MlPeU|Tl3$K z`Q@{vHS?b;3USez2C)_jT6dH9$dwti{w6WfjT!va4+)HG553)US?XG;fFT~w3yCIi znj3~b-6Sq_W23aM#Vv40OC$$W{ZKnSUL50&rEx%9;*OP~PY_Q)$*6v2&~2$^l=r7! z;NUidM~BnPvicoC*rgvj?~Xf$$2=@HtPYK4W`fwZHS>;rwubtR!VAs43e3-UKW;Bu zBVKO}KTCHdcw{X6cK5vr*>(-t1iD9-{M64F`tQuU z{cD#kId;8EVmlAG_FZw79yO|;L;Q7DK|R!`4o$ML|En+e>w9d(*TN`xl+1;00 z8~g0ao?Y~B+W$YTOZM0$#!D&k9ue-?EUuy7r(eRqq)h^ENN{>QJ=#=Pb!*&S;Bn!e z@J;p8j>5<5w!V5|dOy3yYu&}Eo-AE<_kB1(ttz4lF%$!;{ThiLP{aLUGmTToNuq{q5N;#XeS*H@w_y-yvP9#LM{ zH@&~q7o7W%ji2ZA?Yeiy#)tPU$iabN#KvAN`eDDOMP&45>Hg~1C~tTtKFE7_&?tND za;H&ylVz5{PK$v)IK|a(O->rOcHi^$?ct8tY2#^s(5PRdxZV*L1e%YR+jD%=#PL2@ zi|Y3)m+nW8z1YD44-aZt^$QnESfz7*P1~FHoUAnQGnCC&zlj+5Z~uVpXxk!M={JZ0v<`P0Yc|3`CaENHXWs2{Sl*S1fX`;jBg0rgz8 z^%2d!@L=^5m=Uet?X-E`>u=GCVxo5!%?fd%FP7a#aVAkOag8q?u+%RMSBIXTIk`_r zU%SC;qKhAvr}~M_ko8v&rB;0TnwCB8D|=mfy4c+hKBj(D<8~@Iu%KgRYnY&S0_;aq zGsL-m*zn{tO5E?qeAyoH2bg7Fi}(C+7S9vA`ZJ%7&pzIg=}&wVg2XZYEE%tl6vXxZ zEK=*j#2SCrw*5V*cwiup-Vu|g?JK$29Pi0=sNOTpT^q92C)z_R`UbGJ3A^zYOap#y z@EfZ$Hw5_{hD^(6y4T=VPxUe9zlH1u`9S2W7T10rKP@ELNssiZywxXO# zc@v5wvWl~kn~1NDD%#=Kmfa8ckh392ghk*tEGpb6p6JTjiLEl2Q=7)Z$c2fpNVuR$ PtQgMP?QqLr7X$wjo=U-B delta 14912 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 diff --git a/lib/code-runner/safe-compile-dts.ts b/lib/code-runner/safe-compile-dts.ts new file mode 100644 index 0000000..ff0edaa --- /dev/null +++ b/lib/code-runner/safe-compile-dts.ts @@ -0,0 +1,66 @@ +import { + createSystem, + createVirtualTypeScriptEnvironment, +} from "@typescript/vfs" +import ts from "typescript" +import { setupTypeAcquisition, type ATABootstrapConfig } from "@typescript/ata" + +// Note: Ensure that 'fetch' is available in your environment. +// In Node.js 18 and above, 'fetch' is available globally. +// For earlier versions, you may need to install 'node-fetch' or 'undici'. + +export async function safeCompileDts(code: string): Promise<{ + success: boolean + error?: Error + dts: string +}> { + try { + const fsMap = new Map() + fsMap.set("index.tsx", code) + + const system = createSystem(fsMap) + const env = createVirtualTypeScriptEnvironment(system, [], ts, { + jsx: ts.JsxEmit.ReactJSX, + declaration: true, + }) + + const ataConfig: ATABootstrapConfig = { + projectName: "my-project", + typescript: ts, + logger: console, + fetcher: (input: RequestInfo | URL, init?: RequestInit) => { + // For simplicity, we'll use the default fetch. + // Note: In a Node.js environment, ensure 'fetch' is available. + return fetch(input, init) + }, + delegate: { + receivedFile: (code: string, path: string) => { + fsMap.set(path, code) + env.createFile(path, code) + }, + }, + } + + const ata = setupTypeAcquisition(ataConfig) + await ata(` +import React from "@types/react/jsx-runtime" +import { Circuit } from "@tscircuit/core" +${code} +`) + + const { outputFiles } = env.languageService.getEmitOutput("index.tsx", true) + + const indexDts = outputFiles.find((file) => file.name === "index.d.ts") + + if (indexDts?.text) { + return { success: true, dts: indexDts.text } + } + return { + success: false, + error: new Error("No index.d.ts generated"), + dts: "", + } + } catch (error) { + return { success: false, error: error as Error, dts: "" } + } +} diff --git a/package.json b/package.json index 6bdf3b4..294ff67 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,8 @@ "@types/bun": "latest", "@types/debug": "^4.1.12", "@types/react": "^18.3.11", + "@typescript/ata": "^0.9.7", + "@typescript/vfs": "^1.6.0", "react": "^18.3.1", "tsup": "^8.3.0" }, From 2769c48f57a6463c2a3572f8143379f10f7fcbeb Mon Sep 17 00:00:00 2001 From: seveibar Date: Tue, 8 Oct 2024 17:23:24 -0700 Subject: [PATCH 2/5] wip safeCompileTsx --- lib/code-runner/safe-compile-dts.ts | 12 +++++++----- tests/lib/safe-compile-dts.test.ts | 30 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 tests/lib/safe-compile-dts.test.ts diff --git a/lib/code-runner/safe-compile-dts.ts b/lib/code-runner/safe-compile-dts.ts index ff0edaa..07ccf23 100644 --- a/lib/code-runner/safe-compile-dts.ts +++ b/lib/code-runner/safe-compile-dts.ts @@ -15,11 +15,12 @@ export async function safeCompileDts(code: string): Promise<{ dts: string }> { try { + const fileName = "index.ts" // Changed from "index.tsx" to "index.ts" const fsMap = new Map() - fsMap.set("index.tsx", code) + fsMap.set(fileName, code) const system = createSystem(fsMap) - const env = createVirtualTypeScriptEnvironment(system, [], ts, { + const env = createVirtualTypeScriptEnvironment(system, [fileName], ts, { jsx: ts.JsxEmit.ReactJSX, declaration: true, }) @@ -29,8 +30,8 @@ export async function safeCompileDts(code: string): Promise<{ typescript: ts, logger: console, fetcher: (input: RequestInfo | URL, init?: RequestInit) => { - // For simplicity, we'll use the default fetch. - // Note: In a Node.js environment, ensure 'fetch' is available. + // We'll need to override the fetch to get packages from the tscircuit + // registry, this is implemented in the snippets library return fetch(input, init) }, delegate: { @@ -48,7 +49,7 @@ import { Circuit } from "@tscircuit/core" ${code} `) - const { outputFiles } = env.languageService.getEmitOutput("index.tsx", true) + const { outputFiles } = env.languageService.getEmitOutput(fileName, true) const indexDts = outputFiles.find((file) => file.name === "index.d.ts") @@ -61,6 +62,7 @@ ${code} dts: "", } } catch (error) { + console.error("Error in safeCompileDts:", error) return { success: false, error: error as Error, dts: "" } } } diff --git a/tests/lib/safe-compile-dts.test.ts b/tests/lib/safe-compile-dts.test.ts new file mode 100644 index 0000000..420d1fe --- /dev/null +++ b/tests/lib/safe-compile-dts.test.ts @@ -0,0 +1,30 @@ +import { expect, test } from "bun:test" +import { safeCompileDts } from "../../lib/code-runner/safe-compile-dts" + +test("safeCompileDts with valid TypeScript code", async () => { + const testCode = ` + import React from 'react'; + + interface Props { + name: string; + } + + const Greeting: React.FC = ({ name }) => { + return

Hello, {name}!

; + }; + + export default Greeting; + ` + + const { success, dts, error } = await safeCompileDts(testCode) + + if (error) { + console.error("Unexpected error:", error) + } + + expect(error).toBeUndefined() + expect(success).toBe(true) + expect(dts).toBeDefined() + expect(dts).toContain("interface Props") + expect(dts).toContain("const Greeting: React.FC") +}) From 77aed1b94de3790f184d1ba3d59faf132c7c3f7c Mon Sep 17 00:00:00 2001 From: seveibar Date: Tue, 8 Oct 2024 17:34:13 -0700 Subject: [PATCH 3/5] add safeCompileTsx --- lib/code-runner/safe-compile-dts.ts | 45 ++++++++++++++++++++++++----- tests/lib/safe-compile-dts.test.ts | 4 --- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/lib/code-runner/safe-compile-dts.ts b/lib/code-runner/safe-compile-dts.ts index 07ccf23..25c1484 100644 --- a/lib/code-runner/safe-compile-dts.ts +++ b/lib/code-runner/safe-compile-dts.ts @@ -5,9 +5,36 @@ import { import ts from "typescript" import { setupTypeAcquisition, type ATABootstrapConfig } from "@typescript/ata" -// Note: Ensure that 'fetch' is available in your environment. -// In Node.js 18 and above, 'fetch' is available globally. -// For earlier versions, you may need to install 'node-fetch' or 'undici'. +// Custom storage implementation that works in both browser and Node.js +const customStorage = { + _data: new Map(), + getItem: (key: string) => customStorage._data.get(key) ?? null, + setItem: (key: string, value: string) => customStorage._data.set(key, value), + removeItem: (key: string) => customStorage._data.delete(key), + clear: () => customStorage._data.clear(), +} + +// Custom function to create a map of default library files +async function createCustomDefaultMap( + options: ts.CompilerOptions, + tsVersion: string, +): Promise> { + const map = new Map() + const libs = [ + "lib.es5.d.ts", + // "lib.dom.d.ts", + "lib.es2015.d.ts", + ] + + for (const lib of libs) { + const url = `https://typescript.azureedge.net/cdn/${tsVersion}/typescript/lib/${lib}` + const response = await fetch(url) + const text = await response.text() + map.set(`/${lib}`, text) + } + + return map +} export async function safeCompileDts(code: string): Promise<{ success: boolean @@ -15,23 +42,25 @@ export async function safeCompileDts(code: string): Promise<{ dts: string }> { try { - const fileName = "index.ts" // Changed from "index.tsx" to "index.ts" - const fsMap = new Map() + const fileName = "index.ts" + const fsMap = await createCustomDefaultMap( + { target: ts.ScriptTarget.ES2015, lib: ["es2015"] }, + ts.version, + ) fsMap.set(fileName, code) const system = createSystem(fsMap) const env = createVirtualTypeScriptEnvironment(system, [fileName], ts, { + target: ts.ScriptTarget.ES2015, jsx: ts.JsxEmit.ReactJSX, declaration: true, + lib: ["es2015"], }) const ataConfig: ATABootstrapConfig = { projectName: "my-project", typescript: ts, - logger: console, fetcher: (input: RequestInfo | URL, init?: RequestInit) => { - // We'll need to override the fetch to get packages from the tscircuit - // registry, this is implemented in the snippets library return fetch(input, init) }, delegate: { diff --git a/tests/lib/safe-compile-dts.test.ts b/tests/lib/safe-compile-dts.test.ts index 420d1fe..1a76e76 100644 --- a/tests/lib/safe-compile-dts.test.ts +++ b/tests/lib/safe-compile-dts.test.ts @@ -18,10 +18,6 @@ test("safeCompileDts with valid TypeScript code", async () => { const { success, dts, error } = await safeCompileDts(testCode) - if (error) { - console.error("Unexpected error:", error) - } - expect(error).toBeUndefined() expect(success).toBe(true) expect(dts).toBeDefined() From 088d9aeeedb875fa32a383530233204f3a0533b1 Mon Sep 17 00:00:00 2001 From: seveibar Date: Tue, 8 Oct 2024 19:23:22 -0700 Subject: [PATCH 4/5] alternate ts loading methods added --- lib/code-runner/safe-compile-dts.ts | 39 +++++++++++++++++++++++++---- tests/lib/safe-compile-dts.test.ts | 4 ++- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/lib/code-runner/safe-compile-dts.ts b/lib/code-runner/safe-compile-dts.ts index 25c1484..ebfc172 100644 --- a/lib/code-runner/safe-compile-dts.ts +++ b/lib/code-runner/safe-compile-dts.ts @@ -1,4 +1,6 @@ import { + createDefaultMapFromCDN, + createDefaultMapFromNodeModules, createSystem, createVirtualTypeScriptEnvironment, } from "@typescript/vfs" @@ -36,17 +38,44 @@ async function createCustomDefaultMap( return map } -export async function safeCompileDts(code: string): Promise<{ +export async function safeCompileDts( + code: string, + opts: { + importMapMethod?: "node_modules" | "cdn" | "custom" | "none" + } = {}, +): Promise<{ success: boolean error?: Error dts: string }> { + opts.importMapMethod ??= "cdn" try { const fileName = "index.ts" - const fsMap = await createCustomDefaultMap( - { target: ts.ScriptTarget.ES2015, lib: ["es2015"] }, - ts.version, - ) + let fsMap: Map + const compilerOptions = { target: ts.ScriptTarget.ES2015, lib: ["es2015"] } + if (opts.importMapMethod === "custom") { + fsMap = await createCustomDefaultMap(compilerOptions, ts.version) + } else if (opts.importMapMethod === "node_modules") { + fsMap = await createDefaultMapFromNodeModules(compilerOptions, ts) + } else if (opts.importMapMethod === "cdn") { + if (!globalThis.localStorage) { + globalThis.localStorage = customStorage as any + } + if (!globalThis.fetch) { + throw new Error( + "Fetch is not available in the global scope, can't use CDN", + ) + } + fsMap = await createDefaultMapFromCDN( + compilerOptions, + ts.version, + true, + ts, + ) + } else { + fsMap = new Map() + } + fsMap.set(fileName, code) const system = createSystem(fsMap) diff --git a/tests/lib/safe-compile-dts.test.ts b/tests/lib/safe-compile-dts.test.ts index 1a76e76..d29a50f 100644 --- a/tests/lib/safe-compile-dts.test.ts +++ b/tests/lib/safe-compile-dts.test.ts @@ -16,7 +16,9 @@ test("safeCompileDts with valid TypeScript code", async () => { export default Greeting; ` - const { success, dts, error } = await safeCompileDts(testCode) + const { success, dts, error } = await safeCompileDts(testCode, { + importMapMethod: "cdn", + }) expect(error).toBeUndefined() expect(success).toBe(true) From e31eeda438bc2d8031bc5f29459cd7f6f3b69b6b Mon Sep 17 00:00:00 2001 From: seveibar Date: Tue, 8 Oct 2024 19:24:14 -0700 Subject: [PATCH 5/5] add safe compile dts to exports --- lib/code-runner/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/code-runner/index.ts b/lib/code-runner/index.ts index 320bf92..92bb51c 100644 --- a/lib/code-runner/index.ts +++ b/lib/code-runner/index.ts @@ -4,3 +4,4 @@ export * from "./run-prompt" export * from "./safe-evaluate-code" export * from "./transpile-code" export * from "./pull-snippet-import" +export * from "./safe-compile-dts"