172 lines
2.9 KiB
Markdown
172 lines
2.9 KiB
Markdown
---
|
|
tags: api/space-lua
|
|
references:
|
|
- client/space_lua/stdlib/js.ts
|
|
---
|
|
|
|
The `js` namespace provides JavaScript interoperability, including dynamic module imports, Lua/JavaScript value conversion, and asynchronous iterable support.
|
|
|
|
`js.importFromSpace` resolves a space-relative file path to the current space's same-origin `/.fs` URL. This lets a library import a JavaScript module shipped as a [[Frontmatter#files]] asset without constructing a deployment-specific base URL. A leading slash is optional, and a sole `default` export is unwrapped like `js.import`.
|
|
|
|
<!--#lua spacelua.renderApiDocumentation("js") -->
|
|
## js.eachIterable
|
|
|
|
`js.eachIterable(iterable)`
|
|
|
|
Creates a Lua iterator over a JavaScript async iterable.
|
|
|
|
**Parameters:**
|
|
|
|
- `iterable` (`userdata`) — JavaScript async iterable.
|
|
|
|
**Returns:**
|
|
|
|
- `function` — Iterator yielding successive JavaScript values.
|
|
|
|
**Example:**
|
|
|
|
```lua
|
|
for value in js.eachIterable(someJsAsyncIterable) do
|
|
print(value)
|
|
end
|
|
```
|
|
|
|
## js.import
|
|
|
|
`js.import(url)`
|
|
|
|
Dynamically imports a JavaScript module from a URL.
|
|
|
|
**Parameters:**
|
|
|
|
- `url` (`string`) — Module URL.
|
|
|
|
**Returns:**
|
|
|
|
- `userdata` — Imported module, with a sole default export unwrapped.
|
|
|
|
**Example:**
|
|
|
|
```lua
|
|
local lib = js.import("https://esm.sh/lodash@4.17.21")
|
|
```
|
|
|
|
## js.importFromSpace
|
|
|
|
`js.importFromSpace(path)`
|
|
|
|
Imports a JavaScript module from a file in the current space.
|
|
|
|
**Parameters:**
|
|
|
|
- `path` (`string`) — Space-relative module path, with an optional leading slash.
|
|
|
|
**Returns:**
|
|
|
|
- `userdata` — Imported module, with a sole default export unwrapped.
|
|
|
|
**Example:**
|
|
|
|
```lua
|
|
local acme = js.importFromSpace("Library/acme/acme.js")
|
|
```
|
|
|
|
## js.log
|
|
|
|
`js.log(...)`
|
|
|
|
Logs values to the JavaScript console.
|
|
|
|
**Parameters:**
|
|
|
|
- `...` — Values to log.
|
|
|
|
**Example:**
|
|
|
|
```lua
|
|
js.log("User data:", {name = "Ada"})
|
|
```
|
|
|
|
## js.new
|
|
|
|
`js.new(constructor, ...): userdata`
|
|
|
|
Creates an instance of a JavaScript class.
|
|
|
|
**Parameters:**
|
|
|
|
- `constructor` (`userdata`) — JavaScript constructor function.
|
|
- `...` — Constructor arguments converted to JavaScript values.
|
|
|
|
**Returns:**
|
|
|
|
- `userdata` — New JavaScript instance.
|
|
|
|
**Example:**
|
|
|
|
```lua
|
|
local value = js.new(js.window.Date, "2024-03-14")
|
|
```
|
|
|
|
## js.stringify
|
|
|
|
`js.stringify(value)`
|
|
|
|
Serializes a value as JSON using JavaScript semantics.
|
|
|
|
**Parameters:**
|
|
|
|
- `value` — Value to serialize.
|
|
|
|
**Returns:**
|
|
|
|
- `string` — JSON representation.
|
|
|
|
**Example:**
|
|
|
|
```lua
|
|
print(js.stringify({1, 2, 3})) -- [1,2,3]
|
|
```
|
|
|
|
## js.tojs
|
|
|
|
`js.tojs(value)`
|
|
|
|
Converts a Lua value to its JavaScript representation.
|
|
|
|
**Parameters:**
|
|
|
|
- `value` — Lua value to convert.
|
|
|
|
**Returns:**
|
|
|
|
- Value — Converted JavaScript value.
|
|
|
|
**Example:**
|
|
|
|
```lua
|
|
local jsArray = js.tojs({1, 2, 3})
|
|
```
|
|
|
|
## js.tolua
|
|
|
|
`js.tolua(value)`
|
|
|
|
Converts a JavaScript value to its Lua representation.
|
|
|
|
**Parameters:**
|
|
|
|
- `value` — JavaScript value to convert.
|
|
|
|
**Returns:**
|
|
|
|
- Value — Converted Lua value.
|
|
|
|
**Example:**
|
|
|
|
```lua
|
|
local luaTable = js.tolua(jsArray)
|
|
```
|
|
<!--/lua-->
|
|
|