Add more commands, an editor and file management, also a TODO

Signed-off-by: Ari Archer <ari.web.xyz@gmail.com>
This commit is contained in:
Ari Archer 2022-07-23 16:02:50 +03:00
parent 849be608e0
commit ba70392fdc
11 changed files with 536 additions and 169 deletions

2
TODO.md Normal file
View file

@ -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

View file

@ -11,7 +11,7 @@ const boot_message = {
sleep_time: 0,
},
};
const do_sleep = true;
const do_sleep = false;
const locations = {
0: {
url: "/git",

View file

@ -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");
}

View file

@ -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"],
},
},
};

View file

@ -32,7 +32,7 @@ function help(cmd) {
for (const example in cmd_help["examples"]) {
help_page += `<b>$</b> ${cmd_help["examples"][example]}<br/>`;
}
} else {
} else
for (const h in commands) {
let cmd_help = commands[h]["help"];
@ -42,7 +42,6 @@ function help(cmd) {
help_page += `<b>EXAMPLE</b>: ${cmd_help["examples"][0]}<br/>`;
help_page += `<br/>`;
}
}
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;
}

View file

@ -36,7 +36,10 @@ function main() {
command
)}' can <i>only</i> be ran as <b>root</b>. see <b>help su</b>`;
} 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");

View file

@ -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);
});
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -23,6 +23,7 @@
<link rel="stylesheet" href="/content/styles/generic/main.min.css" />
<link rel="stylesheet" href="/content/styles/boot/main.min.css" />
<link rel="stylesheet" href="/content/styles/shell/main.min.css" />
<link rel="stylesheet" href="/content/styles/editor/main.min.css" />
<link rel="manifest" href="/manifest.json" />

277
package-lock.json generated
View file

@ -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": {