diff --git a/api/package.json b/api/package.json index 021da6dc..ed227071 100644 --- a/api/package.json +++ b/api/package.json @@ -12,14 +12,14 @@ "Environments" ], "main": "./out/cjs/main.cjs", - "types": "./out/cjs/main.d.ts", + "types": "./out/types/main.d.ts", "exports": { "import": { - "types": "./out/esm/main.d.ts", + "types": "./out/types/main.d.ts", "default": "./out/esm/main.mjs" }, "require": { - "types": "./out/cjs/main.d.ts", + "types": "./out/types/main.d.ts", "default": "./out/cjs/main.cjs" } }, @@ -41,7 +41,8 @@ "prepack": "npm run all:publish", "all:publish": "git clean -xfd . && npm install && npm run copy:sources && npm run compile", "copy:sources": "node ./scripts/copy-sources.cjs", - "compile": "npm run compile:esm && npm run compile:cjs", + "compile": "npm run clean && npm run compile:types && npm run compile:esm && npm run compile:cjs", + "compile:types": "tsc -b ./tsconfig.types.json", "compile:esm": "tsc -b ./tsconfig.esm.json && mve out/esm/main.js out/esm/main.mjs && node -e \"require('fs').writeFileSync('out/esm/package.json', '{\\\"type\\\":\\\"module\\\"}')\"", "compile:cjs": "tsc -b ./tsconfig.cjs.json && mve out/cjs/main.js out/cjs/main.cjs", "clean": "node -e \"const fs = require('fs'); fs.rmSync('./out', { recursive: true, force: true });\"", diff --git a/api/scripts/test-package.cjs b/api/scripts/test-package.cjs index d6aa287e..7feb1180 100644 --- a/api/scripts/test-package.cjs +++ b/api/scripts/test-package.cjs @@ -97,14 +97,14 @@ try { ); const installedPackageJson = JSON.parse(fs.readFileSync(path.join(installedPackageRoot, 'package.json'), 'utf8')); assert.strictEqual(installedPackageJson.main, './out/cjs/main.cjs'); - assert.strictEqual(installedPackageJson.types, './out/cjs/main.d.ts'); + assert.strictEqual(installedPackageJson.types, './out/types/main.d.ts'); assert.deepStrictEqual(installedPackageJson.exports, { import: { - types: './out/esm/main.d.ts', + types: './out/types/main.d.ts', default: './out/esm/main.mjs', }, require: { - types: './out/cjs/main.d.ts', + types: './out/types/main.d.ts', default: './out/cjs/main.cjs', }, }); @@ -119,6 +119,17 @@ try { ]) { assert.ok(fs.statSync(path.resolve(installedPackageRoot, target)).isFile(), `${target} must be a file`); } + for (const runtimeOutput of ['esm', 'cjs']) { + const runtimeOutputRoot = path.join(installedPackageRoot, 'out', runtimeOutput); + const duplicateDeclarations = fs + .readdirSync(runtimeOutputRoot, { recursive: true }) + .filter((entry) => entry.endsWith('.d.ts')); + assert.deepStrictEqual( + duplicateDeclarations, + [], + `${runtimeOutputRoot} must not contain declaration files: ${duplicateDeclarations.join(', ')}`, + ); + } const requireFromConsumer = createRequire(path.join(testRoot, 'legacy', 'consumer.cjs')); const commonJsModule = requireFromConsumer('@vscode/python-environments'); diff --git a/api/tsconfig.base.json b/api/tsconfig.base.json index 67c9ca0b..8d00e11f 100644 --- a/api/tsconfig.base.json +++ b/api/tsconfig.base.json @@ -2,7 +2,7 @@ "compilerOptions": { "target": "ES2020", "lib": ["ES2020"], - "declaration": true, + "declaration": false, "strict": true, "rootDir": "src", "esModuleInterop": true, diff --git a/api/tsconfig.types.json b/api/tsconfig.types.json new file mode 100644 index 00000000..9f5dcf23 --- /dev/null +++ b/api/tsconfig.types.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true, + "module": "esnext", + "moduleResolution": "bundler", + "outDir": "./out/types" + } +}