Skip to content

Commit 104bb66

Browse files
committed
Address PR comments
1 parent ea372a6 commit 104bb66

3 files changed

Lines changed: 50 additions & 17 deletions

File tree

api/scripts/test-package.cjs

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ assert.strictEqual(packResult.length, 1, 'Expected npm pack to produce exactly o
3131
const tarballPath = path.join(packageRoot, packResult[0].filename);
3232
const testRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'python-environments-api-'));
3333

34+
function canonicalPath(value) {
35+
return fs.realpathSync.native(path.resolve(value));
36+
}
37+
3438
try {
3539
fs.writeFileSync(
3640
path.join(testRoot, 'package.json'),
@@ -73,28 +77,50 @@ try {
7377
runNodeScript(typescriptCli, ['--project', path.join(consumerRoot, 'tsconfig.json')], packageRoot);
7478
}
7579

80+
const installedPackageRoot = path.join(testRoot, 'node_modules', '@vscode', 'python-environments');
81+
const installedPackageJson = JSON.parse(fs.readFileSync(path.join(installedPackageRoot, 'package.json'), 'utf8'));
82+
assert.strictEqual(installedPackageJson.main, './out/cjs/main.cjs');
83+
assert.strictEqual(installedPackageJson.types, './out/cjs/main.d.ts');
84+
assert.deepStrictEqual(installedPackageJson.exports, {
85+
import: {
86+
types: './out/esm/main.d.ts',
87+
default: './out/esm/main.mjs',
88+
},
89+
require: {
90+
types: './out/cjs/main.d.ts',
91+
default: './out/cjs/main.cjs',
92+
},
93+
});
94+
95+
for (const target of [
96+
installedPackageJson.main,
97+
installedPackageJson.types,
98+
installedPackageJson.exports.import.types,
99+
installedPackageJson.exports.import.default,
100+
installedPackageJson.exports.require.types,
101+
installedPackageJson.exports.require.default,
102+
]) {
103+
assert.ok(fs.statSync(path.resolve(installedPackageRoot, target)).isFile(), `${target} must be a file`);
104+
}
105+
76106
const requireFromConsumer = createRequire(path.join(testRoot, 'legacy', 'consumer.cjs'));
77107
assert.strictEqual(
78-
requireFromConsumer.resolve('@vscode/python-environments'),
79-
path.join(testRoot, 'node_modules', '@vscode', 'python-environments', 'out', 'cjs', 'main.cjs'),
108+
canonicalPath(requireFromConsumer.resolve('@vscode/python-environments')),
109+
canonicalPath(path.join(installedPackageRoot, installedPackageJson.exports.require.default)),
80110
'CommonJS consumers should resolve the packaged CommonJS entry point',
81111
);
82112

83113
const esmEntryPoint = execFileSync(
84114
process.execPath,
85-
[
86-
'--input-type=module',
87-
'--eval',
88-
"console.log(import.meta.resolve('@vscode/python-environments'))",
89-
],
115+
['--input-type=module', '--eval', "console.log(import.meta.resolve('@vscode/python-environments'))"],
90116
{
91117
cwd: path.join(testRoot, 'modern'),
92118
encoding: 'utf8',
93119
},
94120
).trim();
95121
assert.strictEqual(
96-
fileURLToPath(esmEntryPoint),
97-
path.join(testRoot, 'node_modules', '@vscode', 'python-environments', 'out', 'esm', 'main.mjs'),
122+
canonicalPath(fileURLToPath(esmEntryPoint)),
123+
canonicalPath(path.join(installedPackageRoot, installedPackageJson.exports.import.default)),
98124
'ES module consumers should resolve the packaged ES module entry point',
99125
);
100126
} finally {

api/test/consumer.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@ import type {
55
PythonPackageGetterApi,
66
} from '@vscode/python-environments';
77

8-
const getAvailableVersions: PythonPackageGetterApi['getPackageAvailableVersions'] = async (
9-
_environment: PythonEnvironment,
10-
_packageName: string,
11-
): Promise<Pep440Version[] | undefined> => [];
8+
type Equal<Left, Right> =
9+
(<Value>() => Value extends Left ? 1 : 2) extends <Value>() => Value extends Right ? 1 : 2 ? true : false;
1210

13-
const refreshPackages: PackageManager['refresh'] = async (_environment: PythonEnvironment): Promise<void> => {};
11+
type AvailableVersionsReturn = ReturnType<PythonPackageGetterApi['getPackageAvailableVersions']>;
12+
type RefreshReturn = ReturnType<PackageManager['refresh']>;
1413

15-
void getAvailableVersions;
16-
void refreshPackages;
14+
const availableVersionsReturnIsExact: Equal<AvailableVersionsReturn, Promise<Pep440Version[] | undefined>> = true;
15+
const refreshReturnIsExact: Equal<RefreshReturn, Promise<void>> = true;
16+
17+
declare const api: PythonPackageGetterApi;
18+
declare const environment: PythonEnvironment;
19+
const availableVersions: Promise<Pep440Version[] | undefined> = api.getPackageAvailableVersions(environment, 'example');
20+
21+
void availableVersionsReturnIsExact;
22+
void refreshReturnIsExact;
23+
void availableVersions;

build/azure-pipeline.npm.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ extends:
7575
workingDirectory: $(Build.SourcesDirectory)/api
7676
displayName: Install package dependencies
7777

78-
- script: cp ../src/api.ts src/main.ts
78+
- script: mkdir -p src && cp ../src/api.ts src/main.ts
7979
workingDirectory: $(Build.SourcesDirectory)/api
8080
displayName: Copy src/api.ts to API package entry point
8181

0 commit comments

Comments
 (0)