v/vlib/builtin/js/jsfns.js.v

187 lines
4.1 KiB
V

// Copyright (c) 2019-2022 Alexander Medvednikov. All rights reserved.
// Use of this source code is governed by an MIT license
// that can be found in the LICENSE file.
// This file contains JS functions present in both node and the browser.
// They have been ported from their TypeScript definitions.
module builtin
pub interface JS.Object {}
[single_impl]
pub interface JS.BigInt {
JS.Any
}
[single_impl]
pub interface JS.Number {
JS.Any
}
[single_impl]
pub interface JS.String {
JS.Any
length JS.Number
charAt(index JS.Number) JS.String
charCodeAt(index JS.Number) JS.Number
toUpperCase() JS.String
toLowerCase() JS.String
concat(a JS.String) JS.String
includes(substr JS.String) JS.Boolean
endsWith(substr JS.String) JS.Boolean
startsWith(substr JS.String) JS.Boolean
slice(a JS.Number, b JS.Number) JS.String
split(dot JS.String) JS.Array
indexOf(needle JS.String) JS.Number
lastIndexOf(needle JS.String) JS.Number
}
[single_impl]
pub interface JS.Boolean {
JS.Any
length JS.Number
}
pub interface JS.Map {
JS.Any
size JS.Number
clear()
delete(key JS.Any) JS.Boolean
get(key JS.Any) JS.Any
has(key JS.Any) JS.Any
set(key JS.Any, val JS.Any)
}
#function Any(val) { return val; }
pub interface JS.Any {}
pub fn js_is_null(x JS.Any) bool {
res := false
#res.val = x === null
return res
}
pub fn js_is_undefined(x JS.Any) bool {
res := false
#res.val = x === undefined
return res
}
pub fn js_null() JS.Any {
mut obj := JS.Any{}
#obj = null;
return obj
}
pub fn js_undefined() JS.Any {
mut obj := JS.Any{}
#obj = undefined;
return obj
}
pub interface JS.Array {
JS.Any // map(fn (JS.Any) JS.Any) JS.Array
map(JS.Any) JS.Array
push(JS.Any) JS.Any
pop() JS.Any
at(JS.Number) JS.Any
mut:
length JS.Number
}
pub fn JS.Array.prototype.constructor(...any) JS.Array
// browser: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Error
// node: https://nodejs.org/api/errors.html#errors_class_error
pub struct JS.Error {
pub:
name string
message string
stack string
}
// Type prototype functions
fn (v JS.String) toString() JS.String
fn (v JS.Number) toString() JS.String
fn (v JS.Boolean) toString() JS.String
fn (v JS.Array) toString() JS.String
fn (v JS.Map) toString() JS.String
// Hack for "`[]JS.String` is not a struct" when returning arr.length or arr.len
// TODO: Fix []JS.String not a struct error
fn native_str_arr_len(arr []JS.String) int {
len := 0
#len = arr.length
return len
}
// Top level functions
fn JS.eval(JS.String) JS.Any
fn JS.parseInt(JS.String, f64) JS.Number
fn JS.parseFloat(JS.String) JS.Number
fn JS.isNaN(f64) bool
fn JS.isFinite(f64) bool
fn JS.decodeURI(JS.String) JS.String
fn JS.decodeURIComponent(JS.String) JS.String
fn JS.encodeURI(JS.String) JS.String
type EncodeURIComponentArg = JS.String | bool | f64
fn JS.encodeURIComponent(EncodeURIComponentArg) JS.String
fn JS.escape(JS.String) JS.String
fn JS.unescape(JS.String) JS.String
// console
fn JS.console.assert(bool, ...any)
fn JS.console.clear()
fn JS.console.count(JS.String)
fn JS.console.countReset(JS.String)
fn JS.console.debug(...any)
fn JS.console.dir(any, any)
fn JS.console.dirxml(...any)
fn JS.console.error(...any)
fn JS.console.exception(string, ...any)
fn JS.console.group(...any)
fn JS.console.groupCollapsed(...any)
fn JS.console.groupEnd()
fn JS.console.info(...any)
fn JS.console.log(...any)
fn JS.console.table(any, []string)
fn JS.console.time(JS.String)
fn JS.console.timeEnd(JS.String)
fn JS.console.timeLog(string, ...any)
fn JS.console.timeStamp(string)
fn JS.console.trace(...any)
fn JS.console.warn(...any)
// Math
fn JS.Math.abs(f64) f64
fn JS.Math.acos(f64) f64
fn JS.Math.asin(f64) f64
fn JS.Math.atan(f64) f64
fn JS.Math.atan2(f64, f64) f64
fn JS.Math.ceil(f64) f64
fn JS.Math.cos(f64) f64
fn JS.Math.exp(f64) f64
fn JS.Math.floor(f64) f64
fn JS.Math.log(f64) f64
fn JS.Math.max(...f64) f64
fn JS.Math.min(...f64) f64
fn JS.Math.pow(f64, f64) f64
fn JS.Math.random() f64
fn JS.Math.round(f64) f64
fn JS.Math.sin(f64) f64
fn JS.Math.sqrt(f64) f64
fn JS.Math.tan(f64) f64
// JSON
fn JS.JSON.stringify(any) JS.String
fn JS.JSON.parse(string) any