All files / lib/typescript ide.state.ts

0% Statements 0/16
100% Branches 0/0
0% Functions 0/3
0% Lines 0/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 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                                                                                                                       
import { Common } from '..'
 
import { SourceCode } from '../common'
import { createDefaultMapFromCDN } from './vfs_default_map_cdn'
import { Observable } from 'rxjs'
import {
    createSystem,
    createVirtualTypeScriptEnvironment,
    VirtualTypeScriptEnvironment,
} from '@typescript/vfs'
import { filter, map, shareReplay } from 'rxjs/operators'
import * as ts from 'typescript'
import { logFactory } from './log-factory.conf'
 
const log = logFactory().getChildLogger('ide.state.ts')
 
export const compilerOptions = {
    target: ts.ScriptTarget.ES2020,
    module: ts.ModuleKind.ES2020,
    esModuleInterop: true,
    noImplicitAny: false,
    baseUrl: '/',
}
 
export class IdeState extends Common.IdeState {
    public readonly environment$: Observable<{
        environment: VirtualTypeScriptEnvironment
        fsMap: Map<string, string>
    }>
 
    constructor(params: { files: SourceCode[] }) {
        super({
            files: params.files,
            defaultFileSystem: createDefaultMapFromCDN(
                { target: ts.ScriptTarget.ES2020 },
                '4.7.4',
            ),
        })
        log.info('IdeState.constructor()')
 
        this.environment$ = this.fsMap$.pipe(
            filter((fsMap) => fsMap != undefined),
            map((fsMap) => {
                log.info('IdeState.constructor => create virtual files system')
                const system = createSystem(fsMap)
                return {
                    fsMap,
                    environment: createVirtualTypeScriptEnvironment(
                        system,
                        ['./index.ts'],
                        ts,
                        compilerOptions,
                    ),
                }
            }),
            shareReplay({ bufferSize: 1, refCount: true }),
        )
    }
}