diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..50ed627 --- /dev/null +++ b/TODO.md @@ -0,0 +1,2 @@ +- [ ] Fac command: POST to https://elijah-dev.tk/fa.php with the fa parameter being some code +- [ ] Chat subdomain using WebRTC diff --git a/content/js/config/index.js b/content/js/config/index.js index fa13446..0d578e3 100644 --- a/content/js/config/index.js +++ b/content/js/config/index.js @@ -11,7 +11,7 @@ const boot_message = { sleep_time: 0, }, }; -const do_sleep = true; +const do_sleep = false; const locations = { 0: { url: "/git", diff --git a/content/js/helpers/index.js b/content/js/helpers/index.js index fd1fc27..6a930c4 100644 --- a/content/js/helpers/index.js +++ b/content/js/helpers/index.js @@ -47,3 +47,52 @@ function hash(string) { return a & a; }, 0); } + +function to_filename(filename) { + return filename.replaceAll(" ", "_"); +} + +function to_storage(filename) { + return `file.${to_filename(filename)}`; +} + +function file_exists(filename) { + return to_storage(filename) in window.localStorage; +} + +function save_file(filename, content) { + try { + window.localStorage.setItem(to_storage(filename), btoa(content)); + } catch (e) { + alert(`Failed to save ${to_filename(filename)}: ${e}`); + } +} + +function get_file(filename) { + let file = window.localStorage.getItem(to_storage(filename)); + return file ? atob(file) : ""; +} + +function remove_file(filename) { + window.localStorage.removeItem(to_storage(filename)); +} + +function list_files() { + let files = []; + + Object.keys(localStorage).forEach((key) => { + if (key.startsWith("file.")) files.push(key.slice(5)); + }); + + return files; +} + +function disable(element) { + element.setAttribute("disabled", "disabled"); + element.setAttribute("readonly", "true"); +} + +function enable(element) { + element.removeAttribute("disabled"); + element.removeAttribute("readonly"); +} diff --git a/content/js/shell/commands.js b/content/js/shell/commands.js index 2ec56e0..c6ce1cb 100644 --- a/content/js/shell/commands.js +++ b/content/js/shell/commands.js @@ -51,13 +51,13 @@ var commands = { }, }, - ls: { + list: { func: list, root_only: false, help: { desc: "A command to list available pages", short_desc: "List pages", - examples: ["ls"], + examples: ["list"], }, }, @@ -100,6 +100,7 @@ var commands = { examples: ["echo hello world"], }, }, + webfetch: { func: webfetch, root_only: false, @@ -109,4 +110,64 @@ var commands = { examples: ["webfetch"], }, }, + + wed: { + func: wed, + root_only: false, + help: { + desc: "Standard web editor", + short_desc: "Standart web editor", + examples: ["wed file"], + }, + }, + + rm: { + func: rm, + root_only: false, + help: { + desc: "Remove a file", + short_desc: "Remove a file", + examples: ["rm file", "rm file1 file"], + }, + }, + + ls: { + func: ls, + root_only: false, + help: { + desc: "List files", + short_desc: "List files", + examples: ["ls", "ls file"], + }, + }, + + mv: { + func: mv, + root_only: false, + help: { + desc: "Move files", + short_desc: "Move files", + examples: ["mv file file1"], + }, + }, + + cat: { + func: cat, + root_only: false, + help: { + desc: "Concat files", + short_desc: "Concat files", + examples: ["cat file", "cat file file1"], + }, + }, + + upload: { + func: upload, + root_only: false, + help: { + desc: "Upload a file", + short_desc: "File upload", + examples: ["upload"], + }, + }, }; diff --git a/content/js/shell/func.js b/content/js/shell/func.js index 2204eda..6aa8945 100644 --- a/content/js/shell/func.js +++ b/content/js/shell/func.js @@ -32,7 +32,7 @@ function help(cmd) { for (const example in cmd_help["examples"]) { help_page += `$ ${cmd_help["examples"][example]}
`; } - } else { + } else for (const h in commands) { let cmd_help = commands[h]["help"]; @@ -42,7 +42,6 @@ function help(cmd) { help_page += `EXAMPLE: ${cmd_help["examples"][0]}
`; help_page += `
`; } - } return help_page; } @@ -52,22 +51,17 @@ function show(dest) { let iframe = document.createElement("iframe"); iframe.setAttribute("class", "iframe"); - if (!dst) { - return help(["show"]); - } else { + if (!dst) return help(["show"]); + else for (const l in locations) { if (locations[l]["aliases"].includes(dst)) { iframe.setAttribute("src", locations[l]["url"]); break; } } - } - if (iframe.src) { - return iframe.outerHTML; - } else { - return `Page '${dst}' not found`; - } + if (iframe.src) return iframe.outerHTML; + else return `Page '${dst}' not found`; } function cd(dest) { @@ -173,16 +167,194 @@ function echo(argv) { } function webfetch() { - let head_str = `${whoami()}@${site_name}`; + let head_str = `${window.localStorage.username}@${site_name}`; - return `\`8.\`888b ,8' ${head_str} + return escape_HTML(`\`8.\`888b ,8' ${head_str} \`8.\`888b ,8' ${"-".repeat(head_str.length)} \`8.\`888b ,8' OS: WebOS \`8.\`888b .b ,8' Kernel: Wkernel ${kernel_version} \`8.\`888b 88b ,8' Shell: Wsh \`8.\`888b .\`888b,8' Terminal: HTML - \`8.\`888b8.\`8888' CPU: ${site_name[0].toUpperCase()}${site_name.slice(1)} web cpu (1) @ 1GHz + \`8.\`888b8.\`8888' CPU: ${site_name[0].toUpperCase()}${site_name.slice( + 1 + )} web cpu (1) @ 1GHz \`8.\`888\`8.\`88' Memory: 2B / 8B \`8.\`8' \`8,\`' Init: WebRC - \`8.\` \`8'`; + \`8.\` \`8'`); +} + +function wed(argv) { + if (!argv[0]) return "Wed: Error: No file specified"; + + let shell_prompt = document.getElementById("prompt"); + + disable(shell_prompt); + + for (let elem of document.getElementsByClassName("editor")) elem.remove(); + + let editor = document.createElement("div"); + let editor_box = document.createElement("textarea"); + let editor_name = document.createElement("h1"); + + let editor_buttons = document.createElement("div"); + let editor_save = document.createElement("button"); + let editor_quit = document.createElement("button"); + + editor_box.value = get_file(argv[0]); + editor_box.spellcheck = false; + editor_box.placeholder = "Enter content here..."; + + editor_save.innerText = "Save"; + editor_quit.innerText = "Quit"; + + editor_name.innerText = argv[0]; + + editor_buttons.appendChild(editor_save); + editor_buttons.appendChild(editor_quit); + + editor_quit.onclick = () => { + editor.remove(); + shell_prompt.focus(); + + enable(shell_prompt); + shell_prompt.focus(); + }; + + editor_save.onclick = () => { + save_file(argv[0], editor_box.value); + editor_quit.onclick(); + }; + + editor.appendChild(editor_name); + editor.appendChild(editor_box); + editor.appendChild(editor_buttons); + + editor.classList.add("editor"); + editor_buttons.classList.add("editor-buttons"); + + document.body.appendChild(editor); + + editor_box.focus(); + + return `Editing: ${escape_HTML(argv[0])}`; +} + +function rm(argv) { + if (!argv[0]) return "Rm: no files specified"; + + for (let file of argv) { + if (!file_exists(file)) + return `Rm: ${escape_HTML(file)}: Nothing appropriate`; + remove_file(file); + } + + return "Removed file(s)"; +} + +function ls(argv) { + if (argv[0]) { + if (file_exists(argv[0])) return escape_HTML(argv[0]); + return null; + } + + let out = ""; + + for (let file of list_files()) out += `${escape_HTML(file)}\n`; + return out ? out : null; +} + +function mv(argv) { + if (!argv[0] || !file_exists(argv[0])) + return "No valid input file specified"; + if (!argv[1]) return "No output file specified"; + if (argv[0] === argv[1]) return "Input must not be the same as output"; + + let old_file = get_file(argv[0]); + + remove_file(argv[0]); + save_file(argv[1], old_file); + + return `${escape_HTML(argv[0])} -> ${escape_HTML(argv[1])}`; +} + +function cat(argv) { + if (!argv[0]) return "No input file specified"; + + let out = ""; + + for (let file of argv) { + if (file_exists(file)) out += `${escape_HTML(get_file(file))}\n`; + else out += `Cat: ${escape_HTML(file)}: No such file\n`; + } + + return out; +} + +function upload() { + let input_id = `upload_${document.getElementsByTagName("input").length}`; + + let upload_container = document.createElement("div"); + upload_container.classList.add("upload"); + + let upload_input = document.createElement("input"); + upload_input.setAttribute("type", "file"); + upload_input.setAttribute("id", input_id); + + let commit_upload = document.createElement("button"); + commit_upload.innerText = "Commit"; + commit_upload.setAttribute("id", `commit_upload_${input_id}`); + commit_upload.setAttribute( + "onclick", + ` +function uploader_${input_id}() { + if (typeof FileReader !== 'function') { + alert("The FileReader API isn't supported on this browser"); + return; + } + + let upload = document.getElementById("${input_id}"); + let upload_button = document.getElementById("${commit_upload.id}"); + + let files = upload.files; + + if (!files[0]) { + alert("Pick a file to upload"); + return; + } + + let file = files[0]; + let filename = to_filename(file.name); + + if (file_exists(filename)) { + alert(\`File \${filename} alredy exists, please rm it\`) + return; + } + + let reader = new FileReader(); + reader.readAsText(file, "UTF-8"); + + reader.onload = (evt) => { + save_file(filename, evt.target.result); + + upload_button.innerText = "Uploaded"; + + disable(upload); + disable(upload_button) + }; + + reader.onerror = (err) => { + alert(\`error reading the file: \${err}\`); + return; + }; +} + +uploader_${input_id}(); +document.getElementById("prompt").focus(); + ` + ); + + upload_container.appendChild(upload_input); + upload_container.appendChild(commit_upload); + + return upload_container.outerHTML; } diff --git a/content/js/shell/index.js b/content/js/shell/index.js index 1bc8c44..f71ac30 100644 --- a/content/js/shell/index.js +++ b/content/js/shell/index.js @@ -36,7 +36,10 @@ function main() { command )}' can only be ran as root. see help su`; } else { - cmd_output.innerHTML = commands[command]["func"](argv); + let out = commands[command]["func"](argv); + + if (out === null) is_comment = true; + else cmd_output.innerHTML = out; } } else { if (command[0] != "#") @@ -58,8 +61,7 @@ function main() { let cmd = document.createElement("input"); cmd.setAttribute("class", "prompt"); cmd.setAttribute("value", cmd_prompt.value); - cmd.setAttribute("readonly", ""); - cmd.setAttribute("disabled", "disabled"); + disable(cmd); let output = document.createElement("div"); output.setAttribute("class", "output"); diff --git a/content/js/ttytheme/menu.js b/content/js/ttytheme/menu.js index 350256a..1afdbf6 100644 --- a/content/js/ttytheme/menu.js +++ b/content/js/ttytheme/menu.js @@ -4,7 +4,6 @@ import { gp, rgb_to_hex } from "../../js/utils/index.js"; import { tty_clrs } from "./clrs.js"; const CLRS = ["r", "g", "b"]; -const BLACKLIST_LC = ["username", "password"]; function new_colourpicker(id, clr_map) { let div = document.createElement("div"); @@ -43,7 +42,7 @@ function load_from_localtorage() { let keys = Object.keys(tty_clrs); Object.keys(localStorage).forEach((key) => { - if (!BLACKLIST_LC.includes(key) && keys.includes(key)) + if (keys.includes(key)) tty_clrs[key].rgb = JSON.parse(localStorage.getItem(key))[ "rgb" ].map(Number); @@ -111,7 +110,7 @@ export function export_element_as_file(query = "#theme-output") { export function clear_states() { Object.keys(localStorage).forEach((key) => { - if (!BLACKLIST_LC.includes(key)) localStorage.removeItem(key); + if (Object.keys(tty_clrs).includes(key)) localStorage.removeItem(key); }); } diff --git a/content/styles/editor/main.scss b/content/styles/editor/main.scss new file mode 100644 index 0000000..8ac4a97 --- /dev/null +++ b/content/styles/editor/main.scss @@ -0,0 +1,82 @@ +@import "../config/_main.scss"; + +$bg1: lighten($bg_colour, 10%); +$bg2: lighten($bg1, 10%); +$bg3: lighten($bg2, 10%); + +.editor { + position: fixed; + + display: flex; + justify-content: center; + + padding: 5em; + + z-index: 999999; + + width: 100%; + height: 100%; + + top: 0; + left: 0; + right: 0; + bottom: 0; + + padding: 2em; + + background-color: $bg1; +} + +.editor textarea { + width: 50%; + height: 100%; + padding: 1em; + + word-wrap: break-word; + + resize: none; + + outline: none; + border: none; + + background-color: $bg2; + + margin-right: 4em; + margin-left: 4em; + + font-size: 1.3em; +} + +.editor .editor-buttons { + width: 8%; +} + +.editor .editor-buttons button { + display: block; + + padding: 1em; + margin-bottom: 0.5em; + + width: 100%; + + border: none; + font-weight: bold; + + background-color: $bg2; +} + +.editor .editor-buttons button:hover, +.editor .editor-buttons button:focus { + background-color: $bg3; + cursor: pointer; +} + +.editor h1 { + margin-bottom: 1em; + text-align: center; + + width: 1ch; + + word-wrap: break-word; + word-break: break-all; +} diff --git a/content/styles/generic/main.scss b/content/styles/generic/main.scss index a15028e..8097f32 100644 --- a/content/styles/generic/main.scss +++ b/content/styles/generic/main.scss @@ -34,3 +34,15 @@ body { min-width: 300px; max-width: 1000px; } + +.upload * { + font-weight: bold; +} + +.upload button { + padding: 0.3em; +} + +.upload button[disabled] { + color: darkgray; +} diff --git a/index.html b/index.html index 49f8952..f0ca8f6 100644 --- a/index.html +++ b/index.html @@ -23,6 +23,7 @@ + diff --git a/package-lock.json b/package-lock.json index 8497a29..d00c8b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,33 +16,33 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -231,9 +231,9 @@ } }, "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -773,9 +773,9 @@ } }, "node_modules/caniuse-db": { - "version": "1.0.30001352", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001352.tgz", - "integrity": "sha512-6HILku0WCetV9cWNByRoAujXK6NeSB0a1VykGwAJY1k4lY0FUCT9G1lUdVIloaxarzreTHvDCjdZF7LIxkr19w==", + "version": "1.0.30001369", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001369.tgz", + "integrity": "sha512-H290mb7++7Bv5nF2yZ1rOjM69kbsSZ3K0AL/YeqvA66gUg8V3ie3srbSMu2TzzbT0p7oKnyvULht/RpHpmeGoA==", "dev": true }, "node_modules/caseless": { @@ -1256,9 +1256,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.152", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.152.tgz", - "integrity": "sha512-jk4Ju5SGZAQQJ1iI4Rgru7dDlvkQPLpNPWH9gIZmwCD4YteA5Bbk1xPcPDUf5jUYs3e1e80RXdi8XgKQZaigeg==", + "version": "1.4.199", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", + "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==", "dev": true }, "node_modules/emoji-regex": { @@ -1338,9 +1338,9 @@ } }, "node_modules/eslint": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz", - "integrity": "sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.3.0", @@ -1792,9 +1792,9 @@ } }, "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, "node_modules/for-in": { @@ -2030,9 +2030,9 @@ } }, "node_modules/globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2045,13 +2045,13 @@ } }, "node_modules/globule": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz", - "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", "dev": true, "dependencies": { "glob": "~7.1.1", - "lodash": "~4.17.10", + "lodash": "^4.17.21", "minimatch": "~3.0.2" }, "engines": { @@ -2274,9 +2274,9 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", - "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, "node_modules/http-proxy-agent": { @@ -2409,9 +2409,9 @@ "dev": true }, "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "node_modules/is-accessor-descriptor": { @@ -3062,9 +3062,9 @@ } }, "node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, "dependencies": { "yallist": "^4.0.0" @@ -3888,15 +3888,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -3965,9 +3956,9 @@ } }, "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "node_modules/punycode": { @@ -4264,12 +4255,12 @@ } }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4378,6 +4369,15 @@ "source-map": "^0.7.1" } }, + "node_modules/scss-tokenizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -4723,22 +4723,13 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", "dev": true, "dependencies": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { @@ -4761,12 +4752,12 @@ } }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, "node_modules/source-map-resolve": { @@ -5581,7 +5572,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "node_modules/y18n": { @@ -5638,27 +5629,27 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" } }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true }, "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -5816,9 +5807,9 @@ } }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, "acorn-jsx": { @@ -6246,9 +6237,9 @@ } }, "caniuse-db": { - "version": "1.0.30001352", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001352.tgz", - "integrity": "sha512-6HILku0WCetV9cWNByRoAujXK6NeSB0a1VykGwAJY1k4lY0FUCT9G1lUdVIloaxarzreTHvDCjdZF7LIxkr19w==", + "version": "1.0.30001369", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001369.tgz", + "integrity": "sha512-H290mb7++7Bv5nF2yZ1rOjM69kbsSZ3K0AL/YeqvA66gUg8V3ie3srbSMu2TzzbT0p7oKnyvULht/RpHpmeGoA==", "dev": true }, "caseless": { @@ -6639,9 +6630,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.152", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.152.tgz", - "integrity": "sha512-jk4Ju5SGZAQQJ1iI4Rgru7dDlvkQPLpNPWH9gIZmwCD4YteA5Bbk1xPcPDUf5jUYs3e1e80RXdi8XgKQZaigeg==", + "version": "1.4.199", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", + "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==", "dev": true }, "emoji-regex": { @@ -6706,9 +6697,9 @@ "dev": true }, "eslint": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz", - "integrity": "sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", "dev": true, "requires": { "@eslint/eslintrc": "^1.3.0", @@ -7077,9 +7068,9 @@ } }, "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, "for-in": { @@ -7264,22 +7255,22 @@ } }, "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "globule": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz", - "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", "dev": true, "requires": { "glob": "~7.1.1", - "lodash": "~4.17.10", + "lodash": "^4.17.21", "minimatch": "~3.0.2" }, "dependencies": { @@ -7455,9 +7446,9 @@ } }, "http-parser-js": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", - "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, "http-proxy-agent": { @@ -7562,9 +7553,9 @@ "dev": true }, "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "is-accessor-descriptor": { @@ -8086,9 +8077,9 @@ } }, "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -8721,12 +8712,6 @@ "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", "dev": true }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -8788,9 +8773,9 @@ "dev": true }, "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "punycode": { @@ -9028,12 +9013,12 @@ "dev": true }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -9112,6 +9097,14 @@ "requires": { "js-base64": "^2.4.3", "source-map": "^0.7.1" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } } }, "semver": { @@ -9373,12 +9366,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true } } }, @@ -9414,12 +9401,12 @@ } }, "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", "dev": true, "requires": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" } }, @@ -9435,9 +9422,9 @@ } }, "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true }, "source-map-resolve": { @@ -10085,7 +10072,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "y18n": {