diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f4b790ef..a40b5139 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -62,7 +62,7 @@ jobs: with: deno-version: "v2.x" - run: npm ci - - run: deno test test/deno_test.ts + - run: npm run test:deno bun: runs-on: ubuntu-latest @@ -72,5 +72,5 @@ jobs: - name: Setup Bun uses: oven-sh/setup-bun@v2 - run: bun install - - run: bun test test/bun.spec.ts + - run: npm run test:bun diff --git a/.mocharc.js b/.mocharc.js index cc57238c..73ab2e7a 100644 --- a/.mocharc.js +++ b/.mocharc.js @@ -1,10 +1,9 @@ -'use strict'; - -require("ts-node/register"); +"use strict"; module.exports = { diff: true, - extension: ['ts'], - package: '../package.json', + extension: ["ts"], + package: "../package.json", timeout: 10000, + require: ["tsimp"], }; diff --git a/package-lock.json b/package-lock.json index c48ca424..60b7ffdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,6 +40,7 @@ "rimraf": "latest", "ts-loader": "latest", "ts-node": "latest", + "tsimp": "^2.0.12", "typescript": "latest", "webpack": "latest", "webpack-cli": "latest" @@ -293,6 +294,23 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@isaacs/cached": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/cached/-/cached-1.0.1.tgz", + "integrity": "sha512-7kGcJ9Hc1f4qpTApWz3swxbF9Qv1NF/GxuPtXeTptbsgvJIoufSd0h854Nq/2bw80F5C1onsFgEI05l+q0e4vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/catcher": "^1.0.0" + } + }, + "node_modules/@isaacs/catcher": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@isaacs/catcher/-/catcher-1.0.4.tgz", + "integrity": "sha512-g2klMwbnguClWNnCeQ1zYaDJsvPbIbnjdJPDE0z09MqoejJDZSLK5vIKiClq2Bkg5ubuI8vaN6wfIUi5GYzMVA==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -5361,6 +5379,16 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -6168,6 +6196,90 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sock-daemon": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/sock-daemon/-/sock-daemon-1.4.2.tgz", + "integrity": "sha512-IzbegWshWWR+UzQ7487mbdYNmfJ1jXUXQBUHooqtpylO+aW0vMVbFN2d2ug3CSPZ0wbG7ZTTGwpUuthIDFIOGg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "rimraf": "^5.0.5", + "signal-exit": "^4.1.0", + "socket-post-message": "^1.0.3" + }, + "engines": { + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" + } + }, + "node_modules/sock-daemon/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sock-daemon/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sock-daemon/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sock-daemon/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/socket-post-message": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/socket-post-message/-/socket-post-message-1.0.3.tgz", + "integrity": "sha512-UhJaB3xR2oF+HvddFOq2cBZi4zVKOHvdiBo+BaScNxsEUg3TLWSP8BkweKfe07kfH1thjn1hJR0af/w1EtBFjg==", + "dev": true + }, "node_modules/socket.io": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", @@ -6764,6 +6876,49 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tsimp": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/tsimp/-/tsimp-2.0.12.tgz", + "integrity": "sha512-0XbhMfDB1BlN4iuheUaCUVB2iAjWb9z6Ik/6WcxREc4MhjYmkScK+CRNf34wkDO8wMvmFBb0lYdrd8H44g9yjg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cached": "^1.0.1", + "@isaacs/catcher": "^1.0.4", + "foreground-child": "^3.1.1", + "mkdirp": "^3.0.1", + "pirates": "^4.0.6", + "rimraf": "^6.0.1", + "signal-exit": "^4.1.0", + "sock-daemon": "^1.4.2", + "walk-up-path": "^4.0.0" + }, + "bin": { + "tsimp": "dist/esm/bin.mjs" + }, + "engines": { + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" + }, + "peerDependencies": { + "typescript": "^5.1.0" + } + }, + "node_modules/tsimp/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7058,6 +7213,16 @@ "node": ">=0.10.0" } }, + "node_modules/walk-up-path": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", + "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", diff --git a/package.json b/package.json index 30601fe4..16b49f9a 100644 --- a/package.json +++ b/package.json @@ -4,21 +4,22 @@ "description": "MessagePack for ECMA-262/JavaScript/TypeScript", "author": "The MessagePack community", "license": "ISC", - "main": "./dist/index.js", + "main": "./dist.cjs/index.js", "module": "./dist.esm/index.mjs", "cdn": "./dist.umd/msgpack.min.js", "unpkg": "./dist.umd/msgpack.min.js", - "types": "./dist/index.d.ts", + "types": "./dist.esm/index.d.ts", "sideEffects": false, "scripts": { "build": "npm publish --dry-run", - "prepare": "npm run clean && webpack --bail && tsc --build tsconfig.dist.json tsconfig.dist.esm.json && ts-node tools/esmify.ts dist.esm/*.js dist.esm/*/*.js", + "prepare": "npm run clean && webpack --bail && tsc --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", "prepublishOnly": "npm run test:dist", "clean": "rimraf build dist dist.*", "test": "mocha 'test/**/*.test.ts'", "test:dist": "npm run lint && npm run test && npm run test:deno", "test:cover": "npm run cover:clean && npx nyc --no-clean npm run 'test' && npm run cover:report", "test:deno": "deno test test/deno_test.ts", + "test:bun": "bun test test/bun.spec.ts", "test:fuzz": "npm exec --yes -- jsfuzz@git+https://gitlab.com/gitlab-org/security-products/analyzers/fuzzers/jsfuzz.git#39e6cf16613a0e30c7a7953f62e64292dbd5d3f3 --fuzzTime 60 --no-versifier test/decode.jsfuzz.js corpus", "cover:clean": "rimraf .nyc_output coverage/", "cover:report": "npx nyc report --reporter=text-summary --reporter=html --reporter=json", @@ -81,6 +82,7 @@ "rimraf": "latest", "ts-loader": "latest", "ts-node": "latest", + "tsimp": "latest", "typescript": "latest", "webpack": "latest", "webpack-cli": "latest" diff --git a/src/CachedKeyDecoder.ts b/src/CachedKeyDecoder.ts index f410854c..73524f03 100644 --- a/src/CachedKeyDecoder.ts +++ b/src/CachedKeyDecoder.ts @@ -1,4 +1,4 @@ -import { utf8DecodeJs } from "./utils/utf8"; +import { utf8DecodeJs } from "./utils/utf8.ts"; const DEFAULT_MAX_KEY_LENGTH = 16; const DEFAULT_MAX_LENGTH_PER_KEY = 16; diff --git a/src/Decoder.ts b/src/Decoder.ts index 55109d29..950e7af9 100644 --- a/src/Decoder.ts +++ b/src/Decoder.ts @@ -1,11 +1,11 @@ -import { prettyByte } from "./utils/prettyByte"; -import { ExtensionCodec, ExtensionCodecType } from "./ExtensionCodec"; -import { getInt64, getUint64, UINT32_MAX } from "./utils/int"; -import { utf8Decode } from "./utils/utf8"; -import { ensureUint8Array } from "./utils/typedArrays"; -import { CachedKeyDecoder, KeyDecoder } from "./CachedKeyDecoder"; -import { DecodeError } from "./DecodeError"; -import type { ContextOf } from "./context"; +import { prettyByte } from "./utils/prettyByte.ts"; +import { ExtensionCodec, ExtensionCodecType } from "./ExtensionCodec.ts"; +import { getInt64, getUint64, UINT32_MAX } from "./utils/int.ts"; +import { utf8Decode } from "./utils/utf8.ts"; +import { ensureUint8Array } from "./utils/typedArrays.ts"; +import { CachedKeyDecoder, KeyDecoder } from "./CachedKeyDecoder.ts"; +import { DecodeError } from "./DecodeError.ts"; +import type { ContextOf } from "./context.ts"; export type DecoderOptions = Readonly< Partial<{ diff --git a/src/Encoder.ts b/src/Encoder.ts index af32b336..b52a7c19 100644 --- a/src/Encoder.ts +++ b/src/Encoder.ts @@ -1,9 +1,9 @@ -import { utf8Count, utf8Encode } from "./utils/utf8"; -import { ExtensionCodec, ExtensionCodecType } from "./ExtensionCodec"; -import { setInt64, setUint64 } from "./utils/int"; -import { ensureUint8Array } from "./utils/typedArrays"; -import type { ExtData } from "./ExtData"; -import type { ContextOf } from "./context"; +import { utf8Count, utf8Encode } from "./utils/utf8.ts"; +import { ExtensionCodec, ExtensionCodecType } from "./ExtensionCodec.ts"; +import { setInt64, setUint64 } from "./utils/int.ts"; +import { ensureUint8Array } from "./utils/typedArrays.ts"; +import type { ExtData } from "./ExtData.ts"; +import type { ContextOf } from "./context.ts"; export const DEFAULT_MAX_DEPTH = 100; export const DEFAULT_INITIAL_BUFFER_SIZE = 2048; diff --git a/src/ExtensionCodec.ts b/src/ExtensionCodec.ts index 5bd2200f..5691579a 100644 --- a/src/ExtensionCodec.ts +++ b/src/ExtensionCodec.ts @@ -1,7 +1,7 @@ // ExtensionCodec to handle MessagePack extensions -import { ExtData } from "./ExtData"; -import { timestampExtension } from "./timestamp"; +import { ExtData } from "./ExtData.ts"; +import { timestampExtension } from "./timestamp.ts"; export type ExtensionDecoderType = ( data: Uint8Array, diff --git a/src/decode.ts b/src/decode.ts index e4857ae4..685fc10d 100644 --- a/src/decode.ts +++ b/src/decode.ts @@ -1,6 +1,6 @@ -import { Decoder } from "./Decoder"; -import type { DecoderOptions } from "./Decoder"; -import type { SplitUndefined } from "./context"; +import { Decoder } from "./Decoder.ts"; +import type { DecoderOptions } from "./Decoder.ts"; +import type { SplitUndefined } from "./context.ts"; /** * It decodes a single MessagePack object in a buffer. diff --git a/src/decodeAsync.ts b/src/decodeAsync.ts index d4f91dc0..9534f07b 100644 --- a/src/decodeAsync.ts +++ b/src/decodeAsync.ts @@ -1,8 +1,8 @@ -import { Decoder } from "./Decoder"; -import { ensureAsyncIterable } from "./utils/stream"; -import type { DecoderOptions } from "./Decoder"; -import type { ReadableStreamLike } from "./utils/stream"; -import type { SplitUndefined } from "./context"; +import { Decoder } from "./Decoder.ts"; +import { ensureAsyncIterable } from "./utils/stream.ts"; +import type { DecoderOptions } from "./Decoder.ts"; +import type { ReadableStreamLike } from "./utils/stream.ts"; +import type { SplitUndefined } from "./context.ts"; /** * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty. diff --git a/src/encode.ts b/src/encode.ts index 392b7fe0..9a9d07a1 100644 --- a/src/encode.ts +++ b/src/encode.ts @@ -1,6 +1,6 @@ -import { Encoder } from "./Encoder"; -import type { EncoderOptions } from "./Encoder"; -import type { SplitUndefined } from "./context"; +import { Encoder } from "./Encoder.ts"; +import type { EncoderOptions } from "./Encoder.ts"; +import type { SplitUndefined } from "./context.ts"; /** * It encodes `value` in the MessagePack format and diff --git a/src/index.ts b/src/index.ts index 840f25dd..f4550e2c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,33 +1,33 @@ // Main Functions: -import { encode } from "./encode"; +import { encode } from "./encode.ts"; export { encode }; -import { decode, decodeMulti } from "./decode"; +import { decode, decodeMulti } from "./decode.ts"; export { decode, decodeMulti }; -import { decodeAsync, decodeArrayStream, decodeMultiStream } from "./decodeAsync"; +import { decodeAsync, decodeArrayStream, decodeMultiStream } from "./decodeAsync.ts"; export { decodeAsync, decodeArrayStream, decodeMultiStream }; -import { Decoder } from "./Decoder"; +import { Decoder } from "./Decoder.ts"; export { Decoder }; -import type { DecoderOptions } from "./Decoder"; +import type { DecoderOptions } from "./Decoder.ts"; export type { DecoderOptions }; -import { DecodeError } from "./DecodeError"; +import { DecodeError } from "./DecodeError.ts"; export { DecodeError }; -import { Encoder } from "./Encoder"; +import { Encoder } from "./Encoder.ts"; export { Encoder }; -import type { EncoderOptions } from "./Encoder"; +import type { EncoderOptions } from "./Encoder.ts"; export type { EncoderOptions }; // Utilities for Extension Types: -import { ExtensionCodec } from "./ExtensionCodec"; +import { ExtensionCodec } from "./ExtensionCodec.ts"; export { ExtensionCodec }; -import type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from "./ExtensionCodec"; +import type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from "./ExtensionCodec.ts"; export type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType }; -import { ExtData } from "./ExtData"; +import { ExtData } from "./ExtData.ts"; export { ExtData }; import { @@ -37,7 +37,7 @@ import { decodeTimestampToTimeSpec, encodeTimestampExtension, decodeTimestampExtension, -} from "./timestamp"; +} from "./timestamp.ts"; export { EXT_TIMESTAMP, encodeDateToTimeSpec, diff --git a/src/timestamp.ts b/src/timestamp.ts index e3fe0155..3c1e9dbb 100644 --- a/src/timestamp.ts +++ b/src/timestamp.ts @@ -1,6 +1,6 @@ // https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type -import { DecodeError } from "./DecodeError"; -import { getInt64, setInt64 } from "./utils/int"; +import { DecodeError } from "./DecodeError.ts"; +import { getInt64, setInt64 } from "./utils/int.ts"; export const EXT_TIMESTAMP = -1; diff --git a/test/CachedKeyDecoder.test.ts b/test/CachedKeyDecoder.test.ts index 4e9dd06a..8cb16f02 100644 --- a/test/CachedKeyDecoder.test.ts +++ b/test/CachedKeyDecoder.test.ts @@ -1,7 +1,7 @@ import assert from "assert"; -import { CachedKeyDecoder } from "../src/CachedKeyDecoder"; -import { utf8EncodeJs, utf8Count } from "../src/utils/utf8"; -import type { KeyDecoder } from "../src/CachedKeyDecoder"; +import { CachedKeyDecoder } from "../src/CachedKeyDecoder.ts"; +import { utf8EncodeJs, utf8Count } from "../src/utils/utf8.ts"; +import type { KeyDecoder } from "../src/CachedKeyDecoder.ts"; function tryDecode(keyDecoder: KeyDecoder, str: string): string { const byteLength = utf8Count(str); diff --git a/test/ExtensionCodec.test.ts b/test/ExtensionCodec.test.ts index 5d9f5e36..543171be 100644 --- a/test/ExtensionCodec.test.ts +++ b/test/ExtensionCodec.test.ts @@ -1,6 +1,6 @@ import assert from "assert"; import util from "util"; -import { encode, decode, ExtensionCodec, decodeAsync } from "../src/index"; +import { encode, decode, ExtensionCodec, decodeAsync } from "../src/index.ts"; describe("ExtensionCodec", () => { context("timestamp", () => { diff --git a/test/bigint64.test.ts b/test/bigint64.test.ts index e4ab68a2..e2bf08f4 100644 --- a/test/bigint64.test.ts +++ b/test/bigint64.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { encode, decode } from "../src/index"; +import { encode, decode } from "../src/index.ts"; describe("useBigInt64: true", () => { before(function () { diff --git a/test/bun.spec.ts b/test/bun.spec.ts index 92e202dd..fca79eaa 100644 --- a/test/bun.spec.ts +++ b/test/bun.spec.ts @@ -1,5 +1,5 @@ import { expect, test } from "bun:test"; -import { encode, decode } from "../src/index"; +import { encode, decode } from "../src/index.ts"; test("Hello, world!", () => { const encoded = encode("Hello, world!"); diff --git a/test/codec-bigint.test.ts b/test/codec-bigint.test.ts index 524bbf79..b0ef7aad 100644 --- a/test/codec-bigint.test.ts +++ b/test/codec-bigint.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { encode, decode, ExtensionCodec, DecodeError } from "../src/index"; +import { encode, decode, ExtensionCodec, DecodeError } from "../src/index.ts"; // There's a built-in `useBigInt64: true` option, but a custom codec might be // better if you'd like to encode bigint to reduce the size of binaries. diff --git a/test/codec-float.test.ts b/test/codec-float.test.ts index 3b690dc8..accc590f 100644 --- a/test/codec-float.test.ts +++ b/test/codec-float.test.ts @@ -1,6 +1,6 @@ import assert from "assert"; import * as ieee754 from "ieee754"; -import { decode } from "../src/index"; +import { decode } from "../src/index.ts"; const FLOAT32_TYPE = 0xca; const FLOAT64_TYPE = 0xcb; diff --git a/test/codec-int.test.ts b/test/codec-int.test.ts index 486f93b7..7e5a822e 100644 --- a/test/codec-int.test.ts +++ b/test/codec-int.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { setInt64, getInt64, getUint64, setUint64 } from "../src/utils/int"; +import { setInt64, getInt64, getUint64, setUint64 } from "../src/utils/int.ts"; const INT64SPECS = { ZERO: 0, diff --git a/test/codec-timestamp.test.ts b/test/codec-timestamp.test.ts index 1ee14326..a3098726 100644 --- a/test/codec-timestamp.test.ts +++ b/test/codec-timestamp.test.ts @@ -7,7 +7,7 @@ import { decodeTimestampExtension, decodeTimestampToTimeSpec, encodeTimestampExtension, -} from "../src/index"; +} from "../src/index.ts"; const TIME = 1556636810389; diff --git a/test/decode-blob.test.ts b/test/decode-blob.test.ts index 5fdb6c95..0c8c5b4c 100644 --- a/test/decode-blob.test.ts +++ b/test/decode-blob.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { encode, decode, decodeAsync } from "../src/index"; +import { encode, decode, decodeAsync } from "../src/index.ts"; (typeof Blob !== "undefined" ? describe : describe.skip)("Blob", () => { it("decodes it with `decode()`", async function () { diff --git a/test/decode-max-length.test.ts b/test/decode-max-length.test.ts index 8a2eb56d..8dd87f94 100644 --- a/test/decode-max-length.test.ts +++ b/test/decode-max-length.test.ts @@ -1,6 +1,6 @@ import assert from "assert"; -import { encode, decode, decodeAsync } from "../src/index"; -import type { DecoderOptions } from "../src/index"; +import { encode, decode, decodeAsync } from "../src/index.ts"; +import type { DecoderOptions } from "../src/index.ts"; describe("decode with max${Type}Length specified", () => { async function* createStream(input: T) { diff --git a/test/decode-raw-strings.test.ts b/test/decode-raw-strings.test.ts index 9608f5d4..c50ff15d 100644 --- a/test/decode-raw-strings.test.ts +++ b/test/decode-raw-strings.test.ts @@ -1,6 +1,6 @@ import assert from "assert"; -import { encode, decode } from "../src/index"; -import type { DecoderOptions } from "../src/index"; +import { encode, decode } from "../src/index.ts"; +import type { DecoderOptions } from "../src/index.ts"; describe("decode with rawStrings specified", () => { const options = { rawStrings: true } satisfies DecoderOptions; diff --git a/test/decodeArrayStream.test.ts b/test/decodeArrayStream.test.ts index f91b12e9..a8f7ed56 100644 --- a/test/decodeArrayStream.test.ts +++ b/test/decodeArrayStream.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { encode, decodeArrayStream } from "../src/index"; +import { encode, decodeArrayStream } from "../src/index.ts"; describe("decodeArrayStream", () => { const generateSampleObject = () => { diff --git a/test/decodeAsync.test.ts b/test/decodeAsync.test.ts index 99b46f64..96873707 100644 --- a/test/decodeAsync.test.ts +++ b/test/decodeAsync.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { encode, decodeAsync } from "../src/index"; +import { encode, decodeAsync } from "../src/index.ts"; describe("decodeAsync", () => { function wrapWithNoisyBuffer(byte: number) { diff --git a/test/decodeMulti.test.ts b/test/decodeMulti.test.ts index f5b96e18..eb661b80 100644 --- a/test/decodeMulti.test.ts +++ b/test/decodeMulti.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { encode, decodeMulti } from "../src/index"; +import { encode, decodeMulti } from "../src/index.ts"; describe("decodeMulti", () => { it("decodes multiple objects in a single binary", () => { diff --git a/test/decodeMultiStream.test.ts b/test/decodeMultiStream.test.ts index b88dd123..4da31e55 100644 --- a/test/decodeMultiStream.test.ts +++ b/test/decodeMultiStream.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { encode, decodeMultiStream } from "../src/index"; +import { encode, decodeMultiStream } from "../src/index.ts"; describe("decodeStream", () => { it("decodes stream", async () => { diff --git a/test/edge-cases.test.ts b/test/edge-cases.test.ts index 43cc9e57..797f6be6 100644 --- a/test/edge-cases.test.ts +++ b/test/edge-cases.test.ts @@ -1,7 +1,7 @@ // kind of hand-written fuzzing data // any errors should not break Encoder/Decoder instance states import assert from "assert"; -import { encode, decodeAsync, decode, Encoder, Decoder, decodeMulti, decodeMultiStream } from "../src/index"; +import { encode, decodeAsync, decode, Encoder, Decoder, decodeMulti, decodeMultiStream } from "../src/index.ts"; function testEncoder(encoder: Encoder): void { const object = { diff --git a/test/encode.test.ts b/test/encode.test.ts index 21672763..f1b6ffef 100644 --- a/test/encode.test.ts +++ b/test/encode.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { encode, decode } from "../src/index"; +import { encode, decode } from "../src/index.ts"; describe("encode", () => { context("sortKeys", () => { diff --git a/test/msgpack-ext.test.ts b/test/msgpack-ext.test.ts index a884f5c1..15244cb0 100644 --- a/test/msgpack-ext.test.ts +++ b/test/msgpack-ext.test.ts @@ -1,5 +1,5 @@ import assert from "assert"; -import { encode, decode, ExtData } from "../src/index"; +import { encode, decode, ExtData } from "../src/index.ts"; function seq(n: number) { const a: Array = []; diff --git a/test/msgpack-test-suite.test.ts b/test/msgpack-test-suite.test.ts index 94c841e7..d42b0db7 100644 --- a/test/msgpack-test-suite.test.ts +++ b/test/msgpack-test-suite.test.ts @@ -2,7 +2,7 @@ import assert from "assert"; import util from "util"; import { Exam } from "msgpack-test-js"; import { MsgTimestamp } from "msg-timestamp"; -import { encode, decode, ExtensionCodec, EXT_TIMESTAMP, encodeTimeSpecToTimestamp } from "../src/index"; +import { encode, decode, ExtensionCodec, EXT_TIMESTAMP, encodeTimeSpecToTimestamp } from "../src/index.ts"; const extensionCodec = new ExtensionCodec(); extensionCodec.register({ diff --git a/test/prototype-pollution.test.ts b/test/prototype-pollution.test.ts index 78238c0c..46e293ea 100644 --- a/test/prototype-pollution.test.ts +++ b/test/prototype-pollution.test.ts @@ -1,5 +1,5 @@ import { throws } from "assert"; -import { encode, decode, DecodeError } from "../src/index"; +import { encode, decode, DecodeError } from "../src/index.ts"; describe("prototype pollution", () => { context("__proto__ exists as a map key", () => { diff --git a/test/readme.test.ts b/test/readme.test.ts index 0ee9fd57..9aff528d 100644 --- a/test/readme.test.ts +++ b/test/readme.test.ts @@ -1,5 +1,5 @@ import { deepStrictEqual } from "assert"; -import { encode, decode } from "../src/index"; +import { encode, decode } from "../src/index.ts"; describe("README", () => { context("## Synopsis", () => { diff --git a/test/reuse-instances-with-extensions.test.ts b/test/reuse-instances-with-extensions.test.ts index 39cb4564..f5396258 100644 --- a/test/reuse-instances-with-extensions.test.ts +++ b/test/reuse-instances-with-extensions.test.ts @@ -1,7 +1,7 @@ // https://github.com/msgpack/msgpack-javascript/issues/195 import { deepStrictEqual } from "assert"; -import { Encoder, Decoder, ExtensionCodec } from "../src/index"; +import { Encoder, Decoder, ExtensionCodec } from "../src/index.ts"; const MSGPACK_EXT_TYPE_BIGINT = 0; diff --git a/test/reuse-instances.test.ts b/test/reuse-instances.test.ts index 8f1cee10..2c971cd4 100644 --- a/test/reuse-instances.test.ts +++ b/test/reuse-instances.test.ts @@ -1,5 +1,5 @@ import { deepStrictEqual } from "assert"; -import { Encoder, Decoder, decode } from "../src/index"; +import { Encoder, Decoder, decode } from "../src/index.ts"; const createStream = async function* (...args: any) { for (const item of args) { diff --git a/test/whatwg-streams.test.ts b/test/whatwg-streams.test.ts index ac2ae6a7..2b324938 100644 --- a/test/whatwg-streams.test.ts +++ b/test/whatwg-streams.test.ts @@ -1,5 +1,5 @@ import { deepStrictEqual } from "assert"; -import { decodeAsync, encode, decodeArrayStream } from "../src/index"; +import { decodeAsync, encode, decodeArrayStream } from "../src/index.ts"; const isReadableStreamConstructorAvailable: boolean = (() => { try { diff --git a/tools/esmify.ts b/tools/esmify.ts deleted file mode 100644 index ce577957..00000000 --- a/tools/esmify.ts +++ /dev/null @@ -1,24 +0,0 @@ -#!ts-node -/* eslint-disable no-console */ - -import fs from "fs"; - -const files = process.argv.slice(2); - -for (const file of files) { - const fileMjs = file.replace(/\.js$/, ".mjs"); - console.info(`Processing ${file} => ${fileMjs}`); - // .js => .mjs - const content = fs.readFileSync(file).toString("utf-8"); - const newContent = content.replace(/\bfrom "(\.\.?\/[^"]+)";/g, 'from "$1.mjs";') - .replace(/\/\/# sourceMappingURL=(.+)\.js\.map$/, - "//# sourceMappingURL=$1.mjs.map"); - fs.writeFileSync(fileMjs, newContent); - fs.unlinkSync(file); - - // .js.map => .mjs.map - const mapping = JSON.parse(fs.readFileSync(`${file}.map`).toString("utf-8")); - mapping.file = mapping.file.replace(/\.js$/, ".mjs"); - fs.writeFileSync(`${fileMjs}.map`, JSON.stringify(mapping)); - fs.unlinkSync(`${file}.map`); -} diff --git a/tools/fix-ext.mts b/tools/fix-ext.mts new file mode 100644 index 00000000..e4d0db7e --- /dev/null +++ b/tools/fix-ext.mts @@ -0,0 +1,30 @@ +#!ts-node +/* eslint-disable no-console */ + +import fs from "node:fs"; + +const mode = process.argv[2]; // --cjs or --mjs +const files = process.argv.slice(3); + +const ext = mode === "--cjs" ? "cjs" : "mjs"; + +console.info(`Fixing ${mode} files with extension ${ext}`); + +for (const file of files) { + const fileMjs = file.replace(/\.js$/, `.${ext}`); + console.info(`Processing ${file} => ${fileMjs}`); + // .js => .mjs + const content = fs.readFileSync(file).toString("utf-8"); + const newContent = content.replace(/\bfrom "(\.\.?\/[^"]+).js";/g, `from "$1.${ext}";`) + .replace(/\brequire\("(\.\.?\/[^"]+).js"\)/g, `require("$1.${ext}");`) + .replace(/\/\/# sourceMappingURL=(.+)\.js\.map$/, + `//# sourceMappingURL=$1.${ext}.map`); + fs.writeFileSync(fileMjs, newContent); + fs.unlinkSync(file); + + // .js.map => .mjs.map + const mapping = JSON.parse(fs.readFileSync(`${file}.map`).toString("utf-8")); + mapping.file = mapping.file.replace(/\.js$/, ext); + fs.writeFileSync(`${fileMjs}.map`, JSON.stringify(mapping)); + fs.unlinkSync(`${file}.map`); +} diff --git a/tsconfig.dist.cjs.json b/tsconfig.dist.cjs.json new file mode 100644 index 00000000..8225a840 --- /dev/null +++ b/tsconfig.dist.cjs.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "CommonJS", + "outDir": "./dist.cjs", + "declaration": false, + "noEmitOnError": true, + "noEmit": false, + "rewriteRelativeImportExtensions": true, + "incremental": false + }, + "include": ["src/**/*.ts"] +} diff --git a/tsconfig.dist.esm.json b/tsconfig.dist.esm.json index 5ee9ac5e..f8d47a0d 100644 --- a/tsconfig.dist.esm.json +++ b/tsconfig.dist.esm.json @@ -1,10 +1,12 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "module": "es2020", + "module": "ES2020", "outDir": "./dist.esm", - "declaration": false, + "declaration": true, "noEmitOnError": true, + "noEmit": false, + "rewriteRelativeImportExtensions": true, "incremental": false }, "include": ["src/**/*.ts"] diff --git a/tsconfig.dist.json b/tsconfig.dist.json deleted file mode 100644 index d78a9246..00000000 --- a/tsconfig.dist.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./dist", - "declaration": true, - "noEmitOnError": true, - "incremental": false - }, - "include": ["src/**/*.ts"] -} diff --git a/tsconfig.dist.webpack.json b/tsconfig.dist.webpack.json index edbaa9bd..5c859100 100644 --- a/tsconfig.dist.webpack.json +++ b/tsconfig.dist.webpack.json @@ -1,8 +1,11 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "module": "esnext", + "module": "ESNext", + "moduleResolution": "bundler", "noEmitOnError": true, + "allowImportingTsExtensions": false, + "noEmit": false, "outDir": "./build/webpack" }, "include": ["src/**/*.ts"] diff --git a/tsconfig.json b/tsconfig.json index b97d9fec..3365726b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { /* Basic Options */ "target": "ES2020", /* the baseline */ - "module": "CommonJS", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "module": "ES2020", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "lib": ["ES2024", "dom"], /* Specify library files to be included in the compilation. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ @@ -55,7 +55,10 @@ "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ "resolveJsonModule": true, - "forceConsistentCasingInFileNames": true + "allowImportingTsExtensions": true, + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, // "erasableSyntaxOnly": true @@ -69,5 +72,5 @@ // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ }, - "exclude": ["assembly"] + "exclude": ["example", "benchmark", "test/bun*", "test/deno*", "mod.ts"] } diff --git a/webpack.config.mjs b/webpack.config.mjs index 1eeb233f..3c15a82b 100644 --- a/webpack.config.mjs +++ b/webpack.config.mjs @@ -26,6 +26,7 @@ const config = { test: /\.tsx?$/, loader: "ts-loader", options: { + transpileOnly: true, configFile: "tsconfig.dist.webpack.json", }, },