@@ -3,6 +3,11 @@ import { EditorSystem } from './editor.js';
3
3
import ts from 'typescript' ;
4
4
import { TypeProcessor } from './processor.js' ;
5
5
import { CodeShareManager } from './code-share.js' ;
6
+ import {
7
+ createSystem ,
8
+ createDefaultMapFromCDN ,
9
+ createVirtualCompilerHost
10
+ } from '@typescript/vfs' ;
6
11
7
12
/**
8
13
* @typedef {import('../../.build/plugins/PackageToJS/outputs/Package/bridge-js.js').PlayBridgeJS } PlayBridgeJS
@@ -81,12 +86,11 @@ export class BridgeJSPlayground {
81
86
try {
82
87
// Import the BridgeJS module
83
88
const { init } = await import ( "../../.build/plugins/PackageToJS/outputs/Package/index.js" ) ;
89
+ const virtualHost = await this . createTS2SkeletonFactory ( ) ;
84
90
const { exports } = await init ( {
85
- getImports : ( ) => {
86
- return {
87
- createTS2Skeleton : this . createTS2Skeleton
88
- } ;
89
- }
91
+ getImports : ( ) => ( {
92
+ createTS2Skeleton : ( ) => this . createTS2Skeleton ( virtualHost )
93
+ } )
90
94
} ) ;
91
95
this . playBridgeJS = new exports . PlayBridgeJS ( ) ;
92
96
console . log ( 'BridgeJS initialized successfully' ) ;
@@ -171,32 +175,44 @@ export class BridgeJSPlayground {
171
175
} ) ;
172
176
}
173
177
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 ) {
175
203
return {
204
+ /**
205
+ * @param {string } dtsCode
206
+ * @returns {string }
207
+ */
176
208
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
- }
196
209
// 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 ) ;
197
213
const tsProgram = ts . createProgram ( {
198
214
rootNames : [ virtualFilePath ] ,
199
- host : virtualHost ,
215
+ host : virtualHost . compilerHost ,
200
216
options : {
201
217
noEmit : true ,
202
218
declaration : true ,
0 commit comments