Support code hot reloading for JavaScript projects (#7362)
* Support code hot reloading for JavaScript projects * Add some missing JavaScript symbols and APIs * fix the Travis build * (review changes) remove the js type from the standard library as it doesn't follow NEP-1 * more additions to the DOM module * Follow NEP-1 in jsffi; spell 'hot code reloading' correctly * introduce a jscore module * Document jscore module. * readded js type * Remove the '$' operator that doesn't behave
This commit is contained in:
parent
1d1d6f39a3
commit
e3037a2f33
14 changed files with 285 additions and 68 deletions
|
|
@ -70,22 +70,31 @@ template mangleJsName(name: cstring): cstring =
|
|||
"mangledName" & $nameCounter
|
||||
|
||||
type
|
||||
JsRoot* = ref object of RootObj
|
||||
## Root type of both JsObject and JsAssoc
|
||||
JsObject* = ref object of JsRoot
|
||||
## Dynamically typed wrapper around a JavaScript object.
|
||||
JsAssoc*[K, V] = ref object of JsRoot
|
||||
## Statically typed wrapper around a JavaScript object.
|
||||
|
||||
NotString = concept c
|
||||
c isnot string
|
||||
js* = JsObject
|
||||
|
||||
var jsarguments* {.importc: "arguments", nodecl}: JsObject
|
||||
## JavaScript's arguments pseudo-variable
|
||||
var
|
||||
jsArguments* {.importc: "arguments", nodecl}: JsObject
|
||||
## JavaScript's arguments pseudo-variable
|
||||
jsNull* {.importc: "null", nodecl.}: JsObject
|
||||
## JavaScript's null literal
|
||||
jsUndefined* {.importc: "undefined", nodecl.}: JsObject
|
||||
## JavaScript's undefined literal
|
||||
jsDirname* {.importc: "__dirname", nodecl.}: cstring
|
||||
## JavaScript's __dirname pseudo-variable
|
||||
jsFilename* {.importc: "__filename", nodecl.}: cstring
|
||||
## JavaScript's __filename pseudo-variable
|
||||
|
||||
# New
|
||||
proc newJsObject*: JsObject {. importcpp: "{@}" .}
|
||||
## Creates a new empty JsObject
|
||||
|
||||
proc newJsAssoc*[K, V]: JsAssoc[K, V] {. importcpp: "{@}" .}
|
||||
## Creates a new empty JsAssoc with key type `K` and value type `V`.
|
||||
|
||||
|
|
@ -97,13 +106,16 @@ proc hasOwnProperty*(x: JsObject, prop: cstring): bool
|
|||
proc jsTypeOf*(x: JsObject): cstring {. importcpp: "typeof(#)" .}
|
||||
## Returns the name of the JsObject's JavaScript type as a cstring.
|
||||
|
||||
proc jsnew*(x: auto): JsObject {.importcpp: "(new #)".}
|
||||
proc jsNew*(x: auto): JsObject {.importcpp: "(new #)".}
|
||||
## Turns a regular function call into an invocation of the
|
||||
## JavaScript's `new` operator
|
||||
|
||||
proc jsdelete*(x: auto): JsObject {.importcpp: "(delete #)".}
|
||||
proc jsDelete*(x: auto): JsObject {.importcpp: "(delete #)".}
|
||||
## JavaScript's `delete` operator
|
||||
|
||||
proc require*(module: cstring): JsObject {.importc.}
|
||||
## JavaScript's `require` function
|
||||
|
||||
# Conversion to and from JsObject
|
||||
proc to*(x: JsObject, T: typedesc): T {. importcpp: "(#)" .}
|
||||
## Converts a JsObject `x` to type `T`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue