Skip to content

Commit 35a949d

Browse files
committed
provide ES modules for tree-shaking packagers
1 parent 07d7143 commit 35a949d

File tree

6 files changed

+67
-22
lines changed

6 files changed

+67
-22
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
node_modules/
22
dist/
3-
dist.es5/
3+
dist.*/
44
build/
55
.nyc_output/
66
coverage/

package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
"author": "The MessagePack community",
66
"license": "ISC",
77
"main": "./dist/index.js",
8-
"browser": "./dist.es5/msgpack.min.js",
8+
"browser": "./dist.es5+umd/msgpack.min.js",
9+
"module": "./dist.es5+esm/index.js",
910
"types": "./dist/index.d.ts",
1011
"sideEffects": false,
1112
"scripts": {
1213
"build": "npm publish --dry-run",
13-
"prepare": "npm run clean && tsc -p tsconfig.dist.json && webpack",
14+
"prepare": "npm run clean && webpack && tsc --build tsconfig.dist.json tsconfig.dist.es5+esm.json && ts-node tools/esmify.ts dist.es5+esm/*.js dist.es5+esm/*/*.js",
1415
"prepublishOnly": "run-p 'test:dist:*' && npm run test:browser",
1516
"clean": "rimraf build dist dist.*",
1617
"test": "mocha 'test/**/*.test.ts'",
@@ -88,6 +89,7 @@
8889
"files": [
8990
"src/**/*.*",
9091
"dist/**/*.*",
91-
"dist.es5/**/*.*"
92+
"dist.es5/**/*.*",
93+
"dist.es5+esm/**/*.*"
9294
]
9395
}

src/index.ts

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,46 @@
11
// Main Functions:
22

3-
export { encode, EncodeOptions } from "./encode";
4-
export { decode, DecodeOptions } from "./decode";
5-
export { decodeAsync, decodeArrayStream, decodeStream } from "./decodeAsync";
3+
import { encode } from "./encode";
4+
export { encode };
5+
import type { EncodeOptions } from "./encode";
6+
export type { EncodeOptions };
67

7-
/**
8-
* @experimental `Decoder` is exported for experimental use.
9-
*/
10-
export { Decoder } from "./Decoder";
8+
import { decode } from "./decode";
9+
export { decode };
10+
import type { DecodeOptions } from "./decode";
11+
export { DecodeOptions };
1112

12-
/**
13-
* @experimental `Encoder` is exported for experimental use.
14-
*/
15-
export { Encoder } from "./Encoder";
13+
import { decodeAsync, decodeArrayStream, decodeStream } from "./decodeAsync";
14+
export { decodeAsync, decodeArrayStream, decodeStream };
15+
16+
import { Decoder } from "./Decoder";
17+
export { Decoder };
18+
19+
import { Encoder } from "./Encoder";
20+
export { Encoder };
1621

1722
// Utilitiies for Extension Types:
1823

19-
export { ExtensionCodec, ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from "./ExtensionCodec";
20-
export { ExtData } from "./ExtData";
21-
export {
24+
import { ExtensionCodec } from "./ExtensionCodec";
25+
export { ExtensionCodec };
26+
import type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from "./ExtensionCodec";
27+
export type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType };
28+
import { ExtData } from "./ExtData";
29+
export { ExtData };
30+
31+
import {
2232
EXT_TIMESTAMP,
2333
encodeDateToTimeSpec,
2434
encodeTimeSpecToTimestamp,
2535
decodeTimestampToTimeSpec,
2636
encodeTimestampExtension,
2737
decodeTimestampExtension,
2838
} from "./timestamp";
39+
export {
40+
EXT_TIMESTAMP,
41+
encodeDateToTimeSpec,
42+
encodeTimeSpecToTimestamp,
43+
decodeTimestampToTimeSpec,
44+
encodeTimestampExtension,
45+
decodeTimestampExtension,
46+
};

tools/esmify.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!ts-node
2+
/* eslint-disable no-console */
3+
4+
import fs from "fs";
5+
6+
const files = process.argv.slice(2);
7+
8+
for (const file of files) {
9+
console.info(`Processing ${file}`);
10+
const content = fs.readFileSync(file).toString("utf8");
11+
const newContent = content.replace(/\bfrom "([^"]+)";/g, 'from "$1.js";');
12+
fs.writeFileSync(file, newContent);
13+
}

tsconfig.dist.es5+esm.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"extends": "./tsconfig.json",
3+
"compilerOptions": {
4+
"target": "es5",
5+
"module": "es2015",
6+
"outDir": "./dist.es5+esm",
7+
"declaration": false,
8+
"noEmitOnError": true,
9+
"incremental": false
10+
},
11+
"include": ["src/**/*.ts"]
12+
}

webpack.config.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import path from "path";
2-
// @ts-ignore
2+
// @ts-expect-error
33
import webpack from "webpack";
4-
// @ts-ignore
4+
// @ts-expect-error
55
import { CheckEsVersionPlugin } from "@bitjourney/check-es-version-webpack-plugin";
6-
// @ts-ignore
6+
// @ts-expect-error
77
import _ from "lodash";
88

99
const config = {
1010
mode: "production",
1111

1212
entry: "./src/index.ts",
1313
output: {
14-
path: path.resolve(__dirname, "dist.es5"),
14+
path: path.resolve(__dirname, "dist.es5+umd"),
1515
library: "MessagePack",
1616
libraryTarget: "umd",
1717
globalObject: "this",

0 commit comments

Comments
 (0)