This module wraps core JavaScript functions.
Unless your application has very specific requirements and solely targets JavaScript, you should be using the relevant functions in the math, json, and times stdlib modules instead.
Imports
Types
DateLib = ref object
DateTime = ref object
JsonLib = ref object
MathLib = ref object
Vars
Date {.importc, nodecl.}: DateLib
JSON {.importc, nodecl.}: JsonLib
Math {.importc, nodecl.}: MathLib
Procs
proc abs(m: MathLib; a: SomeNumber): SomeNumber {.importcpp, ...raises: [],
tags: [], forbids: [].}
proc acos(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc acosh(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc asin(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc asinh(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc atan(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc atan2(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc atanh(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc cbrt(m: MathLib; f: SomeFloat): SomeFloat {.importcpp, ...raises: [],
tags: [], forbids: [].}
proc ceil(m: MathLib; f: SomeFloat): SomeFloat {.importcpp, ...raises: [],
tags: [], forbids: [].}
proc clz32(m: MathLib; f: SomeInteger): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
func copyWithin[T](self: openArray[T]; target, start, ends: int): seq[T] {.
importjs: "#.copyWithin(#, #, #)", ...raises: [], tags: [], forbids: [].}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin copyWithin uses shallow copy.
Example:
assert ['a', 'b', 'c', 'd', 'e'].copyWithin(0, 3, 4) == @['d', 'b', 'c', 'd', 'e']
assert ['a', 'b', 'c', 'd', 'e'].copyWithin(1, 3) == @['a', 'd', 'e', 'd', 'e']
assert [1, 2, 3, 4, 5].copyWithin(-2) == @[1, 2, 3, 1, 2]
assert [1, 2, 3, 4, 5].copyWithin(0, 3) == @[4, 5, 3, 4, 5]
assert [1, 2, 3, 4, 5].copyWithin(0, 3, 4) == @[4, 2, 3, 4, 5]
assert [1, 2, 3, 4, 5].copyWithin(-2, -3, -1) == @[1, 2, 3, 3, 4]
func copyWithin[T](self: openArray[T]; target, start: int): seq[T] {.
importjs: "#.copyWithin(#, #)", ...raises: [], tags: [], forbids: [].}
func copyWithin[T](self: openArray[T]; target: int): seq[T] {.
importjs: "#.copyWithin(#)", ...raises: [], tags: [], forbids: [].}
proc cos(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc cosh(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
func debugger() {.importjs: "debugger@", ...raises: [], tags: [], forbids: [].}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger Source Edit
proc exp(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc expm1(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc floor(m: MathLib; f: SomeFloat): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc fround(m: MathLib; f: SomeFloat): float32 {.importcpp, ...raises: [],
tags: [], forbids: [].}
proc getDay(d: DateTime): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc getFullYear(d: DateTime): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc getHours(d: DateTime): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc getMilliseconds(d: DateTime): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc getMinutes(d: DateTime): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc getMonth(d: DateTime): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc getSeconds(d: DateTime): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc getTime(d: DateTime): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc getTimezoneOffset(d: DateTime): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc getUTCDate(d: DateTime): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc getUTCDay(d: DateTime): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc getUTCFullYear(d: DateTime): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc getUTCHours(d: DateTime): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc getUTCMilliseconds(d: DateTime): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc getUTCMinutes(d: DateTime): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc getUTCMonth(d: DateTime): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc getUTCSeconds(d: DateTime): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc getYear(d: DateTime): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc hypot(m: MathLib; args: varargs[distinct SomeNumber]): float {.importcpp,
...raises: [], tags: [], forbids: [].}
proc imul(m: MathLib; a, b: int32): int32 {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc log(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc log1p(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc log2(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc log10(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc max(m: MathLib; a, b: SomeNumber): SomeNumber {.importcpp, ...raises: [],
tags: [], forbids: [].}
proc min[T: SomeNumber | JsRoot](m: MathLib; a, b: T): T {.importcpp,
...raises: [], tags: [], forbids: [].}
proc newDate(): DateTime {.importcpp: "new Date()", ...raises: [], tags: [],
forbids: [].}
proc newDate(date: int | string): DateTime {.importcpp: "new Date(#)",
...raises: [], tags: [], forbids: [].}
proc newDate(date: int64): DateTime {.importcpp: "new Date(Number(#))",
...raises: [], tags: [], forbids: [].}
proc newDate(year, month, day, hours, minutes, seconds, milliseconds: int): DateTime {.
importcpp: "new Date(#,#,#,#,#,#,#)", ...raises: [], tags: [], forbids: [].}
proc now(d: DateLib): int {.importcpp, ...raises: [], tags: [], forbids: [].}
proc parse(d: DateLib; s: cstring): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc parse(l: JsonLib; s: cstring): JsRoot {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc pow(m: MathLib; a, b: distinct SomeNumber): float {.importcpp, ...raises: [],
tags: [], forbids: [].}
func queueMicrotask(function: proc) {.importjs: "$1(#)", ...raises: [], tags: [],
forbids: [].}
- https://developer.mozilla.org/en-US/docs/Web/API/queueMicrotask
- https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide
Example: cmd: -r:off
queueMicrotask(proc() = echo "Microtask")
proc random(m: MathLib): float {.importcpp, ...raises: [], tags: [], forbids: [].}
proc round(m: MathLib; f: SomeFloat): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc setFullYear(d: DateTime; year: int) {.importcpp, ...raises: [], tags: [],
forbids: [].}
func shift[T](self: seq[T]): T {.importjs: "#.$1()", ...raises: [], tags: [],
forbids: [].}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
Example:
var arrai = @[1, 2, 3]
assert arrai.shift() == 1
assert arrai == @[2, 3]
proc sign(m: MathLib; f: SomeNumber): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc sin(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc sinh(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc sqrt(m: MathLib; f: SomeFloat): SomeFloat {.importcpp, ...raises: [],
tags: [], forbids: [].}
proc stringify(l: JsonLib; s: JsRoot): cstring {.importcpp, ...raises: [],
tags: [], forbids: [].}
proc tan(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc tanh(m: MathLib; a: SomeNumber): float {.importcpp, ...raises: [], tags: [],
forbids: [].}
func toDateString(d: DateTime): cstring {.importcpp, ...raises: [], tags: [],
forbids: [].}
func toISOString(d: DateTime): cstring {.importcpp, ...raises: [], tags: [],
forbids: [].}
func toJSON(d: DateTime): cstring {.importcpp, ...raises: [], tags: [], forbids: [].}
proc toString(d: DateTime): cstring {.importcpp, ...raises: [], tags: [],
forbids: [].}
func toTimeString(d: DateTime): cstring {.importcpp, ...raises: [], tags: [],
forbids: [].}
func toUTCString(d: DateTime): cstring {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc trunc(m: MathLib; f: SomeFloat): int {.importcpp, ...raises: [], tags: [],
forbids: [].}
proc UTC(d: DateLib): int {.importcpp, ...raises: [], tags: [], forbids: [].}