Use importjs (#17422)
This commit is contained in:
parent
430c30299f
commit
9997b42c35
4 changed files with 56 additions and 56 deletions
|
|
@ -70,7 +70,7 @@ type
|
||||||
future*: T
|
future*: T
|
||||||
## Wraps the return type of an asynchronous procedure.
|
## Wraps the return type of an asynchronous procedure.
|
||||||
|
|
||||||
PromiseJs* {.importcpp: "Promise".} = ref object
|
PromiseJs* {.importjs: "Promise".} = ref object
|
||||||
## A JavaScript Promise.
|
## A JavaScript Promise.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -113,7 +113,7 @@ proc generateJsasync(arg: NimNode): NimNode =
|
||||||
|
|
||||||
if len(code) > 0:
|
if len(code) > 0:
|
||||||
var awaitFunction = quote:
|
var awaitFunction = quote:
|
||||||
proc await[T](f: Future[T]): T {.importcpp: "(await #)", used.}
|
proc await[T](f: Future[T]): T {.importjs: "(await #)", used.}
|
||||||
result.body.add(awaitFunction)
|
result.body.add(awaitFunction)
|
||||||
|
|
||||||
var resolve: NimNode
|
var resolve: NimNode
|
||||||
|
|
@ -150,11 +150,11 @@ macro async*(arg: untyped): untyped =
|
||||||
else:
|
else:
|
||||||
result = generateJsasync(arg)
|
result = generateJsasync(arg)
|
||||||
|
|
||||||
proc newPromise*[T](handler: proc(resolve: proc(response: T))): Future[T] {.importcpp: "(new Promise(#))".}
|
proc newPromise*[T](handler: proc(resolve: proc(response: T))): Future[T] {.importjs: "(new Promise(#))".}
|
||||||
## A helper for wrapping callback-based functions
|
## A helper for wrapping callback-based functions
|
||||||
## into promises and async procedures.
|
## into promises and async procedures.
|
||||||
|
|
||||||
proc newPromise*(handler: proc(resolve: proc())): Future[void] {.importcpp: "(new Promise(#))".}
|
proc newPromise*(handler: proc(resolve: proc())): Future[void] {.importjs: "(new Promise(#))".}
|
||||||
## A helper for wrapping callback-based functions
|
## A helper for wrapping callback-based functions
|
||||||
## into promises and async procedures.
|
## into promises and async procedures.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,4 @@ import std/dom
|
||||||
|
|
||||||
{.push importcpp.}
|
{.push importcpp.}
|
||||||
proc elementsFromPoint*(n: DocumentOrShadowRoot; x, y: float): seq[Element]
|
proc elementsFromPoint*(n: DocumentOrShadowRoot; x, y: float): seq[Element]
|
||||||
{.pop.}
|
{.pop.}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ runnableExamples:
|
||||||
var document {.importc, nodecl.}: JsObject
|
var document {.importc, nodecl.}: JsObject
|
||||||
var console {.importc, nodecl.}: JsObject
|
var console {.importc, nodecl.}: JsObject
|
||||||
# import the "$" function
|
# import the "$" function
|
||||||
proc jq(selector: JsObject): JsObject {.importcpp: "$$(#)".}
|
proc jq(selector: JsObject): JsObject {.importjs: "$$(#)".}
|
||||||
|
|
||||||
# Use jQuery to make the following code run, after the document is ready.
|
# Use jQuery to make the following code run, after the document is ready.
|
||||||
# This uses an experimental `.()` operator for `JsObject`, to emit
|
# This uses an experimental `.()` operator for `JsObject`, to emit
|
||||||
|
|
@ -70,7 +70,7 @@ template mangleJsName(name: cstring): cstring =
|
||||||
|
|
||||||
# only values that can be mapped 1 to 1 with cstring should be keys: they have an injective function with cstring
|
# only values that can be mapped 1 to 1 with cstring should be keys: they have an injective function with cstring
|
||||||
|
|
||||||
proc toJsKey*[T: SomeInteger](text: cstring, t: type T): T {.importcpp: "parseInt(#)".}
|
proc toJsKey*[T: SomeInteger](text: cstring, t: type T): T {.importjs: "parseInt(#)".}
|
||||||
|
|
||||||
proc toJsKey*[T: enum](text: cstring, t: type T): T =
|
proc toJsKey*[T: enum](text: cstring, t: type T): T =
|
||||||
T(text.toJsKey(int))
|
T(text.toJsKey(int))
|
||||||
|
|
@ -78,7 +78,7 @@ proc toJsKey*[T: enum](text: cstring, t: type T): T =
|
||||||
proc toJsKey*(text: cstring, t: type cstring): cstring =
|
proc toJsKey*(text: cstring, t: type cstring): cstring =
|
||||||
text
|
text
|
||||||
|
|
||||||
proc toJsKey*[T: SomeFloat](text: cstring, t: type T): T {.importcpp: "parseFloat(#)".}
|
proc toJsKey*[T: SomeFloat](text: cstring, t: type T): T {.importjs: "parseFloat(#)".}
|
||||||
|
|
||||||
type
|
type
|
||||||
JsKey* = concept a, type T
|
JsKey* = concept a, type T
|
||||||
|
|
@ -103,10 +103,10 @@ var
|
||||||
jsFilename* {.importc: "__filename", nodecl.}: cstring
|
jsFilename* {.importc: "__filename", nodecl.}: cstring
|
||||||
## JavaScript's __filename pseudo-variable.
|
## JavaScript's __filename pseudo-variable.
|
||||||
|
|
||||||
proc isNull*[T](x: T): bool {.noSideEffect, importcpp: "(# === null)".}
|
proc isNull*[T](x: T): bool {.noSideEffect, importjs: "(# === null)".}
|
||||||
## Checks if a value is exactly null.
|
## Checks if a value is exactly null.
|
||||||
|
|
||||||
proc isUndefined*[T](x: T): bool {.noSideEffect, importcpp: "(# === undefined)".}
|
proc isUndefined*[T](x: T): bool {.noSideEffect, importjs: "(# === undefined)".}
|
||||||
## Checks if a value is exactly undefined.
|
## Checks if a value is exactly undefined.
|
||||||
|
|
||||||
# Exceptions
|
# Exceptions
|
||||||
|
|
@ -121,35 +121,35 @@ type
|
||||||
JsURIError* {.importc: "URIError".} = object of JsError
|
JsURIError* {.importc: "URIError".} = object of JsError
|
||||||
|
|
||||||
# New
|
# New
|
||||||
proc newJsObject*: JsObject {.importcpp: "{@}".}
|
proc newJsObject*: JsObject {.importjs: "{@}".}
|
||||||
## Creates a new empty JsObject.
|
## Creates a new empty JsObject.
|
||||||
|
|
||||||
proc newJsAssoc*[K: JsKey, V]: JsAssoc[K, V] {.importcpp: "{@}".}
|
proc newJsAssoc*[K: JsKey, V]: JsAssoc[K, V] {.importjs: "{@}".}
|
||||||
## Creates a new empty JsAssoc with key type `K` and value type `V`.
|
## Creates a new empty JsAssoc with key type `K` and value type `V`.
|
||||||
|
|
||||||
# Checks
|
# Checks
|
||||||
proc hasOwnProperty*(x: JsObject, prop: cstring): bool
|
proc hasOwnProperty*(x: JsObject, prop: cstring): bool
|
||||||
{.importcpp: "#.hasOwnProperty(#)".}
|
{.importjs: "#.hasOwnProperty(#)".}
|
||||||
## Checks, whether `x` has a property of name `prop`.
|
## Checks, whether `x` has a property of name `prop`.
|
||||||
|
|
||||||
proc jsTypeOf*(x: JsObject): cstring {.importcpp: "typeof(#)".}
|
proc jsTypeOf*(x: JsObject): cstring {.importjs: "typeof(#)".}
|
||||||
## Returns the name of the JsObject's JavaScript type as a cstring.
|
## Returns the name of the JsObject's JavaScript type as a cstring.
|
||||||
|
|
||||||
proc jsNew*(x: auto): JsObject {.importcpp: "(new #)".}
|
proc jsNew*(x: auto): JsObject {.importjs: "(new #)".}
|
||||||
## Turns a regular function call into an invocation of the
|
## Turns a regular function call into an invocation of the
|
||||||
## JavaScript's `new` operator.
|
## JavaScript's `new` operator.
|
||||||
|
|
||||||
proc jsDelete*(x: auto): JsObject {.importcpp: "(delete #)".}
|
proc jsDelete*(x: auto): JsObject {.importjs: "(delete #)".}
|
||||||
## JavaScript's `delete` operator.
|
## JavaScript's `delete` operator.
|
||||||
|
|
||||||
proc require*(module: cstring): JsObject {.importc.}
|
proc require*(module: cstring): JsObject {.importc.}
|
||||||
## JavaScript's `require` function.
|
## JavaScript's `require` function.
|
||||||
|
|
||||||
# Conversion to and from JsObject
|
# Conversion to and from JsObject
|
||||||
proc to*(x: JsObject, T: typedesc): T {.importcpp: "(#)".}
|
proc to*(x: JsObject, T: typedesc): T {.importjs: "(#)".}
|
||||||
## Converts a JsObject `x` to type `T`.
|
## Converts a JsObject `x` to type `T`.
|
||||||
|
|
||||||
proc toJs*[T](val: T): JsObject {.importcpp: "(#)".}
|
proc toJs*[T](val: T): JsObject {.importjs: "(#)".}
|
||||||
## Converts a value of any type to type JsObject.
|
## Converts a value of any type to type JsObject.
|
||||||
|
|
||||||
template toJs*(s: string): JsObject = cstring(s).toJs
|
template toJs*(s: string): JsObject = cstring(s).toJs
|
||||||
|
|
@ -160,50 +160,50 @@ macro jsFromAst*(n: untyped): untyped =
|
||||||
result = newProc(procType = nnkDo, body = result)
|
result = newProc(procType = nnkDo, body = result)
|
||||||
return quote: toJs(`result`)
|
return quote: toJs(`result`)
|
||||||
|
|
||||||
proc `&`*(a, b: cstring): cstring {.importcpp: "(# + #)".}
|
proc `&`*(a, b: cstring): cstring {.importjs: "(# + #)".}
|
||||||
## Concatenation operator for JavaScript strings.
|
## Concatenation operator for JavaScript strings.
|
||||||
|
|
||||||
proc `+` *(x, y: JsObject): JsObject {.importcpp: "(# + #)".}
|
proc `+` *(x, y: JsObject): JsObject {.importjs: "(# + #)".}
|
||||||
proc `-` *(x, y: JsObject): JsObject {.importcpp: "(# - #)".}
|
proc `-` *(x, y: JsObject): JsObject {.importjs: "(# - #)".}
|
||||||
proc `*` *(x, y: JsObject): JsObject {.importcpp: "(# * #)".}
|
proc `*` *(x, y: JsObject): JsObject {.importjs: "(# * #)".}
|
||||||
proc `/` *(x, y: JsObject): JsObject {.importcpp: "(# / #)".}
|
proc `/` *(x, y: JsObject): JsObject {.importjs: "(# / #)".}
|
||||||
proc `%` *(x, y: JsObject): JsObject {.importcpp: "(# % #)".}
|
proc `%` *(x, y: JsObject): JsObject {.importjs: "(# % #)".}
|
||||||
proc `+=` *(x, y: JsObject): JsObject {.importcpp: "(# += #)", discardable.}
|
proc `+=` *(x, y: JsObject): JsObject {.importjs: "(# += #)", discardable.}
|
||||||
proc `-=` *(x, y: JsObject): JsObject {.importcpp: "(# -= #)", discardable.}
|
proc `-=` *(x, y: JsObject): JsObject {.importjs: "(# -= #)", discardable.}
|
||||||
proc `*=` *(x, y: JsObject): JsObject {.importcpp: "(# *= #)", discardable.}
|
proc `*=` *(x, y: JsObject): JsObject {.importjs: "(# *= #)", discardable.}
|
||||||
proc `/=` *(x, y: JsObject): JsObject {.importcpp: "(# /= #)", discardable.}
|
proc `/=` *(x, y: JsObject): JsObject {.importjs: "(# /= #)", discardable.}
|
||||||
proc `%=` *(x, y: JsObject): JsObject {.importcpp: "(# %= #)", discardable.}
|
proc `%=` *(x, y: JsObject): JsObject {.importjs: "(# %= #)", discardable.}
|
||||||
proc `++` *(x: JsObject): JsObject {.importcpp: "(++#)".}
|
proc `++` *(x: JsObject): JsObject {.importjs: "(++#)".}
|
||||||
proc `--` *(x: JsObject): JsObject {.importcpp: "(--#)".}
|
proc `--` *(x: JsObject): JsObject {.importjs: "(--#)".}
|
||||||
proc `>` *(x, y: JsObject): JsObject {.importcpp: "(# > #)".}
|
proc `>` *(x, y: JsObject): JsObject {.importjs: "(# > #)".}
|
||||||
proc `<` *(x, y: JsObject): JsObject {.importcpp: "(# < #)".}
|
proc `<` *(x, y: JsObject): JsObject {.importjs: "(# < #)".}
|
||||||
proc `>=` *(x, y: JsObject): JsObject {.importcpp: "(# >= #)".}
|
proc `>=` *(x, y: JsObject): JsObject {.importjs: "(# >= #)".}
|
||||||
proc `<=` *(x, y: JsObject): JsObject {.importcpp: "(# <= #)".}
|
proc `<=` *(x, y: JsObject): JsObject {.importjs: "(# <= #)".}
|
||||||
proc `**` *(x, y: JsObject): JsObject {.importcpp: "((#) ** #)".}
|
proc `**` *(x, y: JsObject): JsObject {.importjs: "((#) ** #)".}
|
||||||
# (#) needed, refs https://github.com/nim-lang/Nim/pull/16409#issuecomment-760550812
|
# (#) needed, refs https://github.com/nim-lang/Nim/pull/16409#issuecomment-760550812
|
||||||
proc `and`*(x, y: JsObject): JsObject {.importcpp: "(# && #)".}
|
proc `and`*(x, y: JsObject): JsObject {.importjs: "(# && #)".}
|
||||||
proc `or` *(x, y: JsObject): JsObject {.importcpp: "(# || #)".}
|
proc `or` *(x, y: JsObject): JsObject {.importjs: "(# || #)".}
|
||||||
proc `not`*(x: JsObject): JsObject {.importcpp: "(!#)".}
|
proc `not`*(x: JsObject): JsObject {.importjs: "(!#)".}
|
||||||
proc `in` *(x, y: JsObject): JsObject {.importcpp: "(# in #)".}
|
proc `in` *(x, y: JsObject): JsObject {.importjs: "(# in #)".}
|
||||||
|
|
||||||
proc `[]`*(obj: JsObject, field: cstring): JsObject {.importcpp: getImpl.}
|
proc `[]`*(obj: JsObject, field: cstring): JsObject {.importjs: getImpl.}
|
||||||
## Returns the value of a property of name `field` from a JsObject `obj`.
|
## Returns the value of a property of name `field` from a JsObject `obj`.
|
||||||
|
|
||||||
proc `[]`*(obj: JsObject, field: int): JsObject {.importcpp: getImpl.}
|
proc `[]`*(obj: JsObject, field: int): JsObject {.importjs: getImpl.}
|
||||||
## Returns the value of a property of name `field` from a JsObject `obj`.
|
## Returns the value of a property of name `field` from a JsObject `obj`.
|
||||||
|
|
||||||
proc `[]=`*[T](obj: JsObject, field: cstring, val: T) {.importcpp: setImpl.}
|
proc `[]=`*[T](obj: JsObject, field: cstring, val: T) {.importjs: setImpl.}
|
||||||
## Sets the value of a property of name `field` in a JsObject `obj` to `v`.
|
## Sets the value of a property of name `field` in a JsObject `obj` to `v`.
|
||||||
|
|
||||||
proc `[]=`*[T](obj: JsObject, field: int, val: T) {.importcpp: setImpl.}
|
proc `[]=`*[T](obj: JsObject, field: int, val: T) {.importjs: setImpl.}
|
||||||
## Sets the value of a property of name `field` in a JsObject `obj` to `v`.
|
## Sets the value of a property of name `field` in a JsObject `obj` to `v`.
|
||||||
|
|
||||||
proc `[]`*[K: JsKey, V](obj: JsAssoc[K, V], field: K): V
|
proc `[]`*[K: JsKey, V](obj: JsAssoc[K, V], field: K): V
|
||||||
{.importcpp: getImpl.}
|
{.importjs: getImpl.}
|
||||||
## Returns the value of a property of name `field` from a JsAssoc `obj`.
|
## Returns the value of a property of name `field` from a JsAssoc `obj`.
|
||||||
|
|
||||||
proc `[]=`*[K: JsKey, V](obj: JsAssoc[K, V], field: K, val: V)
|
proc `[]=`*[K: JsKey, V](obj: JsAssoc[K, V], field: K, val: V)
|
||||||
{.importcpp: setImpl.}
|
{.importjs: setImpl.}
|
||||||
## Sets the value of a property of name `field` in a JsAssoc `obj` to `v`.
|
## Sets the value of a property of name `field` in a JsAssoc `obj` to `v`.
|
||||||
|
|
||||||
proc `[]`*[V](obj: JsAssoc[cstring, V], field: string): V =
|
proc `[]`*[V](obj: JsAssoc[cstring, V], field: string): V =
|
||||||
|
|
@ -212,7 +212,7 @@ proc `[]`*[V](obj: JsAssoc[cstring, V], field: string): V =
|
||||||
proc `[]=`*[V](obj: JsAssoc[cstring, V], field: string, val: V) =
|
proc `[]=`*[V](obj: JsAssoc[cstring, V], field: string, val: V) =
|
||||||
obj[cstring(field)] = val
|
obj[cstring(field)] = val
|
||||||
|
|
||||||
proc `==`*(x, y: JsRoot): bool {.importcpp: "(# === #)".}
|
proc `==`*(x, y: JsRoot): bool {.importjs: "(# === #)".}
|
||||||
## Compares two JsObjects or JsAssocs. Be careful though, as this is comparison
|
## Compares two JsObjects or JsAssocs. Be careful though, as this is comparison
|
||||||
## like in JavaScript, so if your JsObjects are in fact JavaScript Objects,
|
## like in JavaScript, so if your JsObjects are in fact JavaScript Objects,
|
||||||
## and not strings or numbers, this is a *comparison of references*.
|
## and not strings or numbers, this is a *comparison of references*.
|
||||||
|
|
@ -229,7 +229,7 @@ macro `.`*(obj: JsObject, field: untyped): JsObject =
|
||||||
let importString = "#." & $field
|
let importString = "#." & $field
|
||||||
result = quote do:
|
result = quote do:
|
||||||
proc helper(o: JsObject): JsObject
|
proc helper(o: JsObject): JsObject
|
||||||
{.importcpp: `importString`, gensym.}
|
{.importjs: `importString`, gensym.}
|
||||||
helper(`obj`)
|
helper(`obj`)
|
||||||
else:
|
else:
|
||||||
if not mangledNames.hasKey($field):
|
if not mangledNames.hasKey($field):
|
||||||
|
|
@ -237,7 +237,7 @@ macro `.`*(obj: JsObject, field: untyped): JsObject =
|
||||||
let importString = "#." & mangledNames[$field]
|
let importString = "#." & mangledNames[$field]
|
||||||
result = quote do:
|
result = quote do:
|
||||||
proc helper(o: JsObject): JsObject
|
proc helper(o: JsObject): JsObject
|
||||||
{.importcpp: `importString`, gensym.}
|
{.importjs: `importString`, gensym.}
|
||||||
helper(`obj`)
|
helper(`obj`)
|
||||||
|
|
||||||
macro `.=`*(obj: JsObject, field, value: untyped): untyped =
|
macro `.=`*(obj: JsObject, field, value: untyped): untyped =
|
||||||
|
|
@ -247,7 +247,7 @@ macro `.=`*(obj: JsObject, field, value: untyped): untyped =
|
||||||
let importString = "#." & $field & " = #"
|
let importString = "#." & $field & " = #"
|
||||||
result = quote do:
|
result = quote do:
|
||||||
proc helper(o: JsObject, v: auto)
|
proc helper(o: JsObject, v: auto)
|
||||||
{.importcpp: `importString`, gensym.}
|
{.importjs: `importString`, gensym.}
|
||||||
helper(`obj`, `value`)
|
helper(`obj`, `value`)
|
||||||
else:
|
else:
|
||||||
if not mangledNames.hasKey($field):
|
if not mangledNames.hasKey($field):
|
||||||
|
|
@ -255,7 +255,7 @@ macro `.=`*(obj: JsObject, field, value: untyped): untyped =
|
||||||
let importString = "#." & mangledNames[$field] & " = #"
|
let importString = "#." & mangledNames[$field] & " = #"
|
||||||
result = quote do:
|
result = quote do:
|
||||||
proc helper(o: JsObject, v: auto)
|
proc helper(o: JsObject, v: auto)
|
||||||
{.importcpp: `importString`, gensym.}
|
{.importjs: `importString`, gensym.}
|
||||||
helper(`obj`, `value`)
|
helper(`obj`, `value`)
|
||||||
|
|
||||||
macro `.()`*(obj: JsObject,
|
macro `.()`*(obj: JsObject,
|
||||||
|
|
@ -286,7 +286,7 @@ macro `.()`*(obj: JsObject,
|
||||||
importString = "#." & mangledNames[$field] & "(@)"
|
importString = "#." & mangledNames[$field] & "(@)"
|
||||||
result = quote:
|
result = quote:
|
||||||
proc helper(o: JsObject): JsObject
|
proc helper(o: JsObject): JsObject
|
||||||
{.importcpp: `importString`, gensym, discardable.}
|
{.importjs: `importString`, gensym, discardable.}
|
||||||
helper(`obj`)
|
helper(`obj`)
|
||||||
for idx in 0 ..< args.len:
|
for idx in 0 ..< args.len:
|
||||||
let paramName = newIdentNode("param" & $idx)
|
let paramName = newIdentNode("param" & $idx)
|
||||||
|
|
@ -306,7 +306,7 @@ macro `.`*[K: cstring, V](obj: JsAssoc[K, V],
|
||||||
importString = "#." & mangledNames[$field]
|
importString = "#." & mangledNames[$field]
|
||||||
result = quote do:
|
result = quote do:
|
||||||
proc helper(o: type(`obj`)): `obj`.V
|
proc helper(o: type(`obj`)): `obj`.V
|
||||||
{.importcpp: `importString`, gensym.}
|
{.importjs: `importString`, gensym.}
|
||||||
helper(`obj`)
|
helper(`obj`)
|
||||||
|
|
||||||
macro `.=`*[K: cstring, V](obj: JsAssoc[K, V],
|
macro `.=`*[K: cstring, V](obj: JsAssoc[K, V],
|
||||||
|
|
@ -323,7 +323,7 @@ macro `.=`*[K: cstring, V](obj: JsAssoc[K, V],
|
||||||
importString = "#." & mangledNames[$field] & " = #"
|
importString = "#." & mangledNames[$field] & " = #"
|
||||||
result = quote do:
|
result = quote do:
|
||||||
proc helper(o: type(`obj`), v: `obj`.V)
|
proc helper(o: type(`obj`), v: `obj`.V)
|
||||||
{.importcpp: `importString`, gensym.}
|
{.importjs: `importString`, gensym.}
|
||||||
helper(`obj`, `value`)
|
helper(`obj`, `value`)
|
||||||
|
|
||||||
macro `.()`*[K: cstring, V: proc](obj: JsAssoc[K, V],
|
macro `.()`*[K: cstring, V: proc](obj: JsAssoc[K, V],
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
when not defined(js):
|
when not defined(js):
|
||||||
{.fatal: "Module jsbigints is designed to be used with the JavaScript backend.".}
|
{.fatal: "Module jsbigints is designed to be used with the JavaScript backend.".}
|
||||||
|
|
||||||
type JsBigIntImpl {.importc: "bigint".} = int # https://github.com/nim-lang/Nim/pull/16606
|
type JsBigIntImpl {.importjs: "bigint".} = int # https://github.com/nim-lang/Nim/pull/16606
|
||||||
type JsBigInt* = distinct JsBigIntImpl ## Arbitrary precision integer for JavaScript target.
|
type JsBigInt* = distinct JsBigIntImpl ## Arbitrary precision integer for JavaScript target.
|
||||||
|
|
||||||
func big*(integer: SomeInteger): JsBigInt {.importjs: "BigInt(#)".} =
|
func big*(integer: SomeInteger): JsBigInt {.importjs: "BigInt(#)".} =
|
||||||
## Constructor for `JsBigInt`.
|
## Constructor for `JsBigInt`.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue