diff --git a/.gitattributes b/.gitattributes
index 9a0642d09..6501a79bc 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,5 +1,5 @@
# Ignore changes in generated files
-src/generated/resources/data/** linguist-generated
+src/generated/** linguist-generated
src/testMod/server-files/structures linguist-generated
* text=auto
diff --git a/.github/workflows/make-doc.sh b/.github/workflows/make-doc.sh
index f22851bee..e7aca0e61 100755
--- a/.github/workflows/make-doc.sh
+++ b/.github/workflows/make-doc.sh
@@ -12,7 +12,7 @@ chmod 600 "$HOME/.ssh/key"
# And upload
rsync -avc -e "ssh -i $HOME/.ssh/key -o StrictHostKeyChecking=no -p $SSH_PORT" \
- "$GITHUB_WORKSPACE/build/docs/lua/" \
+ "$GITHUB_WORKSPACE/build/docs/site/" \
"$SSH_USER@$SSH_HOST:/$DEST"
rsync -avc -e "ssh -i $HOME/.ssh/key -o StrictHostKeyChecking=no -p $SSH_PORT" \
"$GITHUB_WORKSPACE/build/docs/javadoc/" \
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c9afbdb4c..bae4f7b4f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -65,7 +65,7 @@ #### Building documentation
- `./gradlew luaJavadoc` - Generate documentation stubs for Java methods.
- `./gradlew docWebsite` - Generate the whole website (including Javascript pages). The resulting HTML is stored at
- `./build/docs/lua/`.
+ `./build/docs/site/`.
#### Writing documentation
illuaminate's documentation system is not currently documented (somewhat ironic), but is _largely_ the same as
diff --git a/build.gradle b/build.gradle
index ace5b9938..59da21991 100644
--- a/build.gradle
+++ b/build.gradle
@@ -146,7 +146,7 @@ accessTransformer file('src/testMod/resources/META-INF/accesstransformer.cfg')
runtimeOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.104")
- shade 'org.squiddev:Cobalt:0.5.2-SNAPSHOT'
+ shade 'org.squiddev:Cobalt:0.5.5'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
@@ -158,7 +158,7 @@ accessTransformer file('src/testMod/resources/META-INF/accesstransformer.cfg')
testModImplementation sourceSets.main.output
- cctJavadoc 'cc.tweaked:cct-javadoc:1.4.5'
+ cctJavadoc 'cc.tweaked:cct-javadoc:1.4.6'
}
// Compile tasks
@@ -220,9 +220,32 @@ task luaJavadoc(type: Javadoc) {
try {
hash = ["git", "-C", projectDir, "rev-parse", "HEAD"].execute().text.trim()
- def blacklist = ['GitHub', 'dan200', 'Daniel Ratcliffe']
- ["git", "-C", projectDir, "log", "--format=tformat:%an%n%cn"].execute().text.split('\n').each {
- if (!blacklist.contains(it)) contributors.add(it)
+ def blacklist = ['GitHub', 'Daniel Ratcliffe', 'Weblate']
+
+ // Extract all authors, commiters and co-authors from the git log.
+ def authors = ["git", "-C", projectDir, "log", "--format=tformat:%an <%ae>%n%cn <%ce>%n%(trailers:key=Co-authored-by,valueonly)"]
+ .execute().text.readLines().unique()
+
+ // We now pass this through git's mailmap to de-duplicate some authors.
+ def remapAuthors = ["git", "check-mailmap", "--stdin"].execute()
+ remapAuthors.withWriter { stdin ->
+ if (stdin !instanceof BufferedWriter) stdin = new BufferedWriter(stdin)
+
+ authors.forEach {
+ if (it == "") return
+ if (!it.endsWith(">")) it += ">" // Some commits have broken Co-Authored-By lines!
+ stdin.writeLine(it)
+ }
+ stdin.close()
+ }
+
+ // And finally extract out the actual name.
+ def emailRegex = ~/^([^<]+) <.+>$/
+ remapAuthors.text.readLines().forEach {
+ def matcher = it =~ emailRegex
+ matcher.find()
+ def name = matcher.group(1)
+ if (!blacklist.contains(name)) contributors.add(name)
}
} catch (Exception e) {
e.printStackTrace()
@@ -275,7 +298,7 @@ commandLine mkCommand('"node_modules/.bin/rollup" --config rollup.config.js')
task illuaminateDocs(type: Exec, dependsOn: [rollup, luaJavadoc]) {
group = "build"
- description = "Bundles JS into rollup"
+ description = "Generates docs using Illuaminate"
inputs.files(fileTree("doc")).withPropertyName("docs")
inputs.files(fileTree("src/main/resources/data/computercraft/lua/rom")).withPropertyName("lua rom")
@@ -288,7 +311,20 @@ task illuaminateDocs(type: Exec, dependsOn: [rollup, luaJavadoc]) {
commandLine mkCommand('"bin/illuaminate" doc-gen')
}
-task docWebsite(type: Copy, dependsOn: [illuaminateDocs]) {
+task jsxDocs(type: Exec, dependsOn: [illuaminateDocs]) {
+ group = "build"
+ description = "Post-processes documentation to statically render some dynamic content."
+
+ inputs.files(fileTree("src/web")).withPropertyName("sources")
+ inputs.file("package-lock.json").withPropertyName("package-lock.json")
+ inputs.file("tsconfig.json").withPropertyName("Typescript config")
+ inputs.files(fileTree("$buildDir/docs/lua"))
+ outputs.dir("$buildDir/docs/site")
+
+ commandLine mkCommand("'node_modules/.bin/ts-node' --esm src/web/transform.tsx")
+}
+
+task docWebsite(type: Copy, dependsOn: [jsxDocs]) {
from('doc') {
include 'logo.png'
include 'images/**'
@@ -296,7 +332,14 @@ task docWebsite(type: Copy, dependsOn: [illuaminateDocs]) {
from("$buildDir/rollup") {
exclude 'index.js'
}
- into "${project.docsDir}/lua"
+ from("$buildDir/docs/lua") {
+ exclude '**/*.html'
+ }
+ from("src/generated/export/items") {
+ into("images/items")
+ }
+
+ into "${project.docsDir}/site"
}
// Check tasks
diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml
index b96d5c3db..f67654f08 100644
--- a/config/checkstyle/checkstyle.xml
+++ b/config/checkstyle/checkstyle.xml
@@ -76,7 +76,9 @@
-
+
+
+
diff --git a/doc/events/mouse_click.md b/doc/events/mouse_click.md
index ed4f2e3eb..1dc1196e2 100644
--- a/doc/events/mouse_click.md
+++ b/doc/events/mouse_click.md
@@ -15,13 +15,11 @@ ## Mouse buttons
Several mouse events (@{mouse_click}, @{mouse_up}, @{mouse_scroll}) contain a "mouse button" code. This takes a
numerical value depending on which button on your mouse was last pressed when this event occurred.
-
-
- Button code | Mouse button |
- 1 | Left button |
- 2 | Right button |
- 3 | Middle button |
-
+| Button Code | Mouse Button |
+|------------:|---------------|
+| 1 | Left button |
+| 2 | Right button |
+| 3 | Middle button |
## Example
Print the button and the coordinates whenever the mouse is clicked.
diff --git a/doc/guides/local_ips.md b/doc/guides/local_ips.md
new file mode 100644
index 000000000..affad7355
--- /dev/null
+++ b/doc/guides/local_ips.md
@@ -0,0 +1,99 @@
+---
+module: [kind=guide] local_ips
+---
+
+# Allowing access to local IPs
+By default, ComputerCraft blocks access to local IP addresses for security. This means you can't normally access any
+HTTP server running on your computer. However, this may be useful for testing programs without having a remote
+server. You can unblock these IPs in the ComputerCraft config.
+
+ - [Minecraft 1.13 and later, CC:T 1.87.0 and later](#cc-1.87.0)
+ - [Minecraft 1.13 and later, CC:T 1.86.2 and earlier](#cc-1.86.2)
+ - [Minecraft 1.12.2 and earlier](#mc-1.12)
+
+## Minecraft 1.13 and later, CC:T 1.87.0 and later {#cc-1.87.0}
+The configuration file can be located at `serverconfig/computercraft-server.toml` inside the world folder on either
+single-player or multiplayer. Look for lines that look like this:
+
+```toml
+#A list of rules which control behaviour of the "http" API for specific domains or IPs.
+#Each rule is an item with a 'host' to match against, and a series of properties. The host may be a domain name ("pastebin.com"),
+#wildcard ("*.pastebin.com") or CIDR notation ("127.0.0.0/8"). If no rules, the domain is blocked.
+[[http.rules]]
+ host = "$private"
+ action = "deny"
+```
+
+On 1.95.0 and later, this will be a single entry with `host = "$private"`. On earlier versions, this will be a number of
+`[[http.rules]]` with various IP addresses. You will want to remove all of the `[[http.rules]]` entires that have
+`action = "deny"`. Then save the file and relaunch Minecraft (Server).
+
+Here's what it should look like after removing:
+
+```toml
+#A list of rules which control behaviour of the "http" API for specific domains or IPs.
+#Each rule is an item with a 'host' to match against, and a series of properties. The host may be a domain name ("pastebin.com"),
+#wildcard ("*.pastebin.com") or CIDR notation ("127.0.0.0/8"). If no rules, the domain is blocked.
+[[http.rules]]
+ #The maximum size (in bytes) that a computer can send or receive in one websocket packet.
+ max_websocket_message = 131072
+ host = "*"
+ #The maximum size (in bytes) that a computer can upload in a single request. This includes headers and POST text.
+ max_upload = 4194304
+ action = "allow"
+ #The maximum size (in bytes) that a computer can download in a single request. Note that responses may receive more data than allowed, but this data will not be returned to the client.
+ max_download = 16777216
+ #The period of time (in milliseconds) to wait before a HTTP request times out. Set to 0 for unlimited.
+ timeout = 30000
+```
+
+## Minecraft 1.13 and later, CC:T 1.86.2 and earlier {#cc-1.86.2}
+The configuration file for singleplayer is at `.minecraft/config/computercraft-common.toml`. Look for lines that look
+like this:
+
+```toml
+#A list of wildcards for domains or IP ranges that cannot be accessed through the "http" API on Computers.
+#If this is empty then all whitelisted domains will be accessible. Example: "*.github.com" will block access to all subdomains of github.com.
+#You can use domain names ("pastebin.com"), wilcards ("*.pastebin.com") or CIDR notation ("127.0.0.0/8").
+blacklist = ["127.0.0.0/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "fd00::/8"]
+```
+
+Remove everything inside the array, leaving the last line as `blacklist = []`. Then save the file and relaunch Minecraft.
+
+Here's what it should look like after removing:
+
+```toml
+#A list of wildcards for domains or IP ranges that cannot be accessed through the "http" API on Computers.
+#If this is empty then all whitelisted domains will be accessible. Example: "*.github.com" will block access to all subdomains of github.com.
+#You can use domain names ("pastebin.com"), wilcards ("*.pastebin.com") or CIDR notation ("127.0.0.0/8").
+blacklist = []
+```
+
+## Minecraft 1.12.2 and earlier {#mc-1.12}
+On singleplayer, the configuration file is located at `.minecraft\config\ComputerCraft.cfg`. On multiplayer, the
+configuration file is located at `\config\ComputerCraft.cfg`. Look for lines that look like this:
+
+```ini
+# A list of wildcards for domains or IP ranges that cannot be accessed through the "http" API on Computers.
+# If this is empty then all explicitly allowed domains will be accessible. Example: "*.github.com" will block access to all subdomains of github.com.
+# You can use domain names ("pastebin.com"), wildcards ("*.pastebin.com") or CIDR notation ("127.0.0.0/8").
+S:blocked_domains <
+ 127.0.0.0/8
+ 10.0.0.0/8
+ 172.16.0.0/12
+ 192.168.0.0/16
+ fd00::/8
+ >
+```
+
+Delete everything between the `<>`, leaving the last line as `S:blocked_domains = <>`. Then save the file and relaunch
+Minecraft (Server).
+
+Here's what it should look like after removing:
+
+```ini
+# A list of wildcards for domains or IP ranges that cannot be accessed through the "http" API on Computers.
+# If this is empty then all explicitly allowed domains will be accessible. Example: "*.github.com" will block access to all subdomains of github.com.
+# You can use domain names ("pastebin.com"), wildcards ("*.pastebin.com") or CIDR notation ("127.0.0.0/8").
+S:blocked_domains <>
+```
diff --git a/doc/guides/speaker_audio.md b/doc/guides/speaker_audio.md
index 0f9652ae4..4cbe9e437 100644
--- a/doc/guides/speaker_audio.md
+++ b/doc/guides/speaker_audio.md
@@ -125,7 +125,7 @@ ## Storing audio
First, we require the dfpwm module and call @{cc.audio.dfpwm.make_decoder} to construct a new decoder. This decoder
accepts blocks of DFPWM data and converts it to a list of 8-bit amplitudes, which we can then play with our speaker.
-As mentioned to above, @{speaker.playAudio} accepts at most 128×1024 samples in one go. DFPMW uses a single bit for each
+As mentioned above, @{speaker.playAudio} accepts at most 128×1024 samples in one go. DFPMW uses a single bit for each
sample, which means we want to process our audio in chunks of 16×1024 bytes (16KiB). In order to do this, we use
@{io.lines}, which provides a nice way to loop over chunks of a file. You can of course just use @{fs.open} and
@{fs.BinaryReadHandle.read} if you prefer.
@@ -136,22 +136,22 @@ ## Processing audio
samples, etc...
Let's put together a small demonstration here. We're going to add a small delay effect to the song above, so that you
-hear a faint echo about a second later.
+hear a faint echo a second and a half later.
In order to do this, we'll follow a format similar to the previous example, decoding the audio and then playing it.
However, we'll also add some new logic between those two steps, which loops over every sample in our chunk of audio, and
-adds the sample from one second ago to it.
+adds the sample from 1.5 seconds ago to it.
-For this, we'll need to keep track of the last 48k samples - exactly one seconds worth of audio. We can do this using a
+For this, we'll need to keep track of the last 72k samples - exactly 1.5 seconds worth of audio. We can do this using a
[Ring Buffer], which helps makes things a little more efficient.
```lua {data-peripheral=speaker}
local dfpwm = require("cc.audio.dfpwm")
local speaker = peripheral.find("speaker")
--- Speakers play at 48kHz, so one second is 48k samples. We first fill our buffer
+-- Speakers play at 48kHz, so 1.5 seconds is 72k samples. We first fill our buffer
-- with 0s, as there's nothing to echo at the start of the track!
-local samples_i, samples_n = 1, 48000
+local samples_i, samples_n = 1, 48000 * 1.5
local samples = {}
for i = 1, samples_n do samples[i] = 0 end
@@ -162,7 +162,7 @@ ## Processing audio
for i = 1, #buffer do
local original_value = buffer[i]
- -- Replace this sample with its current amplitude plus the amplitude from one second ago.
+ -- Replace this sample with its current amplitude plus the amplitude from 1.5 seconds ago.
-- We scale both to ensure the resulting value is still between -128 and 127.
buffer[i] = original_value * 0.6 + samples[samples_i] * 0.4
@@ -175,6 +175,11 @@ ## Processing audio
while not speaker.playAudio(buffer) do
os.pullEvent("speaker_audio_empty")
end
+
+ -- The audio processing above can be quite slow and preparing the first batch of audio
+ -- may timeout the computer. We sleep to avoid this.
+ -- There's definitely better ways of handling this - this is just an example!
+ sleep(0.05)
end
```
diff --git a/doc/reference/feature_compat.md b/doc/reference/feature_compat.md
new file mode 100644
index 000000000..d0b03cf45
--- /dev/null
+++ b/doc/reference/feature_compat.md
@@ -0,0 +1,95 @@
+---
+module: [kind=reference] feature_compat
+---
+
+# Lua 5.2/5.3 features in CC: Tweaked
+CC: Tweaked is based off of the Cobalt Lua runtime, which uses Lua 5.1. However, Cobalt and CC:T implement additional features from Lua 5.2 and 5.3 (as well as some deprecated 5.0 features) that are not available in base 5.1. This page lists all of the compatibility for these newer versions.
+
+## Lua 5.2
+| Feature | Supported? | Notes |
+|---------------------------------------------------------------|------------|-------------------------------------------------------------------|
+| `goto`/labels | ❌ | |
+| `_ENV` | 🔶 | The `_ENV` global points to `getfenv()`, but it cannot be set. |
+| `\z` escape | ✔ | |
+| `\xNN` escape | ✔ | |
+| Hex literal fractional/exponent parts | ✔ | |
+| Empty statements | ❌ | |
+| `__len` metamethod | ✔ | |
+| `__ipairs` metamethod | ❌ | |
+| `__pairs` metamethod | ✔ | |
+| `bit32` library | ✔ | |
+| `collectgarbage` isrunning, generational, incremental options | ❌ | `collectgarbage` does not exist in CC:T. |
+| New `load` syntax | ✔ | |
+| `loadfile` mode parameter | ✔ | Supports both 5.1 and 5.2+ syntax. |
+| Removed `loadstring` | 🔶 | Only if `disable_lua51_features` is enabled in the configuration. |
+| Removed `getfenv`, `setfenv` | 🔶 | Only if `disable_lua51_features` is enabled in the configuration. |
+| `rawlen` function | ✔ | |
+| Negative index to `select` | ✔ | |
+| Removed `unpack` | 🔶 | Only if `disable_lua51_features` is enabled in the configuration. |
+| Arguments to `xpcall` | ❌ | |
+| Second return value from `coroutine.running` | ❌ | |
+| Removed `module` | ✔ | |
+| `package.loaders` -> `package.searchers` | ❌ | |
+| Second argument to loader functions | ✔ | |
+| `package.config` | ✔ | |
+| `package.searchpath` | ✔ | |
+| Removed `package.seeall` | ✔ | |
+| `string.dump` on functions with upvalues (blanks them out) | ✔ | |
+| `string.rep` separator | ❌ | |
+| `%g` match group | ❌ | |
+| Removal of `%z` match group | ❌ | |
+| Removed `table.maxn` | 🔶 | Only if `disable_lua51_features` is enabled in the configuration. |
+| `table.pack`/`table.unpack` | ✔ | |
+| `math.log` base argument | ✔ | |
+| Removed `math.log10` | 🔶 | Only if `disable_lua51_features` is enabled in the configuration. |
+| `*L` mode to `file:read` | ✔ | |
+| `os.execute` exit type + return value | ❌ | `os.execute` does not exist in CC:T. |
+| `os.exit` close argument | ❌ | `os.exit` does not exist in CC:T. |
+| `istailcall` field in `debug.getinfo` | ❌ | |
+| `nparams` field in `debug.getinfo` | ✔ | |
+| `isvararg` field in `debug.getinfo` | ✔ | |
+| `debug.getlocal` negative indices for varargs | ❌ | |
+| `debug.getuservalue`/`debug.setuservalue` | ❌ | Userdata are rarely used in CC:T, so this is not necessary. |
+| `debug.upvalueid` | ✔ | |
+| `debug.upvaluejoin` | ✔ | |
+| Tail call hooks | ❌ | |
+| `=` prefix for chunks | ✔ | |
+| Yield across C boundary | ✔ | |
+| Removal of ambiguity error | ❌ | |
+| Identifiers may no longer use locale-dependent letters | ✔ | |
+| Ephemeron tables | ❌ | |
+| Identical functions may be reused | ❌ | |
+| Generational garbage collector | ❌ | Cobalt uses the built-in Java garbage collector. |
+
+## Lua 5.3
+| Feature | Supported? | Notes |
+|---------------------------------------------------------------------------------------|------------|---------------------------|
+| Integer subtype | ❌ | |
+| Bitwise operators/floor division | ❌ | |
+| `\u{XXX}` escape sequence | ✔ | |
+| `utf8` library | ✔ | |
+| removed `__ipairs` metamethod | ✔ | |
+| `coroutine.isyieldable` | ❌ | |
+| `string.dump` strip argument | ✔ | |
+| `string.pack`/`string.unpack`/`string.packsize` | ✔ | |
+| `table.move` | ❌ | |
+| `math.atan2` -> `math.atan` | ❌ | |
+| Removed `math.frexp`, `math.ldexp`, `math.pow`, `math.cosh`, `math.sinh`, `math.tanh` | ❌ | |
+| `math.maxinteger`/`math.mininteger` | ❌ | |
+| `math.tointeger` | ❌ | |
+| `math.type` | ❌ | |
+| `math.ult` | ❌ | |
+| Removed `bit32` library | ❌ | |
+| Remove `*` from `file:read` modes | ✔ | |
+| Metamethods respected in `table.*`, `ipairs` | 🔶 | Only `__lt` is respected. |
+
+## Lua 5.0
+| Feature | Supported? | Notes |
+|----------------------------------|------------|--------------------------------------------------|
+| `arg` table | 🔶 | Only set in the shell - not used in functions. |
+| `string.gfind` | ✔ | Equal to `string.gmatch`. |
+| `table.getn` | ✔ | Equal to `#tbl`. |
+| `table.setn` | ❌ | |
+| `math.mod` | ✔ | Equal to `math.fmod`. |
+| `table.foreach`/`table.foreachi` | ✔ | |
+| `gcinfo` | ❌ | Cobalt uses the built-in Java garbage collector. |
diff --git a/doc/stub/fs.lua b/doc/stub/fs.lua
index aa40a30f3..e2d8f0741 100644
--- a/doc/stub/fs.lua
+++ b/doc/stub/fs.lua
@@ -1,6 +1,4 @@
---- The FS API allows you to manipulate files and the filesystem.
---
--- @module fs
+--- @module fs
--- Returns true if a path is mounted to the parent filesystem.
--
diff --git a/doc/stub/global.lua b/doc/stub/global.lua
index 6541da7e5..7bd8a7311 100644
--- a/doc/stub/global.lua
+++ b/doc/stub/global.lua
@@ -62,7 +62,7 @@ function print(...) end
-- @usage printError("Something went wrong!")
function printError(...) end
---[[- Reads user input from the terminal, automatically handling arrow keys,
+--[[- Reads user input from the terminal. This automatically handles arrow keys,
pasting, character replacement, history scrollback, auto-completion, and
default values.
@@ -110,10 +110,15 @@ the prompt.
]]
function read(replaceChar, history, completeFn, default) end
---- The ComputerCraft and Minecraft version of the current computer environment.
+--- Stores the current ComputerCraft and Minecraft versions.
+--
+-- Outside of Minecraft (for instance, in an emulator) @{_HOST} will contain the
+-- emulator's version instead.
--
-- For example, `ComputerCraft 1.93.0 (Minecraft 1.15.2)`.
--- @usage _HOST
+-- @usage Print the current computer's environment.
+--
+-- print(_HOST)
-- @since 1.76
_HOST = _HOST
diff --git a/doc/stub/http.lua b/doc/stub/http.lua
index 81ba63753..6ec4db8d3 100644
--- a/doc/stub/http.lua
+++ b/doc/stub/http.lua
@@ -1,14 +1,13 @@
---- The http library allows communicating with web servers, sending and
--- receiving data from them.
+--- Make HTTP requests, sending and receiving data to a remote web server.
--
-- @module http
-- @since 1.1
+-- @see local_ips To allow accessing servers running on your local network.
--- Asynchronously make a HTTP request to the given url.
--
--- This returns immediately, a [`http_success`](#http-success-event) or
--- [`http_failure`](#http-failure-event) will be queued once the request has
--- completed.
+-- This returns immediately, a @{http_success} or @{http_failure} will be queued
+-- once the request has completed.
--
-- @tparam string url The url to request
-- @tparam[opt] string body An optional string containing the body of the
@@ -112,9 +111,8 @@ function post(...) end
--- Asynchronously determine whether a URL can be requested.
--
--- If this returns `true`, one should also listen for [`http_check`
--- events](#http-check-event) which will container further information about
--- whether the URL is allowed or not.
+-- If this returns `true`, one should also listen for @{http_check} which will
+-- container further information about whether the URL is allowed or not.
--
-- @tparam string url The URL to check.
-- @treturn true When this url is not invalid. This does not imply that it is
@@ -128,9 +126,8 @@ function checkURLAsync(url) end
--- Determine whether a URL can be requested.
--
--- If this returns `true`, one should also listen for [`http_check`
--- events](#http-check-event) which will container further information about
--- whether the URL is allowed or not.
+-- If this returns `true`, one should also listen for @{http_check} which will
+-- container further information about whether the URL is allowed or not.
--
-- @tparam string url The URL to check.
-- @treturn true When this url is valid and can be requested via @{http.request}.
@@ -168,9 +165,8 @@ function websocket(url, headers) end
--- Asynchronously open a websocket.
--
--- This returns immediately, a [`websocket_success`](#websocket-success-event)
--- or [`websocket_failure`](#websocket-failure-event) will be queued once the
--- request has completed.
+-- This returns immediately, a @{websocket_success} or @{websocket_failure}
+-- will be queued once the request has completed.
--
-- @tparam string url The websocket url to connect to. This should have the
-- `ws://` or `wss://` protocol.
diff --git a/gradle.properties b/gradle.properties
index 3e2464221..11f25ee2a 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,8 +1,8 @@
# Mod properties
-mod_version=1.100.4
+mod_version=1.100.5
# Minecraft properties (update mods.toml when changing)
mc_version=1.16.5
mapping_version=2021.08.08
-forge_version=36.2.20
+forge_version=36.2.34
# NO SERIOUSLY, UPDATE mods.toml WHEN CHANGING
diff --git a/illuaminate.sexp b/illuaminate.sexp
index 91d1e99ef..7ddafe9e5 100644
--- a/illuaminate.sexp
+++ b/illuaminate.sexp
@@ -1,9 +1,7 @@
; -*- mode: Lisp;-*-
(sources
- /doc/events/
- /doc/guides/
- /doc/stub/
+ /doc/
/build/docs/luaJavadoc/
/src/main/resources/*/computercraft/lua/bios.lua
/src/main/resources/*/computercraft/lua/rom/
@@ -29,7 +27,8 @@
(peripheral Peripherals)
(generic_peripheral "Generic Peripherals")
(event Events)
- (guide Guides))
+ (guide Guides)
+ (reference Reference))
(library-path
/doc/stub/
diff --git a/package-lock.json b/package-lock.json
index ec3137ce0..2cfb30386 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,9 +15,18 @@
"devDependencies": {
"@rollup/plugin-typescript": "^8.2.5",
"@rollup/plugin-url": "^6.1.0",
+ "@types/glob": "^7.2.0",
+ "@types/react-dom": "^18.0.5",
+ "glob": "^8.0.3",
+ "react": "^18.1.0",
+ "react-dom": "^18.1.0",
+ "rehype": "^12.0.1",
+ "rehype-highlight": "^5.0.2",
+ "rehype-react": "^7.1.1",
"requirejs": "^2.3.6",
"rollup": "^2.33.1",
"rollup-plugin-terser": "^7.0.2",
+ "ts-node": "^10.8.0",
"typescript": "^4.0.5"
}
},
@@ -56,6 +65,79 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz",
+ "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz",
+ "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@mapbox/hast-util-table-cell-style": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.0.tgz",
+ "integrity": "sha512-gqaTIGC8My3LVSnU38IwjHVKJC94HSonjvFHDk8/aSrApL8v4uWgm8zJkK7MJIIbHuNOr/+Mv2KkQKcxs6LEZA==",
+ "dev": true,
+ "dependencies": {
+ "unist-util-visit": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-is": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
+ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
+ "dev": true
+ },
+ "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
+ "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
+ "dev": true,
+ "dependencies": {
+ "unist-util-visit-parents": "^2.0.0"
+ }
+ },
+ "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit-parents": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
+ "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
+ "dev": true,
+ "dependencies": {
+ "unist-util-is": "^3.0.0"
+ }
+ },
"node_modules/@rollup/plugin-typescript": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz",
@@ -108,18 +190,132 @@
"rollup": "^1.20.0||^2.0.0"
}
},
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
+ "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
+ "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
+ "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
+ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
+ "dev": true
+ },
"node_modules/@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
"dev": true
},
+ "node_modules/@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/hast": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
+ "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+ "dev": true
+ },
"node_modules/@types/node": {
"version": "16.11.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz",
"integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==",
"dev": true
},
+ "node_modules/@types/parse5": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
+ "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
+ "dev": true
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
+ "dev": true
+ },
+ "node_modules/@types/react": {
+ "version": "18.0.9",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
+ "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==",
+ "dev": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz",
+ "integrity": "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
+ "dev": true
+ },
+ "node_modules/@types/unist": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
+ "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "8.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@@ -132,12 +328,53 @@
"node": ">=4"
}
},
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -152,6 +389,26 @@
"node": ">=4"
}
},
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -167,12 +424,43 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
+ "node_modules/csstype": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
+ "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
+ "dev": true
+ },
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -188,6 +476,40 @@
"integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
"dev": true
},
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/fault": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz",
+ "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==",
+ "dev": true,
+ "dependencies": {
+ "format": "^0.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
@@ -208,6 +530,25 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
+ "node_modules/glob": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
+ "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -229,6 +570,200 @@
"node": ">=4"
}
},
+ "node_modules/hast-to-hyperscript": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.1.tgz",
+ "integrity": "sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^0.3.0",
+ "unist-util-is": "^5.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-from-parse5": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz",
+ "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/parse5": "^6.0.0",
+ "@types/unist": "^2.0.0",
+ "hastscript": "^7.0.0",
+ "property-information": "^6.0.0",
+ "vfile": "^5.0.0",
+ "vfile-location": "^4.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz",
+ "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
+ "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz",
+ "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-is-element": "^2.0.0",
+ "hast-util-whitespace": "^2.0.0",
+ "html-void-elements": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.2",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-text": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.1.tgz",
+ "integrity": "sha512-7S3mOBxACy8syL45hCn3J7rHqYaXkxRfsX6LXEU5Shz4nt4GxdjtMUtG+T6G/ZLUHd7kslFAf14kAN71bz30xA==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "hast-util-is-element": "^2.0.0",
+ "unist-util-find-after": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
+ "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz",
+ "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^3.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/highlight.js": {
+ "version": "11.5.1",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.5.1.tgz",
+ "integrity": "sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/html-void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
+ "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/inline-style-parser": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
+ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==",
+ "dev": true
+ },
+ "node_modules/is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/is-core-module": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
@@ -241,6 +776,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-plain-obj": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/jest-worker": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
@@ -282,6 +829,33 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lowlight": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-2.6.1.tgz",
+ "integrity": "sha512-t0ueDL6SIn9FKHipm78CNjWcJQv0xi6WCjYAICyO6GyPzoT7E58yom1mNwvI7AMwVe3pLwwFT0Bt2gml7uaUeQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "fault": "^2.0.0",
+ "highlight.js": "~11.5.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -297,6 +871,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -315,6 +895,33 @@
"node": ">=4.0.0"
}
},
+ "node_modules/minimatch": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
+ "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true
+ },
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
@@ -342,6 +949,16 @@
"url": "https://opencollective.com/preact"
}
},
+ "node_modules/property-information": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz",
+ "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -351,6 +968,115 @@
"safe-buffer": "^5.1.0"
}
},
+ "node_modules/react": {
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz",
+ "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz",
+ "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.22.0"
+ },
+ "peerDependencies": {
+ "react": "^18.1.0"
+ }
+ },
+ "node_modules/rehype": {
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz",
+ "integrity": "sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "rehype-parse": "^8.0.0",
+ "rehype-stringify": "^9.0.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-highlight": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-5.0.2.tgz",
+ "integrity": "sha512-ZNm8V8BQUDn05cJPzAu/PjiloaFFrh+Pt3bY+NCcdCggI7Uyl5mW0FGR7RATeIz5/ECUd1D8Kvjt4HaLPmnOMw==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "hast-util-to-text": "^3.0.0",
+ "lowlight": "^2.0.0",
+ "unified": "^10.0.0",
+ "unist-util-visit": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-parse": {
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz",
+ "integrity": "sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "hast-util-from-parse5": "^7.0.0",
+ "parse5": "^6.0.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-react": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/rehype-react/-/rehype-react-7.1.1.tgz",
+ "integrity": "sha512-6yaitxM95JFsuTA74OH54OyvTAeRqR4/A6f45S2sEk2FEG04iGgsObcmEIFQRsjK9pfAhc74lR4iGf/W2G/sBw==",
+ "dev": true,
+ "dependencies": {
+ "@mapbox/hast-util-table-cell-style": "^0.2.0",
+ "@types/hast": "^2.0.0",
+ "hast-to-hyperscript": "^10.0.0",
+ "hast-util-whitespace": "^2.0.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "@types/react": ">=17"
+ }
+ },
+ "node_modules/rehype-stringify": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
+ "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "hast-util-to-html": "^8.0.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/requirejs": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz",
@@ -427,6 +1153,15 @@
}
]
},
+ "node_modules/scheduler": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz",
+ "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -473,6 +1208,39 @@
"node": ">=0.10.0"
}
},
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
+ "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz",
+ "integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==",
+ "dev": true,
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/style-to-object": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
+ "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
+ "dev": true,
+ "dependencies": {
+ "inline-style-parser": "0.1.1"
+ }
+ },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -510,6 +1278,59 @@
}
}
},
+ "node_modules/trough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ts-node": {
+ "version": "10.8.0",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.0.tgz",
+ "integrity": "sha512-/fNd5Qh+zTt8Vt1KbYZjRHCE9sI5i7nqfD/dzBBRDeVXZXS6kToW6R7tTU6Nd4XavFs0mAVCg29Q//ML7WsZYA==",
+ "dev": true,
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
"node_modules/tslib": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
@@ -527,6 +1348,166 @@
"engines": {
"node": ">=4.2.0"
}
+ },
+ "node_modules/unified": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "bail": "^2.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-find-after": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.0.tgz",
+ "integrity": "sha512-gfpsxKQde7atVF30n5Gff2fQhAc4/HTOV4CvkXpTg9wRfQhZWdXitpyXHWB6YcYgnsxLx+4gGHeVjCTAAp9sjw==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
+ "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz",
+ "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
+ "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz",
+ "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true
+ },
+ "node_modules/vfile": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz",
+ "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "vfile-message": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-location": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz",
+ "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz",
+ "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/web-namespaces": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
}
},
"dependencies": {
@@ -556,6 +1537,72 @@
"js-tokens": "^4.0.0"
}
},
+ "@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz",
+ "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==",
+ "dev": true
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz",
+ "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==",
+ "dev": true
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@mapbox/hast-util-table-cell-style": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.0.tgz",
+ "integrity": "sha512-gqaTIGC8My3LVSnU38IwjHVKJC94HSonjvFHDk8/aSrApL8v4uWgm8zJkK7MJIIbHuNOr/+Mv2KkQKcxs6LEZA==",
+ "dev": true,
+ "requires": {
+ "unist-util-visit": "^1.4.1"
+ },
+ "dependencies": {
+ "unist-util-is": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
+ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
+ "dev": true
+ },
+ "unist-util-visit": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
+ "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
+ "dev": true,
+ "requires": {
+ "unist-util-visit-parents": "^2.0.0"
+ }
+ },
+ "unist-util-visit-parents": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
+ "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
+ "dev": true,
+ "requires": {
+ "unist-util-is": "^3.0.0"
+ }
+ }
+ }
+ },
"@rollup/plugin-typescript": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz",
@@ -588,18 +1635,123 @@
"picomatch": "^2.2.2"
}
},
+ "@tsconfig/node10": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
+ "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
+ "dev": true
+ },
+ "@tsconfig/node12": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
+ "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
+ "dev": true
+ },
+ "@tsconfig/node14": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
+ "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
+ "dev": true
+ },
+ "@tsconfig/node16": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
+ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
+ "dev": true
+ },
"@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
"dev": true
},
+ "@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/hast": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
+ "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+ "dev": true
+ },
"@types/node": {
"version": "16.11.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz",
"integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==",
"dev": true
},
+ "@types/parse5": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
+ "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
+ "dev": true
+ },
+ "@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
+ "dev": true
+ },
+ "@types/react": {
+ "version": "18.0.9",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
+ "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==",
+ "dev": true,
+ "requires": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "@types/react-dom": {
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz",
+ "integrity": "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==",
+ "dev": true,
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/scheduler": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
+ "dev": true
+ },
+ "@types/unist": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
+ "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "8.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
+ "dev": true
+ },
+ "acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true
+ },
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@@ -609,12 +1761,45 @@
"color-convert": "^1.9.0"
}
},
+ "arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
+ "bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
+ "ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "dev": true
+ },
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -626,6 +1811,18 @@
"supports-color": "^5.3.0"
}
},
+ "character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "dev": true
+ },
+ "character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "dev": true
+ },
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -641,12 +1838,36 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
+ "comma-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==",
+ "dev": true
+ },
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
+ "create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
+ "csstype": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
+ "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
+ "dev": true
+ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -659,6 +1880,33 @@
"integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
"dev": true
},
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "fault": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz",
+ "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==",
+ "dev": true,
+ "requires": {
+ "format": "^0.2.0"
+ }
+ },
+ "format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
@@ -672,6 +1920,19 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
+ "glob": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
+ "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ }
+ },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -687,6 +1948,144 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "hast-to-hyperscript": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.1.tgz",
+ "integrity": "sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^0.3.0",
+ "unist-util-is": "^5.0.0",
+ "web-namespaces": "^2.0.0"
+ }
+ },
+ "hast-util-from-parse5": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz",
+ "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "@types/parse5": "^6.0.0",
+ "@types/unist": "^2.0.0",
+ "hastscript": "^7.0.0",
+ "property-information": "^6.0.0",
+ "vfile": "^5.0.0",
+ "vfile-location": "^4.0.0",
+ "web-namespaces": "^2.0.0"
+ }
+ },
+ "hast-util-is-element": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz",
+ "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "@types/unist": "^2.0.0"
+ }
+ },
+ "hast-util-parse-selector": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
+ "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0"
+ }
+ },
+ "hast-util-to-html": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz",
+ "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-is-element": "^2.0.0",
+ "hast-util-whitespace": "^2.0.0",
+ "html-void-elements": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.2",
+ "unist-util-is": "^5.0.0"
+ }
+ },
+ "hast-util-to-text": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.1.tgz",
+ "integrity": "sha512-7S3mOBxACy8syL45hCn3J7rHqYaXkxRfsX6LXEU5Shz4nt4GxdjtMUtG+T6G/ZLUHd7kslFAf14kAN71bz30xA==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "hast-util-is-element": "^2.0.0",
+ "unist-util-find-after": "^4.0.0"
+ }
+ },
+ "hast-util-whitespace": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
+ "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==",
+ "dev": true
+ },
+ "hastscript": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz",
+ "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^3.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0"
+ }
+ },
+ "highlight.js": {
+ "version": "11.5.1",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.5.1.tgz",
+ "integrity": "sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==",
+ "dev": true
+ },
+ "html-void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
+ "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "inline-style-parser": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
+ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+ "dev": true
+ },
"is-core-module": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
@@ -696,6 +2095,12 @@
"has": "^1.0.3"
}
},
+ "is-plain-obj": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
+ "dev": true
+ },
"jest-worker": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
@@ -730,6 +2135,26 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lowlight": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-2.6.1.tgz",
+ "integrity": "sha512-t0ueDL6SIn9FKHipm78CNjWcJQv0xi6WCjYAICyO6GyPzoT7E58yom1mNwvI7AMwVe3pLwwFT0Bt2gml7uaUeQ==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "fault": "^2.0.0",
+ "highlight.js": "~11.5.0"
+ }
+ },
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -739,6 +2164,12 @@
"semver": "^6.0.0"
}
},
+ "make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -751,6 +2182,30 @@
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
"dev": true
},
+ "minimatch": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
+ "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true
+ },
"path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
@@ -768,6 +2223,12 @@
"resolved": "https://registry.npmjs.org/preact/-/preact-10.6.1.tgz",
"integrity": "sha512-ydCg+ISIq70vqiThvNWStZWLRjR9U2awP/JAmGdWUKm9+Tyuy+MqVdAIyEByeIspAVtD4GWC/SJtxO8XD4knVA=="
},
+ "property-information": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz",
+ "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==",
+ "dev": true
+ },
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -777,6 +2238,86 @@
"safe-buffer": "^5.1.0"
}
},
+ "react": {
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz",
+ "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "react-dom": {
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz",
+ "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.22.0"
+ }
+ },
+ "rehype": {
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz",
+ "integrity": "sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "rehype-parse": "^8.0.0",
+ "rehype-stringify": "^9.0.0",
+ "unified": "^10.0.0"
+ }
+ },
+ "rehype-highlight": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-5.0.2.tgz",
+ "integrity": "sha512-ZNm8V8BQUDn05cJPzAu/PjiloaFFrh+Pt3bY+NCcdCggI7Uyl5mW0FGR7RATeIz5/ECUd1D8Kvjt4HaLPmnOMw==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "hast-util-to-text": "^3.0.0",
+ "lowlight": "^2.0.0",
+ "unified": "^10.0.0",
+ "unist-util-visit": "^4.0.0"
+ }
+ },
+ "rehype-parse": {
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz",
+ "integrity": "sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "hast-util-from-parse5": "^7.0.0",
+ "parse5": "^6.0.0",
+ "unified": "^10.0.0"
+ }
+ },
+ "rehype-react": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/rehype-react/-/rehype-react-7.1.1.tgz",
+ "integrity": "sha512-6yaitxM95JFsuTA74OH54OyvTAeRqR4/A6f45S2sEk2FEG04iGgsObcmEIFQRsjK9pfAhc74lR4iGf/W2G/sBw==",
+ "dev": true,
+ "requires": {
+ "@mapbox/hast-util-table-cell-style": "^0.2.0",
+ "@types/hast": "^2.0.0",
+ "hast-to-hyperscript": "^10.0.0",
+ "hast-util-whitespace": "^2.0.0",
+ "unified": "^10.0.0"
+ }
+ },
+ "rehype-stringify": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
+ "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "hast-util-to-html": "^8.0.0",
+ "unified": "^10.0.0"
+ }
+ },
"requirejs": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz",
@@ -820,6 +2361,15 @@
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
},
+ "scheduler": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz",
+ "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -859,6 +2409,31 @@
}
}
},
+ "space-separated-tokens": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
+ "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==",
+ "dev": true
+ },
+ "stringify-entities": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz",
+ "integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==",
+ "dev": true,
+ "requires": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ }
+ },
+ "style-to-object": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
+ "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
+ "dev": true,
+ "requires": {
+ "inline-style-parser": "0.1.1"
+ }
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -879,6 +2454,33 @@
"source-map-support": "~0.5.20"
}
},
+ "trough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
+ "dev": true
+ },
+ "ts-node": {
+ "version": "10.8.0",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.0.tgz",
+ "integrity": "sha512-/fNd5Qh+zTt8Vt1KbYZjRHCE9sI5i7nqfD/dzBBRDeVXZXS6kToW6R7tTU6Nd4XavFs0mAVCg29Q//ML7WsZYA==",
+ "dev": true,
+ "requires": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ }
+ },
"tslib": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
@@ -889,6 +2491,123 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz",
"integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==",
"dev": true
+ },
+ "unified": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "bail": "^2.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^5.0.0"
+ }
+ },
+ "unist-util-find-after": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.0.tgz",
+ "integrity": "sha512-gfpsxKQde7atVF30n5Gff2fQhAc4/HTOV4CvkXpTg9wRfQhZWdXitpyXHWB6YcYgnsxLx+4gGHeVjCTAAp9sjw==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ }
+ },
+ "unist-util-is": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
+ "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==",
+ "dev": true
+ },
+ "unist-util-stringify-position": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz",
+ "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0"
+ }
+ },
+ "unist-util-visit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
+ "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.0.0"
+ }
+ },
+ "unist-util-visit-parents": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz",
+ "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ }
+ },
+ "v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true
+ },
+ "vfile": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz",
+ "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "vfile-message": "^3.0.0"
+ }
+ },
+ "vfile-location": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz",
+ "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "vfile": "^5.0.0"
+ }
+ },
+ "vfile-message": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz",
+ "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ }
+ },
+ "web-namespaces": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true
}
}
}
diff --git a/package.json b/package.json
index 123f4dbd2..d9aab4b5f 100644
--- a/package.json
+++ b/package.json
@@ -4,6 +4,7 @@
"description": "Website additions for tweaked.cc",
"author": "SquidDev",
"license": "BSD-3-Clause",
+ "type": "module",
"dependencies": {
"preact": "^10.5.5",
"tslib": "^2.0.3"
@@ -11,9 +12,18 @@
"devDependencies": {
"@rollup/plugin-typescript": "^8.2.5",
"@rollup/plugin-url": "^6.1.0",
+ "@types/glob": "^7.2.0",
+ "@types/react-dom": "^18.0.5",
+ "glob": "^8.0.3",
+ "react": "^18.1.0",
+ "react-dom": "^18.1.0",
+ "rehype": "^12.0.1",
+ "rehype-highlight": "^5.0.2",
+ "rehype-react": "^7.1.1",
"requirejs": "^2.3.6",
"rollup": "^2.33.1",
"rollup-plugin-terser": "^7.0.2",
+ "ts-node": "^10.8.0",
"typescript": "^4.0.5"
}
}
diff --git a/src/generated/export/index.json b/src/generated/export/index.json
new file mode 100644
index 000000000..f4bfe9cac
--- /dev/null
+++ b/src/generated/export/index.json
@@ -0,0 +1,760 @@
+{
+ "itemNames": {
+ "computercraft:cable": "Networking Cable",
+ "computercraft:computer_advanced": "Advanced Computer",
+ "computercraft:computer_command": "Command Computer",
+ "computercraft:computer_normal": "Computer",
+ "computercraft:disk": "Floppy Disk",
+ "computercraft:disk_drive": "Disk Drive",
+ "computercraft:monitor_advanced": "Advanced Monitor",
+ "computercraft:monitor_normal": "Monitor",
+ "computercraft:pocket_computer_advanced": "Advanced Pocket Computer",
+ "computercraft:pocket_computer_normal": "Pocket Computer",
+ "computercraft:printed_book": "Printed Book",
+ "computercraft:printed_page": "Printed Page",
+ "computercraft:printed_pages": "Printed Pages",
+ "computercraft:printer": "Printer",
+ "computercraft:speaker": "Speaker",
+ "computercraft:treasure_disk": "Floppy Disk",
+ "computercraft:turtle_advanced": "Advanced Turtle",
+ "computercraft:turtle_normal": "Turtle",
+ "computercraft:wired_modem": "Wired Modem",
+ "computercraft:wired_modem_full": "Wired Modem",
+ "computercraft:wireless_modem_advanced": "Ender Modem",
+ "computercraft:wireless_modem_normal": "Wireless Modem",
+ "minecraft:black_dye": "Black Dye",
+ "minecraft:blue_dye": "Blue Dye",
+ "minecraft:brown_dye": "Brown Dye",
+ "minecraft:chest": "Chest",
+ "minecraft:command_block": "Command Block",
+ "minecraft:cyan_dye": "Cyan Dye",
+ "minecraft:ender_eye": "Eye of Ender",
+ "minecraft:ender_pearl": "Ender Pearl",
+ "minecraft:glass_pane": "Glass Pane",
+ "minecraft:gold_block": "Block of Gold",
+ "minecraft:gold_ingot": "Gold Ingot",
+ "minecraft:golden_apple": "Golden Apple",
+ "minecraft:gray_dye": "Gray Dye",
+ "minecraft:green_dye": "Green Dye",
+ "minecraft:iron_ingot": "Iron Ingot",
+ "minecraft:leather": "Leather",
+ "minecraft:light_blue_dye": "Light Blue Dye",
+ "minecraft:light_gray_dye": "Light Gray Dye",
+ "minecraft:lime_dye": "Lime Dye",
+ "minecraft:magenta_dye": "Magenta Dye",
+ "minecraft:note_block": "Note Block",
+ "minecraft:orange_dye": "Orange Dye",
+ "minecraft:pink_dye": "Pink Dye",
+ "minecraft:purple_dye": "Purple Dye",
+ "minecraft:red_dye": "Red Dye",
+ "minecraft:redstone": "Redstone Dust",
+ "minecraft:stone": "Stone",
+ "minecraft:string": "String",
+ "minecraft:white_dye": "White Dye",
+ "minecraft:yellow_dye": "Yellow Dye"
+ },
+ "recipes": {
+ "computercraft:cable": {
+ "inputs": [
+ null,
+ [
+ "minecraft:stone"
+ ],
+ null,
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:redstone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ null,
+ [
+ "minecraft:stone"
+ ],
+ null
+ ],
+ "output": "computercraft:cable",
+ "count": 6
+ },
+ "computercraft:computer_advanced": {
+ "inputs": [
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:redstone"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:glass_pane"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ]
+ ],
+ "output": "computercraft:computer_advanced",
+ "count": 1
+ },
+ "computercraft:computer_advanced_upgrade": {
+ "inputs": [
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "computercraft:computer_normal"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ null,
+ [
+ "minecraft:gold_ingot"
+ ]
+ ],
+ "output": "computercraft:computer_advanced",
+ "count": 1
+ },
+ "computercraft:computer_command": {
+ "inputs": [
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:command_block"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:glass_pane"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ]
+ ],
+ "output": "computercraft:computer_command",
+ "count": 1
+ },
+ "computercraft:computer_normal": {
+ "inputs": [
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:redstone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:glass_pane"
+ ],
+ [
+ "minecraft:stone"
+ ]
+ ],
+ "output": "computercraft:computer_normal",
+ "count": 1
+ },
+ "computercraft:disk_drive": {
+ "inputs": [
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:redstone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:redstone"
+ ],
+ [
+ "minecraft:stone"
+ ]
+ ],
+ "output": "computercraft:disk_drive",
+ "count": 1
+ },
+ "computercraft:monitor_advanced": {
+ "inputs": [
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:glass_pane"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ]
+ ],
+ "output": "computercraft:monitor_advanced",
+ "count": 4
+ },
+ "computercraft:monitor_normal": {
+ "inputs": [
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:glass_pane"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ]
+ ],
+ "output": "computercraft:monitor_normal",
+ "count": 1
+ },
+ "computercraft:pocket_computer_advanced": {
+ "inputs": [
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:golden_apple"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:glass_pane"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ]
+ ],
+ "output": "computercraft:pocket_computer_advanced",
+ "count": 1
+ },
+ "computercraft:pocket_computer_advanced_upgrade": {
+ "inputs": [
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "computercraft:pocket_computer_normal"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ null,
+ [
+ "minecraft:gold_ingot"
+ ]
+ ],
+ "output": "computercraft:pocket_computer_advanced",
+ "count": 1
+ },
+ "computercraft:pocket_computer_normal": {
+ "inputs": [
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:golden_apple"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:glass_pane"
+ ],
+ [
+ "minecraft:stone"
+ ]
+ ],
+ "output": "computercraft:pocket_computer_normal",
+ "count": 1
+ },
+ "computercraft:printed_book": {
+ "inputs": [
+ [
+ "minecraft:leather"
+ ],
+ [
+ "computercraft:printed_page"
+ ],
+ [
+ "minecraft:string"
+ ],
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ "output": "computercraft:printed_book",
+ "count": 1
+ },
+ "computercraft:printed_pages": {
+ "inputs": [
+ [
+ "computercraft:printed_page"
+ ],
+ [
+ "computercraft:printed_page"
+ ],
+ [
+ "minecraft:string"
+ ],
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ "output": "computercraft:printed_pages",
+ "count": 1
+ },
+ "computercraft:printer": {
+ "inputs": [
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:redstone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:black_dye",
+ "minecraft:blue_dye",
+ "minecraft:brown_dye",
+ "minecraft:cyan_dye",
+ "minecraft:gray_dye",
+ "minecraft:green_dye",
+ "minecraft:light_blue_dye",
+ "minecraft:light_gray_dye",
+ "minecraft:lime_dye",
+ "minecraft:magenta_dye",
+ "minecraft:orange_dye",
+ "minecraft:pink_dye",
+ "minecraft:purple_dye",
+ "minecraft:red_dye",
+ "minecraft:white_dye",
+ "minecraft:yellow_dye"
+ ],
+ [
+ "minecraft:stone"
+ ]
+ ],
+ "output": "computercraft:printer",
+ "count": 1
+ },
+ "computercraft:speaker": {
+ "inputs": [
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:note_block"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:redstone"
+ ],
+ [
+ "minecraft:stone"
+ ]
+ ],
+ "output": "computercraft:speaker",
+ "count": 1
+ },
+ "computercraft:turtle_advanced": {
+ "inputs": [
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "computercraft:computer_advanced"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:chest"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ]
+ ],
+ "output": "computercraft:turtle_advanced",
+ "count": 1
+ },
+ "computercraft:turtle_advanced_upgrade": {
+ "inputs": [
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "computercraft:turtle_normal"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ null,
+ [
+ "minecraft:gold_block"
+ ],
+ null
+ ],
+ "output": "computercraft:turtle_advanced",
+ "count": 1
+ },
+ "computercraft:turtle_normal": {
+ "inputs": [
+ [
+ "minecraft:iron_ingot"
+ ],
+ [
+ "minecraft:iron_ingot"
+ ],
+ [
+ "minecraft:iron_ingot"
+ ],
+ [
+ "minecraft:iron_ingot"
+ ],
+ [
+ "computercraft:computer_normal"
+ ],
+ [
+ "minecraft:iron_ingot"
+ ],
+ [
+ "minecraft:iron_ingot"
+ ],
+ [
+ "minecraft:chest"
+ ],
+ [
+ "minecraft:iron_ingot"
+ ]
+ ],
+ "output": "computercraft:turtle_normal",
+ "count": 1
+ },
+ "computercraft:wired_modem": {
+ "inputs": [
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:redstone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ]
+ ],
+ "output": "computercraft:wired_modem",
+ "count": 1
+ },
+ "computercraft:wired_modem_full_from": {
+ "inputs": [
+ [
+ "computercraft:wired_modem"
+ ],
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ "output": "computercraft:wired_modem_full",
+ "count": 1
+ },
+ "computercraft:wired_modem_full_to": {
+ "inputs": [
+ [
+ "computercraft:wired_modem_full"
+ ],
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ "output": "computercraft:wired_modem",
+ "count": 1
+ },
+ "computercraft:wireless_modem_advanced": {
+ "inputs": [
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:ender_eye"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ],
+ [
+ "minecraft:gold_ingot"
+ ]
+ ],
+ "output": "computercraft:wireless_modem_advanced",
+ "count": 1
+ },
+ "computercraft:wireless_modem_normal": {
+ "inputs": [
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:ender_pearl"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ],
+ [
+ "minecraft:stone"
+ ]
+ ],
+ "output": "computercraft:wireless_modem_normal",
+ "count": 1
+ }
+ }
+}
diff --git a/src/generated/export/items/computercraft/cable.png b/src/generated/export/items/computercraft/cable.png
new file mode 100644
index 000000000..593ed2373
Binary files /dev/null and b/src/generated/export/items/computercraft/cable.png differ
diff --git a/src/generated/export/items/computercraft/computer_advanced.png b/src/generated/export/items/computercraft/computer_advanced.png
new file mode 100644
index 000000000..2b9f5f5a3
Binary files /dev/null and b/src/generated/export/items/computercraft/computer_advanced.png differ
diff --git a/src/generated/export/items/computercraft/computer_command.png b/src/generated/export/items/computercraft/computer_command.png
new file mode 100644
index 000000000..d8f65c75d
Binary files /dev/null and b/src/generated/export/items/computercraft/computer_command.png differ
diff --git a/src/generated/export/items/computercraft/computer_normal.png b/src/generated/export/items/computercraft/computer_normal.png
new file mode 100644
index 000000000..fa1787e89
Binary files /dev/null and b/src/generated/export/items/computercraft/computer_normal.png differ
diff --git a/src/generated/export/items/computercraft/disk.png b/src/generated/export/items/computercraft/disk.png
new file mode 100644
index 000000000..0f11b0762
Binary files /dev/null and b/src/generated/export/items/computercraft/disk.png differ
diff --git a/src/generated/export/items/computercraft/disk_drive.png b/src/generated/export/items/computercraft/disk_drive.png
new file mode 100644
index 000000000..158aafddf
Binary files /dev/null and b/src/generated/export/items/computercraft/disk_drive.png differ
diff --git a/src/generated/export/items/computercraft/monitor_advanced.png b/src/generated/export/items/computercraft/monitor_advanced.png
new file mode 100644
index 000000000..5e99f1a3f
Binary files /dev/null and b/src/generated/export/items/computercraft/monitor_advanced.png differ
diff --git a/src/generated/export/items/computercraft/monitor_normal.png b/src/generated/export/items/computercraft/monitor_normal.png
new file mode 100644
index 000000000..b80d1f84f
Binary files /dev/null and b/src/generated/export/items/computercraft/monitor_normal.png differ
diff --git a/src/generated/export/items/computercraft/pocket_computer_advanced.png b/src/generated/export/items/computercraft/pocket_computer_advanced.png
new file mode 100644
index 000000000..e3865e062
Binary files /dev/null and b/src/generated/export/items/computercraft/pocket_computer_advanced.png differ
diff --git a/src/generated/export/items/computercraft/pocket_computer_normal.png b/src/generated/export/items/computercraft/pocket_computer_normal.png
new file mode 100644
index 000000000..25f6ee700
Binary files /dev/null and b/src/generated/export/items/computercraft/pocket_computer_normal.png differ
diff --git a/src/generated/export/items/computercraft/printed_book.png b/src/generated/export/items/computercraft/printed_book.png
new file mode 100644
index 000000000..ee4b235f7
Binary files /dev/null and b/src/generated/export/items/computercraft/printed_book.png differ
diff --git a/src/generated/export/items/computercraft/printed_page.png b/src/generated/export/items/computercraft/printed_page.png
new file mode 100644
index 000000000..b27f175dd
Binary files /dev/null and b/src/generated/export/items/computercraft/printed_page.png differ
diff --git a/src/generated/export/items/computercraft/printed_pages.png b/src/generated/export/items/computercraft/printed_pages.png
new file mode 100644
index 000000000..182902e96
Binary files /dev/null and b/src/generated/export/items/computercraft/printed_pages.png differ
diff --git a/src/generated/export/items/computercraft/printer.png b/src/generated/export/items/computercraft/printer.png
new file mode 100644
index 000000000..4fe8a80da
Binary files /dev/null and b/src/generated/export/items/computercraft/printer.png differ
diff --git a/src/generated/export/items/computercraft/speaker.png b/src/generated/export/items/computercraft/speaker.png
new file mode 100644
index 000000000..c30e8355b
Binary files /dev/null and b/src/generated/export/items/computercraft/speaker.png differ
diff --git a/src/generated/export/items/computercraft/treasure_disk.png b/src/generated/export/items/computercraft/treasure_disk.png
new file mode 100644
index 000000000..2aa8a62b7
Binary files /dev/null and b/src/generated/export/items/computercraft/treasure_disk.png differ
diff --git a/src/generated/export/items/computercraft/turtle_advanced.png b/src/generated/export/items/computercraft/turtle_advanced.png
new file mode 100644
index 000000000..6313e8462
Binary files /dev/null and b/src/generated/export/items/computercraft/turtle_advanced.png differ
diff --git a/src/generated/export/items/computercraft/turtle_normal.png b/src/generated/export/items/computercraft/turtle_normal.png
new file mode 100644
index 000000000..7ab1e0786
Binary files /dev/null and b/src/generated/export/items/computercraft/turtle_normal.png differ
diff --git a/src/generated/export/items/computercraft/wired_modem.png b/src/generated/export/items/computercraft/wired_modem.png
new file mode 100644
index 000000000..841d3dc73
Binary files /dev/null and b/src/generated/export/items/computercraft/wired_modem.png differ
diff --git a/src/generated/export/items/computercraft/wired_modem_full.png b/src/generated/export/items/computercraft/wired_modem_full.png
new file mode 100644
index 000000000..8d5a0ea5f
Binary files /dev/null and b/src/generated/export/items/computercraft/wired_modem_full.png differ
diff --git a/src/generated/export/items/computercraft/wireless_modem_advanced.png b/src/generated/export/items/computercraft/wireless_modem_advanced.png
new file mode 100644
index 000000000..f9853d978
Binary files /dev/null and b/src/generated/export/items/computercraft/wireless_modem_advanced.png differ
diff --git a/src/generated/export/items/computercraft/wireless_modem_normal.png b/src/generated/export/items/computercraft/wireless_modem_normal.png
new file mode 100644
index 000000000..287a1738f
Binary files /dev/null and b/src/generated/export/items/computercraft/wireless_modem_normal.png differ
diff --git a/src/generated/export/items/minecraft/black_dye.png b/src/generated/export/items/minecraft/black_dye.png
new file mode 100644
index 000000000..4b5e52560
Binary files /dev/null and b/src/generated/export/items/minecraft/black_dye.png differ
diff --git a/src/generated/export/items/minecraft/blue_dye.png b/src/generated/export/items/minecraft/blue_dye.png
new file mode 100644
index 000000000..0edf68729
Binary files /dev/null and b/src/generated/export/items/minecraft/blue_dye.png differ
diff --git a/src/generated/export/items/minecraft/brown_dye.png b/src/generated/export/items/minecraft/brown_dye.png
new file mode 100644
index 000000000..7263ee463
Binary files /dev/null and b/src/generated/export/items/minecraft/brown_dye.png differ
diff --git a/src/generated/export/items/minecraft/chest.png b/src/generated/export/items/minecraft/chest.png
new file mode 100644
index 000000000..19f6cab55
Binary files /dev/null and b/src/generated/export/items/minecraft/chest.png differ
diff --git a/src/generated/export/items/minecraft/command_block.png b/src/generated/export/items/minecraft/command_block.png
new file mode 100644
index 000000000..cef1cac2e
Binary files /dev/null and b/src/generated/export/items/minecraft/command_block.png differ
diff --git a/src/generated/export/items/minecraft/cyan_dye.png b/src/generated/export/items/minecraft/cyan_dye.png
new file mode 100644
index 000000000..03d946dbb
Binary files /dev/null and b/src/generated/export/items/minecraft/cyan_dye.png differ
diff --git a/src/generated/export/items/minecraft/ender_eye.png b/src/generated/export/items/minecraft/ender_eye.png
new file mode 100644
index 000000000..caae6f4d6
Binary files /dev/null and b/src/generated/export/items/minecraft/ender_eye.png differ
diff --git a/src/generated/export/items/minecraft/ender_pearl.png b/src/generated/export/items/minecraft/ender_pearl.png
new file mode 100644
index 000000000..539a50c68
Binary files /dev/null and b/src/generated/export/items/minecraft/ender_pearl.png differ
diff --git a/src/generated/export/items/minecraft/glass_pane.png b/src/generated/export/items/minecraft/glass_pane.png
new file mode 100644
index 000000000..64924e7fa
Binary files /dev/null and b/src/generated/export/items/minecraft/glass_pane.png differ
diff --git a/src/generated/export/items/minecraft/gold_block.png b/src/generated/export/items/minecraft/gold_block.png
new file mode 100644
index 000000000..4331c0b18
Binary files /dev/null and b/src/generated/export/items/minecraft/gold_block.png differ
diff --git a/src/generated/export/items/minecraft/gold_ingot.png b/src/generated/export/items/minecraft/gold_ingot.png
new file mode 100644
index 000000000..ab4f787d6
Binary files /dev/null and b/src/generated/export/items/minecraft/gold_ingot.png differ
diff --git a/src/generated/export/items/minecraft/golden_apple.png b/src/generated/export/items/minecraft/golden_apple.png
new file mode 100644
index 000000000..88f462936
Binary files /dev/null and b/src/generated/export/items/minecraft/golden_apple.png differ
diff --git a/src/generated/export/items/minecraft/gray_dye.png b/src/generated/export/items/minecraft/gray_dye.png
new file mode 100644
index 000000000..6f5c3bda9
Binary files /dev/null and b/src/generated/export/items/minecraft/gray_dye.png differ
diff --git a/src/generated/export/items/minecraft/green_dye.png b/src/generated/export/items/minecraft/green_dye.png
new file mode 100644
index 000000000..46c6bb436
Binary files /dev/null and b/src/generated/export/items/minecraft/green_dye.png differ
diff --git a/src/generated/export/items/minecraft/iron_ingot.png b/src/generated/export/items/minecraft/iron_ingot.png
new file mode 100644
index 000000000..a9e1e21ed
Binary files /dev/null and b/src/generated/export/items/minecraft/iron_ingot.png differ
diff --git a/src/generated/export/items/minecraft/leather.png b/src/generated/export/items/minecraft/leather.png
new file mode 100644
index 000000000..a7655ebb2
Binary files /dev/null and b/src/generated/export/items/minecraft/leather.png differ
diff --git a/src/generated/export/items/minecraft/light_blue_dye.png b/src/generated/export/items/minecraft/light_blue_dye.png
new file mode 100644
index 000000000..f41f3eb3e
Binary files /dev/null and b/src/generated/export/items/minecraft/light_blue_dye.png differ
diff --git a/src/generated/export/items/minecraft/light_gray_dye.png b/src/generated/export/items/minecraft/light_gray_dye.png
new file mode 100644
index 000000000..a62673fea
Binary files /dev/null and b/src/generated/export/items/minecraft/light_gray_dye.png differ
diff --git a/src/generated/export/items/minecraft/lime_dye.png b/src/generated/export/items/minecraft/lime_dye.png
new file mode 100644
index 000000000..c80489830
Binary files /dev/null and b/src/generated/export/items/minecraft/lime_dye.png differ
diff --git a/src/generated/export/items/minecraft/magenta_dye.png b/src/generated/export/items/minecraft/magenta_dye.png
new file mode 100644
index 000000000..628b15ab8
Binary files /dev/null and b/src/generated/export/items/minecraft/magenta_dye.png differ
diff --git a/src/generated/export/items/minecraft/note_block.png b/src/generated/export/items/minecraft/note_block.png
new file mode 100644
index 000000000..e41a8fc30
Binary files /dev/null and b/src/generated/export/items/minecraft/note_block.png differ
diff --git a/src/generated/export/items/minecraft/orange_dye.png b/src/generated/export/items/minecraft/orange_dye.png
new file mode 100644
index 000000000..ef0d8100f
Binary files /dev/null and b/src/generated/export/items/minecraft/orange_dye.png differ
diff --git a/src/generated/export/items/minecraft/pink_dye.png b/src/generated/export/items/minecraft/pink_dye.png
new file mode 100644
index 000000000..992f90517
Binary files /dev/null and b/src/generated/export/items/minecraft/pink_dye.png differ
diff --git a/src/generated/export/items/minecraft/purple_dye.png b/src/generated/export/items/minecraft/purple_dye.png
new file mode 100644
index 000000000..318d73f5e
Binary files /dev/null and b/src/generated/export/items/minecraft/purple_dye.png differ
diff --git a/src/generated/export/items/minecraft/red_dye.png b/src/generated/export/items/minecraft/red_dye.png
new file mode 100644
index 000000000..2b5f72bec
Binary files /dev/null and b/src/generated/export/items/minecraft/red_dye.png differ
diff --git a/src/generated/export/items/minecraft/redstone.png b/src/generated/export/items/minecraft/redstone.png
new file mode 100644
index 000000000..0beaa512a
Binary files /dev/null and b/src/generated/export/items/minecraft/redstone.png differ
diff --git a/src/generated/export/items/minecraft/stone.png b/src/generated/export/items/minecraft/stone.png
new file mode 100644
index 000000000..f5f74d1d1
Binary files /dev/null and b/src/generated/export/items/minecraft/stone.png differ
diff --git a/src/generated/export/items/minecraft/string.png b/src/generated/export/items/minecraft/string.png
new file mode 100644
index 000000000..6b82875cd
Binary files /dev/null and b/src/generated/export/items/minecraft/string.png differ
diff --git a/src/generated/export/items/minecraft/white_dye.png b/src/generated/export/items/minecraft/white_dye.png
new file mode 100644
index 000000000..314ceaba9
Binary files /dev/null and b/src/generated/export/items/minecraft/white_dye.png differ
diff --git a/src/generated/export/items/minecraft/yellow_dye.png b/src/generated/export/items/minecraft/yellow_dye.png
new file mode 100644
index 000000000..6e1b056a3
Binary files /dev/null and b/src/generated/export/items/minecraft/yellow_dye.png differ
diff --git a/src/main/java/dan200/computercraft/ComputerCraftAPIImpl.java b/src/main/java/dan200/computercraft/ComputerCraftAPIImpl.java
index 08432f0ff..dfbb26ed5 100644
--- a/src/main/java/dan200/computercraft/ComputerCraftAPIImpl.java
+++ b/src/main/java/dan200/computercraft/ComputerCraftAPIImpl.java
@@ -6,6 +6,7 @@
package dan200.computercraft;
import dan200.computercraft.api.ComputerCraftAPI.IComputerCraftAPI;
+import dan200.computercraft.api.detail.IDetailProvider;
import dan200.computercraft.api.filesystem.IMount;
import dan200.computercraft.api.filesystem.IWritableMount;
import dan200.computercraft.api.lua.GenericSource;
@@ -24,6 +25,7 @@
import dan200.computercraft.core.filesystem.ResourceMount;
import dan200.computercraft.shared.*;
import dan200.computercraft.shared.peripheral.generic.GenericPeripheralProvider;
+import dan200.computercraft.shared.peripheral.generic.data.DetailProviders;
import dan200.computercraft.shared.peripheral.modem.wireless.WirelessNetwork;
import dan200.computercraft.shared.util.IDAssigner;
import dan200.computercraft.shared.wired.WiredNode;
@@ -168,6 +170,12 @@ public void registerAPIFactory( @Nonnull ILuaAPIFactory factory )
ApiFactories.register( factory );
}
+ @Override
+ public void registerDetailProvider( @Nonnull Class type, @Nonnull IDetailProvider provider )
+ {
+ DetailProviders.registerProvider( type, provider );
+ }
+
@Nonnull
@Override
public IWiredNode createWiredNodeForElement( @Nonnull IWiredElement element )
diff --git a/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java b/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java
index 7daa7e6bf..dc00bb641 100644
--- a/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java
+++ b/src/main/java/dan200/computercraft/api/ComputerCraftAPI.java
@@ -5,6 +5,8 @@
*/
package dan200.computercraft.api;
+import dan200.computercraft.api.detail.BlockReference;
+import dan200.computercraft.api.detail.IDetailProvider;
import dan200.computercraft.api.filesystem.IMount;
import dan200.computercraft.api.filesystem.IWritableMount;
import dan200.computercraft.api.lua.GenericSource;
@@ -20,12 +22,14 @@
import dan200.computercraft.api.pocket.IPocketUpgrade;
import dan200.computercraft.api.redstone.IBundledRedstoneProvider;
import dan200.computercraft.api.turtle.ITurtleUpgrade;
+import net.minecraft.item.ItemStack;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -221,6 +225,20 @@ public static void registerAPIFactory( @Nonnull ILuaAPIFactory factory )
getInstance().registerAPIFactory( factory );
}
+ /**
+ * Registers a detail provider to provide additional details for blocks, fluids and items when inspected by methods
+ * such as {@code turtle.getItemDetail()} or {@code turtle.inspect()}.
+ *
+ * @param type The type of object that this provider can provide details for. Should be {@link BlockReference},
+ * {@link FluidStack} or {@link ItemStack}.
+ * @param provider The detail provider to register.
+ * @param The type of object that this provider can provide details for.
+ */
+ public static void registerDetailProvider( @Nonnull Class type, @Nonnull IDetailProvider provider )
+ {
+ getInstance().registerDetailProvider( type, provider );
+ }
+
/**
* Construct a new wired node for a given wired element.
*
@@ -301,6 +319,8 @@ public interface IComputerCraftAPI
void registerAPIFactory( @Nonnull ILuaAPIFactory factory );
+ void registerDetailProvider( @Nonnull Class type, @Nonnull IDetailProvider provider );
+
@Nonnull
IWiredNode createWiredNodeForElement( @Nonnull IWiredElement element );
diff --git a/src/main/java/dan200/computercraft/api/detail/BasicItemDetailProvider.java b/src/main/java/dan200/computercraft/api/detail/BasicItemDetailProvider.java
new file mode 100644
index 000000000..10398d8bd
--- /dev/null
+++ b/src/main/java/dan200/computercraft/api/detail/BasicItemDetailProvider.java
@@ -0,0 +1,79 @@
+/*
+ * This file is part of the public ComputerCraft API - http://www.computercraft.info
+ * Copyright Daniel Ratcliffe, 2011-2022. This API may be redistributed unmodified and in full only.
+ * For help using the API, and posting your mods, visit the forums at computercraft.info.
+ */
+package dan200.computercraft.api.detail;
+
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+import javax.annotation.Nonnull;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * An item detail provider for {@link ItemStack}'s whose {@link Item} has a specific type.
+ *
+ * @param The type the stack's item must have.
+ */
+public abstract class BasicItemDetailProvider implements IDetailProvider
+{
+ private final Class itemType;
+ private final String namespace;
+
+ /**
+ * Create a new item detail provider. Meta will be inserted into a new sub-map named as per {@code namespace}.
+ *
+ * @param itemType The type the stack's item must have.
+ * @param namespace The namespace to use for this provider.
+ */
+ public BasicItemDetailProvider( String namespace, @Nonnull Class itemType )
+ {
+ Objects.requireNonNull( itemType );
+ this.itemType = itemType;
+ this.namespace = namespace;
+ }
+
+ /**
+ * Create a new item detail provider. Meta will be inserted directly into the results.
+ *
+ * @param itemType The type the stack's item must have.
+ */
+ public BasicItemDetailProvider( @Nonnull Class itemType )
+ {
+ this( null, itemType );
+ }
+
+ /**
+ * Provide additional details for the given {@link Item} and {@link ItemStack}. This method is called by
+ * {@code turtle.getItemDetail()}. New properties should be added to the given {@link Map}, {@code data}.
+ *
+ * This method is always called on the server thread, so it is safe to interact with the world here, but you should
+ * take care to avoid long blocking operations as this will stall the server and other computers.
+ *
+ * @param data The full details to be returned for this item stack. New properties should be added to this map.
+ * @param stack The item stack to provide details for.
+ * @param item The item to provide details for.
+ */
+ public abstract void provideDetails( @Nonnull Map super String, Object> data, @Nonnull ItemStack stack,
+ @Nonnull T item );
+
+ @Override
+ public void provideDetails( @Nonnull Map super String, Object> data, @Nonnull ItemStack stack )
+ {
+ Item item = stack.getItem();
+ if ( !itemType.isInstance( item ) ) return;
+
+ // If `namespace` is specified, insert into a new data map instead of the existing one.
+ Map super String, Object> child = namespace == null ? data : new HashMap<>();
+
+ provideDetails( child, stack, itemType.cast( item ) );
+
+ if ( namespace != null )
+ {
+ data.put( namespace, child );
+ }
+ }
+}
diff --git a/src/main/java/dan200/computercraft/api/detail/BlockReference.java b/src/main/java/dan200/computercraft/api/detail/BlockReference.java
new file mode 100644
index 000000000..03aa443cb
--- /dev/null
+++ b/src/main/java/dan200/computercraft/api/detail/BlockReference.java
@@ -0,0 +1,65 @@
+/*
+ * This file is part of the public ComputerCraft API - http://www.computercraft.info
+ * Copyright Daniel Ratcliffe, 2011-2022. This API may be redistributed unmodified and in full only.
+ * For help using the API, and posting your mods, visit the forums at computercraft.info.
+ */
+package dan200.computercraft.api.detail;
+
+import net.minecraft.block.BlockState;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+/**
+ * A reference to a block in the world, used by block detail providers.
+ */
+public class BlockReference
+{
+ private final World world;
+ private final BlockPos pos;
+ private final BlockState state;
+ private final TileEntity blockEntity;
+
+ public BlockReference( World world, BlockPos pos )
+ {
+ this.world = world;
+ this.pos = pos;
+ this.state = world.getBlockState( pos );
+ this.blockEntity = world.getBlockEntity( pos );
+ }
+
+ public BlockReference( World world, BlockPos pos, BlockState state, TileEntity blockEntity )
+ {
+ this.world = world;
+ this.pos = pos;
+ this.state = state;
+ this.blockEntity = blockEntity;
+ }
+
+ @Nonnull
+ public World getWorld()
+ {
+ return world;
+ }
+
+ @Nonnull
+ public BlockPos getPos()
+ {
+ return pos;
+ }
+
+ @Nonnull
+ public BlockState getState()
+ {
+ return state;
+ }
+
+ @Nullable
+ public TileEntity getBlockEntity()
+ {
+ return blockEntity;
+ }
+}
diff --git a/src/main/java/dan200/computercraft/api/detail/IDetailProvider.java b/src/main/java/dan200/computercraft/api/detail/IDetailProvider.java
new file mode 100644
index 000000000..74841bc8c
--- /dev/null
+++ b/src/main/java/dan200/computercraft/api/detail/IDetailProvider.java
@@ -0,0 +1,33 @@
+/*
+ * This file is part of the public ComputerCraft API - http://www.computercraft.info
+ * Copyright Daniel Ratcliffe, 2011-2022. This API may be redistributed unmodified and in full only.
+ * For help using the API, and posting your mods, visit the forums at computercraft.info.
+ */
+package dan200.computercraft.api.detail;
+
+import javax.annotation.Nonnull;
+import java.util.Map;
+
+/**
+ * This interface is used to provide details about a block, fluid, or item.
+ *
+ * @param The type of object that this provider can provide details for.
+ *
+ * @see dan200.computercraft.api.ComputerCraftAPI#registerDetailProvider(Class, IDetailProvider)
+ */
+@FunctionalInterface
+public interface IDetailProvider
+{
+ /**
+ * Provide additional details for the given object. This method is called by functions such as
+ * {@code turtle.getItemDetail()} and {@code turtle.inspect()}. New properties should be added to the given
+ * {@link Map}, {@code data}.
+ *
+ * This method is always called on the server thread, so it is safe to interact with the world here, but you should
+ * take care to avoid long blocking operations as this will stall the server and other computers.
+ *
+ * @param data The full details to be returned. New properties should be added to this map.
+ * @param object The object to provide details for.
+ */
+ void provideDetails( @Nonnull Map super String, Object> data, @Nonnull T object );
+}
diff --git a/src/main/java/dan200/computercraft/api/lua/IArguments.java b/src/main/java/dan200/computercraft/api/lua/IArguments.java
index 0557665d6..731b00c45 100644
--- a/src/main/java/dan200/computercraft/api/lua/IArguments.java
+++ b/src/main/java/dan200/computercraft/api/lua/IArguments.java
@@ -188,8 +188,8 @@ default > T getEnum( int index, Class klass ) throws LuaExc
*
* Classes implementing this interface may choose to implement a more optimised version which does not copy the
* table, instead returning a wrapper version, making it more efficient. However, the caller must guarantee that
- * they do not access off the computer thread (and so should not be used with main-thread functions) or once the
- * function call has finished (for instance, in callbacks).
+ * they do not access the table the computer thread (and so should not be used with main-thread functions) or once
+ * the initial call has finished (for instance, in a callback to {@link MethodResult#pullEvent}).
*
* @param index The argument number.
* @return The argument's value.
@@ -448,7 +448,10 @@ default String optString( int index, String def ) throws LuaException
* This is called when the current function finishes, before any main thread tasks have run.
*
* Called when the current function returns, and so some values are no longer guaranteed to be safe to access.
+ *
+ * @deprecated This method was an internal implementation detail and is no longer used.
*/
+ @Deprecated
default void releaseImmediate()
{
}
diff --git a/src/main/java/dan200/computercraft/api/lua/ObjectArguments.java b/src/main/java/dan200/computercraft/api/lua/ObjectArguments.java
index 2fa9c8fe8..f6eddbbdb 100644
--- a/src/main/java/dan200/computercraft/api/lua/ObjectArguments.java
+++ b/src/main/java/dan200/computercraft/api/lua/ObjectArguments.java
@@ -5,12 +5,10 @@
*/
package dan200.computercraft.api.lua;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
-import java.util.Optional;
/**
* An implementation of {@link IArguments} which wraps an array of {@link Object}.
@@ -19,7 +17,6 @@ public final class ObjectArguments implements IArguments
{
private static final IArguments EMPTY = new ObjectArguments();
- private boolean released = false;
private final List