From 8db5f0745703938e3e8f3a08f7c2849a6f99a806 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 00:55:29 +0300 Subject: [PATCH 01/14] chore(deps): Add crate for Node module generation --- Cargo.toml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index baccb4c..a686010 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,6 +38,7 @@ lua52 = ["luamodule", "mlua/lua52"] lua51 = ["luamodule", "mlua/lua51"] luajit = ["luamodule", "mlua/luajit"] pythonmodule = ["pyo3"] +nodemodule = ["neon"] [profile.release] lto = true @@ -58,6 +59,11 @@ unicode_titlecase = "2.3" optional = true features = ["module"] + [dependencies.neon] + version = "1.0" + optional = true + features = ["napi-9"] + [dependencies.pyo3] version = "0.22" optional = true From b6007c4b72cbb0e2b95cd3c2dc31e4df82787b8d Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 00:58:53 +0300 Subject: [PATCH 02/14] chore(node): Add package.json manifest and other node tooling --- package.json | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..2adfc2f --- /dev/null +++ b/package.json @@ -0,0 +1,54 @@ +{ + "name": "decasify", + "version": "0.5.5", + "description": "A CLI utility and library to cast strings to title-case according to locale specific style guides including Turkish support", + "main": "./lib/index.cjs", + "scripts": { + "test": "tsc && cargo test", + "cargo-build": "tsc && cargo build --message-format=json > cargo.log", + "cross-build": "tsc && cross build --message-format=json > cross.log", + "postcargo-build": "neon dist < cargo.log", + "postcross-build": "neon dist -m /target < cross.log", + "debug": "npm run cargo-build --", + "build": "npm run cargo-build -- --release", + "cross": "npm run cross-build -- --release", + "prepack": "tsc && neon update", + "version": "neon bump --binaries platforms && git add .", + "release": "gh workflow run release.yml -f dryrun=false -f version=patch", + "dryrun": "gh workflow run publish.yml -f dryrun=true" + }, + "author": "Caleb Maclennan ", + "license": "GPL-3.0-only", + "exports": { + ".": { + "import": { + "types": "./lib/index.d.mts", + "default": "./lib/index.mjs" + }, + "require": { + "types": "./lib/index.d.cts", + "default": "./lib/index.cjs" + } + } + }, + "types": "./lib/index.d.cts", + "files": [ + "lib/**/*.?({c,m}){t,j}s" + ], + "neon": { + "type": "library", + "org": "@nus", + "platforms": "common", + "load": "./src/load.cts" + }, + "devDependencies": { + "@neon-rs/cli": "^0.1.73", + "@tsconfig/node20": "^20.1.4", + "@types/node": "^20.11.16", + "typescript": "^5.3.3" + }, + "dependencies": { + "@neon-rs/load": "^0.1.73" + } +} + From 37cb5639899dd31e0fed8e2102d530901938135f Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 01:18:06 +0300 Subject: [PATCH 03/14] feat(node): Implement API as Node module --- Makefile.am | 2 +- src/lib.rs | 3 +++ src/node.rs | 12 ++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/node.rs diff --git a/Makefile.am b/Makefile.am index 3de80ac..6ed29df 100644 --- a/Makefile.am +++ b/Makefile.am @@ -10,7 +10,7 @@ docdir = $(datarootdir)/doc/$(TRANSFORMED_PACKAGE_NAME) licensedir = $(datarootdir)/licenses/$(TRANSFORMED_PACKAGE_NAME) bin_PROGRAMS = decasify -decasify_SOURCES = src/bin/decasify.rs src/cli.rs src/lib.rs src/lua.rs src/python.rs src/types.rs +decasify_SOURCES = src/bin/decasify.rs src/cli.rs src/lib.rs src/lua.rs src/node.rs src/python.rs src/types.rs EXTRA_decasify_SOURCES = tests/cli.rs EXTRA_DIST = pyproject.toml spec/decasify_spec.lua tests/test_all.py dist_doc_DATA = README.md CHANGELOG.md diff --git a/src/lib.rs b/src/lib.rs index c00119c..4c7718f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,9 @@ pub use types::{InputLocale, Result, StyleGuide, TargetCase}; #[cfg(feature = "cli")] pub mod cli; +#[cfg(feature = "nodemodule")] +pub mod node; + #[cfg(feature = "luamodule")] pub mod lua; diff --git a/src/node.rs b/src/node.rs new file mode 100644 index 0000000..d9e7e35 --- /dev/null +++ b/src/node.rs @@ -0,0 +1,12 @@ +use crate::*; +use neon::prelude::*; + +#[neon::main] +fn main(mut cx: ModuleContext) -> NeonResult<()> { + cx.export_function("titlecase", titlecase)?; + Ok(()) +} + +fn titlecase(mut cx: FunctionContext) -> JsResult { + Ok(cx.string("foo")) +} From 27c00983f00a614c96b5e7dc81c049bb31518136 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 01:18:17 +0300 Subject: [PATCH 04/14] fixup! chore(deps): Add crate for Node module generation --- Cargo.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index a686010..bd4500b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,7 +62,8 @@ unicode_titlecase = "2.3" [dependencies.neon] version = "1.0" optional = true - features = ["napi-9"] + features = ["napi-6"] + # features = ["napi-9"] [dependencies.pyo3] version = "0.22" From 3a3cef722ed7600b3f2dedbcff4c5638b43fa350 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 01:18:58 +0300 Subject: [PATCH 05/14] fixup cargo --- Cargo.lock | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index ebb84d0..bc9558a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -271,6 +271,7 @@ dependencies = [ "clap_complete", "clap_mangen", "mlua", + "neon", "predicates", "pyo3", "regex", @@ -370,6 +371,17 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "gix" version = "0.57.1" @@ -925,6 +937,16 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +[[package]] +name = "libloading" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -1016,6 +1038,32 @@ dependencies = [ "syn", ] +[[package]] +name = "neon" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d75440242411c87dc39847b0e33e961ec1f10326a9d8ecf9c1ea64a3b3c13dc" +dependencies = [ + "getrandom", + "libloading", + "neon-macros", + "once_cell", + "semver", + "send_wrapper", + "smallvec", +] + +[[package]] +name = "neon-macros" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6813fde79b646e47e7ad75f480aa80ef76a5d9599e2717407961531169ee38b" +dependencies = [ + "quote", + "syn", + "syn-mid", +] + [[package]] name = "normalize-line-endings" version = "0.3.0" @@ -1324,6 +1372,12 @@ dependencies = [ "serde", ] +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" version = "1.0.204" @@ -1422,6 +1476,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-mid" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5dc35bb08dd1ca3dfb09dce91fd2d13294d6711c88897d9a9d60acf39bce049" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "target-lexicon" version = "0.12.14" @@ -1624,6 +1689,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" version = "0.2.92" From 55c6cd2abb1894ce765de1174d9f066933c33504 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 01:20:53 +0300 Subject: [PATCH 06/14] chore(tooling): Make sure Node developer dependencies and test targets are packaged --- configure.ac | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configure.ac b/configure.ac index 625ff3f..248c51d 100644 --- a/configure.ac +++ b/configure.ac @@ -23,6 +23,9 @@ AM_COND_IF([DEVELOPER_MODE], [ QUE_PROGVAR([maturin]) QUE_PROGVAR([pytest]) QUE_PROGVAR([uv]) + # Node build and testing dependencies + QUE_PROGVAR([node]) + QUE_PROGVAR([tsc]) # Release tooling QUE_PROGVAR([gitcliff], [git-cliff]) ]) From ccf93e9af64c9215296fffcd3db37c532272a4ba Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 01:26:28 +0300 Subject: [PATCH 07/14] fixup! fixup! chore(deps): Add crate for Node module generation --- Cargo.toml | 4 ++-- package.json | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index bd4500b..f588acc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,8 +62,8 @@ unicode_titlecase = "2.3" [dependencies.neon] version = "1.0" optional = true - features = ["napi-6"] - # features = ["napi-9"] + default-features = false + features = ["napi-8"] [dependencies.pyo3] version = "0.22" diff --git a/package.json b/package.json index 2adfc2f..f96eb8f 100644 --- a/package.json +++ b/package.json @@ -42,13 +42,12 @@ "load": "./src/load.cts" }, "devDependencies": { - "@neon-rs/cli": "^0.1.73", - "@tsconfig/node20": "^20.1.4", - "@types/node": "^20.11.16", - "typescript": "^5.3.3" + "@neon-rs/cli": "^0.1", + "@tsconfig/node20": "^20.1", + "@types/node": "^20.14", + "typescript": "^5.5" }, "dependencies": { - "@neon-rs/load": "^0.1.73" + "@neon-rs/load": "^0.1" } } - From 371d6a4abdde8174dd6fb9b57815b8917955d252 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 01:28:07 +0300 Subject: [PATCH 08/14] chore(node): Add Typescript boilerplate for Node module use --- src/index.cts | 19 +++++++++++++++++++ src/index.mts | 3 +++ src/load.cts | 16 ++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 src/index.cts create mode 100644 src/index.mts create mode 100644 src/load.cts diff --git a/src/index.cts b/src/index.cts new file mode 100644 index 0000000..001e420 --- /dev/null +++ b/src/index.cts @@ -0,0 +1,19 @@ +// This module is the CJS entry point for the library. + +// The Rust addon. +import * as addon from './load.cjs'; + +// Use this declaration to assign types to the addon's exports, +// which otherwise by default are `any`. +declare module "./load.cjs" { + function hello(): string; +} + +export type Greeting = { + message: string +}; + +export function greeting(): Greeting { + const message = addon.hello(); + return { message }; +} diff --git a/src/index.mts b/src/index.mts new file mode 100644 index 0000000..5e1ab26 --- /dev/null +++ b/src/index.mts @@ -0,0 +1,3 @@ +// This module is the ESM entry point for the library. + +export * from './index.cjs'; diff --git a/src/load.cts b/src/load.cts new file mode 100644 index 0000000..901553e --- /dev/null +++ b/src/load.cts @@ -0,0 +1,16 @@ +// This module loads the platform-specific build of the addon on +// the current system. The supported platforms are registered in +// the `platforms` object below, whose entries can be managed by +// by the Neon CLI: +// +// https://www.npmjs.com/package/@neon-rs/cli + +module.exports = require('@neon-rs/load').proxy({ + platforms: { + 'win32-x64-msvc': () => require('@nus/win32-x64-msvc'), + 'darwin-x64': () => require('@nus/darwin-x64'), + 'darwin-arm64': () => require('@nus/darwin-arm64'), + 'linux-x64-gnu': () => require('@nus/linux-x64-gnu') + }, + debug: () => require('../index.node') +}); From 805de881a00c1710bec4eab474442e772ae8683d Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 01:51:14 +0300 Subject: [PATCH 09/14] fixup! chore(node): Add package.json manifest and other node tooling --- {src => node}/index.cts | 0 {src => node}/index.mts | 0 {src => node}/load.cts | 0 package.json | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) rename {src => node}/index.cts (100%) rename {src => node}/index.mts (100%) rename {src => node}/load.cts (100%) diff --git a/src/index.cts b/node/index.cts similarity index 100% rename from src/index.cts rename to node/index.cts diff --git a/src/index.mts b/node/index.mts similarity index 100% rename from src/index.mts rename to node/index.mts diff --git a/src/load.cts b/node/load.cts similarity index 100% rename from src/load.cts rename to node/load.cts diff --git a/package.json b/package.json index f96eb8f..28a189f 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "type": "library", "org": "@nus", "platforms": "common", - "load": "./src/load.cts" + "load": "./node/load.cts" }, "devDependencies": { "@neon-rs/cli": "^0.1", From 745e3e5acf1948807e439bc1d33ba4a02de53710 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 01:53:54 +0300 Subject: [PATCH 10/14] add p json --- Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 6ed29df..cbd8fc2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -12,7 +12,7 @@ licensedir = $(datarootdir)/licenses/$(TRANSFORMED_PACKAGE_NAME) bin_PROGRAMS = decasify decasify_SOURCES = src/bin/decasify.rs src/cli.rs src/lib.rs src/lua.rs src/node.rs src/python.rs src/types.rs EXTRA_decasify_SOURCES = tests/cli.rs -EXTRA_DIST = pyproject.toml spec/decasify_spec.lua tests/test_all.py +EXTRA_DIST = package.json pyproject.toml spec/decasify_spec.lua tests/test_all.py dist_doc_DATA = README.md CHANGELOG.md dist_license_DATA = LICENSE.md nodist_man_MANS = From 800f7dea3f90adbea58898b7215489b142d65a87 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 01:56:01 +0300 Subject: [PATCH 11/14] chore(tooling): Update Git ignore list --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index de8b06d..634d1c9 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,8 @@ luacov.stats.out # Python tests/__pycache__ + +# Node +lib/ +node_module/ +package-lock.json From ef3c6389d2a9b6a9323ab337bec83e9ae90e0442 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 02:09:39 +0300 Subject: [PATCH 12/14] trim(fail) --- package.json | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 28a189f..753453e 100644 --- a/package.json +++ b/package.json @@ -4,18 +4,8 @@ "description": "A CLI utility and library to cast strings to title-case according to locale specific style guides including Turkish support", "main": "./lib/index.cjs", "scripts": { - "test": "tsc && cargo test", - "cargo-build": "tsc && cargo build --message-format=json > cargo.log", - "cross-build": "tsc && cross build --message-format=json > cross.log", - "postcargo-build": "neon dist < cargo.log", - "postcross-build": "neon dist -m /target < cross.log", - "debug": "npm run cargo-build --", - "build": "npm run cargo-build -- --release", - "cross": "npm run cross-build -- --release", - "prepack": "tsc && neon update", - "version": "neon bump --binaries platforms && git add .", - "release": "gh workflow run release.yml -f dryrun=false -f version=patch", - "dryrun": "gh workflow run publish.yml -f dryrun=true" + "build": "npm run cargo-build -- --features nodemodule --release", + "install": "npm run build", }, "author": "Caleb Maclennan ", "license": "GPL-3.0-only", From f9066be2bce8a36be855a559b39a9376021d2258 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 12:49:19 +0300 Subject: [PATCH 13/14] whereish --- package.json | 5 ++--- {node => src}/index.cts | 0 {node => src}/index.mts | 0 {node => src}/load.cts | 0 4 files changed, 2 insertions(+), 3 deletions(-) rename {node => src}/index.cts (100%) rename {node => src}/index.mts (100%) rename {node => src}/load.cts (100%) diff --git a/package.json b/package.json index 753453e..0c50e4e 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,7 @@ "description": "A CLI utility and library to cast strings to title-case according to locale specific style guides including Turkish support", "main": "./lib/index.cjs", "scripts": { - "build": "npm run cargo-build -- --features nodemodule --release", - "install": "npm run build", + "build": "tsc && cargo build --features nodemodule --release --message-format=json > cargo.log" }, "author": "Caleb Maclennan ", "license": "GPL-3.0-only", @@ -29,7 +28,7 @@ "type": "library", "org": "@nus", "platforms": "common", - "load": "./node/load.cts" + "load": "./src/load.cts" }, "devDependencies": { "@neon-rs/cli": "^0.1", diff --git a/node/index.cts b/src/index.cts similarity index 100% rename from node/index.cts rename to src/index.cts diff --git a/node/index.mts b/src/index.mts similarity index 100% rename from node/index.mts rename to src/index.mts diff --git a/node/load.cts b/src/load.cts similarity index 100% rename from node/load.cts rename to src/load.cts From 855dea85b5b71e0983485f9a34cd793c43d177f7 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 10 Jul 2024 15:59:06 +0300 Subject: [PATCH 14/14] fixup! fixup cargo --- Cargo.lock | 18 ------------------ Cargo.toml | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bc9558a..49f26e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -371,17 +371,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - [[package]] name = "gix" version = "0.57.1" @@ -1044,7 +1033,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d75440242411c87dc39847b0e33e961ec1f10326a9d8ecf9c1ea64a3b3c13dc" dependencies = [ - "getrandom", "libloading", "neon-macros", "once_cell", @@ -1689,12 +1677,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - [[package]] name = "wasm-bindgen" version = "0.2.92" diff --git a/Cargo.toml b/Cargo.toml index f588acc..166949c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,7 +63,7 @@ unicode_titlecase = "2.3" version = "1.0" optional = true default-features = false - features = ["napi-8"] + # features = ["napi-8"] [dependencies.pyo3] version = "0.22" diff --git a/package.json b/package.json index 0c50e4e..4ab3010 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "load": "./src/load.cts" }, "devDependencies": { - "@neon-rs/cli": "^0.1", + "neon-cli": "^0.4", "@tsconfig/node20": "^20.1", "@types/node": "^20.14", "typescript": "^5.5"