Properly support scoped package self name lookups (#46212)
This commit is contained in:
parent
47cd4d3ecf
commit
1cee9731d2
|
@ -1724,11 +1724,15 @@ namespace ts {
|
|||
if (!scope || !scope.packageJsonContent.exports) {
|
||||
return undefined;
|
||||
}
|
||||
const parts = getPathComponents(moduleName); // unrooted paths should have `""` as their 0th entry
|
||||
if (scope.packageJsonContent.name !== parts[1]) {
|
||||
if (typeof scope.packageJsonContent.name !== "string") {
|
||||
return undefined;
|
||||
}
|
||||
const trailingParts = parts.slice(2);
|
||||
const parts = getPathComponents(moduleName); // unrooted paths should have `""` as their 0th entry
|
||||
const nameParts = getPathComponents(scope.packageJsonContent.name);
|
||||
if (!every(nameParts, (p, i) => parts[i] === p)) {
|
||||
return undefined;
|
||||
}
|
||||
const trailingParts = parts.slice(nameParts.length);
|
||||
return loadModuleFromExports(scope, extensions, !length(trailingParts) ? "." : `.${directorySeparator}${trailingParts.join(directorySeparator)}`, state, cache, redirectedReference);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
tests/cases/conformance/node/index.cts(2,23): error TS1471: Module '@scope/package' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported synchronously. Use dynamic import instead.
|
||||
|
||||
|
||||
==== tests/cases/conformance/node/index.ts (0 errors) ====
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
==== tests/cases/conformance/node/index.mts (0 errors) ====
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
==== tests/cases/conformance/node/index.cts (1 errors) ====
|
||||
// cjs format file
|
||||
import * as self from "@scope/package";
|
||||
~~~~~~~~~~~~~~~~
|
||||
!!! error TS1471: Module '@scope/package' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported synchronously. Use dynamic import instead.
|
||||
self;
|
||||
==== tests/cases/conformance/node/package.json (0 errors) ====
|
||||
{
|
||||
"name": "@scope/package",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"exports": "./index.js"
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
//// [tests/cases/conformance/node/nodePackageSelfNameScoped.ts] ////
|
||||
|
||||
//// [index.ts]
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [index.mts]
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [index.cts]
|
||||
// cjs format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [package.json]
|
||||
{
|
||||
"name": "@scope/package",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"exports": "./index.js"
|
||||
}
|
||||
|
||||
//// [index.js]
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [index.mjs]
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [index.cjs]
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
// cjs format file
|
||||
const self = __importStar(require("@scope/package"));
|
||||
self;
|
||||
|
||||
|
||||
//// [index.d.ts]
|
||||
export {};
|
||||
//// [index.d.mts]
|
||||
export {};
|
||||
//// [index.d.cts]
|
||||
export {};
|
|
@ -0,0 +1,24 @@
|
|||
=== tests/cases/conformance/node/index.ts ===
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
>self : Symbol(self, Decl(index.ts, 1, 6))
|
||||
|
||||
self;
|
||||
>self : Symbol(self, Decl(index.ts, 1, 6))
|
||||
|
||||
=== tests/cases/conformance/node/index.mts ===
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
>self : Symbol(self, Decl(index.mts, 1, 6))
|
||||
|
||||
self;
|
||||
>self : Symbol(self, Decl(index.mts, 1, 6))
|
||||
|
||||
=== tests/cases/conformance/node/index.cts ===
|
||||
// cjs format file
|
||||
import * as self from "@scope/package";
|
||||
>self : Symbol(self, Decl(index.cts, 1, 6))
|
||||
|
||||
self;
|
||||
>self : Symbol(self, Decl(index.cts, 1, 6))
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
=== tests/cases/conformance/node/index.ts ===
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
>self : typeof self
|
||||
|
||||
self;
|
||||
>self : typeof self
|
||||
|
||||
=== tests/cases/conformance/node/index.mts ===
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
>self : typeof self
|
||||
|
||||
self;
|
||||
>self : typeof self
|
||||
|
||||
=== tests/cases/conformance/node/index.cts ===
|
||||
// cjs format file
|
||||
import * as self from "@scope/package";
|
||||
>self : typeof self
|
||||
|
||||
self;
|
||||
>self : typeof self
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
tests/cases/conformance/node/index.cts(2,23): error TS1471: Module '@scope/package' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported synchronously. Use dynamic import instead.
|
||||
|
||||
|
||||
==== tests/cases/conformance/node/index.ts (0 errors) ====
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
==== tests/cases/conformance/node/index.mts (0 errors) ====
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
==== tests/cases/conformance/node/index.cts (1 errors) ====
|
||||
// cjs format file
|
||||
import * as self from "@scope/package";
|
||||
~~~~~~~~~~~~~~~~
|
||||
!!! error TS1471: Module '@scope/package' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported synchronously. Use dynamic import instead.
|
||||
self;
|
||||
==== tests/cases/conformance/node/package.json (0 errors) ====
|
||||
{
|
||||
"name": "@scope/package",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"exports": "./index.js"
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
//// [tests/cases/conformance/node/nodePackageSelfNameScoped.ts] ////
|
||||
|
||||
//// [index.ts]
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [index.mts]
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [index.cts]
|
||||
// cjs format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [package.json]
|
||||
{
|
||||
"name": "@scope/package",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"exports": "./index.js"
|
||||
}
|
||||
|
||||
//// [index.js]
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [index.mjs]
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
//// [index.cjs]
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
// cjs format file
|
||||
const self = __importStar(require("@scope/package"));
|
||||
self;
|
||||
|
||||
|
||||
//// [index.d.ts]
|
||||
export {};
|
||||
//// [index.d.mts]
|
||||
export {};
|
||||
//// [index.d.cts]
|
||||
export {};
|
|
@ -0,0 +1,24 @@
|
|||
=== tests/cases/conformance/node/index.ts ===
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
>self : Symbol(self, Decl(index.ts, 1, 6))
|
||||
|
||||
self;
|
||||
>self : Symbol(self, Decl(index.ts, 1, 6))
|
||||
|
||||
=== tests/cases/conformance/node/index.mts ===
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
>self : Symbol(self, Decl(index.mts, 1, 6))
|
||||
|
||||
self;
|
||||
>self : Symbol(self, Decl(index.mts, 1, 6))
|
||||
|
||||
=== tests/cases/conformance/node/index.cts ===
|
||||
// cjs format file
|
||||
import * as self from "@scope/package";
|
||||
>self : Symbol(self, Decl(index.cts, 1, 6))
|
||||
|
||||
self;
|
||||
>self : Symbol(self, Decl(index.cts, 1, 6))
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
=== tests/cases/conformance/node/index.ts ===
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
>self : typeof self
|
||||
|
||||
self;
|
||||
>self : typeof self
|
||||
|
||||
=== tests/cases/conformance/node/index.mts ===
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
>self : typeof self
|
||||
|
||||
self;
|
||||
>self : typeof self
|
||||
|
||||
=== tests/cases/conformance/node/index.cts ===
|
||||
// cjs format file
|
||||
import * as self from "@scope/package";
|
||||
>self : typeof self
|
||||
|
||||
self;
|
||||
>self : typeof self
|
||||
|
21
tests/cases/conformance/node/nodePackageSelfNameScoped.ts
Normal file
21
tests/cases/conformance/node/nodePackageSelfNameScoped.ts
Normal file
|
@ -0,0 +1,21 @@
|
|||
// @module: node12,nodenext
|
||||
// @declaration: true
|
||||
// @filename: index.ts
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
// @filename: index.mts
|
||||
// esm format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
// @filename: index.cts
|
||||
// cjs format file
|
||||
import * as self from "@scope/package";
|
||||
self;
|
||||
// @filename: package.json
|
||||
{
|
||||
"name": "@scope/package",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"exports": "./index.js"
|
||||
}
|
Loading…
Reference in a new issue