Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge in next branch #6

Merged
merged 22 commits into from
Apr 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9bde380
Support ByteBuf
cwfitzgerald Jul 20, 2023
96c302f
Support RefFromWasmAbi
cwfitzgerald Jul 20, 2023
33ce45d
Extract and copy rustdoc comments into type definitions
sisou Aug 14, 2023
1816f9e
Adapt tests to test comment generation
sisou Aug 14, 2023
e36e55b
Clean up, reduce repetition when writing comments
sisou Aug 14, 2023
2b694ab
update is_js_ident to cover most cases
Pistonight Oct 13, 2023
3e81856
Ensure type names ignore serde rename when exporting
siefkenj Jan 11, 2024
605aa84
Add Github Actions CI (#2)
siefkenj Jan 13, 2024
8d83bbb
Merge pull request #4 from sisou/sisou/comments
siefkenj Jan 13, 2024
0c703ed
Fix formatting
siefkenj Jan 13, 2024
3e7d11f
Merge pull request #3 from Pistonight/quote
siefkenj Jan 13, 2024
8cf9ae3
Formatting
siefkenj Jan 13, 2024
d66f68a
Merge pull request #5 from cwfitzgerald/ref-wasm-abi
siefkenj Jan 13, 2024
dc2fc17
Merge pull request #7 from cwfitzgerald/byte-buf
siefkenj Jan 13, 2024
c645c3a
Added reference test
siefkenj Jan 14, 2024
f9094b6
Merge branch 'next' of github.com:siefkenj/tsify into next
siefkenj Jan 14, 2024
74768a6
update serde_derive_internal and test rename_all_fields
carlsverre Jan 23, 2024
145ed4c
Merge pull request #10 from carlsverre/rebase_serde_update_and_test_r…
siefkenj Jan 23, 2024
71de564
Support Serialization and Prefixes/Affixes on Types
cwfitzgerald Jan 26, 2024
aeaaead
Merge pull request #11 from cwfitzgerald/configuration
siefkenj Feb 6, 2024
8a5a550
Update README.md
siefkenj Feb 7, 2024
0fa27b0
Update README.md
siefkenj Apr 10, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions .github/workflows/on-pull-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Build and Test

on:
push:
branches: [main, next]
pull_request:
branches: ["*"]

jobs:
build:
name: Build
runs-on: ubuntu-latest

steps:
- name: Checkout sources
uses: actions/checkout@v3

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true

- name: Check
uses: actions-rs/cargo@v1
with:
command: check

- name: Build
uses: actions-rs/cargo@v1
with:
command: build
test:
name: Test
runs-on: ubuntu-latest

steps:
- name: Checkout sources
uses: actions/checkout@v3

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
components: rustfmt

- name: Add cargo-expand
run: cargo install cargo-expand

- name: Test
uses: actions-rs/cargo@v1
with:
command: test
lint:
name: Lint
runs-on: ubuntu-latest

steps:
- name: Checkout sources
uses: actions/checkout@v3

- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
components: rustfmt, clippy

- name: Cargo fmt
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Tsify
# Tsify-next

Tsify is a library for generating TypeScript definitions from Rust code.
Tsify-next is a library for generating TypeScript definitions from Rust code. The original [Tsify](https://github.com/madonoharu/tsify) appears to be in hybernation mode, so this for incorporates updates until main Tsify project comes back to life.

Using this with [`wasm-bindgen`](https://github.com/rustwasm/wasm-bindgen) will automatically output the types to `.d.ts`.

Expand Down
20 changes: 19 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,28 @@

#[cfg(all(feature = "json", not(feature = "js")))]
pub use gloo_utils::format::JsValueSerdeExt;
#[cfg(feature = "js")]
pub use serde_wasm_bindgen;
pub use tsify_macros::*;
#[cfg(feature = "wasm-bindgen")]
use wasm_bindgen::{JsCast, JsValue};

pub struct SerializationConfig {
pub missing_as_null: bool,
pub hashmap_as_object: bool,
pub large_number_types_as_bigints: bool,
}

pub trait Tsify {
#[cfg(feature = "wasm-bindgen")]
type JsType: JsCast;

const DECL: &'static str;
const SERIALIZATION_CONFIG: SerializationConfig = SerializationConfig {
missing_as_null: false,
hashmap_as_object: false,
large_number_types_as_bigints: false,
};

#[cfg(all(feature = "json", not(feature = "js")))]
#[inline]
Expand All @@ -36,7 +49,12 @@ pub trait Tsify {
where
Self: serde::Serialize,
{
serde_wasm_bindgen::to_value(self).map(JsCast::unchecked_from_js)
let config = <Self as Tsify>::SERIALIZATION_CONFIG;
let serializer = serde_wasm_bindgen::Serializer::new()
.serialize_missing_as_null(config.missing_as_null)
.serialize_maps_as_objects(config.hashmap_as_object)
.serialize_large_number_types_as_bigints(config.large_number_types_as_bigints);
self.serialize(&serializer).map(JsCast::unchecked_from_js)
}

#[cfg(feature = "js")]
Expand Down
116 changes: 116 additions & 0 deletions tests/affixes.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
#![allow(dead_code)]

use indoc::indoc;
use pretty_assertions::assert_eq;
use tsify::Tsify;

#[test]
fn test_prefix() {
type MyType = u32;

#[derive(Tsify)]
#[tsify(type_prefix = "Special")]
struct PrefixedStruct {
// Make sure that prefix isn't applied to builtin types
x: u32,
y: MyType,
}

assert_eq!(
PrefixedStruct::DECL,
indoc! {"
export interface SpecialPrefixedStruct {
x: number;
y: SpecialMyType;
}"
}
);

#[derive(Tsify)]
#[tsify(type_prefix = "Special")]
enum PrefixedEnum {
VariantA(MyType),
VariantB(u32),
}

assert_eq!(
PrefixedEnum::DECL,
indoc! {"
export type SpecialPrefixedEnum = { VariantA: SpecialMyType } | { VariantB: number };"
}
);
}

#[test]
fn test_suffix() {
type MyType = u32;

#[derive(Tsify)]
#[tsify(type_suffix = "Special")]
struct SuffixedStruct {
// Make sure that prefix isn't applied to builtin types
x: u32,
y: MyType,
}

assert_eq!(
SuffixedStruct::DECL,
indoc! {"
export interface SuffixedStructSpecial {
x: number;
y: MyTypeSpecial;
}"
}
);

#[derive(Tsify)]
#[tsify(type_suffix = "Special")]
enum SuffixedEnum {
VariantA(MyType),
VariantB(u32),
}

assert_eq!(
SuffixedEnum::DECL,
indoc! {"
export type SuffixedEnumSpecial = { VariantA: MyTypeSpecial } | { VariantB: number };"
}
);
}

#[test]
fn test_prefix_suffix() {
type MyType = u32;

#[derive(Tsify)]
#[tsify(type_prefix = "Pre", type_suffix = "Suf")]
struct DoubleAffixedStruct {
// Make sure that prefix isn't applied to builtin types
x: u32,
y: MyType,
}

assert_eq!(
DoubleAffixedStruct::DECL,
indoc! {"
export interface PreDoubleAffixedStructSuf {
x: number;
y: PreMyTypeSuf;
}"
}
);

#[derive(Tsify)]
#[tsify(type_prefix = "Pre", type_suffix = "Suf")]
enum DoubleAffixedEnum {
VariantA(MyType),
VariantB(u32),
}

assert_eq!(
DoubleAffixedEnum::DECL,
indoc! {"
export type PreDoubleAffixedEnumSuf = { VariantA: PreMyTypeSuf } | { VariantB: number };"
}
);
}
Loading
Loading