From 5a4cbb455af181c21a38db6356fb35aaa2080a30 Mon Sep 17 00:00:00 2001 From: damp11113 Date: Sun, 28 Jul 2024 23:50:52 +0700 Subject: [PATCH] update 1.2 add new block: CCSystem and CCTextutils Fixed some bug --- TestProject/serialize example 2.ccp | 1 + TestProject/serialize example 3.ccp | 1 + advremote.lua | 62 +- blocks/CCSettings/generator.js | 2 +- blocks/CCSystem/block_design.json | 249 +++ blocks/CCSystem/generator.js | 130 ++ blocks/CCSystem/index.json | 22 + blocks/CCSystem/toolbox.xml | 56 + blocks/CCTextutils/block_design.json | 237 +++ blocks/CCTextutils/generator.js | 107 ++ blocks/CCTextutils/index.json | 22 + blocks/CCTextutils/toolbox.xml | 37 + ccIDE Defines.xlsx | Bin 52500 -> 52518 bytes index.js | 44 +- package-lock.json | 2270 +++++++++++++++++++++++++- package.json | 9 +- remote.lua | 58 +- src/ccRemote.js | 57 +- src/index.html | 14 +- src/{virtualcode.js => index.js} | 127 +- src/module_block_design.json | 41 +- src/module_generator.js | 25 +- src/splash.html | 9 + src/styles.css | 10 + src/toolbox.xml | 28 +- webpack.config.js | 30 + 26 files changed, 3470 insertions(+), 178 deletions(-) create mode 100644 TestProject/serialize example 2.ccp create mode 100644 TestProject/serialize example 3.ccp create mode 100644 blocks/CCSystem/block_design.json create mode 100644 blocks/CCSystem/generator.js create mode 100644 blocks/CCSystem/index.json create mode 100644 blocks/CCSystem/toolbox.xml create mode 100644 blocks/CCTextutils/block_design.json create mode 100644 blocks/CCTextutils/generator.js create mode 100644 blocks/CCTextutils/index.json create mode 100644 blocks/CCTextutils/toolbox.xml rename src/{virtualcode.js => index.js} (72%) create mode 100644 webpack.config.js diff --git a/TestProject/serialize example 2.ccp b/TestProject/serialize example 2.ccp new file mode 100644 index 0000000..3755407 --- /dev/null +++ b/TestProject/serialize example 2.ccp @@ -0,0 +1 @@ +{"usedlibrary":["CCTextutils"],"content":{"blocks":{"languageVersion":0,"blocks":[{"type":"ide_start","id":"%k|1C%^t;XMrXr0{%gB|","x":330,"y":270,"inputs":{"DO":{"block":{"type":"variables_set","id":"NSMcwqhVU(1::#UWOflD","fields":{"VAR":{"id":"6z)4i^N`L0rGnHo}k6w~"}},"inputs":{"VALUE":{"block":{"type":"lists_create_with","id":"Rt}My_DC8m7QIYsmta-T","extraState":{"itemCount":3},"inputs":{"ADD0":{"block":{"type":"math_number","id":"7SKw2+Md2.{tznxyfe{T","fields":{"NUM":1}}},"ADD1":{"block":{"type":"math_number","id":"7UV1y^XFKM!,-6RK);`{","fields":{"NUM":2}}},"ADD2":{"block":{"type":"math_number","id":"MrfY2v6g)h3lj7e0jgqE","fields":{"NUM":3}}}}}}},"next":{"block":{"type":"text_print","id":"3+Z|78w,QkD{/[:jPv:e","inputs":{"TEXT":{"shadow":{"type":"text","id":"+OF[F($(eq]G$:h;Kt*w","fields":{"TEXT":"abc"}},"block":{"type":"textutils_serialize","id":"d{!#Az)#[M2rmGXXW,J,","fields":{"COMPACT":false,"ALLOWREPETI":true},"inputs":{"OBJECT":{"block":{"type":"lists_create_with","id":"W~HzfCNp_n@LA6c6fwp~","extraState":{"itemCount":2},"inputs":{"ADD0":{"block":{"type":"variables_get","id":"bVs`6KM30qehpXe901*:","fields":{"VAR":{"id":"6z)4i^N`L0rGnHo}k6w~"}}}},"ADD1":{"block":{"type":"variables_get","id":"@l4-(?lC]/$VetN_E!|^","fields":{"VAR":{"id":"6z)4i^N`L0rGnHo}k6w~"}}}}}}}}}}},"next":{"block":{"type":"text_print","id":"I^mHjxNqwwaU!Or,/m5@","inputs":{"TEXT":{"shadow":{"type":"text","id":"/!sl#s%!LHS,s5h05pQ;","fields":{"TEXT":"abc"}},"block":{"type":"textutils_serialize","id":"t7R?`7;1c%3!.jd.dW9F","fields":{"COMPACT":true,"ALLOWREPETI":false},"inputs":{"OBJECT":{"block":{"type":"variables_get","id":"!yZhT^MMVuSQ:[q|puo`","fields":{"VAR":{"id":"6z)4i^N`L0rGnHo}k6w~"}}}}}}}}}}}}}}}}]},"variables":[{"name":"test","id":"6z)4i^N`L0rGnHo}k6w~"}]}} \ No newline at end of file diff --git a/TestProject/serialize example 3.ccp b/TestProject/serialize example 3.ccp new file mode 100644 index 0000000..98ad322 --- /dev/null +++ b/TestProject/serialize example 3.ccp @@ -0,0 +1 @@ +{"usedlibrary":["CCSystem","CCTextutils"],"content":{"blocks":{"languageVersion":0,"blocks":[{"type":"ide_start","id":"?udZVah+}|wlY2LCZ-bl","x":110,"y":150,"inputs":{"DO":{"block":{"type":"variables_set","id":"Q1no.e|r^Ds4Z(cOo6ks","fields":{"VAR":{"id":"|]HEFfXY)7GgpQb83nOc"}},"inputs":{"VALUE":{"block":{"type":"lists_create_with","id":"Qzp}4**d+m``G!B7ydBd","extraState":{"itemCount":0}}}},"next":{"block":{"type":"controls_repeat_ext","id":"h[fG-)EnPfn?;Dw,4JS;","inputs":{"TIMES":{"shadow":{"type":"math_number","id":"0,DMR{6Yro.qGGmsNI!m","fields":{"NUM":10}}},"DO":{"block":{"type":"sys_table_append_data","id":"_{Wr/]apCKw;wuLM!~tb","inputs":{"DATA":{"block":{"type":"math_random_int","id":"/dj{qRb:`dKxV-I6fB:c","inputs":{"FROM":{"shadow":{"type":"math_number","id":"6_%M8#LXu7~[op|p6@i+","fields":{"NUM":1}}},"TO":{"shadow":{"type":"math_number","id":"%dJUjQmbir}H?ZXa!Ghv","fields":{"NUM":10}}}}}},"TABLE":{"block":{"type":"variables_get","id":",7[Gq|+k;K=kAnpK0.dR","fields":{"VAR":{"id":"|]HEFfXY)7GgpQb83nOc"}}}}}}}},"next":{"block":{"type":"text_print","id":"bHx3OISYn{5x.-F2(|Y`","inputs":{"TEXT":{"shadow":{"type":"text","id":"jVr603(C3eOIz#G*N}UC","fields":{"TEXT":"abc"}},"block":{"type":"textutils_serialize","id":"}`]U9*1|Ev{J=[`ru9Q;","fields":{"COMPACT":false,"ALLOWREPETI":false},"inputs":{"OBJECT":{"block":{"type":"lists_sort","id":"EZpHsG`jZ.gBI;D?$b~L","fields":{"TYPE":"NUMERIC","DIRECTION":"1"},"inputs":{"LIST":{"block":{"type":"variables_get","id":"$Uf4s5MK,FWh^4jvKmFo","fields":{"VAR":{"id":"|]HEFfXY)7GgpQb83nOc"}}}}}}}}}}}}}}}}}}}]},"variables":[{"name":"mylist","id":"|]HEFfXY)7GgpQb83nOc"}]}} \ No newline at end of file diff --git a/advremote.lua b/advremote.lua index c5b55ad..54d58fa 100644 --- a/advremote.lua +++ b/advremote.lua @@ -2,33 +2,49 @@ local ws = assert(http.websocket("ws://127.0.0.1:5133")) print("connected to server") local id +local isrunning = true -while true do - print("ready") - local message, error = ws.receive() - if message then - print("Received message:", message) - if message == "ping" then - ws.send("pong") - elseif message == "sendcode" then - local file = io.open("main.lua", "w") - print("waiting for code") - local filedata, error = ws.receive() - file:write(filedata) - file:close() - elseif message == "runcode" then - id = multishell.launch({}, "main.lua") - multishell.setTitle(id, "Code") - multishell.setFocus(id) - elseif message == "exit" then +function exitcheck() + while true do + local event = os.pullEventRaw("terminate") + if event == "terminate" then print("Exiting...") + isrunning = false + ws.close() break end - - else - print("WebSocket error:", error) - break end end -ws.close() +function main() + while isrunning do + print("ready") + local message, error = ws.receive() + if message then + print("Received message:", message) + if message == "ping" then + ws.send("pong") + elseif message == "sendcode" then + local file = io.open("main.lua", "w") + print("waiting for code") + local filedata, error = ws.receive() + file:write(filedata) + file:close() + elseif message == "runcode" then + id = multishell.launch({}, "main.lua") + multishell.setTitle(id, "Code") + multishell.setFocus(id) + elseif message == "exit" then + print("Exiting...") + break + end + + else + print("WebSocket error:", error) + break + end + end +end + +parallel.waitForAny(exitcheck, main) +print("Exited") \ No newline at end of file diff --git a/blocks/CCSettings/generator.js b/blocks/CCSettings/generator.js index fdbeb4d..e2cde9c 100644 --- a/blocks/CCSettings/generator.js +++ b/blocks/CCSettings/generator.js @@ -29,7 +29,7 @@ luaGenerator.forBlock['settings_define'] = function(block, generator) { if (def != "") { option.default = def } - if (type != "") { + if (type != "") { option.type = type } var exportedoption = exportWithEquals(option); diff --git a/blocks/CCSystem/block_design.json b/blocks/CCSystem/block_design.json new file mode 100644 index 0000000..2e49a8b --- /dev/null +++ b/blocks/CCSystem/block_design.json @@ -0,0 +1,249 @@ +{ + "sysos_pullevent": { + "message0": "Pull %1 event", + "args0": [ + { + "type": "input_value", + "name": "EVENT", + "check": "String" + } + ], + "output": "Multiple", + "colour": 0, + "tooltip": "Pause execution of the current thread and waits for any events matching filter.", + "helpUrl": "https://tweaked.cc/module/os.html#v:pullEvent" + }, + "sysos_pullrawevent": { + "message0": "Pull raw %1 event", + "args0": [ + { + "type": "input_value", + "name": "EVENT", + "check": "String" + } + ], + "output": "Multiple", + "colour": 0, + "tooltip": "Pause execution of the current thread and waits for events, including the terminate event.", + "helpUrl": "https://tweaked.cc/module/os.html#v:pullEventRaw" + }, + "sysos_version": { + "message0": "Get system version", + "output": "String", + "colour": 0, + "tooltip": "Get the current CraftOS version (for example, CraftOS 1.9)." + }, + "sysos_run": { + "message0": "Run %1\nEnvironment %2\nArgs %3", + "args0": [ + { + "type": "input_value", + "name": "RUN", + "check": "String" + }, + { + "type": "input_value", + "name": "ENV", + "check": "Array" + }, + { + "type": "input_value", + "name": "ARGS", + "check": "Multiple" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 0, + "tooltip": "Run the program at the given path with the specified environment and arguments.", + "helpUrl": "https://tweaked.cc/module/os.html#v:run" + }, + "sysos_queue_event": { + "message0": "Add event %1 to queue with args %2", + "args0": [ + { + "type": "input_value", + "name": "EVENT", + "check": "String" + }, + { + "type": "input_value", + "name": "ARGS", + "check": "Multiple" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 0, + "tooltip": "Adds an event to the event queue. This event can later be pulled with os.pullEvent." + }, + "sysos_start_timer": { + "message0": "Start timer at %1", + "args0": [ + { + "type": "input_value", + "name": "TIME", + "check": "Number" + } + ], + "output": "Number", + "colour": 0, + "tooltip": "Starts a timer that will run for the specified number of seconds. Once the timer fires, a timer event will be added to the queue with the ID returned from this function as the first parameter.", + "helpUrl": "https://tweaked.cc/module/os.html#v:startTimer" + }, + "sysos_cancel_timer": { + "message0": "Stop timer id %1", + "args0": [ + { + "type": "input_value", + "name": "ID", + "check": "Number" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 0, + "tooltip": "Cancels a timer previously started with startTimer. This will stop the timer from firing." + }, + "sysos_set_alarm": { + "message0": "Set alarm to %1", + "args0": [ + { + "type": "input_value", + "name": "TIME", + "check": "Number" + } + ], + "output": "Number", + "colour": 0, + "tooltip": "Sets an alarm that will fire at the specified in-game time." + }, + "sysos_cancel_alarm": { + "message0": "Stop alarm id %1", + "args0": [ + { + "type": "input_value", + "name": "ID", + "check": "Number" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 0, + "tooltip": "Cancels an alarm previously started with setAlarm." + }, + "sysos_shutdown": { + "message0": "Shutdown computer", + "previousStatement": null, + "colour": 0, + "tooltip": "Shuts down the computer immediately." + }, + "sysos_reboot": { + "message0": "Restart computer", + "previousStatement": null, + "colour": 0, + "tooltip": "Reboots the computer immediately." + }, + "sysos_get_computer_id": { + "message0": "Get computer id", + "output": "Number", + "colour": 0, + "tooltip": "Returns the ID of the computer." + }, + "sysos_get_computer_label": { + "message0": "Get computer label", + "output": "String", + "colour": 0, + "tooltip": "Returns the label of the computer, or nil if none is set." + }, + "sysos_set_computer_label": { + "message0": "Set computer label to %1", + "args0": [ + { + "type": "input_value", + "name": "LABEL", + "check": "String" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 0, + "tooltip": "Set the label of this computer." + }, + "sysos_clock": { + "message0": "Get Uptime", + "output": "String", + "colour": 0, + "tooltip": "Returns the number of seconds that the computer has been running." + }, + "sysos_time": { + "message0": "Get time of %1", + "args0": [ + { + "type": "field_dropdown", + "name": "LOCATE", + "options": [ + ["In Game World", "ingame"], + ["UTC", "utc"], + ["Local", "local"] + ] + } + ], + "output": null, + "colour": 0, + "tooltip": "Returns the current time depending on the string passed in. This will always be in the range [0.0, 24.0)." + }, + "sysos_day": { + "message0": "Get day of %1", + "args0": [ + { + "type": "field_dropdown", + "name": "LOCATE", + "options": [ + ["In Game World", "ingame"], + ["UTC", "utc"], + ["Local", "local"] + ] + } + ], + "output": null, + "colour": 0, + "tooltip": "Returns the day depending on the locale specified." + }, + "sysos_epoch": { + "message0": "Get epoch of %1", + "args0": [ + { + "type": "field_dropdown", + "name": "LOCATE", + "options": [ + ["In Game World", "ingame"], + ["UTC", "utc"], + ["Local", "local"] + ] + } + ], + "output": null, + "colour": 0, + "tooltip": "Returns the number of milliseconds since an epoch depending on the locale." + }, + "sysos_date": { + "message0": "Format date with patten %1 from time %2", + "args0": [ + { + "type": "input_value", + "name": "FORMAT", + "check": "String" + }, + { + "type": "input_value", + "name": "TIME", + "check": "Number" + } + ], + "output": null, + "colour": 0, + "tooltip": "Returns a date string (or table) using a specified format string and optional time to format.", + "helpUrl": "https://cplusplus.com/reference/ctime/strftime/" + } +} diff --git a/blocks/CCSystem/generator.js b/blocks/CCSystem/generator.js new file mode 100644 index 0000000..e1e3622 --- /dev/null +++ b/blocks/CCSystem/generator.js @@ -0,0 +1,130 @@ +// this file not for generator only + +const { luaGenerator } = require('blockly/lua'); + +// Check if luaGenerator.forBlock is defined and initialize if necessary +if (!luaGenerator.forBlock) { + luaGenerator.forBlock = {}; +} + +luaGenerator.forBlock['sysos_pullevent'] = function(block, generator) { + var event = generator.valueToCode(block, 'EVENT', generator.ORDER_ATOMIC); + + if (event == "") { + return [`os.pullevent()`, luaGenerator.ORDER_NONE]; + } else { + return [`os.pullevent(${event})`, luaGenerator.ORDER_NONE]; + } +}; + +luaGenerator.forBlock['sysos_pullrawevent'] = function(block, generator) { + var event = generator.valueToCode(block, 'EVENT', generator.ORDER_ATOMIC); + + if (event == "") { + return [`os.pullEventRaw()`, luaGenerator.ORDER_NONE]; + } else { + return [`os.pullEventRaw(${event})`, luaGenerator.ORDER_NONE]; + } +}; + +luaGenerator.forBlock['sysos_version'] = function(block, generator) { + return [`os.version()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['sysos_run'] = function(block, generator) { + var env = generator.valueToCode(block, 'ENV', generator.ORDER_ATOMIC) || "{}"; + var run = generator.valueToCode(block, 'RUN', generator.ORDER_ATOMIC); + var args = generator.valueToCode(block, 'ARGS', generator.ORDER_ATOMIC); + + if (args == "") { + return `os.run(${env}, ${run})\n`; + } else { + return `os.run(${env}, ${run}, ${args})\n`; + } +}; + +luaGenerator.forBlock['sysos_queue_event'] = function(block, generator) { + var event = generator.valueToCode(block, 'EVENT', generator.ORDER_ATOMIC); + var args = generator.valueToCode(block, 'ARGS', generator.ORDER_ATOMIC); + + if (args == "") { + return `os.queueEvent(${event})\n`; + } else { + return `os.queueEvent(${event}, ${args})\n`; + } +}; + +luaGenerator.forBlock['sysos_start_timer'] = function(block, generator) { + var time = generator.valueToCode(block, 'TIME', generator.ORDER_ATOMIC); + + return [`os.queueEvent(${time})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['sysos_cancel_timer'] = function(block, generator) { + var id = generator.valueToCode(block, 'ID', generator.ORDER_ATOMIC); + + return `os.cancelTimer(${id}\n`; +}; + +luaGenerator.forBlock['sysos_set_alarm'] = function(block, generator) { + var time = generator.valueToCode(block, 'TIME', generator.ORDER_ATOMIC); + + return [`os.setAlarm(${time})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['sysos_cancel_alarm'] = function(block, generator) { + var id = generator.valueToCode(block, 'ID', generator.ORDER_ATOMIC); + + return `os.cancelAlarm(${id})\n`; +}; + +luaGenerator.forBlock['sysos_shutdown'] = function(block, generator) { + return `os.shutdown()` +}; + +luaGenerator.forBlock['sysos_reboot'] = function(block, generator) { + return `os.reboot()` +}; + +luaGenerator.forBlock['sysos_get_computer_id'] = function(block, generator) { + return [`os.getComputerID()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['sysos_get_computer_label'] = function(block, generator) { + return [`os.getComputerLabel()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['sysos_set_computer_label'] = function(block, generator) { + var label = generator.valueToCode(block, 'LABEL', generator.ORDER_ATOMIC); + + return `os.setComputerLabel(${label})\n`; +}; + +luaGenerator.forBlock['sysos_clock'] = function(block, generator) { + return [`os.clock()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['sysos_time'] = function(block, generator) { + var locate = block.getFieldValue('LOCATE'); + + return [`os.time("${locate}")`, generator.ORDER_ATOMIC]; +}; + +luaGenerator.forBlock['sysos_day'] = function(block, generator) { + var locate = block.getFieldValue('LOCATE'); + + return [`os.day("${locate}")`, generator.ORDER_ATOMIC]; +}; + +luaGenerator.forBlock['sysos_epoch'] = function(block, generator) { + var locate = block.getFieldValue('LOCATE'); + + return [`os.epoch("${locate}")`, generator.ORDER_ATOMIC]; +}; + +luaGenerator.forBlock['sysos_date'] = function(block, generator) { + var format = generator.valueToCode(block, 'FORMAT', generator.ORDER_ATOMIC); + var time = generator.valueToCode(block, 'TIME', generator.ORDER_ATOMIC); + + return [`os.date(${format}, ${time})`, luaGenerator.ORDER_NONE]; +}; \ No newline at end of file diff --git a/blocks/CCSystem/index.json b/blocks/CCSystem/index.json new file mode 100644 index 0000000..389626c --- /dev/null +++ b/blocks/CCSystem/index.json @@ -0,0 +1,22 @@ +{ + "name": "CC: System (OS)", + "author": "DPSoftware Foundation", + "description": "The os API allows interacting with the current computer.", + "version": "1.0.0", + "category": "System", + "keyword": "System, OS", + "license": "GPL-3.0-or-later", + "peripherals": false, + "library": true, + "require_network": false, + "dependencies": {}, + "design_for_computer": { + "basic": true, + "adv": true, + "command": true, + "pocket": true, + "advpocket": true, + "turtle": true, + "advturtle": true + } +} diff --git a/blocks/CCSystem/toolbox.xml b/blocks/CCSystem/toolbox.xml new file mode 100644 index 0000000..d664607 --- /dev/null +++ b/blocks/CCSystem/toolbox.xml @@ -0,0 +1,56 @@ + diff --git a/blocks/CCTextutils/block_design.json b/blocks/CCTextutils/block_design.json new file mode 100644 index 0000000..0257997 --- /dev/null +++ b/blocks/CCTextutils/block_design.json @@ -0,0 +1,237 @@ +{ + "textutils_slow_write": { + "message0": "Write %1 with rate %2", + "args0": [ + { + "type": "input_value", + "name": "TEXT", + "check": "String" + }, + { + "type": "input_value", + "name": "RATE", + "check": "Number" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 32, + "tooltip": "Slowly writes string text at current cursor position, character-by-character." + }, + "textutils_slow_print": { + "message0": "Print %1 with rate %2", + "args0": [ + { + "type": "input_value", + "name": "TEXT", + "check": "String" + }, + { + "type": "input_value", + "name": "RATE", + "check": "Number" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 32, + "tooltip": "Slowly prints string text at current cursor position, character-by-character." + }, + "textutils_format_time": { + "message0": "Format time from %1\n24-Hour %2", + "args0": [ + { + "type": "input_value", + "name": "TIME", + "check": "Number" + }, + { + "type": "field_checkbox", + "name": "24H" + } + ], + "output": "String", + "colour": 32, + "tooltip": "Takes input time and formats it in a more readable format such as 6:30 PM." + }, + "textutils_paged_print": { + "message0": "Print %1\nlimit %2 lines", + "args0": [ + { + "type": "input_value", + "name": "TEXT", + "check": "String" + }, + { + "type": "input_value", + "name": "FREELINES", + "check": "Number" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 32, + "tooltip": "Prints a given string to the display.", + "helpUrl": "https://tweaked.cc/module/textutils.html#v:pagedPrint" + }, + "textutils_tabulate": { + "message0": "Print table %1", + "args0": [ + { + "type": "input_value", + "name": "ARGS", + "check": "Multiple" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 32, + "tooltip": "Prints tables in a structured form.", + "helpUrl": "https://tweaked.cc/module/textutils.html#v:tabulate" + }, + "textutils_paged_tabulate": { + "message0": "Print table %1 with paged", + "args0": [ + { + "type": "input_value", + "name": "ARGS", + "check": "Multiple" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 32, + "tooltip": "Prints tables in a structured form, stopping and prompting for input should the result not fit on the terminal." + }, + "textutils_empty_json_array": { + "message0": "Empty json array", + "output": "Array", + "colour": 32, + "tooltip": "Prints tables in a structured form, stopping and prompting for input should the result not fit on the terminal." + }, + "textutils_json_null": { + "message0": "Json null", + "output": "Array", + "colour": 32, + "tooltip": "A table representing the JSON null value." + }, + "textutils_serialize": { + "message0": "Serialize %1\nCompact %2\nAllow repetitions %3", + "args0": [ + { + "type": "input_value", + "name": "OBJECT", + "check": "Array" + }, + { + "type": "field_checkbox", + "name": "COMPACT" + }, + { + "type": "field_checkbox", + "name": "ALLOWREPETI" + } + ], + "output": "String", + "colour": 32, + "tooltip": "Prints tables in a structured form, stopping and prompting for input should the result not fit on the terminal.", + "helpUrl": "https://tweaked.cc/module/textutils.html#v:serialize" + }, + "textutils_unserialize": { + "message0": "UnSerialize %1", + "args0": [ + { + "type": "input_value", + "name": "OBJECT", + "check": "String" + } + ], + "output": "Array", + "colour": 32, + "tooltip": "Converts a serialised string back into a reassembled Lua object." + }, + "textutils_serialize_json": { + "message0": "Serialize %1 to json\nNBT style %2\nUnicode %3\nAllow repetitions %4", + "args0": [ + { + "type": "input_value", + "name": "OBJECT", + "check": "String" + }, + { + "type": "field_checkbox", + "name": "NBT" + }, + { + "type": "field_checkbox", + "name": "UNICODE" + }, + { + "type": "field_checkbox", + "name": "ALLOWREPETI" + } + ], + "output": "String", + "colour": 32, + "tooltip": "Returns a JSON representation of the given data.", + "helpUrl": "https://tweaked.cc/module/textutils.html#v:serializeJSON" + }, + "textutils_unserialize_json": { + "message0": "UnSerialize %1 to json\nNBT style %2\nParse null %3\nParse empty array %4", + "args0": [ + { + "type": "input_value", + "name": "OBJECT", + "check": "String" + }, + { + "type": "field_checkbox", + "name": "NBT" + }, + { + "type": "field_checkbox", + "name": "PARSENULL" + }, + { + "type": "field_checkbox", + "name": "PARSEEA" + } + ], + "output": ["Array", "Multiple"], + "colour": 32, + "tooltip": "Converts a serialised JSON string back into a reassembled Lua object.", + "helpUrl": "https://tweaked.cc/module/textutils.html#v:unserializeJSON" + }, + "textutils_url_encode": { + "message0": "Encode URL %1", + "args0": [ + { + "type": "input_value", + "name": "URL", + "check": "String" + } + ], + "output": "String", + "colour": 32, + "tooltip": "Replaces certain characters in a string to make it safe for use in URLs or POST data." + }, + "textutils_complete": { + "message0": "Complete %1 in table %2", + "args0": [ + { + "type": "input_value", + "name": "SEARCH_TEXT", + "check": "String" + }, + { + "type": "input_value", + "name": "SEARCH_TABLE", + "check": "Table" + } + ], + "output": "Array", + "colour": 32, + "tooltip": "Provides a list of possible completions for a partial Lua expression.", + "helpUrl": "https://tweaked.cc/module/textutils.html#v:complete" + } +} diff --git a/blocks/CCTextutils/generator.js b/blocks/CCTextutils/generator.js new file mode 100644 index 0000000..d861d58 --- /dev/null +++ b/blocks/CCTextutils/generator.js @@ -0,0 +1,107 @@ +// this file not for generator only + +const { luaGenerator } = require('blockly/lua'); + +// Check if luaGenerator.forBlock is defined and initialize if necessary +if (!luaGenerator.forBlock) { + luaGenerator.forBlock = {}; +} + +luaGenerator.forBlock['textutils_slow_write'] = function(block, generator) { + var text = generator.valueToCode(block, 'TEXT', generator.ORDER_ATOMIC); + var rate = generator.valueToCode(block, 'RATE', generator.ORDER_ATOMIC); + + return `textutils.slowWrite(${text}, ${rate})\n`; +}; + +luaGenerator.forBlock['textutils_slow_print'] = function(block, generator) { + var text = generator.valueToCode(block, 'TEXT', generator.ORDER_ATOMIC); + var rate = generator.valueToCode(block, 'RATE', generator.ORDER_ATOMIC); + + return `textutils.slowPrint(${text}, ${rate})\n`; +}; + +luaGenerator.forBlock['textutils_format_time'] = function(block, generator) { + var time = generator.valueToCode(block, 'TIME', generator.ORDER_ATOMIC); + var is24hour = generator.valueToCode(block, '24H', generator.ORDER_ATOMIC); + + return [`textutils.formatTime(${time}, ${is24hour})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['textutils_paged_print'] = function(block, generator) { + var text = generator.valueToCode(block, 'TEXT', generator.ORDER_ATOMIC); + var freeline = generator.valueToCode(block, 'FREELINES', generator.ORDER_ATOMIC); + + return `textutils.pagedPrint(${text}, ${freeline})\n`; +}; + +luaGenerator.forBlock['textutils_tabulate'] = function(block, generator) { + var args = generator.valueToCode(block, 'ARGS', generator.ORDER_ATOMIC); + + return `textutils.tabulate(${args})\n`; +}; + +luaGenerator.forBlock['textutils_paged_tabulate'] = function(block, generator) { + var args = generator.valueToCode(block, 'ARGS', generator.ORDER_ATOMIC); + + return `textutils.pagedTabulate(${args})\n`; +}; + +luaGenerator.forBlock['textutils_empty_json_array'] = function(block, generator) { + return [`textutils.textutils_empty_json_array`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['textutils_json_null'] = function(block, generator) { + return [`textutils.json_null`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['textutils_serialize'] = function(block, generator) { + var object = generator.valueToCode(block, 'OBJECT', generator.ORDER_ATOMIC); + var compact = block.getFieldValue('COMPACT') == 'TRUE'; + var repetitions = block.getFieldValue('ALLOWREPETI') == 'TRUE'; + + + return [`textutils.serialize(${object}, {compact=${compact}, allow_repetitions=${repetitions}})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['textutils_unserialize'] = function(block, generator) { + var object = generator.valueToCode(block, 'OBJECT', generator.ORDER_ATOMIC); + + return [`textutils.unserialize(${object})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['textutils_serialize_json'] = function(block, generator) { + var object = generator.valueToCode(block, 'OBJECT', generator.ORDER_ATOMIC); + var nbt = block.getFieldValue('NBT') == 'TRUE'; + var unicode = block.getFieldValue('UNICODE') == 'TRUE'; + var repetitions = block.getFieldValue('ALLOWREPETI') == 'TRUE'; + + return [`textutils.serializeJSON(${object}, {nbt_style=${nbt}, unicode_strings=${unicode}, allow_repetitions=${repetitions}})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['textutils_unserialize_json'] = function(block, generator) { + var object = generator.valueToCode(block, 'OBJECT', generator.ORDER_ATOMIC); + var nbt = block.getFieldValue('NBT') == 'TRUE'; + var parse_null = block.getFieldValue('PARSENULL') == 'TRUE'; + var parse_empty_array = block.getFieldValue('PARSEEA') == 'TRUE'; + + return [`textutils.unserializeJSON(${object}, {nbt_style=${nbt}, parse_null=${parse_null}, parse_empty_array=${parse_empty_array}})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['textutils_url_encode'] = function(block, generator) { + var url = generator.valueToCode(block, 'URL', generator.ORDER_ATOMIC); + + return [`textutils.urlEncode(${url})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['textutils_complete'] = function(block, generator) { + var value_search_text = generator.valueToCode(block, 'SEARCH_TEXT', Blockly.Lua.ORDER_ATOMIC) || '""'; + var value_search_table = generator.valueToCode(block, 'SEARCH_TABLE', Blockly.Lua.ORDER_ATOMIC) || '_G'; + + if (value_search_table == "") { + return [`textutils.complete(${value_search_text})`]; + } else { + return [`textutils.complete(${value_search_text}, ${value_search_table})`]; + } +}; + diff --git a/blocks/CCTextutils/index.json b/blocks/CCTextutils/index.json new file mode 100644 index 0000000..56ea0d9 --- /dev/null +++ b/blocks/CCTextutils/index.json @@ -0,0 +1,22 @@ +{ + "name": "CC: Textutils", + "author": "DPSoftware Foundation", + "description": "Helpful utilities for formatting and manipulating strings.", + "version": "1.0.0", + "category": "utils", + "keyword": "utils", + "license": "GPL-3.0-or-later", + "peripherals": false, + "library": true, + "require_network": false, + "dependencies": {}, + "design_for_computer": { + "basic": true, + "adv": true, + "command": true, + "pocket": true, + "advpocket": true, + "turtle": true, + "advturtle": true + } +} diff --git a/blocks/CCTextutils/toolbox.xml b/blocks/CCTextutils/toolbox.xml new file mode 100644 index 0000000..3821179 --- /dev/null +++ b/blocks/CCTextutils/toolbox.xml @@ -0,0 +1,37 @@ + diff --git a/ccIDE Defines.xlsx b/ccIDE Defines.xlsx index f8a2af8df1a6af5b44698367644eb7f384023202..60f05f201d36bea8cfd4a99616f92fee695a1f1c 100644 GIT binary patch delta 15899 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 { reloadall(false); + var splash = new BrowserWindow({ + width: 600, + height: 300, + icon: path.join(__dirname, 'assets', 'ccIDEIcon.ico'), + transparent: true, + frame: false, + center: true, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + } + }); + + splash.loadFile('src/splash.html'); + splash.webContents.send("change-status", "Initializing...") + const win = new BrowserWindow({ width: 1280, height: 720, @@ -30,20 +46,17 @@ app.whenReady().then(() => { center: true, }) - var splash = new BrowserWindow({ - width: 600, - height: 300, - icon: path.join(__dirname, 'assets', 'ccIDEIcon.ico'), - transparent: true, - frame: false, - center: true - }); - - win.loadFile('src/index.html'); - splash.loadFile('src/splash.html'); + try { + win.loadFile('src/index.html'); + } catch { + try { + win.loadFile('dist_src/index.html'); + } catch { + dialog.showErrorBox("Error on startup", "Can't find index.html"); + } + } win.setTitle(`ccIDE`) - ipc.once('ready', () => { console.log("ready") if (splash) { @@ -57,9 +70,11 @@ app.whenReady().then(() => { dialog.showErrorBox("Error on startup", errormessage); //win.openDevTools(); }); + + ipc.on('update-startup-status', (event, status) => { + splash.webContents.send("change-status", status) + }); - - //app.on('activate', () => { // if (BrowserWindow.getAllWindows().length === 0) { // createWindow() @@ -80,7 +95,6 @@ app.whenReady().then(() => { } } - // Define a custom menu template const menuTemplate = [ { diff --git a/package-lock.json b/package-lock.json index f4b5ee9..c83a05f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "ccide", - "version": "1.0.2", + "version": "1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ccide", - "version": "1.0.2", + "version": "1.1", "license": "GPL-3.0-or-later", "dependencies": { - "@electron-fonts/noto-sans": "^1.2.0", + "@blockly/plugin-workspace-search": "^9.0.5", "@electron/remote": "^2.1.2", "blockly": "^11.1.1", "bootstrap": "^5.3.3", @@ -17,15 +17,30 @@ "xmldom": "^0.6.0" }, "devDependencies": { - "electron": "^31.1.0" + "electron": "^31.1.0", + "webpack": "^5.93.0", + "webpack-cli": "^5.1.4", + "webpack-node-externals": "^3.0.0" } }, - "node_modules/@electron-fonts/noto-sans": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@electron-fonts/noto-sans/-/noto-sans-1.2.0.tgz", - "integrity": "sha512-czys6R1EUpuc7sbK5h5SbVRE4HScbrnx4dlOrli7AyCWomSOYnAW+5nJevibZnTseFFe8MCdORaZoCe+LXe/1Q==", - "dependencies": { - "electron-css-injector": "1.3.0" + "node_modules/@blockly/plugin-workspace-search": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@blockly/plugin-workspace-search/-/plugin-workspace-search-9.0.5.tgz", + "integrity": "sha512-T6LGwXLtsrVi7LjcuRjHLu4uQGniu9GUBwBCka9/WfkpuUIp6LQSU5DzEhJvGrt7UHiadDaEbcIi82lTfwqV9w==", + "engines": { + "node": ">=8.17.0" + }, + "peerDependencies": { + "blockly": "^11.0.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" } }, "node_modules/@electron/get": { @@ -56,6 +71,64 @@ "electron": ">= 13.0.0" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -99,11 +172,43 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -137,6 +242,229 @@ "@types/node": "*" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/agent-base": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", @@ -148,6 +476,31 @@ "node": ">= 14" } }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -188,6 +541,38 @@ "@popperjs/core": "^2.11.8" } }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -196,6 +581,12 @@ "node": "*" } }, + "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/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -221,6 +612,49 @@ "node": ">=8" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", @@ -232,6 +666,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -243,6 +683,26 @@ "node": ">= 0.8" } }, + "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/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/cssstyle": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", @@ -385,16 +845,17 @@ "node": ">= 12.20.55" } }, - "node_modules/electron-css-injector": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/electron-css-injector/-/electron-css-injector-1.3.0.tgz", - "integrity": "sha512-xRpwgP2fYSkB21vtL6jC77p4Gn/bc6PH2M6kOe5tOJkUsznqk3kpDe/UHpuvehHH+MMn8Mf+g24PXEADWhSvIA==" - }, "node_modules/electron-prompt": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/electron-prompt/-/electron-prompt-1.7.0.tgz", "integrity": "sha512-IfqJYEgcRO6NuyPROo8AtdkAiZ6N9I1lQEf4dJAkPuhV5YgOHdmLqZJf6OXumZJfzrjpzCM5jHeYOrhGdgbnEA==" }, + "node_modules/electron-to-chromium": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.2.tgz", + "integrity": "sha512-kc4r3U3V3WLaaZqThjYz/Y6z8tJe+7K0bbjUVo3i+LWIypVdMx5nXCkwRe6SWbY6ILqLdc1rKcKmr3HoH7wjSQ==", + "dev": true + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -403,6 +864,19 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -422,6 +896,18 @@ "node": ">=6" } }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -443,12 +929,27 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "optional": true }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -461,6 +962,58 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -480,6 +1033,27 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -488,6 +1062,28 @@ "pend": "~1.2.0" } }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -518,7 +1114,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "optional": true, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -556,6 +1152,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "node_modules/global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -642,6 +1244,15 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -682,7 +1293,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "optional": true, + "devOptional": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -753,11 +1364,95 @@ "node": ">=0.10.0" } }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/jsdom": { "version": "23.0.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz", @@ -802,6 +1497,18 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -824,6 +1531,36 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -844,6 +1581,12 @@ "node": ">=10" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -876,6 +1619,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -917,6 +1672,42 @@ "node": ">=8" } }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -928,11 +1719,53 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -979,16 +1812,75 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", @@ -1022,6 +1914,26 @@ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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" + } + ] + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1038,6 +1950,24 @@ "node": ">=v12.22.7" } }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -1067,6 +1997,67 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -1084,11 +2075,99 @@ "node": ">= 8.0" } }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, "node_modules/tough-cookie": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", @@ -1147,6 +2226,45 @@ "node": ">= 4.0.0" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -1167,6 +2285,19 @@ "node": ">=18" } }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -1175,6 +2306,139 @@ "node": ">=12" } }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -1206,6 +2470,27 @@ "node": ">=18" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1263,13 +2548,17 @@ } }, "dependencies": { - "@electron-fonts/noto-sans": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@electron-fonts/noto-sans/-/noto-sans-1.2.0.tgz", - "integrity": "sha512-czys6R1EUpuc7sbK5h5SbVRE4HScbrnx4dlOrli7AyCWomSOYnAW+5nJevibZnTseFFe8MCdORaZoCe+LXe/1Q==", - "requires": { - "electron-css-injector": "1.3.0" - } + "@blockly/plugin-workspace-search": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@blockly/plugin-workspace-search/-/plugin-workspace-search-9.0.5.tgz", + "integrity": "sha512-T6LGwXLtsrVi7LjcuRjHLu4uQGniu9GUBwBCka9/WfkpuUIp6LQSU5DzEhJvGrt7UHiadDaEbcIi82lTfwqV9w==", + "requires": {} + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true }, "@electron/get": { "version": "2.0.3", @@ -1292,6 +2581,55 @@ "integrity": "sha512-EPwNx+nhdrTBxyCqXt/pftoQg/ybtWDW3DUWHafejvnB1ZGGfMpv6e15D8KeempocjXe78T7WreyGGb3mlZxdA==", "requires": {} }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -1322,11 +2660,43 @@ "@types/responselike": "^1.0.0" } }, + "@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -1360,6 +2730,198 @@ "@types/node": "*" } }, + "@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "requires": {} + }, + "@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true + }, + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "requires": {} + }, "agent-base": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", @@ -1368,6 +2930,25 @@ "debug": "^4.3.4" } }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1393,11 +2974,29 @@ "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", "requires": {} }, + "browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + } + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" }, + "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 + }, "cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -1417,6 +3016,29 @@ "responselike": "^2.0.0" } }, + "caniuse-lite": { + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", @@ -1425,6 +3047,12 @@ "mimic-response": "^1.0.0" } }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1433,6 +3061,23 @@ "delayed-stream": "~1.0.0" } }, + "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 + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "cssstyle": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", @@ -1526,16 +3171,17 @@ "extract-zip": "^2.0.1" } }, - "electron-css-injector": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/electron-css-injector/-/electron-css-injector-1.3.0.tgz", - "integrity": "sha512-xRpwgP2fYSkB21vtL6jC77p4Gn/bc6PH2M6kOe5tOJkUsznqk3kpDe/UHpuvehHH+MMn8Mf+g24PXEADWhSvIA==" - }, "electron-prompt": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/electron-prompt/-/electron-prompt-1.7.0.tgz", "integrity": "sha512-IfqJYEgcRO6NuyPROo8AtdkAiZ6N9I1lQEf4dJAkPuhV5YgOHdmLqZJf6OXumZJfzrjpzCM5jHeYOrhGdgbnEA==" }, + "electron-to-chromium": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.2.tgz", + "integrity": "sha512-kc4r3U3V3WLaaZqThjYz/Y6z8tJe+7K0bbjUVo3i+LWIypVdMx5nXCkwRe6SWbY6ILqLdc1rKcKmr3HoH7wjSQ==", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -1544,6 +3190,16 @@ "once": "^1.4.0" } }, + "enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -1554,6 +3210,12 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, + "envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true + }, "es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -1569,18 +3231,69 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "optional": true }, + "es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "optional": true }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "optional": true }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -1592,6 +3305,24 @@ "yauzl": "^2.10.0" } }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -1600,6 +3331,22 @@ "pend": "~1.2.0" } }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -1624,7 +3371,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "optional": true + "devOptional": true }, "get-intrinsic": { "version": "1.2.4", @@ -1647,6 +3394,12 @@ "pump": "^3.0.0" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -1711,6 +3464,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -1736,7 +3495,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "optional": true, + "devOptional": true, "requires": { "function-bind": "^1.1.2" } @@ -1789,11 +3548,68 @@ "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true + }, + "is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, "jsdom": { "version": "23.0.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz", @@ -1827,6 +3643,18 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -1849,6 +3677,27 @@ "json-buffer": "3.0.1" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -1863,6 +3712,12 @@ "escape-string-regexp": "^4.0.0" } }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -1886,6 +3741,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, "normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -1915,6 +3782,30 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -1923,11 +3814,44 @@ "entities": "^4.4.0" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, + "picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -1962,16 +3886,60 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "requires": { + "resolve": "^1.20.0" + } + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, "responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", @@ -1999,6 +3967,12 @@ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -2012,6 +3986,17 @@ "xmlchars": "^2.2.0" } }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -2032,6 +4017,55 @@ "type-fest": "^0.13.1" } }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -2046,11 +4080,57 @@ "debug": "^4.1.0" } }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + } + }, "tough-cookie": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", @@ -2093,6 +4173,25 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, + "update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "requires": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -2110,11 +4209,105 @@ "xml-name-validator": "^5.0.0" } }, + "watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" }, + "webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + } + }, + "webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + } + }, + "webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, "whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -2137,6 +4330,21 @@ "webidl-conversions": "^7.0.0" } }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 5873519..ea4fcbc 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,19 @@ "main": "index.js", "scripts": { "dev": "electron .", - "build": "electron-packager . ccIDE --platform=win32 --arch=x64 --icon=assets/ccIDEIcon.ico --out=dist --overwrite" + "build": "electron-packager . ccIDE --platform=win32 --arch=x64 --icon=assets/ccIDEIcon.ico --out=dist --overwrite", + "full_build": "webpack --mode production && electron-packager . ccIDE --platform=win32 --arch=x64 --icon=assets/ccIDEIcon.ico --out=dist --overwrite" }, "author": "DPSoftware Foundation", "license": "GPL-3.0-or-later", "devDependencies": { - "electron": "^31.1.0" + "electron": "^31.1.0", + "webpack": "^5.93.0", + "webpack-cli": "^5.1.4", + "webpack-node-externals": "^3.0.0" }, "dependencies": { + "@blockly/plugin-workspace-search": "^9.0.5", "@electron/remote": "^2.1.2", "blockly": "^11.1.1", "bootstrap": "^5.3.3", diff --git a/remote.lua b/remote.lua index f4bc528..d5597ae 100644 --- a/remote.lua +++ b/remote.lua @@ -2,31 +2,47 @@ local ws = assert(http.websocket("ws://127.0.0.1:5133")) print("connected to server") local id +local isrunning = true -while true do - print("ready") - local message, error = ws.receive() - if message then - print("Received message:", message) - if message == "ping" then - ws.send("pong") - elseif message == "sendcode" then - local file = io.open("main.lua", "w") - print("waiting for code") - local filedata, error = ws.receive() - file:write(filedata) - file:close() - elseif message == "runcode" then - shell.run("main") - elseif message == "exit" then +function exitcheck() + while true do + local event = os.pullEventRaw("terminate") + if event == "terminate" then print("Exiting...") + isrunning = false + ws.close() break end - - else - print("WebSocket error:", error) - break end end -ws.close() +function main() + while isrunning do + print("ready") + local message, error = ws.receive() + if message then + print("Received message:", message) + if message == "ping" then + ws.send("pong") + elseif message == "sendcode" then + local file = io.open("main.lua", "w") + print("waiting for code") + local filedata, error = ws.receive() + file:write(filedata) + file:close() + elseif message == "runcode" then + shell.run("main") + elseif message == "exit" then + print("Exiting...") + break + end + + else + print("WebSocket error:", error) + break + end + end +end + +parallel.waitForAny(exitcheck, main) +print("Exited") \ No newline at end of file diff --git a/src/ccRemote.js b/src/ccRemote.js index bd7be97..9fd687e 100644 --- a/src/ccRemote.js +++ b/src/ccRemote.js @@ -10,19 +10,61 @@ class CCRemote { console.log("Server is started"); this.socket.on('connection', (ws) => { + document.getElementById("navbar-button-computer-disconnect").disabled = false; + document.getElementById("navbar-button-computer-run").disabled = false; + + document.getElementById('statusMessage').textContent = "Computer connected"; + setTimeout(() => { + document.getElementById('statusMessage').textContent = `Ready`; + }, 1000); + console.log('WebSocket connection established.'); + // Set up heartbeat + ws.isAlive = true; + ws.on('pong', () => { + ws.isAlive = true; + }); + ws.on('message', (message) => { console.log(`Received message => ${message}`); }); + + ws.on('close', () => { + document.getElementById("navbar-button-computer-disconnect").disabled = true; + document.getElementById("navbar-button-computer-run").disabled = true; + + document.getElementById('statusMessage').textContent = "Computer disconnected"; + setTimeout(() => { + document.getElementById('statusMessage').textContent = `Ready`; + }, 1000); + }); + + ws.on('error', (error) => { + console.error('Client error:', error); + }); }); + // Ping clients every 30 seconds to check if they are alive + const interval = setInterval(() => { + this.socket.clients.forEach((ws) => { + if (ws.isAlive === false) { + console.log('Client did not respond to ping, terminating connection.'); + return ws.terminate(); + } + + ws.isAlive = false; + ws.ping(); + }); + }, 1000); + this.socket.on('close', () => { - console.log('WebSocket connection closed.'); + clearInterval(interval); + console.log('WebSocket server closed.'); }); this.socket.on('error', (error) => { - console.error('WebSocket error:', error); + console.error('WebSocket server error:', error); }); } @@ -36,7 +78,6 @@ class CCRemote { } sendCommand(command) { - // Iterate over each connected client and send the command this.socket.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(command); @@ -45,27 +86,20 @@ class CCRemote { } sendCode(Code) { - // Iterate over each connected client and send the command this.socket.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send("sendcode"); setTimeout(() => { client.send(Code); - return true }, 500); - } else { - return false } }); } + runCode() { - // Iterate over each connected client and send the command this.socket.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send("runcode"); - return true; - } else { - return false; } }); } @@ -77,7 +111,6 @@ class CCRemote { } }); } - } module.exports = { CCRemote }; diff --git a/src/index.html b/src/index.html index 0e3c49d..0419d7c 100644 --- a/src/index.html +++ b/src/index.html @@ -21,13 +21,15 @@ - - @@ -131,12 +133,8 @@ - - - - - + diff --git a/src/virtualcode.js b/src/index.js similarity index 72% rename from src/virtualcode.js rename to src/index.js index c69333b..30beb58 100644 --- a/src/virtualcode.js +++ b/src/index.js @@ -1,63 +1,78 @@ +const { ipcRenderer } = require("electron"); +const ipc = ipcRenderer; + // override prompt command window.prompt = function(promptText, defaultValue) { return ipc.sendSync("prompt", promptText, defaultValue); }; +ipc.send("update-startup-status", "Importing module...") const fs = require('fs'); const path = require('path'); -const { ipcRenderer } = require("electron"); const { loadperipheral, scanindex } = require("./blocksmanager"); const Blockly = require('blockly'); -const ipc = ipcRenderer; +const { WorkspaceSearch } = require("@blockly/plugin-workspace-search") let isprojectsaved = false; let isprojectopened = false; let usedlibinproject = [] +ipc.send("update-startup-status", "Initializing blockly workspace...") Blockly.utils.colour.setHsvSaturation(0.9) let originaltoolbar = fs.readFileSync(path.join(__dirname, "toolbox.xml"), 'utf8'); -// load some system library -const sysmodulejson = fs.readFileSync(path.join(__dirname, "module_block_design.json"), 'utf8'); -const blocksJson = JSON.parse(sysmodulejson); -for (const blockId in blocksJson) { - if (blocksJson.hasOwnProperty(blockId)) { - Blockly.Blocks[blockId] = { - init: function() { - this.jsonInit(blocksJson[blockId]); - } - }; - } -} -require("./module_generator") +try { + var workspace = Blockly.inject('blocklyDiv', { + toolbox: originaltoolbar, + trashcan: true, + grid: { + spacing: 20, + length: 3, + colour: '#ccc', + snap: true + }, + zoom:{ + controls: true, + wheel: true, + startScale: 1.0, + maxScale: 5, + minScale: 0.1, + scaleSpeed: 1.1, + pinch: true + } + }); -var workspace = Blockly.inject('blocklyDiv', { - toolbox: originaltoolbar, - trashcan: true, - grid: { - spacing: 20, - length: 3, - colour: '#ccc', - snap: true - }, - zoom:{ - controls: true, - wheel: true, - startScale: 1.0, - maxScale: 5, - minScale: 0.1, - scaleSpeed: 1.1, - pinch: true - } -}); + const workspaceSearch = new WorkspaceSearch(workspace); + workspaceSearch.init(); + + workspace.getToolbox().getFlyout().autoClose = false; +} catch (e) { + ipc.send("erroronstart", `Error on initializing workspace: ${e}`) +} try { + ipc.send("update-startup-status", "Importing system library...") + const sysmodulejson = fs.readFileSync(path.join(__dirname, "module_block_design.json"), 'utf8'); + const blocksJson = JSON.parse(sysmodulejson); + for (const blockId in blocksJson) { + if (blocksJson.hasOwnProperty(blockId)) { + Blockly.Blocks[blockId] = { + init: function() { + this.jsonInit(blocksJson[blockId]); + } + }; + } + } + require("./module_generator") + + ipc.send("update-startup-status", "Scanning library...") scanindex(); } catch (e) { ipc.send("erroronstart", `Error on loading block: ${e}`) } -workspace.getToolbox().getFlyout().autoClose = false; + +ipc.send("update-startup-status", "Initializing event...") ipc.on('export-lua-request', (event) => { console.log("exporting lua") @@ -111,6 +126,21 @@ ipc.on('load-workspace', (event, json) => { }, 1000); }) +ipc.on('workspace-saved', (event, success) => { + isprojectsaved = success + if (!isprojectopened) { + isprojectopened = true; + } + document.getElementById('statusMessage').textContent = `Project Saved`; + setTimeout(() => { + document.getElementById('statusMessage').textContent = `Ready`; + }, 1000); +}); + +ipc.on("open-about", () => { + document.getElementById('about-popup').style.display = 'block'; +}) + workspace.addChangeListener(function(event) { if ([Blockly.Events.UI, Blockly.Events.VIEWPORT_CHANGE, @@ -149,24 +179,15 @@ document.getElementById("packageman-import-btn").addEventListener('click', () => document.getElementById('statusMessage').textContent = `Ready`; }, 1000); }); - }); -ipc.on('workspace-saved', (event, success) => { - isprojectsaved = success - if (!isprojectopened) { - isprojectopened = true; - } - document.getElementById('statusMessage').textContent = `Project Saved`; - setTimeout(() => { - document.getElementById('statusMessage').textContent = `Ready`; - }, 1000); -}); - -ipc.on("open-about", () => { - document.getElementById('about-popup').style.display = 'block'; -}) - // Ensure Blockly container is shown after the workspace is injected -document.getElementById('statusMessage').textContent = `Ready`; -ipc.send("ready") \ No newline at end of file +ipc.send("update-startup-status", "Finished") +setTimeout(() => { + ipc.send("ready") +}, 500); + +document.getElementById('statusMessage').textContent = "Computer isn't connect"; +setTimeout(() => { + document.getElementById('statusMessage').textContent = `Ready`; +}, 10000); \ No newline at end of file diff --git a/src/module_block_design.json b/src/module_block_design.json index 0dfea80..9e8f084 100644 --- a/src/module_block_design.json +++ b/src/module_block_design.json @@ -67,7 +67,7 @@ "colour": 260 }, "sys_table_add_key_value": { - "message0": "Add key %1 with data %2", + "message0": "Add key %1 with data %2\nShorthand %3", "args0": [ { "type": "input_value", @@ -77,6 +77,10 @@ { "type": "input_value", "name": "VALUE" + }, + { + "type": "field_checkbox", + "name": "SHORT" } ], "output": "Array_Pair", @@ -95,7 +99,8 @@ "check": "Array" } ], - "output": "Array", + "previousStatement": null, + "nextStatement": null, "colour": 260 }, "ide_addcode": { @@ -121,5 +126,37 @@ ], "colour": 220, "tooltip": "Not require but make your code easy to read." + }, + "sys_exit": { + "message0": "Exit the code", + "previousStatement": null, + "colour": 38 + }, + "sys_write": { + "message0": "Write %1", + "args0": [ + { + "type": "input_value", + "name": "TEXT", + "check": "String" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 110, + "tooltip": "Writes a line of text to the screen without a newline at the end, wrapping text if necessary." + }, + "sys_print_error": { + "message0": "Print error %1", + "args0": [ + { + "type": "input_value", + "name": "ERROR" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 110, + "tooltip": "Prints the specified values to the screen in red, separated by spaces, wrapping if necessary. After printing, the cursor is moved to the next line." } } diff --git a/src/module_generator.js b/src/module_generator.js index f7b1f7c..a262c99 100644 --- a/src/module_generator.js +++ b/src/module_generator.js @@ -41,8 +41,12 @@ luaGenerator.forBlock['sys_table_unpack_to_args'] = function(block, generator) { luaGenerator.forBlock['sys_table_add_key_value'] = function(block, generator) { var key = generator.valueToCode(block, 'KEY', generator.ORDER_NONE); var value = generator.valueToCode(block, 'VALUE', generator.ORDER_NONE); - - return [`[${key}] = ${value}`, luaGenerator.ORDER_NONE]; + var shorted = block.getFieldValue('SHORT') == 'TRUE'; + if (!shorted) { + return [`[${key}] = ${value}`, luaGenerator.ORDER_NONE]; + } else { + return [`${key} = ${value}`, luaGenerator.ORDER_NONE]; + } }; luaGenerator.forBlock['sys_table_append_data'] = function(block, generator) { @@ -80,4 +84,21 @@ end main() ` return code; +}; + + +luaGenerator.forBlock['sys_exit'] = function(block, generator) { + return `exit()\n`; +}; + +luaGenerator.forBlock['sys_write'] = function(block, generator) { + var text = generator.valueToCode(block, 'TEXT', generator.ORDER_NONE); + + return `write(${text})\n`; +}; + +luaGenerator.forBlock['sys_print_error'] = function(block, generator) { + var error = generator.valueToCode(block, 'ERROR', generator.ORDER_NONE); + + return `printError(${error})\n`; }; \ No newline at end of file diff --git a/src/splash.html b/src/splash.html index 110db50..efe6c26 100644 --- a/src/splash.html +++ b/src/splash.html @@ -64,9 +64,18 @@
+
Initializing...
+ diff --git a/src/styles.css b/src/styles.css index 12f9219..2e07b8b 100644 --- a/src/styles.css +++ b/src/styles.css @@ -37,6 +37,16 @@ body { font-size: 1.5em; /* Adjust size as needed */ } +.navbar-button:disabled { + background-color: #7f8c8d; /* Gray color for disabled state */ + cursor: not-allowed; + opacity: 0.6; /* Makes the button look disabled */ +} + +.navbar-button:disabled svg { + fill: #ffffff; /* Change icon color if needed */ +} + .navbar-button:hover { background-color: #0066cc; /* Darken color on hover */ z-index: 99; diff --git a/src/toolbox.xml b/src/toolbox.xml index 8c0a866..275f0ba 100644 --- a/src/toolbox.xml +++ b/src/toolbox.xml @@ -3,14 +3,28 @@ - abc + Hello World! - abc + Hello World! + + + + + + + Hello World! + + + + + + + Hello World! @@ -60,9 +74,7 @@ - - - + @@ -176,7 +188,7 @@ - abc + Hello World! @@ -195,7 +207,7 @@ - abc + Hello World! @@ -216,7 +228,7 @@ - abc + Hello World! diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..28b28fe --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,30 @@ +const path = require('path'); +const nodeExternals = require('webpack-node-externals'); + +module.exports = { + mode: 'development', + entry: './index.js', + target: 'electron-main', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'bundle.js', + }, + externals: [nodeExternals()], + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'] + } + } + } + ] + }, + resolve: { + extensions: ['.js', '.json'] + }, +};