diff --git a/build.gradle b/build.gradle
index 3ea9a6beb..16a6d3dd1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -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
@@ -298,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")
@@ -311,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/**'
@@ -319,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/web/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/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/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java
index 65ba23dfc..9f543e713 100644
--- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java
+++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java
@@ -41,6 +41,9 @@
* - {@link #playSound} plays any built-in Minecraft sound, such as block sounds or mob noises.
* - {@link #playAudio} can play arbitrary audio.
*
+ *
Recipe
+ *
+ *
* @cc.module speaker
* @cc.since 1.80pr1
*/
diff --git a/src/testMod/java/dan200/computercraft/export/Exporter.java b/src/testMod/java/dan200/computercraft/export/Exporter.java
new file mode 100644
index 000000000..9b5cc515c
--- /dev/null
+++ b/src/testMod/java/dan200/computercraft/export/Exporter.java
@@ -0,0 +1,153 @@
+/*
+ * This file is part of ComputerCraft - http://www.computercraft.info
+ * Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
+ * Send enquiries to dratcliffe@gmail.com
+ */
+package dan200.computercraft.export;
+
+import com.google.common.io.MoreFiles;
+import com.google.common.io.RecursiveDeleteOption;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.mojang.blaze3d.systems.RenderSystem;
+import dan200.computercraft.ComputerCraft;
+import dan200.computercraft.ingame.mod.TestMod;
+import net.minecraft.client.Minecraft;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.crafting.*;
+import net.minecraft.util.NonNullList;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.text.StringTextComponent;
+import net.minecraftforge.api.distmarker.Dist;
+import net.minecraftforge.client.event.ClientChatEvent;
+import net.minecraftforge.eventbus.api.SubscribeEvent;
+import net.minecraftforge.fml.common.Mod;
+import net.minecraftforge.registries.ForgeRegistries;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.io.Writer;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Provides a {@literal /ccexport } command which exports icons and recipes for all ComputerCraft items.
+ */
+@Mod.EventBusSubscriber( modid = TestMod.MOD_ID, value = Dist.CLIENT )
+public class Exporter
+{
+ private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
+
+ @SubscribeEvent
+ public static void onClientCommands( ClientChatEvent event )
+ {
+ String prefix = "/ccexport";
+ if( !event.getMessage().startsWith( prefix ) ) return;
+ event.setCanceled( true );
+
+ Path output = new File( event.getMessage().substring( prefix.length() ).trim() ).getAbsoluteFile().toPath();
+ if( !Files.isDirectory( output ) )
+ {
+ Minecraft.getInstance().gui.getChat().addMessage( new StringTextComponent( "Output path does not exist" ) );
+ return;
+ }
+
+ RenderSystem.assertThread( RenderSystem::isOnRenderThread );
+ try( ImageRenderer renderer = new ImageRenderer() )
+ {
+ export( output, renderer );
+ }
+ catch( IOException e )
+ {
+ throw new UncheckedIOException( e );
+ }
+
+ Minecraft.getInstance().gui.getChat().addMessage( new StringTextComponent( "Export finished!" ) );
+ }
+
+ private static void export( Path root, ImageRenderer renderer ) throws IOException
+ {
+ JsonDump dump = new JsonDump();
+
+ Set- items = new HashSet<>();
+
+ // First find all CC items
+ for( Item item : ForgeRegistries.ITEMS.getValues() )
+ {
+ if( item.getRegistryName().getNamespace().equals( ComputerCraft.MOD_ID ) ) items.add( item );
+ }
+
+ // Now find all CC recipes.
+ for( ICraftingRecipe recipe : Minecraft.getInstance().level.getRecipeManager().getAllRecipesFor( IRecipeType.CRAFTING ) )
+ {
+ ItemStack result = recipe.getResultItem();
+ if( !result.getItem().getRegistryName().getNamespace().equals( ComputerCraft.MOD_ID ) ) continue;
+ if( result.hasTag() )
+ {
+ ComputerCraft.log.warn( "Skipping recipe {} as it has NBT", recipe.getId() );
+ continue;
+ }
+
+ if( recipe instanceof ShapedRecipe )
+ {
+ JsonDump.Recipe converted = new JsonDump.Recipe( result );
+
+ ShapedRecipe shaped = (ShapedRecipe) recipe;
+ for( int x = 0; x < shaped.getWidth(); x++ )
+ {
+ for( int y = 0; y < shaped.getHeight(); y++ )
+ {
+ Ingredient ingredient = shaped.getIngredients().get( x + y * shaped.getWidth() );
+ if( ingredient.isEmpty() ) continue;
+
+ converted.setInput( x + y * 3, ingredient, items );
+ }
+ }
+
+ dump.recipes.put( recipe.getId().toString(), converted );
+ }
+ else if( recipe instanceof ShapelessRecipe )
+ {
+ JsonDump.Recipe converted = new JsonDump.Recipe( result );
+
+ ShapelessRecipe shapeless = (ShapelessRecipe) recipe;
+ NonNullList ingredients = shapeless.getIngredients();
+ for( int i = 0; i < ingredients.size(); i++ )
+ {
+ converted.setInput( i, ingredients.get( i ), items );
+ }
+
+ dump.recipes.put( recipe.getId().toString(), converted );
+ }
+ else
+ {
+ ComputerCraft.log.info( "Don't know how to handle recipe {}", recipe );
+ }
+ }
+
+ Path itemDir = root.resolve( "items" );
+ if( Files.exists( itemDir ) ) MoreFiles.deleteRecursively( itemDir, RecursiveDeleteOption.ALLOW_INSECURE );
+
+ renderer.setupState();
+ for( Item item : items )
+ {
+ ItemStack stack = new ItemStack( item );
+ dump.itemNames.put( item.getRegistryName().toString(), stack.getHoverName().getString() );
+
+ ResourceLocation location = item.getRegistryName();
+ renderer.captureRender( itemDir.resolve( location.getNamespace() ).resolve( location.getPath() + ".png" ),
+ () -> Minecraft.getInstance().getItemRenderer().renderAndDecorateFakeItem( stack, 0, 0 )
+ );
+ }
+ renderer.clearState();
+
+ try( Writer writer = Files.newBufferedWriter( root.resolve( "index.json" ) ) )
+ {
+ GSON.toJson( dump, writer );
+ }
+ }
+}
diff --git a/src/testMod/java/dan200/computercraft/export/ImageRenderer.java b/src/testMod/java/dan200/computercraft/export/ImageRenderer.java
new file mode 100644
index 000000000..cbc7eb735
--- /dev/null
+++ b/src/testMod/java/dan200/computercraft/export/ImageRenderer.java
@@ -0,0 +1,84 @@
+/*
+ * This file is part of ComputerCraft - http://www.computercraft.info
+ * Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
+ * Send enquiries to dratcliffe@gmail.com
+ */
+package dan200.computercraft.export;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.FogRenderer;
+import net.minecraft.client.renderer.texture.NativeImage;
+import net.minecraft.client.shader.Framebuffer;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL12;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+/**
+ * Utilities for saving OpenGL output to an image rather than displaying it on the screen.
+ */
+public class ImageRenderer implements AutoCloseable
+{
+ public static final int WIDTH = 64;
+ public static final int HEIGHT = 64;
+
+ private final Framebuffer framebuffer = new Framebuffer( WIDTH, HEIGHT, true, Minecraft.ON_OSX );
+ private final NativeImage image = new NativeImage( WIDTH, HEIGHT, Minecraft.ON_OSX );
+
+ public ImageRenderer()
+ {
+ framebuffer.setClearColor( 0, 0, 0, 0 );
+ framebuffer.clear( Minecraft.ON_OSX );
+ }
+
+ public void setupState()
+ {
+ RenderSystem.matrixMode( GL11.GL_PROJECTION );
+ RenderSystem.pushMatrix();
+ RenderSystem.loadIdentity();
+ RenderSystem.ortho( 0, 16, 16, 0, 1000, 3000 );
+
+ RenderSystem.matrixMode( GL11.GL_MODELVIEW );
+ RenderSystem.pushMatrix();
+ RenderSystem.loadIdentity();
+ RenderSystem.translatef( 0, 0, -2000f );
+
+ FogRenderer.setupNoFog();
+ }
+
+ public void clearState()
+ {
+ RenderSystem.matrixMode( GL11.GL_PROJECTION );
+ RenderSystem.popMatrix();
+
+ RenderSystem.matrixMode( GL11.GL_MODELVIEW );
+ RenderSystem.popMatrix();
+ }
+
+ public void captureRender( Path output, Runnable render ) throws IOException
+ {
+ Files.createDirectories( output.getParent() );
+
+ framebuffer.bindWrite( true );
+ RenderSystem.clear( GL12.GL_COLOR_BUFFER_BIT | GL12.GL_DEPTH_BUFFER_BIT, Minecraft.ON_OSX );
+ render.run();
+ framebuffer.unbindWrite();
+
+ framebuffer.bindRead();
+ image.downloadTexture( 0, false );
+ image.flipY();
+ framebuffer.unbindRead();
+
+ image.writeToFile( output );
+ }
+
+ @Override
+ public void close()
+ {
+ image.close();
+ framebuffer.destroyBuffers();
+ }
+}
diff --git a/src/testMod/java/dan200/computercraft/export/JsonDump.java b/src/testMod/java/dan200/computercraft/export/JsonDump.java
new file mode 100644
index 000000000..8b2431fb2
--- /dev/null
+++ b/src/testMod/java/dan200/computercraft/export/JsonDump.java
@@ -0,0 +1,65 @@
+/*
+ * This file is part of ComputerCraft - http://www.computercraft.info
+ * Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
+ * Send enquiries to dratcliffe@gmail.com
+ */
+package dan200.computercraft.export;
+
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.item.crafting.Ingredient;
+
+import java.util.*;
+
+public class JsonDump
+{
+ public Map itemNames = new TreeMap<>();
+ public Map recipes = new TreeMap<>();
+
+ public static class Recipe
+ {
+ public final String[][] inputs = new String[9][];
+ public String output;
+ public int count;
+
+ public Recipe( ItemStack output )
+ {
+ this.output = output.getItem().getRegistryName().toString();
+ count = output.getCount();
+ }
+
+ public void setInput( int pos, Ingredient ingredient, Set
- trackedItems )
+ {
+ if( ingredient.isEmpty() ) return;
+
+ ItemStack[] items = ingredient.getItems();
+
+ // First try to simplify some tags to something easier.
+ for( ItemStack stack : items )
+ {
+ Item item = stack.getItem();
+ if( !canonicalItem.contains( item ) ) continue;
+
+ trackedItems.add( item );
+ inputs[pos] = new String[] { item.getRegistryName().toString() };
+ return;
+ }
+
+ String[] itemIds = new String[items.length];
+ for( int i = 0; i < items.length; i++ )
+ {
+ Item item = items[i].getItem();
+ trackedItems.add( item );
+ itemIds[i] = item.getRegistryName().toString();
+ }
+ Arrays.sort( itemIds );
+
+ inputs[pos] = itemIds;
+ }
+
+ private static final Set
- canonicalItem = new HashSet<>( Arrays.asList(
+ Items.GLASS_PANE, Items.STONE, Items.CHEST
+ ) );
+ }
+}
diff --git a/src/web/components/Recipe.tsx b/src/web/components/Recipe.tsx
new file mode 100644
index 000000000..1dbf34c4f
--- /dev/null
+++ b/src/web/components/Recipe.tsx
@@ -0,0 +1,44 @@
+import type { FunctionComponent } from "react";
+import { createElement as h } from "react";
+import useExport from "./WithExport.js";
+
+const Item: FunctionComponent<{ item: string }> = ({ item }) => {
+ const data = useExport();
+ const itemName = data.itemNames[item];
+
+ return
+};
+
+const Arrow: FunctionComponent = (props) => ;
+
+const Recipe: FunctionComponent<{ recipe: string }> = ({ recipe }) => {
+ const data = useExport();
+ const recipeInfo = data.recipes[recipe];
+ if (!recipeInfo) throw Error("Cannot find recipe for " + recipe);
+
+ return
+
+
{data.itemNames[recipeInfo.output]}
+
+ {recipeInfo.inputs.map((items, i) =>
{items && }
)}
+
+
+
+
+ {recipeInfo.count > 1 && {recipeInfo.count}}
+
+
+
;
+}
+export default Recipe;
diff --git a/src/web/components/WithExport.tsx b/src/web/components/WithExport.tsx
new file mode 100644
index 000000000..10cfcfb37
--- /dev/null
+++ b/src/web/components/WithExport.tsx
@@ -0,0 +1,23 @@
+import { createElement as h, useContext, createContext, FunctionComponent, ReactNode } from "react";
+
+export type DataExport = {
+ readonly itemNames: Record,
+ readonly recipes: Record,
+};
+
+export type Recipe = {
+ readonly inputs: Array>,
+ readonly output: string,
+ readonly count: number,
+};
+
+const DataExport = createContext({
+ itemNames: {},
+ recipes: {},
+});
+
+export const useExport = () => useContext(DataExport);
+export default useExport;
+
+export const WithExport: FunctionComponent<{ data: DataExport, children: ReactNode }> =
+ ({ data, children }) => {children};
diff --git a/src/web/components/support.tsx b/src/web/components/support.tsx
new file mode 100644
index 000000000..9cea4b321
--- /dev/null
+++ b/src/web/components/support.tsx
@@ -0,0 +1,25 @@
+import type { FunctionComponent } from "react";
+
+/**
+ * Wrap a component and ensure that no children are passed to it.
+ *
+ * Our custom tags *must* be explicitly closed, as will be parsed as
+ * (rest of the document). This ensures you've not forgotten to do
+ * that.
+ *
+ * @param component The component to wrap
+ * @returns A new functional component identical to the previous one
+ */
+export const noChildren = function (component: FunctionComponent): FunctionComponent {
+ // I hope that our few remaining friends
+ // Give up on trying to save us
+
+ const name = component.displayName ?? component.name;
+ const wrapped: FunctionComponent = props => {
+ if ((props as any).children) throw Error("Unexpected children in " + name);
+
+ return component(props);
+ };
+ wrapped.displayName = name;
+ return wrapped;
+}
diff --git a/src/web/export/index.json b/src/web/export/index.json
new file mode 100644
index 000000000..f4bfe9cac
--- /dev/null
+++ b/src/web/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/web/export/items/computercraft/cable.png b/src/web/export/items/computercraft/cable.png
new file mode 100644
index 000000000..593ed2373
Binary files /dev/null and b/src/web/export/items/computercraft/cable.png differ
diff --git a/src/web/export/items/computercraft/computer_advanced.png b/src/web/export/items/computercraft/computer_advanced.png
new file mode 100644
index 000000000..2b9f5f5a3
Binary files /dev/null and b/src/web/export/items/computercraft/computer_advanced.png differ
diff --git a/src/web/export/items/computercraft/computer_command.png b/src/web/export/items/computercraft/computer_command.png
new file mode 100644
index 000000000..d8f65c75d
Binary files /dev/null and b/src/web/export/items/computercraft/computer_command.png differ
diff --git a/src/web/export/items/computercraft/computer_normal.png b/src/web/export/items/computercraft/computer_normal.png
new file mode 100644
index 000000000..fa1787e89
Binary files /dev/null and b/src/web/export/items/computercraft/computer_normal.png differ
diff --git a/src/web/export/items/computercraft/disk.png b/src/web/export/items/computercraft/disk.png
new file mode 100644
index 000000000..0f11b0762
Binary files /dev/null and b/src/web/export/items/computercraft/disk.png differ
diff --git a/src/web/export/items/computercraft/disk_drive.png b/src/web/export/items/computercraft/disk_drive.png
new file mode 100644
index 000000000..158aafddf
Binary files /dev/null and b/src/web/export/items/computercraft/disk_drive.png differ
diff --git a/src/web/export/items/computercraft/monitor_advanced.png b/src/web/export/items/computercraft/monitor_advanced.png
new file mode 100644
index 000000000..5e99f1a3f
Binary files /dev/null and b/src/web/export/items/computercraft/monitor_advanced.png differ
diff --git a/src/web/export/items/computercraft/monitor_normal.png b/src/web/export/items/computercraft/monitor_normal.png
new file mode 100644
index 000000000..b80d1f84f
Binary files /dev/null and b/src/web/export/items/computercraft/monitor_normal.png differ
diff --git a/src/web/export/items/computercraft/pocket_computer_advanced.png b/src/web/export/items/computercraft/pocket_computer_advanced.png
new file mode 100644
index 000000000..e3865e062
Binary files /dev/null and b/src/web/export/items/computercraft/pocket_computer_advanced.png differ
diff --git a/src/web/export/items/computercraft/pocket_computer_normal.png b/src/web/export/items/computercraft/pocket_computer_normal.png
new file mode 100644
index 000000000..25f6ee700
Binary files /dev/null and b/src/web/export/items/computercraft/pocket_computer_normal.png differ
diff --git a/src/web/export/items/computercraft/printed_book.png b/src/web/export/items/computercraft/printed_book.png
new file mode 100644
index 000000000..ee4b235f7
Binary files /dev/null and b/src/web/export/items/computercraft/printed_book.png differ
diff --git a/src/web/export/items/computercraft/printed_page.png b/src/web/export/items/computercraft/printed_page.png
new file mode 100644
index 000000000..b27f175dd
Binary files /dev/null and b/src/web/export/items/computercraft/printed_page.png differ
diff --git a/src/web/export/items/computercraft/printed_pages.png b/src/web/export/items/computercraft/printed_pages.png
new file mode 100644
index 000000000..182902e96
Binary files /dev/null and b/src/web/export/items/computercraft/printed_pages.png differ
diff --git a/src/web/export/items/computercraft/printer.png b/src/web/export/items/computercraft/printer.png
new file mode 100644
index 000000000..4fe8a80da
Binary files /dev/null and b/src/web/export/items/computercraft/printer.png differ
diff --git a/src/web/export/items/computercraft/speaker.png b/src/web/export/items/computercraft/speaker.png
new file mode 100644
index 000000000..c30e8355b
Binary files /dev/null and b/src/web/export/items/computercraft/speaker.png differ
diff --git a/src/web/export/items/computercraft/treasure_disk.png b/src/web/export/items/computercraft/treasure_disk.png
new file mode 100644
index 000000000..2aa8a62b7
Binary files /dev/null and b/src/web/export/items/computercraft/treasure_disk.png differ
diff --git a/src/web/export/items/computercraft/turtle_advanced.png b/src/web/export/items/computercraft/turtle_advanced.png
new file mode 100644
index 000000000..6313e8462
Binary files /dev/null and b/src/web/export/items/computercraft/turtle_advanced.png differ
diff --git a/src/web/export/items/computercraft/turtle_normal.png b/src/web/export/items/computercraft/turtle_normal.png
new file mode 100644
index 000000000..7ab1e0786
Binary files /dev/null and b/src/web/export/items/computercraft/turtle_normal.png differ
diff --git a/src/web/export/items/computercraft/wired_modem.png b/src/web/export/items/computercraft/wired_modem.png
new file mode 100644
index 000000000..841d3dc73
Binary files /dev/null and b/src/web/export/items/computercraft/wired_modem.png differ
diff --git a/src/web/export/items/computercraft/wired_modem_full.png b/src/web/export/items/computercraft/wired_modem_full.png
new file mode 100644
index 000000000..8d5a0ea5f
Binary files /dev/null and b/src/web/export/items/computercraft/wired_modem_full.png differ
diff --git a/src/web/export/items/computercraft/wireless_modem_advanced.png b/src/web/export/items/computercraft/wireless_modem_advanced.png
new file mode 100644
index 000000000..f9853d978
Binary files /dev/null and b/src/web/export/items/computercraft/wireless_modem_advanced.png differ
diff --git a/src/web/export/items/computercraft/wireless_modem_normal.png b/src/web/export/items/computercraft/wireless_modem_normal.png
new file mode 100644
index 000000000..287a1738f
Binary files /dev/null and b/src/web/export/items/computercraft/wireless_modem_normal.png differ
diff --git a/src/web/export/items/minecraft/black_dye.png b/src/web/export/items/minecraft/black_dye.png
new file mode 100644
index 000000000..4b5e52560
Binary files /dev/null and b/src/web/export/items/minecraft/black_dye.png differ
diff --git a/src/web/export/items/minecraft/blue_dye.png b/src/web/export/items/minecraft/blue_dye.png
new file mode 100644
index 000000000..0edf68729
Binary files /dev/null and b/src/web/export/items/minecraft/blue_dye.png differ
diff --git a/src/web/export/items/minecraft/brown_dye.png b/src/web/export/items/minecraft/brown_dye.png
new file mode 100644
index 000000000..7263ee463
Binary files /dev/null and b/src/web/export/items/minecraft/brown_dye.png differ
diff --git a/src/web/export/items/minecraft/chest.png b/src/web/export/items/minecraft/chest.png
new file mode 100644
index 000000000..19f6cab55
Binary files /dev/null and b/src/web/export/items/minecraft/chest.png differ
diff --git a/src/web/export/items/minecraft/command_block.png b/src/web/export/items/minecraft/command_block.png
new file mode 100644
index 000000000..cef1cac2e
Binary files /dev/null and b/src/web/export/items/minecraft/command_block.png differ
diff --git a/src/web/export/items/minecraft/cyan_dye.png b/src/web/export/items/minecraft/cyan_dye.png
new file mode 100644
index 000000000..03d946dbb
Binary files /dev/null and b/src/web/export/items/minecraft/cyan_dye.png differ
diff --git a/src/web/export/items/minecraft/ender_eye.png b/src/web/export/items/minecraft/ender_eye.png
new file mode 100644
index 000000000..caae6f4d6
Binary files /dev/null and b/src/web/export/items/minecraft/ender_eye.png differ
diff --git a/src/web/export/items/minecraft/ender_pearl.png b/src/web/export/items/minecraft/ender_pearl.png
new file mode 100644
index 000000000..539a50c68
Binary files /dev/null and b/src/web/export/items/minecraft/ender_pearl.png differ
diff --git a/src/web/export/items/minecraft/glass_pane.png b/src/web/export/items/minecraft/glass_pane.png
new file mode 100644
index 000000000..64924e7fa
Binary files /dev/null and b/src/web/export/items/minecraft/glass_pane.png differ
diff --git a/src/web/export/items/minecraft/gold_block.png b/src/web/export/items/minecraft/gold_block.png
new file mode 100644
index 000000000..4331c0b18
Binary files /dev/null and b/src/web/export/items/minecraft/gold_block.png differ
diff --git a/src/web/export/items/minecraft/gold_ingot.png b/src/web/export/items/minecraft/gold_ingot.png
new file mode 100644
index 000000000..ab4f787d6
Binary files /dev/null and b/src/web/export/items/minecraft/gold_ingot.png differ
diff --git a/src/web/export/items/minecraft/golden_apple.png b/src/web/export/items/minecraft/golden_apple.png
new file mode 100644
index 000000000..88f462936
Binary files /dev/null and b/src/web/export/items/minecraft/golden_apple.png differ
diff --git a/src/web/export/items/minecraft/gray_dye.png b/src/web/export/items/minecraft/gray_dye.png
new file mode 100644
index 000000000..6f5c3bda9
Binary files /dev/null and b/src/web/export/items/minecraft/gray_dye.png differ
diff --git a/src/web/export/items/minecraft/green_dye.png b/src/web/export/items/minecraft/green_dye.png
new file mode 100644
index 000000000..46c6bb436
Binary files /dev/null and b/src/web/export/items/minecraft/green_dye.png differ
diff --git a/src/web/export/items/minecraft/iron_ingot.png b/src/web/export/items/minecraft/iron_ingot.png
new file mode 100644
index 000000000..a9e1e21ed
Binary files /dev/null and b/src/web/export/items/minecraft/iron_ingot.png differ
diff --git a/src/web/export/items/minecraft/leather.png b/src/web/export/items/minecraft/leather.png
new file mode 100644
index 000000000..a7655ebb2
Binary files /dev/null and b/src/web/export/items/minecraft/leather.png differ
diff --git a/src/web/export/items/minecraft/light_blue_dye.png b/src/web/export/items/minecraft/light_blue_dye.png
new file mode 100644
index 000000000..f41f3eb3e
Binary files /dev/null and b/src/web/export/items/minecraft/light_blue_dye.png differ
diff --git a/src/web/export/items/minecraft/light_gray_dye.png b/src/web/export/items/minecraft/light_gray_dye.png
new file mode 100644
index 000000000..a62673fea
Binary files /dev/null and b/src/web/export/items/minecraft/light_gray_dye.png differ
diff --git a/src/web/export/items/minecraft/lime_dye.png b/src/web/export/items/minecraft/lime_dye.png
new file mode 100644
index 000000000..c80489830
Binary files /dev/null and b/src/web/export/items/minecraft/lime_dye.png differ
diff --git a/src/web/export/items/minecraft/magenta_dye.png b/src/web/export/items/minecraft/magenta_dye.png
new file mode 100644
index 000000000..628b15ab8
Binary files /dev/null and b/src/web/export/items/minecraft/magenta_dye.png differ
diff --git a/src/web/export/items/minecraft/note_block.png b/src/web/export/items/minecraft/note_block.png
new file mode 100644
index 000000000..e41a8fc30
Binary files /dev/null and b/src/web/export/items/minecraft/note_block.png differ
diff --git a/src/web/export/items/minecraft/orange_dye.png b/src/web/export/items/minecraft/orange_dye.png
new file mode 100644
index 000000000..ef0d8100f
Binary files /dev/null and b/src/web/export/items/minecraft/orange_dye.png differ
diff --git a/src/web/export/items/minecraft/pink_dye.png b/src/web/export/items/minecraft/pink_dye.png
new file mode 100644
index 000000000..992f90517
Binary files /dev/null and b/src/web/export/items/minecraft/pink_dye.png differ
diff --git a/src/web/export/items/minecraft/purple_dye.png b/src/web/export/items/minecraft/purple_dye.png
new file mode 100644
index 000000000..318d73f5e
Binary files /dev/null and b/src/web/export/items/minecraft/purple_dye.png differ
diff --git a/src/web/export/items/minecraft/red_dye.png b/src/web/export/items/minecraft/red_dye.png
new file mode 100644
index 000000000..2b5f72bec
Binary files /dev/null and b/src/web/export/items/minecraft/red_dye.png differ
diff --git a/src/web/export/items/minecraft/redstone.png b/src/web/export/items/minecraft/redstone.png
new file mode 100644
index 000000000..0beaa512a
Binary files /dev/null and b/src/web/export/items/minecraft/redstone.png differ
diff --git a/src/web/export/items/minecraft/stone.png b/src/web/export/items/minecraft/stone.png
new file mode 100644
index 000000000..f5f74d1d1
Binary files /dev/null and b/src/web/export/items/minecraft/stone.png differ
diff --git a/src/web/export/items/minecraft/string.png b/src/web/export/items/minecraft/string.png
new file mode 100644
index 000000000..6b82875cd
Binary files /dev/null and b/src/web/export/items/minecraft/string.png differ
diff --git a/src/web/export/items/minecraft/white_dye.png b/src/web/export/items/minecraft/white_dye.png
new file mode 100644
index 000000000..314ceaba9
Binary files /dev/null and b/src/web/export/items/minecraft/white_dye.png differ
diff --git a/src/web/export/items/minecraft/yellow_dye.png b/src/web/export/items/minecraft/yellow_dye.png
new file mode 100644
index 000000000..6e1b056a3
Binary files /dev/null and b/src/web/export/items/minecraft/yellow_dye.png differ
diff --git a/src/web/index.tsx b/src/web/index.tsx
index a9a4a8ceb..858d3658e 100644
--- a/src/web/index.tsx
+++ b/src/web/index.tsx
@@ -9,8 +9,6 @@ import exampleNft from "./mount/example.nft";
import exampleAudioLicense from "./mount/example.dfpwm.LICENSE";
import exampleAudioUrl from "./mount/example.dfpwm";
-import "./prism.js";
-
const defaultFiles: { [filename: string]: string } = {
".settings": settingsFile,
"startup.lua": startupFile,
diff --git a/src/web/prism.js b/src/web/prism.js
deleted file mode 100644
index c0a0be524..000000000
--- a/src/web/prism.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/* PrismJS 1.28.0
-https://prismjs.com/download.html#themes=prism&languages=ini+toml */
-var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""+i.tag+">"},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
-Prism.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},section:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/};
-!function(e){function n(e){return e.replace(/__/g,(function(){return"(?:[\\w-]+|'[^'\n\r]*'|\"(?:\\\\.|[^\\\\\"\r\n])*\")"}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n("(^[\t ]*\\[\\s*(?:\\[\\s*)?)__(?:\\s*\\.\\s*__)*(?=\\s*\\])"),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n("(^[\t ]*|[{,]\\s*)__(?:\\s*\\.\\s*__)*(?=\\s*=)"),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism);
diff --git a/src/web/styles.css b/src/web/styles.css
index a69dbe4a2..d72373384 100644
--- a/src/web/styles.css
+++ b/src/web/styles.css
@@ -12,7 +12,8 @@ table {
width: 100%;
}
-table td, table th {
+table td,
+table th {
border: 1px solid #cccccc;
padding: 2px 4px;
}
@@ -38,7 +39,8 @@ pre.highlight {
position: fixed;
z-index: 200;
top: 0px;
- top: 0px;;
+ top: 0px;
+ ;
}
/* Behold, the most cursed CSS! copy-cat's resizing algorithm is a weird, in
@@ -78,7 +80,9 @@ pre.highlight {
font-size: 15px;
}
-.titlebar-close:hover { background: #cc4c4c; }
+.titlebar-close:hover {
+ background: #cc4c4c;
+}
@media (max-width: 700px) {
.computer-container {
@@ -86,6 +90,79 @@ pre.highlight {
height: calc(179px + 40px);
}
- .titlebar { height: 20px; }
- .titlebar-close { font-size: 7px; }
+ .titlebar {
+ height: 20px;
+ }
+
+ .titlebar-close {
+ font-size: 7px;
+ }
+}
+
+:root {
+ --recipe-bg: #ddd;
+ --recipe-fg: #bbb;
+ --recipe-hover: #aaa;
+
+ --recipe-padding: 4px;
+ --recipe-size: 32px;
+}
+
+
+.recipe-container {
+ display: flex;
+ justify-content: center;
+ margin: 1em 0;
+}
+
+.recipe {
+ display: inline-grid;
+ padding: var(--recipe-padding);
+
+ background: var(--recipe-bg);
+ column-gap: var(--recipe-padding);
+ row-gap: var(--recipe-padding);
+ grid-template-rows: auto auto;
+ grid-template-columns: max-content 1fr max-content;
+}
+
+.recipe-title {
+ grid-column-start: span 3;
+}
+
+.recipe-inputs {
+ display: inline-grid;
+ column-gap: var(--recipe-padding);
+ row-gap: var(--recipe-padding);
+ align-items: center;
+ grid-template-rows: 1fr 1fr 1fr;
+ grid-template-columns: 1fr 1fr 1fr;
+}
+
+.recipe-item {
+ padding: var(--recipe-padding);
+ background-color: var(--recipe-fg);
+}
+
+.recipe-item:hover {
+ background-color: var(--recipe-hover);
+}
+
+.recipe-item > img {
+ display: block;
+ width: var(--recipe-size);
+ height: var(--recipe-size);
+ max-width: 10vw;
+ max-height: 10vw;
+}
+
+.recipe-arrow {
+ width: var(--recipe-size);
+ max-width: 10vw;
+ align-self: center;
+}
+
+.recipe-output {
+ /* Hrm! */
+ align-self: center;
}
diff --git a/src/web/transform.tsx b/src/web/transform.tsx
new file mode 100644
index 000000000..24eb1a5f2
--- /dev/null
+++ b/src/web/transform.tsx
@@ -0,0 +1,53 @@
+/**
+ * Find all HTML files generated by illuaminate and pipe them through a remark.
+ *
+ * This performs compile-time syntax highlighting and expands our custom
+ * components using React SSR.
+ *
+ * Yes, this would be so much nicer with next.js.
+ */
+import * as fs from "fs/promises";
+import globModule from "glob";
+import * as path from "path";
+import { createElement, createElement as h, Fragment } from 'react';
+import { renderToStaticMarkup } from "react-dom/server";
+import rehypeHighlight from "rehype-highlight";
+import rehypeParse from 'rehype-parse';
+import rehypeReact from 'rehype-react';
+import { unified } from 'unified';
+import { promisify } from "util";
+// Our components
+import Recipe from "./components/Recipe.js";
+import { noChildren } from "./components/support.js";
+import { DataExport, WithExport } from "./components/WithExport.js";
+
+const glob = promisify(globModule);
+
+(async () => {
+ const base = "build/docs/lua";
+
+ const processor = unified()
+ .use(rehypeParse, { emitParseErrors: true })
+ .use(rehypeHighlight, { prefix: "" })
+ .use(rehypeReact, {
+ createElement,
+ Fragment,
+ passNode: false,
+ components: {
+ ['mc-recipe']: noChildren(Recipe),
+ ['mcrecipe']: noChildren(Recipe),
+ } as any
+ });
+
+ const dataExport = JSON.parse(await fs.readFile("src/web/export/index.json", "utf-8")) as DataExport;
+
+ for (const file of await glob(base + "/**/*.html")) {
+ const contents = await fs.readFile(file, "utf-8");
+
+ const { result } = await processor.process(contents);
+
+ const outputPath = path.resolve("build/docs/site", path.relative(base, file));
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
+ await fs.writeFile(outputPath, "" + renderToStaticMarkup({result}));
+ }
+})();
diff --git a/tsconfig.json b/tsconfig.json
index a1a8a0ed1..2e161c2c3 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -22,6 +22,9 @@
"noFallthroughCasesInSwitch": true,
"importsNotUsedAsValues": "error",
"forceConsistentCasingInFileNames": true,
+
+ // Needed for some of our internal stuff.
+ "allowSyntheticDefaultImports": true,
},
"include": [
"src/web",