fix(napi-derive): an Option
in front of a required parameter is no longer optional in TypeScript
This fixes a bug where having a parameter of type `Option<T>` followed by required parameters would incorrectly declare the parameter as option in the TypeScript declaration file, resulting in invalid syntax.
This commit is contained in:
parent
40651714c9
commit
8652019c94
6 changed files with 172 additions and 35 deletions
examples/napi
|
@ -32,6 +32,10 @@ Generated by [AVA](https://avajs.dev).
|
|||
export function createBigInt(): bigint␊
|
||||
export function createBigIntI64(): bigint␊
|
||||
export function getCwd(callback: (arg0: string) => void): void␊
|
||||
export function optionEnd(callback: (arg0: string, arg1?: string | undefined | null) => void): void␊
|
||||
export function optionStart(callback: (arg0: string | undefined | null, arg1: string) => void): void␊
|
||||
export function optionStartEnd(callback: (arg0: string | undefined | null, arg1: string, arg2?: string | undefined | null) => void): void␊
|
||||
export function optionOnly(callback: (arg0?: string | undefined | null) => void): void␊
|
||||
/** napi = { version = 2, features = ["serde-json"] } */␊
|
||||
export function readFile(callback: (arg0: Error | undefined, arg1?: string | undefined | null) => void): void␊
|
||||
export function eitherStringOrNumber(input: string | number): number␊
|
||||
|
@ -208,6 +212,12 @@ Generated by [AVA](https://avajs.dev).
|
|||
constructor()␊
|
||||
get filePath(): number␊
|
||||
}␊
|
||||
export class Optional {␊
|
||||
static optionEnd(required: string, optional?: string | undefined | null): string␊
|
||||
static optionStart(optional: string | undefined | null, required: string): string␊
|
||||
static optionStartEnd(optional1: string | undefined | null, required: string, optional2?: string | undefined | null): string␊
|
||||
static optionOnly(optional?: string | undefined | null): string␊
|
||||
}␊
|
||||
export class ClassWithFactory {␊
|
||||
name: string␊
|
||||
static withName(name: string): ClassWithFactory␊
|
||||
|
|
Binary file not shown.
10
examples/napi/index.d.ts
vendored
10
examples/napi/index.d.ts
vendored
|
@ -22,6 +22,10 @@ export function bigintAdd(a: bigint, b: bigint): bigint
|
|||
export function createBigInt(): bigint
|
||||
export function createBigIntI64(): bigint
|
||||
export function getCwd(callback: (arg0: string) => void): void
|
||||
export function optionEnd(callback: (arg0: string, arg1?: string | undefined | null) => void): void
|
||||
export function optionStart(callback: (arg0: string | undefined | null, arg1: string) => void): void
|
||||
export function optionStartEnd(callback: (arg0: string | undefined | null, arg1: string, arg2?: string | undefined | null) => void): void
|
||||
export function optionOnly(callback: (arg0?: string | undefined | null) => void): void
|
||||
/** napi = { version = 2, features = ["serde-json"] } */
|
||||
export function readFile(callback: (arg0: Error | undefined, arg1?: string | undefined | null) => void): void
|
||||
export function eitherStringOrNumber(input: string | number): number
|
||||
|
@ -198,6 +202,12 @@ export class Asset {
|
|||
constructor()
|
||||
get filePath(): number
|
||||
}
|
||||
export class Optional {
|
||||
static optionEnd(required: string, optional?: string | undefined | null): string
|
||||
static optionStart(optional: string | undefined | null, required: string): string
|
||||
static optionStartEnd(optional1: string | undefined | null, required: string, optional2?: string | undefined | null): string
|
||||
static optionOnly(optional?: string | undefined | null): string
|
||||
}
|
||||
export class ClassWithFactory {
|
||||
name: string
|
||||
static withName(name: string): ClassWithFactory
|
||||
|
|
|
@ -6,6 +6,26 @@ fn get_cwd<T: Fn(String) -> Result<()>>(callback: T) {
|
|||
callback(env::current_dir().unwrap().to_string_lossy().to_string()).unwrap();
|
||||
}
|
||||
|
||||
#[napi]
|
||||
fn option_end<T: Fn(String, Option<String>) -> Result<()>>(callback: T) {
|
||||
callback("Hello".to_string(), None).unwrap();
|
||||
}
|
||||
|
||||
#[napi]
|
||||
fn option_start<T: Fn(Option<String>, String) -> Result<()>>(callback: T) {
|
||||
callback(None, "World".to_string()).unwrap();
|
||||
}
|
||||
|
||||
#[napi]
|
||||
fn option_start_end<T: Fn(Option<String>, String, Option<String>) -> Result<()>>(callback: T) {
|
||||
callback(None, "World".to_string(), None).unwrap();
|
||||
}
|
||||
|
||||
#[napi]
|
||||
fn option_only<T: Fn(Option<String>) -> Result<()>>(callback: T) {
|
||||
callback(None).unwrap();
|
||||
}
|
||||
|
||||
/// napi = { version = 2, features = ["serde-json"] }
|
||||
#[napi]
|
||||
fn read_file<T: Fn(Result<()>, Option<String>) -> Result<()>>(callback: T) {
|
||||
|
|
|
@ -237,3 +237,47 @@ impl JsAsset {
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
#[napi]
|
||||
pub struct Optional {}
|
||||
|
||||
#[napi]
|
||||
impl Optional {
|
||||
#[napi]
|
||||
pub fn option_end(required: String, optional: Option<String>) -> String {
|
||||
match optional {
|
||||
None => required,
|
||||
Some(optional) => format!("{} {}", required, optional),
|
||||
}
|
||||
}
|
||||
|
||||
#[napi]
|
||||
pub fn option_start(optional: Option<String>, required: String) -> String {
|
||||
match optional {
|
||||
None => required,
|
||||
Some(optional) => format!("{} {}", optional, required),
|
||||
}
|
||||
}
|
||||
|
||||
#[napi]
|
||||
pub fn option_start_end(
|
||||
optional1: Option<String>,
|
||||
required: String,
|
||||
optional2: Option<String>,
|
||||
) -> String {
|
||||
match (optional1, optional2) {
|
||||
(None, None) => required,
|
||||
(None, Some(optional2)) => format!("{} {}", required, optional2),
|
||||
(Some(optional1), None) => format!("{} {}", optional1, required),
|
||||
(Some(optional1), Some(optional2)) => format!("{} {} {}", optional1, required, optional2),
|
||||
}
|
||||
}
|
||||
|
||||
#[napi]
|
||||
pub fn option_only(optional: Option<String>) -> String {
|
||||
match optional {
|
||||
None => "".to_string(),
|
||||
Some(optional) => format!("{}", optional),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue