Allow export map entries to remap back to input files for a program (#47925)

* Allow export map entries to remap back to input files for a program

* Fix file casing issues on windows

* Implement abiguity error, doesnt quite work

* Refine selection logic in error case to use getCommonSourceDirectory, add more tests
This commit is contained in:
Wesley Wigham
2022-05-05 12:53:56 -07:00
committed by GitHub
parent 1e157ef1b2
commit 8e433cda3d
55 changed files with 1035 additions and 13 deletions

View File

@@ -0,0 +1,20 @@
// @module: nodenext
// @outDir: ./dist
// @rootDir: tests/cases/compiler
// @filename: package.json
{
"name": "@this/package",
"type": "module",
"exports": {
".": "./dist/index.js"
},
"imports": {
"#dep": "./dist/index.js"
}
}
// @filename: index.ts
import * as me from "#dep";
me.thing();
export function thing(): void {}

View File

@@ -0,0 +1,16 @@
// @module: nodenext
// @outDir: ./dist
// @filename: package.json
{
"name": "@this/package",
"type": "module",
"exports": {
".": "./dist/index.js"
}
}
// @filename: index.ts
import * as me from "@this/package";
me.thing();
export function thing(): void {}

View File

@@ -0,0 +1,21 @@
// @module: nodenext
// @outDir: ./dist
// @declarationDir: ./types
// @declaration: true
// @filename: package.json
{
"name": "@this/package",
"type": "module",
"exports": {
".": {
"default": "./dist/index.js",
"types": "./types/index.d.ts"
}
}
}
// @filename: index.ts
import * as me from "@this/package";
me.thing();
export function thing(): void {}

View File

@@ -0,0 +1,26 @@
// @filename: tsconfig.json
{
"compilerOptions": {
"module": "nodenext",
"outDir": "./dist",
"declarationDir": "./types",
"composite": true
}
}
// @filename: package.json
{
"name": "@this/package",
"type": "module",
"exports": {
".": {
"default": "./dist/index.js",
"types": "./types/index.d.ts"
}
}
}
// @filename: index.ts
import * as me from "@this/package";
me.thing();
export function thing(): void {}

View File

@@ -0,0 +1,37 @@
// @noImplicitReferences: true
// @filename: tsconfig.json
{
"compilerOptions": {
"module": "nodenext",
"outDir": "./dist",
"declarationDir": "./types",
"composite": true
}
}
// @filename: package.json
{
"name": "@this/package",
"type": "module",
"exports": {
".": {
"default": "./dist/index.js",
"types": "./types/index.d.ts"
}
}
}
// @filename: index.ts
export {srcthing as thing} from "./src/thing.js";
// @filename: src/thing.ts
// The following import should cause `index.ts`
// to be included in the build, which will,
// in turn, cause the common src directory to not be `src`
// (the harness is wierd here in that noImplicitReferences makes only
// this file get loaded as an entrypoint and emitted, while on the
// real command-line we'll crawl the imports for that set - a limitation
// of the harness, I suppose)
import * as me from "@this/package";
me.thing();
export function srcthing(): void {}

View File

@@ -0,0 +1,37 @@
// @noImplicitReferences: true
// @filename: tsconfig.json
{
"compilerOptions": {
"module": "nodenext",
"outDir": "./dist",
"declarationDir": "./types",
"declaration": true
}
}
// @filename: package.json
{
"name": "@this/package",
"type": "module",
"exports": {
".": {
"default": "./dist/index.js",
"types": "./types/index.d.ts"
}
}
}
// @filename: index.ts
export {srcthing as thing} from "./src/thing.js";
// @filename: src/thing.ts
// The following import should cause `index.ts`
// to be included in the build, which will,
// in turn, cause the common src directory to not be `src`
// (the harness is wierd here in that noImplicitReferences makes only
// this file get loaded as an entrypoint and emitted, while on the
// real command-line we'll crawl the imports for that set - a limitation
// of the harness, I suppose)
import * as me from "@this/package";
me.thing();
export function srcthing(): void {}

View File

@@ -0,0 +1,22 @@
// @module: nodenext
// @outDir: /pkg/dist
// @declarationDir: /pkg/types
// @declaration: true
// @rootDir: /pkg/src
// @filename: /pkg/package.json
{
"name": "@this/package",
"type": "module",
"exports": {
".": {
"default": "./dist/index.js",
"types": "./types/index.d.ts"
}
}
}
// @filename: /pkg/src/index.ts
import * as me from "@this/package";
me.thing();
export function thing(): void {}

View File

@@ -0,0 +1,17 @@
// @module: nodenext
// @outDir: ./dist
// @rootDir: tests/cases/compiler
// @filename: package.json
{
"name": "@this/package",
"type": "module",
"exports": {
".": "./dist/index.js"
}
}
// @filename: index.ts
import * as me from "@this/package";
me.thing();
export function thing(): void {}