-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Updates vfs to be more future safe when running on node + 2021 dts files for playground #2802
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
a2e8661
1d0bc44
b5187a7
d1dd3ca
438d263
0488958
fefe86e
c2feaab
abd38b7
82a915f
ec60dc5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -9,7 +9,7 @@ type TS = typeof import("typescript") | |
| let hasLocalStorage = false | ||
| try { | ||
| hasLocalStorage = typeof localStorage !== `undefined` | ||
| } catch (error) { } | ||
| } catch (error) {} | ||
|
|
||
| const hasProcess = typeof process !== `undefined` | ||
| const shouldDebug = (hasLocalStorage && localStorage.getItem("DEBUG")) || (hasProcess && process.env.DEBUG) | ||
|
|
@@ -91,9 +91,13 @@ export function createVirtualTypeScriptEnvironment( | |
| } | ||
| } | ||
|
|
||
| // TODO: This could be replaced by grabbing: https://github.com/microsoft/TypeScript/blob/main/src/lib/libs.json | ||
| // and then using that to generate the list of files from the server, but it is not included in the npm package | ||
|
|
||
| /** | ||
| * Grab the list of lib files for a particular target, will return a bit more than necessary (by including | ||
| * the dom) but that's OK | ||
| * the dom) but that's OK, we're really working with the constraint that you can't get a list of files | ||
| * when running in a browser. | ||
| * | ||
| * @param target The compiler settings target baseline | ||
| * @param ts A copy of the TypeScript module | ||
|
|
@@ -102,68 +106,91 @@ export const knownLibFilesForCompilerOptions = (compilerOptions: CompilerOptions | |
| const target = compilerOptions.target || ts.ScriptTarget.ES5 | ||
| const lib = compilerOptions.lib || [] | ||
|
|
||
| const files = [ | ||
| "lib.d.ts", | ||
| "lib.dom.d.ts", | ||
| "lib.dom.iterable.d.ts", | ||
| "lib.webworker.d.ts", | ||
| "lib.webworker.importscripts.d.ts", | ||
| "lib.scripthost.d.ts", | ||
| "lib.es5.d.ts", | ||
| "lib.es6.d.ts", | ||
| "lib.es2015.collection.d.ts", | ||
| "lib.es2015.core.d.ts", | ||
| "lib.es2015.d.ts", | ||
| "lib.es2015.generator.d.ts", | ||
| "lib.es2015.iterable.d.ts", | ||
| "lib.es2015.promise.d.ts", | ||
| "lib.es2015.proxy.d.ts", | ||
| "lib.es2015.reflect.d.ts", | ||
| "lib.es2015.symbol.d.ts", | ||
| "lib.es2015.symbol.wellknown.d.ts", | ||
| "lib.es2016.array.include.d.ts", | ||
| "lib.es2016.d.ts", | ||
| "lib.es2016.full.d.ts", | ||
| "lib.es2017.d.ts", | ||
| "lib.es2017.full.d.ts", | ||
| "lib.es2017.intl.d.ts", | ||
| "lib.es2017.object.d.ts", | ||
| "lib.es2017.sharedmemory.d.ts", | ||
| "lib.es2017.string.d.ts", | ||
| "lib.es2017.typedarrays.d.ts", | ||
| "lib.es2018.asyncgenerator.d.ts", | ||
| "lib.es2018.asynciterable.d.ts", | ||
| "lib.es2018.d.ts", | ||
| "lib.es2018.full.d.ts", | ||
| "lib.es2018.intl.d.ts", | ||
| "lib.es2018.promise.d.ts", | ||
| "lib.es2018.regexp.d.ts", | ||
| "lib.es2019.array.d.ts", | ||
| "lib.es2019.d.ts", | ||
| "lib.es2019.full.d.ts", | ||
| "lib.es2019.object.d.ts", | ||
| "lib.es2019.string.d.ts", | ||
| "lib.es2019.symbol.d.ts", | ||
| "lib.es2020.d.ts", | ||
| "lib.es2020.full.d.ts", | ||
| "lib.es2020.string.d.ts", | ||
| "lib.es2020.symbol.wellknown.d.ts", | ||
| "lib.es2020.bigint.d.ts", | ||
| "lib.es2020.promise.d.ts", | ||
| "lib.es2020.sharedmemory.d.ts", | ||
| "lib.es2020.intl.d.ts", | ||
| "lib.es2021.d.ts", | ||
| "lib.es2021.full.d.ts", | ||
| "lib.es2021.promise.d.ts", | ||
| "lib.es2021.string.d.ts", | ||
| "lib.es2021.weakref.d.ts", | ||
| "lib.esnext.d.ts", | ||
| "lib.esnext.full.d.ts", | ||
| "lib.esnext.intl.d.ts", | ||
| "lib.esnext.promise.d.ts", | ||
| "lib.esnext.string.d.ts", | ||
| "lib.esnext.weakref.d.ts", | ||
| ] | ||
| // Note that this will include files which can't be found for particular versions of TS | ||
| const files = | ||
| "getAllLibFileNames" in ts | ||
| ? // @ts-ignore - see https://github.com/microsoft/TypeScript/pull/54011 | ||
| (ts.getAllLibFileNames() as string[]) | ||
| : [ | ||
|
||
| "lib.d.ts", | ||
| "lib.decorators.d.ts", | ||
| "lib.decorators.legacy.d.ts", | ||
| "lib.dom.d.ts", | ||
| "lib.dom.iterable.d.ts", | ||
| "lib.es2015.collection.d.ts", | ||
| "lib.es2015.core.d.ts", | ||
| "lib.es2015.d.ts", | ||
| "lib.es2015.generator.d.ts", | ||
| "lib.es2015.iterable.d.ts", | ||
| "lib.es2015.promise.d.ts", | ||
| "lib.es2015.proxy.d.ts", | ||
| "lib.es2015.reflect.d.ts", | ||
| "lib.es2015.symbol.d.ts", | ||
| "lib.es2015.symbol.wellknown.d.ts", | ||
| "lib.es2016.array.include.d.ts", | ||
| "lib.es2016.d.ts", | ||
| "lib.es2016.full.d.ts", | ||
| "lib.es2017.d.ts", | ||
| "lib.es2017.full.d.ts", | ||
| "lib.es2017.intl.d.ts", | ||
| "lib.es2017.object.d.ts", | ||
| "lib.es2017.sharedmemory.d.ts", | ||
| "lib.es2017.string.d.ts", | ||
| "lib.es2017.typedarrays.d.ts", | ||
| "lib.es2018.asyncgenerator.d.ts", | ||
| "lib.es2018.asynciterable.d.ts", | ||
| "lib.es2018.d.ts", | ||
| "lib.es2018.full.d.ts", | ||
| "lib.es2018.intl.d.ts", | ||
| "lib.es2018.promise.d.ts", | ||
| "lib.es2018.regexp.d.ts", | ||
| "lib.es2019.array.d.ts", | ||
| "lib.es2019.d.ts", | ||
| "lib.es2019.full.d.ts", | ||
| "lib.es2019.intl.d.ts", | ||
| "lib.es2019.object.d.ts", | ||
| "lib.es2019.string.d.ts", | ||
| "lib.es2019.symbol.d.ts", | ||
| "lib.es2020.bigint.d.ts", | ||
| "lib.es2020.d.ts", | ||
| "lib.es2020.date.d.ts", | ||
| "lib.es2020.full.d.ts", | ||
| "lib.es2020.intl.d.ts", | ||
| "lib.es2020.number.d.ts", | ||
| "lib.es2020.promise.d.ts", | ||
| "lib.es2020.sharedmemory.d.ts", | ||
| "lib.es2020.string.d.ts", | ||
| "lib.es2020.symbol.wellknown.d.ts", | ||
| "lib.es2021.d.ts", | ||
| "lib.es2021.full.d.ts", | ||
| "lib.es2021.intl.d.ts", | ||
| "lib.es2021.promise.d.ts", | ||
| "lib.es2021.string.d.ts", | ||
| "lib.es2021.weakref.d.ts", | ||
| "lib.es2022.array.d.ts", | ||
| "lib.es2022.d.ts", | ||
| "lib.es2022.error.d.ts", | ||
| "lib.es2022.full.d.ts", | ||
| "lib.es2022.intl.d.ts", | ||
| "lib.es2022.object.d.ts", | ||
| "lib.es2022.regexp.d.ts", | ||
| "lib.es2022.sharedmemory.d.ts", | ||
| "lib.es2022.string.d.ts", | ||
| "lib.es2023.array.d.ts", | ||
| "lib.es2023.d.ts", | ||
| "lib.es2023.full.d.ts", | ||
| "lib.es5.d.ts", | ||
| "lib.es6.d.ts", | ||
| "lib.esnext.d.ts", | ||
| "lib.esnext.full.d.ts", | ||
| "lib.esnext.intl.d.ts", | ||
| "lib.esnext.promise.d.ts", | ||
| "lib.esnext.string.d.ts", | ||
| "lib.esnext.weakref.d.ts", | ||
| "lib.scripthost.d.ts", | ||
| "lib.webworker.d.ts", | ||
| "lib.webworker.importscripts.d.ts", | ||
| ] | ||
|
|
||
| const targetToCut = ts.ScriptTarget[target] | ||
| const matches = files.filter(f => f.startsWith(`lib.${targetToCut.toLowerCase()}`)) | ||
|
|
@@ -190,9 +217,15 @@ export const knownLibFilesForCompilerOptions = (compilerOptions: CompilerOptions | |
| /** | ||
| * Sets up a Map with lib contents by grabbing the necessary files from | ||
| * the local copy of typescript via the file system. | ||
| * | ||
| * The first two args are un-used, but kept around so as to not cause a | ||
| * semver major bump for no gain to module users. | ||
| */ | ||
| export const createDefaultMapFromNodeModules = (compilerOptions: CompilerOptions, ts?: typeof import("typescript"), tsLibDirectory?: string) => { | ||
| const tsModule = ts || require("typescript") | ||
| export const createDefaultMapFromNodeModules = ( | ||
| _compilerOptions: CompilerOptions, | ||
| _ts?: typeof import("typescript"), | ||
| tsLibDirectory?: string | ||
| ) => { | ||
| const path = requirePath() | ||
| const fs = requireFS() | ||
|
|
||
|
|
@@ -201,9 +234,11 @@ export const createDefaultMapFromNodeModules = (compilerOptions: CompilerOptions | |
| return fs.readFileSync(path.join(lib, name), "utf8") | ||
| } | ||
|
|
||
| const libs = knownLibFilesForCompilerOptions(compilerOptions, tsModule) | ||
| const libFiles = fs.readdirSync(tsLibDirectory || path.dirname(require.resolve("typescript"))) | ||
| const knownLibFiles = libFiles.filter(f => f.startsWith("lib.") && f.endsWith(".d.ts")) | ||
|
|
||
| const fsMap = new Map<string, string>() | ||
| libs.forEach(lib => { | ||
| knownLibFiles.forEach(lib => { | ||
| fsMap.set("/" + lib, getLib(lib)) | ||
| }) | ||
| return fsMap | ||
|
|
@@ -403,7 +438,12 @@ export function createSystem(files: Map<string, string>): System { | |
| * a set of virtual files which are prioritised over the FS versions, then a path to the root of your | ||
| * project (basically the folder your node_modules lives) | ||
| */ | ||
| export function createFSBackedSystem(files: Map<string, string>, _projectRoot: string, ts: TS, tsLibDirectory?: string): System { | ||
| export function createFSBackedSystem( | ||
| files: Map<string, string>, | ||
| _projectRoot: string, | ||
| ts: TS, | ||
| tsLibDirectory?: string | ||
| ): System { | ||
| // We need to make an isolated folder for the tsconfig, but also need to be able to resolve the | ||
| // existing node_modules structures going back through the history | ||
| const root = _projectRoot + "/vfs" | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6119,7 +6119,25 @@ __metadata: | |
| languageName: node | ||
| linkType: hard | ||
|
|
||
| "@typescript/[email protected], @typescript/vfs@workspace:packages/typescript-vfs": | ||
| "@typescript/vfs@npm:1.3.4": | ||
| version: 1.3.4 | ||
| resolution: "@typescript/vfs@npm:1.3.4" | ||
| dependencies: | ||
| debug: ^4.1.1 | ||
| checksum: 9468126c7f5da5811f65a6a8ccded68ba3ae32e5bff710ff0fc792b9592dd0b64606669703c707a61350d18d0640a60465fd1fdfa19224bf75998061d461cbf5 | ||
| languageName: node | ||
| linkType: hard | ||
|
|
||
| "@typescript/vfs@npm:1.4.0": | ||
| version: 1.4.0 | ||
| resolution: "@typescript/vfs@npm:1.4.0" | ||
| dependencies: | ||
| debug: ^4.1.1 | ||
| checksum: 67219c9354d142ef8259da172066db043133d8b6cc0a5d862b9867d5950c5f6c9b816e8b29f8901e8cd2572003282fbbec097e53932bc6da01d0fa2e40520014 | ||
| languageName: node | ||
| linkType: hard | ||
|
|
||
| "@typescript/vfs@workspace:packages/typescript-vfs": | ||
| version: 0.0.0-use.local | ||
| resolution: "@typescript/vfs@workspace:packages/typescript-vfs" | ||
| dependencies: | ||
|
|
@@ -6136,15 +6154,6 @@ __metadata: | |
| languageName: unknown | ||
| linkType: soft | ||
|
|
||
| "@typescript/vfs@npm:1.3.4": | ||
| version: 1.3.4 | ||
| resolution: "@typescript/vfs@npm:1.3.4" | ||
| dependencies: | ||
| debug: ^4.1.1 | ||
| checksum: 9468126c7f5da5811f65a6a8ccded68ba3ae32e5bff710ff0fc792b9592dd0b64606669703c707a61350d18d0640a60465fd1fdfa19224bf75998061d461cbf5 | ||
| languageName: node | ||
| linkType: hard | ||
|
|
||
| "@webassemblyjs/ast@npm:1.11.0": | ||
| version: 1.11.0 | ||
| resolution: "@webassemblyjs/ast@npm:1.11.0" | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.