Skip to content

Commit cf926e0

Browse files
authored
Merge pull request #284 from msgpack/gfx/pkg_exports
add exports for ESM & CJS dual packages
2 parents 5e707a4 + 3934a8c commit cf926e0

File tree

3 files changed

+46
-19
lines changed

3 files changed

+46
-19
lines changed

package.json

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,24 @@
88
"module": "./dist.esm/index.mjs",
99
"cdn": "./dist.umd/msgpack.min.js",
1010
"unpkg": "./dist.umd/msgpack.min.js",
11-
"types": "./dist.esm/index.d.ts",
11+
"types": "./dist.esm/index.d.mts",
12+
"exports": {
13+
".": {
14+
"import": {
15+
"types": "./dist.esm/index.d.mts",
16+
"default": "./dist.esm/index.mjs"
17+
},
18+
"require": {
19+
"types": "./dist.cjs/index.d.cts",
20+
"default": "./dist.cjs/index.cjs"
21+
}
22+
},
23+
"./package.json": "./package.json"
24+
},
1225
"sideEffects": false,
1326
"scripts": {
1427
"build": "npm publish --dry-run",
15-
"prepare": "npm run clean && webpack --bail && tsgo --build tsconfig.dist.cjs.json tsconfig.dist.esm.json && tsimp tools/fix-ext.mts --mjs dist.esm/*.js dist.esm/*/*.js && tsimp tools/fix-ext.mts --cjs dist.cjs/*.js dist.cjs/*/*.js",
28+
"prepare": "npm run clean && webpack --bail && tsgo --build tsconfig.dist.cjs.json tsconfig.dist.esm.json && tsimp tools/fix-ext.mts --mjs dist.esm/*.js dist.esm/*/*.js dist.esm/*.d.ts dist.esm/*/*.d.ts && tsimp tools/fix-ext.mts --cjs dist.cjs/*.js dist.cjs/*/*.js dist.cjs/*.d.ts dist.cjs/*/*.d.ts",
1629
"prepublishOnly": "npm run test:dist",
1730
"clean": "rimraf build dist dist.*",
1831
"test": "mocha 'test/**/*.test.ts'",

tools/fix-ext.mts

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,39 @@ const mode = process.argv[2]; // --cjs or --mjs
44
const files = process.argv.slice(3);
55

66
const ext = mode === "--cjs" ? "cjs" : "mjs";
7+
const dtsExt = mode === "--cjs" ? "d.cts" : "d.mts";
78

89
console.info(`Fixing ${mode} files with extension ${ext}`);
910

1011
for (const file of files) {
11-
const fileMjs = file.replace(/\.js$/, `.${ext}`);
12-
console.info(`Processing ${file} => ${fileMjs}`);
13-
// .js => .mjs
14-
const content = fs.readFileSync(file).toString("utf-8");
15-
const newContent = content
16-
.replace(/\bfrom "(\.\.?\/[^"]+)\.js";/g, `from "$1.${ext}";`)
17-
.replace(/\bimport "(\.\.?\/[^"]+)\.js";/g, `import "$1.${ext}";`)
18-
.replace(/\brequire\("(\.\.?\/[^"]+)\.js"\)/g, `require("$1.${ext}");`)
19-
.replace(/\/\/# sourceMappingURL=(.+)\.js\.map$/, `//# sourceMappingURL=$1.${ext}.map`);
20-
fs.writeFileSync(fileMjs, newContent);
21-
fs.unlinkSync(file);
12+
if (file.endsWith(".d.ts")) {
13+
// Handle declaration files: .d.ts => .d.mts or .d.cts
14+
const newFile = file.replace(/\.d\.ts$/, `.${dtsExt}`);
15+
console.info(`Processing ${file} => ${newFile}`);
16+
const content = fs.readFileSync(file).toString("utf-8");
17+
// Fix import paths: .ts => .mjs or .cjs
18+
const newContent = content
19+
.replace(/\bfrom "(\.\.?\/[^"]+)\.ts";/g, `from "$1.${ext}";`)
20+
.replace(/\bimport "(\.\.?\/[^"]+)\.ts";/g, `import "$1.${ext}";`);
21+
fs.writeFileSync(newFile, newContent);
22+
fs.unlinkSync(file);
23+
} else if (file.endsWith(".js")) {
24+
// Handle JS files: .js => .mjs or .cjs
25+
const fileMjs = file.replace(/\.js$/, `.${ext}`);
26+
console.info(`Processing ${file} => ${fileMjs}`);
27+
const content = fs.readFileSync(file).toString("utf-8");
28+
const newContent = content
29+
.replace(/\bfrom "(\.\.?\/[^"]+)\.js";/g, `from "$1.${ext}";`)
30+
.replace(/\bimport "(\.\.?\/[^"]+)\.js";/g, `import "$1.${ext}";`)
31+
.replace(/\brequire\("(\.\.?\/[^"]+)\.js"\)/g, `require("$1.${ext}");`)
32+
.replace(/\/\/# sourceMappingURL=(.+)\.js\.map$/, `//# sourceMappingURL=$1.${ext}.map`);
33+
fs.writeFileSync(fileMjs, newContent);
34+
fs.unlinkSync(file);
2235

23-
// .js.map => .mjs.map
24-
const mapping = JSON.parse(fs.readFileSync(`${file}.map`).toString("utf-8"));
25-
mapping.file = mapping.file.replace(/\.js$/, ext);
26-
fs.writeFileSync(`${fileMjs}.map`, JSON.stringify(mapping));
27-
fs.unlinkSync(`${file}.map`);
36+
// .js.map => .mjs.map
37+
const mapping = JSON.parse(fs.readFileSync(`${file}.map`).toString("utf-8"));
38+
mapping.file = mapping.file.replace(/\.js$/, ext);
39+
fs.writeFileSync(`${fileMjs}.map`, JSON.stringify(mapping));
40+
fs.unlinkSync(`${file}.map`);
41+
}
2842
}

tsconfig.dist.cjs.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"compilerOptions": {
44
"module": "CommonJS",
55
"outDir": "./dist.cjs",
6-
"declaration": false,
6+
"declaration": true,
77
"noEmitOnError": true,
88
"noEmit": false,
99
"rewriteRelativeImportExtensions": true,

0 commit comments

Comments
 (0)