Skip to content

Commit a7a762a

Browse files
committed
build: share API declarations across module formats
Emit the npm package declarations once and point both ESM and CommonJS exports at the shared type tree. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: cb57f94f-69e9-4501-a84e-7661b191ceba
1 parent 556b258 commit a7a762a

4 files changed

Lines changed: 25 additions & 8 deletions

File tree

‎api/package.json‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
"Environments"
1313
],
1414
"main": "./out/cjs/main.cjs",
15-
"types": "./out/cjs/main.d.ts",
15+
"types": "./out/types/main.d.ts",
1616
"exports": {
1717
"import": {
18-
"types": "./out/esm/main.d.ts",
18+
"types": "./out/types/main.d.ts",
1919
"default": "./out/esm/main.mjs"
2020
},
2121
"require": {
22-
"types": "./out/cjs/main.d.ts",
22+
"types": "./out/types/main.d.ts",
2323
"default": "./out/cjs/main.cjs"
2424
}
2525
},
@@ -41,7 +41,8 @@
4141
"prepack": "npm run all:publish",
4242
"all:publish": "git clean -xfd . && npm install && npm run copy:sources && npm run compile",
4343
"copy:sources": "node ./scripts/copy-sources.cjs",
44-
"compile": "npm run compile:esm && npm run compile:cjs",
44+
"compile": "npm run clean && npm run compile:types && npm run compile:esm && npm run compile:cjs",
45+
"compile:types": "tsc -b ./tsconfig.types.json",
4546
"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\\\"}')\"",
4647
"compile:cjs": "tsc -b ./tsconfig.cjs.json && mve out/cjs/main.js out/cjs/main.cjs",
4748
"clean": "node -e \"const fs = require('fs'); fs.rmSync('./out', { recursive: true, force: true });\"",

‎api/scripts/test-package.cjs‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,14 @@ try {
9797
);
9898
const installedPackageJson = JSON.parse(fs.readFileSync(path.join(installedPackageRoot, 'package.json'), 'utf8'));
9999
assert.strictEqual(installedPackageJson.main, './out/cjs/main.cjs');
100-
assert.strictEqual(installedPackageJson.types, './out/cjs/main.d.ts');
100+
assert.strictEqual(installedPackageJson.types, './out/types/main.d.ts');
101101
assert.deepStrictEqual(installedPackageJson.exports, {
102102
import: {
103-
types: './out/esm/main.d.ts',
103+
types: './out/types/main.d.ts',
104104
default: './out/esm/main.mjs',
105105
},
106106
require: {
107-
types: './out/cjs/main.d.ts',
107+
types: './out/types/main.d.ts',
108108
default: './out/cjs/main.cjs',
109109
},
110110
});
@@ -119,6 +119,12 @@ try {
119119
]) {
120120
assert.ok(fs.statSync(path.resolve(installedPackageRoot, target)).isFile(), `${target} must be a file`);
121121
}
122+
for (const duplicateDeclaration of ['./out/esm/main.d.ts', './out/cjs/main.d.ts']) {
123+
assert.ok(
124+
!fs.existsSync(path.resolve(installedPackageRoot, duplicateDeclaration)),
125+
`${duplicateDeclaration} must not duplicate the shared declaration entry point`,
126+
);
127+
}
122128

123129
const requireFromConsumer = createRequire(path.join(testRoot, 'legacy', 'consumer.cjs'));
124130
const commonJsModule = requireFromConsumer('@vscode/python-environments');

‎api/tsconfig.base.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"compilerOptions": {
33
"target": "ES2020",
44
"lib": ["ES2020"],
5-
"declaration": true,
5+
"declaration": false,
66
"strict": true,
77
"rootDir": "src",
88
"esModuleInterop": true,

‎api/tsconfig.types.json‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extends": "./tsconfig.base.json",
3+
"compilerOptions": {
4+
"declaration": true,
5+
"emitDeclarationOnly": true,
6+
"module": "esnext",
7+
"moduleResolution": "bundler",
8+
"outDir": "./out/types"
9+
}
10+
}

0 commit comments

Comments
 (0)