@@ -3,6 +3,11 @@ import { EditorSystem } from './editor.js';
33import ts from 'typescript' ;
44import { TypeProcessor } from './processor.js' ;
55import { CodeShareManager } from './code-share.js' ;
6+ import {
7+ createSystem ,
8+ createDefaultMapFromCDN ,
9+ createVirtualCompilerHost
10+ } from '@typescript/vfs' ;
611
712/**
813 * @typedef {import('../../.build/plugins/PackageToJS/outputs/Package/bridge-js.js').PlayBridgeJS } PlayBridgeJS
@@ -81,12 +86,11 @@ export class BridgeJSPlayground {
8186 try {
8287 // Import the BridgeJS module
8388 const { init } = await import ( "../../.build/plugins/PackageToJS/outputs/Package/index.js" ) ;
89+ const virtualHost = await this . createTS2SkeletonFactory ( ) ;
8490 const { exports } = await init ( {
85- getImports : ( ) => {
86- return {
87- createTS2Skeleton : this . createTS2Skeleton
88- } ;
89- }
91+ getImports : ( ) => ( {
92+ createTS2Skeleton : ( ) => this . createTS2Skeleton ( virtualHost )
93+ } )
9094 } ) ;
9195 this . playBridgeJS = new exports . PlayBridgeJS ( ) ;
9296 console . log ( 'BridgeJS initialized successfully' ) ;
@@ -171,32 +175,44 @@ export class BridgeJSPlayground {
171175 } ) ;
172176 }
173177
174- createTS2Skeleton ( ) {
178+ async createTS2SkeletonFactory ( ) {
179+ const createVirtualHost = async ( ) => {
180+ const fsMap = await createDefaultMapFromCDN (
181+ { target : ts . ScriptTarget . ES2015 } ,
182+ ts . version ,
183+ true ,
184+ ts
185+ ) ;
186+
187+ const system = createSystem ( fsMap ) ;
188+
189+ const compilerOptions = {
190+ target : ts . ScriptTarget . ES2015 ,
191+ lib : [ "es2015" , "dom" ] ,
192+ } ;
193+
194+ return createVirtualCompilerHost ( system , compilerOptions , ts ) ;
195+ }
196+ return await createVirtualHost ( ) ;
197+ }
198+
199+ /**
200+ * @param {ReturnType<typeof createVirtualCompilerHost> } virtualHost
201+ */
202+ createTS2Skeleton ( virtualHost ) {
175203 return {
204+ /**
205+ * @param {string } dtsCode
206+ * @returns {string }
207+ */
176208 convert : ( dtsCode ) => {
177- const virtualFilePath = "bridge-js.d.ts"
178- const virtualHost = {
179- fileExists : fileName => fileName === virtualFilePath ,
180- readFile : fileName => dtsCode ,
181- getSourceFile : ( fileName , languageVersion ) => {
182- const sourceText = dtsCode ;
183- if ( sourceText === undefined ) return undefined ;
184- return ts . createSourceFile ( fileName , sourceText , languageVersion ) ;
185- } ,
186- getDefaultLibFileName : options => "lib.d.ts" ,
187- writeFile : ( fileName , data ) => {
188- console . log ( `[emit] ${ fileName } :\n${ data } ` ) ;
189- } ,
190- getCurrentDirectory : ( ) => "" ,
191- getDirectories : ( ) => [ ] ,
192- getCanonicalFileName : fileName => fileName ,
193- getNewLine : ( ) => "\n" ,
194- useCaseSensitiveFileNames : ( ) => true
195- }
196209 // Create TypeScript program from d.ts content
210+ const virtualFilePath = "bridge-js.d.ts"
211+ const sourceFile = ts . createSourceFile ( virtualFilePath , dtsCode , ts . ScriptTarget . ES2015 ) ;
212+ virtualHost . updateFile ( sourceFile ) ;
197213 const tsProgram = ts . createProgram ( {
198214 rootNames : [ virtualFilePath ] ,
199- host : virtualHost ,
215+ host : virtualHost . compilerHost ,
200216 options : {
201217 noEmit : true ,
202218 declaration : true ,
0 commit comments