This is an automated email from the ASF dual-hosted git repository. xuanwo pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/opendal.git
The following commit(s) were added to refs/heads/main by this push: new 8fe3f360d fix(nodejs): esmodule and commonjs support (#6266) 8fe3f360d is described below commit 8fe3f360d62e311e015eaccbc523247f0384154f Author: Kingsword <kingswor...@gmail.com> AuthorDate: Mon Jun 9 16:08:22 2025 +0800 fix(nodejs): esmodule and commonjs support (#6266) * fix(nodejs): esmodule and commonjs support * fix(nodejs): theme package build and update prettier config * fix(nodejs): ci * fix(nodejs): vitest test * docs(nodejs): add nextjs usage --- bindings/nodejs/.prettierignore | 1 + bindings/nodejs/README.md | 13 ++++++++++++ bindings/nodejs/{index.js => index.cjs} | 4 ++-- bindings/nodejs/{index.js => index.mjs} | 9 +++++--- bindings/nodejs/package.json | 26 +++++++++++++++++------ bindings/nodejs/scripts/{header.js => header.mjs} | 0 bindings/nodejs/tests/suites/index.mjs | 2 +- bindings/nodejs/tests/suites/sync.suite.mjs | 1 - bindings/nodejs/theme/package.json | 3 +++ 9 files changed, 46 insertions(+), 13 deletions(-) diff --git a/bindings/nodejs/.prettierignore b/bindings/nodejs/.prettierignore index 5bac3c572..435244ca4 100644 --- a/bindings/nodejs/.prettierignore +++ b/bindings/nodejs/.prettierignore @@ -6,3 +6,4 @@ pnpm-lock.yaml .devbox devbox.json devbox.lock +theme/dist/index.js diff --git a/bindings/nodejs/README.md b/bindings/nodejs/README.md index c46d005b0..2f2545c8c 100644 --- a/bindings/nodejs/README.md +++ b/bindings/nodejs/README.md @@ -65,6 +65,19 @@ async function main() { main(); ``` +## Usage with Next.js + +Config automatically be bundled by [Next.js](https://nextjs.org/docs/app/api-reference/config/next-config-js/serverExternalPackages). + +```javascript +/** @type {import('next').NextConfig} */ +const nextConfig = { + serverExternalPackages: ["opendal"], +}; + +module.exports = nextConfig; +``` + ## Contributing - Start with [Contributing Guide](CONTRIBUTING.md). diff --git a/bindings/nodejs/index.js b/bindings/nodejs/index.cjs similarity index 95% copy from bindings/nodejs/index.js copy to bindings/nodejs/index.cjs index 1ec1e675d..9b17b4685 100644 --- a/bindings/nodejs/index.js +++ b/bindings/nodejs/index.cjs @@ -19,7 +19,7 @@ /// <reference types="node" /> -import { Writable, Readable } from 'node:stream' +const { Writable, Readable } = require('stream') class ReadStream extends Readable { constructor(reader, options) { @@ -119,7 +119,7 @@ class BlockingWriteStream extends Writable { } } -import { Operator, RetryLayer, BlockingReader, Reader, BlockingWriter, Writer } from './generated.js' +const { Operator, RetryLayer, BlockingReader, Reader, BlockingWriter, Writer } = require('./generated.js') BlockingReader.prototype.createReadStream = function (options) { return new BlockingReadStream(this, options) diff --git a/bindings/nodejs/index.js b/bindings/nodejs/index.mjs similarity index 93% rename from bindings/nodejs/index.js rename to bindings/nodejs/index.mjs index 1ec1e675d..ccafda569 100644 --- a/bindings/nodejs/index.js +++ b/bindings/nodejs/index.mjs @@ -119,7 +119,8 @@ class BlockingWriteStream extends Writable { } } -import { Operator, RetryLayer, BlockingReader, Reader, BlockingWriter, Writer } from './generated.js' +import * as generated from './generated.js' +const { Operator, RetryLayer, BlockingReader, Reader, BlockingWriter, Writer } = generated BlockingReader.prototype.createReadStream = function (options) { return new BlockingReadStream(this, options) @@ -137,7 +138,9 @@ Writer.prototype.createWriteStream = function (options) { return new WriteStream(this, options) } -module.exports.Operator = Operator -module.exports.layers = { +export const layers = { RetryLayer, } + +export * from './generated.js' +export default generated diff --git a/bindings/nodejs/package.json b/bindings/nodejs/package.json index cae783b20..27a333aa8 100644 --- a/bindings/nodejs/package.json +++ b/bindings/nodejs/package.json @@ -3,8 +3,8 @@ "author": "Apache OpenDAL <d...@opendal.apache.org>", "version": "0.48.3", "license": "Apache-2.0", - "type": "module", - "main": "index.js", + "main": "index.cjs", + "module": "index.mjs", "types": "index.d.ts", "description": "Apache OpenDAL: Access data freely", "repository": "g...@github.com/apache/opendal.git", @@ -41,12 +41,26 @@ ], "files": [ "index.d.ts", - "index.js", + "index.cjs", + "index.mjs", "generated.d.ts", "generated.js", "LICENSE", "NOTICE" ], + "exports": { + ".": { + "import": { + "types": "./index.d.ts", + "default": "./index.mjs" + }, + "require": { + "types": "./index.d.ts", + "default": "./index.cjs" + } + }, + "./package.json": "./package.json" + }, "devDependencies": { "@aws-sdk/client-s3": "^3.468.0", "@napi-rs/cli": "^2.18.3", @@ -65,8 +79,8 @@ "node": ">= 10" }, "scripts": { - "build": "napi build --platform --features \"${NAPI_FEATURES:-}\" --target \"${NAPI_TARGET:-}\" --release --js generated.js --dts generated.d.ts && node ./scripts/header.js", - "build:debug": "napi build --platform --features \"${NAPI_FEATURES:-}\" --target \"${NAPI_TARGET:-}\" --js generated.js --dts generated.d.ts && node ./scripts/header.js", + "build": "napi build --platform --features \"${NAPI_FEATURES:-}\" --target \"${NAPI_TARGET:-}\" --release --js generated.js --dts generated.d.ts && node ./scripts/header.mjs", + "build:debug": "napi build --platform --features \"${NAPI_FEATURES:-}\" --target \"${NAPI_TARGET:-}\" --js generated.js --dts generated.d.ts && node ./scripts/header.mjs", "build:theme": "tsc -p ./tsconfig.theme.json", "docs": "typedoc", "format": "prettier --write .", @@ -78,7 +92,7 @@ "prettier": { "overrides": [ { - "files": "./**/*.{js,ts,mjs,jsx,tsx}", + "files": "./**/*.{js,cjs,ts,mjs,jsx,tsx}", "options": { "arrowParens": "always", "parser": "typescript", diff --git a/bindings/nodejs/scripts/header.js b/bindings/nodejs/scripts/header.mjs similarity index 100% rename from bindings/nodejs/scripts/header.js rename to bindings/nodejs/scripts/header.mjs diff --git a/bindings/nodejs/tests/suites/index.mjs b/bindings/nodejs/tests/suites/index.mjs index e9f706f8a..920f816cf 100644 --- a/bindings/nodejs/tests/suites/index.mjs +++ b/bindings/nodejs/tests/suites/index.mjs @@ -18,7 +18,7 @@ */ import { describe } from 'vitest' -import { Operator, layers } from '../../index.js' +import { Operator, layers } from '../../index.mjs' import { checkRandomRootEnabled, generateRandomRoot, loadConfigFromEnv } from '../utils.mjs' import { run as AsyncIOTestRun } from './async.suite.mjs' diff --git a/bindings/nodejs/tests/suites/sync.suite.mjs b/bindings/nodejs/tests/suites/sync.suite.mjs index 37781ed7b..8215bcfb0 100644 --- a/bindings/nodejs/tests/suites/sync.suite.mjs +++ b/bindings/nodejs/tests/suites/sync.suite.mjs @@ -19,7 +19,6 @@ import { randomUUID } from 'node:crypto' import { test } from 'vitest' -import { WriteStream, ReadStream } from '../../index.js' import { generateFixedBytes } from '../utils.mjs' import { Readable } from 'node:stream' diff --git a/bindings/nodejs/theme/package.json b/bindings/nodejs/theme/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/bindings/nodejs/theme/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +}