diff --git a/crates/voicevox_core_node_api/.gitignore b/crates/voicevox_core_node_api/.gitignore new file mode 100644 index 000000000..6ca71fb5f --- /dev/null +++ b/crates/voicevox_core_node_api/.gitignore @@ -0,0 +1,5 @@ +target +index.node +**/node_modules +**/.DS_Store +npm-debug.log* diff --git a/crates/voicevox_core_node_api/Cargo.toml b/crates/voicevox_core_node_api/Cargo.toml new file mode 100644 index 000000000..fd02143e0 --- /dev/null +++ b/crates/voicevox_core_node_api/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "voicevox_core_node_api" +version = "0.1.0" +description = "VOICEVOX CORE の Java バインディング。" +license = "MIT" +edition = "2021" +exclude = ["index.node"] + +[lib] +crate-type = ["cdylib"] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +neon = "1" diff --git a/crates/voicevox_core_node_api/README.md b/crates/voicevox_core_node_api/README.md new file mode 100644 index 000000000..7d1f4283f --- /dev/null +++ b/crates/voicevox_core_node_api/README.md @@ -0,0 +1,121 @@ +# voicevox_core_node_api + +**voicevox_core_node_api:** VOICEVOX CORE の Java バインディング。 + +This project was bootstrapped by [create-neon](https://www.npmjs.com/package/create-neon). + +## Installing voicevox_core_node_api + +Installing voicevox_core_node_api requires a [supported version of Node and Rust](https://github.com/neon-bindings/neon#platform-support). + +You can install the project with npm. In the project directory, run: + +```sh +$ npm install +``` + +This fully installs the project, including installing any dependencies and running the build. + +## Building voicevox_core_node_api + +If you have already installed the project and only want to run the build, run: + +```sh +$ npm run build +``` + +This command uses the [cargo-cp-artifact](https://github.com/neon-bindings/cargo-cp-artifact) utility to run the Rust build and copy the built library into `./index.node`. + +## Exploring voicevox_core_node_api + +After building voicevox_core_node_api, you can explore its exports at the Node REPL: + +```sh +$ npm install +$ node +> require('.').hello() +"hello node" +``` + +## Available Scripts + +In the project directory, you can run: + +### `npm install` + +Installs the project, including running `npm run build`. + +### `npm build` + +Builds the Node addon (`index.node`) from source. + +Additional [`cargo build`](https://doc.rust-lang.org/cargo/commands/cargo-build.html) arguments may be passed to `npm build` and `npm build-*` commands. For example, to enable a [cargo feature](https://doc.rust-lang.org/cargo/reference/features.html): + +``` +npm run build -- --feature=beetle +``` + +#### `npm build-debug` + +Alias for `npm build`. + +#### `npm build-release` + +Same as [`npm build`](#npm-build) but, builds the module with the [`release`](https://doc.rust-lang.org/cargo/reference/profiles.html#release) profile. Release builds will compile slower, but run faster. + +### `npm test` + +Runs the unit tests by calling `cargo test`. You can learn more about [adding tests to your Rust code](https://doc.rust-lang.org/book/ch11-01-writing-tests.html) from the [Rust book](https://doc.rust-lang.org/book/). + +## Project Layout + +The directory structure of this project is: + +``` +voicevox_core_node_api/ +├── Cargo.toml +├── README.md +├── index.node +├── package.json +├── src/ +| └── lib.rs +└── target/ +``` + +### Cargo.toml + +The Cargo [manifest file](https://doc.rust-lang.org/cargo/reference/manifest.html), which informs the `cargo` command. + +### README.md + +This file. + +### index.node + +The Node addon—i.e., a binary Node module—generated by building the project. This is the main module for this package, as dictated by the `"main"` key in `package.json`. + +Under the hood, a [Node addon](https://nodejs.org/api/addons.html) is a [dynamically-linked shared object](https://en.wikipedia.org/wiki/Library_(computing)#Shared_libraries). The `"build"` script produces this file by copying it from within the `target/` directory, which is where the Rust build produces the shared object. + +### package.json + +The npm [manifest file](https://docs.npmjs.com/cli/v7/configuring-npm/package-json), which informs the `npm` command. + +### src/ + +The directory tree containing the Rust source code for the project. + +### src/lib.rs + +The Rust library's main module. + +### target/ + +Binary artifacts generated by the Rust build. + +## Learn More + +To learn more about Neon, see the [Neon documentation](https://neon-bindings.com). + +To learn more about Rust, see the [Rust documentation](https://www.rust-lang.org). + +To learn more about Node, see the [Node documentation](https://nodejs.org). diff --git a/crates/voicevox_core_node_api/package.json b/crates/voicevox_core_node_api/package.json new file mode 100644 index 000000000..96757ad93 --- /dev/null +++ b/crates/voicevox_core_node_api/package.json @@ -0,0 +1,26 @@ +{ + "name": "voicevox_core_node_api", + "version": "0.1.0", + "description": "VOICEVOX CORE の Java バインディング。", + "main": "index.node", + "scripts": { + "build": "cargo-cp-artifact -nc index.node -- cargo build --message-format=json-render-diagnostics", + "build-debug": "npm run build --", + "build-release": "npm run build -- --release", + "install": "npm run build-release", + "test": "cargo test" + }, + "author": "", + "license": "MIT", + "devDependencies": { + "cargo-cp-artifact": "^0.1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/VOICEVOX/voicevox_core.git" + }, + "bugs": { + "url": "https://github.com/VOICEVOX/voicevox_core/issues" + }, + "homepage": "https://github.com/VOICEVOX/voicevox_core#readme" +} \ No newline at end of file diff --git a/crates/voicevox_core_node_api/src/lib.rs b/crates/voicevox_core_node_api/src/lib.rs new file mode 100644 index 000000000..9fd52d67b --- /dev/null +++ b/crates/voicevox_core_node_api/src/lib.rs @@ -0,0 +1,11 @@ +use neon::prelude::*; + +fn hello(mut cx: FunctionContext) -> JsResult { + Ok(cx.string("hello node")) +} + +#[neon::main] +fn main(mut cx: ModuleContext) -> NeonResult<()> { + cx.export_function("hello", hello)?; + Ok(()) +}